From mboxrd@z Thu Jan 1 00:00:00 1970 From: rrp@mipl.jpl.nasa.gov To: gnats-gnats@sourceware.cygnus.com Subject: gnats/229: gcc-3.0 reports segmentation fault Date: Thu, 02 Aug 2001 12:04:00 -0000 Message-id: <20010802190258.8129.qmail@sourceware.cygnus.com> X-SW-Source: 2001-q3/msg00028.html List-Id: >Number: 229 >Category: gnats >Synopsis: gcc-3.0 reports segmentation fault >Confidential: no >Severity: serious >Priority: high >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Aug 02 12:04:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: rrp@mipl.jpl.nasa.gov >Release: gcc-3.0 >Organization: >Environment: RedHat Linux 7.1 >Description: gcc-3.0 gives segmentation fault error. The exact error is g++ -W -Wall -Wpointer-arith -pipe -O3 -g -Wno-uninitialized -fno-implicit-templates -D_POSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -D_REENTRANT -DACE_HAS_AIO_CALLS -I/home/rrp/school/thesis/proj/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I/home/rrp/school/thesis/proj/ACE_wrappers/TAO -I/home/rrp/school/thesis/proj/ACE_wrappers/TAO/orbsvcs -I/home/rrp/school/thesis/proj/ACE_wrappers/TAO/orbsvcs/orbsvcs/ESF -c -fPIC -o .shobj/EC_ProxyConsumer.o Event/EC_ProxyConsumer.cpp Event/EC_ProxyConsumer.cpp: In member function `virtual void TAO_EC_ProxyPushConsumer::push(const RtecEventComm::EventSet&, CORBA::Environment&)': Event/EC_ProxyConsumer.cpp:333: Internal error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: I am not able to come up with a smaller testcase. To repeate the error, you have to build ACE+TAO on the above mentioned environment with inline and exceptions turned on. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="EC_ProxyConsumer.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="EC_ProxyConsumer.ii" IyAzICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmNwcCIKIyAxICJFdmVudC9FQ19Qcm94eUNvbnN1 bWVyLmgiIDEKIyAxNyAiRXZlbnQvRUNfUHJveHlDb25zdW1lci5oIgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE4ICJFdmVudC9F Q19Qcm94eUNvbnN1bWVyLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TLmgi IDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y YnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TLmgiCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl Y0V2ZW50Q2hhbm5lbEFkbWluUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tUy5oIiAxCiMg MjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNz L29yYnN2Y3MvUnRlY0V2ZW50Q29tbVMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tUy5o IiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y YnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVMuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlUy5oIgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQoj IDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zj cy9vcmJzdmNzL1RpbWVCYXNlUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZVMuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlUy5oIgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVC YXNlUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9UaW1lQmFzZUMuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlQy5oIiAyCiMgMSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3 ZC5oIiAxCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vY29yYmFmd2QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DRFJfQmFzZS5oIiAxCiMgMzEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DRFJfQmFzZS5oIgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDMy ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2Uu aCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv Y29uZmlnLWFsbC5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9jb25maWctYWxsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy5oIiAxCiMgOSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy5oIgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDEw ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLmgi IDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2Nv bmZpZy1saW51eC1jb21tb24uaCIgMQojIDEyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWxpbnV4LWNvbW1vbi5oIgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDEzICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWxpbnV4LWNvbW1v bi5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9jb25maWctbGludXgtY29tbW9uLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg MwojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lz L2NkZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMSAi L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgi IDEgMwojIDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI4ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWxpbnV4LWNvbW1vbi5o IiAyCiMgMTE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv Y29uZmlnLWxpbnV4LWNvbW1vbi5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9jb25maWctZysrLWNvbW1vbi5oIiAxCiMgMTEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctZysrLWNvbW1vbi5oIgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIg MQojIDEyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29u ZmlnLWcrKy1jb21tb24uaCIgMgojIDExMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1nKystY29tbW9uLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDExMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1nKystY29tbW9uLmgi IDIKIyAxMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9j b25maWctbGludXgtY29tbW9uLmgiIDIKIyAyODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctbGludXgtY29tbW9uLmgiCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDI4OCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1saW51eC1j b21tb24uaCIgMgojIDEyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvY29uZmlnLmgiIDIKIyA1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL2NvbmZpZy5oIgojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwoj IDE4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz LmgiIDEgMwojIDE5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNs dWRlL3NjaGVkLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9i aXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91 c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx OTkgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv aW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMzAgIi91 c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Vf Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg aW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9u X18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9u X18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0 cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWdu ZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5 cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBf X2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9f IHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5 cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRf dCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2lu dCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lu b190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7 CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlw ZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25n IF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50 IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lk X3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlw ZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190 Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Js a190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lk X3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoK CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcg aW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVm IF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsK dHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19m c2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBf X3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBl ZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3Rf dXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBp bnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o IiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQu aCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5Owog IH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3Qg X3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2Nr OwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9k ZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRh Y2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3Nj aGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBf X2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwog IHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBf X2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf X2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhy ZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGlu dCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsK ICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoK Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRy X3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0 aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAg aW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVh ZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dh aXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcnds b2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hh cmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRo cmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7 CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5 cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsK CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5j bHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDI3ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoK IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgi IDMKc3RydWN0IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwogICAgbG9uZyBpbnQg dHZfbnNlYzsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQu aCIgMwpzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9 OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpf X2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdz LCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKfQojIDMzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg MiAzCgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90 IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1 bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2No ZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0 aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS90aW1l LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMu MC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3RpbWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU2ICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNTcg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoK CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA3OSAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDgwICIv dXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsK IyA5MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDEgMwojIDkyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fdGltZXJf dCB0aW1lcl90OwojIDExOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0KewogIGlu dCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBp bnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5Owog IGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRt X3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNw ZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1 Y3Qgc2lnZXZlbnQ7CgoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgoKZXh0ZXJuIGNs b2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZSAodGltZV90 ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0aW1lX3QgX190 aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgp OwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl X3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRt ICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3RwKQogICAgIHRocm93ICgp OwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIp IHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3QgdGltZV90 ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yIChfX2Nv bnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0 IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190 cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1l cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0 IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz dHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRp bWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19y ZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX190em5hbWVbMl07CmV4 dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CgoKCgpleHRl cm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9uZTsKCgoKCgpl eHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0aHJvdyAoKTsKIyAyNzEg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0bSAq X190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAqX190 cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAoX19j b25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9f cmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBfX2Ns b2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xv Y2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVj ICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9zbGVlcCAoY2xv Y2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9j a19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19jbG9ja19pZCwK ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX2V2 cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlk KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBfX3RpbWVyaWQp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQs IGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0 aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMg Kl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuICh0 aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz CmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAo X19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMgMzU3ICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX19yZXNi dWZwKSB0aHJvdyAoKTsKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoj IDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zaWduYWwu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRl L3NpZ25hbC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdz ZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCnR5cGVkZWYgaW50 IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25n IGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAg fSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwojIDQ4ICIvdXNy L2luY2x1ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwojIDM3MSAi L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDI2ICIvdXNy L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5o IiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMg NTkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9J TkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9J TkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRI UkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0Kewog IFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAg UFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAK CiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQ VEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBU SFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQ VEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVB RF9NVVRFWF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0Kewog IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoK CmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xP Q0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJF Q1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tf UFJFRkVSX1dSSVRFUl9OUAp9OwojIDEzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpzdHJ1 Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICop OwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2Ns ZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJM RSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxf REVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi91c3Iv aW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90 ICpfX3Jlc3RyaWN0IF9fdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAoKTsKCgpleHRlcm4gcHRo cmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAo KTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRocmVh ZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93ICgp OwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9f YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVh ZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0 ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19k ZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRw YXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0 cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0 aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJp Y3QgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0 aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0 ciwgaW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2Nv cGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fZ3VhcmRz aXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX2d1YXJkc2l6ZSkKICAg ICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChw dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3RyaWN0 IF9fc3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9fY29uc3QgcHRocmVhZF9h dHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFj a3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAo X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKQog ICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVhZF90 IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9f cG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg c2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19w YXJhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1cnJlbmN5 ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3VycmVuY3kgKGlu dCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9p ZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFk X211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211 dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9t dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3Rp bWVkbG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3Ry aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq X19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5p dCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0 IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19h dHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFy ZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAo cHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQogICAgIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19jb25zdCBwdGhyZWFkX211 dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29u ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRy X3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25kX2F0dHIp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKHB0aHJlYWRfY29u ZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAo cHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv bmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25k LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJp Y3QgX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3 YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRf Y29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0 dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29uZGF0 dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0 IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0 cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRo cmVhZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJv eSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3Qg Kl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHJk bG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVz dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sgKHB0aHJlYWRfcnds b2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3Ry eXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4g aW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf cndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90 ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ry b3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRy X3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0 IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j a2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9ucCAoX19jb25zdCBwdGhy ZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3 bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJlZikgdGhyb3cgKCk7 CiMgNTA5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zcGlu X2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVkKQogICAgIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3Bpbmxv Y2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChw dGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2sp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9i YXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFy cmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJh dHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVy biBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJhdHRyX3Qg Kl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNo YXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hhcmVkIChwdGhy ZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFk X2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CiMg NTU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3Jl YXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgdGhyb3cg KCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19r ZXkpIHRocm93ICgpOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50 IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLAogICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQg Kl9fb2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlw ZSAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX3RocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9p ZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDYxMCAiL3Vzci9pbmNsdWRl L3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0cnVjdCBf cHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZv aWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAq X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVjdXRl KSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQg X3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZm ZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA2NDIgIi91c3IvaW5jbHVkZS9wdGhy ZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAoc3RydWN0 IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cg KCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAzMSAiL3Vz ci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sg KGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19zaWdzZXRf dCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Np Z3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMgNjU2 ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA2NzEgIi91c3IvaW5jbHVkZS9wdGhyZWFk LmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQp LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgdGhy b3cgKCk7Cgp9CiMgNTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9jb25maWcuaCIgMgojIDY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvY29uZmlnLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLmgiIDIKIyAyMCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMgojIDE0OSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFX2V4cG9y dC5oIiAxCiMgMTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9BQ0VfZXhwb3J0LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMQojIDExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvQUNFX2V4cG9ydC5oIiAyCiMgMTUwICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAyCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3N2Y19leHBvcnQuaCIg MQojIDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3Zj X2V4cG9ydC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9jb25maWctYWxsLmgiIDEKIyAxNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL3N2Y19leHBvcnQuaCIgMgojIDE1MSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMgojIDMwNyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvYWNlX3djaGFy LmgiIDEKIyAxMTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9hY2Vfd2NoYXIuaCIKdHlwZWRlZiBjaGFyIEFDRV9UQ0hBUjsKdHlwZWRlZiB3Y2hhcl90IEFD RV9BTlRJX1RDSEFSOwojIDI5NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL2FjZV93Y2hhci5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9hY2Vfd2NoYXIuaW5sIiAxCiMgMjk1ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvYWNlX3djaGFyLmgiIDIKIyAzMDggIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDIK IyAzMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25m aWctYWxsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09TX0Vycm5vLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09TX0Vycm5vLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FcnJuby5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWcuaCIgMQojIDIwICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRXJybm8uaCIgMgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FeHBvcnQu aCIgMQojIDEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1NfRXhwb3J0LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL2NvbmZpZy1hbGwuaCIgMQojIDExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1NfRXhwb3J0LmgiIDIKIyAyMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0Vycm5vLmgiIDIKIyAzMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0Vycm5vLmgiCiMgMSAiL3Vz ci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2Vycm5vLmgi IDIgMwoKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEg MwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xp bnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMg NSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0 cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4g aW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgi IDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9p bnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5 ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDMyICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRXJybm8uaCIgMgoj IDEwMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0Vy cm5vLmgiCmNsYXNzIEFDRV9FcnJub19HdWFyZAp7CnB1YmxpYzoKCgogIEFDRV9FcnJub19HdWFy ZCAoaW50ICZlcnJub19yZWYsCiAgICAgICAgICAgICAgICAgICBpbnQgZXJyb3IpOwoKCgogIEFD RV9FcnJub19HdWFyZCAoaW50ICZlcnJub19yZWYpOwoKCiAgfkFDRV9FcnJub19HdWFyZCAodm9p ZCk7CgoKCgoKCgogIGludCBvcGVyYXRvcj0gKGludCBlcnJvcik7CgoKICBpbnQgb3BlcmF0b3I9 PSAoaW50IGVycm9yKTsKCgogIGludCBvcGVyYXRvciE9IChpbnQgZXJyb3IpOwoKcHJpdmF0ZToK CiAgaW50ICplcnJub19wdHJfOwoKICBpbnQgZXJyb3JfOwp9OwoKCgoKCgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FcnJuby5pbmwiIDEKIyAy OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0Vycm5v LmlubCIKaW5saW5lCkFDRV9FcnJub19HdWFyZDo6QUNFX0Vycm5vX0d1YXJkIChpbnQgJmVycm5v X3JlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlcnJvcikKICA6Cgog ICAgZXJybm9fcHRyXyAoJmVycm5vX3JlZiksCgogICAgZXJyb3JfIChlcnJvcikKewoKCgp9Cgpp bmxpbmUKQUNFX0Vycm5vX0d1YXJkOjpBQ0VfRXJybm9fR3VhcmQgKGludCAmZXJybm9fcmVmKQog IDoKCiAgICBlcnJub19wdHJfICgmZXJybm9fcmVmKSwKCiAgICBlcnJvcl8gKGVycm5vX3JlZikK ewp9CgppbmxpbmUKQUNFX0Vycm5vX0d1YXJkOjp+QUNFX0Vycm5vX0d1YXJkICh2b2lkKQp7Cgog ICplcnJub19wdHJfID0gdGhpcy0+ZXJyb3JfOwoKCgp9CiMgNzEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FcnJuby5pbmwiCmlubGluZSBpbnQKQUNF X0Vycm5vX0d1YXJkOjpvcGVyYXRvcj0gKGludCBlcnJvcikKewogIHJldHVybiB0aGlzLT5lcnJv cl8gPSBlcnJvcjsKfQoKaW5saW5lIGludApBQ0VfRXJybm9fR3VhcmQ6Om9wZXJhdG9yPT0gKGlu dCBlcnJvcikKewogIHJldHVybiB0aGlzLT5lcnJvcl8gPT0gZXJyb3I7Cn0KCmlubGluZSBpbnQK QUNFX0Vycm5vX0d1YXJkOjpvcGVyYXRvciE9IChpbnQgZXJyb3IpCnsKICByZXR1cm4gdGhpcy0+ ZXJyb3JfICE9IGVycm9yOwp9CiMgMTQzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1NfRXJybm8uaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE0NiAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0Vycm5vLmgiIDIKIyAzMzggIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDIK IyAzNjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25m aWctYWxsLmgiCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL25ldyIgMSAz CiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNy L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMSAzCiMgMzEgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzggIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMKIyAxICIvdXNy L2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZf dDsKIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRk ZWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6 OnNpemVfdDsKfQojIDMyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvY3N0ZGRl ZiIgMiAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9uZXciIDIgMwoj IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDM0 ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCmV4dGVybiAi QysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgog ICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93 KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpOwogIH07Cgog IGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAg IGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigp IHRocm93KCk7CiAgfTsKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwog IHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgogIHRlcm1pbmF0ZV9oYW5k bGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CiAgdm9pZCB0ZXJt aW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogIHVuZXhwZWN0ZWRfaGFu ZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CiAgdm9pZCB1 bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICBib29sIHVuY2F1 Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyAzNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu Y2x1ZGUvZysrLXYzL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiAg Y2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRf YWxsb2MoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9 OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhy b3c7CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25l d19oYW5kbGVyKG5ld19oYW5kbGVyKTsKfQoKCnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVf dCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXpl X3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKikg dGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICopIHRocm93KCk7CnZvaWQgKm9w ZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2 b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0 aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190 JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICosIGNvbnN0IHN0ZDo6bm90 aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90 LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3Bl cmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBs YWNlOyB9Cn0KIyAzNjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9jb25maWctYWxsLmgiIDIKIyA0OTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiCmV4dGVybiBpbnQgYWNlX2V4aXRfaG9va19t YXJrZXI7CgoKZXh0ZXJuICJDIgp7CiAgdHlwZWRlZiB2b2lkICgqQUNFX0VYSVRfSE9PSykgKHZv aWQpOwp9CiMgNTExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvY29uZmlnLWFsbC5oIgpjbGFzcyBBQ0VfT1NfVGhyZWFkX0Rlc2NyaXB0b3I7CmNsYXNzIEFD RV9PU19Mb2dfTXNnX0F0dHJpYnV0ZXM7CnR5cGVkZWYgdm9pZCAoKkFDRV9JTklUX0xPR19NU0df SE9PSykgKEFDRV9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMgJmF0dHIKCgoKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CnR5cGVkZWYgdm9pZCAoKkFDRV9JTkhFUklUX0xP R19NU0dfSE9PSykgKEFDRV9PU19UaHJlYWRfRGVzY3JpcHRvciosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMgJik7Cgp0 eXBlZGVmIHZvaWQgKCpBQ0VfQ0xPU0VfTE9HX01TR19IT09LKSAodm9pZCk7Cgp0eXBlZGVmIHZv aWQgKCpBQ0VfU1lOQ19MT0dfTVNHX0hPT0spIChjb25zdCBBQ0VfVENIQVIgKnByb2dfbmFtZSk7 Cgp0eXBlZGVmIEFDRV9PU19UaHJlYWRfRGVzY3JpcHRvciAqKCpBQ0VfVEhSX0RFU0NfTE9HX01T R19IT09LKSAodm9pZCk7CiMgNTQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIgp0eXBlZGVmIGludCBBQ0VfSEFORExFOwp0eXBlZGVm IEFDRV9IQU5ETEUgQUNFX1NPQ0tFVDsKCgoKCnR5cGVkZWYgdm9pZCAqKCpBQ0VfVEhSX0ZVTkMp KHZvaWQgKik7CiMgNTYwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvY29uZmlnLWFsbC5oIgpleHRlcm4gIkMiCnsKCgoKCgoKCnR5cGVkZWYgdm9pZCAqKCpB Q0VfVEhSX0NfRlVOQykodm9pZCAqKTsKCn0KIyA2MDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDYwMyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMgojIDM0 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2Uu aCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL0Jhc2ljX1R5cGVzLmgiIDEKIyA0OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgNDkgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9CYXNpY19UeXBlcy5oIiAyCgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDEK IyA1MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2lj X1R5cGVzLmgiIDIKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2Fs L2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRz LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2Nj LTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIg MSAzCiMgMTMwICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEg MwojIDI2ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTQ0ICIvdXNyL2lu Y2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEg MwojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9s aW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3Iv aW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bv c2l4MV9saW0uaCIgMiAzCiMgMTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2luY2x1ZGUv bGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMK IyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9zdGRpb19saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5o IiAyIDMKIyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0cy94b3Bl bl9saW0uaCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMSAiL3Vz ci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl L2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xvY2Fs L2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRz LmgiIDIgMwojIDU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvQmFzaWNfVHlwZXMuaCIgMgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyA1OSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDIKIyAx ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy93YWl0ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRl L2JpdHMvd2FpdHN0YXR1cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAy MiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi IDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUv ZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91 c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0 dXMuaCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAg ICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWdu ZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4 OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0 ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6 ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBp bnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAyIDMKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCnR5cGVkZWYg c3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVk ZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxk aXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25n IGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwojIDEzMyAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21h eCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpf X25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBh dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBs b25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0 b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g bG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg dGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpf X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4 dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCgpf X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18K ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKIyAy MTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgi IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9j YWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNv bnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90 b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDIx MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9s X2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVu c2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4g bG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJu IGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2Fs ZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRl cm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsK ZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91Ymxl IF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3Vw KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNp Z25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4 dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7 CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3Vs bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKIyAyOTQgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp CnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4 dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpIHRo cm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9f YmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRl cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBm bG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9mX2ludGVybmFsIChf X25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUKc3RydG9s ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9f ZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcg aW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBf X3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2lu dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBf X2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9f ZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19u cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpIHRo cm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg X19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFy ICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSBf X251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIp IHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251 bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpf X25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251 bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQK YXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvbGwg KF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0 ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMg MjYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCmV4dGVybiAiQyIg ewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vf c2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVf bG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRf dDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoK CnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsK CgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoK CnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsK CgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoK CgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CiMgMTAxICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXpl X3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRk cl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoK CnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi91c3IvbG9jYWwv Z2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMTQxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7 CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTg0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9f KSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9f KSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9f KSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9f KSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRl ZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwoj IDIwNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlh bi5oIiAxIDMKIyAyMDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNy L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRl L3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK IyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUv c3lzL3NlbGVjdC5oIiAyIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2MyAiL3Vzci9pbmNs dWRlL2JpdHMvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg NjQgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMiAzCgoKCnN0cnVjdCB0aW1ldmFsCiAgewog ICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDYg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fZmRf bWFzazsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRz WzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoK CnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CiMgODkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0 LmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBm ZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpf X3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJp Y3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0 cmljdCBfX3RpbWVvdXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9f bmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBm ZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQg Kl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IHRpbWVzcGVjICpfX3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25z dCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxMCAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lz bWFjcm9zLmgiIDEgMwojIDIxMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5 cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxr Y250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19m c2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjUxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK dHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBm c2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyAz OTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5k b20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBf X3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGlu dCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpf X3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGlu dDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBp bnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50 MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25l ZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVy biBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3Qg X19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1 ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19z dGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVz dHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cg KCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoK CgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVy YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4g bG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4 ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg aW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5z aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5k NDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBp bnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4 dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAo KTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9f eFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hv cnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBs b25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJh bmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91 YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3Ig KHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg ICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBs cmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAg ICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBz aG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGlu dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3Ig KGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAg dGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVk MTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZl cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9f cGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1 ZmZlcikgdGhyb3cgKCk7CiMgNTI4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZv aWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z aXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0 ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19w dHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgp OwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9h bGxvY2EuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9p bmNsdWRlL2FsbG9jYS5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91c3Iv aW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqYWxs b2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ4ICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhf bWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19z aXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVy biB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f KSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2 b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lk IGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f XykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25z dCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52 IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYg KGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25z dCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAg ICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDYy NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9f dGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3Rl bXBsYXRlKSB0aHJvdyAoKTsKIyA2NDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g aW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjUxICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5k KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9f Y29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA2NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0 aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lk ICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9m bl90OwoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2Nv bnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBz aXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNv cnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg ICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGlu dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcg aW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25n IGludCBfX3gpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK CgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcg aW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9u ZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs b25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwojIDcyOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0 IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwK ICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln bikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBf X25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChs b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpl eHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAg ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0 IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVj dnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVj cHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jl c3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln biwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xl bikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGlu dCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwg aW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry aWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxv bmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQg Kl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAg ICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoK CgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19u KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2No YXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChj aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoK CmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsK IyA4MDkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hh ciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19j b25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9f Y29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVu cHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50 IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cg KCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZs ZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRo cm93ICgpOwoKCgoKCn0KIyA2MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDIKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAxIDMKIyA2OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0VfZXhwb3J0LmgiIDEKIyA3MSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDIKIyAxNjggIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9CYXNpY19UeXBlcy5o IgogICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBBQ0VfVUlOVDY0OwojIDE3OSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVz LmgiCiAgdHlwZWRlZiBzaG9ydCBBQ0VfSU5UMTY7CiAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBB Q0VfVUlOVDE2OwojIDIwMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL0Jhc2ljX1R5cGVzLmgiCnR5cGVkZWYgQUNFX1VJTlQxNiBBQ0VfVVNIT1JUMTY7CgoK ICB0eXBlZGVmIGludCBBQ0VfSU5UMzI7CiAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgQUNFX1VJTlQz MjsKIyAyMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9C YXNpY19UeXBlcy5oIgogICAgdHlwZWRlZiB1X2ludCBwdHJfYXJpdGhfdDsKIyA1ODYgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9CYXNpY19UeXBlcy5oIgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9CYXNpY19U eXBlcy5pIiAxCiMgNTg3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvQmFzaWNfVHlwZXMuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDU5MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDIKIyA0MCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9CYXNlLmgiIDIKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9j ay5oIiAxCiMgMTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9NZXNzYWdlX0Jsb2NrLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL0FDRS5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgoKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMjAg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMg MzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJl bnQuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1NfRGlyZW50LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL3ByZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMjEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaCIgMgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FeHBvcnQuaCIg MQojIDIyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Nf RGlyZW50LmgiIDIKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI5 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRGlyZW50 LmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNy L2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgMTc1ICIvdXNyL2luY2x1ZGUv dW5pc3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzCiMgMTc2 ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vu dmlyb25tZW50cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNs dWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDIgMwojIDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAyIDMKIyAxOTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3R5cGVzLmgiIDEgMwojIDE5MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKIyAxOTkg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjAwICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDI0MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz CnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBz b2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBhY2Nl c3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZXVpZGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIHRocm93 ICgpOwojIDI5MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX29mZl90IGxzZWVr IChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKIyAz MDIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmY2NF90IGxzZWVrNjQgKGlu dCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVh ZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpIHRocm93ICgpOwoKCmV4 dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90 IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IHByZWFkIChpbnQgX19mZCwgdm9pZCAq X19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBfX29mZnNldCkKICAgICB0aHJvdyAoKTsK ZXh0ZXJuIHNzaXplX3QgcHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6 ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KSB0aHJvdyAo KTsKIyAzNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVfdCBwcmVhZDY0 IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAg ICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVfdCBw d3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAg ICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJdKSB0aHJvdyAoKTsKIyAzNjIgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICh1bnNpZ25lZCBp bnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKIyAzNzEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl eHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIF9fdXNlY29uZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVl LCBfX3VzZWNvbmRzX3QgX19pbnRlcnZhbCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1 c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50 IHBhdXNlICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjaG93biAoX19jb25zdCBjaGFy ICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgp OwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRf dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGNob3duIChfX2NvbnN0IGNoYXIg Kl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19mZCkgdGhyb3cgKCk7CiMgNDIzICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAqX19idWYsIHNpemVfdCBf X3NpemUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpnZXRfY3VycmVudF9kaXJfbmFtZSAo dm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAqX19idWYpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IGR1cDIgKGludCBfX2ZkLCBpbnQgX19mZDIpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICoq X19lbnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwoKCgoKCmV4dGVybiBpbnQgZXhlY3Zl IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwKICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu dCBmZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwgY2hhciAqX19jb25z dCBfX2VudnBbXSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZXhlY3YgKF9fY29uc3Qg Y2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBleGVjbGUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAu Li4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg X19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBleGVjdnAg KF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBjaGFy ICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbmljZSAoaW50IF9faW5jKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0dXMpIF9fYXR0cmlidXRl X18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1l LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCmVudW0KICB7CiAg ICBfUENfTElOS19NQVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoK ICAgIF9QQ19OQU1FX01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoK ICAgIF9QQ19DSE9XTl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJ U0FCTEUsCgogICAgX1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklP X0lPLAoKICAgIF9QQ19TT0NLX01BWEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRTLAoKICAgIF9Q Q19SRUNfSU5DUl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFLAoKICAgIF9Q Q19SRUNfTUlOX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX1hGRVJfQUxJR04KCiAgfTsKCgplbnVt CiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RD SywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJF QU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBf U0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklU WV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywK CiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBf U0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBf U0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01F U1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9S WV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAg ICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBf U0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoK ICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1T X01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAg IF9TQ19USU1FUl9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1f TUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAg X1NDX0NPTExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0Nf RVhQUl9ORVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgog ICAgX1NDX0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0Nf Ml9DX0JJTkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1ND XzJfRk9SVF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgog ICAgX1NDX1BJSSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBf U0NfUElJX0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9T Q19TRUxFQ1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX0lPVl9NQVggPSBfU0NfVUlP X01BWElPViwKCiAgICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVS TkVUX0RHUkFNLAoKICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywK CiAgICBfU0NfUElJX09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKCiAgICBfU0NfVEhSRUFE UywKCiAgICBfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TLAoKICAgIF9TQ19HRVRHUl9SX1NJWkVf TUFYLAoKICAgIF9TQ19HRVRQV19SX1NJWkVfTUFYLAoKICAgIF9TQ19MT0dJTl9OQU1FX01BWCwK CiAgICBfU0NfVFRZX05BTUVfTUFYLAoKICAgIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJ T05TLAoKICAgIF9TQ19USFJFQURfS0VZU19NQVgsCgogICAgX1NDX1RIUkVBRF9TVEFDS19NSU4s CgogICAgX1NDX1RIUkVBRF9USFJFQURTX01BWCwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tB RERSLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUsCgogICAgX1NDX1RIUkVBRF9QUklP UklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USFJFQURfUFJJT19JTkhFUklULAoKICAgIF9TQ19U SFJFQURfUFJJT19QUk9URUNULAoKICAgIF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQsCgoKICAg IF9TQ19OUFJPQ0VTU09SU19DT05GLAoKICAgIF9TQ19OUFJPQ0VTU09SU19PTkxOLAoKICAgIF9T Q19QSFlTX1BBR0VTLAoKICAgIF9TQ19BVlBIWVNfUEFHRVMsCgogICAgX1NDX0FURVhJVF9NQVgs CgogICAgX1NDX1BBU1NfTUFYLAoKCiAgICBfU0NfWE9QRU5fVkVSU0lPTiwKCiAgICBfU0NfWE9Q RU5fWENVX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1VOSVgsCgogICAgX1NDX1hPUEVOX0NSWVBU LAoKICAgIF9TQ19YT1BFTl9FTkhfSTE4TiwKCiAgICBfU0NfWE9QRU5fU0hNLAoKCiAgICBfU0Nf Ml9DSEFSX1RFUk0sCgogICAgX1NDXzJfQ19WRVJTSU9OLAoKICAgIF9TQ18yX1VQRSwKCgogICAg X1NDX1hPUEVOX1hQRzIsCgogICAgX1NDX1hPUEVOX1hQRzMsCgogICAgX1NDX1hPUEVOX1hQRzQs CgoKICAgIF9TQ19DSEFSX0JJVCwKCiAgICBfU0NfQ0hBUl9NQVgsCgogICAgX1NDX0NIQVJfTUlO LAoKICAgIF9TQ19JTlRfTUFYLAoKICAgIF9TQ19JTlRfTUlOLAoKICAgIF9TQ19MT05HX0JJVCwK CiAgICBfU0NfV09SRF9CSVQsCgogICAgX1NDX01CX0xFTl9NQVgsCgogICAgX1NDX05aRVJPLAoK ICAgIF9TQ19TU0laRV9NQVgsCgogICAgX1NDX1NDSEFSX01BWCwKCiAgICBfU0NfU0NIQVJfTUlO LAoKICAgIF9TQ19TSFJUX01BWCwKCiAgICBfU0NfU0hSVF9NSU4sCgogICAgX1NDX1VDSEFSX01B WCwKCiAgICBfU0NfVUlOVF9NQVgsCgogICAgX1NDX1VMT05HX01BWCwKCiAgICBfU0NfVVNIUlRf TUFYLAoKCiAgICBfU0NfTkxfQVJHTUFYLAoKICAgIF9TQ19OTF9MQU5HTUFYLAoKICAgIF9TQ19O TF9NU0dNQVgsCgogICAgX1NDX05MX05NQVgsCgogICAgX1NDX05MX1NFVE1BWCwKCiAgICBfU0Nf TkxfVEVYVE1BWCwKCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1hCUzVfSUxQ MzJfT0ZGQklHLAoKICAgIF9TQ19YQlM1X0xQNjRfT0ZGNjQsCgogICAgX1NDX1hCUzVfTFBCSUdf T0ZGQklHLAoKCiAgICBfU0NfWE9QRU5fTEVHQUNZLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRSwK CiAgICBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUywKCgogICAgX1NDX0FEVklTT1JZX0lORk8s CgogICAgX1NDX0JBUlJJRVJTLAoKICAgIF9TQ19CQVNFLAoKICAgIF9TQ19DX0xBTkdfU1VQUE9S VCwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlRfUiwKCiAgICBfU0NfQ0xPQ0tfU0VMRUNUSU9OLAoK ICAgIF9TQ19DUFVUSU1FLAoKICAgIF9TQ19USFJFQURfQ1BVVElNRSwKCiAgICBfU0NfREVWSUNF X0lPLAoKICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUMsCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQ19S LAoKICAgIF9TQ19GRF9NR01ULAoKICAgIF9TQ19GSUZPLAoKICAgIF9TQ19QSVBFLAoKICAgIF9T Q19GSUxFX0FUVFJJQlVURVMsCgogICAgX1NDX0ZJTEVfTE9DS0lORywKCiAgICBfU0NfRklMRV9T WVNURU0sCgogICAgX1NDX01PTk9UT05JQ19DTE9DSywKCiAgICBfU0NfTVVMVElQTEVfUFJPQ0VT UywKCiAgICBfU0NfU0lOR0xFX1BST0NFU1MsCgogICAgX1NDX05FVFdPUktJTkcsCgogICAgX1ND X1JFQURFUl9XUklURVJfTE9DS1MsCgogICAgX1NDX1NQSU5fTE9DS1MsCgogICAgX1NDX1JFR0VY UCwKCiAgICBfU0NfUkVHRVhfVkVSU0lPTiwKCiAgICBfU0NfU0hFTEwsCgogICAgX1NDX1NJR05B TFMsCgogICAgX1NDX1NQQVdOLAoKICAgIF9TQ19TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1RI UkVBRF9TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRSwKCiAgICBfU0Nf U1lTVEVNX0RBVEFCQVNFX1IsCgogICAgX1NDX1RJTUVPVVRTLAoKICAgIF9TQ19UWVBFRF9NRU1P UllfT0JKRUNUUywKCiAgICBfU0NfVVNFUl9HUk9VUFMsCgogICAgX1NDX1VTRVJfR1JPVVBTX1Is CgogICAgX1NDXzJfUEJTLAoKICAgIF9TQ18yX1BCU19BQ0NPVU5USU5HLAoKICAgIF9TQ18yX1BC U19MT0NBVEUsCgogICAgX1NDXzJfUEJTX01FU1NBR0UsCgogICAgX1NDXzJfUEJTX1RSQUNLLAoK ICAgIF9TQ19TWU1MT09QLAoKICAgIF9TQ19TVFJFQU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BP SU5UCgogIH07CgoKCgoKZW51bQogIHsKICAgIF9DU19QQVRICgoKCgogICAgLAogICAgX0NTX0xG U19DRkxBR1MgPSAxMDAwLAoKICAgIF9DU19MRlNfTERGTEFHUywKCiAgICBfQ1NfTEZTX0xJQlMs CgogICAgX0NTX0xGU19MSU5URkxBR1MsCgogICAgX0NTX0xGUzY0X0NGTEFHUywKCiAgICBfQ1Nf TEZTNjRfTERGTEFHUywKCiAgICBfQ1NfTEZTNjRfTElCUywKCiAgICBfQ1NfTEZTNjRfTElOVEZM QUdTCgoKCgogICAgLAogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMCwKCiAg ICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMy X0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1 X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xERkxBR1Ms CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZG QklHX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1Nf WEJTNV9MUDY0X09GRjY0X0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSUJTLAoK ICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09G RkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NT X1hCUzVfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJTlRG TEFHUwoKCiAgfTsKIyA1MDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKZXh0ZXJuIGxv bmcgaW50IHBhdGhjb25mIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fbmFtZSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpIHRo cm93ICgpOwoKCmV4dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1lKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBzaXplX3QgY29uZnN0ciAoaW50 IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g X19waWRfdCBnZXRwaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3BpZF90IGdldHBwaWQg KHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkgdGhyb3cg KCk7CiMgNTM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3QgX19nZXRw Z2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCmV4dGVybiBfX3BpZF90IGdldHBnaWQgKF9f cGlkX3QgX19waWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQgKF9fcGlkX3Qg X19waWQsIF9fcGlkX3QgX19wZ2lkKSB0aHJvdyAoKTsKIyA1NjIgIi91c3IvaW5jbHVkZS91bmlz dGQuaCIgMwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDU4MCAiL3Vzci9p bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9pZCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKCmV4 dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fdWlkX3QgZ2V0 ZXVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSB0aHJv dyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBz ZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBf X3BpZF90IGZvcmsgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAo dm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUgKGludCBfX2ZkKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6 ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc2F0dHkgKGludCBfX2ZkKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHR0eXNsb3QgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzeW1saW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19j b25zdCBjaGFyICpfX3RvKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcmVhZGxpbmsgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5s aW5rIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBybWRpciAo X19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpOwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBn cnAgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRjc2V0cGdycCAoaW50IF9fZmQs IF9fcGlkX3QgX19wZ3JwX2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICh2 b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZ2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBz aXplX3QgX19uYW1lX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGxvZ2luIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNzI2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZ2V0 b3B0LmgiIDMKZXh0ZXJuICJDIiB7CiMgNDcgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRl cm4gY2hhciAqb3B0YXJnOwojIDYxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGlu dCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMg MTQ1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGludCBnZXRvcHQgKGludCBfX2Fy Z2MsIGNoYXIgKmNvbnN0ICpfX2FyZ3YsIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKTsKIyAxNzQg Ii91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwp9CiMgNzI3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDIgMwoKCgoKCgoKZXh0ZXJuIGludCBnZXRob3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3Qg X19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNo YXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXRob3N0 aWQgKGxvbmcgaW50IF9faWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFt ZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHNldGRv bWFpbm5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoK CgoKCmV4dGVybiBpbnQgdmhhbmd1cCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCByZXZv a2UgKF9fY29uc3QgY2hhciAqX19maWxlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHJv ZmlsICh1bnNpZ25lZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwK ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUp IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgYWNjdCAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo cm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0 ZXJuIHZvaWQgZW5kdXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgc2V0dXNl cnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9j aGRpciwgaW50IF9fbm9jbG9zZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2hyb290IChf X2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChf X2NvbnN0IGNoYXIgKl9fcHJvbXB0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZzeW5jIChp bnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQp IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHN5bmMgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBnZXRwYWdlc2l6ZSAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgoKZXh0ZXJuIGludCB0cnVuY2F0ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2Zm X3QgX19sZW5ndGgpIHRocm93ICgpOwojIDgzNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiBpbnQgdHJ1bmNhdGU2NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRfdCBfX2xl bmd0aCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2Zm X3QgX19sZW5ndGgpIHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgdGhyb3cgKCk7CiMgODY2 ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKnNicmsgKGludHB0cl90IF9fZGVsdGEpIHRocm93 ICgpOwojIDg4NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBsb25nIGludCBzeXNj YWxsIChsb25nIGludCBfX3N5c25vLCAuLi4pIHRocm93ICgpOwojIDkwNyAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2Zm X3QgX19sZW4pIHRocm93ICgpOwojIDkxNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVy biBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2NF90IF9fbGVuKSB0aHJv dyAoKTsKIyA5MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZkYXRhc3lu YyAoaW50IF9fZmlsZGVzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjcnlwdCAoX19j b25zdCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQpIHRocm93ICgpOwoKCgpleHRl cm4gdm9pZCBlbmNyeXB0IChjaGFyICpfX2Jsb2NrLCBpbnQgX19lZGZsYWcpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gdm9pZCBzd2FiIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19mcm9tLCB2 b2lkICpfX3Jlc3RyaWN0IF9fdG8sCiAgICAgICAgICAgICAgICAgIHNzaXplX3QgX19uKSB0aHJv dyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoj IDk4MyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsg KHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpf X2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCn0KIyAzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0RpcmVudC5oIiAyCgojIDEgIi91c3IvaW5jbHVk ZS9kaXJlbnQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMK CmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAi L3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZGlyZW50LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUv Yml0cy9kaXJlbnQuaCIgMwpzdHJ1Y3QgZGlyZW50CiAgewoKICAgIF9faW5vX3QgZF9pbm87CiAg ICBfX29mZl90IGRfb2ZmOwoKCgoKICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAg IHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwoKCnN0cnVj dCBkaXJlbnQ2NAogIHsKICAgIF9faW5vNjRfdCBkX2lubzsKICAgIF9fb2ZmNjRfdCBkX29mZjsK ICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAgIHVuc2lnbmVkIGNoYXIgZF90eXBl OwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwojIDYzICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi IDIgMwojIDk4ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZW51bQogIHsKICAgIERUX1VOS05P V04gPSAwLAoKICAgIERUX0ZJRk8gPSAxLAoKICAgIERUX0NIUiA9IDIsCgogICAgRFRfRElSID0g NCwKCiAgICBEVF9CTEsgPSA2LAoKICAgIERUX1JFRyA9IDgsCgogICAgRFRfTE5LID0gMTAsCgog ICAgRFRfU09DSyA9IDEyLAoKICAgIERUX1dIVCA9IDE0CgogIH07CiMgMTI4ICIvdXNyL2luY2x1 ZGUvZGlyZW50LmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19kaXJzdHJlYW0gRElSOwoKCgpleHRlcm4g RElSICpvcGVuZGlyIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgY2xvc2VkaXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKIyAxNDYgIi91c3IvaW5jbHVkZS9k aXJlbnQuaCIgMwpleHRlcm4gc3RydWN0IGRpcmVudCAqcmVhZGRpciAoRElSICpfX2RpcnApIHRo cm93ICgpOwojIDE1NiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBzdHJ1Y3QgZGly ZW50NjQgKnJlYWRkaXI2NCAoRElSICpfX2RpcnApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IHJlYWRkaXJfciAoRElSICpfX3Jlc3RyaWN0IF9fZGlycCwKICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkaXJlbnQgKl9fcmVzdHJpY3QgX19lbnRyeSwKICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkaXJlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKIyAxNzkgIi91 c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IHJlYWRkaXI2NF9yIChESVIgKl9fcmVz dHJpY3QgX19kaXJwLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKl9f cmVzdHJpY3QgX19lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudDY0 ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCByZXdpbmRk aXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDEgMwojIDE5MCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKCgpleHRlcm4gdm9pZCBz ZWVrZGlyIChESVIgKl9fZGlycCwgbG9uZyBpbnQgX19wb3MpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGludCB0ZWxsZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBk aXJmZCAoRElSICpfX2RpcnApIHRocm93ICgpOwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9wb3NpeDFfbGltLmgiIDEgMwojIDIxMCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyAy MjAgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjIx ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDIgMwoKCgoKCgpleHRlcm4gaW50IHNjYW5kaXIgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RpciwKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZGlyZW50ICoqKl9fcmVzdHJpY3QgX19uYW1lbGlzdCwKICAgICAgICAgICAgICAgICAgICBpbnQg KCpfX3NlbGVjdG9yKSAoX19jb25zdCBzdHJ1Y3QgZGlyZW50ICopLAogICAgICAgICAgICAgICAg ICAgIGludCAoKl9fY21wKSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKSkgdGhyb3cg KCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIGludCBzY2FuZGlyNjQg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkaXJlbnQ2NCAqKipfX3Jlc3RyaWN0IF9fbmFtZWxpc3QsCiAgICAgICAgICAgICAgICAg ICAgICBpbnQgKCpfX3NlbGVjdG9yKSAoX19jb25zdCBzdHJ1Y3QgZGlyZW50NjQgKiksCiAgICAg ICAgICAgICAgICAgICAgICBpbnQgKCpfX2NtcCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZv aWQgKikpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBhbHBoYXNvcnQgKF9fY29uc3Qgdm9pZCAq X19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwojIDI2OSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBpbnQgYWxw aGFzb3J0NjQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgdmVyc2lv bnNvcnQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDI5MCAiL3Vzci9pbmNsdWRlL2RpcmVu dC5oIiAzCmV4dGVybiBpbnQgdmVyc2lvbnNvcnQ2NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2Nv bnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CiMgMzAwICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBnZXRkaXJl bnRyaWVzIChpbnQgX19mZCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19vZmZfdCAqX19yZXN0cmljdCBfX2Jhc2VwKSB0aHJvdyAoKTsKIyAzMTYgIi91 c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gX19zc2l6ZV90IGdldGRpcmVudHJpZXM2NCAo aW50IF9fZmQsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX29mZjY0X3QgKl9fcmVzdHJpY3QgX19iYXNlcCkgdGhyb3cgKCk7CgoKCgp9CiMgMzMg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQu aCIgMgojIDcxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1NfRGlyZW50LmgiCnR5cGVkZWYgRElSIEFDRV9ESVI7CiMgODQgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaCIKY2xhc3MgQUNFX09TX0Rp cmVudAp7CnB1YmxpYzoKICBzdGF0aWMgQUNFX0RJUiAqb3BlbmRpciAoY29uc3QgQUNFX1RDSEFS ICpmaWxlbmFtZSk7CiAgc3RhdGljIHZvaWQgY2xvc2VkaXIgKEFDRV9ESVIgKik7CiAgc3RhdGlj IHN0cnVjdCBkaXJlbnQgKnJlYWRkaXIgKEFDRV9ESVIgKik7CiAgc3RhdGljIGludCByZWFkZGly X3IgKEFDRV9ESVIgKmRpcnAsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQg KmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICoqcmVzdWx0KTsK ICBzdGF0aWMgbG9uZyB0ZWxsZGlyIChBQ0VfRElSICopOwogIHN0YXRpYyB2b2lkIHNlZWtkaXIg KEFDRV9ESVIgKiwKICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvYyk7CiAgc3RhdGljIHZv aWQgcmV3aW5kZGlyIChBQ0VfRElSICopOwoKcHJpdmF0ZToKCiAgc3RhdGljIEFDRV9ESVIgKm9w ZW5kaXJfZW11bGF0aW9uIChjb25zdCBBQ0VfVENIQVIgKmZpbGVuYW1lKTsKICBzdGF0aWMgdm9p ZCBjbG9zZWRpcl9lbXVsYXRpb24gKEFDRV9ESVIgKik7CiAgc3RhdGljIHN0cnVjdCBkaXJlbnQg KnJlYWRkaXJfZW11bGF0aW9uIChBQ0VfRElSICopOwp9OwoKCgoKCgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaW5sIiAxCgoKCgoK CmlubGluZSBBQ0VfRElSICoKQUNFX09TX0RpcmVudDo6b3BlbmRpciAoY29uc3QgQUNFX1RDSEFS ICpmaWxlbmFtZSkKewojIDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvT1NfRGlyZW50LmlubCIKICByZXR1cm4gOjpvcGVuZGlyIChjb25zdF9jYXN0PGNo YXIgKj4gKGZpbGVuYW1lKSk7CgoKCgoKCn0KCmlubGluZSB2b2lkCkFDRV9PU19EaXJlbnQ6OmNs b3NlZGlyIChBQ0VfRElSICpkKQp7CiMgNzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaW5sIgogIDo6Y2xvc2VkaXIgKGQpOwoKCgoKCgp9 CgppbmxpbmUgc3RydWN0IGRpcmVudCAqCkFDRV9PU19EaXJlbnQ6OnJlYWRkaXIgKEFDRV9ESVIg KmQpCnsKIyAxMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9PU19EaXJlbnQuaW5sIgogIHJldHVybiA6OnJlYWRkaXIgKGQpOwoKCgoKCgp9CgppbmxpbmUg aW50CkFDRV9PU19EaXJlbnQ6OnJlYWRkaXJfciAoQUNFX0RJUiAqZGlycCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkaXJlbnQgKipyZXN1bHQpCnsKIyAxNDYgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaW5sIgogIHJldHVybiA6OnJl YWRkaXJfciAoZGlycCwgZW50cnksIHJlc3VsdCk7CiMgMTY1ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRGlyZW50LmlubCIKfQoKaW5saW5lIGxvbmcK QUNFX09TX0RpcmVudDo6dGVsbGRpciAoQUNFX0RJUiAqZCkKewoKICByZXR1cm4gOjp0ZWxsZGly IChkKTsKCgoKCn0KCmlubGluZSB2b2lkCkFDRV9PU19EaXJlbnQ6OnNlZWtkaXIgKEFDRV9ESVIg KmQsIGxvbmcgbG9jKQp7CgogIDo6c2Vla2RpciAoZCwgbG9jKTsKCgoKCn0KCmlubGluZSB2b2lk CkFDRV9PU19EaXJlbnQ6OnJld2luZGRpciAoQUNFX0RJUiAqZCkKewojIDIwNCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0RpcmVudC5pbmwiCiAgIDo6 c2Vla2RpciAoZCwgbG9uZyAoMCkpOwoKCgoKfQojIDExMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0RpcmVudC5oIiAyCgoKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMTE0ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRGlyZW50LmgiIDIK IyAzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgi IDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Nf U3RyaW5nLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TX1N0cmluZy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMQojIDIxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiIDIKCgoK CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19F eHBvcnQuaCIgMQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1NfU3RyaW5nLmgiIDIKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI4ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiIDIKIyA0 MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmlu Zy5oIgpjbGFzcyBBQ0VfT1NfU3RyaW5nCnsKcHVibGljOgojIDUzICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiCiAgc3RhdGljIGNvbnN0 IHZvaWQgKm1lbWNociAoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBsZW4pOwoKCiAgc3Rh dGljIHZvaWQgKm1lbWNociAodm9pZCAqcywgaW50IGMsIHNpemVfdCBsZW4pOwoKCiAgc3RhdGlj IGludCBtZW1jbXAgKGNvbnN0IHZvaWQgKnQsIGNvbnN0IHZvaWQgKnMsIHNpemVfdCBsZW4pOwoK CiAgc3RhdGljIHZvaWQgKm1lbWNweSAodm9pZCAqdCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGxl bik7CgoKICBzdGF0aWMgdm9pZCAqbWVtbW92ZSAodm9pZCAqdCwgY29uc3Qgdm9pZCAqcywgc2l6 ZV90IGxlbik7CgoKICBzdGF0aWMgdm9pZCAqbWVtc2V0ICh2b2lkICpzLCBpbnQgYywgc2l6ZV90 IGxlbik7CgoKICBzdGF0aWMgY2hhciAqc3RyY2F0IChjaGFyICpzLCBjb25zdCBjaGFyICp0KTsK IyA4MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0 cmluZy5oIgogIHN0YXRpYyBjb25zdCBjaGFyICpzdHJjaHIgKGNvbnN0IGNoYXIgKnMsIGludCBj KTsKIyA4OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T X1N0cmluZy5oIgogIHN0YXRpYyBjaGFyICpzdHJjaHIgKGNoYXIgKnMsIGludCBjKTsKCgoKCgoK CiAgc3RhdGljIGludCBzdHJjbXAgKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQpOwoKCgoK CgoKICBzdGF0aWMgY2hhciAqc3RyY3B5IChjaGFyICpzLCBjb25zdCBjaGFyICp0KTsKIyAxMTQg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcu aCIKICBzdGF0aWMgc2l6ZV90IHN0cmNzcG4gKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnJl amVjdCk7CiMgMTIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1NfU3RyaW5nLmgiCiAgc3RhdGljIGNoYXIgKnN0cmVycm9yIChpbnQgZXJybnVtKTsKCgog IHN0YXRpYyBzaXplX3Qgc3RybGVuIChjb25zdCBjaGFyICpzKTsKCgoKCgoKCiAgc3RhdGljIGNo YXIgKnN0cm5jYXQgKGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQsIHNpemVfdCBsZW4pOwoKCgoKCgoK ICBzdGF0aWMgaW50IHN0cm5jbXAgKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQsIHNpemVf dCBsZW4pOwoKCgoKCgoKICBzdGF0aWMgY2hhciAqc3RybmNweSAoY2hhciAqcywgY29uc3QgY2hh ciAqdCwgc2l6ZV90IGxlbik7CgoKCgoKCgogIHN0YXRpYyBjb25zdCBjaGFyICpzdHJwYnJrIChj b25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOwoKCgoKCgoKICBzdGF0aWMgY2hhciAqc3Ry cGJyayAoY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKIyAxNzUgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaCIKICBzdGF0aWMgY29uc3Qg Y2hhciAqc3RycmNociAoY29uc3QgY2hhciAqcywgaW50IGMpOwojIDE4NCAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5oIgogIHN0YXRpYyBj aGFyICpzdHJyY2hyIChjaGFyICpzLCBpbnQgYyk7CiMgMTkzICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiCiAgc3RhdGljIHNpemVfdCBz dHJzcG4gKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CiMgMjAzICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiCiAgc3RhdGlj IGNvbnN0IGNoYXIgKnN0cnN0ciAoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCk7CiMgMjEy ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5n LmgiCiAgc3RhdGljIGNoYXIgKnN0cnN0ciAoY2hhciAqcywgY29uc3QgY2hhciAqdCk7CgoKCgoK CgogIHN0YXRpYyBjaGFyICpzdHJ0b2sgKGNoYXIgKnMsIGNvbnN0IGNoYXIgKnRva2Vucyk7CiMg MjQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3Ry aW5nLmgiCiAgc3RhdGljIGludCBhY2VfaXNwcmludCAoY29uc3QgQUNFX1RDSEFSIGMpOwoKCiAg c3RhdGljIGludCBhY2VfaXNzcGFjZSAoY29uc3QgQUNFX1RDSEFSIGMpOwoKCiAgc3RhdGljIGlu dCB0b19sb3dlciAoaW50IGMpOwojIDI2NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5oIgogIHN0YXRpYyBjaGFyICppdG9hIChpbnQgdmFs dWUsIGNoYXIgKnN0cmluZywgaW50IHJhZGl4KTsKCgoKCgoKCiAgc3RhdGljIGludCBzdHJjYXNl Y21wIChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICp0KTsKIyAyODQgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaCIKICBzdGF0aWMgY29u c3QgY2hhciAqc3RybmNociAoY29uc3QgY2hhciAqcywgaW50IGMsIHNpemVfdCBsZW4pOwojIDI5 MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmlu Zy5oIgogIHN0YXRpYyBjaGFyICpzdHJuY2hyIChjaGFyICpzLCBpbnQgYywgc2l6ZV90IGxlbik7 CgoKCgoKCgogIHN0YXRpYyBpbnQgc3RybmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNo YXIgKnQsIHNpemVfdCBsZW4pOwojIDMxMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5oIgogIHN0YXRpYyBjaGFyICpzdHJlY3B5IChjaGFy ICpkZXMsIGNvbnN0IGNoYXIgKnNyYyk7CiMgMzIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiCiAgc3RhdGljIGNvbnN0IGNoYXIgKnN0 cm5zdHIgKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQsIHNpemVfdCBsZW4pOwojIDMzMSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5o IgogIHN0YXRpYyBjaGFyICpzdHJuc3RyIChjaGFyICpzLCBjb25zdCBjaGFyICp0LCBzaXplX3Qg bGVuKTsKCgoKCgoKCiAgc3RhdGljIGNoYXIgKnN0cmR1cCAoY29uc3QgY2hhciAqcyk7CgoKCgoK CgogIHN0YXRpYyBjaGFyICpzdHJ0b2tfciAoY2hhciAqcywgY29uc3QgY2hhciAqdG9rZW5zLCBj aGFyICoqbGFzdHMpOwoKCgogIHN0YXRpYyBkb3VibGUgc3RydG9kIChjb25zdCBjaGFyICpzLCBj aGFyICoqZW5kcHRyKTsKIyAzNjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9PU19TdHJpbmcuaCIKICBzdGF0aWMgbG9uZyBzdHJ0b2wgKGNvbnN0IGNoYXIg KnMsIGNoYXIgKipwdHIsIGludCBiYXNlKTsKCgoKCgoKCiAgc3RhdGljIHVuc2lnbmVkIGxvbmcg c3RydG91bCAoY29uc3QgY2hhciAqcywgY2hhciAqKnB0ciwgaW50IGJhc2UpOwojIDM3NyAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5oIgpw cml2YXRlOgojIDM4OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09TX1N0cmluZy5oIgogIHN0YXRpYyBjaGFyICppdG9hX2VtdWxhdGlvbiAoaW50IHZhbHVl LCBjaGFyICpzdHJpbmcsIGludCByYWRpeCk7CiMgMzk4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiCiAgc3RhdGljIGNvbnN0IHZvaWQg Km1lbWNocl9lbXVsYXRpb24gKGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3QgbGVuKTsKIyA1 NjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJp bmcuaCIKfTsKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvT1NfU3RyaW5nLmlubCIgMQojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlubCIKIyAxICIvdXNyL2luY2x1ZGUvbWVt b3J5LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbWVtb3J5LmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9tZW1vcnkuaCIgMiAzCgoKCiMg MSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZv aWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQg Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpt ZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAg ICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3Qg X19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg Km1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24p CiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZv aWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZv aWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0 IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoK ZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNo YXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50 IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBp bnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhm cm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcu aCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv bnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0 LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChf X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVf dCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAo X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19j b25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3Qg Y2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq X19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl cm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAq X19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4 dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3Qg Y2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9f c3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9w dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9f aGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQg Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQg Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVt cGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0 ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFy ICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRo cm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpf X2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8g KHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChf X2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoK CmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0 KSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKGNvbnN0KSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9u ZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4 dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGlu dCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoK ZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNl Y21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2Vw IChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3Ry dmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25h bCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhy b3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy ICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgp OwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAo KTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUp IHRocm93ICgpOwojIDM2MyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyAzMSAiL3Vzci9p bmNsdWRlL21lbW9yeS5oIiAyIDMKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5pbmwiIDIKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAxIDMKIyAzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TX1N0cmluZy5pbmwiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwoj IDMxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3Ry aW5nLmlubCIgMgojIDM5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1NfU3RyaW5nLmlubCIKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMjYg Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg MwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv dHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCmV4dGVybiAiQyIg ewojIDQwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4u aCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lT dXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkp LAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkp ID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEg PDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgp IDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0 KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgo MSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8 IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9 ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lT YmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkp LAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkp ID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgo MSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkg PDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5o IiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4g X19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQz Ml90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVy biBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRo cm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNk aWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpl eHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50 IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAo KTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxh bmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAo aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMTY4ICIvdXNyL2luY2x1ZGUv Y3R5cGUuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnRvbG93ZXIgKGludCBfX2MpIHRocm93ICgp CnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90b2xvd2VyW19f Y10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50IF9fYykgdGhyb3cg KCkKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvdXBwZXJb X19jXSA6IF9fYzsKfQojIDIxMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyMTIgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKIyAy MjQgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwg X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2FscGhhX2wgKGludCwgX19sb2Nh bGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cg KCk7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgX19pc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgX19pc3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19p c3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3NwYWNl X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGlu dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3hkaWdpdF9sIChpbnQsIF9f bG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2lzYmxhbmtfbCAoaW50LCBfX2xvY2Fs ZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2Nh bGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9f bG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0K IyA0MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0 cmluZy5pbmwiIDIKCmlubGluZSBjb25zdCB2b2lkICoKQUNFX09TX1N0cmluZzo6bWVtY2hyIChj b25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IGxlbikKewoKCgoKCiAgcmV0dXJuIEFDRV9PU19T dHJpbmc6Om1lbWNocl9lbXVsYXRpb24gKHMsIGMsIGxlbik7Cgp9CgppbmxpbmUgdm9pZCAqCkFD RV9PU19TdHJpbmc6Om1lbWNociAodm9pZCAqcywgaW50IGMsIHNpemVfdCBsZW4pCnsKICByZXR1 cm4gY29uc3RfY2FzdDx2b2lkICo+IChBQ0VfT1NfU3RyaW5nOjptZW1jaHIgKHN0YXRpY19jYXN0 PGNvbnN0IHZvaWQgKj4gKHMpLCBjLCBsZW4pKTsKCn0KCgppbmxpbmUgaW50CkFDRV9PU19TdHJp bmc6Om1lbWNtcCAoY29uc3Qgdm9pZCAqdCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGxlbikKewoK CgogIHJldHVybiA6Om1lbWNtcCAodCwgcywgbGVuKTsKCn0KCgppbmxpbmUgdm9pZCAqCkFDRV9P U19TdHJpbmc6Om1lbWNweSAodm9pZCAqdCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGxlbikKewoK CgogIHJldHVybiA6Om1lbWNweSAodCwgcywgbGVuKTsKCn0KCmlubGluZSB2b2lkICoKQUNFX09T X1N0cmluZzo6bWVtbW92ZSAodm9pZCAqdCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGxlbikKewoK CgogIHJldHVybiA6Om1lbW1vdmUgKHQsIHMsIGxlbik7Cgp9CgppbmxpbmUgdm9pZCAqCkFDRV9P U19TdHJpbmc6Om1lbXNldCAodm9pZCAqcywgaW50IGMsIHNpemVfdCBsZW4pCnsKCgoKICByZXR1 cm4gOjptZW1zZXQgKHMsIGMsIGxlbik7Cgp9CgppbmxpbmUgY2hhciAqCkFDRV9PU19TdHJpbmc6 OnN0cmNhdCAoY2hhciAqcywgY29uc3QgY2hhciAqdCkKewoKCgogIHJldHVybiA6OnN0cmNhdCAo cywgdCk7Cgp9CiMgMTI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1NfU3RyaW5nLmlubCIKaW5saW5lIGNvbnN0IGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpz dHJjaHIgKGNvbnN0IGNoYXIgKnMsIGludCBjKQp7CgoKCgoKICByZXR1cm4gKGNvbnN0IGNoYXIg KikgOjpzdHJjaHIgKHMsIGMpOwoKfQojIDE0OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5pbmwiCmlubGluZSBjaGFyICoKQUNFX09TX1N0 cmluZzo6c3RyY2hyIChjaGFyICpzLCBpbnQgYykKewoKCgoKCiAgcmV0dXJuIDo6c3RyY2hyIChz LCBjKTsKCn0KIyAxNjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgaW50CkFDRV9PU19TdHJpbmc6OnN0cmNtcCAoY29u c3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkKewoKCgogIHJldHVybiA6OnN0cmNtcCAocywgdCk7 Cgp9CiMgMTkxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1NfU3RyaW5nLmlubCIKaW5saW5lIGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpzdHJjcHkgKGNoYXIg KnMsIGNvbnN0IGNoYXIgKnQpCnsKCgoKICByZXR1cm4gOjpzdHJjcHkgKHMsIHQpOwoKfQojIDIx MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmlu Zy5pbmwiCmlubGluZSBzaXplX3QKQUNFX09TX1N0cmluZzo6c3RyY3NwbiAoY29uc3QgY2hhciAq cywgY29uc3QgY2hhciAqcmVqZWN0KQp7CgoKCgoKICByZXR1cm4gOjpzdHJjc3BuIChzLCByZWpl Y3QpOwoKfQojIDIzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09TX1N0cmluZy5pbmwiCmlubGluZSBjaGFyICoKQUNFX09TX1N0cmluZzo6c3RyZXJyb3Ig KGludCBlcnJudW0pCnsKCgoKICByZXR1cm4gOjpzdHJlcnJvciAoZXJybnVtKTsKCn0KCmlubGlu ZSBzaXplX3QKQUNFX09TX1N0cmluZzo6c3RybGVuIChjb25zdCBjaGFyICpzKQp7CgoKCiAgcmV0 dXJuIDo6c3RybGVuIChzKTsKCn0KIyAyNjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgY2hhciAqCkFDRV9PU19TdHJp bmc6OnN0cm5jYXQgKGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQsIHNpemVfdCBsZW4pCnsKCgoKICBy ZXR1cm4gOjpzdHJuY2F0IChzLCB0LCBsZW4pOwoKfQojIDI5MSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5pbmwiCmlubGluZSBpbnQKQUNF X09TX1N0cmluZzo6c3RybmNtcCAoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCwgc2l6ZV90 IGxlbikKewoKCgogIHJldHVybiA6OnN0cm5jbXAgKHMsIHQsIGxlbik7Cgp9CiMgMzEzICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlubCIK aW5saW5lIGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpzdHJuY3B5IChjaGFyICpzLCBjb25zdCBjaGFy ICp0LCBzaXplX3QgbGVuKQp7CgoKCiAgcmV0dXJuIDo6c3RybmNweSAocywgdCwgbGVuKTsKCn0K IyAzMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19T dHJpbmcuaW5sIgppbmxpbmUgY29uc3QgY2hhciAqCkFDRV9PU19TdHJpbmc6OnN0cnBicmsgKGNv bnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKewoKCgoKCiAgcmV0dXJuIChjb25zdCBjaGFy ICopIDo6c3RycGJyayAoczEsIHMyKTsKCn0KIyAzNTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgY2hhciAqCkFDRV9P U19TdHJpbmc6OnN0cnBicmsgKGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKewoKCgoKCiAgcmV0 dXJuIDo6c3RycGJyayAoczEsIHMyKTsKCn0KIyAzODAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgY29uc3QgY2hhciAq CkFDRV9PU19TdHJpbmc6OnN0cnJjaHIgKGNvbnN0IGNoYXIgKnMsIGludCBjKQp7CgoKCgoKICBy ZXR1cm4gKGNvbnN0IGNoYXIgKikgOjpzdHJyY2hyIChzLCBjKTsKCn0KIyA0MDQgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxp bmUgY2hhciAqCkFDRV9PU19TdHJpbmc6OnN0cnJjaHIgKGNoYXIgKnMsIGludCBjKQp7CgoKCgoK ICByZXR1cm4gOjpzdHJyY2hyIChzLCBjKTsKCn0KIyA0MjUgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgc2l6ZV90CkFD RV9PU19TdHJpbmc6OnN0cnNwbiAoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkKewoKCgoK CiAgcmV0dXJuIDo6c3Ryc3BuIChzLCB0KTsKCn0KIyA0NDkgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgY29uc3QgY2hh ciAqCkFDRV9PU19TdHJpbmc6OnN0cnN0ciAoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkK ewoKCgogIHJldHVybiAoY29uc3QgY2hhciAqKSA6OnN0cnN0ciAocywgdCk7Cgp9CiMgNDcxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlu bCIKaW5saW5lIGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpzdHJzdHIgKGNoYXIgKnMsIGNvbnN0IGNo YXIgKnQpCnsKCgoKICByZXR1cm4gOjpzdHJzdHIgKHMsIHQpOwoKfQojIDQ5MyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5pbmwiCmlubGlu ZSBjaGFyICoKQUNFX09TX1N0cmluZzo6c3RydG9rIChjaGFyICpzLCBjb25zdCBjaGFyICp0b2tl bnMpCnsKCgoKICByZXR1cm4gOjpzdHJ0b2sgKHMsIHRva2Vucyk7Cgp9CiMgNTExICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlubCIKaW5s aW5lIGludApBQ0VfT1NfU3RyaW5nOjphY2VfaXNwcmludCAoY29uc3QgQUNFX1RDSEFSIGMpCnsK CgoKCgogIHJldHVybiAoX19jdHlwZV9iWyhpbnQpICgoYykpXSAmICh1bnNpZ25lZCBzaG9ydCBp bnQpIF9JU3ByaW50KTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1N0cmluZzo6YWNlX2lzc3BhY2Ug KGNvbnN0IEFDRV9UQ0hBUiBjKQp7CgoKCgoKICByZXR1cm4gKF9fY3R5cGVfYlsoaW50KSAoKGMp KV0gJiAodW5zaWduZWQgc2hvcnQgaW50KSBfSVNzcGFjZSk7Cgp9CgppbmxpbmUgaW50CkFDRV9P U19TdHJpbmc6OnRvX2xvd2VyIChpbnQgYykKewoKCgogIHJldHVybiB0b2xvd2VyIChjKTsKCn0K IyA1NTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19T dHJpbmcuaW5sIgppbmxpbmUgY2hhciAqCkFDRV9PU19TdHJpbmc6Oml0b2EgKGludCB2YWx1ZSwg Y2hhciAqc3RyaW5nLCBpbnQgcmFkaXgpCnsKCiAgcmV0dXJuIEFDRV9PU19TdHJpbmc6Oml0b2Ff ZW11bGF0aW9uICh2YWx1ZSwgc3RyaW5nLCByYWRpeCk7CgoKCgoKfQojIDU3NyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5pbmwiCmlubGlu ZSBpbnQKQUNFX09TX1N0cmluZzo6c3RyY2FzZWNtcCAoY29uc3QgY2hhciAqcywgY29uc3QgY2hh ciAqdCkKewoKCgoKCiAgcmV0dXJuIDo6c3RyY2FzZWNtcCAocywgdCk7Cgp9CiMgNjAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlubCIK aW5saW5lIGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpzdHJuY2hyIChjaGFyICpzLCBpbnQgYywgc2l6 ZV90IGxlbikKewoKCgoKCiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y2hhciAqPiAoQUNFX09TX1N0cmlu Zzo6c3RybmNociAoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhciAqPiAocyksIGMsIGxlbikpOwoKCn0K IyA2MjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19T dHJpbmcuaW5sIgppbmxpbmUgaW50CkFDRV9PU19TdHJpbmc6OnN0cm5jYXNlY21wIChjb25zdCBj aGFyICpzLCBjb25zdCBjaGFyICp0LCBzaXplX3QgbGVuKQp7CgoKCgoKICByZXR1cm4gOjpzdHJu Y2FzZWNtcCAocywgdCwgbGVuKTsKCn0KIyA2NDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgY2hhciAqCkFDRV9PU19T dHJpbmc6OnN0cm5zdHIgKGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQsIHNpemVfdCBsZW4pCnsKCgoK CiAgcmV0dXJuIChjaGFyICopIEFDRV9PU19TdHJpbmc6OnN0cm5zdHIgKChjb25zdCBjaGFyICop IHMsIHQsIGxlbik7Cgp9CiMgNjY3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlubCIKaW5saW5lIGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpz dHJ0b2tfciAoY2hhciAqcywgY29uc3QgY2hhciAqdG9rZW5zLCBjaGFyICoqbGFzdHMpCnsKCgoK ICByZXR1cm4gOjpzdHJ0b2tfciAocywgdG9rZW5zLCBsYXN0cyk7CgoKCn0KCgppbmxpbmUgZG91 YmxlCkFDRV9PU19TdHJpbmc6OnN0cnRvZCAoY29uc3QgY2hhciAqcywgY2hhciAqKmVuZHB0cikK ewoKCgogIHJldHVybiA6OnN0cnRvZCAocywgZW5kcHRyKTsKCn0KIyA2OTkgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUg bG9uZwpBQ0VfT1NfU3RyaW5nOjpzdHJ0b2wgKGNvbnN0IGNoYXIgKnMsIGNoYXIgKipwdHIsIGlu dCBiYXNlKQp7CgoKCgoKICByZXR1cm4gOjpzdHJ0b2wgKHMsIHB0ciwgYmFzZSk7Cgp9CiMgNzE5 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5n LmlubCIKaW5saW5lIHVuc2lnbmVkIGxvbmcKQUNFX09TX1N0cmluZzo6c3RydG91bCAoY29uc3Qg Y2hhciAqcywgY2hhciAqKnB0ciwgaW50IGJhc2UpCnsKCgoKCgogIHJldHVybiA6OnN0cnRvdWwg KHMsIHB0ciwgYmFzZSk7Cgp9CiMgNTcxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA1NzQgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaCIgMgojIDMyICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19NZW1vcnkuaCIg MQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Nf TWVtb3J5LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL3ByZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PU19NZW1vcnkuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMjEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19NZW1vcnkuaCIgMgoKCgoKCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0V4cG9ydC5oIiAx CiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19N ZW1vcnkuaCIgMgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfTWVtb3J5LmgiIDIKIyA5NiAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX01lbW9yeS5oIgp0 eXBlZGVmIHZvaWQgKkFDRV9NQUxMT0NfVDsKIyAxMDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19NZW1vcnkuaCIKY2xhc3MgQUNFX09TX01lbW9yeQp7 CnB1YmxpYzoKCiAgc3RhdGljIHZvaWQgKnNicmsgKGludCBicmspOwogIHN0YXRpYyB2b2lkICpj YWxsb2MgKHNpemVfdCBlbGVtZW50cywgc2l6ZV90IHNpemVvZl9lbGVtZW50cyk7CiAgc3RhdGlj IHZvaWQgKm1hbGxvYyAoc2l6ZV90KTsKICBzdGF0aWMgdm9pZCAqcmVhbGxvYyAodm9pZCAqLCBz aXplX3QpOwogIHN0YXRpYyB2b2lkIGZyZWUgKHZvaWQgKik7Cn07CgoKCgoKCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX01lbW9yeS5pbmwiIDEK CgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDUgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19NZW1vcnkuaW5sIiAyCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMKIyA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1NfTWVtb3J5LmlubCIgMgoKCmlubGluZSB2b2lkICoKQUNFX09T X01lbW9yeTo6c2JyayAoaW50IGJyaykKewoKCgoKICBkbyB7IHZvaWQgKiBhY2VfcmVzdWx0XyA9 IDA7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNicmsgKGJyayk7IH0gd2hp bGUgKDApOwoKfQoKaW5saW5lIHZvaWQgKgpBQ0VfT1NfTWVtb3J5OjptYWxsb2MgKHNpemVfdCBu Ynl0ZXMpCnsKICByZXR1cm4gOjptYWxsb2MgKG5ieXRlcyk7Cn0KCmlubGluZSB2b2lkICoKQUNF X09TX01lbW9yeTo6Y2FsbG9jIChzaXplX3QgZWxlbWVudHMsIHNpemVfdCBzaXplb2ZfZWxlbWVu dHMpCnsKCiAgcmV0dXJuIDo6Y2FsbG9jIChlbGVtZW50cywgc2l6ZW9mX2VsZW1lbnRzKTsKCgoK Cgp9CgppbmxpbmUgdm9pZCAqCkFDRV9PU19NZW1vcnk6OnJlYWxsb2MgKHZvaWQgKnB0ciwgc2l6 ZV90IG5ieXRlcykKewogIHJldHVybiA6OnJlYWxsb2MgKEFDRV9NQUxMT0NfVCAocHRyKSwgbmJ5 dGVzKTsKfQoKaW5saW5lIHZvaWQKQUNFX09TX01lbW9yeTo6ZnJlZSAodm9pZCAqcHRyKQp7CiAg OjpmcmVlIChBQ0VfTUFMTE9DX1QgKHB0cikpOwp9CiMgMTI0ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfTWVtb3J5LmgiIDIKCgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxMjcgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19NZW1vcnkuaCIg MgojIDMzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Mu aCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P U19UTEkuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1NfVExJLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL3ByZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PU19UTEkuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19UTEkuaCIgMgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FeHBvcnQuaCIgMQojIDIw ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfVExJLmgi IDIKCgoKCgoKCnN0cnVjdCB0X2NhbGwgeyB9OwpzdHJ1Y3QgdF9iaW5kIHsgfTsKc3RydWN0IHRf aW5mbyB7IH07CnN0cnVjdCB0X29wdG1nbXQgeyB9OwpzdHJ1Y3QgdF9kaXNjb24geyB9OwpzdHJ1 Y3QgdF91bml0ZGF0YSB7IH07CnN0cnVjdCB0X3VkZXJyIHsgfTsKc3RydWN0IG5ldGJ1ZiB7IH07 CiMgMTI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Nf VExJLmgiCmNsYXNzIEFDRV9PU19UTEkKewpwdWJsaWM6CgogIHN0YXRpYyBpbnQgdF9hY2NlcHQg KEFDRV9IQU5ETEUgZmlsZGVzLAogICAgICAgICAgICAgICAgICAgICAgIEFDRV9IQU5ETEUgcmVz ZmQsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRfY2FsbAogICAgICAgICAgICAgICAg ICAgICAgICpjYWxsKTsKICBzdGF0aWMgY2hhciAqdF9hbGxvYyAoQUNFX0hBTkRMRSBmaWxkZXMs CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJ1Y3RfdHlwZSwKICAgICAgICAgICAgICAg ICAgICAgICAgaW50CiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyk7CiAgc3RhdGljIGlu dCB0X2JpbmQgKEFDRV9IQU5ETEUgZmlsZGVzLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg dF9iaW5kICpyZXEsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdAogICAgICAgICAgICAgICAg ICAgICB0X2JpbmQgKnJldCk7CiAgc3RhdGljIGludCB0X2Nsb3NlIChBQ0VfSEFORExFIGZpbGRl cyk7CiAgc3RhdGljIGludCB0X2Nvbm5lY3QoQUNFX0hBTkRMRSBmaWxkZXMsCiAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHRfY2FsbCAqc25kY2FsbCwKICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgdF9jYWxsICpyY3ZjYWxsKTsKICBzdGF0aWMgdm9pZCB0X2Vycm9yIChjb25zdCBj aGFyICplcnJtc2cpOwogIHN0YXRpYyBpbnQgdF9mcmVlIChjaGFyICpwdHIsCiAgICAgICAgICAg ICAgICAgICAgIGludCBzdHJ1Y3RfdHlwZSk7CiAgc3RhdGljIGludCB0X2dldGluZm8gKEFDRV9I QU5ETEUgZmlsZGVzLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdF9pbmZvICppbmZv KTsKICBzdGF0aWMgaW50IHRfZ2V0bmFtZSAoQUNFX0hBTkRMRSBmaWxkZXMsCiAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBuZXRidWYgKm5hbWVwLAogICAgICAgICAgICAgICAgICAgICAg ICBpbnQgdHlwZSk7CiAgc3RhdGljIGludCB0X2dldHN0YXRlIChBQ0VfSEFORExFIGZpbGRlcyk7 CiAgc3RhdGljIGludCB0X2xpc3RlbiAoQUNFX0hBTkRMRSBmaWxkZXMsCiAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHRfY2FsbCAqY2FsbCk7CiAgc3RhdGljIGludCB0X2xvb2sgKEFDRV9I QU5ETEUgZmlsZGVzKTsKICBzdGF0aWMgQUNFX0hBTkRMRSB0X29wZW4gKGNoYXIgKnBhdGgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2ZsYWcsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdF9pbmZvICppbmZvKTsKICBzdGF0aWMgaW50IHRfb3B0bWdtdCAoQUNF X0hBTkRMRSBmaWxkZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0X29wdG1nbXQg KnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRfb3B0bWdtdCAqcmV0KTsKICBz dGF0aWMgaW50IHRfcmN2IChBQ0VfSEFORExFIGZpbGRlcywKICAgICAgICAgICAgICAgICAgICBj aGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcywKICAgICAg ICAgICAgICAgICAgICBpbnQgKmZsYWdzKTsKICBzdGF0aWMgaW50IHRfcmN2ZGlzIChBQ0VfSEFO RExFIGZpbGRlcywKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdF9kaXNjb24gKmRpc2Nv bik7CiAgc3RhdGljIGludCB0X3JjdnJlbCAoQUNFX0hBTkRMRSBmaWxkZXMpOwogIHN0YXRpYyBp bnQgdF9yY3Z1ZGF0YSAoQUNFX0hBTkRMRSBmaWxkZXMsCiAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgdF91bml0ZGF0YSAqdW5pdGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKmZsYWdzKTsKICBzdGF0aWMgaW50IHRfcmN2dWRlcnIgKEFDRV9IQU5ETEUgZmlsZGVzLAog ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRfdWRlcnIgKnVkZXJyKTsKICBzdGF0aWMg aW50IHRfc25kIChBQ0VfSEFORExFIGZpbGRlcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcywKICAgICAg ICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwogIHN0YXRpYyBpbnQgdF9zbmRkaXMgKEFDRV9IQU5E TEUgZmlsZGVzLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0X2NhbGwgKmNhbGwpOwog IHN0YXRpYyBpbnQgdF9zbmRyZWwgKEFDRV9IQU5ETEUgZmlsZGVzKTsKICBzdGF0aWMgaW50IHRf c3luYyAoQUNFX0hBTkRMRSBmaWxkZXMpOwogIHN0YXRpYyBpbnQgdF91bmJpbmQgKEFDRV9IQU5E TEUgZmlsZGVzKTsKfTsKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1NfVExJLmlubCIgMQoKCgppbmxpbmUgaW50CkFDRV9PU19UTEk6OnRf YWNjZXB0IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgIEFDRV9IQU5E TEUgcmVzaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRfY2FsbCAqY2FsbCkK ewoKCgogIGRvIHsgfSB3aGlsZSAoJmNhbGwgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmcmVzaGFu ZGxlID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKCiAgZG8geyAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5l IGNoYXIgKgpBQ0VfT1NfVExJOjp0X2FsbG9jIChBQ0VfSEFORExFIGhhbmRsZSwgaW50IHN0cnVj dF90eXBlLAogICAgICAgICAgICAgICAgICAgICBpbnQgZmllbGRzKQp7CgoKCgogIGRvIHsgfSB3 aGlsZSAoJmZpZWxkcyA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZzdHJ1Y3RfdHlwZSA9PSAwKTsK ICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9u ICgpKSA9IDk1IDsgcmV0dXJuIDA7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1Nf VExJOjp0X2JpbmQgKEFDRV9IQU5ETEUgaGFuZGxlLCBzdHJ1Y3QgdF9iaW5kICpyZXEsCiAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHRfYmluZCAqcmV0KQp7CgoKCiAgZG8geyB9IHdoaWxlICgm cmV0ID09IDApOwogIGRvIHsgfSB3aGlsZSAoJnJlcSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZo YW5kbGUgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJu IC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF9jbG9zZSAoQUNF X0hBTkRMRSBoYW5kbGUpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUgPT0gMCk7CgogIGRv IHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsK Cn0KCmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF9jb25uZWN0KEFDRV9IQU5ETEUgZmlsZGVzLAog ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRfY2FsbCAqc25kY2FsbCwKICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB0X2NhbGwgKnJjdmNhbGwpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZm aWxkZXMgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmc25kY2FsbCA9PSAwKTsKICBkbyB7IH0gd2hp bGUgKCZyY3ZjYWxsID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7 IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgdm9pZApBQ0VfT1NfVExJOjp0X2Vy cm9yIChjb25zdCBjaGFyICplcnJtc2cpCnsKCgoKCgoKCiAgZG8geyB9IHdoaWxlICgmZXJybXNn ID09IDApOwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0X2ZyZWUgKGNoYXIgKnB0ciwgaW50 IHN0cnVjdF90eXBlKQp7CgoKCgoKICBkbyB7IH0gd2hpbGUgKCZzdHJ1Y3RfdHlwZSA9PSAwKTsK ICBkbyB7IH0gd2hpbGUgKCZwdHIgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgp KSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1RM STo6dF9nZXRpbmZvIChBQ0VfSEFORExFIGhhbmRsZSwgc3RydWN0IHRfaW5mbyAqaW5mbykKewoK CgogIGRvIHsgfSB3aGlsZSAoJmluZm8gPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmaGFuZGxlID09 IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3 aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PU19UTEk6OnRfZ2V0bmFtZSAoQUNFX0hBTkRM RSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGJ1ZiAqbmFtZXAsCiAg ICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5k bGUgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmbmFtZXAgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgm dHlwZSA9PSAwKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4g LTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0X2dldHN0YXRlIChB Q0VfSEFORExFIGhhbmRsZSkKewoKCgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKCiAg ZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDAp OwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0X2xpc3RlbiAoQUNFX0hBTkRMRSBoYW5kbGUs IHN0cnVjdCB0X2NhbGwgKmNhbGwpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUgPT0gMCk7 CiAgZG8geyB9IHdoaWxlICgmY2FsbCA9PSAwKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24g KCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1Nf VExJOjp0X2xvb2sgKEFDRV9IQU5ETEUgaGFuZGxlKQp7CgoKCiAgZG8geyB9IHdoaWxlICgmaGFu ZGxlID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAt MTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgQUNFX0hBTkRMRQpBQ0VfT1NfVExJOjp0X29wZW4g KGNoYXIgKnBhdGgsIGludCBvZmxhZywgc3RydWN0IHRfaW5mbyAqaW5mbykKewoKCgogIGRvIHsg fSB3aGlsZSAoJnBhdGggPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmb2ZsYWcgPT0gMCk7CiAgZG8g eyB9IHdoaWxlICgmaW5mbyA9PSAwKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g OTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0 X29wdG1nbXQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCB0X29wdG1nbXQgKnJlcSwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdF9vcHRtZ210 ICpyZXQpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUgPT0gMCk7CiAgZG8geyB9IHdoaWxl ICgmcmVxID09IDApOwogIGRvIHsgfSB3aGlsZSAoJnJldCA9PSAwKTsKCiAgZG8geyAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5l IGludApBQ0VfT1NfVExJOjp0X3JjdiAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAg ICAgICBjaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLAog ICAgICAgICAgICAgICAgICAgaW50ICpmbGFncykKewoKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5k bGUgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmYnVmID09IDApOwogIGRvIHsgfSB3aGlsZSAoJm5i eXRlcyA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZmbGFncyA9PSAwKTsKCiAgZG8geyAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5l IGludApBQ0VfT1NfVExJOjp0X3JjdmRpcyAoQUNFX0hBTkRMRSBoYW5kbGUsIHN0cnVjdCB0X2Rp c2NvbiAqZGlzY29uKQp7CgoKCiAgZG8geyB9IHdoaWxlICgmaGFuZGxlID09IDApOwogIGRvIHsg fSB3aGlsZSAoJmRpc2NvbiA9PSAwKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g OTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0 X3JjdnJlbCAoQUNFX0hBTkRMRSBoYW5kbGUpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUg PT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9 IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF9yY3Z1ZGF0YSAoQUNFX0hB TkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0X3VuaXRkYXRhICp1 bml0ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpmbGFncykKewoKCgoKICBkbyB7 IH0gd2hpbGUgKCZoYW5kbGUgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmdW5pdGRhdGEgPT0gMCk7 CiAgZG8geyB9IHdoaWxlICgmZmxhZ3MgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9u ICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09T X1RMSTo6dF9yY3Z1ZGVyciAoQUNFX0hBTkRMRSBoYW5kbGUsIHN0cnVjdCB0X3VkZXJyICp1ZGVy cikKewoKCgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZ1 ZGVyciA9PSAwKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4g LTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0X3NuZCAoQUNFX0hB TkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsCiAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgaW50IGZs YWdzKQp7CgoKCiAgZG8geyB9IHdoaWxlICgmaGFuZGxlID09IDApOwogIGRvIHsgfSB3aGlsZSAo JmJ1ZiA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZuYnl0ZXMgPT0gMCk7CiAgZG8geyB9IHdoaWxl ICgmZmxhZ3MgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0 dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF9zbmRkaXMg KEFDRV9IQU5ETEUgaGFuZGxlLCBzdHJ1Y3QgdF9jYWxsICpjYWxsKQp7CgoKCiAgZG8geyB9IHdo aWxlICgmaGFuZGxlID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmNhbGwgPT0gMCk7CgogIGRvIHsg KCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0K CmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF9zbmRyZWwgKEFDRV9IQU5ETEUgaGFuZGxlKQp7CgoK CiAgZG8geyB9IHdoaWxlICgmaGFuZGxlID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlv biAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9P U19UTEk6OnRfc3luYyAoQUNFX0hBTkRMRSBoYW5kbGUpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZo YW5kbGUgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJu IC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF91bmJpbmQgKEFD RV9IQU5ETEUgaGFuZGxlKQp7CgoKCiAgZG8geyB9IHdoaWxlICgmaGFuZGxlID09IDApOwoKICBk byB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7 Cgp9CiMgMTkyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1NfVExJLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9wb3N0LmgiIDEKIyAxOTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PU19UTEkuaCIgMgojIDM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FcnJuby5oIiAxCiMgMzUgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCgpjbGFzcyBBQ0VfVGltZW91 dF9NYW5hZ2VyOwoKCmVudW0gQUNFX1JlY3ljbGFibGVfU3RhdGUKewoKICBBQ0VfUkVDWUNMQUJM RV9JRExFX0FORF9QVVJHQUJMRSwKCgogIEFDRV9SRUNZQ0xBQkxFX0lETEVfQlVUX05PVF9QVVJH QUJMRSwKCgogIEFDRV9SRUNZQ0xBQkxFX1BVUkdBQkxFX0JVVF9OT1RfSURMRSwKCgogIEFDRV9S RUNZQ0xBQkxFX0JVU1ksCgoKICBBQ0VfUkVDWUNMQUJMRV9DTE9TRUQsCgoKICBBQ0VfUkVDWUNM QUJMRV9VTktOT1dOCn07CiMgNDY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvT1MuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvTWluX01heC5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9NaW5fTWF4LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NaW5fTWF4LmgiIDIKCgoKCgoKdGVtcGxhdGUg PGNsYXNzIFQ+CmlubGluZSBjb25zdCBUICYKYWNlX21pbiAoY29uc3QgVCAmdDEsIGNvbnN0IFQg JnQyKQp7CiAgcmV0dXJuIHQyID4gdDEgPyB0MSA6IHQyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K aW5saW5lIGNvbnN0IFQgJgphY2VfbWF4IChjb25zdCBUICZ0MSwgY29uc3QgVCAmdDIpCnsKICBy ZXR1cm4gdDEgPiB0MiA/IHQxIDogdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgY29u c3QgVCAmCmFjZV9taW4gKGNvbnN0IFQgJnQxLCBjb25zdCBUICZ0MiwgY29uc3QgVCAmdDMpCnsK ICByZXR1cm4gYWNlX21pbiAoYWNlX21pbiAodDEsIHQyKSwgdDMpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgVD4KaW5saW5lIGNvbnN0IFQgJgphY2VfbWF4IChjb25zdCBUICZ0MSwgY29uc3QgVCAmdDIs IGNvbnN0IFQgJnQzKQp7CiAgcmV0dXJuIGFjZV9tYXggKGFjZV9tYXggKHQxLCB0MiksIHQzKTsK fQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBjb25zdCBUICYKYWNlX3JhbmdlIChjb25zdCBU ICZtaW4sIGNvbnN0IFQgJm1heCwgY29uc3QgVCAmdmFsKQp7CiAgcmV0dXJuIGFjZV9taW4gKGFj ZV9tYXggKG1pbiwgdmFsKSwgbWF4KTsKfQojIDcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvTWluX01heC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA3MyAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01pbl9NYXguaCIgMgojIDQ3MCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyA5NjcgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpleHRlcm4g IkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRl L3NpZ25hbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDMwICIvdXNy L2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3NpZ3NldC5oIiAxIDMKIyAxMDMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCmV4 dGVybiBpbnQgX19zaWdpc21lbWJlciAoX19jb25zdCBfX3NpZ3NldF90ICosIGludCk7CmV4dGVy biBpbnQgX19zaWdhZGRzZXQgKF9fc2lnc2V0X3QgKiwgaW50KTsKZXh0ZXJuIGludCBfX3NpZ2Rl bHNldCAoX19zaWdzZXRfdCAqLCBpbnQpOwojIDExNyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0 LmgiIDMKZXh0ZXJuIF9faW5saW5lIGludCBfX3NpZ2lzbWVtYmVyIChfX2NvbnN0IF9fc2lnc2V0 X3QgKl9fc2V0LCBpbnQgX19zaWcpIHsgdW5zaWduZWQgbG9uZyBpbnQgX19tYXNrID0gKCgodW5z aWduZWQgbG9uZyBpbnQpIDEpIDw8ICgoKF9fc2lnKSAtIDEpICUgKDggKiBzaXplb2YgKHVuc2ln bmVkIGxvbmcgaW50KSkpKTsgdW5zaWduZWQgbG9uZyBpbnQgX193b3JkID0gKCgoX19zaWcpIC0g MSkgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSk7IHJldHVybiAoX19zZXQtPl9f dmFsW19fd29yZF0gJiBfX21hc2spID8gMSA6IDA7IH0KZXh0ZXJuIF9faW5saW5lIGludCBfX3Np Z2FkZHNldCAoIF9fc2lnc2V0X3QgKl9fc2V0LCBpbnQgX19zaWcpIHsgdW5zaWduZWQgbG9uZyBp bnQgX19tYXNrID0gKCgodW5zaWduZWQgbG9uZyBpbnQpIDEpIDw8ICgoKF9fc2lnKSAtIDEpICUg KDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpKTsgdW5zaWduZWQgbG9uZyBpbnQgX193 b3JkID0gKCgoX19zaWcpIC0gMSkgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSk7 IHJldHVybiAoKF9fc2V0LT5fX3ZhbFtfX3dvcmRdIHw9IF9fbWFzayksIDApOyB9CmV4dGVybiBf X2lubGluZSBpbnQgX19zaWdkZWxzZXQgKCBfX3NpZ3NldF90ICpfX3NldCwgaW50IF9fc2lnKSB7 IHVuc2lnbmVkIGxvbmcgaW50IF9fbWFzayA9ICgoKHVuc2lnbmVkIGxvbmcgaW50KSAxKSA8PCAo KChfX3NpZykgLSAxKSAlICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKSk7IHVuc2ln bmVkIGxvbmcgaW50IF9fd29yZCA9ICgoKF9fc2lnKSAtIDEpIC8gKDggKiBzaXplb2YgKHVuc2ln bmVkIGxvbmcgaW50KSkpOyByZXR1cm4gKChfX3NldC0+X192YWxbX193b3JkXSAmPSB+X19tYXNr KSwgMCk7IH0KIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCgoKCgoKdHlwZWRlZiBf X3NpZ19hdG9taWNfdCBzaWdfYXRvbWljX3Q7CiMgNTUgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDU2ICIvdXNyL2luY2x1ZGUv c2lnbmFsLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ251bS5oIiAxIDMKIyA1NyAi L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA3MSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAz CnR5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KSAoaW50KTsKCgoKCmV4dGVybiBfX3NpZ2hh bmRsZXJfdCBfX3N5c3Zfc2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFuZGxl cikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBfX3NpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbCAoaW50 IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBfX3NpZ2hhbmRsZXJfdCBzaWduYWwgKGludCBfX3NpZywgX19zaWdoYW5kbGVyX3QgX19o YW5kbGVyKSB0aHJvdyAoKTsKIyAxMDMgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4g X19zaWdoYW5kbGVyX3QgYnNkX3NpZ25hbCAoaW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hh bmRsZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGtpbGwgKF9fcGlkX3QgX19waWQsIGlu dCBfX3NpZykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQga2lsbHBnIChfX3BpZF90IF9fcGdy cCwgaW50IF9fc2lnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYWlzZSAoaW50IF9fc2lnKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIF9fc2lnaGFuZGxlcl90IHNzaWduYWwgKGludCBfX3NpZywgX19z aWdoYW5kbGVyX3QgX19oYW5kbGVyKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnc2lnbmFsIChpbnQg X19zaWcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHNpZ25hbCAoaW50IF9fc2lnLCBfX2Nv bnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTQwICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMK ZXh0ZXJuIGludCBfX3NpZ3BhdXNlIChpbnQgX19zaWdfb3JfbWFzaywgaW50IF9faXNfc2lnKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2lncGF1c2UgKGludCBfX21hc2spIHRocm93ICgpOwoj IDE2OCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiBpbnQgc2lnYmxvY2sgKGludCBf X21hc2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2lnc2V0bWFzayAoaW50IF9fbWFzaykgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBzaWdnZXRtYXNrICh2b2lkKSB0aHJvdyAoKTsKIyAxODMgIi91 c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2lnaGFuZGxlcl90IHNpZ2hhbmRsZXJf dDsKCgoKCnR5cGVkZWYgX19zaWdoYW5kbGVyX3Qgc2lnX3Q7CgoKCgoKCgojIDEgIi91c3IvaW5j bHVkZS90aW1lLmgiIDEgMwojIDE5NyAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRz L3NpZ2luZm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI2 ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDIgMwoKCgoKCgoKdHlwZWRlZiB1bmlvbiBz aWd2YWwKICB7CiAgICBpbnQgc2l2YWxfaW50OwogICAgdm9pZCAqc2l2YWxfcHRyOwogIH0gc2ln dmFsX3Q7CiMgNTEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwp0eXBlZGVmIHN0cnVj dCBzaWdpbmZvCiAgewogICAgaW50IHNpX3NpZ25vOwogICAgaW50IHNpX2Vycm5vOwoKICAgIGlu dCBzaV9jb2RlOwoKICAgIHVuaW9uCiAgICAgIHsKICAgICAgICBpbnQgX3BhZFsoKDEyOCAvIHNp emVvZiAoaW50KSkgLSAzKV07CgoKICAgICAgICBzdHJ1Y3QKICAgICAgICAgIHsKICAgICAgICAg ICAgX19waWRfdCBzaV9waWQ7CiAgICAgICAgICAgIF9fdWlkX3Qgc2lfdWlkOwogICAgICAgICAg fSBfa2lsbDsKCgogICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAgICAgICAgICB1bnNpZ25l ZCBpbnQgX3RpbWVyMTsKICAgICAgICAgICAgdW5zaWduZWQgaW50IF90aW1lcjI7CiAgICAgICAg ICB9IF90aW1lcjsKCgogICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAgICAgICAgICBfX3Bp ZF90IHNpX3BpZDsKICAgICAgICAgICAgX191aWRfdCBzaV91aWQ7CiAgICAgICAgICAgIHNpZ3Zh bF90IHNpX3NpZ3ZhbDsKICAgICAgICAgIH0gX3J0OwoKCiAgICAgICAgc3RydWN0CiAgICAgICAg ICB7CiAgICAgICAgICAgIF9fcGlkX3Qgc2lfcGlkOwogICAgICAgICAgICBfX3VpZF90IHNpX3Vp ZDsKICAgICAgICAgICAgaW50IHNpX3N0YXR1czsKICAgICAgICAgICAgX19jbG9ja190IHNpX3V0 aW1lOwogICAgICAgICAgICBfX2Nsb2NrX3Qgc2lfc3RpbWU7CiAgICAgICAgICB9IF9zaWdjaGxk OwoKCiAgICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIHZvaWQgKnNpX2FkZHI7 CiAgICAgICAgICB9IF9zaWdmYXVsdDsKCgogICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAg ICAgICAgICBsb25nIGludCBzaV9iYW5kOwogICAgICAgICAgICBpbnQgc2lfZmQ7CiAgICAgICAg ICB9IF9zaWdwb2xsOwogICAgICB9IF9zaWZpZWxkczsKICB9IHNpZ2luZm9fdDsKIyAxMjggIi91 c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwplbnVtCnsKICBTSV9BU1lOQ05MID0gLTYsCgog IFNJX1NJR0lPLAoKICBTSV9BU1lOQ0lPLAoKICBTSV9NRVNHUSwKCiAgU0lfVElNRVIsCgogIFNJ X1FVRVVFLAoKICBTSV9VU0VSLAoKICBTSV9LRVJORUwgPSAweDgwCgp9OwoKCgplbnVtCnsKICBJ TExfSUxMT1BDID0gMSwKCiAgSUxMX0lMTE9QTiwKCiAgSUxMX0lMTEFEUiwKCiAgSUxMX0lMTFRS UCwKCiAgSUxMX1BSVk9QQywKCiAgSUxMX1BSVlJFRywKCiAgSUxMX0NPUFJPQywKCiAgSUxMX0JB RFNUSwoKfTsKCgplbnVtCnsKICBGUEVfSU5URElWID0gMSwKCiAgRlBFX0lOVE9WRiwKCiAgRlBF X0ZMVERJViwKCiAgRlBFX0ZMVE9WRiwKCiAgRlBFX0ZMVFVORCwKCiAgRlBFX0ZMVFJFUywKCiAg RlBFX0ZMVElOViwKCiAgRlBFX0ZMVFNVQgoKfTsKCgplbnVtCnsKICBTRUdWX01BUEVSUiA9IDEs CgogIFNFR1ZfQUNDRVJSCgp9OwoKCmVudW0KewogIEJVU19BRFJBTE4gPSAxLAoKICBCVVNfQURS RVJSLAoKICBCVVNfT0JKRVJSCgp9OwoKCmVudW0KewogIFRSQVBfQlJLUFQgPSAxLAoKICBUUkFQ X1RSQUNFCgp9OwoKCmVudW0KewogIENMRF9FWElURUQgPSAxLAoKICBDTERfS0lMTEVELAoKICBD TERfRFVNUEVELAoKICBDTERfVFJBUFBFRCwKCiAgQ0xEX1NUT1BQRUQsCgogIENMRF9DT05USU5V RUQKCn07CgoKZW51bQp7CiAgUE9MTF9JTiA9IDEsCgogIFBPTExfT1VULAoKICBQT0xMX01TRywK CiAgUE9MTF9FUlIsCgogIFBPTExfUFJJLAoKICBQT0xMX0hVUAoKfTsKIyAyNzEgIi91c3IvaW5j bHVkZS9iaXRzL3NpZ2luZm8uaCIgMwpzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfczsKCnR5cGVkZWYg c3RydWN0IHNpZ2V2ZW50CiAgewogICAgc2lndmFsX3Qgc2lnZXZfdmFsdWU7CiAgICBpbnQgc2ln ZXZfc2lnbm87CiAgICBpbnQgc2lnZXZfbm90aWZ5OwoKICAgIHVuaW9uCiAgICAgIHsKICAgICAg ICBpbnQgX3BhZFsoKDY0IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsKCiAgICAgICAgc3RydWN0CiAg ICAgICAgICB7CiAgICAgICAgICAgIHZvaWQgKCpfZnVuY3Rpb24pIChzaWd2YWxfdCk7CiAgICAg ICAgICAgIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zICpfYXR0cmlidXRlOwogICAgICAgICAgfSBf c2lnZXZfdGhyZWFkOwogICAgICB9IF9zaWdldl91bjsKICB9IHNpZ2V2ZW50X3Q7CgoKCgoKCmVu dW0KewogIFNJR0VWX1NJR05BTCA9IDAsCgogIFNJR0VWX05PTkUsCgogIFNJR0VWX1RIUkVBRAoK fTsKIyAyMDAgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKCmV4dGVybiBpbnQgc2lnZW1w dHlzZXQgKHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdmaWxsc2V0 IChzaWdzZXRfdCAqX19zZXQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2lnYWRkc2V0IChzaWdz ZXRfdCAqX19zZXQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNpZ2RlbHNl dCAoc2lnc2V0X3QgKl9fc2V0LCBpbnQgX19zaWdubykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz aWdpc21lbWJlciAoX19jb25zdCBzaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZ25vKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBzaWdpc2VtcHR5c2V0IChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdhbmRzZXQgKHNpZ3NldF90ICpfX3NldCwgX19jb25z dCBzaWdzZXRfdCAqX19sZWZ0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzaWdzZXRf dCAqX19yaWdodCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdvcnNldCAoc2lnc2V0X3QgKl9f c2V0LCBfX2NvbnN0IHNpZ3NldF90ICpfX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgc2lnc2V0X3QgKl9fcmlnaHQpIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9zaWdhY3Rpb24uaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2FjdGlvbi5oIiAz CnN0cnVjdCBzaWdhY3Rpb24KICB7CgoKICAgIHVuaW9uCiAgICAgIHsKCiAgICAgICAgX19zaWdo YW5kbGVyX3Qgc2FfaGFuZGxlcjsKCiAgICAgICAgdm9pZCAoKnNhX3NpZ2FjdGlvbikgKGludCwg c2lnaW5mb190ICosIHZvaWQgKik7CiAgICAgIH0KICAgIF9fc2lnYWN0aW9uX2hhbmRsZXI7CgoK CgoKCgogICAgX19zaWdzZXRfdCBzYV9tYXNrOwoKCiAgICBpbnQgc2FfZmxhZ3M7CgoKICAgIHZv aWQgKCpzYV9yZXN0b3JlcikgKHZvaWQpOwogIH07CiMgMjMzICIvdXNyL2luY2x1ZGUvc2lnbmFs LmgiIDIgMwoKCmV4dGVybiBpbnQgc2lncHJvY21hc2sgKGludCBfX2hvdywgX19jb25zdCBzaWdz ZXRfdCAqX19yZXN0cmljdCBfX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgc2lnc2V0X3Qg Kl9fcmVzdHJpY3QgX19vc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzaWdzdXNwZW5kIChf X2NvbnN0IHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdhY3Rpb24g KGludCBfX3NpZywgX19jb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICpfX3Jlc3RyaWN0IF9fYWN0LAog ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiAqX19yZXN0cmljdCBfX29hY3Qp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2lncGVuZGluZyAoc2lnc2V0X3QgKl9fc2V0KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBzaWd3YWl0IChfX2NvbnN0IHNpZ3NldF90ICpfX3Jlc3RyaWN0 IF9fc2V0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWcpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgc2lnd2FpdGluZm8gKF9fY29uc3Qgc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zZXQsCiAgICAg ICAgICAgICAgICAgICAgICAgIHNpZ2luZm9fdCAqX19yZXN0cmljdCBfX2luZm8pIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHNpZ3RpbWVkd2FpdCAoX19jb25zdCBzaWdzZXRfdCAqX19yZXN0cmlj dCBfX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2luZm9fdCAqX19yZXN0cmljdCBf X2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAq X19yZXN0cmljdCBfX3RpbWVvdXQpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2lncXVl dWUgKF9fcGlkX3QgX19waWQsIGludCBfX3NpZywgX19jb25zdCB1bmlvbiBzaWd2YWwgX192YWwp CiAgICAgdGhyb3cgKCk7CiMgMjc4ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuIF9f Y29uc3QgY2hhciAqX19jb25zdCBfc3lzX3NpZ2xpc3RbNjRdOwpleHRlcm4gX19jb25zdCBjaGFy ICpfX2NvbnN0IHN5c19zaWdsaXN0WzY0XTsKCgpzdHJ1Y3Qgc2lndmVjCiAgewogICAgX19zaWdo YW5kbGVyX3Qgc3ZfaGFuZGxlcjsKICAgIGludCBzdl9tYXNrOwoKICAgIGludCBzdl9mbGFnczsK CiAgfTsKIyAzMDIgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4gaW50IHNpZ3ZlYyAo aW50IF9fc2lnLCBfX2NvbnN0IHN0cnVjdCBzaWd2ZWMgKl9fdmVjLAogICAgICAgICAgICAgICAg ICAgc3RydWN0IHNpZ3ZlYyAqX19vdmVjKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9zaWdjb250ZXh0LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdjb250ZXh0 LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCIgMSAzCiMgMTggIi91c3Iv aW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAzCnN0cnVjdCBfZnByZWcgewogICAgICAgIHVuc2ln bmVkIHNob3J0IHNpZ25pZmljYW5kWzRdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50 Owp9OwoKc3RydWN0IF9mcHhyZWcgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHNpZ25pZmljYW5k WzRdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50OwogICAgICAgIHVuc2lnbmVkIHNo b3J0IHBhZGRpbmdbM107Cn07CgpzdHJ1Y3QgX3htbXJlZyB7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBlbGVtZW50WzRdOwp9OwoKc3RydWN0IF9mcHN0YXRlIHsKCiAgICAgICAgdW5zaWduZWQgbG9u ZyBjdzsKICAgICAgICB1bnNpZ25lZCBsb25nIHN3OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdGFn OwogICAgICAgIHVuc2lnbmVkIGxvbmcgaXBvZmY7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjc3Nl bDsKICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGFvZmY7CiAgICAgICAgdW5zaWduZWQgbG9uZyBk YXRhc2VsOwogICAgICAgIHN0cnVjdCBfZnByZWcgX3N0WzhdOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IHN0YXR1czsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBtYWdpYzsKCgogICAgICAgIHVuc2ln bmVkIGxvbmcgX2Z4c3JfZW52WzZdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbXhjc3I7CiAgICAg ICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKICAgICAgICBzdHJ1Y3QgX2ZweHJlZyBfZnhzcl9z dFs4XTsKICAgICAgICBzdHJ1Y3QgX3htbXJlZyBfeG1tWzhdOwogICAgICAgIHVuc2lnbmVkIGxv bmcgcGFkZGluZ1s1Nl07Cn07CgoKCnN0cnVjdCBzaWdjb250ZXh0IHsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBncywgX19nc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywg X19kc2g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlZGk7CiAgICAgICAgdW5zaWduZWQgbG9uZyBl c2k7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYnA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3A7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYng7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlZHg7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBlY3g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYXg7CiAgICAg ICAgdW5zaWduZWQgbG9uZyB0cmFwbm87CiAgICAgICAgdW5zaWduZWQgbG9uZyBlcnI7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBlaXA7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZWZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNwX2F0 X3NpZ25hbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7CiAgICAgICAgc3RydWN0 IF9mcHN0YXRlICogZnBzdGF0ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIG9sZG1hc2s7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBjcjI7Cn07CiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2NvbnRl eHQuaCIgMiAzCiMgMzA4ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCmV4dGVybiBpbnQg c2lncmV0dXJuIChzdHJ1Y3Qgc2lnY29udGV4dCAqX19zY3ApIHRocm93ICgpOwojIDMyMCAiL3Vz ci9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiBpbnQgc2lnaW50ZXJydXB0IChpbnQgX19zaWcs IGludCBfX2ludGVycnVwdCkgdGhyb3cgKCk7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3N0 YWNrLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzdGFjay5oIiAzCnN0cnVjdCBz aWdzdGFjawogIHsKICAgIHZvaWQgKnNzX3NwOwogICAgaW50IHNzX29uc3RhY2s7CiAgfTsKCgoK ZW51bQp7CiAgU1NfT05TVEFDSyA9IDEsCgogIFNTX0RJU0FCTEUKCn07CiMgNTAgIi91c3IvaW5j bHVkZS9iaXRzL3NpZ3N0YWNrLmgiIDMKdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sKICB7CiAg ICB2b2lkICpzc19zcDsKICAgIGludCBzc19mbGFnczsKICAgIHNpemVfdCBzc19zaXplOwogIH0g c3RhY2tfdDsKIyAzMjMgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgojIDEgIi91c3IvaW5j bHVkZS91Y29udGV4dC5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3Vjb250ZXh0LmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS91Y29udGV4 dC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCIgMSAzCiMgMjIgIi91 c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvc2lnbmFsLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDIg MwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2NvbnRleHQuaCIgMSAzCiMgMjggIi91c3Iv aW5jbHVkZS9zeXMvdWNvbnRleHQuaCIgMiAzCgoKCnR5cGVkZWYgaW50IGdyZWdfdDsKCgoKCgp0 eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbMTldOwoKCgplbnVtCnsKICBSRUdfR1MgPSAwLAoKICBS RUdfRlMsCgogIFJFR19FUywKCiAgUkVHX0RTLAoKICBSRUdfRURJLAoKICBSRUdfRVNJLAoKICBS RUdfRUJQLAoKICBSRUdfRVNQLAoKICBSRUdfRUJYLAoKICBSRUdfRURYLAoKICBSRUdfRUNYLAoK ICBSRUdfRUFYLAoKICBSRUdfVFJBUE5PLAoKICBSRUdfRVJSLAoKICBSRUdfRUlQLAoKICBSRUdf Q1MsCgogIFJFR19FRkwsCgogIFJFR19VRVNQLAoKICBSRUdfU1MKCn07CgoKCnN0cnVjdCBfbGli Y19mcHJlZwp7CiAgdW5zaWduZWQgc2hvcnQgaW50IHNpZ25pZmljYW5kWzRdOwogIHVuc2lnbmVk IHNob3J0IGludCBleHBvbmVudDsKfTsKCnN0cnVjdCBfbGliY19mcHN0YXRlCnsKICB1bnNpZ25l ZCBsb25nIGludCBjdzsKICB1bnNpZ25lZCBsb25nIGludCBzdzsKICB1bnNpZ25lZCBsb25nIGlu dCB0YWc7CiAgdW5zaWduZWQgbG9uZyBpbnQgaXBvZmY7CiAgdW5zaWduZWQgbG9uZyBpbnQgY3Nz ZWw7CiAgdW5zaWduZWQgbG9uZyBpbnQgZGF0YW9mZjsKICB1bnNpZ25lZCBsb25nIGludCBkYXRh c2VsOwogIHN0cnVjdCBfbGliY19mcHJlZyBfc3RbOF07CiAgdW5zaWduZWQgbG9uZyBpbnQgc3Rh dHVzOwp9OwoKCnR5cGVkZWYgc3RydWN0IF9saWJjX2Zwc3RhdGUgKmZwcmVnc2V0X3Q7CgoKdHlw ZWRlZiBzdHJ1Y3QKICB7CiAgICBncmVnc2V0X3QgZ3JlZ3M7CgoKICAgIGZwcmVnc2V0X3QgZnBy ZWdzOwogICAgdW5zaWduZWQgbG9uZyBpbnQgb2xkbWFzazsKICAgIHVuc2lnbmVkIGxvbmcgaW50 IGNyMjsKICB9IG1jb250ZXh0X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgdWNvbnRleHQKICB7CiAgICB1 bnNpZ25lZCBsb25nIGludCB1Y19mbGFnczsKICAgIHN0cnVjdCB1Y29udGV4dCAqdWNfbGluazsK ICAgIHN0YWNrX3QgdWNfc3RhY2s7CiAgICBtY29udGV4dF90IHVjX21jb250ZXh0OwogICAgX19z aWdzZXRfdCB1Y19zaWdtYXNrOwogICAgc3RydWN0IF9saWJjX2Zwc3RhdGUgX19mcHJlZ3NfbWVt OwogIH0gdWNvbnRleHRfdDsKIyAyOCAiL3Vzci9pbmNsdWRlL3Vjb250ZXh0LmgiIDIgMwoKZXh0 ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBnZXRjb250ZXh0ICh1Y29udGV4dF90ICpfX3VjcCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBzZXRjb250ZXh0IChfX2NvbnN0IHVjb250ZXh0X3QgKl9fdWNw KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzd2FwY29udGV4dCAodWNvbnRleHRfdCAqX19yZXN0 cmljdCBfX291Y3AsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdWNvbnRleHRfdCAq X19yZXN0cmljdCBfX3VjcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBtYWtlY29udGV4 dCAodWNvbnRleHRfdCAqX191Y3AsIHZvaWQgKCpfX2Z1bmMpICh2b2lkKSwKICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2FyZ2MsIC4uLikgdGhyb3cgKCk7Cgp9CiMgMzI1ICIvdXNyL2lu Y2x1ZGUvc2lnbmFsLmgiIDIgMwoKCgoKCmV4dGVybiBpbnQgc2lnc3RhY2sgKHN0cnVjdCBzaWdz dGFjayAqX19zcywgc3RydWN0IHNpZ3N0YWNrICpfX29zcykgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgc2lnYWx0c3RhY2sgKF9fY29uc3Qgc3RydWN0IHNpZ2FsdHN0YWNrICpfX3Jlc3RyaWN0IF9f c3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdhbHRzdGFjayAqX19yZXN0cmlj dCBfX29zcykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHNpZ2hvbGQgKGludCBfX3NpZykg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdyZWxzZSAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHNpZ2lnbm9yZSAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zaWdo YW5kbGVyX3Qgc2lnc2V0IChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9fZGlzcCkgdGhyb3cg KCk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzU5ICIv dXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCgoKCgpleHRlcm4gaW50IF9fbGliY19jdXJyZW50 X3NpZ3J0bWluICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19saWJjX2N1cnJlbnRfc2ln cnRtYXggKHZvaWQpIHRocm93ICgpOwoKCgp9CiMgOTcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVh ZC5oIiAxIDMKIyA5NzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9PUy5oIiAyCgoKCgp9CiMgMTAxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMTAx MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIK IyAxMDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Mu aCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9z eXMvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNy L2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi IDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5o IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5j bHVkZS9zeXMvdGltZS5oIiAyIDMKCgoKCgoKCmV4dGVybiAiQyIgewojIDU2ICIvdXNyL2luY2x1 ZGUvc3lzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXpvbmUKICB7CiAgICBpbnQgdHpfbWludXRlc3dl c3Q7CiAgICBpbnQgdHpfZHN0dGltZTsKICB9OwoKdHlwZWRlZiBzdHJ1Y3QgdGltZXpvbmUgKl9f cmVzdHJpY3QgX190aW1lem9uZV9wdHJfdDsKIyA3MiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi IDMKZXh0ZXJuIGludCBnZXR0aW1lb2ZkYXkgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9f dHYsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWV6b25lX3B0cl90IF9fdHopIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBzZXR0aW1lb2ZkYXkgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwg Kl9fdHYsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lem9uZSAq X190eikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBhZGp0aW1lIChfX2NvbnN0IHN0cnVjdCB0 aW1ldmFsICpfX2RlbHRhLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX29s ZGRlbHRhKSB0aHJvdyAoKTsKCgoKCmVudW0gX19pdGltZXJfd2hpY2gKICB7CgogICAgSVRJTUVS X1JFQUwgPSAwLAoKCiAgICBJVElNRVJfVklSVFVBTCA9IDEsCgoKCiAgICBJVElNRVJfUFJPRiA9 IDIKCiAgfTsKCgoKc3RydWN0IGl0aW1lcnZhbAogIHsKCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF9p bnRlcnZhbDsKCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKICB9OwoKCnR5cGVkZWYgZW51 bSBfX2l0aW1lcl93aGljaCBfX2l0aW1lcl93aGljaF90OwoKCgoKCgpleHRlcm4gaW50IGdldGl0 aW1lciAoX19pdGltZXJfd2hpY2hfdCBfX3doaWNoLAogICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGl0aW1lcnZhbCAqX192YWx1ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGl0aW1l ciAoX19pdGltZXJfd2hpY2hfdCBfX3doaWNoLAogICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBzdHJ1Y3QgaXRpbWVydmFsICpfX3Jlc3RyaWN0IF9fbmV3LAogICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGl0aW1lcnZhbCAqX19yZXN0cmljdCBfX29sZCkgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgdXRpbWVzIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBzdHJ1Y3QgdGltZXZh bCBfX3R2cFsyXSkKICAgICB0aHJvdyAoKTsKIyAxNjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5o IiAzCn0KIyAxMDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1MuaCIgMgojIDEwNTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5oIgp0eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlY190OwoKCgp0eXBl ZGVmIGludCBjbG9ja2lkX3Q7CiMgMTA2OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmgiCmNsYXNzIEFDRV9UaW1lX1ZhbHVlOwogICAgICAgICAgICAg IEFDRV9UaW1lX1ZhbHVlIG9wZXJhdG9yICsgKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0djEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFs dWUgJnR2Mik7CgogICAgICAgICAgICAgIEFDRV9UaW1lX1ZhbHVlIG9wZXJhdG9yIC0gKGNvbnN0 IEFDRV9UaW1lX1ZhbHVlICZ0djEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2Mik7CiMgMTA5MiAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCmNsYXNzIEFDRV9UaW1lX1ZhbHVl CnsKcHVibGljOgoKCgogIHN0YXRpYyBjb25zdCBBQ0VfVGltZV9WYWx1ZSB6ZXJvOwojIDExMDgg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIHN0 YXRpYyBjb25zdCBBQ0VfVGltZV9WYWx1ZSBtYXhfdGltZTsKCgoKCiAgQUNFX1RpbWVfVmFsdWUg KHZvaWQpOwoKCiAgQUNFX1RpbWVfVmFsdWUgKGxvbmcgc2VjLCBsb25nIHVzZWMgPSAwKTsKCgoK ICBBQ0VfVGltZV9WYWx1ZSAoY29uc3Qgc3RydWN0IHRpbWV2YWwgJnQpOwoKCiAgQUNFX1RpbWVf VmFsdWUgKGNvbnN0IHRpbWVzcGVjX3QgJnQpOwoKCiAgQUNFX1RpbWVfVmFsdWUgKGNvbnN0IEFD RV9UaW1lX1ZhbHVlICZ0dik7CgoKCgoKCgogIHZvaWQgc2V0IChsb25nIHNlYywgbG9uZyB1c2Vj KTsKCgoKICB2b2lkIHNldCAoZG91YmxlIGQpOwoKCiAgdm9pZCBzZXQgKGNvbnN0IHRpbWV2YWwg JnQpOwoKCiAgdm9pZCBzZXQgKGNvbnN0IHRpbWVzcGVjX3QgJnQpOwoKCgoKCgoKICBsb25nIG1z ZWMgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBtc2VjIChsb25nKTsKCgogIG9wZXJhdG9yIHRpbWVz cGVjX3QgKCkgY29uc3Q7CgoKICBvcGVyYXRvciB0aW1ldmFsICgpIGNvbnN0OwoKCiAgb3BlcmF0 b3IgY29uc3QgdGltZXZhbCAqKCkgY29uc3Q7CiMgMTE3NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgbG9uZyBzZWMgKHZvaWQpIGNvbnN0OwoK CiAgdm9pZCBzZWMgKGxvbmcgc2VjKTsKCgogIGxvbmcgdXNlYyAodm9pZCkgY29uc3Q7CgoKICB2 b2lkIHVzZWMgKGxvbmcgdXNlYyk7CgoKCgogIHZvaWQgb3BlcmF0b3IgKz0gKGNvbnN0IEFDRV9U aW1lX1ZhbHVlICZ0dik7CgoKICB2b2lkIG9wZXJhdG9yIC09IChjb25zdCBBQ0VfVGltZV9WYWx1 ZSAmdHYpOwoKCiAgQUNFX1RpbWVfVmFsdWUgJm9wZXJhdG9yICo9IChkb3VibGUgZCk7CgoKICBm cmllbmQgQUNFX1RpbWVfVmFsdWUgb3BlcmF0b3IgKyAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2 MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB Q0VfVGltZV9WYWx1ZSAmdHYyKTsKCgogIGZyaWVuZCBBQ0VfVGltZV9WYWx1ZSBvcGVyYXRvciAt IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0djIpOwoKCiAgZnJpZW5k IGludCBvcGVyYXRvciA8IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYyKTsKCgogIGZy aWVuZCBpbnQgb3BlcmF0b3IgPiAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2Mik7CgoK ICBmcmllbmQgaW50IG9wZXJhdG9yIDw9IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2 Mik7CgoKICBmcmllbmQgaW50IG9wZXJhdG9yID49IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFs dWUgJnR2Mik7CgoKICBmcmllbmQgaW50IG9wZXJhdG9yID09IChjb25zdCBBQ0VfVGltZV9WYWx1 ZSAmdHYxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1Rp bWVfVmFsdWUgJnR2Mik7CgoKICBmcmllbmQgaW50IG9wZXJhdG9yICE9IChjb25zdCBBQ0VfVGlt ZV9WYWx1ZSAmdHYxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QUNFX1RpbWVfVmFsdWUgJnR2Mik7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwojIDEyNDAg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpwcml2 YXRlOgoKICB2b2lkIG5vcm1hbGl6ZSAodm9pZCk7CgoKICB0aW1ldmFsIHR2XzsKfTsKIyAxMjU3 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKY2xh c3MgQUNFX0NvdW50ZG93bl9UaW1lCnsKcHVibGljOgoKCiAgQUNFX0NvdW50ZG93bl9UaW1lIChB Q0VfVGltZV9WYWx1ZSAqbWF4X3dhaXRfdGltZSk7CgoKICB+QUNFX0NvdW50ZG93bl9UaW1lICh2 b2lkKTsKCgogIGludCBzdGFydCAodm9pZCk7CgoKCiAgaW50IHN0b3AgKHZvaWQpOwoKCgogIGlu dCB1cGRhdGUgKHZvaWQpOwoKcHJpdmF0ZTogQUNFX1RpbWVfVmFsdWUgKm1heF93YWl0X3RpbWVf OwoKCgogIEFDRV9UaW1lX1ZhbHVlIHN0YXJ0X3RpbWVfOwoKCiAgaW50IHN0b3BwZWRfOwp9Owoj IDE1MTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5o IgpleHRlcm4gIkMiIHsKdHlwZWRlZiB2b2lkICgqQUNFX1NlcnZpY2VfT2JqZWN0X0V4dGVybWlu YXRvcikodm9pZCAqKTsKfQojIDE3NjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5oIgpzdHJ1Y3Qgc3RycmVjdmZkIHt9OwojIDE3ODAgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgp0eXBlZGVmIGNvbnN0 IHN0cnVjdCBpb3ZlYyBBQ0VfV1JJVEVWX1RZUEU7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgaW92ZWMg QUNFX1JFQURWX1RZUEU7CgoKCnR5cGVkZWYgc3RydWN0IHJsaW1pdCBBQ0VfU0VUUkxJTUlUX1RZ UEU7CiMgMTg3MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmgiCnN0cnVjdCBjYW5jZWxfc3RhdGUKewogIGludCBjYW5jZWxzdGF0ZTsKCgoKICBpbnQg Y2FuY2VsdHlwZTsKCn07CiMgMTkyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAx OTIxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIg MgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRl L3N5cy9zdGF0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91 c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwojIDk2 ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvc3RhdC5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RhdC5oIiAzCnN0 cnVjdCBzdGF0CiAgewogICAgX19kZXZfdCBzdF9kZXY7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg X19wYWQxOwoKICAgIF9faW5vX3Qgc3RfaW5vOwoKCgogICAgX19tb2RlX3Qgc3RfbW9kZTsKICAg IF9fbmxpbmtfdCBzdF9ubGluazsKICAgIF9fdWlkX3Qgc3RfdWlkOwogICAgX19naWRfdCBzdF9n aWQ7CiAgICBfX2Rldl90IHN0X3JkZXY7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQyOwoK ICAgIF9fb2ZmX3Qgc3Rfc2l6ZTsKCgoKICAgIF9fYmxrc2l6ZV90IHN0X2Jsa3NpemU7CgoKICAg IF9fYmxrY250X3Qgc3RfYmxvY2tzOwoKCgogICAgX190aW1lX3Qgc3RfYXRpbWU7CiAgICB1bnNp Z25lZCBsb25nIGludCBfX3VudXNlZDE7CiAgICBfX3RpbWVfdCBzdF9tdGltZTsKICAgIHVuc2ln bmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICAgIF9fdGltZV90IHN0X2N0aW1lOwogICAgdW5zaWdu ZWQgbG9uZyBpbnQgX191bnVzZWQzOwoKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNDsK ICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNTsKCgoKICB9OwoKCnN0cnVjdCBzdGF0NjQK ICB7CiAgICBfX2Rldl90IHN0X2RldjsKICAgIHVuc2lnbmVkIGludCBfX3BhZDE7CgogICAgX19p bm9fdCBfX3N0X2lubzsKICAgIF9fbW9kZV90IHN0X21vZGU7CiAgICBfX25saW5rX3Qgc3Rfbmxp bms7CiAgICBfX3VpZF90IHN0X3VpZDsKICAgIF9fZ2lkX3Qgc3RfZ2lkOwogICAgX19kZXZfdCBz dF9yZGV2OwogICAgdW5zaWduZWQgaW50IF9fcGFkMjsKICAgIF9fb2ZmNjRfdCBzdF9zaXplOwog ICAgX19ibGtzaXplX3Qgc3RfYmxrc2l6ZTsKCiAgICBfX2Jsa2NudDY0X3Qgc3RfYmxvY2tzOwog ICAgX190aW1lX3Qgc3RfYXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDE7CiAg ICBfX3RpbWVfdCBzdF9tdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICAg IF9fdGltZV90IHN0X2N0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwogICAg X19pbm82NF90IHN0X2lubzsKICB9OwojIDk5ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAz CiMgMjAwICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IHN0YXQgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQg Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZzdGF0IChpbnQgX19m ZCwgc3RydWN0IHN0YXQgKl9fYnVmKSB0aHJvdyAoKTsKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMv c3RhdC5oIiAzCmV4dGVybiBpbnQgc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m aWxlLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19yZXN0cmljdCBfX2J1Zikg dGhyb3cgKCk7CmV4dGVybiBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0NjQgKl9f YnVmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBsc3RhdCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZmlsZSwKICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3Qg X19idWYpIHRocm93ICgpOwojIDI0MSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJu IGludCBsc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAogICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gaW50IGNobW9kIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2Rl KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmY2htb2QgKGludCBfX2ZkLCBfX21vZGVfdCBfX21v ZGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBfX21vZGVfdCB1bWFzayAoX19tb2RlX3QgX19tYXNr KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX21vZGVfdCBnZXR1bWFzayAodm9pZCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgbWtkaXIgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21v ZGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRo LCBfX21vZGVfdCBfX21vZGUsIF9fZGV2X3QgX19kZXYpCiAgICAgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IG1rZmlmbyAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSkgdGhy b3cgKCk7CiMgMzA2ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IF9fZnhz dGF0IChpbnQgX192ZXIsIGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpIHRo cm93ICgpOwpleHRlcm4gaW50IF9feHN0YXQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2Zp bGVuYW1lLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBfX2x4c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmls ZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0aHJv dyAoKTsKIyAzMzAgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBpbnQgX19meHN0 YXQ2NCAoaW50IF9fdmVyLCBpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9idWYp CiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgX194c3RhdDY0IChpbnQgX192ZXIsIF9fY29uc3Qg Y2hhciAqX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9f c3RhdF9idWYpIHRocm93ICgpOwpleHRlcm4gaW50IF9fbHhzdGF0NjQgKGludCBfX3ZlciwgX19j b25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0 NjQgKl9fc3RhdF9idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX3hta25vZCAoaW50IF9fdmVy LCBfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAogICAgICAgICAgICAgICAg ICAgICBfX2Rldl90ICpfX2RldikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19pbmxpbmVfXyBpbnQg c3RhdCAoX19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9feHN0YXQgKDMsIF9f cGF0aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBsc3RhdCAoX19jb25z dCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQg Kl9fc3RhdGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX2x4c3RhdCAoMywgX19wYXRoLCBfX3N0 YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGZzdGF0IChpbnQgX19mZCwgc3RydWN0 IHN0YXQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX2Z4c3RhdCAoMywgX19mZCwg X19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBta25vZCAoX19jb25zdCBjaGFy ICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Rldl90IF9fZGV2KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9feG1rbm9kICgxLCBfX3BhdGgsIF9f bW9kZSwgJl9fZGV2KTsKfQoKCgoKCmV4dGVybiBfX2lubGluZV9fIGludCBzdGF0NjQgKF9fY29u c3QgY2hhciAqX19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3Rh dDY0ICpfX3N0YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX194c3RhdDY0ICgzLCBfX3BhdGgs IF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgbHN0YXQ2NCAoX19jb25zdCBj aGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0 ICpfX3N0YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX19seHN0YXQ2NCAoMywgX19wYXRoLCBf X3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGZzdGF0NjQgKGludCBfX2ZkLCBz dHJ1Y3Qgc3RhdDY0ICpfX3N0YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX19meHN0YXQ2NCAo MywgX19mZCwgX19zdGF0YnVmKTsKfQoKCgoKfQojIDE5MjUgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMTk0NSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAxIDMKIyAxOTQ2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvT1MuaCIgMgojIDIwODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5oIgp0eXBlZGVmIHB0aHJlYWRfdCBBQ0VfaHRocmVhZF90Owp0eXBl ZGVmIHB0aHJlYWRfdCBBQ0VfdGhyZWFkX3Q7CgoKCgoKICAgICAgICB0eXBlZGVmIHB0aHJlYWRf a2V5X3QgQUNFX3RocmVhZF9rZXlfdDsKCgoKdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgQUNFX211 dGV4X3Q7CnR5cGVkZWYgcHRocmVhZF9jb25kX3QgQUNFX2NvbmRfdDsKdHlwZWRlZiBwdGhyZWFk X2NvbmRhdHRyX3QgQUNFX2NvbmRhdHRyX3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleGF0dHJfdCBB Q0VfbXV0ZXhhdHRyX3Q7Cgp0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBBQ0VfdGhyZWFkX211dGV4 X3Q7CiMgMjIyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmgiCmNsYXNzIEFDRV9zZW1hX3QKewpmcmllbmQgY2xhc3MgQUNFX09TOwpwcm90ZWN0ZWQ6 CgogIEFDRV9tdXRleF90IGxvY2tfOwoKCiAgQUNFX2NvbmRfdCBjb3VudF9ub256ZXJvXzsKCgog IHVfbG9uZyBjb3VudF87CgoKICB1X2xvbmcgd2FpdGVyc187Cn07CiMgMjU5NyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCnN0cnVjdCBBQ0Vfcnds b2NrX3QKewpwcm90ZWN0ZWQ6CiAgZnJpZW5kIGNsYXNzIEFDRV9PUzsKCiAgQUNFX211dGV4X3Qg bG9ja187CgoKICBBQ0VfY29uZF90IHdhaXRpbmdfcmVhZGVyc187CgoKICBpbnQgbnVtX3dhaXRp bmdfcmVhZGVyc187CgoKICBBQ0VfY29uZF90IHdhaXRpbmdfd3JpdGVyc187CgoKICBpbnQgbnVt X3dhaXRpbmdfd3JpdGVyc187CgoKICBpbnQgcmVmX2NvdW50XzsKCgoKICBpbnQgaW1wb3J0YW50 X3dyaXRlcl87CgoKICBBQ0VfY29uZF90IHdhaXRpbmdfaW1wb3J0YW50X3dyaXRlcl87Cgp9Owoj IDI2NzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5o IgpjbGFzcyBBQ0VfcmVjdXJzaXZlX3RocmVhZF9tdXRleF90CnsKcHVibGljOgoKICBBQ0VfdGhy ZWFkX211dGV4X3QgbmVzdGluZ19tdXRleF87CgoKCiAgQUNFX2NvbmRfdCBsb2NrX2F2YWlsYWJs ZV87CgoKICBpbnQgbmVzdGluZ19sZXZlbF87CgoKICBBQ0VfdGhyZWFkX3Qgb3duZXJfaWRfOwp9 OwojIDI4MTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P Uy5oIgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVm IF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDExMCAiL3Vzci9sb2NhbC9nY2Mt My4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAz CnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAyODEzICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUv YXNzZXJ0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMg NjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBf X2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9f ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19j b25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v cmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJy bnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9f YXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyAyODE1ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDEgIi91c3IvbG9jYWwv Z2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5o IiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MSAzCiMgMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbG9j YWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv dHlwZXMuaCIgMSAzCiMgNDUgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9nY2Mt My4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMK dHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRl ZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDczICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDEwICIvdXNyL2luY2x1 ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxMiAiL3Vz ci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl L3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNs dWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK ewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBf X3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUv X0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19t YnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0 X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vz ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwoj IDI2ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2Nh bC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5 ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEg Ii91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwK ICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19H Q09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdB TF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9E RVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09O Vl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoK CgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBf X2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVk ZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2dj b252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp Z25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRl ZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRl ZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlw ZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAq LCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5z aWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg dW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250 ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVu c2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkg KF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu c19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2Nv bnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsK CiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0 X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5z X2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9f bmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVk X29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGlu dCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAg X19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2Nv bnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBf X21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVk ZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3Qg X19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVk IGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRp b25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0 YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2Rh dGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90 IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25f XyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMgNDUg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBf X2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9f Y2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsK fSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H X3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMxICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAi L3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs dWRlL3N0ZGFyZy5oIiAxIDMKIyA1MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE1OCAi L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklM RTsKIyAxNjggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190 OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAg c3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTEgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ss CiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2Nv bnYKfTsKIyAyNTkgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAg aW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2Vu ZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIq IF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jh c2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAq X0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJr ZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87 CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hv cnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hv cnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzAzICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQg Kl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQp IC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoK ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0 IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3Bs dXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRl ZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp emVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2 b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4g KHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGlu dCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9m biBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dy aXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9u X3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRl OwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29v a2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29v a2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9p ZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBf X3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUs IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0 ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191 ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJ TEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxF ICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAo KTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAo KTsKIyA0MjQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lP X0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19m cCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93 ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7 CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy biBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU0ICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9f cmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAg ICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf SU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRl cm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cg KCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkg dGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29m ZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAo X0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2Zy ZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwojIDUxMCAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKfQojIDc0ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192 YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OCAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19m cG9zX3QgZnBvc190OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzcgIi91 c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk ZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEz OCAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p bmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpz dGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CiMgMTUyICIvdXNyL2xvY2FsL2djYy0zLjAvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g aW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJv dyAoKTsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAoKTsKIyAxNjggIi91 c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk ZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgpOwoKCmV4 dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq dG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTg4ICIvdXNyL2xvY2FsL2djYy0zLjAv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl cm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3Bm eCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJu IGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNo IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2Vk IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9p ZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIzMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu IEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93 ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m aWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3Qg Y2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2 b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0 ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFy ICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hh ciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0 YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt LCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVz LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRsaW5l YnVmIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVy biBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBp bnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNp emVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0 X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19y ZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7 CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh X2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f cHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJp Y3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f cHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0 IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m bXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu dGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz dCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu dGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h cmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywg MiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoK CgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQg Z2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9p ZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg ZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0 dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZn ZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnZXRz IChjaGFyICpfX3MpIHRocm93ICgpOwojIDQzNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3Np emVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0 ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJp Y3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0 cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdl dGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1 dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3Qg Y2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0 cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f biwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3 cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93 ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9f cHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBm d3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAq X19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJu IGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBy ZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA0OTkgIi91c3IvbG9jYWwvZ2NjLTMu MC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4 dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hl bmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s IGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNl dHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMg NTMzICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwg X19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90 IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmdldHBvczY0 IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykK ICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2Nv bnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl eHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0 W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qg X3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1h bmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2Ug KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hh ciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0 aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYg KHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp OwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3Qg X19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QgX19hcmdzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCmlubGluZSBp bnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlz dCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19h cmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9J T19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19m cCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5f SU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCkt Pl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkg dGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9J T19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4p LT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykgdGhy b3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgppbmxpbmUgaW50 CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJl dHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRl X2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1 bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0K CgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJl YW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hh cikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisr ID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhy b3cgKCkKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5f SU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2Mp KSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkp Owp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXpl X3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gX19nZXRkZWxpbSAo X19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGluZSBpbnQKZmVvZl91 bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0p LT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAm IDB4MjApICE9IDApOwp9CiMgNjQxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKfQojIDI4MTYgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMjgzMiAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAxIDMKIyAz MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAzCiMg MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2JhY2t3YXJkX3dh cm5pbmcuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNr d2FyZC9uZXcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL25l dyIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9u ZXcuaCIgMiAzCgp1c2luZyBzdGQ6OmJhZF9hbGxvYzsKdXNpbmcgc3RkOjpub3Rocm93X3Q7CnVz aW5nIHN0ZDo6bm90aHJvdzsKdXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsKdXNpbmcgc3RkOjpzZXRf bmV3X2hhbmRsZXI7CiMgMjgzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL09TLmgiIDIKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAy ODM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIg MgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9m Y250bC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2lu Y2x1ZGUvZmNudGwuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvZmNudGwuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2ZjbnRsLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9mY250 bC5oIiAyIDMKIyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL2ZjbnRsLmgiIDMKc3RydWN0IGZsb2Nr CiAgewogICAgc2hvcnQgaW50IGxfdHlwZTsKICAgIHNob3J0IGludCBsX3doZW5jZTsKCiAgICBf X29mZl90IGxfc3RhcnQ7CiAgICBfX29mZl90IGxfbGVuOwoKCgoKICAgIF9fcGlkX3QgbF9waWQ7 CiAgfTsKCgpzdHJ1Y3QgZmxvY2s2NAogIHsKICAgIHNob3J0IGludCBsX3R5cGU7CiAgICBzaG9y dCBpbnQgbF93aGVuY2U7CiAgICBfX29mZjY0X3QgbF9zdGFydDsKICAgIF9fb2ZmNjRfdCBsX2xl bjsKICAgIF9fcGlkX3QgbF9waWQ7CiAgfTsKIyAzNCAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDIg MwoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRl L2ZjbnRsLmgiIDIgMwojIDYwICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwpleHRlcm4gaW50IGZj bnRsIChpbnQgX19mZCwgaW50IF9fY21kLCAuLi4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg b3BlbiAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX29mbGFnLCAuLi4pIHRocm93ICgpOwoj IDc2ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwpleHRlcm4gaW50IG9wZW42NCAoX19jb25zdCBj aGFyICpfX2ZpbGUsIGludCBfX29mbGFnLCAuLi4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IGNyZWF0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAoKTsK IyA5MyAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMKZXh0ZXJuIGludCBjcmVhdDY0IChfX2NvbnN0 IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAoKTsKIyAxMzAgIi91c3IvaW5j bHVkZS9mY250bC5oIiAzCmV4dGVybiBpbnQgcG9zaXhfZmFkdmlzZSAoaW50IF9fZmQsIF9fb2Zm X3QgX19vZmZzZXQsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19hZHZpc2UpIHRocm93ICgpOwojIDE0MiAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMKZXh0ZXJu IGludCBwb3NpeF9mYWR2aXNlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIHNpemVf dCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FkdmlzZSkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGUgKGludCBfX2ZkLCBfX29mZl90IF9f b2Zmc2V0LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwojIDE2MCAiL3Vzci9pbmNsdWRlL2ZjbnRs LmgiIDMKZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGU2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBf X29mZnNldCwgc2l6ZV90IF9fbGVuKQogICAgIHRocm93ICgpOwoKCgp9CiMgMjg0MyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKCgoKIyAxICIv dXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1 ZGUvbGltaXRzLmgiIDEgMwojIDI4NDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI4 NDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAy CgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjg1MCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDEgMwojIDI4NTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9PUy5oIiAyCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAyODUzICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDI5MTUgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9zdHJlYW1zLmgiIDEK IyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3N0cmVh bXMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv cHJlLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL3N0cmVhbXMuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9zdHJlYW1zLmgiIDIKIyA2MyAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3N0cmVhbXMuaCIKIyAxICIvdXNyL2xvY2Fs L2djYy0zLjAvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDEgMwojIDMxICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMSAzCiMgMzggIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAzCgojIDEgIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv bmZpZy5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYt cGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwoj IDM3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL29zX2RlZmluZXMuaCIgMiAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA0MCAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDIgMwojIDEg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDEg MwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVh bS5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p b3MuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9pb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfaW9zZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfaW9zZndkLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr LXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xv Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91 c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyAz OCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMK CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n KystdjMvYml0cy9zdHJpbmdmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxj bGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4gY2xhc3Mg Y2hhcl90cmFpdHM8Y2hhcj47CgogIHRlbXBsYXRlPD4gY2xhc3MgY2hhcl90cmFpdHM8d2NoYXJf dD47CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz PF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4g PgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBz dHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cgp9CiMgNDEg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAz CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMK IyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAzCgoj IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL2MrK2lvLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMSAzCiMgMzEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs dWRlL2crKy12My9jc3RkaW8iIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j bHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzgg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAz CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYu aCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j c3RkaW8uaCIgMiAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9jc3RkaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyA4NiAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCm5hbWVzcGFj ZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVh cmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7 CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAg dXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2lu ZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZy ZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRw b3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAg dXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2lu ZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6 cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2lu ZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsK ICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwog IHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAg dXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAxNDIgIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwpuYW1lc3BhY2UgX19n bnVfY3h4CnsKICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6 OnZzY2FuZjsKICB1c2luZyA6OnZzbnByaW50ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVz cGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4 Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6 dnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQojIDMyICIvdXNyL2xvY2Fs L2djYy0zLjAvaW5jbHVkZS9nKystdjMvY3N0ZGlvIiAyIDMKIyAzNiAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCiMg MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwojIDM3ICIv dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j Kytpby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1w Yy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDEwMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAzCiMgMSAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1z aW5nbGUuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2 LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItc2luZ2xlLmgiIDMKdHlwZWRlZiBpbnQgX19ndGhyZWFk X211dGV4X3Q7CiMgMjExICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1w Yy1saW51eC1nbnUvYml0cy9ndGhyLXNpbmdsZS5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro cmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApf X2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsK fQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9t dXRleF90ICogKQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9t dXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQp7CiAgcmV0dXJuIDA7Cn0KIyAxMDMg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L2d0aHIuaCIgMiAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2 LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVk ZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlw ZWRlZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1w b3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoKCiAgdHlwZWRlZiBG SUxFIF9fY19maWxlX3R5cGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7CiAgICB0eXBlZGVm IHNob3J0IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFs cGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZGVjID0gMHgwMDAy OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAw eDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9IDB4MDA4MDsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAxMDA7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAgIHN0YXRpYyBjb25z dCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf U19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191bml0YnVm ID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0 MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAg fCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYXNlZmll bGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf ZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAw eDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAweDAxOwogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbiA9 IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEwOwogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0KIyA0MCAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2xv Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDEgMwojIDM3ICIv dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAx ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9jKytjb25maWcuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMgNDIgIi91c3IvbG9jYWwvZ2Nj LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS93Y2hhci5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAz NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzggIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDEgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0 OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hh ci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDg1ICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAzCnN0cnVjdCB0bTsKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2No YXJfdCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4 dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0 ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHdjc2NtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj aGFyX3QgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90 ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j b25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc25jYXNlY21wIChf X2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hs b2NhbGUuaCIgMSAzCiMgMTQ0ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgpleHRlcm4gaW50 IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg KCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBf X2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgd2NzY29sbCAo X19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoK CgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90 IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9fd2NzY29sbF9sIChfX2NvbnN0IHdj aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAg ICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgX193Y3N4ZnJt X2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0 ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIgKF9fY29u c3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NyY2hyIChfX2NvbnN0IHdjaGFy X3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hybnVsIChfX2NvbnN0IHdjaGFyX3Qg Kl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBf X2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2Nz LCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJfdCAq X193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFy X3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKF9f Y29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3Qg Kndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAg ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVf dCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChfX2NvbnN0IHdjaGFyX3QgKl9f cywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3 Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwg c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJf dCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp OwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBz aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtcGNweSAod2NoYXJf dCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCmV4 dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9i ICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1i c3RhdGVfdCAqX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJf dCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3Rh dGVfdCAqX19wKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVz dHJpY3QgX19zLCB3Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90 ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg ICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVf dCBtYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAg ICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoK CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVf dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKQp7IHJldHVybiAoX19wcyAhPSBfX251bGwKICAg ICAgICAgID8gbWJydG93YyAoX19udWxsLCBfX3MsIF9fbiwgX19wcykgOiBfX21icmxlbiAoX19z LCBfX24sIF9fbnVsbCkpOyB9CgoKCgpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAq X19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAg IG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3 Y3NydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19z cmMsIHNpemVfdCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4s IG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3 Y3NucnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g aW50IHdjd2lkdGggKHdpbnRfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRo IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7 CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0 aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQwNyAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyA0MDgg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wg KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25f XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4 dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQog ICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9sIChfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0 ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwg X19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3dj c3RvbGRfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBm bG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBf X3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19n cm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fbnB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo cm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9p bnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBp bnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgX193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdjaGFyX3QgKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0 cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9fbnB0 ciwgX19lbmRwdHIsIDApOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9pbnRl cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5z aWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFsIChf X25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0IHdj c3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsg cmV0dXJuIF9fd2NzdG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRlcm4g X19pbmxpbmUgbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbGRfaW50ZXJuYWwg KF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CgoKX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUg bG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5k cHRyLCBfX2Jhc2UsIDApOyB9Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvdWxsX2ludGVybmFs IChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CgoKCgoKCgpleHRlcm4gd2NoYXJfdCAq d2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93ICgp OwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdj aGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu dCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJv dyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoK ZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRl cm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAg ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsK CgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf X24sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19m b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0 aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zv cm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4g aW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAg dGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9f cywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y bWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv dyAoKSA7CgpleHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0 aHJvdyAoKSA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg IHRocm93ICgpIDsKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKTsK ZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSk7CgoKZXh0ZXJuIHdpbnRfdCBn ZXR3Y2hhciAodm9pZCk7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2MsIF9f RklMRSAqX19zdHJlYW0pOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklM RSAqX19zdHJlYW0pOwoKCmV4dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193Yyk7CgoK CgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSk7 CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAog ICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKTsKCgoKZXh0ZXJu IHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSk7CgoKCgoKZXh0 ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSk7CmV4dGVybiB3aW50 X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpOwoKCmV4dGVybiB3aW50X3QgZmdldHdjX3VubG9j a2VkIChfX0ZJTEUgKl9fc3RyZWFtKTsKCgpleHRlcm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAo d2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191 bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKZXh0ZXJuIHdpbnRfdCBw dXR3Y2hhcl91bmxvY2tlZCAod2NoYXJfdCBfX3djKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3 c191bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pOwoKCmV4 dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193 cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSk7CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z LCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApOwojIDY4MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi IDMKfQojIDQzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3dj aGFyLmgiIDIgMwojIDU3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfY3djaGFyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyAx MjEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIg MwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1 c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2lu ZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwogIHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcg Ojpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6 Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAgdXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6 bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6 OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsKICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcg Ojp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1 c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndwcmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwog IHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondjc2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1 c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVz aW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVz aW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25jcHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAg dXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNp bmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5n IDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6 OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcg Ojp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5l IHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4g d2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcg Ojp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdj aGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3Qq PihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoK ICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihj b25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3Ry OwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19z MikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9f czIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3 Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIo Y29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5h bWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7 CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4 Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6 Ondjc3RvdWxsOwp9CiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz L2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3Rh dGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfU3Rh dGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2ZmOwog ICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5cGUK ICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAgICBz dGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBvcygp OiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAgICBm cG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkK ICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0 cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAgb3Bl cmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7 IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29m ZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yKyhz dHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAg X190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAg ICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0 aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoK ICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAg ICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAgIG9w ZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAh PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNv bnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJl YW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8 bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1w b3M7Cgp9CiMgNDIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p b3Nmd2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv ZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12 My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n KystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv bnN0IGNoYXIqIF9fcyk7Cn0KIyA0MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg Y2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs YXNzIGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh aXRzPF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh clQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0 eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3Ry aW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9j YXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4s CiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xh c3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVi dWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog ICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0 cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh cl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh clQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7 CgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1i dWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFt OwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf aW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4g c3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3Ry ZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwog IHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVm IGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNo YXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAg dHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgoKICB0eXBlZGVmIGJhc2ljX2lv czx3Y2hhcl90PiB3aW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+IHdzdHJl YW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+IHdpc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiB3b3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3Ry ZWFtPHdjaGFyX3Q+IHdpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90 PiB3c3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hhcl90PiB3aXN0 cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08d2NoYXJfdD4gd29zdHJp bmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD4gd3N0cmluZ3N0 cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8d2NoYXJfdD4gd2ZpbGVidWY7CiAgdHlwZWRl ZiBiYXNpY19pZnN0cmVhbTx3Y2hhcl90PiB3aWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0 cmVhbTx3Y2hhcl90PiB3b2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPHdjaGFyX3Q+ IHdmc3RyZWFtOwoKfQojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9l eGNlcHRpb24iIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i aXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n KystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0z LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzggIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDIgMwojIDQw ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNjYgIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKbmFtZXNwYWNlIHN0 ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVzaW5nIDo6c3RyY3B5 OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2luZyA6OnN0cm5jYXQ7 CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcgOjpzdHJjb2xsOwog IHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcgOjpzdHJjc3BuOwog IHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6bWVtc2V0OwogIHVz aW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6bWVtY2hyOwoKICBp bmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXplX3QgX19uKQogIHsg cmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbik7IH0K CiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihjaGFyKiBfX3MxLCBp bnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFy Kj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxpbmUgY2hhcioKICBz dHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGlu X3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5n IDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19u KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9f czEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hhcioKICBzdHJzdHIo Y2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ryc3Ry KGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMgNDAgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi91 c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMSAzCiMgNDEgIi91 c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwoK bmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNo YXJfdHJhaXRzCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIHR5 cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9z X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1i c3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJf dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9 CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0 IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBz dGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlw ZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQK ICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z Miwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8 IF9fbjsgKytfX2kpCiAgICAgICAgICBpZiAoIWVxKF9fczFbX19pXSwgX19zMltfX2ldKSkKICAg ICAgICAgICAgcmV0dXJuIGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0xIDogMTsKICAgICAg ICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29u c3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsKICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9 IF9fczsKICAgICAgICB3aGlsZSAoKl9fcCkgKytfX3A7CiAgICAgICAgcmV0dXJuIChfX3AgLSBf X3MpOwogICAgICB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNv bnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAg ICAgewogICAgICAgIGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVfdChfX3Ag LSBfX3MpIDwgX19uOyArK19fcCkKICAgICAgICAgIGlmICgqX19wID09IF9fYSkgcmV0dXJuIF9f cDsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAg ICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f bikKICAgICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbW1vdmUoX19zMSwgX19zMiwgX19uICog c2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5 KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAg ICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihj aGFyX3R5cGUpKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJf dHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7CiAgICAgICAgZm9y IChjaGFyX3R5cGUqIF9fcCA9IF9fczsgX19wIDwgX19zICsgX19uOyArK19fcCkKICAgICAgICAg IGFzc2lnbigqX19wLCBfX2EpOwogICAgICAgIHJldHVybiBfX3M7CiAgICAgIH0KCiAgICAgIHN0 YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAg ICAgIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg ICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9f Yyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBl JiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2My OyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nh c3Q8aW50X3R5cGU+KC0xKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2Yo Y29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2Yo KSkgPyBpbnRfdHlwZSgwKSA6IF9fYzsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1 Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190 eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0 YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5 cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoK ICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3Rh dGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm IF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAg ICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIs IHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9Cgog ICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAg ICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUq CiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJf dHlwZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPiht ZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBt b3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIs IF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSog X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAg IHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9f biwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4o bWVtc2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0 b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19p bnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0 aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50 X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGlj IGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEp KTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUm IF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgoK ICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAgICAg dHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5cGU7 CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJlYW1w b3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBz dGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm IF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVx KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJl dHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNo YXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2Mx IDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlw ZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVy biB3bWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAg bGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19zKTsg fQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5 cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJu IHdtZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAg IG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBlIF9f bikKICAgICAgeyByZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3Rh dGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw ZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBf X24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBf X3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQoX19z LCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBl KGNvbnN0IGludF90eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBz dGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsg cmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90 eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyBy ZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkg eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAgICBz dGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7 IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFy X3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRz X21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAg ICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01f YywgX19hKTsgfQogICAgfTsKfQojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0z LjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIg MSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3 ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s aW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAzCm5hbWVz cGFjZSBzdGQKewogIHR5cGVkZWYgaW50KiBfX2NfbG9jYWxlOwp9CiMgNDEgIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xv Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyAzOCAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMwoj IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv aW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDIgMwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j bHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAzCgojIDEgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZp Zy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv ZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgNDIgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDEgMwojIDMxICIvdXNyL2xv Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMwojIDEgIi91 c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr K2NvbmZpZy5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAzNCAiL3Vzci9sb2Nh bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi91 c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5 cGVzLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnN0cnVjdCBpbnB1 dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qg Zm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1 Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90 YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVj dGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0Rpc3RhbmNlPiBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3IgewogIHR5cGVkZWYgaW5wdXRfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw ZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwog IHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yIHsKICB0 eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2 b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm IHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvciB7CiAgdHlw ZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U cCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl ZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0 b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv cnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5j ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcg aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E aXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRl ZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ2F0ZWdvcnksIGNsYXNzIF9U cCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgY2xhc3MgX1BvaW50ZXIg PSBfVHAqLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJj4Kc3RydWN0IGl0ZXJhdG9yIHsKICB0eXBl ZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl OwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9Qb2ludGVy IHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxj bGFzcyBfSXRlcmF0b3I+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogIHR5cGVkZWYgdHlwZW5h bWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYg dHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5 cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBl bmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nl c3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5 cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBw b2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29u c3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7Cn07CiMgMTQw ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFz ZV90eXBlcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnko Y29uc3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+ OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICBy ZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVy ZW5jZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBf SXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J dGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRv cl9jYXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0 ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFz cyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5 cGUqCnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9f aSk7IH0KCn0KIyAzNSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2l0ZXJhdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0z LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAx IDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9j aGVjay5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAyIDMKIyA0MSAiL3Vzci9sb2Nh bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3Is IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgd2hpbGUg KF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlz dGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewoKICBfX2Rpc3RhbmNlKF9fZmlyc3Qs IF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w dXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsr X19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46 OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QpCnsKCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu cHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX0NhdGVnb3J5OwogIHJldHVybiBf X2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lu cHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgd2hpbGUgKF9fbi0tKSArK19faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRp cmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAg ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogIGlmIChfX24gPiAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3 aGlsZSAoX19uKyspIC0tX19pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNz SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIF9f aSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh bmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBf X24pCnsKCiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKfQoK fQojIDM2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0 b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBf Q29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29u dGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy X3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7 CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhw bGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigm X194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShj b25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250 YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgYmFja19p bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9 CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVy biAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisr KGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpp bmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29u dGFpbmVyJiBfX3gpIHsKICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4o X194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9p dGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0 eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5 cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlw ZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9D b250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0 b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZh bHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsK ICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxf Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0 X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0K fTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVy biBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29u dGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsK cHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91 dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9p bnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRh aW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICA6IGNvbnRh aW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+Jgog IG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVl KSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICArK2l0 ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYg b3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29u dGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUKaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKewog IHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOwogIHJldHVybiBp bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0ZXIoX19pKSk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVu Y2UgPSBfVHAmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PgpjbGFzcyBy ZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVj dGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+IF9TZWxm Owpwcm90ZWN0ZWQ6CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAg dHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0 eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlw ZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNl OwoKICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVy c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9feCkKICAg IDogY3VycmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNlKCkgY29uc3Qg eyByZXR1cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAg X0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190 bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3Iq KCkpOyB9CiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4g KnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0 aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0 b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3Bl cmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAg ICByZXR1cm4gX190bXA7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9U cCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KAog ICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1Jl ZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh dG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuIF9feC5i YXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9U cCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KAog ICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1Jl ZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh dG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuICEoX194 ID09IF9feSk7Cn0KIyAxOTMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJldmVy c2VfaXRlcmF0b3IKewpwcm90ZWN0ZWQ6CiAgX0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRl Z29yeQogICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsK ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUKICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAg ICAgcmVmZXJlbmNlOwoKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5cGVk ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVyc2Vf aXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBf X3gpIDogY3VycmVudChfX3gpIHt9CgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9f eCkgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KICBy ZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICA6 IGN1cnJlbnQoX194LmJhc2UoKSkge30KCiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3QgeyBy ZXR1cm4gY3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfSXRl cmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVy IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYg b3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1Nl bGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJl bnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytj dXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewog ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsK ICB9CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICBy ZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRpZmZl cmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlzOwog IH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0 dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJl bmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9 CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1 cm4gKigqdGhpcyArIF9fbik7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJh c2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVy biAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9v bCBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg ICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkg ewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJh dG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh dG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh dG9yPiYgX194LAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf X3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4Kb3BlcmF0b3Ir KHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9f biwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAg cmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQoK CnRlbXBsYXRlIDxjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ2hhclQgPSBjaGFyLCBjbGFz cyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgIGNsYXNzIF9EaXN0ID0g cHRyZGlmZl90PgpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKcHVibGljOgogIHR5cGVkZWYgX0No YXJUIGNoYXJfdHlwZTsKICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICB0eXBlZGVmIGlu cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90 eXBlOwogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1Rw KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CgogIGlzdHJlYW1faXRl cmF0b3IoKSA6IF9NX3N0cmVhbSgwKSwgX01fb2soZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRv cihpc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KCiAg cmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CiAgcG9pbnRl ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgaXN0cmVh bV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiAqdGhp czsKICB9CiAgaXN0cmVhbV9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgaXN0cmVhbV9p dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwog IH0KCiAgYm9vbCBfTV9lcXVhbChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX3gpIGNvbnN0CiAg ICB7IHJldHVybiAoX01fb2sgPT0gX194Ll9NX29rKSAmJiAoIV9NX29rIHx8IF9NX3N0cmVhbSA9 PSBfX3guX01fc3RyZWFtKTsgfQoKcHJpdmF0ZToKICBpc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsK ICBfVHAgX01fdmFsdWU7CiAgYm9vbCBfTV9vazsKCiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01f b2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogICAgaWYgKF9N X29rKSB7CiAgICAgICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7CiAgICAgIF9NX29rID0gKl9NX3N0 cmVhbSA/IHRydWUgOiBmYWxzZTsKICAgIH0KICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0PgppbmxpbmUgYm9vbApvcGVy YXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0 PiYgX194LAogICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9U cmFpdHMsIF9EaXN0PiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9lcXVhbChfX3kpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0 PgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hh clQsIF9UcmFpdHMsIF9EaXN0PiYgX194LAogICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0 b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KSB7CiAgcmV0dXJuICFfX3guX01f ZXF1YWwoX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ2hh clQgPSBjaGFyLCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CmNsYXNzIG9z dHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5 cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv aWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9p ZCByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIDogX01f c3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1f dHlwZSYgX19zLCBjb25zdCBfQ2hhclQqIF9fYykKICAgIDogX01fc3RyZWFtKCZfX3MpLCBfTV9z dHJpbmcoX19jKSB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9U cCYgX192YWx1ZSkgewogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAgaWYgKF9NX3N0cmlu ZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIG9zdHJl YW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFt X2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1f aXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CnByaXZhdGU6 CiAgb3N0cmVhbV90eXBlKiBfTV9zdHJlYW07CiAgY29uc3QgX0NoYXJUKiBfTV9zdHJpbmc7Cn07 CiMgNDE3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0 b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+ CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJh aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAg IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAg ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAg ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KewoKcHJvdGVj dGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgogIHR5cGVkZWYgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxfaXRlcmF0b3JfdHlwZTsKICB0 eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRl Z29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVf dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBk aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVy IHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UgcmVm ZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkg eyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6 IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogIGlubGlu ZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRh aW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogIHJlZmVyZW5j ZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogIHBvaW50ZXIK ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICBub3JtYWxfaXRl cmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsg fQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25v cm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYK ICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxf aXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv cihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVyYXRvcltdKGNvbnN0IGRpZmZl cmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICBu b3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYg X19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRl cmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QK ICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICBub3Jt YWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u KQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0 b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7 IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICBkaWZmZXJl bmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29u c3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgY29uc3QgX0l0 ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9Cn07CgoKCnRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D b250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gX19saHMu YmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwg dHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3Bl cmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg X19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv bnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQoKCgp0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29u dGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNl KCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9y Pihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs CiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy PiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGlu ZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX3JocyA8IF9fbGhzKTsgfQoK dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5h bWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAh KF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1l IF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu ZXI+Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+Ojpk aWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cgp9CiMgMzcgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyA0MyAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMK IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5Lmgi IDEgMwojIDE5ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVt b3J5LmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNiAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAx ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFpci5oIiAxIDMK IyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIg MwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0 IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5 cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vj b25kKCkge30KCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJz dChfX2EpLCBzZWNvbmQoX19iKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+ CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNl Y29uZChfX3Auc2Vjb25kKSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh aXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBf X3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0 IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8 CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5z ZWNvbmQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w ZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194 LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0 IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1 cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf VDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVDEsIGNsYXNzIF9UMj4KCgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKF9UMSBf X3gsIF9UMiBfX3kpCgoKCnsKICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOwp9Cgp9 CiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz ZS5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3R5 cGVfdHJhaXRzLmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy90eXBlX3RyYWl0cy5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAyMSAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMiAzCiMgNTcg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMK dGVtcGxhdGUgPGJvb2wgX1RydXRoPiBzdHJ1Y3QgX0Jvb2wge307CnR5cGVkZWYgX0Jvb2w8dHJ1 ZT4gX190cnVlX3R5cGU7CnR5cGVkZWYgX0Jvb2w8ZmFsc2U+IF9fZmFsc2VfdHlwZTsKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDgxICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19m YWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19m YWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxz ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxz ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8 Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf dHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu c2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7 Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxs b25nIGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19m YWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJv b2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVf dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl Z3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8 dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf SW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25n PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25n PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPHR5cGVu YW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2Vf dHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBzdGQgewogICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9 OwoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgpzdHJ1 Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgc3RkOjpfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is IF9Db250YWluZXI+ID4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7Cn07CiMgNDEg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy IDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJp bmcuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9sb2Nh bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln LmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf Y3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf Y3N0ZGxpYi5oIiAyIDMKIyA3MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2NzdGRsaWIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVz aW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6 YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwog IHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2lu ZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFi czsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1 c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNp bmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6 c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5 c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9u ZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QK ICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMg MTI1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5o IiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9F eGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9f eCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBs b25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRp dl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsg X19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0K CiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQog IHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19k OyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNp bmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9Cgpu YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVf Y3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6Omxs YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAg dXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2lu ZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2lu ZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA0NSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQ2ICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMgNDcgIi91c3IvbG9jYWwvZ2Nj LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA0OSAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX3R5cGVzLmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNTEgIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAx ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIg MSAzCiMgNTIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv YmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9j b25jZXB0X2NoZWNrLmgiIDEgMwojIDUzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5s aW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19i LCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190 bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIy PgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIg X19iKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9f YikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9 CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3Qg X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0 dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0 IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlm IChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2Es IGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2IsIF9f YSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U cCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVy biBfX2I7IHJldHVybiBfX2E7Cn0KIyAxMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIgX19j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7 CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs IGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlcgpf X2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn LCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsg X19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0 OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNv bnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19m aXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3Vs dCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgcmV0dXJuIF9fY29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0 KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5s aW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQsCiAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAogICAg ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcD4KaW5saW5lIF9UcCogX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwg X1RwKiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsKICBy ZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJz dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFz dCwgX19yZXN1bHQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw dXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4KF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5 cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAg IF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 LCBfVHJpdmlhbCgpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gX091dHB1dEl0ZXIo X19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpKTsKfQoKdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0 SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNl X3R5cGUpCnsKICByZXR1cm4gX19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf X3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9uaTEoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKewogIHR5cGVkZWYgdHlw ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7 CiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVz dWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgdHlwZWRlZiB0eXBlbmFt ZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICBy ZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUg X091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46 Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQsIF9fTm9ybWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u YWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0 YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVj dGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0 b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlKikKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICotLV9fcmVzdWx0ID0gKi0t X19sYXN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l IF9CaWRpcmVjdGlvbmFsSXRlciBfX2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFu Y2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAqLS1fX3Jlc3Vs dCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKCgoKCnRlbXBsYXRlIDxjbGFz cyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAg ICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRl cmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIF9DYXQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg X0Rpc3RhbmNlOwoKICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMiBjb3B5KF9CaWRpcmVjdGlv bmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2Fy ZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNo PF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAq IF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBw dHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0g X051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAt IF9OdW07CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2Fy ZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAq IGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3Vs dCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3Ry dWVfdHlwZT4KICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsK CnRlbXBsYXRlIDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFj a3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpIHsKICB0 eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C STI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYmFj a3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgOjpjb3B5 KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwg dHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxf aXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUp IHsKICByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQuYmFzZSgpKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkky PgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkx IF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpewogIHJldHVybiBf X2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0 ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3 YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1 bHQsIF9fdHJ1ZV90eXBlKSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9y PF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0 X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFs KCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9C STIgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9C STEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lz X25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5 X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3Jt YWwoKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUg X0JJMiBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1 bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgdHlwZWRlZiB0eXBlbmFtZSBf SXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2Nv cHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3Jt YWwoKSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh c3MgX091dHB1dEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+IF9fY29weV9uKF9J bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGZvciAoIDsgX19jb3Vu dCA+IDA7IC0tX19jb3VudCkgewogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19fZmly c3Q7CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0 SXRlcj4oX19maXJzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JBSXRlciwgY2xh c3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfUkFJdGVyLCBfT3V0cHV0 SXRlcj4KX19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp IHsKICBfUkFJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9S QUl0ZXIsIF9PdXRwdXRJdGVyPihfX2xhc3QsIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9P dXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KX19jb3B5X24o X0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkg ewogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAg ICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWly PF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpjb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6 ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVy biBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgZmlsbChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICAqX19maXJzdCA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xh c3MgX1NpemUsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgZmlsbF9uKF9PdXRwdXRJdGVyIF9fZmly c3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBm b3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7 CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCgoKaW5saW5lIHZvaWQgZmlsbCh1bnNpZ25lZCBjaGFyKiBf X2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciYgX19jKQp7CiAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICBtZW1zZXQo X19maXJzdCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgdm9pZCBmaWxsKHNp Z25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAg IGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBzaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICBt ZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3Qg LSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xh c3QsIGNvbnN0IGNoYXImIF9fYykKewogIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmly c3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIHVuc2lnbmVkIGNoYXIqIGZpbGxfbih1 bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0 ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1NpemU+CmlubGluZSBzaWduZWQgY2hhciogZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9f biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKewog IGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9f bjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgY2hhciogZmlsbF9uKGNoYXIqIF9f Zmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2Zp cnN0ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9CgoKCgoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwg X0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0 MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2Zp cnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0 MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1 dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJ dGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By ZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7 CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl cjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg Y2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9 IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoISgqX19maXJzdDEgPT0g Kl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJl ZGljYXRlPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9CaW5h cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3Ig KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAo IV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7 CiAgcmV0dXJuIHRydWU7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz IF9JbnB1dEl0ZXIyPgpib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m aXJzdDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAg aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoKl9f Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2Zp cnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPgpib29sIGxl eGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytf X2ZpcnN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJl dHVybiB0cnVlOwogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJl dHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIg IT0gX19sYXN0MjsKfQoKaW5saW5lIGJvb2wKbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3Qg dW5zaWduZWQgY2hhciogX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2Zp cnN0MTsKICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0 IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9f bGVuMikpOwogIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwg X19sZW4yOwp9CgppbmxpbmUgYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFy KiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsK CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9f Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNo YXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln bmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJl XzN3YXkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIpCnsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh PSBfX2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4g LTE7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4gMTsKICAgICsr X19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICBpZiAoX19maXJzdDIgPT0gX19sYXN0Mikg ewogICAgcmV0dXJuICEoX19maXJzdDEgPT0gX19sYXN0MSk7CiAgfQogIGVsc2UgewogICAgcmV0 dXJuIC0xOwogIH0KfQoKaW5saW5lIGludApfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXko Y29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3QgcHRy ZGlmZl90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBjb25zdCBwdHJkaWZmX3QgX19s ZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChf X2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogIHJldHVybiBfX3Jlc3Vs dCAhPSAwID8gX19yZXN1bHQKICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19s ZW4yID8gMCA6IChfX2xlbjEgPCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludApfX2xl eGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNo YXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBf X2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gX19sZXhpY29ncmFwaGlj YWxfY29tcGFyZV8zd2F5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz aWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBsZXhpY29ncmFwaGlj YWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg cmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19sYXN0MSwg X19maXJzdDIsIF9fbGFzdDIpOwp9Cgp9CiMgMjEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDI4ICIvdXNyL2xvY2FsL2djYy0z LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xv Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwoj IDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5o IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZv aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy b3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoK ICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df aW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5n dGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jhbmdl KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lk CiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMjkgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNy L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAz MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGli LmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2NzdHJpbmcuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9hc3Nl cnQuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAyIDMKIyA2NSAi L3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNz ZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0 IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1 cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0s IF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19u b3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3Nl cnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCiMgMSAiL3Vz ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMg MzMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi IDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n bnUvYml0cy9ndGhyLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfdGhyZWFkcy5oIiAyIDMKIyA1MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA2NiAiL3Vz ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1 Y3QgX1JlZmNvdW50X0Jhc2UKewoKCgoKICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgoKICAgdm9s YXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZf Y291bnRfbG9jazsKICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9f bikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gMDsKICAgICAgX01fcmVm X2NvdW50X2xvY2sgPSBfX3RtcDsKCgoKCgogICAgfQojIDExMiAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsK ICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICArK19NX3Jl Zl9jb3VudDsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsK ICB9CiAgX1JDX3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZf Y291bnRfbG9jayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50Owog ICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgcmV0dXJu IF9fdG1wOwogIH0KIyAxNjMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF90aHJlYWRzLmgiIDMKfTsKIyAyODQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CnN0cnVjdCBf U1RMX211dGV4X3NwaW4gewogIGVudW0geyBfX2xvd19tYXggPSAzMCwgX19oaWdoX21heCA9IDEw MDAgfTsKCgogIHN0YXRpYyB1bnNpZ25lZCBfX21heDsKICBzdGF0aWMgdW5zaWduZWQgX19sYXN0 Owp9OwoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2lu c3Q+OjpfX21heCA9IF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX2xvd19tYXg7Cgp0ZW1wbGF0 ZSA8aW50IF9faW5zdD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbGFzdCA9 IDA7CiMgMzExICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhy ZWFkcy5oIiAzCnN0cnVjdCBfU1RMX211dGV4X2xvY2sKewoKCgoKCgoKICBfX2d0aHJlYWRfbXV0 ZXhfdCBfTV9sb2NrOwogIHZvaWQgX01faW5pdGlhbGl6ZSgpIHsKIyAzNDIgIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB9CiAgdm9pZCBf TV9hY3F1aXJlX2xvY2soKSB7CgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7 CiAgfQogIHZvaWQgX01fcmVsZWFzZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211dGV4X3Vu bG9jaygmX01fbG9jayk7CiAgfQojIDQ1MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwp9OwojIDQ5MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sK ewogIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRl eF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWly ZV9sb2NrKCk7IH0KICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2Nr KCk7IH0KCnByaXZhdGU6CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsK ICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwp9OwoKfQojIDM5ICIvdXNy L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgNjgg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCm5h bWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xhc3MgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6 ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgc3Rh dGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgpwdWJsaWM6CgogIHN0 YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0g bWFsbG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFs bG9jKF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9j YXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQoKICBzdGF0aWMg dm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICB7 CiAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9 PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAg IHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5k bGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9j X2FsbG9jX29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7 CiAgICByZXR1cm4oX19vbGQpOwogIH0KCn07CgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lk ICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9o YW5kbGVyKSgpID0gMDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQg KCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAo OzspIHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hh bmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhy b3dfYmFkX2FsbG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAg ICAgX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihf X3Jlc3VsdCk7CiAgICB9Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBf X24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVz dWx0OwoKICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxs b2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxl cikgeyBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hh bmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBp ZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2Nf YWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CmNsYXNzIHNpbXBsZV9hbGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBh bGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikg X0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBh bGxvY2F0ZSh2b2lkKQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXpl b2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3Qg X19uKQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICog c2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAg ICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgoKCgoKCnRl bXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVu dW0ge19TX2V4dHJhID0gOH07CgoKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNp emVfdCBfX24pCiAgewogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0 ZShfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAg ICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICB9CgogIHN0YXRpYyB2b2lkIGRl YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0g KGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihz aXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCop X19yZWFsX3AgPT0gX19uIiwgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGxvYy5oIiwgMTkwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgIF9BbGxv Yzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3Rh dGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBf X25ld19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19l eHRyYTsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29s ZF9zeikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRf c3oiLCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgi LCAxOTcsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgY2hhciogX19yZXN1bHQgPSAo Y2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50 KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiAr IChpbnQpIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAg cmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKfTsKIyAyNDEgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxi b29sIHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUgewoK cHJpdmF0ZToKCgogIGVudW0ge19BTElHTiA9IDh9OwogIGVudW0ge19NQVhfQllURVMgPSAxMjh9 OwogIGVudW0ge19ORlJFRUxJU1RTID0gMTZ9OwogIHN0YXRpYyBzaXplX3QKICBfU19yb3VuZF91 cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FM SUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgdW5pb24gX09iaiB7CiAgICAg ICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRf ZGF0YVsxXTsKICB9OwoKICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W107Cgog IHN0YXRpYyBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpIHsKICAgICAg ICByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9BTElHTi0xKS8oc2l6ZV90KV9BTElHTiAt IDEpOwogIH0KCgogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKICBzdGF0 aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgog IHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsK ICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgogICAgc3RhdGljIF9TVExfbXV0ZXhfbG9j ayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCiAgICBjbGFzcyBfTG9jazsKICAgIGZyaWVu ZCBjbGFzcyBfTG9jazsKICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAg ICAgIF9Mb2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX2Fj cXVpcmVfbG9jaygpOyB9OyB9CiAgICAgICAgICAgIH5fTG9jaygpIHsgeyBpZiAodGhyZWFkcykg X1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfTsgfQogICAgfTsKCnB1 YmxpYzoKCgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQq IF9fcmV0ID0gMDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICBf X3JldCA9IG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKTsKICAgIH0KICAgIGVsc2UgewogICAg ICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1NfZnJlZV9saXN0 ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKCgogICAgICBfTG9jayBfX2xvY2tfaW5zdGFu Y2U7CgogICAgICBfT2JqKiBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgaWYgKF9f cmVzdWx0ID09IDApCiAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7 CiAgICAgIGVsc2UgewogICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2Zy ZWVfbGlzdF9saW5rOwogICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCiAg ICByZXR1cm4gX19yZXQ7CiAgfTsKCgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19w LCBzaXplX3QgX19uKQogIHsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAg ICBtYWxsb2NfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgZWxzZSB7CiAgICAgIF9P YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAogICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBf U19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwoKCgoK ICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9s aW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CgogICAg fQogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRf c3osIHNpemVfdCBfX25ld19zeik7Cgp9IDsKCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPHRydWUsIDA+IGFsbG9jOwp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxz ZSwgMD4gc2luZ2xlX2NsaWVudF9hbGxvYzsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50 IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiB0 cnVlOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29s IG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p bnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoKCgoKCnRlbXBs YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhcioKX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX3RvdGFs X2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19l bmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFs X2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0 YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAg fSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19ub2JqcyA9IChp bnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUg KiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19z dGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAg IH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgIDIgKiBf X3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICBp ZiAoX19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9m cmVlX2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVl bGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9m cmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAg Kl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAg IF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBp ZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAg ICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgX09iaiogX19w OwoKCgogICAgICAgICAgICBmb3IgKF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICAgICBfX2kg PD0gKHNpemVfdCkgX01BWF9CWVRFUzsKICAgICAgICAgICAgICAgICBfX2kgKz0gKHNpemVfdCkg X0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCAr IF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVl X2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICAgICAgICAg ICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAg ICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAg X1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgIHJl dHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAgICAgICAgICAg X1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9f Z2V0KTsKCgoKICAgICAgICB9CiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0 OwogICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0Owog ICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgIH0KfQoK CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kdm9pZCoKX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24p CnsKICAgIGludCBfX25vYmpzID0gMjA7CiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxs b2MoX19uLCBfX25vYmpzKTsKICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAg IF9PYmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4 dF9vYmo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5r KTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo X19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVl X2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChf X2kgPSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAg ICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAg ICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAt PiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25l eHRfb2JqOwogICAgICAgIH0KICAgICAgfQogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKdGVtcGxh dGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u ZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fY29weV9zejsKCiAgICBp ZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkg X01BWF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAg IH0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3op KSByZXR1cm4oX19wKTsKICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgX19j b3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25ld19zejsKICAgIG1l bWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xk X3N6KTsKICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCgogICAgdGVtcGxhdGUgPGJvb2wgX190aHJl YWRzLCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgICAg ICAgPSB7IDAgfTsKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFy KiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9m cmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciogX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAw OwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCnRl bXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KdHlwZW5hbWUgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsKICAgIF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9ORlJFRUxJU1RTCl0g PSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfTsKIyA1 MjYgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAz CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvciB7CiAgdHlwZWRlZiBhbGxvYyBf QWxsb2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk aWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYg Y29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlw ZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgYWxs b2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw MT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICB+YWxsb2Nh dG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3Qg eyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2Ug X194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUg X19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0 PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAg ICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlw ZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsg fQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXpl X3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNv bnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShw b2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0 b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlw ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0 IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2MDIgIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxsb2Mg X191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRl ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5 cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7 CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1 ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBl ZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3Io KSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3co KQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0 ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAx LCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3Vu ZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVy IGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3Bv aW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9 CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAg cmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdf YWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoKICB2 b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJs eWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVf dHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBz aXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBf X3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19w KSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2Fs bG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlw ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsK ICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVl X3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxs b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlp bmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRv cjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxv Y2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2Fs bG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUgPGludCBpbnN0 PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGlu c3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0 ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmlubGlu ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYs CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p bnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBk ZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19h bGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDczMiAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25z dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j YXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJh aXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1Rw MT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBl ZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFsbG9j YXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQg X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl PF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z dD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf VHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7CiAgc3Rh dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9h bGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgog ICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVs dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9y X3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0Fs bG9jX3RyYWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJv b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRl YnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U cCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8 X1RwLAogICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs ZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwg X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wgX190aHIsIGludCBfX2luc3Q+CnN0 cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9y PF9UcDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0 YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlw ZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2lu c3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2Fs bG9jYXRvcjxfVHAxLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJv b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRl YnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U cCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKfQojIDIyICIvdXNy L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIg MSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25z dHJ1Y3QuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9uZXciIDEg MwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3Ry dWN0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNDcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj bGFzcyBfVDI+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192 YWx1ZSkgewpuZXcgKCh2b2lkKikgX19wKSBfVDEoX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVDE+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBuZXcgKCh2b2lkKikg X19wKSBfVDEoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX0Rlc3Ryb3ko X1RwKiBfX3BvaW50ZXIpIHsKICBfX3BvaW50ZXItPn5fVHAoKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQKX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCnsKICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0cm95KCYqX19maXJzdCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBfX2Rlc3Ryb3lf YXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90eXBlKSB7fQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQK X19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xh c3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVzdHJ1Y3RvcjsKICBfX2Rlc3Ry b3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIF9EZXN0cm95KF9Gb3J3YXJk SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICBfX2Rlc3Ryb3ko X19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgppbmxpbmUgdm9pZCBf RGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGludCosIGludCop IHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGxvbmcqLCBsb25nKikge30KaW5saW5lIHZvaWQgX0Rl c3Ryb3koZmxvYXQqLCBmbG9hdCopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGRvdWJsZSosIGRv dWJsZSopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90Kikge30KCgoK CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9U MSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBfQ29uc3RydWN0KF9fcCwgX192YWx1ZSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCkg ewogIF9Db25zdHJ1Y3QoX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQg ZGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9EZXN0cm95KF9fcG9pbnRlcik7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBkZXN0cm95KF9Gb3J3YXJk SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICBfRGVzdHJveShf X2ZpcnN0LCBfX2xhc3QpOwp9Cgp9CiMgMjMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgMjQgIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAz CiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVm LmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpwYWlyPF9UcCosIHB0 cmRpZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCnsK ICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgIF9f bGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg ICBfVHAqIF9fdG1wID0gKF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkp OwogICAgaWYgKF9fdG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4o X190bXAsIF9fbGVuKTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBw dHJkaWZmX3Q+KChfVHAqKTAsIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgcGFp cjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikg ewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7Cn0KCgoK CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRf dGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRf dGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw Pgp2b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVt cG9yYXJ5X2J1ZmZlciB7CnByaXZhdGU6CiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBw dHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKICB2b2lkIF9NX2FsbG9jYXRlX2J1 ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7 CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkp CiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01f bGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVv ZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVu IC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYs IF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2 YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBf TV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1 cm4gX01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4g X01fb3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQog IF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3Jhcnlf YnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp IHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCiAgICB0cnkgewogICAg ICBfTV9sZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAg ICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBf TV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRj aCguLi4pIHsgZnJlZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwOyB0aHJv dzsgfTsKICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIGRlc3Ryb3koX01fYnVmZmVy LCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6 CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lk IG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgoKCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXJhdG9yLAogICAgICAgICAgY2xhc3MgX1RwCiAgICAgICAgICAgICAg ICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVl X3R5cGUKICAgICAgICAgPgpzdHJ1Y3QgdGVtcG9yYXJ5X2J1ZmZlciA6IHB1YmxpYyBfVGVtcG9y YXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CnsKICB0ZW1wb3JhcnlfYnVmZmVyKF9G b3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9U ZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJzdCwgX19sYXN0KSB7 fQogIH50ZW1wb3JhcnlfYnVmZmVyKCkge30KfTsKCn0KIyAyNSAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNCAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQu aCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Ry aW5nLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdW5pbml0aWFsaXplZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIK X191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBjb3B5KF9fZmly c3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh bHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgewogICAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29u c3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgY2F0Y2go Li4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7IHRocm93OyB9Owp9CgoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUg X0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs dCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojppc19QT0Rf dHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwg X19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgogIHVuaW5pdGlhbGl6 ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICByZXR1cm4gX191bmluaXRpYWxp emVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX192YWx1ZV90eXBlKF9fcmVzdWx0KSk7Cn0KCmlubGluZSBjaGFyKiB1bmluaXRp YWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShf X3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0ICsg KF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCoKdW5pbml0aWFsaXplZF9jb3B5 KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJz dCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1 bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX0Zvcndh cmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUg X19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAg ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgX0ZvcndhcmRJdGVy IF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5IHsKICAgIGZvciAoIDsgX19jb3VudCA+IDAgOyAtLV9f Y291bnQsICsrX19maXJzdCwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19m aXJzdCk7CiAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3Qs IF9fY3VyKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7IHRo cm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TaXpl LCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9y d2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp IHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1 cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigKICAgICAgICAgICAgICAg ICBfX2xhc3QsCiAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9f bGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9T aXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJk SXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9f Y291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJl dHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9G b3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgp1bmluaXRp YWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlh bGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRp YWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7 CiAgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0g X19maXJzdDsKICB0cnkgewogICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAg ICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95 KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIHZvaWQgX191bmluaXRpYWxpemVkX2Zp bGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194LCBfVHAxKikKewogIHR5cGVkZWYg dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICBfX3Vu aW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7Cgp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIHVu aW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9maWxsKF9fZmlyc3Qs IF9fbGFzdCwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0 ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90 eXBlKQp7CiAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlcgpf X3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19u LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBl KQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgewogICAgZm9yICggOyBf X24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwog ICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdCwgX19j dXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Np emUsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlh bGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYg X194LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNf UE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19m aXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKdW5pbml0aWFs aXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBf X3gpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCwg X192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQojIDIzMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBf Rm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmlu aXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0cnkgewogICAg cmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogIH0K ICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoK CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRl cj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJk SXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1 bHQsIF9fbWlkLCBfX3gpOwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1 bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVk X2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIg X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9G b3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEs IF9fZmlyc3QyKTsKICB0cnkgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0 MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOyB0 aHJvdzsgfTsKfQoKfQojIDI2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0z LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFj ZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xh c3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0ZvcndhcmRJdGVyYXRvciBf TV9pdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j ZTsKCiAgZXhwbGljaXQgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gp IDogX01faXRlcihfX3gpIHt9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yKigpIHsg cmV0dXJuICp0aGlzOyB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBf VHAmIF9fZWxlbWVudCkgewogICAgY29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAg IHJldHVybiAqdGhpczsKICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRv ciwgX1RwPiYgb3BlcmF0b3IrKygpIHsKICAgICsrX01faXRlcjsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRv cisrKGludCkgewogICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1Rw PiBfX3RtcCA9ICp0aGlzOwogICAgKytfTV9pdGVyOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsK Cgp9CiMgMjcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1v cnkuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiB0ZW1wbGF0ZTxjbGFzcyBfVHAxPiBzdHJ1Y3Qg YXV0b19wdHJfcmVmIHsKICAgX1RwMSogX01fcHRyOwogICBhdXRvX3B0cl9yZWYoX1RwMSogX19w KSA6IF9NX3B0cihfX3ApIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBjbGFzcyBhdXRvX3B0 ciB7CnByaXZhdGU6CiAgX1RwKiBfTV9wdHI7CgpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgZWxlbWVu dF90eXBlOwoKICBleHBsaWNpdCBhdXRvX3B0cihfVHAqIF9fcCA9IDApIHRocm93KCkgOiBfTV9w dHIoX19wKSB7fQogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19h LnJlbGVhc2UoKSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGF1dG9fcHRyKGF1dG9fcHRy PF9UcDE+JiBfX2EpIHRocm93KCkKICAgIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9CgogIGF1 dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHImIF9fYSkgdGhyb3coKSB7CiAgICByZXNldChfX2Eu cmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx PgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKSB7CiAg ICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCgoKICB+YXV0 b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KCiAgX1RwJiBvcGVyYXRvciooKSBjb25zdCB0aHJv dygpIHsKICAgIHJldHVybiAqX01fcHRyOwogIH0KICBfVHAqIG9wZXJhdG9yLT4oKSBjb25zdCB0 aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9UcCogZ2V0KCkgY29uc3QgdGhyb3co KSB7CiAgICByZXR1cm4gX01fcHRyOwogIH0KICBfVHAqIHJlbGVhc2UoKSB0aHJvdygpIHsKICAg IF9UcCogX190bXAgPSBfTV9wdHI7CiAgICBfTV9wdHIgPSAwOwogICAgcmV0dXJuIF9fdG1wOwog IH0KICB2b2lkIHJlc2V0KF9UcCogX19wID0gMCkgdGhyb3coKSB7CiAgICBpZiAoX19wICE9IF9N X3B0cikgewogICAgICBkZWxldGUgX01fcHRyOwogICAgICBfTV9wdHIgPSBfX3A7CiAgICB9CiAg fQoKCgoKCnB1YmxpYzoKICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8X1RwPiBfX3JlZikgdGhyb3co KQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1 dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpIHsKICAgIGlmIChfX3JlZi5fTV9wdHIgIT0g dGhpcy0+Z2V0KCkpIHsKICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgX01fcHRyID0gX19yZWYu X01fcHRyOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9U cDE+IG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgIHsgcmV0dXJuIGF1 dG9fcHRyX3JlZjxfVHA+KHRoaXMtPnJlbGVhc2UoKSk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw MT4gb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0 cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cn07Cgp9CiMgNDQgIi91c3IvbG9jYWwvZ2NjLTMu MC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNDUgIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMK IyA0NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5o IiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19z dHJpbmcuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz L2Jhc2ljX3N0cmluZy5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12 My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9sb2Nh bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYXRvbWljaXR5 LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoKc3RhdGljIGlubGluZSBfQXRvbWljX3dv cmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0 aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3ZhbCkKewogIHJlZ2lzdGVyIF9BdG9taWNf d29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhhZGRsICUwLCUy IgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIgKF9fcmVzdWx0KQogICAgICAgICAgICAg ICAgICAgICAgICA6ICIwIiAoX192YWwpLCAibSIgKCpfX21lbSkKICAgICAgICAgICAgICAgICAg ICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpzdGF0aWMgaW5saW5lIHZv aWQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2F0b21pY19hZGQgKHZvbGF0aWxlIF9B dG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewogIF9fYXNtX18gX192b2xhdGlsZV9fICgi bG9jazsgYWRkbCAlMCwlMSIKICAgICAgICAgICAgICAgICAgICAgICAgOiA6ICJpciIgKF9fdmFs KSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIGNoYXIKX19hdHRy aWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2NvbXBhcmVfYW5kX3N3YXAgKHZvbGF0aWxlIGxvbmcq IF9fcCwgbG9uZyBfX29sZHZhbCwgbG9uZyBfX25ld3ZhbCkKewogIGNoYXIgX19yZXQ7CiAgbG9u ZyBfX3JlYWR2YWw7CgogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgY21weGNoZ2wgJTMs ICUxOyBzZXRlICUwIgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9cSIgKF9fcmV0KSwgIj1t IiAoKl9fcCksICI9YSIgKF9fcmVhZHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIg KF9fbmV3dmFsKSwgIm0iICgqX19wKSwgImEiIChfX29sZHZhbCkpOwogIHJldHVybiBfX3JldDsK fQojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJp bmcuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0 cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwog ICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf QWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19ub3JtYWxf aXRlcmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBf X25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+IGNvbnN0X2l0ZXJh dG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0 X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRv cj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDExOCAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9S ZXAKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmViaW5kPGNoYXI+ OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDEzNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6 ZV90eXBlIF9TX21heF9zaXplOwogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWlu YWw7CgogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2Nh cGFjaXR5OwogICAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29s CiAgICAgICAgX01faXNfbGVha2VkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVu Y2VzIDwgMDsgfQoKICAgICAgICBib29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAg ICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAg X01fc2V0X2xlYWtlZCgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAg dm9pZAogICAgICAgIF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0g MDsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAg ICB7IHJldHVybiByZWludGVycHJldF9jYXN0PF9DaGFyVCo+ICh0aGlzICsgMSk7IH0KCiAgICAg ICAgX0NoYXJUJgogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcykgdGhyb3coKQogICAgICAg IHsgcmV0dXJuIF9NX3JlZmRhdGEoKSBbX19zXTsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAg X01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQog ICAgICAgIHsgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIp ID8KICAgICAgICAgICAgX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOyB9CgoKICAg ICAgICBzdGF0aWMgX1JlcCoKICAgICAgICBfU19jcmVhdGUoc2l6ZV90LCBjb25zdCBfQWxsb2Mm KTsKCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rpc3Bvc2UoY29uc3QgX0FsbG9jJiBfX2EpCiAg ICAgICAgewogICAgICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywg LTEpIDw9IDApCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19hKTsKICAgICAgICB9CgogICAgICAg IHZvaWQKICAgICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7CgogICAgICAg IF9DaGFyVCoKICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQogICAgICAgIHsKICAgICAgICAg IF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgICAgICAgICByZXR1cm4gX01fcmVm ZGF0YSgpOwogICAgICAgIH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2Nsb25lKGNvbnN0 IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOwojIDIwOCAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBpbmxpbmUgc3Rh dGljIGJvb2wKICAgICAgICBfU19leGNlc3Nfc2xvcChzaXplX3QsIHNpemVfdCk7CgogICAgICB9 OwoKCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MKICAgICAgewogICAgICAgIF9B bGxvY19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9B bGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAgICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9 OwoKICAgIHB1YmxpYzoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3Rh dGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7CgogICAgcHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0Fs bG9jX2hpZGVyIF9NX2RhdGFwbHVzOwoKCgogICAgICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5 X3JlcF9zdG9yYWdlWyhzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihzaXpl X3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKICAgICAgX0NoYXJUKgogICAgICBfTV9k YXRhKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0No YXJUKgogICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQogICAgICB7IHJldHVybiAoX01fZGF0YXBs dXMuX01fcCA9IF9fcCk7IH0KCiAgICAgIF9SZXAqCiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAg IHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9 CgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2liZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh dG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7 IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lk CiAgICAgIF9NX2xlYWsoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVh a2VkKCkpCiAgICAgICAgICBfTV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IK ICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYg KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh c2ljX3N0cmluZzo6X01fY2hlY2siKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3Bv czsKICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9z LCBzaXplX3R5cGUgX19vZmYpIGNvbnN0CiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9 IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2Zm ID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICByZXR1 cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25ld29mZik7CiAgICAgIH0KCgoKICAgICAgdGVt cGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29w eV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQogICAg ICAgIHsKICAgICAgICAgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAg ICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOwogICAgICAgIH0KCiAgICAg IHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9f azEsIGl0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgp LCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMo X0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAg ICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAg ICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCog X19rMSwgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwg X19rMiAtIF9fazEpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9D aGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAgICAg eyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9p ZAogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXpl X3R5cGUgX19sZW4yKTsKCiAgICAgIHZvaWQKICAgICAgX01fbGVha19oYXJkKCk7CgogICAgICBz dGF0aWMgX1JlcCYKICAgICAgX1NfZW1wdHlfcmVwKCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJw cmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBfc3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoK CgogICAgICBpbmxpbmUKICAgICAgYmFzaWNfc3RyaW5nKCk7CgogICAgICBleHBsaWNpdAogICAg ICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVf dHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24s IGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0g X0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9B bGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwg X0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0 ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0 b3IgX19iZWdpbiwgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAg IHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg eyByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3Mp OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJl dHVybiB0aGlzLT5hc3NpZ24oMSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2lu KCkKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01f ZGF0YSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25z dAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVy YXRvcgogICAgICBlbmQoKQogICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0 dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNv bnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJh dG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IK ICAgICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQo KSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QK ICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAg ICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2Vf aXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IK ICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io dGhpcy0+YmVnaW4oKSk7IH0KCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6 ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlw ZQogICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9Cgog ICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19t YXhfc2l6ZTsgfQoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJU IF9fYyk7CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJl c2l6ZShfX24sIF9DaGFyVCgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkg Y29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAg IHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVh cigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAg ZW1wdHkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0 X3JlZmVyZW5jZQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVy YXRvcltdKHNpemVfdHlwZSBfX3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAg ICByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNl CiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49 IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp bmc6OmF0Iik7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICBy ZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24g Pj0gc2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6 YXQiKTsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwog ICAgICB9CgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4g dGhpcy0+YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3Ir PShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19z dHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAg eyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f Yyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19z dHJpbmcmCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01f aWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhf Q2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEs IF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7 CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9jaGVjayhfX3BvcyksIF9fc3Ry Ll9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4g dGhpcy0+YXNzaWduKF9fcywgX19zICsgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihf X3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJu IHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAg ICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAg ICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCks IF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9f cCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwg X19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog ICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9J bnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19i ZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBl IF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgewogICAgICAgIGl0ZXJh dG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9f cCwgX19zdHIuX01faWJlZ2luKCksIF9fc3RyLl9NX2llbmQoKSk7CiAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUg X19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgc2l6ZV90eXBl IF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9N X2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01f Y2hlY2soX19wb3MyKSwKICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3My LCBfX24pKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3Bvcyk7 CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zLCBfX3MgKyBfX24pOwogICAgICAg IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQo c2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+ aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwg X0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bvcyks IF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9y CiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAg ewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAgIHRo aXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAgICBf TV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4o KSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVf dHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAgcmV0 dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAg fQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAg ewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAg ICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBf TV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0 dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFz ZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBzaXpl X3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2Uo X19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCkt Pl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6 ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgewogICAgICAgIHJl dHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkp OwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9f cG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0 IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAg ICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBf X24xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIpOwogICAg ICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsKICAgICAgICByZXR1cm4g dGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChf X3MpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAg ICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xk KF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19z dHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRo aXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCBfX3MgKyBfX24pOyB9CgogICAgICBiYXNpY19z dHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3Qg X0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19z LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgo X19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kx LCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBs YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBy ZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5w dXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9N X3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9Cgog ICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAg YmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig X19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh dG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndk SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0 b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Z3ZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAg ICAgICBfRndkSXRlcmF0b3IgX19rMiwgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0 ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1Nf Y29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm IF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAg ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0 b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9f ZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRl ciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29u c3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAg fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog ICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBf QWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl Z2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2Nv bnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoK ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg ICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs bG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgog ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg ICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2VuZCwgX0Z3ZEl0ZXIgX19iZWcsIGNvbnN0IF9B bGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cgog ICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBf Q2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3Bv cyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0 cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsK ICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJt aW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0No YXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxv Y2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBs dXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAg IGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3Ms IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg ICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNp emVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg X19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRh KCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7 CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19w b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBy ZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNp emVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rf b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBl CiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9v Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19j LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9f YywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9z ID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19w b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm aW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQog ICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5 cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9v ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUK ICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv cywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBz aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90 X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVf dHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mg PSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBz aXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rf b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6 Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2Yo X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19z dHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBu cG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAg ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAg ICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAg IGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAg IHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVf dHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p bihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBh cmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikKICAg ICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAg fQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21w YXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBj b25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsK CgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u MSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoKQog ICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7 IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAg b3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f bGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0 dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf QWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0No YXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19y aHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgewogICAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAg ICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVy YXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs IF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19z dHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9f c3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAg ICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs CiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCogX19saHMsCiAg ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f cmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21w YXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o Y29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJl KF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg ICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f cmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJl dHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf X3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w ZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo cywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf X3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK ICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f cmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz KSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgX0No YXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0g MDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl dHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVy biBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19y aHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dh cChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhz LnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAg ICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRv cjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKICAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQojIDQ3ICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAxIDMKIyAz MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5o IiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv YmFzZS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM1ICIv dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVm LmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf YWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2 b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg ICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1 ZSkKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB3aGls ZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9fcGFyZW50KSA8IF9f dmFsdWUpIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFy ZW50KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJ bmRleCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNl LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh c3QsIF9EaXN0YW5jZSosIF9UcCopCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2Uo KF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAo KihfX2xhc3QgLSAxKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y PgppbmxpbmUgdm9pZApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0 LAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlw ZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs YXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQK X19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hv bGVJbmRleCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBf Q29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAx KSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2Zp cnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp ID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAg IF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hv bGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1Rw PgppbmxpbmUgdm9pZApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly c3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFy ZSBfX2NvbXAsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hl YXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2Uo MCksCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZv aWQKcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFz dCwgX19jb21wLAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9f dmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl cmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAg ICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fdG9w SW5kZXggPSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hv bGVJbmRleCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgaWYgKCoo X19maXJzdCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAx KSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9 ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENo aWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBp ZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp ID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9f c2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwg X190b3BJbmRleCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl cmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFw KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFs dWUsIF9EaXN0YW5jZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFw KF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3Zh bHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1Rw PgppbmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1RwKikKewog IF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwKICAgICAgICAgICAg IF9UcCgqKF9fbGFzdCAtIDEpKSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgcG9wX2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+ CnZvaWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3Rh bmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFs dWUsIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5k ZXg7CiAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdo aWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsg X19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAg X19zZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0 ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBf X3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29u ZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmly c3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGls ZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4 LCBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl PgppbmxpbmUgdm9pZApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICBf RGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2Zp cnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAg ICAgICAgIF9fdmFsdWUsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCl9fcG9wX2hl YXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfX3Bv cF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9UcCgqKF9fbGFzdCAtIDEp KSwgX19jb21wLAogICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGlu ZSB2b2lkCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xh c3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19t YWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0 IC0gX19maXJzdCA8IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2Zp cnN0OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVl KSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19m aXJzdCArIF9fcGFyZW50KSkpOwogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9f cGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpp bmxpbmUgdm9pZAptYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAg ICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFy ZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9oZWFw KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9UcCosIF9EaXN0YW5jZSopCnsKICBp ZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xh c3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdo aWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwg X1RwKCooX19maXJzdCArIF9fcGFyZW50KSksCiAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg ICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg dm9pZAptYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3Qs IF9fY29tcCwKICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2Vf dHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+ CnZvaWQgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAgcG9wX2hl YXAoX19maXJzdCwgX19sYXN0LS0pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZApzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29t cGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGls ZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwg X19jb21wKTsKfQoKfQojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAm IF9fYiwgY29uc3QgX1RwJiBfX2MpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChfX2EgPCBfX2IpCiAgICBpZiAo X19iIDwgX19jKQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAg ICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYSA8 IF9fYykKICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19iIDwgX19jKQogICAgcmV0dXJuIF9f YzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf Q29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYKX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0 IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgaWYgKF9fY29tcChfX2Is IF9fYykpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQog ICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9f Y29tcChfX2EsIF9fYykpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9f YykpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Z1bmN0aW9uPgpfRnVuY3Rpb24gZm9yX2VhY2goX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBfX2YoKl9f Zmlyc3QpOwogIHJldHVybiBfX2Y7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAg ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmly c3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgKytfX2ZpcnN0OwogIHJl dHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRp Y2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxl IChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICsrX19maXJzdDsK ICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv cl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk aWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAy OwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYg KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBp ZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAg IGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7Cgog ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK ICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgogICAgaWYgKCpfX2Zp cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAg ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog IGNhc2UgMToKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr K19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfUmFu ZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl cmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7Cgog IGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICBpZiAoX19w cmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9f cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChf X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAo X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBz d2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNhc2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmly c3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19w cmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgog ICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog IGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gZmluZChf X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5w dXRJdGVyIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0Zv cndhcmRJdGVyIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK ICAgIHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hp bGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAg ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19s YXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGlj YXRlPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19m aXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVk KCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0g X19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudChfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgICAg X1NpemUmIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytf X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFz cyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LCBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAo X19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlm ZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs IGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBf X3ZhbHVlKQogICAgICArK19fbjsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1 dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7 CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgq X19maXJzdCkpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCgoKCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJj aChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0 MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0 MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7 CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3Rt cCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0 Mik7CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytf X3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSkgewogICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3Qx LCAqX19maXJzdDIpOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBf X2xhc3QxOwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlm ICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGls ZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAg ICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAg ICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJu IF9fZmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zvcndh cmRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJk SXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAg ICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3ByZWRpY2F0ZSkKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmly c3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9f dG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICB3 aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19m aXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgcmV0dXJuIF9fZmlyc3QxOwogIH0KCgoKICBf Rm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9G b3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxKSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICBpZiAoX19w cmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgIGJyZWFrOwogICAgICArK19f Zmlyc3QxOwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGlj YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2Zp cnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwog ICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkg cmV0dXJuIF9fbGFzdDE7CgogICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3Ap KSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsK ICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7 CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9CgoKCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3 YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192 YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fY291bnQgPD0gMCkKICAg IHJldHVybiBfX2ZpcnN0OwogIGVsc2UgewogICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19s YXN0LCBfX3ZhbCk7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVn ZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0Owog ICAgICArK19faTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9f aSA9PSBfX3ZhbCkgewogICAgICAgICsrX19pOwogICAgICAgIC0tX19uOwogICAgICB9CiAgICAg IGlmIChfX24gPT0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICAg IF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICB9CiAgICByZXR1cm4gX19s YXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAg ICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmly c3QsIF9fdmFsKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hp bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAx OwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdo aWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192 YWwpKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9f biA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGls ZSAoX19pICE9IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192 YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAg ICBfX2ZpcnN0ID0gX19pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0Zv cndhcmRJdGVyMiBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2Zp cnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAr K19fZmlyc3QyKQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9f Zmlyc3QyOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRl ciwgY2xhc3MgX1VuYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRw dXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgoKCgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQp CiAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNz IF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0 ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9v cCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19s YXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9 IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0K CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2Uo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBj b25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgKl9f Zmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh c3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f cHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYg KF9fcHJlZCgqX19maXJzdCkpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0 cHV0SXRlciByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25l d192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09 IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3Mg X1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHlfaWYoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1By ZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQog ICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7 CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9HZW5lcmF0b3I+CnZvaWQgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9f Z2VuKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz IF9HZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwg X1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQp7CgoKCgoKCiAgZm9yICggOyBfX24gPiAwOyAt LV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwogIHJldHVybiBfX2ZpcnN0 Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh c3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs dCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192 YWx1ZSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAg ICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5 X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp CiAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7 CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciByZW1vdmUoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgX0Zvcndh cmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJz dAogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3Qs IF9fZmlyc3QsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfUHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUg X19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZF9p ZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7 CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAg ICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7 Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz cyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCwgX1RwKikKewoKICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9f dmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoIShfX3ZhbHVlID09 ICpfX2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0 ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlx dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191 bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJz dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpf Rm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQs IGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CgogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxl ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkK ICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1 dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0 OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAg ICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQ cmVkaWNhdGUsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf QmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsIF9UcCopCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1 ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlfcHJlZChf X3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytf X3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRp Y2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAg IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBf X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICAqX19yZXN1 bHQgPSAqX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19i aW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsK ICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIg dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAg cmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlf cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0 KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciB1bmlxdWUo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCgogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFz dCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3 YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19m aXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJz dCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyPgp2b2lkIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgYmlkaXJlY3Rp b25hbF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAodHJ1ZSkKICAgIGlmIChfX2ZpcnN0ID09IF9f bGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICByZXR1cm47CiAgICBlbHNlCiAgICAg IGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlcj4Kdm9pZCBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh dG9yX3RhZykgewogIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgaXRlcl9zd2FwKF9fZmly c3QrKywgLS1fX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpp bmxpbmUgdm9pZCByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rp b25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfX3Jl dmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9P dXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1f X2xhc3Q7CiAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0 dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+ Cl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKewog IHdoaWxlIChfX24gIT0gMCkgewogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAl IF9fbjsKICAgIF9fbSA9IF9fbjsKICAgIF9fbiA9IF9fdDsKICB9CiAgcmV0dXJuIF9fbTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0 ZXIgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAg ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUp CiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4g X19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgZG8gewogICAg c3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRs ZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xh c3QpOwoKICBfRm9yd2FyZEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdDsKCiAgX19maXJzdDIg PSBfX21pZGRsZTsKCiAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgc3dhcCAoKl9f Zmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAg IF9fbWlkZGxlID0gX19maXJzdDI7CiAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAg ICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgfQoKICByZXR1cm4gX19uZXdfbWlkZGxlOwp9CgoK dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfQmlk aXJlY3Rpb25hbEl0ZXIgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0Owog IGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX19yZXZlcnNl KF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICBfX3Jl dmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7Cgog IHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgIHN3 YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7 CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcoKSk7CiAgICByZXR1cm4gX19sYXN0OwogIH0KICBlbHNlIHsKICAgIF9fcmV2ZXJzZShfX2Zp cnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4g X19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg X0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcm90YXRlKF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSAqLCBfVHAg KikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fbiA9IF9f bGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICBf RGlzdGFuY2UgX19sID0gX19uIC0gX19rOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0ID0g X19maXJzdCArIChfX2xhc3QgLSBfX21pZGRsZSk7CgogIGlmIChfX2sgPT0gMCkKICAgIHJldHVy biBfX2xhc3Q7CgogIGVsc2UgaWYgKF9fayA9PSBfX2wpIHsKICAgIHN3YXBfcmFuZ2VzKF9fZmly c3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBfRGlz dGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBf X2kgPCBfX2Q7IF9faSsrKSB7CiAgICBfVHAgX190bXAgPSAqX19maXJzdDsKICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgaWYgKF9fayA8IF9fbCkgewogICAgICBmb3Ig KF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgIGlmIChf X3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAg ICAgICAgX19wIC09IF9fbDsKICAgICAgICB9CgogICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7 CiAgICAgICAgX19wICs9IF9fazsKICAgICAgfQogICAgfQoKICAgIGVsc2UgewogICAgICBmb3Ig KF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAgICAgICAg aWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsK ICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgfQoKICAgICAgICAqX19wID0gKiAoX19wIC0g X19sKTsKICAgICAgICBfX3AgLT0gX19sOwogICAgICB9CiAgICB9CgogICAgKl9fcCA9IF9fdG1w OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4g X19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19k aXN0YW5jZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn b3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091 dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg cmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19y ZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5j ZSBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikgewoKICByZXR1cm4gbHJhbmQ0OCgpICUg X19uOwoKCgp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZv aWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19f aSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9f Zmlyc3QpICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz IF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CnZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFu ZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg ICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsK fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh c3MgX0Rpc3RhbmNlPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbikKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19s YXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5n KTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmRvbV9udW1iZXIoX19yZW1haW5p bmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAg ICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICBy ZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRw dXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2Vu ZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsK CiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7 CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAg IH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwog IF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20g PCBfX247ICsrX19tLCArK19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdo aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0g X19yYW5kb21fbnVtYmVyKF9fdCk7CiAgICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01d ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAg ICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KX1Jh bmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21O dW1iZXJHZW5lcmF0b3ImIF9fcmFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5j ZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsr X19tLCArK19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2Zp cnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5kKF9f dCk7CiAgICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICAr K19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJ dGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19vdXRfbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoK CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAg ICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CmlubGluZSBfUmFuZG9tQWNjZXNz SXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fb3V0X2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYg X19yYW5kKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1 cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9s YXN0IC0gX19vdXRfZmlyc3QpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy ZXR1cm4gX19maXJzdDsKCiAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICBpZiAoKytfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBf X2ZpcnN0OwoKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQogICAgaWYgKF9fcHJlZCgqX19u ZXh0KSkgewogICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgKytfX2ZpcnN0Owog ICAgfQoKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcGFydGl0aW9uKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKHRydWUp CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAg ICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGVs c2UKICAgICAgICBicmVhazsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKHRydWUpCiAgICAgIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBp ZiAoIV9fcHJlZCgqX19sYXN0KSkKICAgICAgICAtLV9fbGFzdDsKICAgICAgZWxzZQogICAgICAg IGJyZWFrOwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAg fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxp bmUgX0ZvcndhcmRJdGVyIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCgogIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2lu cGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3Rh bmNlIF9fbGVuKQp7CiAgaWYgKF9fbGVuID09IDEpCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0 KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsK ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogIHJldHVybiByb3RhdGUoX19pbnBsYWNl X3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAg ICBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9f bWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfUHJlZGljYXRlLAogICAgICAgICAgY2xhc3Mg X0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewog IGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQx ID0gX19maXJzdDsKICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9fYnVmZmVyOwogICAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgaWYgKF9fcHJlZCgqX19maXJz dCkpIHsKICAgICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDE7 CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAg ICAgICsrX19yZXN1bHQyOwogICAgICB9CiAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9f cmVzdWx0MSk7CiAgICByZXR1cm4gX19yZXN1bHQxOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJk SXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIp OwogICAgcmV0dXJuIHJvdGF0ZShfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSwKICAgICAg ICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0 aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsIF9fbGFz dCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSkpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu ZSBfRm9yd2FyZEl0ZXIKX19zdGFibGVfcGFydGl0aW9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl IF9fcHJlZCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJk SXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAw KQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3Qs IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl KF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBf X2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVk X3NpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGlj YXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0 aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFy ZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCnsKICB3aGlsZSAo dHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgKytfX2ZpcnN0Owog ICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0 OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9S YW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGls ZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xh c3Q7CiAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsK ICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0 ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50 IF9fc3RsX3RocmVzaG9sZCA9IDE2OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQp7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0g X19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xh c3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpf X2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz cyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBf X2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAg ICpfX2xhc3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAg fQogICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LCBfVHAqKQp7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19m aXJzdCkgewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwog ICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2lu c2VydChfX2xhc3QsIF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX1RwIF9f dmFsID0gKl9fbGFzdDsKICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgIGNvcHlf YmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192 YWw7CiAgfQogIGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3Zh bCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9f aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFu ZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg ICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lk IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNl cnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVk X2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCop CnsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7 ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJk ZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3VuZ3Vh cmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m aXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf X2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVh cl9pbnNlcnQoX19pLCBfVHAoKl9faSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2lu c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX191bmd1 YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29y dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0 bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9f c3RsX3RocmVzaG9sZCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsg X19zdGxfdGhyZXNob2xkLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9f c3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsg X19zdGxfdGhyZXNob2xkLCBfX2NvbXApOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQo X19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogIH0KICBlbHNlCiAg ICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9TaXplPgppbmxpbmUgX1NpemUgX19sZyhfU2l6ZSBfX24pCnsKICBfU2l6ZSBfX2s7 CiAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICByZXR1cm4gX19r Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg X1NpemU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAg ICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKewogIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAw KSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgIHJl dHVybjsKICAgIH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f Y3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3Qg LSAxKSkpKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9f ZGVwdGhfbGltaXQpOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemUsIGNsYXNzIF9Db21wYXJl Pgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAg ICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKewogIHdo aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0 aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFz dCwgX19jb21wKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJz dCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgIF9fY29tcCk7CiAgICBf X2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBf X2NvbXApOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRf bG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShf X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIp OwogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZv aWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg IF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBf X3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0g X19maXJzdCkgKiAyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19maW5hbF9p bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgfQp9CgoKCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAg X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFu ZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAy OwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNl X3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlk ZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxl KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4K dm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFy ZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsK ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19p bnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93 aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19s YXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIs CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRv bUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIg X19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVw ID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19z dGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsg X190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgX19maXJzdCAr PSBfX3R3b19zdGVwOwogIH0KCiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAt IF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl cF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQg X19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190 d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0g X190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19z dGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19m aXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogIH0KICBf X3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl KTsKCiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgIF9fZmly c3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgIF9fcmVzdWx0LAogICAgICAgIF9fY29t cCk7Cn0KCmNvbnN0IGludCBfX3N0bF9jaHVua19zaXplID0gNzsKCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9u X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKewog IHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRp b25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsKICAgIF9fZmlyc3QgKz0g X19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFz cyBfQ29tcGFyZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXpl LCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5r X3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtf c2l6ZSwgX19jb21wKTsKICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9f bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UqKQp7CiAg X0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9s YXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxf Y2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19z dGVwX3NpemUpOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgX19tZXJnZV9z b3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgX19z dGVwX3NpemUgKj0gMjsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9s YXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3Mg X0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X3dp dGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkK ewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZm ZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9f c3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs IF9fc3RlcF9zaXplLCBfX2NvbXApOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewog ICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3Np emUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3Ao X19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwog ICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX3N0YWJsZV9zb3J0 X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBfRGlz dGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNz SXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9z aXplKSB7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1 ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxl LCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21l cmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3Rh bmNlKikwKTsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBf X2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg X19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZm ZXJfc2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Bv aW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f c3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19i dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6 ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmly c3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19s ZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFw dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1 ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVm ZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgX19tZXJnZV9hZGFwdGl2ZShfX2Zp cnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBf X2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l IHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBf RGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4g YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxh Y2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0 X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJl PgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs IF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl IF9fY29tcCkKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1 ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNl X3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICBlbHNlCiAgICBfX3N0YWJs ZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgpp bmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJz dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAg ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBzdGFi bGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19zdGFibGVfc29ydF9hdXgoX19m aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwK ICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAg ICAgICAgICAgX19jb21wKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs IGNsYXNzIF9UcD4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUp OwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsg KytfX2kpCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5 cGUoX19maXJzdCkpOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUo X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U cCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBtYWtl X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRl ciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9f aSwgKl9fZmlyc3QpKQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9U cCgqX19pKSwgX19jb21wLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0 KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0 aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf RGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlh bF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1Rw KikKewogIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1 bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3Vs dF9maXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3Qg IT0gX19yZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0Owog ICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChf X3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgX19hZGp1 c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAg ICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVh cChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICByZXR1cm4gX19yZXN1bHRf cmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFz cyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRf Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXAsIF9EaXN0YW5jZSosIF9UcCopCnsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1 bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1 bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3Qg JiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9y ZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2Zp cnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwg X19jb21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2NvbXAoKl9f Zmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmly c3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRf cmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19m aXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJzdDsKICB9CiAg c29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAg cmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9SYW5kb21B Y2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2Zp cnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LCBf Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f ZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg PiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBpZiAoX19jdXQgPD0g X19udGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19j dXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fbnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgs IF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbnRoX2VsZW1l bnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJl IF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh c3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChf X2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZQogICAgICBfX2xh c3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29t cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+ CmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0 LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19s b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewog IF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7 CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChf X2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmly c3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9f dmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBf X2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBf X2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAg ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5j ZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg X192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9 IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFs ZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9f aGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9f bWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAg ICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xl biAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0K ICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQo X19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9f ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBf X2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNl IF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsK ICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZh bmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBf X2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQog IHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf VHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX191 cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAg IF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJ dGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJl IF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2Uo X19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0 ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+ IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYp OwogICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7 CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAg ICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJz dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0 LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh c3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3Jh bmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm IF9fdmFsLAogICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAw OwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7 CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogIHdoaWxlIChfX2xl biA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7 CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFs KSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xl biA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlk ZGxlKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dl cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICBhZHZhbmNlKF9fZmlyc3Qs IF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3Qs IF9fdmFsKTsKICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9f bGVmdCwgX19yaWdodCk7CiAgICB9CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv cndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4K ZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv bnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9f ZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAg ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0Zv cndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBk aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9G b3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAw KSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAg YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3Zh bCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9f bGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFs LCAqX19taWRkbGUpKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xl ZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAg IGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytf X21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3 YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1 cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+ CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwK ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192 YWwsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJz dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmlu YXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwg X192YWwpOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KYm9v bCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAg IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3Zh bCwgX19jb21wKTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19p KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj bGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUg KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpf X2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAg ICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNv cHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNz IF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdl KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq X19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0 MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr X19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0 MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgp0ZW1w bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19t ZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQp7CiAg aWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEg KyBfX2xlbjIgPT0gMikgewogICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVy X3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u ZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9f bGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEg LyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQg PSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFu Y2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQogIGVsc2UgewogICAgX19s ZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAg ICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRf Y3V0KTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQs IF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f bGVuMTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBf X3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u YWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0 aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xlbjEgPT0gMCB8fCBf X2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAg IGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0 LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0 X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlk ZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg aWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZh bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5k KF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9f bWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIg PSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19m aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwg X19jb21wKTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9 CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9j dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19m aXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25l d19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAg ICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRh cHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp c3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf X2J1ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJf c2l6ZSkgewogICAgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl cik7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0 dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYg KF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmly c3QpOwogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19s YXN0KTsKICB9CiAgZWxzZQogICAgcmV0dXJuIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19s YXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRp cmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlk aXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQp7CiAgaWYgKF9fZmly c3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0 MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlf YmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1f X2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAgICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewog ICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0 MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jl c3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3Vs dCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1 cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0t X19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIx LCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9u YWxJdGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNr d2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29t cGFyZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5 X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09 IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9fbGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlm IChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xh c3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9i YWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsK ICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAo X19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0 MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRl bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3Mg X1BvaW50ZXI+CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAg ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7 CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVy KTsKICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9f Zmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1Bv aW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAg ICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf ZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0 X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19t aWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9 IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAy OwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0 ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgZGlz dGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsK ICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBf X2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRs ZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBf X2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAg ICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwg X19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZm ZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0 X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIy LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21p ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAg ICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwg Y2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX2Fk YXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl bjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1 ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29t cGFyZSBfX2NvbXApCnsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZm ZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21p ZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRk bGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9f YnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUs IF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRs ZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBf X2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9 IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7 CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg ICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAg ICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93 ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICBk aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIH0KICAgIGVsc2Ug ewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQs IF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlk ZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2Zp cnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlk ZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3Nl Y29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu MjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAg ICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICBfX21lcmdl X2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9f bGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBf X2J1ZmZlcl9zaXplLCBfX2NvbXApOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9faW5wbGFj ZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0 YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21p ZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRs ZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0 ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAw KQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBf X2xlbjEsIF9fbGVuMik7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21p ZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX19idWYu YmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNs YXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAw OwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xl bjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3Jh cnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3Qp OwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UK ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBf X2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1 Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAg cmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90 eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh c3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh c3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xh c3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rp c3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoK CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wg aW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0 MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK ICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAg ICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7Cgog IHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5w dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0Miwg Kl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmly c3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmly c3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0 ZXI+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19m aXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAr K19fZmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAg ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVs c2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAg ICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2Zp cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1 dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9J bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJz dDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19f Zmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkg ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAg ICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwog ICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHko X19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9P dXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0 MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2Zp cnN0MTsKICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0 MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJz dDE7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9f cmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy LCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRl ciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh PSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsr X19maXJzdDE7CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAg ICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0K ICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5j ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0 MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAg ICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAg ICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2Zp cnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf T3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfZGlm ZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxz ZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAg IGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVy biBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0 SXRlcgpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1 dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw dXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7 CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgq X19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAg ICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSB7CiAgICAgICsr X19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIs IF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVy LAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlm ZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp cnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsK ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19f cmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkg ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsr X19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2Zp cnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0 MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cj4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19s YXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Owog IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0 KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9l bGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVy IF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlm IChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1 cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRl ciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f Zmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2Zp cnN0ICE9IF9fbGFzdCkKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgX19yZXN1 bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlciwgY2xhc3MgX0NvbXBhcmU+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJz dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9f Zmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX2Zp cnN0LCAqX19yZXN1bHQpKQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVz dWx0Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRf cGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl ciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAo X19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4g ZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7 CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpf X2kgPCAqLS1fX2opKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAg IHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAo X19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBy ZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFz dCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7Oykg ewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChf X2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xh c3Q7CiAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAge30KICAgICAg aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICBy ZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNl KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsK ICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBf X2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkg PSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAg ICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBf X2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkg ewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAg IH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21w YXJlPgpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBf X2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZh bHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19paSwgKl9f aSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUg KCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBf X2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAg fQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0 KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lu cHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7 ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19p dGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIp CiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGlj YXRlPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0 SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmly c3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h cnlQcmVkaWNhdGUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9G b3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVy KQogICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9f Zmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9CiMgMzM5MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3 YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwK ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0 ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFz dDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdo aWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFy Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgaWYgKF9fbmV3 X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7 CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25l d19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBj bGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJ dGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAg ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0 b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp CnsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2Ug ewogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewog ICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3Qx LCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgaWYgKF9fbmV3X3Jl c3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAg ICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19y ZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKCnRlbXBsYXRl IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyPgpf QmlkaXJlY3Rpb25hbEl0ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0 MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0 eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwog IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7 CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f Zmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3Qx KSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19s YXN0MiksIF9fcmxhc3QyKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVy biBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9f cnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIs IF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf QmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9C aWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwK ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGly ZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVy MTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0 ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0 MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19s YXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIy KF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t cCk7CgogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBl bHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgp OwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAg ICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIx LCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgX0ZvcndhcmRJdGVyMQpmaW5kX2VuZChfRm9y d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgIF9Gb3J3 YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9f bGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdv cnkoX19maXJzdDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9G b3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX0Zv cndhcmRJdGVyMQpmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIg X19sYXN0MiwKICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBf X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y X2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn b3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmJvb2wgX19pc19o ZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFu Y2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwg X19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3RbX19j aGlsZF0pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDApCiAg ICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmlu Zz4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmljdFdlYWtP cmRlcmluZyBfX2NvbXAsCiAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFu Y2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwg X19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmly c3RbX19jaGlsZF0pKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQgJiAxKSA9 PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19sYXN0IC0g X19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9T dHJpY3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9T dHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19jb21wLCBfX2xhc3QgLSBfX2Zp cnN0KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmJvb2wgaXNfc29ydGVk KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7CgogIF9G b3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4dCAhPSBf X2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAoKl9fbmV4dCA8ICpf X2ZpcnN0KQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KYm9vbCBp c19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiB0cnVlOwoKICBfRm9yd2Fy ZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0 OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewogICAgaWYgKF9fY29tcCgqX19uZXh0LCAq X19maXJzdCkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVlOwp9Cgp9CiMg MzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0u aCIgMiAzCiMgNTAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z dHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv YmFzaWNfc3RyaW5nLnRjYyIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBj b25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFt ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3Np emUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpucG9zOwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjpfU19lbXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2Yo X0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1 Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAg ICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19i ZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5 X3JlcCgpLl9NX3JlZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAg c2l6ZV90eXBlIF9faSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8 IHNpemVvZihfX2J1ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAg X19idWZbX19pKytdID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQog ICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJh aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9f ci0+X01fbGVuZ3RoID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAg ICBmb3IgKDs7KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0g X19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFy VCogX19sYXN0ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAg ICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg IGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAg ICAgICAgICAgICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAg ICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAg ICAgICAgICAgX1JlcCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19h KTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0 YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCks IF9fbGVuKTsKICAgICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAg ICAgICAgX19yID0gX19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBf X2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAg ICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1w bGF0ZSA8Y2xhc3MgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0No YXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBf SW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndh cmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRp Y19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgogICAgICAgIGlmIChf X2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1w dHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3Jl YXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhf X3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNoKC4uLikKICAg ICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAg ICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAg cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2NvbnN0cnVjdChz aXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIHsKICAgICAg aWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1cm4gX1NfZW1wdHlf cmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShf X24sIF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24pCiAgICAgICAg ICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsKICAg ICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfX3ItPl9NX2Rlc3Ry b3koX19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGgg PSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsK ICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9n cmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAgICAgICAgIF9f c3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19h KQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBf X2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0 cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQogICAgeyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBi YXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAog ICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBf TV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19hKSwgX19h KQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNv bnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3Mg KyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBj b25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19z ICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmlu ZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01f ZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywg X0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9T X2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikK ICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAg ICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAg ICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5n ZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAg ICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAg IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSAr IDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9j YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xl YWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAg ICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwg c2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlz LT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSAr IF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSAr IF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xk X3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVk KCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9j YXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9SZXAqIF9fciA9IF9S ZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6 Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAg aWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9N X3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCgu Li4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9j YXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01f cmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRh KCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVu MikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19w b3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgp LT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3Np emU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhp cy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAg ICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19s ZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwogICAgICAgICAgYWxsb2NhdG9y X3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9N X3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9N X3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAg ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYgX19zKQogICAgewogICAgICBpZiAoX01fcmVwKCkt Pl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAg ICAgaWYgKF9fcy5fTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgp LT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBf X3MuZ2V0X2FsbG9jYXRvcigpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBf TV9kYXRhKCk7CiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAgX19z Ll9NX2RhdGEoX190bXApOwogICAgICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg ICBiYXNpY19zdHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxs b2NhdG9yKCkpOwogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCks IF9fcy5fTV9pZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9h bGxvY2F0b3IoKSk7CiAgICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9f dG1wMTsKICAgICAgICB9CiAgICB9CiMgMzU2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n KystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNv bnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNp dHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNf c3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0 eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CgoKICAgICAgdm9pZCogX19w bGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2NhdGUoX19zaXplKTsKICAgICAg X1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0g X19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX19wLT5fTV9s ZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fY2xv bmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIF9S ZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGggKyBfX3JlcywgX19hbGxvYyk7CiAg ICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsg dHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgX01fbGVu Z3RoKTsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg X19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0 dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUgYm9vbAoKCgoKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1NfZXhj ZXNzX3Nsb3Aoc2l6ZV90IF9fcywgc2l6ZV90IF9fcikKCiAgICB7CiAgICAgIHJldHVybiAyICog KF9fcyA8PSAxNiA/IDE2IDogX19zKSA8IF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9f biwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAg X190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAg ICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwg X19zaXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OgogICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0 ZXIgX19rMSwKICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fazIsIGlucHV0X2l0ZXJhdG9y X3RhZykKICAgICAgewogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAg ICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLl9NX2liZWdpbigpLCBfX3Mu X01faWVuZCgpKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2Uo aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7 CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlw ZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBz dGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKCiAgICAgICAgaWYg KF9fZG1heCA8PSBfX2RuZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNf c3RyaW5nOjpfTV9yZXBsYWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9N X2liZWdpbigpOwogICAgICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKICAg ICAgICBpZiAoX19kbmV3KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29m ZiwgX19rMSwgX19rMik7CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwg c2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNp emVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICByZXR1cm4gdGhpcy0+ cmVwbGFjZShfTV9jaGVjayhfX3BvczEpLCBfTV9mb2xkKF9fcG9zMSwgX19uMSksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MyLCBfX24yKSk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAg ICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19s ZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAg ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJl Z2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgewoKCgog ICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zdHIuc2l6ZSgpIC0gX19wb3MsIF9fbikgKyB0 aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAg dGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQo KSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxf VHJhaXRzLF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19uKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAg ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShf X2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf X3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh aXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAg ICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBh Y2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMt PnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0 IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9U cmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBl IF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhzKTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0 cjsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7CiAgICAgIF9fc3Ry LmFwcGVuZChfX2xocywgX19saHMgKyBfX2xlbik7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7 CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVm IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwog ICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhz LnNpemUoKTsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOwogICAgICBfX3N0ci5hcHBl bmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAg ICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9f bjIsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7 CiAgICAgIHNpemVfdHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgIGlmICht YXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9fbjIpCiAgICAgICAgX190aHJv d19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBfTV9tdXRhdGUg KF9fb2ZmMSwgX19uMSwgX19uMik7CgogICAgICBpZiAoX19uMikKICAgICAgICB0cmFpdHNfdHlw ZTo6YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNv bnN0CiAgICB7CiAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93 X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4gdGhp cy0+c2l6ZSgpIC0gX19wb3MpCiAgICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7Cgog ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoKICAg ICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+ c2l6ZSgpOwogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNvbnN0IF9DaGFyVCog X19kYXRhID0gX01fZGF0YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsg KytfX3hwb3MpCiAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBv cywgX19zLCBfX24pID09IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4g bnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OgogICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAg IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX3JldCA9 IG5wb3M7CiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBjb25z dCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBf X3NpemUgLSBfX3BvczsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6 OmZpbmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAg ICAgICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0 OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f bikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg ICAgaWYgKF9fbiA8PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19wb3MgPSBzdGQ6Om1p bihfX3NpemUgLSBfX24gLF9fcG9zKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0g X01fZGF0YSgpOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0 cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDApCiAgICAg ICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChf X3Bvcy0tID4gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoX0NoYXJUIF9f Yywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVf dCBfX3hwb3MgPSBfX3NpemUgLSAxOwogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQogICAg ICAgICAgICBfX3hwb3MgPSBfX3BvczsKCiAgICAgICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3Mt LSA+IDA7ICkKICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9z XSwgX19jKSkKICAgICAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICAgIH0KICAgICAgcmV0 dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8 IHRoaXMtPnNpemUoKTsgKytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsKICAg ICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICB9CiAgICAg IHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9 IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAg ICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAg ICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Zmlu ZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9f c2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAg ICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNp emVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9fbiAmJiBfX3hwb3MgPCB0aGlzLT5z aXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24s IF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVy biBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNv bnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBv cyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEo X01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICBy ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAg ICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAg ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6 ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJu IF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAg ICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVf dHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp emUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUg PiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6 ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg ICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAg ICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp Y19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXpl IC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29z aXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9f cG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0g X19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50 CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUo c2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAog ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5 cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBf X3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp bmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9f cG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19w b3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXpl KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9f cG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19y b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFy VCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp OwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9f c2l6ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBl OjpsZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg ICBiYXNpY19zdHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAg IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9z ID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNv bXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChf X3MpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7 CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50 IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVu KTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAg IHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFy VCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw ZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNv bnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlm IChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry aW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlw ZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3Np emUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBf X29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSAr IF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6 ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf Q2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmlu Z19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry LAogICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXpl X3R5cGUgX19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXpl X3R5cGUgc2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgp OwogICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7 CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAg IF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9Cn0KIyA1MSAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyA0MyAiL3Vzci9sb2Nh bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMSAzCiMgMzgg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAyIDMKIyA1NSAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAzCm5hbWVzcGFjZSBzdGQKewog IHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2NudHJsOwog IHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xvd2VyOwog IHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3NwYWNlOwog IHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9sb3dlcjsK ICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr LXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl L2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xv Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qo dm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21h aW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1 bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19p b3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDUgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDU2 ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgdmVjdG9y OwogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu ZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCwgY29uc3Qg bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg ICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2xvd2Vy KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCwg Y29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi b29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQsIGNvbnN0IGxv Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg aXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVy KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCgoKICBj bGFzcyBjdHlwZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0 eXBlOwogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47CgogIHRlbXBsYXRlPD4gY2xhc3Mg Y3R5cGU8d2NoYXJfdD47CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0 eXBlX2J5bmFtZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBj b2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt ZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4g PgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9w dXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVy YXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAg ICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0 aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0g b3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsK CgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5 X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0 cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVu Y3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBj bGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3MgbG9jYWxlCiAg ewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsKCgogICAgY2xh c3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZyaWVuZCBjbGFz cyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf RmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBs b2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29s CiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAgc3RhdGljIGNv bnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0g MUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwgPDwgMTsKICAg IHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0YXRpYyBjb25z dCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtb25l dGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAxTCA8 PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xsYXRlIHwgY3R5cGUgfCBt b25ldGFyeSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1l cmljIHwgdGltZSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAgICBsb2Nh bGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0CiAgICBsb2Nh bGUoY29uc3QgY2hhciogX19zdGRfbmFtZSk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19i YXNlLCBjb25zdCBjaGFyKiBfX3MsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICBsb2NhbGUoY29uc3Qg bG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKCiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9f b3RoZXIsIF9GYWNldCogX19mKTsKCiAgICB+bG9jYWxlKCkgdGhyb3coKTsKCiAgICBjb25zdCBs b2NhbGUmCiAgICBvcGVyYXRvcj0oY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlCiAgICAgIGNvbWJpbmUoY29u c3QgbG9jYWxlJiBfX290aGVyKTsKCgogICAgc3RyaW5nCiAgICBuYW1lKCkgY29uc3Q7CgogICAg Ym9vbAogICAgb3BlcmF0b3I9PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgp OwoKICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikg Y29uc3QgdGhyb3cgKCkKICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7 IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAgIGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7CgoKICAgIHN0 YXRpYyBsb2NhbGUKICAgIGdsb2JhbChjb25zdCBsb2NhbGUmKTsKCiAgICBzdGF0aWMgY29uc3Qg bG9jYWxlJgogICAgY2xhc3NpYygpOwoKICBwcml2YXRlOgoKICAgIF9JbXBsKiBfTV9pbXBsOwoK CiAgICBzdGF0aWMgX0ltcGwqIF9TX2NsYXNzaWM7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfZ2xv YmFsOwoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfbnVtX2NhdGVnb3JpZXMgPSA2OwogICAg c3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fZmFjZXRzID0gMjY7CgogICAgZXhwbGljaXQKICAg IGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3RhdGljIGlubGluZSB2b2lkCiAgICBfU19p bml0aWFsaXplKCkKICAgIHsgaWYgKCFfU19jbGFzc2ljKSBjbGFzc2ljKCk7IH0KCiAgICBzdGF0 aWMgY2F0ZWdvcnkKICAgIF9TX25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9p ZAogICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19h ZGQsIGNhdGVnb3J5IF9fY2F0KTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAg cHVibGljOgoKICAgIHR5cGVkZWYgdmVjdG9yPGZhY2V0KiwgYWxsb2NhdG9yPGZhY2V0Kj4gPiBf X3ZlY19mYWNldDsKCgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBs b2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5k IGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNv bnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgc2l6ZV90IF9NX3JlZmVyZW5j ZXM7CiAgICBfX3ZlY19mYWNldCogX01fZmFjZXRzOwogICAgc3RyaW5nIF9NX25hbWVzW19TX251 bV9jYXRlZ29yaWVzXTsKICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGU7CiAgICBzdGF0aWMgY29u c3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY3R5cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2Nh bGU6OmlkKiBjb25zdCBfU19pZF9udW1lcmljW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjpp ZCogY29uc3QgX1NfaWRfY29sbGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNv bnN0IF9TX2lkX3RpbWVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19p ZF9tb25ldGFyeVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21l c3NhZ2VzW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2Zh Y2V0X2NhdGVnb3JpZXNbXTsKCiAgICBpbmxpbmUgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgp IHRocm93KCkKICAgIHsgKytfTV9yZWZlcmVuY2VzOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9N X3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfTV9yZWZlcmVuY2Vz LS0gPT0gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBkZWxldGUgdGhp czsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7IH0KICAgICAgICB9CiAgICB9 CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXplX3QpOwogICAgX0ltcGwoc3RyaW5nIF9fbmFt ZSwgc2l6ZV90KTsKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBib29sCiAgICBfTV9jaGVja19z YW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0gdHJ1ZTsKICAgICAgZm9yIChzaXpl X3QgaSA9IDA7IGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkKICAgICAgICBfX3JldCAm PSBfTV9uYW1lc1tpXSA9PSBfTV9uYW1lc1tpICsgMV07CiAgICAgIHJldHVybiBfX3JldDsKICAg IH0KICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVn b3J5KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29u c3QgbG9jYWxlOjppZCogY29uc3QqKTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2ZhY2V0KGNv bnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOwoKICAgIHZvaWQKICAgIF9NX2luc3RhbGxf ZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGZhY2V0Kik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZhY2V0PgogICAgICBpbmxpbmUgdm9pZAogICAgICBfTV9pbml0X2ZhY2V0KF9GYWNldCogX19m YWNldCkKICAgICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2ZhY2V0KTsgfQog IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZTo6bG9jYWxlKGNvbnN0 IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCiAgICB7CiAgICAgIF9NX2ltcGwgPSBuZXcg X0ltcGwoKl9fb3RoZXIuX01faW1wbCwgMSk7CiAgICAgIF9NX2ltcGwtPl9NX2luc3RhbGxfZmFj ZXQoJl9GYWNldDo6aWQsIF9fZik7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9T X251bV9jYXRlZ29yaWVzOyArK19faSkKICAgICAgICBfTV9pbXBsLT5fTV9uYW1lc1tfX2ldID0g IioiOwogICAgfQoKCiAgY2xhc3MgbG9jYWxlOjpmYWNldAogIHsKICAgIGZyaWVuZCBjbGFzcyBs b2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgcHJvdGVjdGVkOgogICAg ZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoKICAgIHZpcnR1 YWwKICAgIH5mYWNldCgpIHsgfTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfY3JlYXRlX2NfbG9j YWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zKTsKCiAgICBzdGF0aWMgdm9p ZAogICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICBwcml2YXRl OgogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7CgogICAgdm9pZAogICAgX01fYWRkX3JlZmVyZW5j ZSgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7 CgogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3Qg ZmFjZXQmKTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgcHJpdmF0ZToKICAgIGZy aWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAg dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog ICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7 CgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRpYyBzaXplX3QgX1Nf aGlnaHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBpZCYpOwoKICAgIGlkKGNv bnN0IGlkJik7CgogIHB1YmxpYzoKCgoKICAgIGlkKCkgeyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs ZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNf ZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsKfQojIDQ0ICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDM4ICIvdXNyL2xv Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAzCgpuYW1lc3BhY2Ug c3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2ZtdGZsYWdzX2VuZCA9IDFM IDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3NfRm10Zmxh Z3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRp Y19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9J b3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3Mg X19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3Rh dGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y XihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19G bXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9 CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdzJiBfX2Es IF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxp bmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0Zt dGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf Rm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBf X2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdz CiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Mo fnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19PcGVubW9kZSB7IF9NX2lv c19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9w ZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4g X0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9f YikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUg X19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19j YXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3Nf T3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19i KQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGlj X2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfD0o X0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBf X2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciY9KF9Jb3NfT3Bl bm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19i OyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JePShfSW9zX09wZW5tb2RlJiBf X2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBp bmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09wZW5tb2RlIF9fYSkKICB7IHJl dHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9J b3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBf SW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9f YikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGlj X2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8KF9J b3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRl KHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s aW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3Rh dGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBz dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRv cnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9 IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImPShfSW9zX0lv c3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7 IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBfX2Es IF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGlu ZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkKICB7IHJldHVybiBf SW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51bSBfSW9zX1NlZWtk aXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9zX2Jhc2UK ICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgogICAg ewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5n JiBfX3N0cikgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmZhaWx1cmUoKSB0aHJvdygp OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkgY29uc3QgdGhyb3coKTsK CiAgICBwcml2YXRlOgogICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBjaGFy IF9NX25hbWVbX01fYnVmc2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdz IGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFn cyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBk ZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0YXRpYyBjb25zdCBmbXRm bGFncyBmaXhlZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CiAgICBz dGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf aW50ZXJuYWwpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lv c19mbGFnczo6X1NfbGVmdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10Zmxh Z3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQg PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfcmlnaHQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZs YWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CiAg ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6 X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZs YWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9pbnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz IHNob3dwb3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7 CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz OjpfU191bml0YnVmKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRm bGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn cyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7CiAg ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAgdHlwZWRlZiBfSW9zX0lv c3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUo X19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQg PSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3Rh dGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxiaXQpOwogICAgc3RhdGlj IGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAgIHR5cGVkZWYgX0lvc19P cGVubW9kZSBvcGVubW9kZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPSBvcGVubW9k ZShfX2lvc19mbGFnczo6X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPSBv cGVubW9kZShfX2lvc19mbGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBi aW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAgIHN0YXRpYyBjb25zdCBv cGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7CiAgICBzdGF0aWMgY29u c3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX291dCk7CiAgICBzdGF0 aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMp OwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAgc3RhdGljIGNvbnN0IHNl ZWtkaXIgYmVnID0gc2Vla2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1ciA9IHNl ZWtkaXIoMSk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwojIDIx NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMwog ICAgZW51bSBldmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZlbnQs CiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2Fs bGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVyX2Nh bGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVkOgoK ICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAg IGZtdGZsYWdzIF9NX2ZsYWdzOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7Cgog ICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxi YWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIGludCBfTV9yZWZjb3VudDsKCiAg ICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19p bmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IpCiAgICAgIDog X01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3Vu dCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgKytfTV9yZWZj b3VudDsgfQoKICAgICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBf TV9yZWZjb3VudC0tOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tz OwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7Cgog ICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAgIHN0cnVjdCBfV29y ZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01faXdvcmQ7CiAgICB9 OwoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZHMgPSA4OwogICAgX1dvcmRzIF9N X3dvcmRfYXJyYXlbX1NfbG9jYWxfd29yZHNdOwogICAgX1dvcmRzIF9NX2R1bW15OwogICAgX1dv cmRzKiBfTV93b3JkczsKICAgIGludCBfTV93b3JkX2xpbWl0OwoKICAgIF9Xb3JkcyYKICAgIF9N X2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAg ICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAg ewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsK ICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9v bCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAg ICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRp YyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdz CiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZs YWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29s ZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29s ZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkK ICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0g X19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwog ICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZt dGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAg IF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAg fQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdz ICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29u c3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHBy ZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9 IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4g X19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyBy ZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFt c2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAg ICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0 aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxv Y2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQog ICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMg aW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50 IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX2xpbWl0 KQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3Jk cyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUg dm9pZComCiAgICBwd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAo X19peCA8IF9NX3dvcmRfbGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZHNb X19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3Jk OwogICAgfQoKCiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9zX2Jhc2UoKTsK CgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNl JgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jh c2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z X2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i YXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0 Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg aW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0 Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp b3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu c2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu ZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu c2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp bmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh c2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog IGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i YXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu bGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh c2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp bmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl LnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu c2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg aW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl dGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl LnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp bmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jh c2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu bGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19i YXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoK ICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwog ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFz ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6 YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK ICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpy aWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAg aW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z ZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFz ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJl dHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jh c2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVs ZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChp b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9z X2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf YmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo aW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBf X2Jhc2U7CiAgfQoKfQojIDQ1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9zdHJlYW1idWYuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMg NDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYu aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv c2Z3ZC5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMu MC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNy L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0NCAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAy IDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxf Q2hhclQsIF9UcmFpdHM+JiBfaW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFt YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zgog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0 eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz X3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190 eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw ZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9f Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFp dHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8 Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFt PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVh bTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZf aXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3Ry ZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0 cmVhbXNpemUKICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0 cmFpdHNfdHlwZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVm X3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6 CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9z aXplOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9i dWZfdW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJf dHlwZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90 eXBlKiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJf dHlwZSogX01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgog ICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5p dDsKCgoKCgoKICAgICAgaW50X3R5cGUgX01fcGJhY2tfc2l6ZTsKICAgICAgY2hhcl90eXBlKiBf TV9wYmFjazsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgY2hhcl90 eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsKICAgICAgYm9vbCBfTV9wYmFja19pbml0OwoKCgoKICAg ICAgdm9pZAogICAgICBfTV9wYmFja19jcmVhdGUoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9w YmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAgICBpbnRfdHlwZSBfX2Rpc3QgPSBfTV9p bl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICAgIGludF90eXBlIF9fbGVuID0gbWluKF9NX3Bi YWNrX3NpemUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX3BiYWNr LCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9p bl9jdXI7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5fZW5kOwogICAgICAg ICAgICB0aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFjaywgX01fcGJhY2sgKyBfX2xlbik7CiAg ICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICB9CgoKCgog ICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKQogICAgICB7CiAgICAgICAgaWYgKF9N X3BiYWNrX2luaXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9jdXIg PSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKCgogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9lbmQg PSAwOwogICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2luX2VuZCAtIF9NX3Bi YWNrOwogICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUg LSBfTV9idWY7CiAgICAgICAgICAgIGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAg ICAgICAgICAgX19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAg ICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAg ICAgICAgICAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAg ICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2Vu ZF9zYXZlID0gX19udWxsOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gZmFsc2U7CiAgICAg ICAgICB9CiAgICAgIH0KCgoKICAgICAgdm9pZAogICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlw ZSBfX24pCiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX291dF9jdXI7CiAgICAg ICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlm aWVkKQogICAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgIH0KIyAxOTMgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgICB2 b2lkCiAgICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBi b29sIF9fdGVzdGluID0gX01faW5fY3VyOwoKICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAg ICAgICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9pbl9jdXIg Kz0gX19uOwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkKICAgICAgICAgIHsK ICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAgICAgICAgICBpZiAoX190 ZXN0aW4pCiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgICAgICAgIH0KICAgICAg fQoKCgoKICAgICAgb2ZmX3R5cGUKICAgICAgX01fb3V0X2J1Zl9zaXplKCkKICAgICAgewogICAg ICAgIG9mZl90eXBlIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX01fb3V0X2N1cikKICAgICAgICAg IHsKCiAgICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1ZikKICAgICAgICAgICAgICBf X3JldCA9IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7CgogICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfZW5kIC0gX01fb3V0X2N1cjsKICAg ICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KIyAyMzYgIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgICB2b2lk CiAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBpZiAoX01f bW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYs IF9NX2J1Zik7CiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAg dGhpcy0+c2V0cChfTV9idWYsIF9NX2J1Zik7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01f c2V0X2RldGVybWluYXRlKG9mZl90eXBlIF9fb2ZmKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rl c3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBf TV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICB0 aGlzLT5zZXRnKF9NX2J1ZiwgX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgICAgaWYgKF9f dGVzdG91dCkKICAgICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAg ICAgIH0KCiAgICAgIGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7 CiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNlOwoKICAgICAgICBpZiAoX01fYnVmKQogICAgICAg ICAgewogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgICAg ICBfX3JldCA9IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09IF9NX2luX2Vu ZDsKICAgICAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAg IF9fcmV0ID0gX01fb3V0X2JlZyA9PSBfTV9vdXRfY3VyICYmIF9NX291dF9jdXIgPT0gX01fb3V0 X2VuZDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGlj OgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAg X01fYnVmX3VuaWZpZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAg X01fYnVmX3NpemVfb3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2Rl KDApOwogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwogICAgICB9CgoKICAgICAg bG9jYWxlCiAgICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAgICAgIHsKICAgICAg ICBsb2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMtPmltYnVlKF9fbG9j KTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxvY2FsZQogICAgICBnZXRs b2MoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkKICAgICAg ICAgIHJldHVybiBfTV9idWZfbG9jYWxlOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBs b2NhbGUoKTsKICAgICAgfQoKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1 ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNl dGJ1ZihfX3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5 cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgICAgIGlvc19i YXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAg ICB7IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsgfQoKICAgICAg cG9zX3R5cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgICAg IGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0 KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0KCiAgICAgIGlu dAogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CgoKCiAgICAgIHN0cmVh bXNpemUKICAgICAgaW5fYXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3JldDsK ICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAg IHsKICAgICAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJh Y2tfY3VyX3NhdmU7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2lu X2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19w YmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg X19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAg IGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJu IF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAg ICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJu ICh0aGlzLT5zYnVtcGMoKSA9PSBfX2VvZiA/IF9fZW9mIDogdGhpcy0+c2dldGMoKSk7CiAgICAg IH0KCiAgICAgIGludF90eXBlCiAgICAgIHNidW1wYygpOwoKICAgICAgaW50X3R5cGUKICAgICAg c2dldGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2lu X2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190 eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVsc2UKICAgICAgICAg IF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9 CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19uKTsgfQoKCiAgICAgIGlu dF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIGludF90eXBlCiAg ICAgIHN1bmdldGMoKTsKCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19j KTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgc3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0 cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9Cgog ICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1ZihfX251 bGwpLCBfTV9idWZfc2l6ZSgwKSwKICAgICAgX01fYnVmX3NpemVfb3B0KHN0YXRpY19jYXN0PGlu dF90eXBlPig4MTkyKSksIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwKICAgICAgX01faW5fYmVnKDAp LCBfTV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigw KSwKICAgICAgX01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBf TV9idWZfbG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwg X01fcGJhY2tfc2l6ZSgxKSwgX01fcGJhY2soX19udWxsKSwKICAgICAgX01fcGJhY2tfY3VyX3Nh dmUoX19udWxsKSwgX01fcGJhY2tfZW5kX3NhdmUoX19udWxsKSwgX01fcGJhY2tfaW5pdChmYWxz ZSkKICAgICAgeyB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBlYmFjaygpIGNvbnN0IHsgcmV0 dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBncHRyKCkgY29uc3QgeyBy ZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVncHRyKCkgY29uc3Qg eyByZXR1cm4gX01faW5fZW5kOyB9CgogICAgICB2b2lkCiAgICAgIGdidW1wKGludCBfX24pIHsg X01faW5fY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRnKGNoYXJfdHlwZSogX19n YmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAgICB7CiAgICAg ICAgX01faW5fYmVnID0gX19nYmVnOwogICAgICAgIF9NX2luX2N1ciA9IF9fZ25leHQ7CiAgICAg ICAgX01faW5fZW5kID0gX19nZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6 aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkKICAgICAgICAgIF9NX21vZGUgPSBf TV9tb2RlIHwgaW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBw YmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAg ICAgcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoK ICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5kOyB9CgogICAgICB2b2lkCiAg ICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAg ICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpCiAgICAgIHsKICAg ICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAgICBfTV9vdXRfZW5k ID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KSAmJiBfX3Bi ZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0 OwogICAgICB9CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUm IF9fbG9jKQogICAgICB7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAg ICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBf X2xvYzsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSxf VHJhaXRzPioKICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAgICAgIHsgcmV0 dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlw ZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0g aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2Zm X3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrcG9zKHBvc190 eXBlLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlv c19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAg ICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoKICAgICAgdmlydHVh bCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KCiAgICAgIHZpcnR1 YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u KTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyByZXR1 cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVm bG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigp OwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdGhpcy0+dW5kZXJmbG93KCkgPT0gX19yZXQ7CiAg ICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5nID0gX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2lu X2VuZDsKICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAg ewogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3Vy KTsKICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmll ZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICArK19NX291dF9jdXI7 CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVh bCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkp CiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3Ry ZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u KTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFp dHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQojIDUx NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5o IiAzCiAgICBwcml2YXRlOgogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZf dHlwZSYpOwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9f c3RyZWFtYnVmX3R5cGUmKTsKCiAgICB9OwoKfQoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwpuYW1lc3BhY2Ugc3Rk IHsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBf X3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAg ICAgewogICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpncHRyKCk7CiAgICAgICAgICBfTV9pbl9j dXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9f Yyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT51ZmxvdygpOwog ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRf dHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGJhY2tj KGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBib29sIF9f dGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CiAgICAgIGJvb2wg X190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190eXBlOjplcShfX2MsIHRoaXMtPmdwdHIo KVstMV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBfX3Rlc3RuZSkKICAgICAgICBfX3JldCA9 IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRy YWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKICAgICAgICB9CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzdW5nZXRjKCkKICAgIHsK ICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwg X01faW5fY3VyKQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAg ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAg IH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5 cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRjKGNoYXJf dHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01fb3V0X2J1 Zl9zaXplKCkpCiAgICAgICAgewogICAgICAgICAgKl9NX291dF9jdXIgPSBfX2M7CiAgICAgICAg ICBfTV9vdXRfY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19p bnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+ b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4gX19y ZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVh bXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAg ICAgICAgc2l6ZV90IF9fYnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAg IGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9f cmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWlu KF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5 KF9fcywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAg ICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKF9f bGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93KCk7CiAgICAgICAg ICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6 dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJf dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9 IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlw ZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4g PiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBf X24gLSBfX3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4s IF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRfY3Vy LCBfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAg ICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsKICAg ICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19p bnRfdHlwZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9m KCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAg ICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g X19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0No YXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3Jl dCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwog ICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+ X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIHRyeSB7CiAgICAgICAgd2hpbGUgKF9fdGVz dHB1dCAmJiBfX2J1ZnNpemUgIT0gLTEpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9feHRyY3Qg PSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsKICAgICAgICAgICAg X19yZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShfX3h0 cmN0KTsKICAgICAgICAgICAgaWYgKF9feHRyY3QgPT0gX19idWZzaXplKQogICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2Jpbi0+c2dldGMoKTsKICAgICAg ICAgICAgICAgIGlmIChfX2MgPT0gX1RyYWl0czo6ZW9mKCkpCiAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgIH0KICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICB9CiAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKSB7CiAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgIHRocm93OwogICAgICB9CiAg ICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDUzMCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyA0NiAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzQgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAzCgojIDEgIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAxIDMKIyAzNiAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDMKCm5h bWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91 dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwdWJs aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0 cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbWJ1Zl90eXBl KiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6CiAgICAgIGlubGlu ZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSB0aHJvdyAoKQog ICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQoKICAg ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQogICAg ICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1i dWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAgICAgIG9zdHJlYW1i dWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRo aXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9y JgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAg ICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX2Zh aWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYKICAg IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I9KF9DaGFyVCBf X2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBfVHJhaXRzOjplcV9p bnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLF9UcmFpdHM6OmVvZigpKSkKICAgICAgX01fZmFp bGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0 b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9D aGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgICAgdHlwZWRlZiBpc3Ry ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmaXRlcl90eXBlOwoK ICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAg aW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0 aHJvdygpCiAgICAgIDogX01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7IH0KCiAgICAgIGlzdHJl YW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVm KF9fcy5yZGJ1ZigpKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0 cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2MoLTIp IHsgfQoKCgoKICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsK CiAgICAgICAgY2hhcl90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9zYnVmICYmIF9NX2MgIT0g c3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0yKSkKICAgICAgICAgIF9fcmV0ID0gX01fYzsKICAgICAg ICBlbHNlIGlmIChfTV9zYnVmKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9fY2hh cl90eXBlKF9NX3NidWYtPnNnZXRjKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0g c3RhdGljX2Nhc3Q8Y2hhcl90eXBlPih0cmFpdHNfdHlwZTo6ZW9mKCkpOwogICAgICAgIHJldHVy biBfX3JldDsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlJgogICAgICBvcGVy YXRvcisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9zYnVmKQogICAgICAgICAgX01fc2J1Zi0+ c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg fQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAg ICB7CiAgICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlIF9fb2xkID0gKnRoaXM7CiAgICAgICAg aWYgKF9NX3NidWYpCiAgICAgICAgICBfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCk7CiAg ICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYm9v bAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9fYikKICAgICAgewog ICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wg X190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsKICAgICAg ICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAgICAgICAgICAgfHwgX19i Ll9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYg X19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoKCgoKICAgICAgYm9v bAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9fYikgY29uc3QKICAg ICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg IGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsK ICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAgICAgICAgICAg fHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJuIChfX3RoaXNl b2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoKICAgIH07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf VHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D aGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRz PiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg X1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsgfQp9CiMgMzYgIi91 c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAx ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgi IDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVf ZmFjZXRzLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2N0aW1lLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY3RpbWUuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMiAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j dGltZS5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2N0aW1lLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9ja190OwogIHVzaW5n IDo6dGltZV90OwogIHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAgdXNpbmcgOjpkaWZm dGltZTsKICB1c2luZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNpbmcgOjphc2N0aW1l OwogIHVzaW5nIDo6Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcgOjpsb2NhbHRpbWU7 CiAgdXNpbmcgOjpzdHJmdGltZTsKfQojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n KystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMu MC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgojIDEgIi91c3IvaW5j bHVkZS9sYW5naW5mby5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9ubF90eXBl cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1 ZGUvbmxfdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAzCmV4dGVy biAiQyIgewoKCnR5cGVkZWYgdm9pZCAqbmxfY2F0ZDsKCgp0eXBlZGVmIGludCBubF9pdGVtOwoK CmV4dGVybiBubF9jYXRkIGNhdG9wZW4gKF9fY29uc3QgY2hhciAqX19jYXRfbmFtZSwgaW50IF9f ZmxhZykgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxv ZywgaW50IF9fc2V0LCBpbnQgX19udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNhdGNsb3NlIChubF9jYXRk IF9fY2F0YWxvZykgdGhyb3cgKCk7Cgp9CiMgMjUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAy IDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1 ZGUvYml0cy9sb2NhbGUuaCIgMwplbnVtCnsKICBfX0xDX0NUWVBFID0gMCwKICBfX0xDX05VTUVS SUMgPSAxLAogIF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xMQVRFID0gMywKICBfX0xDX01PTkVU QVJZID0gNCwKICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xDX0FMTCA9IDYsCiAgX19MQ19QQVBF UiA9IDcsCiAgX19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJFU1MgPSA5LAogIF9fTENfVEVMRVBI T05FID0gMTAsCiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAogIF9fTENfSURFTlRJRklDQVRJT04g PSAxMgp9OwojIDI3ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgoKZXh0ZXJuICJDIiB7 CiMgNDMgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmVudW0KewoKCgogIEFCREFZXzEgPSAo KChfX0xDX1RJTUUpIDw8IDE2KSB8ICgwKSksCgogIEFCREFZXzIsCgogIEFCREFZXzMsCgogIEFC REFZXzQsCgogIEFCREFZXzUsCgogIEFCREFZXzYsCgogIEFCREFZXzcsCgoKCiAgREFZXzEsCgog IERBWV8yLAoKICBEQVlfMywKCiAgREFZXzQsCgogIERBWV81LAoKICBEQVlfNiwKCiAgREFZXzcs CgoKCiAgQUJNT05fMSwKCiAgQUJNT05fMiwKCiAgQUJNT05fMywKCiAgQUJNT05fNCwKCiAgQUJN T05fNSwKCiAgQUJNT05fNiwKCiAgQUJNT05fNywKCiAgQUJNT05fOCwKCiAgQUJNT05fOSwKCiAg QUJNT05fMTAsCgogIEFCTU9OXzExLAoKICBBQk1PTl8xMiwKCgoKICBNT05fMSwKCiAgTU9OXzIs CgogIE1PTl8zLAoKICBNT05fNCwKCiAgTU9OXzUsCgogIE1PTl82LAoKICBNT05fNywKCiAgTU9O XzgsCgogIE1PTl85LAoKICBNT05fMTAsCgogIE1PTl8xMSwKCiAgTU9OXzEyLAoKCiAgQU1fU1RS LAoKICBQTV9TVFIsCgoKICBEX1RfRk1ULAoKICBEX0ZNVCwKCiAgVF9GTVQsCgogIFRfRk1UX0FN UE0sCgoKICBFUkEsCgogIF9fRVJBX1lFQVIsCgoKCiAgRVJBX0RfRk1ULAoKICBBTFRfRElHSVRT LAoKICBFUkFfRF9UX0ZNVCwKCiAgRVJBX1RfRk1ULAoKCiAgX05MX1RJTUVfRVJBX05VTV9FTlRS SUVTLAogIF9OTF9USU1FX0VSQV9FTlRSSUVTLAoKICBfTkxfV0FCREFZXzEsCiAgX05MX1dBQkRB WV8yLAogIF9OTF9XQUJEQVlfMywKICBfTkxfV0FCREFZXzQsCiAgX05MX1dBQkRBWV81LAogIF9O TF9XQUJEQVlfNiwKICBfTkxfV0FCREFZXzcsCgoKICBfTkxfV0RBWV8xLAogIF9OTF9XREFZXzIs CiAgX05MX1dEQVlfMywKICBfTkxfV0RBWV80LAogIF9OTF9XREFZXzUsCiAgX05MX1dEQVlfNiwK ICBfTkxfV0RBWV83LAoKCiAgX05MX1dBQk1PTl8xLAogIF9OTF9XQUJNT05fMiwKICBfTkxfV0FC TU9OXzMsCiAgX05MX1dBQk1PTl80LAogIF9OTF9XQUJNT05fNSwKICBfTkxfV0FCTU9OXzYsCiAg X05MX1dBQk1PTl83LAogIF9OTF9XQUJNT05fOCwKICBfTkxfV0FCTU9OXzksCiAgX05MX1dBQk1P Tl8xMCwKICBfTkxfV0FCTU9OXzExLAogIF9OTF9XQUJNT05fMTIsCgoKICBfTkxfV01PTl8xLAog IF9OTF9XTU9OXzIsCiAgX05MX1dNT05fMywKICBfTkxfV01PTl80LAogIF9OTF9XTU9OXzUsCiAg X05MX1dNT05fNiwKICBfTkxfV01PTl83LAogIF9OTF9XTU9OXzgsCiAgX05MX1dNT05fOSwKICBf TkxfV01PTl8xMCwKICBfTkxfV01PTl8xMSwKICBfTkxfV01PTl8xMiwKCiAgX05MX1dBTV9TVFIs CiAgX05MX1dQTV9TVFIsCgogIF9OTF9XRF9UX0ZNVCwKICBfTkxfV0RfRk1ULAogIF9OTF9XVF9G TVQsCiAgX05MX1dUX0ZNVF9BTVBNLAoKICBfTkxfV0VSQV9ZRUFSLAogIF9OTF9XRVJBX0RfRk1U LAogIF9OTF9XQUxUX0RJR0lUUywKICBfTkxfV0VSQV9EX1RfRk1ULAogIF9OTF9XRVJBX1RfRk1U LAoKICBfTkxfVElNRV9XRUVLX05EQVlTLAogIF9OTF9USU1FX1dFRUtfMVNUREFZLAogIF9OTF9U SU1FX1dFRUtfMVNUV0VFSywKICBfTkxfVElNRV9GSVJTVF9XRUVLREFZLAogIF9OTF9USU1FX0ZJ UlNUX1dPUktEQVksCiAgX05MX1RJTUVfQ0FMX0RJUkVDVElPTiwKICBfTkxfVElNRV9USU1FWk9O RSwKCiAgX0RBVEVfRk1ULAoKICBfTkxfV19EQVRFX0ZNVCwKCiAgX05MX05VTV9MQ19USU1FLAoK CgoKICBfTkxfQ09MTEFURV9OUlVMRVMgPSAoKChfX0xDX0NPTExBVEUpIDw8IDE2KSB8ICgwKSks CiAgX05MX0NPTExBVEVfUlVMRVNFVFMsCiAgX05MX0NPTExBVEVfVEFCTEVNQiwKICBfTkxfQ09M TEFURV9XRUlHSFRNQiwKICBfTkxfQ09MTEFURV9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0lORElS RUNUTUIsCiAgX05MX0NPTExBVEVfR0FQMSwKICBfTkxfQ09MTEFURV9HQVAyLAogIF9OTF9DT0xM QVRFX0dBUDMsCiAgX05MX0NPTExBVEVfVEFCTEVXQywKICBfTkxfQ09MTEFURV9XRUlHSFRXQywK ICBfTkxfQ09MTEFURV9FWFRSQVdDLAogIF9OTF9DT0xMQVRFX0lORElSRUNUV0MsCiAgX05MX0NP TExBVEVfU1lNQl9IQVNIX1NJWkVNQiwKICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIsCiAgX05M X0NPTExBVEVfU1lNQl9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFNQiwKICBfTkxfQ09M TEFURV9DT0xMU0VRV0MsCiAgX05MX05VTV9MQ19DT0xMQVRFLAoKCgoKICBfTkxfQ1RZUEVfQ0xB U1MgPSAoKChfX0xDX0NUWVBFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DVFlQRV9UT1VQUEVSLAog IF9OTF9DVFlQRV9HQVAxLAogIF9OTF9DVFlQRV9UT0xPV0VSLAogIF9OTF9DVFlQRV9HQVAyLAog IF9OTF9DVFlQRV9DTEFTUzMyLAogIF9OTF9DVFlQRV9HQVAzLAogIF9OTF9DVFlQRV9HQVA0LAog IF9OTF9DVFlQRV9HQVA1LAogIF9OTF9DVFlQRV9HQVA2LAogIF9OTF9DVFlQRV9DTEFTU19OQU1F UywKICBfTkxfQ1RZUEVfTUFQX05BTUVTLAogIF9OTF9DVFlQRV9XSURUSCwKICBfTkxfQ1RZUEVf TUJfQ1VSX01BWCwKICBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAogIENPREVTRVQgPSBfTkxfQ1RZ UEVfQ09ERVNFVF9OQU1FLAoKICBfTkxfQ1RZUEVfVE9VUFBFUjMyLAogIF9OTF9DVFlQRV9UT0xP V0VSMzIsCiAgX05MX0NUWVBFX0NMQVNTX09GRlNFVCwKICBfTkxfQ1RZUEVfTUFQX09GRlNFVCwK ICBfTkxfQ1RZUEVfSU5ESUdJVFNfTUJfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lUUzBfTUIsCiAg X05MX0NUWVBFX0lORElHSVRTMV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX01CLAogIF9OTF9D VFlQRV9JTkRJR0lUUzNfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNF9NQiwKICBfTkxfQ1RZUEVf SU5ESUdJVFM1X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfTUIsCiAgX05MX0NUWVBFX0lORElH SVRTN19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzlf TUIsCiAgX05MX0NUWVBFX0lORElHSVRTX1dDX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMwX1dD LAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTMl9XQywKICBf TkxfQ1RZUEVfSU5ESUdJVFMzX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfV0MsCiAgX05MX0NU WVBFX0lORElHSVRTNV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X1dDLAogIF9OTF9DVFlQRV9J TkRJR0lUUzdfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJ VFM5X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMV9N QiwKICBfTkxfQ1RZUEVfT1VURElHSVQyX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfTUIsCiAg X05MX0NUWVBFX09VVERJR0lUNF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ1X01CLAogIF9OTF9D VFlQRV9PVVRESUdJVDZfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUN19NQiwKICBfTkxfQ1RZUEVf T1VURElHSVQ4X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfTUIsCiAgX05MX0NUWVBFX09VVERJ R0lUMF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQxX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDJf V0MsCiAgX05MX0NUWVBFX09VVERJR0lUM19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ0X1dDLAog IF9OTF9DVFlQRV9PVVRESUdJVDVfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNl9XQywKICBfTkxf Q1RZUEVfT1VURElHSVQ3X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfV0MsCiAgX05MX0NUWVBF X09VVERJR0lUOV9XQywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUsCiAgX05MX0NUWVBF X1RSQU5TTElUX0ZST01fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RCTCwKICBfTkxf Q1RZUEVfVFJBTlNMSVRfVE9fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19UQkwsCiAgX05M X0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElU X0RFRkFVTFRfTUlTU0lORywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFX0xFTiwKICBfTkxf Q1RZUEVfVFJBTlNMSVRfSUdOT1JFLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMSwKICBfTkxfQ1RZ UEVfRVhUUkFfTUFQXzIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8zLAogIF9OTF9DVFlQRV9FWFRS QV9NQVBfNCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzUsCiAgX05MX0NUWVBFX0VYVFJBX01BUF82 LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzgsCiAgX05M X0NUWVBFX0VYVFJBX01BUF85LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTAsCiAgX05MX0NUWVBF X0VYVFJBX01BUF8xMSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEyLAogIF9OTF9DVFlQRV9FWFRS QV9NQVBfMTMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xNCwKICBfTkxfTlVNX0xDX0NUWVBFLAoK CgoKICBfX0lOVF9DVVJSX1NZTUJPTCA9ICgoKF9fTENfTU9ORVRBUlkpIDw8IDE2KSB8ICgwKSks CgoKCiAgX19DVVJSRU5DWV9TWU1CT0wsCgoKCiAgX19NT05fREVDSU1BTF9QT0lOVCwKCgoKICBf X01PTl9USE9VU0FORFNfU0VQLAoKCgogIF9fTU9OX0dST1VQSU5HLAoKCgogIF9fUE9TSVRJVkVf U0lHTiwKCgoKICBfX05FR0FUSVZFX1NJR04sCgoKCiAgX19JTlRfRlJBQ19ESUdJVFMsCgoKCiAg X19GUkFDX0RJR0lUUywKCgoKICBfX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19QX1NFUF9CWV9TUEFD RSwKCgoKICBfX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19OX1NFUF9CWV9TUEFDRSwKCgoKICBfX1Bf U0lHTl9QT1NOLAoKCgogIF9fTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZX0NSTkNZU1RS LAoKICBfX0lOVF9QX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX1BfU0VQX0JZX1NQQUNFLAoKCgog IF9fSU5UX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19J TlRfUF9TSUdOX1BPU04sCgoKCiAgX19JTlRfTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZ X0RVT19JTlRfQ1VSUl9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19DVVJSRU5DWV9TWU1CT0ws CiAgX05MX01PTkVUQVJZX0RVT19JTlRfRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19G UkFDX0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX1BfQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVU QVJZX0RVT19QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX05fQ1NfUFJFQ0VERVMs CiAgX05MX01PTkVUQVJZX0RVT19OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lO VF9QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0VQX0JZX1NQQUNFLAog IF9OTF9NT05FVEFSWV9EVU9fSU5UX05fQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19J TlRfTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19QX1NJR05fUE9TTiwKICBfTkxf TU9ORVRBUllfRFVPX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0lHTl9Q T1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9V Tk9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX1RPLAogIF9OTF9NT05FVEFS WV9EVU9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX1RPLAogIF9OTF9NT05F VEFSWV9DT05WRVJTSU9OX1JBVEUsCiAgX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsCiAg X05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX05VTV9MQ19NT05FVEFSWSwKCgoK ICBfX0RFQ0lNQUxfUE9JTlQgPSAoKChfX0xDX05VTUVSSUMpIDw8IDE2KSB8ICgwKSksCgoKCiAg UkFESVhDSEFSID0gX19ERUNJTUFMX1BPSU5ULAoKICBfX1RIT1VTQU5EU19TRVAsCgoKCiAgVEhP VVNFUCA9IF9fVEhPVVNBTkRTX1NFUCwKCiAgX19HUk9VUElORywKCgoKICBfTkxfTlVNRVJJQ19E RUNJTUFMX1BPSU5UX1dDLAogIF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX05V TV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAo MCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTlVN X0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hUID0gKCgoX19MQ19QQVBFUikgPDwgMTYp IHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05B TUVfTkFNRV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFN RV9HRU4sCiAgX05MX05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFN RV9OQU1FX01JU1MsCiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTlVNX0xDX05BTUUsCgogIF9O TF9BRERSRVNTX1BPU1RBTF9GTVQgPSAoKChfX0xDX0FERFJFU1MpIDw8IDE2KSB8ICgwKSksCiAg X05MX0FERFJFU1NfQ09VTlRSWV9OQU1FLAogIF9OTF9BRERSRVNTX0NPVU5UUllfUE9TVCwKICBf TkxfQUREUkVTU19DT1VOVFJZX0FCMiwKICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMywKICBfTkxf QUREUkVTU19DT1VOVFJZX0NBUiwKICBfTkxfQUREUkVTU19DT1VOVFJZX05VTSwKICBfTkxfQURE UkVTU19DT1VOVFJZX0lTQk4sCiAgX05MX0FERFJFU1NfTEFOR19OQU1FLAogIF9OTF9BRERSRVNT X0xBTkdfQUIsCiAgX05MX0FERFJFU1NfTEFOR19URVJNLAogIF9OTF9BRERSRVNTX0xBTkdfTElC LAogIF9OTF9OVU1fTENfQUREUkVTUywKCiAgX05MX1RFTEVQSE9ORV9URUxfSU5UX0ZNVCA9ICgo KF9fTENfVEVMRVBIT05FKSA8PCAxNikgfCAoMCkpLAogIF9OTF9URUxFUEhPTkVfVEVMX0RPTV9G TVQsCiAgX05MX1RFTEVQSE9ORV9JTlRfU0VMRUNULAogIF9OTF9URUxFUEhPTkVfSU5UX1BSRUZJ WCwKICBfTkxfTlVNX0xDX1RFTEVQSE9ORSwKCiAgX05MX01FQVNVUkVNRU5UX01FQVNVUkVNRU5U ID0gKCgoX19MQ19NRUFTVVJFTUVOVCkgPDwgMTYpIHwgKDApKSwKICBfTkxfTlVNX0xDX01FQVNV UkVNRU5ULAoKICBfTkxfSURFTlRJRklDQVRJT05fVElUTEUgPSAoKChfX0xDX0lERU5USUZJQ0FU SU9OKSA8PCAxNikgfCAoMCkpLAogIF9OTF9JREVOVElGSUNBVElPTl9TT1VSQ0UsCiAgX05MX0lE RU5USUZJQ0FUSU9OX0FERFJFU1MsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NPTlRBQ1QsCiAgX05M X0lERU5USUZJQ0FUSU9OX0VNQUlMLAogIF9OTF9JREVOVElGSUNBVElPTl9URUwsCiAgX05MX0lE RU5USUZJQ0FUSU9OX0ZBWCwKICBfTkxfSURFTlRJRklDQVRJT05fTEFOR1VBR0UsCiAgX05MX0lE RU5USUZJQ0FUSU9OX1RFUlJJVE9SWSwKICBfTkxfSURFTlRJRklDQVRJT05fQVVESUVOQ0UsCiAg X05MX0lERU5USUZJQ0FUSU9OX0FQUExJQ0FUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9BQkJS RVZJQVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX1JFVklTSU9OLAogIF9OTF9JREVOVElGSUNB VElPTl9EQVRFLAogIF9OTF9JREVOVElGSUNBVElPTl9DQVRFR09SWSwKICBfTkxfTlVNX0xDX0lE RU5USUZJQ0FUSU9OLAoKCiAgX05MX05VTQp9OwojIDU2MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZv LmgiIDMKZXh0ZXJuIGNoYXIgKm5sX2xhbmdpbmZvIChubF9pdGVtIF9faXRlbSkgdGhyb3cgKCk7 CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDU3MiAiL3Vzci9pbmNs dWRlL2xhbmdpbmZvLmgiIDIgMwoKCmV4dGVybiBjaGFyICpfX25sX2xhbmdpbmZvX2wgKG5sX2l0 ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyA0NSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djdHlwZS5oIiAxIDMKIyAzOCAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS93Y3R5cGUuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3djdHlw ZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9p bmNsdWRlL3djdHlwZS5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNiAi L3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAz CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgd2N0eXBlX3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNs dWRlL2VuZGlhbi5oIiAxIDMKIyA2OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyA3OSAi L3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmVudW0KewogIF9fSVN3dXBwZXIgPSAwLAogIF9fSVN3 bG93ZXIgPSAxLAogIF9fSVN3YWxwaGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAogIF9fSVN3eGRp Z2l0ID0gNCwKICBfX0lTd3NwYWNlID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBfX0lTd2dyYXBo ID0gNywKICBfX0lTd2JsYW5rID0gOCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lTd3B1bmN0ID0g MTAsCiAgX19JU3dhbG51bSA9IDExLAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBwZXIpIDwgOCA/ IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3VwcGVyKSA8IDE2 ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1cHBlcikgPCAy NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo X19JU3d1cHBlcikpID4+IDI0KSkpKSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93ZXIpIDwgOCA/ IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xvd2VyKSA8IDE2 ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3dsb3dlcikgPCAy NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo X19JU3dsb3dlcikpID4+IDI0KSkpKSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxwaGEpIDwgOCA/ IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2FscGhhKSA8IDE2 ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dhbHBoYSkgPCAy NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo X19JU3dhbHBoYSkpID4+IDI0KSkpKSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGlnaXQpIDwgOCA/ IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2RpZ2l0KSA8IDE2 ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dkaWdpdCkgPCAy NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo X19JU3dkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hkaWdpdCkgPCA4 ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lTd3hkaWdpdCkg PCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChfX0lTd3hkaWdp dCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDogKGludCkgKCgx VUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgoX19JU3dzcGFj ZSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAoKF9fSVN3c3Bh Y2UpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDogKChfX0lTd3Nw YWNlKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6IChpbnQpICgo MVVMIDw8IChfX0lTd3NwYWNlKSkgPj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgoX19JU3dwcmlu dCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAoKF9fSVN3cHJp bnQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDogKChfX0lTd3By aW50KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6IChpbnQpICgo MVVMIDw8IChfX0lTd3ByaW50KSkgPj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgoX19JU3dncmFw aCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAoKF9fSVN3Z3Jh cGgpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDogKChfX0lTd2dy YXBoKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6IChpbnQpICgo MVVMIDw8IChfX0lTd2dyYXBoKSkgPj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgoX19JU3dibGFu aykgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAoKF9fSVN3Ymxh bmspIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDogKChfX0lTd2Js YW5rKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6IChpbnQpICgo MVVMIDw8IChfX0lTd2JsYW5rKSkgPj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgoX19JU3djbnRy bCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAoKF9fSVN3Y250 cmwpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDogKChfX0lTd2Nu dHJsKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6IChpbnQpICgo MVVMIDw8IChfX0lTd2NudHJsKSkgPj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgoX19JU3dwdW5j dCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAoKF9fSVN3cHVu Y3QpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDogKChfX0lTd3B1 bmN0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6IChpbnQpICgo MVVMIDw8IChfX0lTd3B1bmN0KSkgPj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgoX19JU3dhbG51 bSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAoKF9fSVN3YWxu dW0pIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDogKChfX0lTd2Fs bnVtKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6IChpbnQpICgo MVVMIDw8IChfX0lTd2FsbnVtKSkgPj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIgewoKCgoKCgoK ZXh0ZXJuIGludCBpc3dhbG51bSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgaXN3YWxwaGEgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd2NudHJs ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXQgKHdpbnRfdCBf X3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9fd2MpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dsb3dlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgaXN3cHJpbnQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg aXN3cHVuY3QgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3c3BhY2Ug KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXIgKHdpbnRfdCBf X3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3QgX193YykgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dibGFuayAod2ludF90IF9fd2MpIHRocm93ICgpOwoj IDE3OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9f Y29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Y3R5cGUg KHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2ln bmVkIGludCAqX19jdHlwZTMyX2I7CiMgMjQ5ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKdHlw ZWRlZiBfX2NvbnN0IF9faW50MzJfdCAqd2N0cmFuc190OwoKCmV4dGVybiB3aW50X3QgdG93bG93 ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd3VwcGVyICh3aW50 X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY29uc3Qgd2ludF90ICpfX2N0eXBlMzJfdG9s b3dlcjsKZXh0ZXJuIGNvbnN0IHdpbnRfdCAqX19jdHlwZTMyX3RvdXBwZXI7CiMgMjc1ICIvdXNy L2luY2x1ZGUvd2N0eXBlLmgiIDMKfQojIDI4OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4 dGVybiAiQyIgewoKCgpleHRlcm4gd2N0cmFuc190IHdjdHJhbnMgKF9fY29uc3QgY2hhciAqX19w cm9wZXJ0eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnMgKHdpbnRfdCBfX3dj LCB3Y3RyYW5zX3QgX19kZXNjKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2Fs ZS5oIiAxIDMKIyAzMDAgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCgoKCmV4dGVybiBpbnQg X19pc3dhbG51bV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCBfX2lzd2FscGhhX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9f bG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3Y250cmxfbCAod2ludF90IF9fd2Ms IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9faXN3ZGlnaXRf bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4g aW50IF9faXN3Z3JhcGhfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90 IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3cHJpbnRfbCAod2ludF90IF9f d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3B1 bmN0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgX19pc3dzcGFjZV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9j YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3hkaWdpdF9sICh3 aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IF9faXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp OwoKCgpleHRlcm4gd2N0eXBlX3QgX193Y3R5cGVfbCAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5 LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9faXN3 Y3R5cGVfbCAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYywgX19sb2NhbGVfdCBfX2xvY2Fs ZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB3aW50X3QgX190b3dsb3dlcl9sICh3aW50 X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBf X3Rvd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHdjdHJhbnNfdCBfX3djdHJhbnNfbCAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5 LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190 b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCn0KIyAzOSAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUuaCIgMiAz CiMgNjAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2N0eXBl LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6d2N0eXBl X3Q7CiAgdXNpbmcgOjp3Y3RyYW5zX3Q7CgogIHVzaW5nIDo6aXN3YWxudW07CiAgdXNpbmcgOjpp c3dhbHBoYTsKICB1c2luZyA6Omlzd2JsYW5rOwogIHVzaW5nIDo6aXN3Y250cmw7CiAgdXNpbmcg Ojppc3dkaWdpdDsKICB1c2luZyA6Omlzd2dyYXBoOwogIHVzaW5nIDo6aXN3bG93ZXI7CiAgdXNp bmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHVuY3Q7CiAg dXNpbmcgOjppc3dzcGFjZTsKICB1c2luZyA6Omlzd3VwcGVyOwogIHVzaW5nIDo6aXN3eGRpZ2l0 OwogIHVzaW5nIDo6aXN3Y3R5cGU7CiAgdXNpbmcgOjp0b3dsb3dlcjsKICB1c2luZyA6OnRvd3Vw cGVyOwogIHVzaW5nIDo6dG93Y3RyYW5zOwogIHVzaW5nIDo6d2N0cmFuczsKfQojIDQ2ICIvdXNy L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoj IDEgIi91c3IvaW5jbHVkZS9pY29udi5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2ljb252Lmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9p Y29udi5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2lj b252LmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgdm9pZCAqaWNvbnZfdDsKCgoKCmV4 dGVybiBpY29udl90IGljb252X29wZW4gKF9fY29uc3QgY2hhciAqX190b2NvZGUsIF9fY29uc3Qg Y2hhciAqX19mcm9tY29kZSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgaWNvbnYg KGljb252X3QgX19jZCwgY2hhciAqKl9fcmVzdHJpY3QgX19pbmJ1ZiwKICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9faW5ieXRlc2xlZnQsCiAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fb3V0YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXpl X3QgKl9fcmVzdHJpY3QgX19vdXRieXRlc2xlZnQpOwoKCmV4dGVybiBpbnQgaWNvbnZfY2xvc2Ug KGljb252X3QgX19jZCkgdGhyb3cgKCk7Cgp9CiMgNDcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CgoK IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9jdHlwZV9iYXNlLmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDMKICBzdHJ1Y3QgY3R5 cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNvbnN0IGludCogX190b190eXBlOwoKCgogICAgdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwogICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSBf SVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2VyID0gX0lTbG93ZXI7CiAgICBzdGF0 aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2FscGhhOwogICAgc3RhdGljIGNvbnN0IG1hc2sgZGln aXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHhkaWdpdCA9IF9JU3hkaWdpdDsK ICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gX0lTc3BhY2U7CiAgICBzdGF0aWMgY29uc3Qg bWFzayBwcmludCA9IF9JU3ByaW50OwogICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSBfSVNn cmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gX0lTY250cmw7CiAgICBzdGF0aWMg Y29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0g PSBfSVNhbG51bTsKICB9OwojIDU0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgY2xhc3MgX19jdHlwZV9hYnN0cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1 YmxpYyBjdHlwZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CgogICAgICBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0KCiAgICAgIGNvbnN0 IGNoYXJfdHlwZSoKICAgICAgaXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5 cGUgKl9faGksIG1hc2sgKl9fdmVjKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhf X2xvLCBfX2hpLCBfX3ZlYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9p cyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5faXMoX19tLCBfX2xvLCBfX2hpKTsg fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3Qg Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3NjYW5fbm90KF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlw ZQogICAgICB0b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX3RvdXBwZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b3VwcGVy KGNoYXJfdHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb190b3VwcGVyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAg ICAgdG9sb3dlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190 b2xvd2VyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG9sb3dlcihjaGFy X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fdG9sb3dlcihfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHdp ZGVuKGNoYXIgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2MpOyB9 CgogICAgICBjb25zdCBjaGFyKgogICAgICB3aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBj aGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3dpZGVuKF9fbG8sIF9faGksIF9fdG8pOyB9CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFy X3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19u YXJyb3coX19jLCBfX2RmYXVsdCk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgbmFy cm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAg ICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX25hcnJvdyhfX2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7IH0KCiAgICBwcm90ZWN0 ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19y ZWZzID0gMCk6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAg fl9fY3R5cGVfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRv X2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj aGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgIG1hc2sqIF9fdmVjKSBjb25zdCA9IDA7CgogICAg ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29u c3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19o aSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3Nj YW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5 cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg ICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5 cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dp ZGVuKGNoYXIpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9f d2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwKICAgICAgICAgICAgICAg Y2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBk b19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQs IGNoYXIqIF9fZGVzdCkgY29uc3QgPSAwOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGNsYXNzIGN0eXBlIDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hh clQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hh clQ+KF9fcmVmcykgeyB9CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgIHByb3RlY3Rl ZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKSB7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAog ICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4g ZmFsc2U7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25z dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBj aGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg Y29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg ICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiBfX2M7IH0K CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlw ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hp OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBf X2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fYzsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy X3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq IF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90 eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAogICAgICB7IHJldHVybiBjaGFyX3R5 cGUoKTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBj aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QKICAg ICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhj aGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNo YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hh ciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9D aGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMg X19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHByaXZhdGU6CgogICAgICBib29sIF9NX2RlbDsKICAg ICAgX190b190eXBlIGNvbnN0JiBfTV90b3VwcGVyOwogICAgICBfX3RvX3R5cGUgY29uc3QmIF9N X3RvbG93ZXI7CiAgICAgIGNvbnN0IG1hc2sqIGNvbnN0JiBfTV9jdGFibGU7CiAgICAgIGNvbnN0 IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNr KiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7Cgog ICAgICBpbmxpbmUgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OwoKICAg ICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo YXIqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgog ICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hp KSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX25vdChtYXNrIF9f bSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgY29uc3QgbWFzayoKICAg ICAgdGFibGUoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAg ICBjb25zdCBtYXNrKgogICAgICBjbGFzc2ljX3RhYmxlKCkgdGhyb3coKQogICAgICB7IHJldHVy biBfTV9jdGFibGU7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwg Y2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg ICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1h c2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk b19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f c2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg Y2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93 ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg ICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xv LCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNo YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNo YXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAg ICBjb25zdCBjdHlwZTxjaGFyPiYKICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxv Y2FsZSYgX19sb2MpOwoKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPHdjaGFyX3Q+IDog cHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTx3Y2hhcl90PgogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3Y3R5cGVfdCBf X3dtYXNrX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp dAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICBf X3dtYXNrX3R5cGUKICAgICAgX01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29u c3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAg ICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg Y2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBf X2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFy X3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj b25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f d2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dp ZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0 KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBj aGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg ICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGks CiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAg ICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNl dDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lu bGluZS5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYt cGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29sCiAgY3R5cGU8Y2hhcj46 OgogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVybiBfTV90YWJsZVtfX2Nd ICYgX19tOyB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIq IF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdo aWxlIChfX2xvdyA8IF9faGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVsqX19sb3crK107 CiAgICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAg c2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkg Y29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYgIShfTV90YWJsZVsqX19sb3dd ICYgX19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CgogIGNvbnN0IGNo YXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xv dywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGln aAogICAgICAgICAgICYmIChfTV90YWJsZVsqX19sb3ddICYgX19tKSAhPSAwKQogICAgICArK19f bG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyAzOTMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgog ICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBl eHBsaWNpdAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAw KTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsg fQogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnlu YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAzCiMgNTcgIi91c3IvbG9jYWwvZ2Nj LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwogIGNsYXNzIF9fZW5jX3RyYWl0 cwogIHsKICBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIGljb252X3QgX19kZXNjX3R5cGU7CgogIHBy b3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19tYXhfc2l6ZSA9IDMyOwoKICAgIGNo YXIgX01faW50X2VuY1tfU19tYXhfc2l6ZV07CgogICAgY2hhciBfTV9leHRfZW5jW19TX21heF9z aXplXTsKCgogICAgX19kZXNjX3R5cGUgX01faW5fZGVzYzsKCiAgICBfX2Rlc2NfdHlwZSBfTV9v dXRfZGVzYzsKCgogICAgaW50IF9NX2V4dF9ib207CgoKICAgIGludCBfTV9pbnRfYm9tOwoKICBw dWJsaWM6CiAgICBfX2VuY190cmFpdHMoKQogICAgOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVz YygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2JvbSgwKQogICAgewoKCgoKICAgICAgc3RyY3B5 KF9NX2ludF9lbmMsICJVQ1M0Iik7CgoKICAgICAgc3RyY3B5KF9NX2V4dF9lbmMsIG5sX2xhbmdp bmZvKENPREVTRVQpKTsKICAgIH0KCiAgICBfX2VuY190cmFpdHMoY29uc3QgY2hhciogX19pbnQs IGNvbnN0IGNoYXIqIF9fZXh0LCBpbnQgX19pYm9tID0gMCwKICAgICAgICAgICAgICAgICBpbnQg X19lYm9tID0gMCkKICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9i b20oMCksIF9NX2ludF9ib20oMCkKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX2lu dCwgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fZXh0LCBfU19tYXhf c2l6ZSk7CiAgICB9CgoKCgoKCiAgICBfX2VuY190cmFpdHMoY29uc3QgX19lbmNfdHJhaXRzJiBf X29iaikKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29iai5fTV9pbnRfZW5jLCBf U19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19vYmouX01fZXh0X2VuYywg X1NfbWF4X3NpemUpOwogICAgICBfTV9leHRfYm9tID0gX19vYmouX01fZXh0X2JvbTsKICAgICAg X01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9ib207CiAgICB9CgogICAgfl9fZW5jX3RyYWl0cygp CiAgICB7CiAgICAgIGljb252X2Nsb3NlKF9NX2luX2Rlc2MpOwogICAgICBpY29udl9jbG9zZShf TV9vdXRfZGVzYyk7CiAgICB9CgoKICAgIHZvaWQKICAgIF9NX2luaXQoKQogICAgewogICAgICBf TV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsKICAgICAgX01f b3V0X2Rlc2MgPSBpY29udl9vcGVuKF9NX2V4dF9lbmMsIF9NX2ludF9lbmMpOwogICAgICBpZiAo X01fb3V0X2Rlc2MgPT0gaWNvbnZfdCgtMSkgfHwgX01faW5fZGVzYyA9PSBpY29udl90KC0xKSkK ICAgICAgICB7CgogICAgICAgIH0KICAgIH0KCiAgICBib29sCiAgICBfTV9nb29kKCkKICAgIHsK ICAgICAgcmV0dXJuIF9NX291dF9kZXNjICYmIF9NX2luX2Rlc2MKICAgICAgICAgICAgICYmIF9N X291dF9kZXNjICE9IGljb252X3QoLTEpICYmIF9NX2luX2Rlc2MgIT0gaWNvbnZfdCgtMSk7CiAg ICB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRfaW5fZGVzY3JpcHRvcigpCiAg ICB7IHJldHVybiAmX01faW5fZGVzYzsgfQoKICAgIGNvbnN0IF9fZGVzY190eXBlKgogICAgX01f Z2V0X291dF9kZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9vdXRfZGVzYzsgfQoKICAgY29u c3QgY2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9lbmMoKQogICAgeyByZXR1cm4gX01faW50X2Vu YzsgfQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfZXh0ZXJuYWxfZW5jKCkKICAgIHsgcmV0 dXJuIF9NX2V4dF9lbmM7IH0KCiAgICBpbnQKICAgIF9NX2dldF9leHRlcm5hbF9ib20oKQogICAg eyByZXR1cm4gX01fZXh0X2JvbTsgfQoKICAgIGludAogICAgX01fZ2V0X2ludGVybmFsX2JvbSgp CiAgICB7IHJldHVybiBfTV9pbnRfYm9tOyB9CiAgfTsKCgoKCiAgY2xhc3MgY29kZWN2dF9iYXNl CiAgewogIHB1YmxpYzoKICAgIGVudW0gcmVzdWx0CiAgICB7CiAgICAgIG9rLAogICAgICBwYXJ0 aWFsLAogICAgICBlcnJvciwKICAgICAgbm9jb252CiAgICB9OwogIH07CgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+ CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQogICAgOiBwdWJsaWMgbG9jYWxlOjpm YWNldCwgcHVibGljIGNvZGVjdnRfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl ZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50 ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVk ZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHJlc3VsdAogICAgICBvdXQoc3RhdGVfdHlw ZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGlu dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog ICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAg ICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJu IHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAg ICAgIH0KCiAgICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4 dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgZXh0 ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hp ZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQpOyB9CgogICAgICByZXN1bHQKICAg ICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAg ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYg X19mcm9tX25leHQsCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190 b19lbmQsCiAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAg ICAgICAgcmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19m cm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3Rv X25leHQpOwogICAgICB9CgogICAgICBpbnQKICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5nKCk7IH0KCiAgICAgIGJvb2wKICAgICAg YWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3 YXlzX25vY29udigpOyB9CgogICAgICBpbnQKICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUm IF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBl eHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50 CiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X21heF9sZW5ndGgoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19j b2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChf X3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uo KSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0 YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJu X3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAg ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg cmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUq IF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlw ZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9f aW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYg X19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSog X190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7 CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAw OwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJv dygpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90 eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4 dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs IGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKSA9IDA7CiAgICB9OwoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUg X1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQKICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFj dF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKCiAg ICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9J bnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwog ICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjpp ZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAg ICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4g KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0 KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4 dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQs IF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu VCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJu VCwgX19lbmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0lu dGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0 eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJu VCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAg dHlwZWRlZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFp dHM6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0cyBf X2VuY190eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK ICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJh Y3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAg ICAgeyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fZW5jX3R5cGUqIF9fZW5jLCBz aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5f dHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAgcHJv dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFs IHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5 cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUq IF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYg X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQo c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAg ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19m cm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50 ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJu X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5j b2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5 c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVu Z3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAg ICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAg ICBsb2NhbGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRz Pjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVD4KICAgIGlubGluZSBzaXplX3QKICAg IF9faWNvbnZfYWRhcHRvcihzaXplX3QoKmljb252X2Z1bmMpKGljb252X3QsIF9ULCBzaXplX3Qq LCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGljb252X3QgY2QsIGNoYXIq KiBpbmJ1Ziwgc2l6ZV90KiBpbmJ5dGVzbGVmdCwKICAgICAgICAgICAgICAgICAgICBjaGFyKiog b3V0YnVmLCBzaXplX3QqIG91dGJ5dGVzbGVmdCkKICAgIHsKICAgICAgcmV0dXJuIGljb252X2Z1 bmMoY2QsIChfVClpbmJ1ZiwgaW5ieXRlc2xlZnQsIG91dGJ1Ziwgb3V0Ynl0ZXNsZWZ0KTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAg Y29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2Vu Y190cmFpdHM+OjoKICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5f dHlwZSogX19mcm9tLAogICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgIGV4dGVybl90eXBlKiBf X3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3Rv X25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAo X19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBl OjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBf X2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9vdXRfZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qg c2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKSAvIHNpemVvZihjaGFyKTsK ICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19m cm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihleHRlcm5f dHlwZSkgLyBzaXplb2YoY2hhcik7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlw bGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRl cnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAg ICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2ludF9ib20gPSBfX3N0YXRl Ll9NX2dldF9pbnRlcm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2ludF9ib20pCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsK ICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxpbnRlcm5f dHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludGVybl90eXBlKSAqIChfX3NpemUgKyAx KSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8aW50ZXJuX3R5cGU+ KF9faW50X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8aW50ZXJuX3R5cGU+Ojpjb3B5 KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSBy ZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0g X19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludGVy bl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2Zyb20pOwogICAg ICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAg ICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19j ZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9f Y3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6 ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRl cnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9f dG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAg ICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9t X2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJv bV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwog ICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBl Kj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jh c2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46 OgogICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywK ICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9f bmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChf X3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6 Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9f ZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNp emVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSkgLyBzaXplb2YoY2hhcik7CiAg ICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsK CgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7 CiAgICAgICAgICBzaXplX3QgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCpfX2Rlc2Ms IF9fbnVsbCwgX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmX19jdG8sICZfX3RsZW4pOwoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8 ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgaWYgKF9fdGxlbiA9PSBfX3RtdWx0 aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pKQogICAgICAgICAgICAgICAgX19yZXQgPSBub2NvbnY7 CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190bGVuID09IDApCiAgICAgICAgICAgICAgICBfX3Jl dCA9IG9rOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlh bDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JldCA9IGVycm9y OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAog ICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9faW4o c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAg IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJv bV9uZXh0LAogICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu ZCwKICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICBy ZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAg IHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7 CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5f ZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9m KGV4dGVybl90eXBlKSAvIHNpemVvZihjaGFyKTsKICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBf X2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVf dCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSkgLyBzaXplb2YoY2hhcik7CiAgICAg ICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoK ICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAg ICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAg ICAgICAgIGludCBfX2V4dF9ib20gPSBfX3N0YXRlLl9NX2dldF9leHRlcm5hbF9ib20oKTsKICAg ICAgICAgIGlmIChfX2V4dF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3Qg X19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBleHRlcm5fdHlwZSog X19jZml4ZWQgPSBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6 ZW9mKGV4dGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVk WzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGU+KF9fZXh0X2JvbSk7CiAgICAgICAgICAgICAg Y2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3Np emUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2Nm aXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19k ZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9f ZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2Fz dDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJw cmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252 X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4pOwogICAgICAgICAgICB9 CgoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlw ZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8 aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAgICAg ICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZmxl biA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxj b25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3RvX25leHQg PSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgICAg ICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf X2VuY190cmFpdHM+OjoKICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1 cm4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+ CiAgICBib29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6 CiAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gZmFsc2U7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAg aW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBk b19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAg ICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0 CiAgICB7IHJldHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVfdD4oX19lbmQgLSBfX2Zy b20pKTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJu VD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46 OgogICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIDE7IH0KCgoK CiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+CiAg ICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgaW50ZXJuX3R5cGU7CiAgICAg IHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVf dHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg IGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh bAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0 YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAg ICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zy b21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190 b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4 dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwg ZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAg ICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwK ICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90 eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5f dHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25z dDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsK CiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3co KTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwg Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90 eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg IGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAgdGVtcGxhdGU8PgogICAg Y2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBfX2Nv ZGVjdnRfYWJzdHJhY3RfYmFzZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAgICBw dWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg Y2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCgog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQo c2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+ Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUm IF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBp bnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAg ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs IHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAg ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAg ICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJl c3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAgICAgICAgICAgY29uc3Qg ZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsCiAgICAg ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgaW50 ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGludGVy bl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRvX2Vu Y29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgYm9vbCBkb19hbHdh eXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRvX2xl bmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg ICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29u c3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3co KTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl cm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJsaWMg Y29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CiAg ICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19y ZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19y ZWZzKSB7IH0KICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9ieW5h bWUoKSB7IH0KICAgIH07CiMgNDE2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19nZXQ7CgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX0Zvcm1hdF9jYWNoZQogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJh aXRzPF9DaGFyVD4gdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy VD4gc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVf dHlwZSBzaXplX3R5cGU7CgoKICAgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgICAgZnJpZW5kIGNsYXNz IF9OdW1lcmljX2dldDsKICAgICAgZnJpZW5kIGNsYXNzIG51bV9nZXQ8X0NoYXJUPjsKICAgICAg ZnJpZW5kIGNsYXNzIG51bV9wdXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0 PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9nZXQ8X0NoYXJUPjsKICAgICAgZnJp ZW5kIGNsYXNzIHRpbWVfcHV0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9wdXQ8 X0NoYXJUPjsKCgoKCiAgICAgIHN0YXRpYyBpbnQgX1NfcHdvcmRfaXg7CgoKCiAgICAgIGJvb2wg X01fdmFsaWQ7CgoKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2xpdGVyYWxzW107CgoKCgog ICAgICBlbnVtCiAgICAgIHsKICAgICAgICBfU19taW51cywKICAgICAgICBfU19wbHVzLAogICAg ICAgIF9TX3gsCiAgICAgICAgX1NfWCwKICAgICAgICBfU19kaWdpdHMsCiAgICAgICAgX1NfZGln aXRzX2VuZCA9IF9TX2RpZ2l0cyArIDE2LAogICAgICAgIF9TX3VkaWdpdHMgPSBfU19kaWdpdHNf ZW5kLAogICAgICAgIF9TX3VkaWdpdHNfZW5kID0gX1NfdWRpZ2l0cyArIDE2LAogICAgICAgIF9T X2VlID0gX1NfZGlnaXRzICsgMTQsCiAgICAgICAgX1NfRWUgPSBfU191ZGlnaXRzICsgMTQKICAg ICAgfTsKCgoKCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwoKCgoKCiAgICAgIGNo YXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwoKCgogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFt ZTsKICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKCgogICAgICBib29sIF9NX3VzZV9n cm91cGluZzsKCgoKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwoKICAgICAgX0Zvcm1hdF9jYWNo ZSgpOwoKICAgICAgfl9Gb3JtYXRfY2FjaGUoKSB0aHJvdygpIHsgfQoKCgoKICAgICAgc3RhdGlj IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioKICAgICAgX1NfZ2V0KGlvc19iYXNlJiBfX2lvcyk7Cgog ICAgICB2b2lkCiAgICAgIF9NX3BvcHVsYXRlKGlvc19iYXNlJik7CgogICAgICBzdGF0aWMgdm9p ZAogICAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldmVudCwgaW9zX2Jhc2UmIF9f aW9zLCBpbnQgX19peCkgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGludCBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX3B3b3JkX2l4OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBjaGFyIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6 CiAgICBfU19saXRlcmFsc1tdID0gIi0reFgwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OUFCQ0RF RiI7CgogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsK CiAgIHRlbXBsYXRlPD4gX0Zvcm1hdF9jYWNoZTx3Y2hhcl90Pjo6X0Zvcm1hdF9jYWNoZSgpOwoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFz cyBfTnVtZXJpY19nZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCgogICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyBu dW1fZ2V0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+ CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0OwogICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVu ZCBjbGFzcyBudW1fcHV0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUg X0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX3B1dDsKICAgICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlf cHV0OwoKICAgIHByaXZhdGU6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9OdW1lcmljX2dldCgpIHsg fQoKICAgICAgdmlydHVhbAogICAgICB+X051bWVyaWNfZ2V0KCkgeyB9CgogICAgICBpdGVyX3R5 cGUKICAgICAgX01fZ2V0X2RpZ2l0cyhpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kKSBj b25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4KICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0 ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNf dHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAg bnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9Cgog ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29s JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwg X19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0 ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlw ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QK ICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv bmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1 cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90 eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBf X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBj b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp OyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBf X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dl dChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZv aWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywg X19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7 IH0KCgoKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3QoaXRlcl90eXBlIF9fYmVnLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLAogICAgICAgICAgICAgICAgIGludCYgX19iYXNl LCBib29sIF9fZnAgPSB0cnVlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0 ZSYsIGJvb2wmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBzaG9y dCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBpbnQmKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldCAoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAg ICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JikgY29uc3Q7CiAgICAgIHZpcnR1 YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2Um LAogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYp IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwg aXRlcl90eXBlLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs IGlvc19iYXNlJiwKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBk b3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVy X3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAg ICAgICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0lu SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtX2dldDxjaGFyLCBpc3Ry ZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46OgogICAgX01fZXh0cmFjdChpc3RyZWFtYnVmX2l0ZXJh dG9yPGNoYXI+IF9fYmVnLAogICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCBjaGFyKiBfX3h0cmMsCiAgICAgICAgICAgICAgIGludCYgX19iYXNlLCBib29sIF9f ZnApIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0 ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19wdXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAg IHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX051bWVyaWNfcHV0KCkgeyB9CgogICAg ICB2aXJ0dWFsCiAgICAgIH5fTnVtZXJpY19wdXQoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVi bGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0 aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9f cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAg ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBi b29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um IF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg ICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19m LCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBf X3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw ZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7 IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlw ZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmls bCwgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2Zp bGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9z X2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikg Y29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hh cl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyBy ZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIHZpcnR1YWwKICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJv b2wgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy X3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19m aWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg ICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVk IGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0 KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25z dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19i YXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90 eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBudW1fcHV0 PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg Y2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu ZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg cHJpdmF0ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlw ZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAgICAgIHN0cmlu Z190eXBlIF9NX3RydWVuYW1lOwogICAgICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5hbWU7CgogICAg cHVibGljOgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkg OiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7 IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXpl X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFs aXplX251bXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3Bv aW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBj aGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3Ro b3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAg ICAgeyByZXR1cm4gZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJ1 ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBkb190cnVlbmFtZSgpOyB9CgogICAgICBzdHJp bmdfdHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBkb19mYWxzZW5h bWUoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3QoKSB7 IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25z dAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJf dHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhv dXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBj b25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdf dHlwZQogICAgICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1l OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5p dGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46 OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBudW1wdW5jdDxf Q2hhclQ+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgKQogICAgewoKICAgIH0K CiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVf bnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBu dW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xv Yyk7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3RfYnlu YW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9j X2xvY2FsZV9udW1wdW5jdDsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAg ICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90 IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKICAg ICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7CiAgICAg ICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9udW1wdW5jdCk7CiAgICAgIH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0X2J5bmFtZSgpCiAg ICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCk7IH0KICAgIH07 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlIDogcHVibGlj IGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0 ZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp bnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkx LAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xv MiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cmFuc2Zvcm0oY29uc3QgX0No YXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsgfQoKICAgICAgbG9uZwogICAgICBoYXNoKGNvbnN0 IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9CgogIHByb3RlY3RlZDoKICAgICAgfmNvbGxhdGUo KSB7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBf X2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5n X3R5cGUKICAgICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJU KiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9D aGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgog IHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6ZG9fY29tcGFyZShjb25zdCBj aGFyKiBfX2xvMSwgY29uc3QgY2hhciogX19oaTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqIF9fbG8yLCBjb25zdCBjaGFyKiBfX2hpMikgY29uc3Q7CgogIHRlbXBs YXRlPD4KICAgIHN0cmluZwogICAgY29sbGF0ZTxjaGFyPjo6ZG9fdHJhbnNmb3JtKGNvbnN0IGNo YXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBsb25n CiAgICBjb2xsYXRlPGNoYXI+Ojpkb19oYXNoKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIq IF9faGkpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2NoYXJfdD46 OmRvX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCogX19sbzEsIGNvbnN0IHdjaGFyX3QqIF9faGkxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiBfX2xvMiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogX19oaTIpIGNvbnN0 OwoKICB0ZW1wbGF0ZTw+CiAgICB3c3RyaW5nCiAgICBjb2xsYXRlPHdjaGFyX3Q+Ojpkb190cmFu c2Zvcm0oY29uc3Qgd2NoYXJfdCogX19sbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgbG9uZwog ICAgY29sbGF0ZTx3Y2hhcl90Pjo6ZG9faGFzaChjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3 Y2hhcl90KiBfX2hpKSBjb25zdDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs YXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0NoYXJUPgogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0 ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6 CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1w bGF0ZTw+CiAgICBjb2xsYXRlX2J5bmFtZTxjaGFyPjo6Y29sbGF0ZV9ieW5hbWUoY29uc3QgY2hh ciosIHNpemVfdCBfX3JlZnMpOwoKICB0ZW1wbGF0ZTw+CiAgICBjb2xsYXRlX2J5bmFtZTx3Y2hh cl90Pjo6Y29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOwoKCiAgY2xh c3MgdGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIs IGRteSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFj ZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0 YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90 IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSwgX01fZGF5bmFtZXMo MCksIF9NX21vbnRobmFtZXMoMCkgeyB9CgogICAgICBkYXRlb3JkZXIKICAgICAgZGF0ZV9vcmRl cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2RhdGVfb3JkZXIoKTsgfQoKICAgICAgaXRlcl90 eXBlCiAgICAgIGdldF90aW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9fZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190 KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfdGltZShfX3MsIF9fZW5kLCBfX2YsIF9fZXJy LCBfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fcywg aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF9kYXRl KF9fcywgX19lbmQsIF9fZiwgX19lcnIsIF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXRfd2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2Ys CiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29u c3QKICAgICAgeyByZXR1cm4gZG9fZ2V0X3dlZWtkYXkoX19zLF9fZW5kLF9fZixfX2VycixfX3Qp OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRf bW9udGhuYW1lKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQoKICAgICAgaXRlcl90eXBlCiAg ICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f ZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25z dAogICAgICB7IHJldHVybiBkb19nZXRfeWVhcihfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkKICAgICAgewog ICAgICAgIGRlbGV0ZSBbXSBfTV9tb250aG5hbWVzOwogICAgICAgIGRlbGV0ZSBbXSBfTV9kYXlu YW1lczsKICAgICAgfQoKICAgICAgdmlydHVhbCBkYXRlb3JkZXIKICAgICAgZG9fZGF0ZV9vcmRl cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRpbWVfYmFzZTo6eW1kOyB9CgogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBp b3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLAogICAgICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAgICB7IHJldHVy biBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5KGl0 ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0OwoKICAgICAgdmly dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK ICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLAog ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkgY29uc3QKICAgICAg eyByZXR1cm4gX19zOyB9CgogICAgICBtdXRhYmxlIGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9k YXluYW1lczsKICAgICAgbXV0YWJsZSBiYXNpY19zdHJpbmc8X0NoYXJUPiogX01fbW9udGhuYW1l czsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5 bmFtZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAgICBwdWJsaWM6 CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0 ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFy Kiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPihf X3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9i eW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJs aWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9j YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMg PSAwKSA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAg IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgY29u c3QgdG0qICwgY29uc3QgX0NoYXJUKiAsCiAgICAgICAgICBjb25zdCBfQ2hhclQqICkgY29uc3QK ICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw ZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBjb25zdCB0 bSogX190bWIsIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2RpZmllciA9IDApIGNvbnN0CiAgICAg IHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3RtYiwgX19mb3JtYXQsIF9fbW9k aWZpZXIpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgp IHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms IGlvc19iYXNlJiwgY2hhcl90eXBlLCBjb25zdCB0bSogLAogICAgICAgICAgICAgY2hhciAsIGNo YXIgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9D aGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX3B1dDxf Q2hhclQsIF9PdXRJdGVyPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGlj aXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkK ICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPiAoX19yZWZzKSB7IH0KCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQogICAgfTsK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNz IG1vbmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlw ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNp emVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJf dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50 bCwKICAgICAgICAgIGlvc19iYXNlJiBfX2YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u ZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5k LCBfX2ludGwsIF9fZiwgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg Z2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNl JiBfX2YsCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYg X19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5kLCBfX2ludGws IF9fZiwgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog ICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n ZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAsCiAgICAgICAgICAgICBpb3NfYmFz ZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAgICAgbG9uZyBkb3VibGUmICkgY29u c3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk b19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAsCiAgICAgICAgICAgICBpb3Nf YmFzZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAgICAgc3RyaW5nX3R5cGUmICkg Y29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQs IF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlcj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAg ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf T3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykg eyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRs LCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUg X191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2YsIF9f ZmlsbCwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxs LCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1 dChfX3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoK ICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCwgaW9zX2Jhc2UmICwgY2hhcl90 eXBlICwKICAgICAgICAgICAgIGxvbmcgZG91YmxlICkgY29uc3QKICAgICAgeyByZXR1cm4gX19z OyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg Ym9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190 eXBlJiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0 PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgc3RydWN0IG1vbmV5X2Jhc2UKICB7CiAgICBlbnVt IHBhcnQgeyBub25lLCBzcGFjZSwgc3ltYm9sLCBzaWduLCB2YWx1ZSB9OwogICAgc3RydWN0IHBh dHRlcm4geyBjaGFyIGZpZWxkWzRdOyB9OwoKICAgIHN0YXRpYyBjb25zdCBwYXR0ZXJuIF9TX2Rl ZmF1bHRfcGF0dGVybjsKCgoKICAgIHN0YXRpYyBwYXR0ZXJuCiAgICBfU19jb25zdHJ1Y3RfcGF0 dGVybihjaGFyIF9fcHJlY2VlZHMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pOwogIH07Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVu Y3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jhc2UKICAgIHsKICAgIHB1 YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlu dGwgPSBfSW50bDsKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAg ICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2Fu ZHNfc2VwOwogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAgICAgIHN0cmluZ190eXBlIF9NX2N1 cnJfc3ltYm9sOwogICAgICBzdHJpbmdfdHlwZSBfTV9wb3NpdGl2ZV9zaWduOwogICAgICBzdHJp bmdfdHlwZSBfTV9uZWdhdGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19kaWdpdHM7CiAgICAg IHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdfZm9ybWF0OwoKICAg IHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0g MCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVu Y3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xv Yywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01f aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBk ZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2lu dCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAg IGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQoK ICAgICAgc3RyaW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBwb3Np dGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigp OyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fbmVnYXRpdmVfc2lnbigpOyB9CgogICAgICBpbnQKICAgICAgZnJh Y19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mcmFjX2RpZ2l0cygpOyB9 CgogICAgICBwYXR0ZXJuCiAgICAgIHBvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgbmVnX2Zvcm1hdCgp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ19mb3JtYXQoKTsgfQoKICAgIHByb3Rl Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdCgpIHsgfQoKICAgICAgdmlydHVh bCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Ro b3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9Cgog ICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2N1 cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0KCiAgICAg IHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9NX3Bvc2l0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUK ICAgICAgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ2F0aXZl X3NpZ247IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2ZyYWNfZGlnaXRzKCkgY29uc3QK ICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgog ICAgICBkb19wb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zX2Zvcm1hdDsg fQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX25lZ19mb3JtYXQoKSBjb25zdAogICAg ICB7IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9CgoKICAgICAgdm9pZAogICAgICBfTV9pbml0aWFs aXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgbG9jYWxlOjppZCBtb25leXB1 bmN0PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29s IF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppbnRsOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICB2b2lkCiAgICBtb25l eXB1bmN0PF9DaGFyVCwgX0ludGw+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2Fs ZSApCiAgICB7CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNo YXI+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1w bGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX21v bmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlw dW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21v bmV5cHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGludGwgPSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVu Y3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9u ZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVf Y19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFs aXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBf U19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5 cHVuY3RfYnluYW1lPF9DaGFyVCwgX0ludGw+OjppbnRsOwoKCiAgc3RydWN0IG1lc3NhZ2VzX2Jh c2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1Ymxp YyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2Fn ZXMoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAg Y2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBs b2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJldHVybiBkb19vcGVuKF9fcywgX19sb2MpOyB9 CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50 IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv X2dldChfX2MsX19zZXQsX19tc2dpZCxfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNh dGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiBkb19jbG9zZShfX2MpOyB9CgogICAgcHJv dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpIHsgfQoKCgogICAgICB2aXJ0 dWFsIGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25z dCBsb2NhbGUmKSBjb25zdAogICAgICB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmlu Z190eXBlCiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCAsIGNvbnN0IHN0cmluZ190eXBl JiBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0KCiAgICAgIHZpcnR1 YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25zdCB7IH0KICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6 IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp bmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFy Kiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg ICB+bWVzc2FnZXNfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBtZXNzYWdl c19ieW5hbWU8Y2hhcj46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVm cyk7CgogIHRlbXBsYXRlPD4KICAgIG1lc3NhZ2VzX2J5bmFtZTx3Y2hhcl90Pjo6bWVzc2FnZXNf YnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzKTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25z dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywgY29uc3QgbG9j YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp LmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg X19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhj dHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf YmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s aW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6bG93 ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFscGhhLCBf X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp c2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5j dChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0 PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9D aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5 cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJU IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCBfX2Ms IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNv bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+ KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg aW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihf X2MpOyB9Cn0KIyAzNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz aWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFz ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMg dHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsK ICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry ZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9p dGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0No YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9D aGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByaXZhdGU6CiAg ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBjaGFyX3R5 cGUgX01fZmlsbDsKICAgICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CgogICAgcHJvdGVjdGVkOgog ICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwogICAg ICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUq IF9NX2lvc19mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoK ICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAg IGlubGluZSBjb25zdCBfX2N0eXBlX3R5cGUqCiAgICAgIF9NX2dldF9mY3R5cGVfaW9zKHZvaWQp CiAgICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGU7IH0KCiAgICAgIG9wZXJhdG9yIHZvaWQqKCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNf aW9zKj4odGhpcyk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsgfQoKICAgICAgaW5saW5lIGlvc3RhdGUKICAg ICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsgfQoK ICAgICAgaW5saW5lIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCkK ICAgICAgewogICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQogICAgICAgICAgX01fc3RyZWFtYnVm X3N0YXRlID0gX19zdGF0ZTsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3Rh dGUgPSBfX3N0YXRlIHwgYmFkYml0OwogICAgICAgIGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhp cy0+ZXhjZXB0aW9ucygpKSkKICAgICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lv czo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICB9CgogICAgICBpbmxp bmUgdm9pZAogICAgICBzZXRzdGF0ZShpb3N0YXRlIF9fc3RhdGUpCiAgICAgIHsgdGhpcy0+Y2xl YXIodGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAg IGdvb2QoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKICAg ICAgaW5saW5lIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJk c3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgaW5saW5lIGJvb2wKICAgICAgZmFpbCgp IGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJp dCkpICE9IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsg cmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBp b3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRp b247IH0KCiAgICAgIGlubGluZSB2b2lkCiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2Vw dCkKICAgICAgewogICAgICAgIF9NX2V4Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMt PmNsZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNpdAogICAg ICBiYXNpY19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpIDogaW9z X2Jhc2UoKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAg fmJhc2ljX2lvcygpIHsgfQoKCiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoKICAgICAg aW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9 IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgaW5saW5lIGJh c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz4qCiAgICAgIHJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBf X3NiKTsKCiAgICAgIGJhc2ljX2lvcyYKICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9f cmhzKTsKCiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX2ZpbGw7IH0KCiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFy X3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IF9NX2ZpbGw7CiAg ICAgICAgX01fZmlsbCA9IF9fY2g7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKICAg ICAgbG9jYWxlCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgY2hhcgog ICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICBj aGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCiAg ICAgIGJhc2ljX2lvcygpIDogaW9zX2Jhc2UoKQogICAgICB7IH0KCiAgICAgIHZvaWQKICAgICAg aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBib29s CiAgICAgIF9NX2NoZWNrX2ZhY2V0KGNvbnN0IGxvY2FsZTo6ZmFjZXQqIF9fZikKICAgICAgewog ICAgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKICAgICAgICBpZiAoX19mKQogICAgICAgICAgX19y ZXQgPSB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAg ICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFj ZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvbG9jYWwvZ2Nj LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDEgMwojIDMzICIvdXNyL2xv Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MudGNjIiAzCm5hbWVzcGFj ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgYmFzaWNfaW9zPF9DaGFyVCwg X1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQog ICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9z dHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIHRoaXMtPmNsZWFyKCk7 CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQog ICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9fcmhzLl9NX3dvcmRfbGltaXQgPD0g X1NfbG9jYWxfd29yZHMpID8KICAgICAgICBfTV93b3JkX2FycmF5IDogbmV3IF9Xb3Jkc1tfX3Jo cy5fTV93b3JkX2xpbWl0XTsKIyA2MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz L2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhz Ll9NX2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVy ZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChf TV93b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkczsKICAg ICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9IF9fY2I7CiAg ICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfbGltaXQ7ICsrX19pKQog ICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRzW19faV07CiAgICAgIGlmIChfTV93 b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkczsKICAgICAg X01fd29yZHMgPSBfX3dvcmRzOwogICAgICBfTV93b3JkX2xpbWl0ID0gX19yaHMuX01fd29yZF9s aW1pdDsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOwogICAgICB0aGlzLT53aWR0 aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigp KTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsKICAgICAgdGhpcy0+ZmlsbChfX3Jocy5m aWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOwoKICAg ICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg Y2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19j LCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZS0+bmFycm93 KF9fYywgX19kZmF1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OndpZGVu KGNoYXIgX19jKSBjb25zdAogICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZS0+d2lkZW4oX19jKTsg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9j YWxlCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBf X2xvYykKICAgIHsKICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9z X2Jhc2U6OmltYnVlKF9fbG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAg aWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShf X2xvYyk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1Ry YWl0cz46OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7 CgogICAgICBpb3NfYmFzZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9z X2xvY2FsZSk7CiAgICAgIF9NX3RpZSA9IDA7CiAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbign ICcpOwogICAgICBfTV9leGNlcHRpb24gPSBnb29kYml0OwogICAgICBfTV9zdHJlYW1idWYgPSBf X3NiOwogICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3NiID8gZ29vZGJpdCA6IGJhZGJpdDsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg dm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Ol9NX2NhY2hlX2ZhY2V0cyhjb25z dCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBpZiAoaGFzX2ZhY2V0PF9fY3R5cGVfdHlwZT4o X19sb2MpKQogICAgICAgIF9NX2lvc19mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4o X19sb2MpOwoKICAgICAgaWYgKGhhc19mYWNldDxfX251bXB1dF90eXBlPihfX2xvYykpCiAgICAg ICAgX01fZm51bXB1dCA9ICZ1c2VfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpOwogICAgICBp ZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0g JnVzZV9mYWNldDxfX251bWdldF90eXBlPihfX2xvYyk7CiAgICB9Cn0KIyAyMTQgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyA0NyAiL3Vz ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyA0MCAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lv czxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGlu dF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAg ICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJh c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9z dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAg ICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5 cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhw bGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7 IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0o KSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoK CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAo Kl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w ZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3Ry ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikp OwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAg ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsK CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAg IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAg ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6 YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBp b3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh c3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0 aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJl dHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9Cgog ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24p CiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u Zz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBf X24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFn cygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6 b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVy YXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxz ZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19u KSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2ln bmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8 dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl cmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy YXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0 YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFtX3R5 cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg ICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbHAo KTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAgICBf X29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsK CiAgICBwcml2YXRlOgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj0oY29u c3QgX19vc3RyZWFtX3R5cGUmKTsKCiAgICAgIGJhc2ljX29zdHJlYW0oY29uc3QgX19vc3RyZWFt X3R5cGUmKTsKCiAgICB9OwoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5 CiAgICB7CgogICAgICBib29sIF9NX29rOwogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJh aXRzPiYgX01fb3M7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFz aWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpOwoKICAgICAgfnNlbnRyeSgpCiAgICAg IHsKCiAgICAgICAgaWYgKF9NX29zLmZsYWdzKCkgJiBpb3NfYmFzZTo6dW5pdGJ1ZiAmJiAhdW5j YXVnaHRfZXhjZXB0aW9uKCkpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3MucmRi dWYoKSAmJiBfTV9vcy5yZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgICAgX01f b3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAg IG9wZXJhdG9yIGJvb2woKQogICAgICB7IHJldHVybiBfTV9vazsgfQogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9f YykKICAgIHsgcmV0dXJuIChfX291dCA8PCBfX291dC53aWRlbihfX2MpKTsgfQoKCiAgdGVtcGxh dGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAg b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2Mp OwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0 LCBzaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hh cj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0 cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0 aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy YXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9DaGFy VCogX19zKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgogIHRl bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qg Y2hhciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp dHM+JiBfX291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8 PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFz cyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiAmCiAgICBvcGVyYXRv cjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCB1bnNpZ25lZCBj aGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj aGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVuZGwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gZmx1c2goX19vcy5w dXQoX19vcy53aWRlbignXG4nKSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVu ZHMoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19v cy5wdXQoX0NoYXJUKCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGZsdXNoKGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MuZmx1 c2goKTsgfQoKfQoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9vc3RyZWFtLnRjYyIgMSAzCiMgMzIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12 My9iaXRzL29zdHJlYW0udGNjIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2Mt My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMwojIDQxICIv dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMwoj IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu dGNjIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j YWxlX2ZhY2V0cy50Y2MiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY2Vycm5vLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAz CiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8u aCIgMiAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs ZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY2xvY2FsZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIg MSAzCiMgMjYgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCgojIDEgIi91c3Iv bG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIg MwoKZXh0ZXJuICJDIiB7CiMgNTIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwpzdHJ1Y3QgbGNv bnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoKCgoK CiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAq Y3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90 aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWdu OwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBm cmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3NwYWNl OwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAg Y2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBpbnRfcF9jc19w cmVjZWRlczsKCiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJl Y2VkZXM7CgogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2ln bl9wb3NuOwogIGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNsdWRlL2xvY2Fs ZS5oIiAzCn07CgoKCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGludCBfX2NhdGVnb3J5LCBfX2Nv bnN0IGNoYXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IGxjb252ICpsb2Nh bGVjb252ICh2b2lkKSB0aHJvdyAoKTsKIyAxNDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDE0MiAiL3Vzci9pbmNsdWRlL2xvY2Fs ZS5oIiAyIDMKCgoKCgoKCmV4dGVybiBfX2xvY2FsZV90IF9fbmV3bG9jYWxlIChpbnQgX19jYXRl Z29yeV9tYXNrLCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gX19sb2NhbGVf dCBfX2R1cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4g dm9pZCBfX2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMg MzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgi IDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpzZXRs b2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2Fs L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyAzOCAiL3Vz ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIg MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL3N0ZF9saW1pdHMuaCIgMSAzCiMgNDUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl L2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL3N0ZF9saW1pdHMuaCIgMwojIDEgIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv bmZpZy5oIiAxIDMKIyA0NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYt cGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0z LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0LmgiIDEgMwojIDM4ICIvdXNyL2xvY2Fs L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0LmgiIDMKIyAxICIvdXNyL2xv Y2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZmxv YXQuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9jZmxvYXQuaCIgMiAzCiMgNDcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9p Njg2LXBjLWxpbnV4LWdudS9iaXRzL3N0ZF9saW1pdHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsK CiAgICBlbnVtIGZsb2F0X3JvdW5kX3N0eWxlIHsKICAgICAgICByb3VuZF9pbmRldGVybWluYXRl ID0gLTEsCiAgICAgICAgcm91bmRfdG93YXJkX3plcm8gPSAwLAogICAgICAgIHJvdW5kX3RvX25l YXJlc3QgPSAxLAogICAgICAgIHJvdW5kX3Rvd2FyZF9pbmZpbml0eSA9IDIsCiAgICAgICAgcm91 bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICAgIH07CgogICAgZW51bSBmbG9hdF9kZW5vcm1f c3R5bGUgewogICAgICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICAgICAgZGVub3Jt X2Fic2VudCA9IDAsCiAgICAgICAgZGVub3JtX3ByZXNlbnQgPSAxCiAgICB9OwoKICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IG51bWVyaWNfbGltaXRzIHsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgX1RwIG1p bigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRp YyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0czEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxz ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg aW50IHJhZGl4ID0gMDsKCiAgICAgICAgc3RhdGljIF9UcCBlcHNpbG9uKCkgdGhyb3coKSB7IHJl dHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCByb3VuZF9lcnJv cigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAgICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt aW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg PSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgX1RwIGlu ZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAg c3RhdGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4o MCk7IH0KICAgICAgICBzdGF0aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0dXJu IHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0 aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf Ym91bmRlZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZh bHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog ICAgfTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19pbmZpbml0eSgp OwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfcXVpZXRfTmFOKCk7CiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19zaWduYWxpbmdfTmFOKCk7CiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19kZW5vcm1fbWluKCk7CgogICAg dGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4gewogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGJvb2wgbWlu KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgc3RhdGljIGJvb2wg bWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMgPSA4OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAy OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK ICAgICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7 IH0KICAgICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJl dHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAg ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMg Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9 IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h YnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7 CgogICAgICAgIHN0YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CiAgICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkg dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CiAgICAgICAg c3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxib29sPigwKTsgfQogICAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJv dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g PSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGlj IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87 CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+IHsKICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0 YXRpYyBjaGFyIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0KICAgICAg ICBzdGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0czEwID0gMjsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICAg IHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkK ICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9 IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIGNoYXIg cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDAp OyB9CiAgICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBjaGFyIGRlbm9y bV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0K CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu ZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1p dHM8c2lnbmVkIGNoYXI+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl ZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAg ICAgeyByZXR1cm4gKC0xMjgpOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1heCgpIHRo cm93KCkKICAgICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMgPSA3OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh Y3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0 YXRpYyBzaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0K ICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7 CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v cm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh bHNlOwoKICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGlj IHNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFs aW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hh cj4oMCk7IH0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkK ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBz dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf emVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWdu ZWQgY2hhcj4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1 ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAg ICAgICAgeyByZXR1cm4gMjU1OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g ODsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVu c2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAg ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyBy ZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f YWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl OwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRp YyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDAp OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy b3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s aW1pdHM8d2NoYXJfdD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVk ID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHdjaGFyX3QgbWluKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuICgtMjE0NzQ4MzY0N2wgLSAxbCk7IH0KICAgICAgICBzdGF0aWMgd2NoYXJfdCBtYXgo KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKDIxNDc0ODM2NDdsKTsgfQoKICAgICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz MTAgPSA5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg PSAyOwogICAgICAgIHN0YXRpYyB3Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy ZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt ID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv c3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHdjaGFyX3QgaW5maW5pdHkoKSB0aHJvdygpCiAg ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8d2NoYXJfdD4oMCk7IH0KICAgICAgICBzdGF0aWMg d2NoYXJfdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 d2NoYXJfdD4oMCk7IH0KICAgICAgICBzdGF0aWMgd2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhy b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHdjaGFyX3Q+KDApOyB9CiAgICAgICAg c3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDx3Y2hhcl90PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1 NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0 ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxzaG9ydD4gewogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRo cm93KCkKICAgICAgICB7IHJldHVybiAoLTMyNzY3LTEpOyB9CiAgICAgICAgc3RhdGljIHNob3J0 IG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0cyA9IDE1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg PSA0OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy OwogICAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu IDA7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7 CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v cm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh bHNlOwoKICAgICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHNob3J0IHF1aWV0 X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0K ICAgICAgICBzdGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgZGVub3Jt X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0K CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu ZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1p dHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs aXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygp CiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgo KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gNjU1MzU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMgPSAxNjsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAg ICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy ZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRo cm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g MDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x dWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0 eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o MCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAg IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyB1 bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRl bXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGludD4gewogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGludCBtaW4oKSB0 aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3LTEpOyB9CiAgICAgICAgc3RhdGlj IGludCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0NzsgfQoKICAgICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzMTAgPSA5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg cmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7 IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg ICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p bmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9 IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgcXVpZXRf TmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAg ICAgICBzdGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRo cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy bzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQg aW50PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVy biAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gKDIxNDc0ODM2NDcgKiAyVSArIDEpOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gMzI7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAg ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVy biAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkK ICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9 IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJv dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAg ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWdu ZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVub3Jt X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+ KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh cHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9 IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmlj X2xpbWl0czxsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQg PSB0cnVlOwoKICAgICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1 cm4gKC0yMTQ3NDgzNjQ3TC0xKTsgfQogICAgICAgIHN0YXRpYyBsb25nIG1heCgpIHRocm93KCkK ICAgICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf ZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAg IHN0YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAg ICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7 IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3Rh dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg ICAgc3RhdGljIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygp CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMg bG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAg ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv dW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNl OwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9 OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+IHsK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAg IHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9 CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0 dXJuICgyMTQ3NDgzNjQ3TCAqIDJVTCArIDEpOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzID0gMzI7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf ZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAg IHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g MDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt ID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv c3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJv dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAg ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv cmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgbG9uZyBsb25nIG1pbigpIHRocm93 KCkKICAgICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xKTsgfQogICAgICAg IHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDkyMjMzNzIw MzY4NTQ3NzU4MDdMTDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDYzOwog ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu dGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgbG9uZyBs b25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRp YyBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg PSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBz dGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05h TigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9 CiAgICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9u ZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 bG9uZyBsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0 cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf YmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3Ry dWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0 YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICg5 MjIzMzcyMDM2ODU0Nzc1ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMgPSA2NDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAg ICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9l cnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n IGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcg cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25h bGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3Jt X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n IGxvbmc+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y ZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBu dW1lcmljX2xpbWl0czxmbG9hdD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAg ICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgbWF4KCkg dGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoKICAgICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz MTAgPSA3OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp eCA9IDI7CiAgICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy ZXR1cm4gMS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9y KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMGY7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQgPSAtMTI1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50MTAgPSAtMzc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAx Mjg7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgZmxvYXQg aW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDAp OyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgc2lnbmFs aW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7 IH0KICAgICAgICBzdGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9 IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAg IHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4gewogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGRvdWJs ZSBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7 IH0KICAgICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAx Ljc5NzY5MzEzNDg2MjMxNTdlKzMwODsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 cyA9IDUzOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj dCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0 YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAyLjIyMDQ0NjA0 OTI1MDMxMzFlLTE2OyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93 KCkKICAgICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQgPSAtMTAyMTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw ID0gLTMwNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAg ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGRvdWJsZSBpbmZp bml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9 CiAgICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFs aW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDAp OyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl ZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7Cgog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoK ICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPiB7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0 aWMgbG9uZyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQz MTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1heCgpIHRo cm93KCkKICAgICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTDsgfQoK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkg dGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQog ICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7 IHJldHVybiAxLjBMOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g LTE2MzgxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0OwogICAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h bGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5p dHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDAp OyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMg bG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVu b3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJs ZT4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s IHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0 eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKfQojIDM5ICIvdXNyL2xvY2FsL2djYy0z LjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAxIDMKIyA0MCAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRl ci5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j YWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9jY3R5cGUuaCIgMSAzCiMgNDIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0z LjAvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDEgMwojIDMzICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk ZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv ZysrLXYzL3R5cGVpbmZvIiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2 MQp7CiAgY2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1MCAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIHR5cGVf aW5mbwogIHsKICBwdWJsaWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZh dGU6CgogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBl X2luZm8oY29uc3QgdHlwZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9f bmFtZTsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9f bik6IF9fbmFtZShfX24pIHsgfQoKICBwdWJsaWM6CgogICAgY29uc3QgY2hhciogbmFtZSgpIGNv bnN0CiAgICB7IHJldHVybiBfX25hbWU7IH0KIyA4NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL3R5cGVpbmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9f YXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29s IG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9f bmFtZSA9PSBfX2FyZy5fX25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9p bmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAg cHVibGljOgoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZp cnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJv b2wgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9v YmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsK CgogICAgdmlydHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3Nf dHlwZV9pbmZvICpfX3RhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoq X19vYmpfcHRyKSBjb25zdDsKICB9OwoKICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRp b24KICB7CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ YmFkX2Nhc3QoKSB0aHJvdygpOwogIH07CgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhj ZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KICAgIHZp cnR1YWwgfmJhZF90eXBlaWQgKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDMgIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIv dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDEgMwoj IDMxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgi IDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl cHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhj ZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBf X3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Mo dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhy b3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5n ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq IF9fcyk7Cn0KIyAzMyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzYgIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQu aCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92 ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX3ZlY3Rvci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMK IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMu aCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0 ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNl cHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lk CiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2 b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRf b2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyAzNiAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMK IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNr LmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf dmVjdG9yLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNDggIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNl IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0 b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9 CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBf TV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRf b2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h bGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2Vu ZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy biBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5k ZWFsbG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVl PiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9 CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0 YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3Rl ZDoKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0 b3JhZ2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+ OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24p CiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVh bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2Nh dGUoX19wLCBfX24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3Ry dWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxv YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv Yz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVu YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNl KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFz ZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewog ICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7 CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3Jf YmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z dGFydCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0 b3I8X1RwPiA+CmNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxs b2M+CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCnByaXZhdGU6CiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNl OwogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0b3JfdHlwZTsKcHVibGljOgogIHR5 cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5 cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9fbm9ybWFs X2l0ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fbm9y bWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsK ICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5 cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRl ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjph bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICB0eXBlZGVm IHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7 CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoK cHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01f ZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Zp bmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7Cgpwcm90ZWN0ZWQ6CiAgdm9p ZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KTsKICB2 b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7CgpwdWJsaWM6CiAgaXRlcmF0 b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgY29uc3RfaXRlcmF0 b3IgYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX3N0YXJ0KTsg fQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5pc2gpOyB9CiAgY29u c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2Zpbmlz aCk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9p dGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0 CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJldmVyc2Vf aXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9 CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAog ICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4 X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9 CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShjb25z dF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHko KSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3Bl cmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29u c3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihi ZWdpbigpICsgX19uKTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNv bnN0IHsKICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9y YW5nZSgidmVjdG9yIik7CiAgfQoKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgIHsg X01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogIGNvbnN0X3JlZmVy ZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyBy ZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3Jf dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0 b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICBjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19uLCBfX2Ep CiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9f dmFsdWUpOyB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShf X24sIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmls bF9uKF9NX3N0YXJ0LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwg X0FsbG9jPiYgX194KQogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigp KQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5l bmQoKSwgX01fc3RhcnQpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg dmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jh c2UoX19hKSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9f bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv aWQgX01faW5pdGlhbGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3Ry dWVfdHlwZSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29m X3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf ZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19m YWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9N X3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShj b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUg X19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUg X19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2Fu ZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQs IF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y YWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2gg PSBfX3RtcCArIF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg KyBfX247CiAgICB9CiAgfQoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0 IF9UcCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KICB2b2lkIF9NX2Zp bGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl Z2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9k aXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxj bGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9J bnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlw ZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAg dm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y X3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNz aWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogIHJlZmVyZW5j ZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkg Y29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICoo ZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihl bmQoKSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAo X01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5p c2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl cnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9m aW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7 CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVu ZCgpKTsKICB9CiAgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgc3Rk Ojpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwg X194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9l bmRfb2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv biwgY29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVn aW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlv biA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19N X2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bv c2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRvciBp bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRp b24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBf X3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICAr K19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihf X3Bvc2l0aW9uKSk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0 SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5 cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsK ICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo KSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlz cGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9f cG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0 SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkg ewogICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBz aXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3Ms IF9fbiwgX194KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6 ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1f TV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0 ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAg ICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5p c2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAg aXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBp dGVyYXRvciBfX2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAgICBkZXN0cm95KF9f aSwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3Qp OwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf c2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAg ICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNl cnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgcmVzaXplKHNp emVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KICB2b2lk IGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxvY2F0ZV9hbmRfY29w eShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp CiAgewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewog ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9jYXRlKF9f cmVzdWx0LCBfX24pOyB0aHJvdzsgfTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy YXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9p dGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19s YXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAg IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2Nh dGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICBfTV9m aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAg fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNl cnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlu cHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog IHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9OwoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZl Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7 CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3gu YmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9B bGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxl eGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwg X0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJh dG9yIT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBf QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9U cCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1 cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sCm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2 ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29u c3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf X3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRv cj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykg ewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVu ID4gY2FwYWNpdHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2Nv cHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgZGVzdHJveShfTV9zdGFy dCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0 b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9v Zl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkg Pj0gX194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5k KCksIGJlZ2luKCkpKTsKICAgICAgZGVzdHJveShfX2ksIGVuZCgpKTsKICAgIH0KICAgIGVsc2Ug ewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQp OwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQo KSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwog IH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K dm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25z dCB2YWx1ZV90eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0 b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBf X3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxs KGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2Zp bGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFz ZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0 b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1 dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsKICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAg ICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShf X2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4g PSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwoKICBpZiAoX19sZW4gPiBj YXBhY2l0eSgpKSB7CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVu LCBfX2ZpcnN0LCBfX2xhc3QpKTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAg ICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsK ICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9 IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAg aXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCkpOwog ICAgZGVzdHJveShfX25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2Zp bmlzaC5iYXNlKCk7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJz dDsKICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBf TV9zdGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFz dCwgX01fZmluaXNoKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K dm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRp b24sIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn ZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19N X2ZpbmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3Np dGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwog ICAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5 cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xk X3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0 KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3Rh cnQpOwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0 ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaC5i YXNlKCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1 bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAg ICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVh bGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJv eShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zf c3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwog ICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdl ID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChp dGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn ZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19N X2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNo IC0gMiksCiAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpf X3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xk X3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9 IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxs b2NhdGUoX19sZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAg IHRyeSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihf TV9zdGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICAr K19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f cG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IChkZXN0 cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQs X19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9k ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9N X3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBf TV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmls bF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24g IT0gMCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkg Pj0gX19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBl IF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xk X2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAg ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmlu aXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19w b3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwo X19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVs c2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVt c19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2Fm dGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gs IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAg ZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQog ICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAg ICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9f bik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAg IGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAg X19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIF9f bmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihf X25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0g dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gpOwogICAg ICB9CiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp LCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAg ICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01f c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9f bmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsK ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAg IH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2lu c2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0 OyArK19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAr K19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9y YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19m aXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAt IF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVy ID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmlu aXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxp emVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAg X01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xk X2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFz dCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVy YXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRl cik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7 CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0 aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAg ICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlk LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVf dHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBf X29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0 YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25l d19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl ZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2Zpbmlz aCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAg ICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0 aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNh dGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9j YXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAgIGRlc3Ryb3ko X01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2Vu ZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJh c2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5k X29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0K IyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5o IiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZl Y3Rvci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2J2ZWN0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnN0YXRpYyBjb25zdCBpbnQgX19XT1JE X0JJVCA9IGludCg4KnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCnN0cnVjdCBfQml0X3JlZmVyZW5j ZSB7CiAgdW5zaWduZWQgaW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9tYXNrOwogIF9CaXRf cmVmZXJlbmNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9w KF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9w KDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISgq X01fcCAmIF9NX21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gp CiAgewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3AgJj0gfl9N X21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0o Y29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gp OyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAg ICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChj b25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMp ICYmIGJvb2woX194KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07 CgppbmxpbmUgdm9pZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195 KQp7CiAgYm9vbCBfX3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0 cnVjdCBfQml0X2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxi b29sLCBwdHJkaWZmX3Q+CnsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9N X29mZnNldDsKCiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25l ZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQgX01f YnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAg ICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9k b3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19X T1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZvaWQgX01faW5jcihwdHJk aWZmX3QgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0Owog ICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJVDsK ICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiAr IF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAo dW5zaWduZWQgaW50KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVy YXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9faS5fTV9wICYmIF9N X29mZnNldCA9PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0 X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX2kuX01fcCB8 fCAoX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01fb2Zmc2V0KTsKICB9CiAg Ym9vbCBvcGVyYXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAg ICByZXR1cm4gISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfQml0 X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9faSA8ICp0aGlzOwogIH0K ICBib29sIG9wZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsK ICAgIHJldHVybiAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9C aXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA8IF9faSk7 CiAgfQp9OwoKaW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9i YXNlJiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7CiAgcmV0dXJuIF9fV09S RF9CSVQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29m ZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFz ZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3Jl ZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CgogIF9C aXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfaXRlcmF0 b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0 b3JfYmFzZShfX3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0 dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJh dG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJh dG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01f YnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgp IHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBv cGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBf ZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZm ZXJlbmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAg fQogIGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlz ICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZm ZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAg cmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2Vf dHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4g X190bXAgLT0gX19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBl IF9faSkgeyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9y Cm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0 dXJuIF9feCArIF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9C aXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJv b2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBl ZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRl cmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0 b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0 b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRl cmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zm c2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJu IF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJh dG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwog IH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3Ig X190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAg Y29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJl dHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNv bnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVy biBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBl IF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9p dGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAt X19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlm ZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhp czsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9y LShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9 ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9w ZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kp OwogIH0KfTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3Qg X19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsg fQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xh c3MgX0J2ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxv Y190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxv Y2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1 cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgp LCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB1bnNp Z25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9h bGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQog IHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9k YXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9 CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6YWxs b2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3Ig X01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9l bmRfb2Zfc3RvcmFnZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0J2 ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAg ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg Y29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNl KGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9N X2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs b2NfdHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAg ICBfQWxsb2NfdHlwZTsKCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikK ICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEp L19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0 Ll9NX3ApCiAgICAgIF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01f cCk7CiAgfQoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmlu aXNoOwogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2Nf YmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz PGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxs b2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFp dHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1Ymxp YzoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw ZTsKCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9f YSkge30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoK fQoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rv ci5oIiAxIDMKIyAzMTggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9idmVjdG9yLmgiIDIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxs b2M+CiAgY2xhc3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4gOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxf QWxsb2M+CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogICAgdHlw ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90 eXBlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJv b2wgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsK ICAgIHR5cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgICB0eXBlZGVmIF9CaXRf aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3Rf aXRlcmF0b3I7CgogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJh dG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFz ZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90 eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9B bGxvYz46OmdldF9hbGxvY2F0b3IoKTsKICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2 ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNl PF9BbGxvYz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46 Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAg ICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90 ZWN0ZWQ6CiAgICB2b2lkIF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICB1bnNp Z25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICBfTV9lbmRfb2Zfc3RvcmFn ZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgX01fc3Rh cnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZl cmVuY2VfdHlwZShfX24pOwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9f cG9zaXRpb24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRf b2Zfc3RvcmFnZSkgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNo LCBfTV9maW5pc2ggKyAxKTsKICAgICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19N X2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBz aXplKCkgPyAyICogc2l6ZSgpIDogX19XT1JEX0JJVDsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9f cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdp bigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAqX19pKysgPSBfX3g7 CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAg ICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19s ZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJh dG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu cHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9N X2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygq X19maXJzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg ICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk X2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0gMDsKICAgICAgZGlzdGFuY2Uo X19maXJzdCwgX19sYXN0LCBfX24pOwogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGNv cHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90 YWcpIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAg ICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgICArK19fcG9zOwogICAg ICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lk IF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGlm IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgICAg IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgICBpZiAoY2FwYWNpdHkoKSAt IHNpemUoKSA+PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5k KCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICAgIGNvcHkoX19m aXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJl bmNlX3R5cGUoX19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBzaXplX3R5 cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgICAgdW5zaWduZWQg aW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgICAgaXRlcmF0b3IgX19pID0g Y29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAgIF9f aSA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBfX2kpOwogICAgICAgICAgX01fZmluaXNoID0gY29w eShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg ICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEp L19fV09SRF9CSVQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAg ICAgfQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1 cm4gX01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g X01fc3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogICAg Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogICAgcmV2 ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsg fQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICAgIHJldHVy biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAgIHJldmVyc2VfaXRlcmF0 b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICAgIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVy c2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7 IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAgc2l6ZV90eXBlIG1heF9z aXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgc2l6ZV90eXBlIGNhcGFj aXR5KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2Vu ZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0 IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShz aXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUo X19uKSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNv bnN0CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoK ICAgIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgICBpZiAo X19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X3JhbmdlX2Vycm9yKCJ2ZWN0b3I8 Ym9vbD4iKTsKICAgIH0KCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgeyBf TV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgICBjb25zdF9yZWZl cmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24p OyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogICAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9j YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8 X0FsbG9jPihfX2EpIHt9CgogICAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGJvb2wgX192YWx1ZSwK ICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo KSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAgewogICAgICBfTV9pbml0 aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us IF9fdmFsdWUgPyB+MCA6IDApOwogICAgfQoKICAgIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUg X19uKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihhbGxvY2F0b3JfdHlwZSgpKQogICAg ewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01f ZW5kX29mX3N0b3JhZ2UsIDApOwogICAgfQoKICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCkg OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX194LmdldF9hbGxvY2F0b3IoKSkgewogICAgICBfTV9p bml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks IF9NX3N0YXJ0KTsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZv aWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190 cnVlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0 Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgfQoKICAgIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRj aChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxp emVfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2ZWN0b3IoX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2 ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf aW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2lu aXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9Cgog ICAgfnZlY3RvcigpIHsgfQoKICAgIHZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194 KSB7CiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhpczsKICAgICAgaWYgKF9feC5z aXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9N X2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICAgIH0KICAgICAgY29weShfX3guYmVnaW4oKSwg X194LmVuZCgpLCBiZWdpbigpKTsKICAgICAgX01fZmluaXNoID0gYmVnaW4oKSArIGRpZmZlcmVu Y2VfdHlwZShfX3guc2l6ZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoKCgogICAg dm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19u ID4gc2l6ZSgpKSB7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFn ZSwgX194ID8gfjAgOiAwKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194 KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQo KSk7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8g fjAgOiAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wg X194KSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX194KTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2Vy PF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rp c3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIHRlbXBsYXRl IDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9f biwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7IF9NX2ZpbGxfYXNzaWduKChz aXplX3QpIF9fbiwgKGJvb2wpIF9fdmFsKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJz dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICAgIHRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsK ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1 ciwgKytfX2ZpcnN0KQogICAgICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogICAgICBpZiAoX19maXJz dCA9PSBfX2xhc3QpCiAgICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgICAgZWxzZQogICAg ICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0 ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7 CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogICAgICBpZiAoX19sZW4g PCBzaXplKCkpCiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBl bmQoKSk7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp cnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0 LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsK ICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlm IChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRf YWxsb2MoX19uKTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVuZCgpLCBpdGVy YXRvcihfX3EsIDApKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fc3RhcnQg PSBpdGVyYXRvcihfX3EsIDApOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f biArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICB9CiAgICB9CgogICAgcmVmZXJl bmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9u dCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0 dXJuICooZW5kKCkgLSAxKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJl dHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAg IGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmlu aXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gp OwogICAgfQogICAgdm9pZCBzd2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAg c3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmlu aXNoLCBfX3guX01fZmluaXNoKTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBf X3guX01fZW5kX29mX3N0b3JhZ2UpOwogICAgfQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9y IF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBf X24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9N X2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2Zpbmlz aCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBf X3gpOwogICAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxj bGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAg ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNl cnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9f cG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAg fQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0 ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50 ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2Vy dF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg IH0KCiAgICB2b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlw ZSBfX24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAo Y2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9z aXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAg ZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7 CiAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAg IGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9f bik7CiAgICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAg ICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19x LCAwKSk7CiAgICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCA9 IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAg ICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAo X19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0 ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBf X3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBfTV9maWxsX2luc2Vy dChfX3Bvc2l0aW9uLCBfX24sIF9feCk7CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1f TV9maW5pc2g7IH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAg ICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiAr IDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJu IF9fcG9zaXRpb247CiAgICB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBp dGVyYXRvciBfX2xhc3QpIHsKICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBf X2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXpl X3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3Np emUgPCBzaXplKCkpCiAgICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25l d19zaXplKSwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19z aXplIC0gc2l6ZSgpLCBfX3gpOwogICAgfQogICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKHVu c2lnbmVkIGludCogX19wID0gX01fc3RhcnQuX01fcDsgX19wICE9IF9NX2VuZF9vZl9zdG9yYWdl OyArK19fcCkKICAgICAgICAqX19wID0gfipfX3A7CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsg ZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CiAgfTsKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxv Yz4gYml0X3ZlY3RvcjsKCn0KIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyA0NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv ZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewogIHRl bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNv bnN0IGxvY2FsZSYgX19vdGhlcikKICAgIHsKICAgICAgbG9jYWxlIF9fY29weSgqdGhpcyk7CiAg ICAgIF9fY29weS5fTV9pbXBsLT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9G YWNldDo6aWQpOwogICAgICByZXR1cm4gX19jb3B5OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAg IGxvY2FsZTo6b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYg c3RkOjpjb2xsYXRlPF9DaGFyVD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0 ZV90eXBlKiBfX2Zjb2xsID0gJnVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAg ICByZXR1cm4gKF9fZmNvbGwtPmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19z MS5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBf X3MyLmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUm IF9fbG9jKQogICAgewogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9f dmVjX2ZhY2V0OwogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pbmRleDsKICAgICAg X192ZWNfZmFjZXQqIF9fZmFjZXQgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIGNv bnN0IGxvY2FsZTo6ZmFjZXQqIF9fZnAgPSAoKl9fZmFjZXQpW19faV07CiAgICAgIGlmIChfX2Zw ID09IDAgfHwgX19pID49IF9fZmFjZXQtPnNpemUoKSkKICAgICAgICBfX3Rocm93X2JhZF9jYXN0 KCk7CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mcCk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25z dCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpCiAgICB7CiAgICAgIHR5cGVkZWYgbG9jYWxlOjpfSW1w bDo6X192ZWNfZmFjZXQgX192ZWNfZmFjZXQ7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6Omlk Ll9NX2luZGV4OwogICAgICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9N X2ZhY2V0czsKICAgICAgcmV0dXJuIChfX2kgPCBfX2ZhY2V0LT5zaXplKCkgJiYgKCpfX2ZhY2V0 KVtfX2ldICE9IDApOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0 eXBlbmFtZSBfQ2hhclQ+CiAgICBfSW5JdGVyCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIg X19zLCBfSW5JdGVyIF9fZW5kLCBpbnQgX19udGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfX3RhcmdldHMsCiAgICAgICAgICAgICAgICAgICAg IGludCogX19tYXRjaGVzLCBpbnQmIF9fcmVtYWluLCBib29sJiBfX2VvZikKICAgIHsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICBfX2VvZiA9 IGZhbHNlOwogICAgICBmb3IgKGludCBfX3RpID0gMDsgX190aSA8IF9fbnRhcmdzOyArK19fdGkp CiAgICAgICAgX19tYXRjaGVzW19fdGldID0gX190aTsKICAgICAgX19yZW1haW4gPSBfX250YXJn czsKICAgICAgc2l6ZV90IF9fcG9zID0gMDsKICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBp bnQgX190aSA9IDA7CiAgICAgICAgICB3aGlsZSAoX190aSA8IF9fcmVtYWluICYmIF9fcG9zID09 IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aV1dLnNpemUoKSkKICAgICAgICAgICAgKytfX3RpOwog ICAgICAgICAgaWYgKF9fdGkgPT0gX19yZW1haW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBpZiAoX19wb3MgPT0gMCkgX19yZW1haW4gPSAwOwogICAgICAgICAgICAgIHJldHVybiBfX3M7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX3MgPT0gX19lbmQpCiAgICAgICAgICAgIF9f ZW9mID0gdHJ1ZTsKICAgICAgICAgIGJvb2wgX19tYXRjaGVkID0gZmFsc2U7CiAgICAgICAgICBm b3IgKGludCBfX3RpMiA9IDA7IF9fdGkyIDwgX19yZW1haW47ICkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fdGFyZ2V0ID0gX190YXJnZXRzW19fbWF0 Y2hlc1tfX3RpMl1dOwogICAgICAgICAgICAgIGlmIChfX3BvcyA8IF9fdGFyZ2V0LnNpemUoKSkK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fZW9mIHx8IF9fdGFyZ2V0 W19fcG9zXSAhPSAqX19zKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgIF9fbWF0Y2hlc1tfX3RpMl0gPSBfX21hdGNoZXNbLS1fX3JlbWFpbl07CiAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgIF9fbWF0Y2hlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKytf X3RpMjsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbWF0Y2hlZCkKICAgICAgICAgICAg ewogICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAg IH0KICAgICAgICAgIGZvciAoaW50IF9fdGkzID0gMDsgX190aTMgPCBfX3JlbWFpbjspCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MgPiBfX3RhcmdldHNbX19tYXRjaGVzW19f dGkzXV0uc2l6ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21hdGNo ZXNbX190aTNdID0gX19tYXRjaGVzWy0tX19yZW1haW5dOwogICAgICAgICAgICAgICAgICBjb250 aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICArK19fdGkzOwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICB3aGlsZSAoX19yZW1haW4pOwogICAgICByZXR1cm4gX19zOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFy VD46Ol9Gb3JtYXRfY2FjaGUoKQogICAgOiBfTV92YWxpZCh0cnVlKSwgX01fdXNlX2dyb3VwaW5n KGZhbHNlKQogICAgeyB9CgogIHRlbXBsYXRlPD4KICAgIF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9G b3JtYXRfY2FjaGUoKTsKCiAgdGVtcGxhdGU8PgogICAgX0Zvcm1hdF9jYWNoZTx3Y2hhcl90Pjo6 X0Zvcm1hdF9jYWNoZSgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAg ICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9NX3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQogICAg ewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYyAoKTsKICAgICAgbnVtcHVuY3Q8X0No YXJUPiBjb25zdCYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwog ICAgICBfTV90cnVlbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgX01fZmFsc2VuYW1lID0g X19ucC5mYWxzZW5hbWUoKTsKICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNhbmRz X3NlcCgpOwogICAgICBfTV9kZWNpbWFsX3BvaW50ID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CiAg ICAgIF9NX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBfTV91c2VfZ3JvdXBpbmcg PSBfTV9ncm91cGluZy5zaXplKCkgIT0gMCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsK ICAgICAgX01fdmFsaWQgPSB0cnVlOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIHZvaWQKICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6CiAgICBfU19jYWxsYmFjayhp b3NfYmFzZTo6ZXZlbnQgX19ldiwgaW9zX2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQog ICAgewogICAgICB2b2lkKiYgX19wID0gX19pb3MucHdvcmQoX19peCk7CiAgICAgIHN3aXRjaCAo X19ldikKICAgICAgICB7CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6ZXJhc2VfZXZlbnQ6CiAgICAg ICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsKICAg ICAgICAgIF9fcCA9IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIGlvc19iYXNlOjpj b3B5Zm10X2V2ZW50OgoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcCA9IG5ldyBfRm9y bWF0X2NhY2hlPF9DaGFyVD47IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9 CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIGlvc19iYXNlOjppbWJ1ZV9ldmVudDoKICAg ICAgICAgIHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+KF9fcCktPl9NX3ZhbGlk ID0gZmFsc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioKICAgIF9Gb3JtYXRfY2Fj aGU8X0NoYXJUPjo6X1NfZ2V0KGlvc19iYXNlJiBfX2lvcykKICAgIHsKICAgICAgaWYgKCFfU19w d29yZF9peCkKICAgICAgICBfU19wd29yZF9peCA9IGlvc19iYXNlOjp4YWxsb2MoKTsKICAgICAg dm9pZComIF9fcCA9IF9faW9zLnB3b3JkKF9TX3B3b3JkX2l4KTsKCgogICAgICBpZiAoX19wID09 IDApCiAgICAgICAgewogICAgICAgICAgYXV0b19wdHI8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+ID4g X19hcChuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KTsKICAgICAgICAgIF9faW9zLnJlZ2lzdGVy X2NhbGxiYWNrKCZfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX2NhbGxiYWNrLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1NfcHdvcmRfaXgpOwogICAgICAgICAgX19wID0gX19h cC5yZWxlYXNlKCk7CiAgICAgICAgfQogICAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fbmNw ID0gc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsKICAgICAgaWYgKCFf X25jcC0+X01fdmFsaWQpCiAgICAgICAgX19uY3AtPl9NX3BvcHVsYXRlKF9faW9zKTsKCiAgICAg IHJldHVybiBfX25jcDsKICAgIH0KIyAyNTAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjoKICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYgLAogICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCBjaGFyKiAsCiAgICAgICAgICAgICAgIGludCYg LCBib29sICkgY29uc3QKICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51 bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3Qo aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2JlZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1 Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwKICAgICAg ICAgICAgICAgYm9vbCBfX2ZwKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikg Y29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxw aGEpKQogICAgICAgIHsKCgoKCgoKICAgICAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsK ICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwg X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgICAgIGNoYXIqIF9f c2FuaXR5OwogICAgICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgICAgICBs b25nIF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgICAgIGlm ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgJiYgX19sIDw9IDEK ICAgICAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcg JiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgICAgICBfX3YgPSBfX2w7CiAg ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg ICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBfRm9ybWF0X2Nh Y2hlPGNoYXJfdHlwZT4gX19mY2FjaGVfdHlwZTsKICAgICAgICAgIF9fZmNhY2hlX3R5cGUqIF9f Zm10ID0gX19mY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW8pOwogICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0 IGNoYXJfdHlwZSogX19mYWxzZSA9IF9fZm10LT5fTV9mYWxzZW5hbWUuY19zdHIoKTsKICAgICAg ICAgIGNvbnN0IHNpemVfdCBfX3RydWVsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX190cnVl KSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6 Omxlbmd0aChfX2ZhbHNlKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19wb3MgPSAwOyBf X2JlZyAhPSBfX2VuZDsgKytfX3BvcykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJf dHlwZSBfX2MgPSAqX19iZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX2MgPT0g X19mYWxzZVtfX3Bvc107CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1 ZVtfX3Bvc107CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg IGVsc2UgaWYgKF9fdGVzdGYgJiYgX19wb3MgPT0gX19mYWxzZWxlbikKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX3BvcyA9 PSBfX3RydWVsZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9 CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjplb2ZiaXQ7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2Vyciwgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNb MzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBf X3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgX19s ID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAm IGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpf X3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAg JiYgX19sID49ICgtMzI3NjctMSkgJiYgX19sIDw9IDMyNzY3KQogICAgICAgIF9fdiA9IHN0YXRp Y19jYXN0PHNob3J0PihfX2wpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6 OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJU LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgaW50 JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsKICAg ICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAo Kl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJj LCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi aXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcg JiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX2wgPj0gKC0yMTQ3 NDgzNjQ3IC0xKSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICBfX3YgPSBzdGF0aWNfY2Fz dDxpbnQ+KF9fbCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192 KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50 IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0 cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19z YW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAg ICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpf X2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fbDsKICAgICAgZWxzZQog ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5 cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAg ICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4 dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsK CgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7 CiAgICAgIGxvbmcgbG9uZyBfX2xsID0gc3RydG9sbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNl KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9f c2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRp b24gKCkpID09IDApCiAgICAgICAgX192ID0gX19sbDsKICAgICAgZWxzZQogICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0 ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFy IF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAg IGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAg dW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsK ICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2Fu aXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24g KCkpID09IDAKICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUpCiAgICAgICAgX192ID0gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJj WzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciog X19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25l ZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBp ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0g X194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0g MAogICAgICAgICAgJiYgX191bCA8PSAoMjE0NzQ4MzY0NyAqIDJVICsgMSkpCiAgICAgICAgX192 ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAg ICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywg aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hh ciBfX3h0cmNbMzJdID0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0 KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAg ICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAg ICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2Up OwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19z YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlv biAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX3VsOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRl cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewoKCgogICAgICBj aGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAg ICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAg ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdWxsID0gc3RydG91bGwoX194dHJjLCAmX19zYW5pdHks IF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v X2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdWxsOwogICAgICBlbHNlCiAgICAg ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIg X194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9f YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBj aGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CgogICAgICBm bG9hdCBfX2YgPSBzdHJ0b2YoX194dHJjLCAmX19zYW5pdHkpOwoKCgogICAgICBpZiAoIShfX2Vy ciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAg ICBfX3YgPSBfX2Y7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9f dikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGlu dCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194 dHJjLCBfX2Jhc2UsIHRydWUpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgZG91YmxlIF9fZCA9IHN0cnRvZChfX3h0cmMsICZf X3Nhbml0eSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v X2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fZDsKICAgICAgZWxzZQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewoKCgogICAgICBj aGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAg ICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAg ICBsb25nIGRvdWJsZSBfX2xkID0gc3RydG9sZChfX3h0cmMsICZfX3Nhbml0eSk7CiAgICAgIGlm ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBf X3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAw KQogICAgICAgIF9fdiA9IF9fbGQ7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KIyA2NzggIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6 Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwog ICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6 OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVy Y2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2Zt dG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKCgoKICAgICAg Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJh Y3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgog ICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAg ICAgIHZvaWQqIF9fdnAgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRyYywg Jl9fc2FuaXR5LCBfX2Jhc2UpKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJp dCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm JiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX192cDsKICAgICAg ZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKCiAgICAgIF9faW8uZmxh Z3MoX19mbXQpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGlubGluZSBfT3V0SXRlcgogICAgX19w YWQoX091dEl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKTsKCiAgdGVtcGxh dGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1JhSXRlcj4KICAgIF9SYUl0ZXIKICAgIF9f cGFkKF9SYUl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nLAogICAgICAgICAg cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZpbGxfbihfX3MsIF9fZmls bCk7CiAgICAgIHJldHVybiBfX3MgKyBfX3BhZGRpbmc7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBlbmFtZSBfVGFnPgogICAgX091dEl0 ZXIKICAgIF9fcGFkKF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywg X1RhZykKICAgIHsKICAgICAgd2hpbGUgKC0tX19wYWRkaW5nID49IDApIHsgKl9fcyA9IF9fZmls bDsgKytfX3M7IH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFk KF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZykKICAgIHsKICAgICAg cmV0dXJuIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsK ICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg ICBfT3V0SXRlcgogICAgX19wYWRfbnVtZXJpYyhfT3V0SXRlciBfX3MsIGlvc19iYXNlOjpmbXRm bGFncyAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCAsIGludCAsCiAgICAgICAgICAgICAgICAg IF9DaGFyVCBjb25zdCogLCBfQ2hhclQgY29uc3QqICwKICAgICAgICAgICAgICAgICAgX0NoYXJU IGNvbnN0KiApCiAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlIDx0eXBl bmFtZSBfQ2hhclQ+CiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4KICAgIF9fcGFkX251 bWVyaWMob3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fcywgaW9zX2Jhc2U6OmZtdGZsYWdz IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX2ZpbGwsIGludCBfX3dpZHRoLCBf Q2hhclQgY29uc3QqIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19t aWRkbGUsIF9DaGFyVCBjb25zdCogX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIG9zdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJUPiBfX291dF9pdGVyOwogICAgICBpbnQgX19wYWRkaW5nID0gX193 aWR0aCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgICAgaWYgKF9fcGFkZGluZyA8IDApCiAgICAg ICAgX19wYWRkaW5nID0gMDsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19m bGFncyAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKICAgICAgYm9vbCBfX3Rlc3RmaWVsZCA9IF9f cGFkZGluZyA9PSAwIHx8IF9fYWZsYWdzID09IGlvc19iYXNlOjpsZWZ0CiAgICAgICAgICAgICAg ICAgICAgICAgICB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6aW50ZXJuYWw7CgoKICAgICAgaWYg KF9fZmlyc3QgIT0gX19taWRkbGUpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3Rlc3RmaWVs ZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRp bmcpOwogICAgICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAg IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fcyk7CiAgICAgICAgfQogICAgICBfX291dF9pdGVy IF9fczIgPSBfX3M7CgogICAgICBpZiAoX19wYWRkaW5nICYmIF9fYWZsYWdzICE9IGlvc19iYXNl OjpsZWZ0KQogICAgICAgIHsKICAgICAgICAgIF9fcGFkKF9fczIsIF9fZmlsbCwgX19wYWRkaW5n KTsKICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgfQogICAgICBfX291dF9pdGVyIF9f czMgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOwogICAgICBpZiAoX19wYWRkaW5nKQog ICAgICAgIF9fcGFkKF9fczMsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgcmV0dXJuIF9fczM7 CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog ICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0 ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikg Y29uc3QKICAgIHsKICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9G b3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBpb3NfYmFzZTo6Zm10Zmxh Z3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKCiAgICAgIGlmICgoX19mbGFncyAmIGlvc19iYXNl Ojpib29sYWxwaGEpID09IDApCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3V2 ID0gX192OwogICAgICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2Zp bGwsIGZhbHNlLCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg ICBjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f bGFzdDsKICAgICAgICAgIGlmIChfX3YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Zp cnN0ID0gX19mbXQtPl9NX3RydWVuYW1lLmRhdGEoKTsKICAgICAgICAgICAgICBfX2xhc3QgPSBf X2ZpcnN0ICsgX19mbXQtPl9NX3RydWVuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAg ICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9m YWxzZW5hbWUuZGF0YSgpOwogICAgICAgICAgICAgIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2ZtdC0+ X01fZmFsc2VuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcyk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAg dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fZ3JvdXBfZGlnaXRz KF9DaGFyVCogX19zLCBfQ2hhclQgX19ncnNlcCwgY2hhciBjb25zdCogX19ncm91cGluZywKICAg ICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgX0NoYXJUIGNvbnN0KiBfX2xhc3QpCiAgICB7CiAgICAg IGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcpCiAgICAgICAgewogICAgICAgICAg X19zID0gX19ncm91cF9kaWdpdHMoX19zLCBfX2dyc2VwLAogICAgICAgICAgICAgIChfX2dyb3Vw aW5nICsgMSA9PSBfX2dyZW5kID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwKICAgICAg ICAgICAgICBfX2dyZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19ncm91cGluZyk7CiAgICAgICAg ICBfX2ZpcnN0ID0gX19sYXN0IC0gKl9fZ3JvdXBpbmc7CiAgICAgICAgICAqX19zKysgPSBfX2dy c2VwOwogICAgICAgIH0KICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAqX19zKysgPSAqX19m aXJzdCsrOwogICAgICAgIH0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAg cmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXIsIHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICBfT3V0SXRlcgogICAgX19vdXRwdXRfaW50 ZWdlcihfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBib29sIF9f bmVnLAogICAgICAgICAgICAgIF9WYWx1ZVQgX192KQogICAgewoKICAgICAgY29uc3QgbG9uZyBf TV9yb29tID0gbnVtZXJpY19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICogMiArIDQ7CiAgICAg IF9DaGFyVCBfX2RpZ2l0c1tfTV9yb29tXTsKICAgICAgX0NoYXJUKiBfX2Zyb250ID0gX19kaWdp dHMgKyBfTV9yb29tOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxh Z3MoKTsKICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRf Y2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxlID0g X19mbXQtPl9TX2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsKCiAgICAgIGlvc19iYXNlOjpm bXRmbGFncyBfX2Jhc2VmaWVsZCA9IChfX2ZsYWdzICYgX19pby5iYXNlZmllbGQpOwogICAgICBf Q2hhclQqIF9fc2lnbl9lbmQgPSBfX2Zyb250OwogICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9z X2Jhc2U6OmhleCkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNlOjp1 cHBlcmNhc2UpCiAgICAgICAgICAgIF9fdGFibGUgKz0gMTY7CiAgICAgICAgICBkbwogICAgICAg ICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiAxNV07CiAgICAgICAgICB3aGlsZSAoKF9f diA+Pj0gNCkgIT0gMCk7CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICAg IGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgKi0tX19mcm9udCA9IF9fZm10LT5fU19saXRlcmFsc1tfX2ZtdC0+X1NfeCArCiAgICAg ICAgICAgICAgICAgICAgICAgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAxIDog MCldOwogICAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlWzBdOwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQog ICAgICAgIHsKICAgICAgICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlW19f diAmIDddOwogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDMpICE9IDApOwogICAgICAgICAgaWYg KF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UKICAgICAgICAgICAgICAmJiBzdGF0aWNfY2Fz dDxjaGFyPigqX19mcm9udCkgIT0gX190YWJsZVswXSkKICAgICAgICAgICAgKi0tX19mcm9udCA9 IF9fdGFibGVbMF07CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICB9CiAg ICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgZG8KICAgICAgICAgICAgKi0tX19mcm9udCA9 IF9fdGFibGVbX192ICUgMTBdOwogICAgICAgICAgd2hpbGUgKChfX3YgLz0gMTApICE9IDApOwog ICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CgogICAgICAgICAgaWYgKF9fbmVnIHx8IChf X2ZsYWdzICYgaW9zX2Jhc2U6OnNob3dwb3MpKQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX19m bXQtPl9TX2xpdGVyYWxzW19fZm10LT5fU19wbHVzIC0gX19uZWddOwogICAgICAgIH0KCgogICAg ICBpZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkKICAgICAgICBy ZXR1cm4gY29weShfX2Zyb250LCBfX2RpZ2l0cyArIF9NX3Jvb20sIF9fcyk7CgogICAgICBpZiAo IV9fZm10LT5fTV91c2VfZ3JvdXBpbmcpCiAgICAgICAgcmV0dXJuIF9fcGFkX251bWVyaWMoX19z LCBfX2ZsYWdzLCBfX2ZpbGwsIF9faW8ud2lkdGgoMCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19mcm9udCwgX19zaWduX2VuZCwgX19kaWdpdHMgKyBfTV9yb29tKTsKCiAgICAgIF9D aGFyVCogX19wID0gX19kaWdpdHM7CiAgICAgIHdoaWxlIChfX2Zyb250IDwgX19zaWduX2VuZCkK ICAgICAgICAqX19wKysgPSAqX19mcm9udCsrOwogICAgICBjb25zdCBjaGFyKiBfX2dyID0gX19m bXQtPl9NX2dyb3VwaW5nLmRhdGEoKTsKICAgICAgX19mcm9udCA9IF9fZ3JvdXBfZGlnaXRzKF9f cCwgX19mbXQtPl9NX3Rob3VzYW5kc19zZXAsIF9fZ3IsCiAgICAgICAgX19nciArIF9fZm10LT5f TV9ncm91cGluZy5zaXplKCksIF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CiAgICAg IHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywgX19maWxsLCBfX2lvLndpZHRoKDAp LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RpZ2l0cywgX19wLCBfX2Zyb250KTsKICAg IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf T3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90 eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25z dAogICAgewogICAgICB1bnNpZ25lZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgIGJvb2wgX19uZWcg PSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAgICAgICAgewogICAgICAgICAgX19uZWcgPSB0 cnVlOwogICAgICAgICAgX191diA9IC1fX3V2OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0 cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIF9fbmVnLCBfX3V2KTsKICAgIH0KCiAgdGVt cGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog ICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQgbG9u ZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19m aWxsLCBmYWxzZSwgX192KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6 CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmls bCwgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9f dXYgPSBfX3Y7CiAgICAgIGJvb2wgX19uZWcgPSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAg ICAgICAgewogICAgICAgICAgX19uZWcgPSB0cnVlOwogICAgICAgICAgX191diA9IC1fX3V2Owog ICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2IsIF9fZmlsbCwg X19uZWcsIF9fdXYpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoK ICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmls bCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4g X19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsIF9fdik7IH0KCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9PdXRJ dGVyPgogICAgX091dEl0ZXIKICAgIF9fb3V0cHV0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jh c2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog X19zcHRyLCBzaXplX3QgX19zbGVuKQogICAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIG9zdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPgogICAgX19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1 Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICAgICAgICAgICBfQ2hhclQgX19maWxsLCBjb25zdCBjaGFyKiBfX3NwdHIsIHNpemVfdCBfX3Ns ZW4pCiAgICB7CiAgICAgIHNpemVfdCBfX3BhZGRpbmcgPSBfX2lvLndpZHRoKCkgPiBzdHJlYW1z aXplKF9fc2xlbikgPwogICAgICAgICAgICAgICAgICAgICAgICAgX19pby53aWR0aCgpIC1fX3Ns ZW4gOiAwOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxf Q2hhclQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAg ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FkamZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jh c2U6OmFkanVzdGZpZWxkOwogICAgICBjb25zdCBjaGFyKiBjb25zdCBfX2VwdHIgPSBfX3NwdHIg KyBfX3NsZW47CgogICAgICBpZiAoX19hZGpmaWVsZCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCiAg ICAgICB7CgogICAgICAgICBpZiAoX19zcHRyIDwgX19lcHRyICYmICgqX19zcHRyID09ICcrJyB8 fCAqX19zcHRyID09ICctJykpCiAgICAgICAgICAgewogICAgICAgICAgICAgX19zID0gX19jdC53 aWRlbigqX19zcHRyKTsKICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgKytfX3NwdHI7 CiAgICAgICAgICAgfQogICAgICAgICBfX3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5n KTsKICAgICAgICAgX19wYWRkaW5nID0gMDsKICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGpm aWVsZCAhPSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX3BhZChf X3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAg fQoKICAgICAgY2hhciBfX2RlY2ltYWxfcG9pbnQgPSAqKGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9w b2ludCk7CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0 X2NhY2hlPF9DaGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgZm9yICg7IF9fc3B0ciAhPSBfX2Vw dHI7ICsrX19zLCArK19fc3B0cikKICAgICAgIHsKCiAgICAgICAgIGlmICgqX19zcHRyID09IF9f ZGVjaW1hbF9wb2ludCkKICAgICAgICAgICBfX3MgPSBfX2ZtdC0+X01fZGVjaW1hbF9wb2ludDsK CiAgICAgICAgIGVsc2UKICAgICAgICAgICBfX3MgPSBfX2N0LndpZGVuKCpfX3NwdHIpOwogICAg ICAgfQoKICAgICAgaWYgKF9fcGFkZGluZykKICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19w YWRkaW5nKTsKICAgICAgX19pby53aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAg Ym9vbAogIF9fYnVpbGRfZmxvYXRfZm9ybWF0KGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIs IGNoYXIgX19tb2RpZmllciwKICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJl Yyk7CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBj b25zdAogICAgewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xp bWl0czxkb3VibGU+OjpkaWdpdHMxMCArIDM7CiAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19p by5wcmVjaXNpb24oKTsKCiAgICAgIGlmIChfX3ByZWMgPiBfX21heF9wcmVjKQogICAgICAgIF9f cHJlYyA9IF9fbWF4X3ByZWM7CgogICAgICBjaGFyIF9fc2J1ZltfX21heF9wcmVjICogMl07CiAg ICAgIHNpemVfdCBfX3NsZW47CgogICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgIGlmIChfX2J1 aWxkX2Zsb2F0X2Zvcm1hdChfX2lvLCBfX2ZidWYsIDAsIF9fcHJlYykpCiAgICAgICAgX19zbGVu ID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAgICAg ICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX192KTsKCiAgICAgIHJldHVybiBf X291dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19zYnVmLCBfX3NsZW4pOwogICAgfQoK ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJ dGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRv dWJsZSBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19tYXhfcHJlYyA9 IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1z aXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhf cHJlYykKICAgICAgICBfX3ByZWMgPSBfX21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19t YXhfcHJlYyAqIDJdOwogICAgICBzaXplX3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZd OwoKICAgICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBfX3By ZWMpKQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192 KTsKICAgICAgZWxzZQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9f dik7CgogICAgICByZXR1cm4gX19vdXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1 ZiwgX19zbGVuKTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg ICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws CiAgICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGlv c19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZs YWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBp b3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFz ZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2Zt dCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CiAg ICAgIHRyeSB7CiAgICAgICAgX091dEl0ZXIgX19zMiA9IF9fb3V0cHV0X2ludGVnZXIoX19zLCBf X2lvLCBfX2ZpbGwsIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVp bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICBfX2lvLmZsYWdzKF9f Zm10KTsKICAgICAgICByZXR1cm4gX19zMjsKICAgICAgfQogICAgICBjYXRjaCAoLi4uKSB7CiAg ICAgICAgX19pby5mbGFncyhfX2ZtdCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIH0KCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50PgogICAg c3RydWN0IF9XZWVrZGF5bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0 cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIq IGNvbnN0IF9TX25hbWVzWzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAg Y29uc3QgY2hhciogY29uc3QKICAgIF9XZWVrZGF5bmFtZXM8Y2hhciwgX0R1bW15Pjo6X1NfbmFt ZXNbMTRdID0KICAgIHsKICAgICAgIlN1biIsICJTdW5kYXkiLAogICAgICAiTW9uIiwgIk1vbmRh eSIsICJUdWUiLCAiVHVlc2RheSIsICJXZWQiLCAiV2VkbmVzZGF5IiwKICAgICAgIlRodSIsICJU aHVyc2RheSIsICJGcmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSIKICAgIH07CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBzdHJ1Y3QgX1dlZWtkYXluYW1lczx3Y2hhcl90 LCBfRHVtbXk+CiAgICB7IHN0YXRpYyBjb25zdCB3Y2hhcl90KiBjb25zdCBfU19uYW1lc1sxNF07 IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIGNvbnN0IHdjaGFyX3QqIGNvbnN0 CiAgICBfV2Vla2RheW5hbWVzPHdjaGFyX3QsIF9EdW1teT46Ol9TX25hbWVzWzE0XSA9CiAgICB7 CiAgICAgIEwiU3VuIiwgTCJTdW5kYXkiLAogICAgICBMIk1vbiIsIEwiTW9uZGF5IiwgTCJUdWUi LCBMIlR1ZXNkYXkiLCBMIldlZCIsIEwiV2VkbmVzZGF5IiwKICAgICAgTCJUaHUiLCBMIlRodXJz ZGF5IiwgTCJGcmkiLCBMIkZyaWRheSIsIEwiU2F0IiwgTCJTYXR1cmRheSIKICAgIH07CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9EdW1teSA9IGludD4KICAgIHN0cnVj dCBfTW9udGhuYW1lczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgc3RydWN0IF9N b250aG5hbWVzPGNoYXIsX0R1bW15PgogICAgeyBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgX1Nf bmFtZXNbMjRdOyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCBjaGFy KiBjb25zdAogICAgX01vbnRobmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQogICAg ewogICAgICAiSmFuIiwgIkphbnVhcnkiLCAiRmViIiwgIkZlYnJ1YXJ5IiwgIk1hciIsICJNYXJj aCIsCiAgICAgICJBcHIiLCAiQXByaWwiLCAiTWF5IiwgIk1heSIsICJKdW4iLCAiSnVuZSIsCiAg ICAgICJKdWwiLCAiSnVseSIsICJBdWciLCAiQXVndXN0IiwgIlNlcCIsICJTZXB0ZW1iZXIiLAog ICAgICAiT2N0IiwgIk9jdG9iZXIiLCAiTm92IiwgIk5vdmVtYmVyIiwgIkRlYyIsICJEZWNlbWJl ciIKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBzdHJ1Y3QgX01vbnRo bmFtZXM8d2NoYXJfdCwgX0R1bW15PgogICAgeyBzdGF0aWMgY29uc3Qgd2NoYXJfdCogY29uc3Qg X1NfbmFtZXNbMjRdOyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCB3 Y2hhcl90KiBjb25zdAogICAgX01vbnRobmFtZXM8d2NoYXJfdCxfRHVtbXk+OjpfU19uYW1lc1sy NF0gPQogICAgewogICAgICBMIkphbiIsIEwiSmFudWFyeSIsIEwiRmViIiwgTCJGZWJydWFyeSIs IEwiTWFyIiwgTCJNYXJjaCIsCiAgICAgIEwiQXByIiwgTCJBcHJpbCIsIEwiTWF5IiwgTCJNYXki LCBMIkp1biIsIEwiSnVuZSIsCiAgICAgIEwiSnVsIiwgTCJKdWx5IiwgTCJBdWciLCBMIkF1Z3Vz dCIsIEwiU2VwIiwgTCJTZXB0ZW1iZXIiLAogICAgICBMIk9jdCIsIEwiT2N0b2JlciIsIEwiTm92 IiwgTCJOb3ZlbWJlciIsIEwiRGVjIiwgTCJEZWNlbWJlciIKICAgIH07CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dl dDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0 ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01fZGF5 bmFtZXMpCiAgICAgICAgewogICAgICAgICAgX01fZGF5bmFtZXMgPSBuZXcgYmFzaWNfc3RyaW5n PF9DaGFyVD5bMTRdOwogICAgICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgMTQ7ICsrX19p KQogICAgICAgICAgICBfTV9kYXluYW1lc1tfX2ldID0gX1dlZWtkYXluYW1lczxfQ2hhclQ+Ojpf U19uYW1lc1tfX2ldOwogICAgICAgIH0KICAgICAgYm9vbCBfX2F0X2VvZiA9IGZhbHNlOwogICAg ICBpbnQgX19yZW1haW4gPSAwOwogICAgICBpbnQgX19tYXRjaGVzWzE0XTsKICAgICAgaXRlcl90 eXBlIF9fb3V0ID0gX19tYXRjaF9wYXJhbGxlbChfX3MsIF9fZW5kLCAxNCwgX01fZGF5bmFtZXMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXRjaGVzLCBfX3Jl bWFpbiwgX19hdF9lb2YpOwogICAgICBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKDApOwogICAg ICBpZiAoX19hdF9lb2YpIF9fZXJyIHw9IF9faW8uZW9mYml0OwogICAgICBpZiAoX19yZW1haW4g PT0gMSB8fAogICAgICAgICAgX19yZW1haW4gPT0gMiAmJiAoX19tYXRjaGVzWzBdPj4xKSA9PSAo X19tYXRjaGVzWzFdPj4xKSkKICAgICAgICBfX3QtPnRtX3dkYXkgPSAoX19tYXRjaGVzWzBdPj4x KTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IF9faW8uZmFpbGJpdDsKICAgICAgcmV0dXJu IF9fb3V0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0 ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl dF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLAogICAgICAgICAgICAg ICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190 KSBjb25zdAogICAgewogICAgICBpZiAoIV9NX21vbnRobmFtZXMpCiAgICAgICAgewogICAgICAg ICAgX01fbW9udGhuYW1lcyA9IG5ldyBiYXNpY19zdHJpbmc8X0NoYXJUPlsyNF07CiAgICAgICAg ICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAyNDsgKytfX2kpCiAgICAgICAgICAgIF9NX21vbnRo bmFtZXNbX19pXSA9IF9Nb250aG5hbWVzPF9DaGFyVD46Ol9TX25hbWVzW19faV07CiAgICAgICAg fQogICAgICBib29sIF9fYXRfZW9mID0gZmFsc2U7CiAgICAgIGludCBfX3JlbWFpbiA9IDA7CiAg ICAgIGludCBfX21hdGNoZXNbMjRdOwogICAgICBpdGVyX3R5cGUgX19vdXQgPSBfX21hdGNoX3Bh cmFsbGVsKCBfX3MsIF9fZW5kLCAyNCwgX01fbW9udGhuYW1lcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOwog ICAgICBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKDApOwogICAgICBpZiAoX19hdF9lb2YpIF9f ZXJyIHw9IF9faW8uZW9mYml0OwogICAgICBpZiAoX19yZW1haW4gPT0gMSB8fAogICAgICAgICAg X19yZW1haW4gPT0gMiAmJiAoX19tYXRjaGVzWzBdPj4xKSA9PSAoX19tYXRjaGVzWzFdPj4xKSkK ICAgICAgICBfX3QtPnRtX21vbiA9IChfX21hdGNoZXNbMF0+PjEpOwogICAgICBlbHNlCiAgICAg ICAgX19lcnIgfD0gX19pby5mYWlsYml0OwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9Cn0KIyA0 MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAy IDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50 Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6 OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKQogICAgOiBf TV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3MpCiAgICB7CgogICAgICBpZiAoX01fb2sgJiYg X19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg b3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1fdHlwZSYpKQogICAg ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8 KGJvb2wgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9m bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAg ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgX19uKQogICAgewogICAgICBzZW50 cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxs KCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3Mo KSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0 KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9f YiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8 IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+ KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMs ICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0 KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAo X19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8 KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAg IGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFp bGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBf X2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10 ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoX19mbXQgJiBp b3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX19sOwogICAgICAg ICAgICAgICAgICAgICAgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24p OwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhp cywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhp cywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikK ICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNp Z25lZCBsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAg IGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFp bGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAg ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m YWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRo aXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAg ICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+Zmls bCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25z dCB2b2lkKiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9N X2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkK ICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0 dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmlu KQogICAgewogICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwogICAgICBfX3N0cmVhbWJ1Zl90 eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7 CiAgICAgIGlmIChfX3NiaW4gJiYgX19jZXJiKQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3Ry ZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgaWYgKCFfX3NiaW4gfHwgIV9f eHRyY3QpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsKICAgICAgICAgIGlmIChfX3B1 dCAhPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSkKICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICBzdHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24p OwogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OmZsdXNoKCkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRi dWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5 cGUoLTEpOwogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAg ICBpZiAoX190ZXN0b2spCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2Zm KDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAg ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBib29sIF9fdGVzdG9r ID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAgewoK CiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19w b3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2Zm X3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoZmFpbGJpdCk7CgogICAgICAg IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19v ZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAgICAgYm9vbCBfX3Rlc3RvayA9IHRo aXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9rKQogICAgICAgIHsKCgogICAg ICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBf X2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlw ZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0KTsKICAgICAgICB9Cgog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgNDU3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk ZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIF9fcGFkX2NoYXIoYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3Qg X0NoYXJUKiBfX29sZHMsCiAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4s IGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4pCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIGludF90eXBl IF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAg IGNoYXJfdHlwZSogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2Fs bG9jYShzaXplb2YoY2hhcl90eXBlKSAqIF9fcGxlbikpOwogICAgICB0cmFpdHNfdHlwZTo6YXNz aWduKF9fcGFkcywgX19wbGVuLCBfX2lvcy5maWxsKCkpOwoKICAgICAgY2hhcl90eXBlKiBfX2Jl ZzsKICAgICAgY2hhcl90eXBlKiBfX2VuZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAg c2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSBfX2lvcy5m bGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwoKICAgICAgaWYgKF9fZm10ID09IGlvc19i YXNlOjpsZWZ0KQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90 eXBlKj4oX19vbGRzKTsKICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRsZW47CiAgICAgICAgICBf X2VuZCA9IF9fcGFkczsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fZm10ID09IGlvc19iYXNl OjppbnRlcm5hbCkKICAgICAgICB7CgoKCiAgICAgICAgICB0eXBlZGVmIF9Gb3JtYXRfY2FjaGU8 X0NoYXJUPiBfX2NhY2hlX3R5cGU7CiAgICAgICAgICBfX2NhY2hlX3R5cGUgY29uc3QqIF9fZm10 ID0gX19jYWNoZV90eXBlOjpfU19nZXQoX19pb3MpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBl KiBfX21pbnVzID0gdHJhaXRzX3R5cGU6OmZpbmQoX19vbGRzLCBfX29sZGxlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19t aW51cyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcGx1cyA9IHRyYWl0c190eXBlOjpm aW5kKF9fb2xkcywgX19vbGRsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19wbHVzKTsKICAgICAgICAgIGJvb2wgX190ZXN0 c2lnbiA9IF9fbWludXMgfHwgX19wbHVzOwogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX29s ZHNbMF0gPT0gJzAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX29sZHNbMV0gPT0g J3gnIHx8IF9fb2xkc1sxXSA9PSAnWCcpOwoKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAgICAg ICAgX19uZXdzWzFdID0gX19vbGRzWzFdOwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAg ICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9fbW9kKTsK ICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuIC0gX19tb2Q7CiAgICAgICAgICAgICAg X19lbmQgPSBfX3BhZHM7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNp Z24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX21vZCArPSBfX3BsZW47CiAgICAgICAg ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3NpZ24gPSBfX21pbnVzID8gX19taW51cyArIDE6IF9f cGx1cyArIDE7CiAgICAgICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9f b2xkcyk7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3NpZ24gLSBfX29sZHM7CiAgICAgICAg ICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fc2lnbiArIF9fcGxlbik7CiAg ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdzICsgX19iZWdsZW4sIF9fcGFkcywg X19wbGVuKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAg ICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVu OwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9f YmVnID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2Vu ZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAgICB9CgogICAgICB0cmFp dHNfdHlwZTo6Y29weShfX25ld3MsIF9fYmVnLCBfX2JlZ2xlbik7CiAgICAgIHRyYWl0c190eXBl Ojpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwgX19uZXdsZW4gLSBfX2JlZ2xlbiAtIF9f bW9kKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKQogICAgewogICAg ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsK ICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9D aGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl b2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAg ICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19s ZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQs IF9fcGFkcywgJl9fYywgX193LCBfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193 OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19s ZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg X19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291 dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0K CgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs IGNoYXIgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0 cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg X19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgo KTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWls dGluX2FsbG9jYShfX3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAg ICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBf X2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291 dCwgX19wYWRzLCAmX19jLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBf X3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBf X2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9f b3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAg dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAg ICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hh clQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m KF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGlj X2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlm IChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRf Y2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBf X3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAg IF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f b3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCiAgICAgIHR5cGVkZWYgY2hhcl90cmFp dHM8Y2hhcj4gX19jdHJhaXRzX3R5cGU7CgogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6 c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgc2l6ZV90IF9fY2xlbiA9IF9fY3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgICAg IF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6 ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkpKTsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faSA9 IDA7IF9faSA8PSBfX2NsZW47ICsrX19pKQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291dC53 aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsKCiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0 aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193 ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19j YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKCiAg ICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fd3MsIF9fdywgX19sZW4pOwogICAg ICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBf X3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9f bGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19v dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9 CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs IGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIs IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6 c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0 LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+ KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9 IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAg ICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgX19zLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAg ICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAg ICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVk ZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0 eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRh KCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBf Q2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6 ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNf Y2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9f bGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRz LCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAg ICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgfQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3Jl cyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4pOwogICAgICAgICAgX19vdXQud2lk dGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMgIT0gX19sZW4pCiAgICAgICAgICAgIF9fb3V0LnNl dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsK ICAgIH0KfQojIDI3OSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X29zdHJlYW0uaCIgMiAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0z LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xv Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9zdGRfbGlt aXRzLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfaXN0cmVhbS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVh bCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpw b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlw ZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAg ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsK ICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry ZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9p dGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90 eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1 YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlw ZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmluaXQoX19zYik7CiAgICAgICAgX01fZ2Nv dW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNf aXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNs YXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFt X3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190 eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg b3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsKCgogICAgICBfX2lzdHJl YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK ICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90 eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90 eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7CgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBpbmxp bmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f Z2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBnZXQodm9pZCk7CgogICAgICBfX2lzdHJl YW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBl JgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19k ZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUq IF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIGdldChfX3MsIF9fbiwgdGhpcy0+ d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFt YnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJl YW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJu IGdldChfX3NiLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgog ICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9f ZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJf dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gZ2V0bGluZShfX3MsIF9f biwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdu b3JlKHN0cmVhbXNpemUgX19uID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjpl b2YoKSk7CgogICAgICBpbnRfdHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAg IHN0cmVhbXNpemUKICAgICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAg IHN5bmModm9pZCk7CgogICAgICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9f aXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgc2Vla2cob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKCiAgICBwcml2YXRl OgoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19pc3RyZWFt X3R5cGUmKTsKCiAgICAgIGJhc2ljX2lzdHJlYW0oY29uc3QgX19pc3RyZWFtX3R5cGUmKTsKCiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj bGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewogICAgcHVi bGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlw ZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAg IHR5cGVkZWYgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGV4 cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs IGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsKCiAgICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVy biBfTV9vazsgfQoKICAgIHByaXZhdGU6CiAgICAgIGJvb2wgX01fb2s7CiAgICB9OwoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0 dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRl PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl cmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYg X19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKTsKCiAgdGVtcGxhdGU8Y2xhc3Mg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4o YmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAg ICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKICB0 ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBj aGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihf X3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0KICAgIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiwKICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9z dHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICAgIDogX19p c3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpCiAgICAgIHsgfQoKICAgICAg dmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMp Owp9CgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJl YW0udGNjIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv aXN0cmVhbS50Y2MiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfbG9jYWxlLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9pc3RyZWFtLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3cykKICAgIHsKICAgICAgaWYgKF9f aW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2luLnRpZSgpKQogICAgICAgICAg ICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAgICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2lu LmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAg ICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygp OwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAg ICAgICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAg ICB3aGlsZSAoX19jICE9IF9fZW9mICYmIF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBf X2MpKQogICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgoKCiAgICAgICAgICAg ICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jh c2U6OmVvZmJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgaWYgKF9faW4uZ29v ZCgpKQogICAgICAgIF9NX29rID0gdHJ1ZTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg IF9NX29rID0gZmFsc2U7CiAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAo Kl9fcGYpKF9faXN0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19w ZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFz ZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I+Pihib29sJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHNob3J0 JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6 Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBvcGVyYXRvcj4+KGludCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj ZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs ICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQm IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6 Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQog ICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9f bik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0 LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+ Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlv c3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg KnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsK ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9f bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAg ICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7 CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKQogICAgewogICAg ICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAg ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBf TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6 aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAw LCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24p CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9f ZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAg IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1n ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv cj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9f c2JvdXQpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAgIF9fc3RyZWFt YnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fc2JvdXQgJiYgX19jZXJiKQogICAgICAgIF9feHRyY3Qg PSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgaWYgKCFf X3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWls Yml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KHZv aWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigp OwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1 ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9fYyAhPSBfX2VvZikKICAgICAgICAg ICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAg ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy ZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQogICAgewogICAg ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg ICAgICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAg ICAgICAgICAgIGlmIChfX2J1ZnZhbCAhPSBfX2VvZikKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgX19jID0gdHJhaXRz X3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp dCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBn ZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAg IHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7 CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMSkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRz X3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBl IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5 cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9f c2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19p ZGVsaW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAg ICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9f dGVzdGRlbGltKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0 cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2Nv dW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAg ICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rk ZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBp ZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09IF9fbiAtIDEpCiAgICAgICAgICAgICAgICBf X3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJf dHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChf X3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01f Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19jOwogICAgICAgICAgX19zdHJl YW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNf dHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19jID0gX190aGlzX3Ni LT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRl bGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAg ICAgICAgIGJvb2wgX190ZXN0cHV0ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgd2hpbGUgKCFfX3Rl c3Rlb2YgJiYgIV9fdGVzdGRlbGltCiAgICAgICAgICAgICAgICAgICAgJiYgKF9fdGVzdHB1dCA9 IF9fc2Iuc3B1dGModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKQogICAgICAgICAgICAg ICAgICAgICAgICAgIT0gX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMo KTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAg ICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0gfHwgIV9fdGVzdHB1dCkKICAgICAgICAgICAg ICAgIF9fdGhpc19zYi0+c3B1dGJhY2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7 CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNw dXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldGxp bmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAg IHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAg ICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAr K19NX2djb3VudDsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0 c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlw ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRl bGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19j ID09IF9fZW9mOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uICYmICFfX3Rl c3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAg ICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsK ICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAg ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgLS1fTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKCFf X3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9nY291 bnQ7CiAgICAgICAgICAgICAgICAgIF9fc2ItPnNwdXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hh cl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBp ZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGlnbm9yZShzdHJlYW1zaXplIF9f biwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMCkKICAg ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGlu dF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAg ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAg ICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGJvb2wg X190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rl b2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51bWVyaWNf bGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3Vu dCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX2Mg PSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9f ZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKF9NX2djb3VudCA9PSBfX24gLSAxICYm ICFfX3Rlc3Rlb2YpIHx8IF9fdGVzdGRlbGltKQogICAgICAgICAgICAgICAgKytfTV9nY291bnQ7 CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6 OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0 cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFk KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0g MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgaWYgKF9fbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVm X3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgICAgICBpbnRfdHlwZSBf X2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBf X2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0g MSAmJiAhX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAg ICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+ c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7 CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQog ICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICB7CgogICAgICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJf dHlwZShfX2MpOwogICAgICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVs c2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAg Y29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3Vu dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24gPiAwKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUg X19udW0gPSB0aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgICAgICBpZiAo X19udW0gIT0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19lb2YpKQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fbnVtID0gbWluKF9fbnVtLCBfX24pOwogICAg ICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBf X251bSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgICAgICB7CgoKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0 c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhp cy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19zYi0+c3B1dGJhY2tjKF9f YykgPT0gX19lb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAgewogICAg ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAg ICAgIGlmICghX19zYiB8fCBfX2VvZiA9PSBfX3NiLT5zdW5nZXRjKCkpCiAgICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGludAogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN5bmModm9pZCkKICAgIHsKICAg ICAgaW50IF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyZWFtYnVm X3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8fCBf X3JldCA9PSBfX3NiLT5wdWJzeW5jKCkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3Jl dCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OnBvc190eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg dGVsbGcodm9pZCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAg ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1 ciwgaW9zX2Jhc2U6OmluKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2co cG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMt PnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAg ICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGZhaWxiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz ZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAg IF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBp ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYs IF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190 eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0 KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYg X19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBf X2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl cmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpm YWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBf Q2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5 cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICBz dHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl OjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f bnVtID0gX19pbi53aWR0aCgpOwogICAgICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAgICAg ICAgICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAg ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAg ICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lv cygpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAg ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAg ICAgYm9vbCBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwog ICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAg ICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0 c3ApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IF9fYzsKICAg ICAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICAgICAgX19jID0gX19z Yi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsK ICAgICAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFj ZSwgX19jKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKCFfX3Rlc3Rlb2Yp CiAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAg ICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKCiAgICAgICAgICAgICAgX19pbi53aWR0aCgw KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWls Yml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYK ICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQogICAgewogICAgICB0 eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0 cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0 eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90 eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh bV90eXBlOjpjaGFyX3R5cGUgX19jaGFyX3R5cGU7CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf X3NiID0gX19pbi5yZGJ1ZigpOwogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBf X2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBf VHJhaXRzOjplb2YoKTsKICAgICAgX19pbnRfdHlwZSBfX2M7CiAgICAgIGJvb2wgX190ZXN0ZW9m OwogICAgICBib29sIF9fdGVzdHNwOwoKICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBfX2Mg PSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAg ICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAg ICAgICAgfQogICAgICB3aGlsZSAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RzcCk7CgogICAgICBpZiAo IV9fdGVzdGVvZiAmJiAhX190ZXN0c3ApCiAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAg ICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAg cmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lu LAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g X19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlu dF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6 Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl ZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBl OwogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lz dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIHN0cmVhbXNpemUg X193ID0gX19pbi53aWR0aCgpOwogICAgICAgICAgX19zaXplX3R5cGUgX19uOwogICAgICAgICAg X19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4 X3NpemUoKTsKCiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1Zigp OwogICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0 eXBlX2lvcygpOwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAg ICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAg IGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAg ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgIHdoaWxlIChf X2V4dHJhY3RlZCA8IF9fbiAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAg ICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBj KCk7CiAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAg IF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGlmICghX190ZXN0ZW9mKQogICAgICAgICAgICBfX3NiLT5zcHV0YmFj a2MoX19jKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz ZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlm ICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQp OwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6 ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwog ICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90 eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBf X3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRz Ojp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ig PSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygp OwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAg ICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICBib29sIF9fdGVz dGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19u ICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytf X2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAg ICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0g PSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX3Rlc3Rlb2Yp CiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQog ICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBs YXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5l IGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs X1RyYWl0cyxfQWxsb2M+JiBfX3N0cikKICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIs IF9faW4ud2lkZW4oJ1xuJykpOyB9Cn0KIyAyOTEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIgMwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK ICBleHRlcm4gaXN0cmVhbSBjaW47CiAgZXh0ZXJuIG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0 cmVhbSBjZXJyOwogIGV4dGVybiBvc3RyZWFtIGNsb2c7CgogIGV4dGVybiB3aXN0cmVhbSB3Y2lu OwogIGV4dGVybiB3b3N0cmVhbSB3Y291dDsKICBleHRlcm4gd29zdHJlYW0gd2NlcnI7CiAgZXh0 ZXJuIHdvc3RyZWFtIHdjbG9nOwoKCgogIHN0YXRpYyBpb3NfYmFzZTo6SW5pdCBfX2lvaW5pdDsK fQojIDMyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDIgMwoj IDY0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFt cy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2ZzdHJlYW0iIDEg MwojIDMxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZnN0cmVhbSIgMwojIDEg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDEg MwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVh bS5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p c3RyZWFtLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfZnN0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfZmlsZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfZmlsZS5oIiAzCgojIDEgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZp Zy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz aWNfZmlsZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9iYXNpY19maWxlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgc3RydWN0IF9fYmFzaWNfZmlsZV9iYXNlOiBwdWJsaWMgX19j X2ZpbGVfdHlwZQogICAgewogICAgICB2aXJ0dWFsCiAgICAgIH5fX2Jhc2ljX2ZpbGVfYmFzZSgp IHsgfTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIG92ZXJmbG93KGludCBfX2MgPSAoLTEpKSA9 IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICB1bmRlcmZsb3coKSA9IDA7CgogICAgICB2aXJ0 dWFsIGludAogICAgICB1ZmxvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHBiYWNr ZmFpbChpbnQgX19jKSA9IDA7CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRu KGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikgPSAwOwoKICAgICAgdmlydHVhbCBz dHJlYW1zaXplCiAgICAgIHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pID0gMDsK CiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmCiAgICAgIHNlZWtvZmYoc3RyZWFtb2ZmIF9fb2ZmLCBp b3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUg X19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkgPSAwOwoKICAgICAgdmlydHVh bCBzdHJlYW1vZmYKICAgICAgc2Vla3BvcyhzdHJlYW1vZmYgX19wb3MsCiAgICAgICAgICAgICAg aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQp ID0gMDsKCiAgICAgIHZpcnR1YWwgc3RyZWFtYnVmKgogICAgICBzZXRidWYoX0NoYXJUKiBfX2Is IGludCBfX2xlbikgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpID0gMDsKCiAg ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvYWxsb2NhdGUoKSA9IDA7CgogICAgICB2aXJ0dWFsIHN0 cmVhbXNpemUKICAgICAgc3lzX3JlYWQoX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7 CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc3lzX3dyaXRlKGNvbnN0IF9DaGFyVCog X19zLCBzdHJlYW1zaXplIF9fbikgPSAwOwoKICAgICAgdmlydHVhbCBzdHJlYW1vZmYKICAgICAg c3lzX3NlZWsoc3RyZWFtb2ZmIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSkgPSAwOwoK ICAgICAgdmlydHVhbCBpbnQKICAgICAgc3lzX2Nsb3NlKCkgPSAwOwoKICAgICAgdmlydHVhbCBp bnQKICAgICAgc3lzX3N0YXQodm9pZCogX192KSA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAg ICBzaG93bWFueWMoKSA9IDA7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUodm9pZCog X192KSA9IDA7CiAgICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CgoKCiAgICBj bGFzcyBfX2Jhc2ljX2ZpbGUKCiAgICB7CgogICAgICBfX2NfZmlsZV90eXBlKiBfTV9jZmlsZTsK ICAgICAgYm9vbCBfTV9jZmlsZV9jcmVhdGVkOwoKCgoKCgogICAgcHVibGljOgogICAgICBfX2Jh c2ljX2ZpbGUoX19jX2xvY2sqIF9fbG9jayA9IDApOwoKICAgICAgdm9pZAogICAgICBfTV9vcGVu X21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50JiBfX3BfbW9kZSwgaW50JiBfX3J3 X21vZGUsCiAgICAgICAgICAgICAgICAgICBjaGFyKiBfX2NfbW9kZSk7CgoKICAgICAgX19iYXNp Y19maWxlKgogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2Rl IF9fbW9kZSwgaW50IF9fcHJvdCA9IDA2NjQpOwoKCgoKCiAgICAgIF9fYmFzaWNfZmlsZSoKICAg ICAgc3lzX29wZW4oX19jX2ZpbGVfdHlwZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19t b2RlKTsKCiAgICAgIF9DaGFyVAogICAgICBzeXNfZ2V0YygpOwoKICAgICAgX0NoYXJUCiAgICAg IHN5c191bmdldGMoX0NoYXJUKTsKCiAgICAgIF9fYmFzaWNfZmlsZSoKICAgICAgY2xvc2UoKTsK CiAgICAgIGJvb2wKICAgICAgaXNfb3BlbigpOwoKCgoKCiAgICAgIHZpcnR1YWwKICAgICAgfl9f YmFzaWNfZmlsZSgpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgb3ZlcmZsb3coaW50IF9fYyA9 ICgtMSkpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgdW5kZXJmbG93KCk7CgogICAgICB2aXJ0 dWFsIGludAogICAgICB1ZmxvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgcGJhY2tmYWls KGludCBfX2MpOwoKCgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25z dCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKCgoKICAgICAgdmlydHVhbCBzdHJlYW1z aXplCiAgICAgIHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKCgoKICAgICAg dmlydHVhbCBzdHJlYW1vZmYKICAgICAgc2Vla29mZihzdHJlYW1vZmYgX19vZmYsIGlvc19iYXNl OjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUg PSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCgoKCiAgICAgIHZpcnR1YWwgc3RyZWFt b2ZmCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLAogICAgICAgICAgICAgIGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAgICAg IHZpcnR1YWwgc3RyZWFtYnVmKgogICAgICBzZXRidWYoX0NoYXJUKiBfX2IsIGludCBfX2xlbik7 CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCk7CgogICAgICB2aXJ0dWFsIGludAogICAg ICBkb2FsbG9jYXRlKCk7CgoKCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc3lzX3Jl YWQoX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCgoKCiAgICAgIHZpcnR1YWwgc3RyZWFt c2l6ZQogICAgICBzeXNfd3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKTsK CgoKCiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmCiAgICAgIHN5c19zZWVrKHN0cmVhbW9mZiBfX29m ZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXkpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3lz X2Nsb3NlKCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeXNfc3RhdCh2b2lkKiBfX3YpOwoK ICAgICAgdmlydHVhbCBpbnQKICAgICAgc2hvd21hbnljKCk7CgogICAgICB2aXJ0dWFsIHZvaWQK ICAgICAgaW1idWUodm9pZCogX192KTsKICAgIH07Cn0KCgoKIyAxICIvdXNyL2xvY2FsL2djYy0z LjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9iYXNpY19maWxlX21vZGVs LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s aW51eC1nbnUvYml0cy9iYXNpY19maWxlX21vZGVsLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpfX2Jhc2lj X2ZpbGUoX19jX2xvY2sqICkKICAgIDogX01fY2ZpbGUoX19udWxsKSwgX01fY2ZpbGVfY3JlYXRl ZChmYWxzZSkgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fYmFzaWNfZmls ZTxfQ2hhclQ+Ojp+X19iYXNpY19maWxlKCkKICAgIHsKICAgICAgaWYgKHRoaXMtPmlzX29wZW4o KSkKICAgICAgICB7CiAgICAgICAgICBmZmx1c2goX01fY2ZpbGUpOwogICAgICAgICAgdGhpcy0+ Y2xvc2UoKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IHZvaWQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpfTV9vcGVuX21vZGUoaW9zX2Jhc2U6Om9w ZW5tb2RlIF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 JiAsIGludCYgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBf X2NfbW9kZSkKICAgIHsKICAgICAgYm9vbCBfX3Rlc3RiID0gX19tb2RlICYgaW9zX2Jhc2U6OmJp bmFyeTsKICAgICAgYm9vbCBfX3Rlc3RpID0gX19tb2RlICYgaW9zX2Jhc2U6OmluOwogICAgICBi b29sIF9fdGVzdG8gPSBfX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICBib29sIF9fdGVzdHQg PSBfX21vZGUgJiBpb3NfYmFzZTo6dHJ1bmM7CiAgICAgIGJvb2wgX190ZXN0YSA9IF9fbW9kZSAm IGlvc19iYXNlOjphcHA7CgogICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0 dCAmJiAhX190ZXN0YSkKICAgICAgICBzdHJjcHkoX19jX21vZGUsICJ3Iik7CiAgICAgIGlmICgh X190ZXN0aSAmJiBfX3Rlc3RvICYmICFfX3Rlc3R0ICYmIF9fdGVzdGEpCiAgICAgICAgc3RyY3B5 KF9fY19tb2RlLCAiYSIpOwogICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiBfX3Rlc3R0 ICYmICFfX3Rlc3RhKQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInciKTsKICAgICAgaWYgKF9f dGVzdGkgJiYgIV9fdGVzdG8gJiYgIV9fdGVzdHQgJiYgIV9fdGVzdGEpCiAgICAgICAgc3RyY3B5 KF9fY19tb2RlLCAiciIpOwogICAgICBpZiAoX190ZXN0aSAmJiBfX3Rlc3RvICYmICFfX3Rlc3R0 ICYmICFfX3Rlc3RhKQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInIrIik7CiAgICAgIGlmIChf X3Rlc3RpICYmIF9fdGVzdG8gJiYgX190ZXN0dCAmJiAhX190ZXN0YSkKICAgICAgICBzdHJjcHko X19jX21vZGUsICJ3KyIpOwogICAgICBpZiAoX190ZXN0YikKICAgICAgICBzdHJjYXQoX19jX21v ZGUsICJiIik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fYmFzaWNf ZmlsZTxfQ2hhclQ+KgogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19vcGVuKF9fY19maWxl X3R5cGUqIF9fZmlsZSwgaW9zX2Jhc2U6Om9wZW5tb2RlKQogICAgewogICAgICBfX2Jhc2ljX2Zp bGUqIF9fcmV0ID0gX19udWxsOwoKICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19maWxl KQogICAgICAgIHsKICAgICAgICAgIF9NX2NmaWxlID0gX19maWxlOwogICAgICAgICAgX01fY2Zp bGVfY3JlYXRlZCA9IGZhbHNlOwogICAgICAgICAgX19yZXQgPSB0aGlzOwogICAgICAgIH0KCiAg ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg X0NoYXJUCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX2dldGMoKQogICAgewogICAgICBy ZXR1cm4gZ2V0YyAoX01fY2ZpbGUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBfQ2hhclQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfdW5nZXRjKF9DaGFyVCBf X3MpCiAgICB7CiAgICAgIHJldHVybiB1bmdldGMgKF9fcywgX01fY2ZpbGUpOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPioKICAgIF9f YmFzaWNfZmlsZTxfQ2hhclQ+OjpvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9w ZW5tb2RlIF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCApCiAgICB7 CiAgICAgIF9fYmFzaWNfZmlsZSogX19yZXQgPSBfX251bGw7CiAgICAgIGludCBfX3BfbW9kZSA9 IDA7CiAgICAgIGludCBfX3J3X21vZGUgPSAwOwogICAgICBjaGFyIF9fY19tb2RlWzRdOwoKICAg ICAgX01fb3Blbl9tb2RlKF9fbW9kZSwgX19wX21vZGUsIF9fcndfbW9kZSwgX19jX21vZGUpOwoK ICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKChfTV9j ZmlsZSA9IGZvcGVuKF9fbmFtZSwgX19jX21vZGUpKSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIF9NX2NmaWxlX2NyZWF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgIF9fcmV0ID0gdGhpczsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6 aXNfb3BlbigpIHsgcmV0dXJuIF9NX2NmaWxlICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgX19iYXNpY19maWxlPF9DaGFyVD4qCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJU Pjo6Y2xvc2UoKQogICAgewogICAgICBfX2Jhc2ljX2ZpbGUqIF9fcmV0dmFsID0gc3RhdGljX2Nh c3Q8X19iYXNpY19maWxlKj4oX19udWxsKTsKICAgICAgaWYgKF9NX2NmaWxlX2NyZWF0ZWQgJiYg ZmNsb3NlKF9NX2NmaWxlKSkKICAgICAgICBfX3JldHZhbCA9IHRoaXM7CiAgICAgIHJldHVybiBf X3JldHZhbDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc3RyZWFtc2l6 ZQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6 ZSBfX24pCiAgICB7IHJldHVybiBmcmVhZChfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHN0cmVhbXNpemUKICAgIF9fYmFzaWNfZmlsZTxf Q2hhclQ+Ojp4c3B1dG4oY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgeyBy ZXR1cm4gZndyaXRlKF9fcywgMSwgX19uLCBfTV9jZmlsZSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgc3RyZWFtb2ZmCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c2Vla29m ZihzdHJlYW1vZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlICkKICAgIHsgZnNlZWsoX01f Y2ZpbGUsIF9fb2ZmLCBfX3dheSk7IHJldHVybiBmdGVsbChfTV9jZmlsZSk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc3RyZWFtb2ZmCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJU Pjo6c2Vla3BvcyhzdHJlYW1vZmYgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgKQogICAgeyBmc2VlayhfTV9jZmlsZSwgX19wb3MsIGlv c19iYXNlOjpiZWcpOyByZXR1cm4gZnRlbGwoX01fY2ZpbGUpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGludAogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5bmMoKQogICAg eyByZXR1cm4gZmZsdXNoKF9NX2NmaWxlKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW50CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6b3ZlcmZsb3coaW50ICkKICAgIHsg cmV0dXJuICgtMSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAg X19iYXNpY19maWxlPF9DaGFyVD46OnVuZGVyZmxvdygpCiAgICB7IHJldHVybiAoLTEpOyB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIF9fYmFzaWNfZmlsZTxfQ2hh clQ+Ojp1ZmxvdygpCiAgICB7IHJldHVybiAoLTEpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBpbnQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpwYmFja2ZhaWwoaW50ICkK ICAgIHsgcmV0dXJuICgtMSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHN0 cmVhbWJ1ZioKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzZXRidWYoX0NoYXJUKiAsIGludCAp CiAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0PHN0cmVhbWJ1Zio+KHRoaXMpOyB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+ Ojpkb2FsbG9jYXRlKCkKICAgIHsgcmV0dXJuICgtMSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIHN0cmVhbXNpemUKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfcmVh ZChfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7IHJldHVybiBmcmVhZChfX3MsIDEs IF9fbiwgX01fY2ZpbGUpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzdHJl YW1zaXplCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX3dyaXRlKGNvbnN0IF9DaGFyVCog X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsgcmV0dXJuIGZ3cml0ZShfX3MsIDEsIF9fbiwgX01f Y2ZpbGUpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzdHJlYW1vZmYKICAg IF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfc2VlayhzdHJlYW1vZmYgX19wb3MsIGlvc19iYXNl OjpzZWVrZGlyIF9fd2F5KQogICAgewogICAgICBmc2VlayhfTV9jZmlsZSwgX19wb3MsIF9fd2F5 KTsKICAgICAgcmV0dXJuIGZ0ZWxsKF9NX2NmaWxlKTsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGludAogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19jbG9zZSgp CiAgICB7IHJldHVybiBmY2xvc2UoX01fY2ZpbGUpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBpbnQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfc3RhdCh2b2lkKiAp CiAgICB7IHJldHVybiAoLTEpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp bnQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzaG93bWFueWMoKQogICAgeyByZXR1cm4gKC0x KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgX19iYXNpY19m aWxlPF9DaGFyVD46OmltYnVlKHZvaWQqICkgeyB9Cn0KIyAyNTEgIi91c3IvbG9jYWwvZ2NjLTMu MC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2ZpbGUuaCIgMiAzCiMgNDIgIi91c3IvbG9jYWwv Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDIgMwojIDEgIi91c3Iv bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzCiMgNDMg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL2d0aHIuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZiA6 IHB1YmxpYyBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMg dHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBl IGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBw b3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2Zm X3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNf dHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJf dHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIF9fYmFzaWNf ZmlsZTxjaGFyX3R5cGU+IF9fZmlsZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0 c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKICAgICAgdHlwZWRlZiBjb2RlY3Z0PGNo YXJfdHlwZSwgY2hhciwgX19zdGF0ZV90eXBlPiBfX2NvZGVjdnRfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7CiAgICAgIHR5cGVk ZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgaW9z X2Jhc2U7CgogICAgcHJpdmF0ZToKCgogICAgICBfX2ZpbGVfdHlwZSogX01fZmlsZTsKCgogICAg ICBfX3N0YXRlX3R5cGUgX01fc3RhdGVfY3VyOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3RhdGVf YmVnOwoKCiAgICAgIF9fY19sb2NrIF9NX2xvY2s7CgoKICAgICAgYm9vbCBfTV9idWZfYWxsb2Nh dGVkOwoKCiAgICAgIGJvb2wgX01fbGFzdF9vdmVyZmxvd2VkOwoKICAgIHB1YmxpYzoKCiAgICAg IGJhc2ljX2ZpbGVidWYoKTsKCgogICAgICBiYXNpY19maWxlYnVmKF9fY19maWxlX3R5cGUqIF9f ZiwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICBpbnRfdHlw ZSBfX3MgPSBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oODE5MikpOwoKICAgICAgdmlydHVhbAogICAg ICB+YmFzaWNfZmlsZWJ1ZigpCiAgICAgIHsKICAgICAgICB0aGlzLT5jbG9zZSgpOwogICAgICAg IF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgYm9vbAogICAgICBp c19vcGVuKHZvaWQpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbGUgPyBfTV9maWxlLT5pc19vcGVuKCkg OiBmYWxzZTsgfQoKICAgICAgX19maWxlYnVmX3R5cGUqCiAgICAgIG9wZW4oY29uc3QgY2hhciog X19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKTsKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgog ICAgICBjbG9zZSh2b2lkKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQKICAgICAgX01fYWxs b2NhdGVfaW50ZXJuYWxfYnVmZmVyKCk7CgogICAgICB2b2lkCiAgICAgIF9NX2Rlc3Ryb3lfaW50 ZXJuYWxfYnVmZmVyKCk7CgogICAgICB2b2lkCiAgICAgIF9NX2FsbG9jYXRlX3BiYWNrX2J1ZmZl cigpOwoKCiAgICAgIHZvaWQKICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOwoKCiAgICAgIHZpcnR1 YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWModm9pZCk7CgoKCgoKICAgICAgdmlydHVhbCBp bnRfdHlwZQogICAgICB1bmRlcmZsb3codm9pZCk7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAg ICAgIHBiYWNrZmFpbChpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7CiMgMTQ4ICIvdXNy L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAzCiAgICAg IHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6 ZW9mKCkpOwojIDE1OCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2ZzdHJlYW0uaCIgMwogICAgICBpbnRfdHlwZQogICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coaW50 X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkpOwoKICAgICAgdmlydHVhbCBfX3N0cmVhbWJ1Zl90 eXBlKgogICAgICBzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAg IHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6 OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9 IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoKICAgICAgdmlydHVhbCBwb3NfdHlwZQog ICAgICBzZWVrcG9zKHBvc190eXBlIF9fcG9zLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVu bW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAgICAgIHZpcnR1 YWwgaW50CiAgICAgIHN5bmModm9pZCkKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0cHV0ID0g X01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsKICAgICAgICBpZiAoX190ZXN0 cHV0KQogICAgICAgICAgewoKCiAgICAgICAgICAgIF9NX2ZpbGUtPnN5bmMoKTsKCgoKCgogICAg ICAgICAgICBzdHJlYW1vZmYgX19jdXIgPSBfTV9maWxlLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjpj dXIpOwogICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9jdXIgLSBfTV9vdXRfYmVn OwogICAgICAgICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coKTsKICAgICAgICAgICAgX01fZmlsZS0+ c2Vla3BvcyhfX2N1ciArIF9fb2ZmKTsKICAgICAgICAgIH0KICAgICAgICBfTV9sYXN0X292ZXJm bG93ZWQgPSBmYWxzZTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgdmlydHVhbCB2 b2lkCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgdmlydHVhbCBzdHJl YW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAg IHsKICAgICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKCiAgICAgICAgaWYgKF9NX3BiYWNrX2lu aXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIHdoaWxlIChfX3JldCA8IF9fbiAmJiBfTV9pbl9j dXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKl9fcyA9ICpf TV9pbl9jdXI7CiAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgKytfX3M7 CiAgICAgICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAg IF9NX3BiYWNrX2Rlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICBpZiAoX19yZXQgPCBfX24p CiAgICAgICAgICBfX3JldCArPSBfX3N0cmVhbWJ1Zl90eXBlOjp4c2dldG4oX19zLCBfX24gLSBf X3JldCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICB2aXJ0dWFsIHN0cmVh bXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK ICAgICAgewogICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsKICAgICAgICByZXR1cm4gX19zdHJl YW1idWZfdHlwZTo6eHNwdXRuKF9fcywgX19uKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBf TV9vdXRwdXRfdW5zaGlmdCgpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbSA6IHB1YmxpYyBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAg IHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+ IF9faXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2Zp bGVidWY7CgogICAgcHVibGljOgoKICAgICAgYmFzaWNfaWZzdHJlYW0oKQogICAgICA6IF9faXN0 cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7IHRoaXMtPmluaXQoJl9NX2Zp bGVidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pZnN0cmVhbShjb25zdCBjaGFy KiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCiAgICAgIDog X19pc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsKICAgICAgICB0aGlz LT5pbml0KCZfTV9maWxlYnVmKTsKICAgICAgICB0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKICAg ICAgfQoKICAgICAgfmJhc2ljX2lmc3RyZWFtKCkKICAgICAgeyB9CgoKICAgICAgX19maWxlYnVm X3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX2Zp bGVidWZfdHlwZSo+KCZfTV9maWxlYnVmKTsgfQoKICAgICAgYm9vbAogICAgICBpc19vcGVuKHZv aWQpIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9CgogICAgICB2b2lkCiAgICAgIG9w ZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6 OmluKQogICAgICB7CiAgICAgICAgaWYgKF9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlv c19iYXNlOjppbikgPT0gX19udWxsKQogICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKHZvaWQpCiAgICAgIHsK ICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbSA6IHB1 YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7 CgoKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9f ZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFp dHNfdHlwZT4gX19vc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19maWxlYnVmX3R5 cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CgogICAgICBiYXNpY19vZnN0cmVhbSgpCiAgICAg IDogX19vc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsgdGhpcy0+aW5p dCgmX01fZmlsZWJ1Zik7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29mc3RyZWFtKGNv bnN0IGNoYXIqIF9fcywKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f bW9kZSA9IGlvc19iYXNlOjpvdXR8aW9zX2Jhc2U6OnRydW5jKQogICAgICA6IF9fb3N0cmVhbV90 eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01f ZmlsZWJ1Zik7CiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAg IH5iYXNpY19vZnN0cmVhbSgpCiAgICAgIHsgfQoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAg ICByZGJ1Zih2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90 eXBlKj4oJl9NX2ZpbGVidWYpOyB9CgogICAgICBib29sCiAgICAgIGlzX29wZW4odm9pZCkgeyBy ZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KCiAgICAgIHZvaWQKICAgICAgb3Blbihjb25z dCBjaGFyKiBfX3MsCiAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i YXNlOjpvdXQgfCBpb3NfYmFzZTo6dHJ1bmMpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVi dWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19iYXNlOjpvdXQpKQogICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIGNsb3Nl KHZvaWQpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAgICAgICAg IHNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19mc3Ry ZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1 YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJh aXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRf dHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5 cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBl IG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0 c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcl90eXBl LCB0cmFpdHNfdHlwZT4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxj aGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAg ICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CgogICAgICBiYXNpY19m c3RyZWFtKCkKICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAg ICAgIHsgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJh c2ljX2ZzdHJlYW0oY29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICA6 IF9faW9zdHJlYW1fdHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkKICAgICAgewogICAgICAgIHRo aXMtPmluaXQoJl9NX2ZpbGVidWYpOwogICAgICAgIHRoaXMtPm9wZW4oX19zLCBfX21vZGUpOwog ICAgICB9CgogICAgICB+YmFzaWNfZnN0cmVhbSgpCiAgICAgIHsgfQoKCiAgICAgIF9fZmlsZWJ1 Zl90eXBlKgogICAgICByZGJ1Zih2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0 PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9CgogICAgICBib29sCiAgICAgIGlzX29w ZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KCiAgICAgIHZvaWQKICAg ICAgb3Blbihjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f bW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsKICAgICAgICBpZiAo IV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpCiAgICAgICAgICBzZXRzdGF0ZShpb3NfYmFz ZTo6ZmFpbGJpdCk7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgY2xvc2Uodm9pZCkKICAgICAg ewogICAgICAgIGlmICghX01fZmlsZWJ1Zi5jbG9zZSgpKQogICAgICAgICAgc2V0c3RhdGUoaW9z X2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CiAgICB9Owp9CgoKCgoKIyAxICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9mc3RyZWFtLnRjYyIgMSAzCiMgMzcgIi91c3IvbG9j YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAzCm5hbWVzcGFjZSBz dGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZv aWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9hbGxvY2F0ZV9m aWxlKCkKICAgIHsKICAgICAgaWYgKCFfTV9maWxlKQogICAgICAgIHsKICAgICAgICAgIF9NX2J1 Zl91bmlmaWVkID0gdHJ1ZTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9NX2ZpbGUgPSBu ZXcgX19maWxlX3R5cGUoJl9NX2xvY2spOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBkZWxldGUgX01fZmlsZTsKICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpCiAgICB7CiAgICAgIGlm ICghX01fYnVmICYmIF9NX2J1Zl9zaXplX29wdCkKICAgICAgICB7CiAgICAgICAgICBfTV9idWZf c2l6ZSA9IF9NX2J1Zl9zaXplX29wdDsKCgogICAgICAgICAgdHJ5IHsgX01fYnVmID0gbmV3IGNo YXJfdHlwZVtfTV9idWZfc2l6ZV07IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGRlbGV0ZSBbXSBfTV9idWY7CiAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICAgIF9NX2J1Zl9hbGxvY2F0ZWQgPSB0cnVlOwogICAgICAgIH0K ICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9kZXN0cm95 X2ludGVybmFsX2J1ZmZlcigpCiAgICB7CiAgICAgIGlmIChfTV9idWZfYWxsb2NhdGVkKQogICAg ICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV9idWY7CiAgICAgICAgICBfTV9idWYgPSBfX251 bGw7CiAgICAgICAgICBfTV9idWZfYWxsb2NhdGVkID0gZmFsc2U7CiAgICAgICAgICB0aGlzLT5z ZXRnKF9fbnVsbCwgX19udWxsLCBfX251bGwpOwogICAgICAgICAgdGhpcy0+c2V0cChfX251bGws IF9fbnVsbCk7CiAgICAgICAgfQogICAgfQoKIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBfTV9hbGxvY2F0ZV9wYmFja19idWZmZXIoKQogICAgewogICAgICBpZiAoIV9NX3Bi YWNrICYmIF9NX3BiYWNrX3NpemUpCiAgICAgICAgewoKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7IF9NX3BiYWNrID0gbmV3IGNoYXJfdHlwZVtfTV9wYmFja19zaXplXTsgfQogICAgICAgICAg Y2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGVsZXRlIFtdIF9NX3BiYWNr OwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxl YnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgYmFzaWNfZmlsZWJ1ZigpCiAgICA6IF9fc3RyZWFt YnVmX3R5cGUoKSwgX01fZmlsZShfX251bGwpLCBfTV9zdGF0ZV9jdXIoX19zdGF0ZV90eXBlKCkp LAogICAgX01fc3RhdGVfYmVnKF9fc3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZChmYWxz ZSksCiAgICBfTV9sYXN0X292ZXJmbG93ZWQoZmFsc2UpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIGJhc2ljX2ZpbGVidWYoX19jX2ZpbGVfdHlwZSogX19mLCBpb3NfYmFz ZTo6b3Blbm1vZGUgX19tb2RlLCBpbnRfdHlwZSBfX3MpCiAgICA6IF9fc3RyZWFtYnVmX3R5cGUo KSwgX01fZmlsZShfX251bGwpLCBfTV9zdGF0ZV9jdXIoX19zdGF0ZV90eXBlKCkpLAogICAgX01f c3RhdGVfYmVnKF9fc3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZChmYWxzZSksCiAgICBf TV9sYXN0X292ZXJmbG93ZWQoZmFsc2UpCiAgICB7CiAgICAgIF9NX2FsbG9jYXRlX2ZpbGUoKTsK ICAgICAgX01fZmlsZS0+c3lzX29wZW4oX19mLCBfX21vZGUpOwogICAgICBpZiAodGhpcy0+aXNf b3BlbigpKQogICAgICAgIHsKICAgICAgICAgIF9NX21vZGUgPSBfX21vZGU7CiAgICAgICAgICBp ZiAoX19zKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gX19z OwogICAgICAgICAgICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpOwogICAgICAgICAg ICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX2Fs bG9jYXRlX3BiYWNrX2J1ZmZlcigpOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U cmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkK ICAgIHsKICAgICAgX19maWxlYnVmX3R5cGUgKl9fcmV0ID0gX19udWxsOwogICAgICBpZiAoIXRo aXMtPmlzX29wZW4oKSkKICAgICAgICB7CiAgICAgICAgICBfTV9hbGxvY2F0ZV9maWxlKCk7CiAg ICAgICAgICBfTV9maWxlLT5vcGVuKF9fcywgX19tb2RlKTsKICAgICAgICAgIGlmICh0aGlzLT5p c19vcGVuKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9hbGxvY2F0ZV9pbnRlcm5h bF9idWZmZXIoKTsKICAgICAgICAgICAgICBfTV9hbGxvY2F0ZV9wYmFja19idWZmZXIoKTsKICAg ICAgICAgICAgICBfTV9tb2RlID0gX19tb2RlOwoKCiAgICAgICAgICAgICAgX01fc2V0X2luZGV0 ZXJtaW5hdGUoKTsKICAgICAgICAgICAgICBpZiAoX19tb2RlICYgaW9zX2Jhc2U6OmF0ZQogICAg ICAgICAgICAgICAgICAmJiB0aGlzLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjplbmQsIF9fbW9kZSkg PCAwKQogICAgICAgICAgICAgICAgdGhpcy0+Y2xvc2UoKTsKICAgICAgICAgICAgICBfX3JldCA9 IHRoaXM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf ZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKICAgIGJhc2ljX2ZpbGVi dWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBjbG9zZSgpCiAgICB7CiAgICAgIF9fZmlsZWJ1Zl90 eXBlICpfX3JldCA9IF9fbnVsbDsKICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSkKICAgICAgICB7 CiAgICAgICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9N X291dF9lbmQ7CiAgICAgICAgICBpZiAoX190ZXN0cHV0KQogICAgICAgICAgICBfTV9yZWFsbHlf b3ZlcmZsb3codHJhaXRzX3R5cGU6OmVvZigpKTsKCgogICAgICAgICAgX01fcGJhY2tfZGVzdHJv eSgpOwojIDE5MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnN0cmVh bS50Y2MiIDMKICAgICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUoMCk7CiAgICAg ICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwoKICAgICAgICAgIGlmIChfTV9wYmFj aykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGRlbGV0ZSBbXSBfTV9wYmFjazsKICAgICAg ICAgICAgICBfTV9wYmFjayA9IF9fbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgX19yZXQg PSB0aGlzOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9NX2ZpbGUpCiAgICAgICAgewogICAgICAg ICAgZGVsZXRlIF9NX2ZpbGU7CiAgICAgICAgICBfTV9maWxlID0gX19udWxsOwogICAgICAgIH0K ICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVybiBfX3JldDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry ZWFtc2l6ZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNob3dtYW55 YygpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAtMTsKICAgICAgYm9vbCBfX3Rlc3Rp biA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CgogICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAg ewogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBmYWxzZTsKICAgICAgICAgIGlmIChfTV9pbl9j dXIgPj0gX01faW5fZW5kKQogICAgICAgICAgICBfX3Rlc3Rlb2YgPSB0aGlzLT51bmRlcmZsb3co KSA9PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAg ICAgICAgX19yZXQgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgfQogICAgICBfTV9s YXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxlYnVm PF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgdW5kZXJmbG93KCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFp dHNfdHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6 OmluOwogICAgICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwoKCiAg ICAgIGlmIChfX3Rlc3RpbikKICAgICAgICB7CgoKCiAgICAgICAgICBpZiAoX01fcGJhY2tfaW5p dCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsKICAgICAg ICAgICAgICBpZiAoX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgICAgICAgcmV0dXJu IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICAgICAgfQoKICAg ICAgICAgIGJvb2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1 cjsKICAgICAgICAgIGJvb2wgX190ZXN0aW5pdCA9IF9NX2lzX2luZGV0ZXJtaW5hdGUoKTsKCgog ICAgICAgICAgaWYgKF9fdGVzdGdldCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChf X3Rlc3RvdXQpCiAgICAgICAgICAgICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coKTsKCgoKCiAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX01fZmlsZS0+c2Vla29mZihfTV9pbl9jdXIg LSBfTV9pbl9iZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpj dXIsIGlvc19iYXNlOjppbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX190ZXN0aW5p dCB8fCBfX3Rlc3RnZXQpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf X3NpemUgPSBfTV9maWxlLT54c2dldG4oX01faW5fYmVnLCBfTV9idWZfc2l6ZSk7CiAgICAgICAg ICAgICAgaWYgKDAgPCBfX3NpemUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IF9NX3NldF9kZXRlcm1pbmF0ZShfX3NpemUpOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0 b3V0KQogICAgICAgICAgICAgICAgICAgIF9NX291dF9jdXIgPSBfTV9pbl9jdXI7CiAgICAgICAg ICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwoK CgoKCgogICAgICAgICAgICAgICAgICBzdHJlYW1vZmYgX19wID0gX01fZmlsZS0+c2Vla29mZigw IC0gX19zaXplLCBpb3NfYmFzZTo6Y3VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW4pOwogICAgICAgICAgICAgICAgICBpZiAo X19wID09IC0xKQogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgfQoK CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBfTV9sYXN0 X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxlYnVmPF9D aGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgcGJhY2tmYWlsKGludF90eXBlIF9faSkKICAgIHsKICAgICAgaW50X3R5cGUgX19y ZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYg aW9zX2Jhc2U6OmluOwoKICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgIHsKICAgICAgICAgIGJv b2wgX190ZXN0cGIgPSBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CiAgICAgICAgICBjaGFyX3R5cGUg X19jID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2kpOwogICAgICAgICAgYm9vbCBfX3Rl c3Rlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19pLCBfX3JldCk7CgogICAgICAgICAg aWYgKF9fdGVzdHBiKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RvdXQg PSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVxID0g dHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0xXSk7CgoKCiAgICAgICAgICAgICAg aWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0ZXEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIC0tX01faW5fY3VyOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAg ICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBf X2k7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZW9mKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAg ICAgICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7 CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmICghX190ZXN0ZW9mKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICAg ICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7CiAgICAg ICAgICAgICAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAqX01faW5f Y3VyID0gX19jOwogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZWVrb2ZmKC0xLCBpb3NfYmFzZTo6Y3VyKTsKICAgICAgICAgICAgICB0aGlz LT51bmRlcmZsb3coKTsKICAgICAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX19jLCAqX01faW5f Y3VyKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFj a19jcmVhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgICpfTV9pbl9jdXIgPSBfX2M7CiAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0 c190eXBlOjpub3RfZW9mKF9faSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9NX2xh c3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8 X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJh aXRzPjo6CiAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9f cmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9j dXIgJiYgX01fb3V0X2N1ciA8IF9NX2J1ZiArIF9NX2J1Zl9zaXplOwogICAgICBib29sIF9fdGVz dG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwoKICAgICAgaWYgKF9fdGVzdG91dCkKICAg ICAgICB7CiAgICAgICAgICBpZiAoX190ZXN0cHV0KQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgKl9NX291dF9jdXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAg ICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5 cGU6Om5vdF9lb2YoX19jKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg ICBfX3JldCA9IHRoaXMtPl9NX3JlYWxseV9vdmVyZmxvdyhfX2MpOwogICAgICAgIH0KCiAgICAg IF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2Zp bGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBfTV9yZWFsbHlfb3ZlcmZsb3coaW50X3R5cGUgX19jKQogICAgewog ICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rl c3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOwogICAgICBib29s IF9fdGVzdHVuYnVmZmVyZWQgPSBfTV9maWxlICYmICFfTV9idWZfc2l6ZTsKCiAgICAgIGlmIChf X3Rlc3RwdXQgfHwgX190ZXN0dW5idWZmZXJlZCkKICAgICAgICB7CgogICAgICAgICAgaW50IF9f cGxlbiA9IF9NX291dF9lbmQgLSBfTV9vdXRfYmVnOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xl biA9IDA7CgogICAgICAgICAgaWYgKF9fcGxlbikKICAgICAgICAgICAgX19sZW4gPSBfTV9maWxl LT54c3B1dG4oX01fb3V0X2JlZywgX19wbGVuKTsKCiAgICAgICAgICBpZiAoX19jICE9dHJhaXRz X3R5cGU6OmVvZigpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fcGVu ZGluZyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICBfX2xl biArPSBfTV9maWxlLT54c3B1dG4oJl9fcGVuZGluZywgMSk7CiAgICAgICAgICAgICAgKytfX3Bs ZW47CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIF9NX2ZpbGUtPnN5bmMoKTsKICAgICAgICAg IGlmIChfX2xlbiA9PSBfX3BsZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9zZXRf aW5kZXRlcm1pbmF0ZSgpOwogICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9l b2YoX19jKTsKICAgICAgICAgICAgfQojIDQ3MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv ZysrLXYzL2JpdHMvZnN0cmVhbS50Y2MiIDMKICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZs b3dlZCA9IHRydWU7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U cmFpdHM+OjpfX3N0cmVhbWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAg ICAgIGlmICghdGhpcy0+aXNfb3BlbigpICYmIF9fcyA9PSAwICYmIF9fbiA9PSAwKQogICAgICAg IF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgIGVsc2UgaWYgKF9fcyAmJiBfX24pCiAgICAgICAg ewoKCgoKCiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwoKCiAgICAgICAg ICBfTV9idWYgPSBfX3M7CiAgICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSBfTV9idWZfc2l6ZSA9 IF9fbjsKICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CgoKICAgICAgICAgIF9NX2Fs bG9jYXRlX3BiYWNrX2J1ZmZlcigpOwogICAgICAgIH0KICAgICAgX01fbGFzdF9vdmVyZmxvd2Vk ID0gZmFsc2U7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0 cz46OnBvc190eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vl a29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIGlvc19iYXNlOjpv cGVubW9kZSBfX21vZGUpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2Zm X3R5cGUoLTEpKTsKICAgICAgYm9vbCBfX3Rlc3RvcGVuID0gdGhpcy0+aXNfb3BlbigpOwogICAg ICBib29sIF9fdGVzdGluID0gX19tb2RlICYgaW9zX2Jhc2U6OmluICYmIF9NX21vZGUgJiBpb3Nf YmFzZTo6aW47CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX19tb2RlICYgaW9zX2Jhc2U6Om91dCAm JiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKCgogICAgICBpbnQgX193aWR0aCA9IHVzZV9mYWNl dDxfX2NvZGVjdnRfdHlwZT4oX01fYnVmX2xvY2FsZSkuZW5jb2RpbmcoKTsKICAgICAgaWYgKF9f d2lkdGggPCAwKQogICAgICAgIF9fd2lkdGggPSAwOwogICAgICBib29sIF9fdGVzdGZhaWwgPSBf X29mZiAhPSAwICYmIF9fd2lkdGggPD0gMDsKCiAgICAgIGlmIChfX3Rlc3RvcGVuICYmICFfX3Rl c3RmYWlsICYmIChfX3Rlc3RpbiB8fCBfX3Rlc3RvdXQpKQogICAgICAgIHsKCiAgICAgICAgICBf TV9wYmFja19kZXN0cm95KCk7CgogICAgICAgICAgaWYgKF9fd2F5ICE9IGlvc19iYXNlOjpjdXIg fHwgX19vZmYgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9fY29t cHV0ZWRfb2ZmID0gX193aWR0aCAqIF9fb2ZmOwoKICAgICAgICAgICAgICBib29sIF9fdGVzdGdl dCA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9lbmQ7CiAgICAgICAgICAgICAgYm9v bCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOwoKCiAg ICAgICAgICAgICAgaWYgKF9fdGVzdHB1dCB8fCBfTV9sYXN0X292ZXJmbG93ZWQpCiAgICAgICAg ICAgICAgICB7CgogICAgICAgICAgICAgICAgICB0aGlzLT5zeW5jKCk7CgogICAgICAgICAgICAg ICAgICBfTV9vdXRwdXRfdW5zaGlmdCgpOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAg ICAgZWxzZSBpZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCiAgICAgICAg ICAgICAgICBfX2NvbXB1dGVkX29mZiArPSBfTV9pbl9jdXIgLSBfTV9pbl9iZWc7CgogICAgICAg ICAgICAgIF9fcmV0ID0gX01fZmlsZS0+c2Vla29mZihfX2NvbXB1dGVkX29mZiwgX193YXksIF9f bW9kZSk7CiAgICAgICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAgICAg fQoKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3JldCA9IF9N X2ZpbGUtPnNlZWtvZmYoX19vZmYsIGlvc19iYXNlOjpjdXIsIF9fbW9kZSk7CiAgICAgICAgICAg ICAgX19yZXQgKz0gbWF4KF9NX291dF9jdXIsIF9NX2luX2N1cikgLSBfTV9idWY7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICBy ZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAg IGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcG9zKHBvc190eXBlIF9f cG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewogICAgICBwb3NfdHlwZSBfX3Jl dDsKICAgICAgb2ZmX3R5cGUgX19vZmYgPSBfX3BvczsKCiAgICAgIF9fcmV0ID0gdGhpcy0+c2Vl a29mZihfX29mZiwgaW9zX2Jhc2U6OmJlZywgX19tb2RlKTsKCiAgICAgIF9NX2xhc3Rfb3ZlcmZs b3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9vdXRwdXRfdW5zaGlmdCgpCiAgICB7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFz aWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19s b2MpCiAgICB7CiAgICAgIGJvb2wgX190ZXN0YmVnID0gZ3B0cigpID09IGViYWNrKCkgJiYgcHB0 cigpID09IHBiYXNlKCk7CgogICAgICBpZiAoX190ZXN0YmVnICYmIF9NX2J1Zl9sb2NhbGUgIT0g X19sb2MpCiAgICAgICAgewogICAgICAgICAgX01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICAg ICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAgICB9CgoKCgoKICAgICAgX01fbGFz dF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICB9Cgp9CiMgNDIxICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAyIDMKIyAzMiAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2ZzdHJlYW0iIDIgMwojIDY1ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAyCiMgMSAiL3Vzci9sb2Nh bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2lzdHJlYW0iIDEgMwojIDY2ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAyCiMgMSAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL29zdHJlYW0iIDEgMwojIDY3ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAyCiMgMSAiL3Vz ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL3N0cmVhbWJ1ZiIgMSAzCiMgNjggIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9zdHJlYW1zLmgiIDIKIyAx ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaW9tYW5pcCIgMSAzCiMgMzEgIi91 c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pb21hbmlwIiAzCiMgMSAiL3Vzci9sb2Nh bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvbWFuaXAuaCIgMSAzCiMgMzggIi91 c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb21hbmlwLmgiIDMKCiMg MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2Jp dHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfaW9tYW5pcC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4w L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvbWFuaXAuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Z1bmN0aW9uYWwuaCIgMSAzCiMgMTkgIi91 c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDMK IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9jKytjb25maWcuaCIgMSAzCiMgMjAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDIxICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnVuY3Rpb25hbC5oIiAyIDMKIyAxICIvdXNy L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMg MzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5o IiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+ CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAg dHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBj bGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgdHlw ZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2Fy Z3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUg PGNsYXNzIF9UcD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs X1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj b25zdCB7IHJldHVybiBfX3ggKyBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3Bl cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f eCAtIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMgOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7IH0K fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC8gX195OyB9Cn07CgoKCnRlbXBsYXRl IDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlfZWxlbWVudChwbHVzPF9UcD4pIHsKICBy ZXR1cm4gX1RwKDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlf ZWxlbWVudChtdWx0aXBsaWVzPF9UcD4pIHsKICByZXR1cm4gX1RwKDEpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U cCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp IGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1RwIG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0 dXJuIF9feCA+IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3MgOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8IF9feTsg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBf VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u PF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3Qg X1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw LGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz dHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBi b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsK CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1Ymxp YyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29s PiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1 bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJv b2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBf X3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29u c3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRl PihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25l Z2F0ZQogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJz dF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJl ZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGlj aXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9 CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3Vt ZW50X3R5cGUmIF9feCwKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0 ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3By ZWQoX194LCBfX3kpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUg YmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkK ewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5j dGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90 ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1 bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9f eCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRf dHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3Bl cmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv bjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVl LCBfX3gpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0 b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25z dCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBf T3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFz dChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlw ZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVy biBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1 bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJv dGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2Fy Z3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYg X194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l bnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBf T3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJh dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194 LCB2YWx1ZSk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVy YXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29u c3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQy bmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5 cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0 dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CmNsYXNzIHVuYXJ5 X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6 YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0 aW9uMTo6cmVzdWx0X3R5cGU+CnsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9NX2ZuMTsKICBf T3BlcmF0aW9uMiBfTV9mbjI7CnB1YmxpYzoKICB1bmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRp b24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpCiAgICA6IF9NX2ZuMShfX3gpLCBfTV9m bjIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9y KCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9NX2ZuMShfTV9mbjIoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5X2NvbXBvc2U8X09w ZXJhdGlvbjEsX09wZXJhdGlvbjI+CmNvbXBvc2UxKGNvbnN0IF9PcGVyYXRpb24xJiBfX2ZuMSwg Y29uc3QgX09wZXJhdGlvbjImIF9fZm4yKQp7CiAgcmV0dXJuIHVuYXJ5X2NvbXBvc2U8X09wZXJh dGlvbjEsX09wZXJhdGlvbjI+KF9fZm4xLCBfX2ZuMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3Bl cmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgpjbGFzcyBiaW5h cnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24y Ojphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVy YXRpb24xOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX01fZm4xOwog IF9PcGVyYXRpb24yIF9NX2ZuMjsKICBfT3BlcmF0aW9uMyBfTV9mbjM7CnB1YmxpYzoKICBiaW5h cnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195 LAogICAgICAgICAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX3opCiAgICA6IF9NX2ZuMShf X3gpLCBfTV9mbjIoX195KSwgX01fZm4zKF9feikgeyB9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6 OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJn dW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fZm4xKF9NX2ZuMihfX3gpLCBf TV9mbjMoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBf T3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGluZSBiaW5hcnlfY29tcG9zZTxfT3Bl cmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPgpjb21wb3NlMihjb25zdCBfT3BlcmF0 aW9uMSYgX19mbjEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX2ZuMiwKICAgICAgICAgY29uc3QgX09w ZXJhdGlvbjMmIF9fZm4zKQp7CiAgcmV0dXJuIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9P cGVyYXRpb24yLF9PcGVyYXRpb24zPgogICAgKF9fZm4xLCBfX2ZuMiwgX19mbjMpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9m dW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3Rl ZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlf ZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3Vs dCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0Fy ZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0Fy ZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2lu dGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9f YmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S ZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsK cHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQg cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkK ICAgICAgOiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwg X0FyZzIgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5s aW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9m dW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2Jp bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw PiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KICBj b25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IGlkZW50aXR5IDogcHVibGljIF9JZGVu dGl0eTxfVHA+IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3Qg OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBl PiB7CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkg Y29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6 OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0 dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2Vs ZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vj b25kX3R5cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1Bh aXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVu YW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25z dCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+ IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFzdDxfUGFpcj4ge307CnRlbXBsYXRl IDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1YmxpYyBfU2VsZWN0Mm5kPF9QYWly PiB7fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2pl Y3Qxc3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzE+IHsKICBf QXJnMSBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiBfX3gsIGNvbnN0IF9BcmcyJikgY29uc3QgeyBy ZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1 Y3QgX1Byb2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0Fy ZzI+IHsKICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkg Y29uc3QgeyByZXR1cm4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9B cmcyPgpzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJvamVjdDFzdDxfQXJnMSwgX0FyZzI+ IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2plY3Qy bmQgOiBwdWJsaWMgX1Byb2plY3QybmQ8X0FyZzEsIF9BcmcyPiB7fTsKCgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IF9Db25zdGFudF92b2lkX2Z1biB7CiAgdHlwZWRlZiBfUmVz dWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3ZhbDsKCiAgX0NvbnN0YW50X3ZvaWRf ZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCByZXN1 bHRfdHlwZSYgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9Bcmd1bWVudD4Kc3RydWN0IF9Db25zdGFudF91bmFy eV9mdW4gewogIHR5cGVkZWYgX0FyZ3VtZW50IGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVz dWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3ZhbDsKCiAgX0NvbnN0YW50X3VuYXJ5 X2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVz dWx0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50JikgY29uc3QgeyByZXR1cm4gX01f dmFsOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZzEsIGNsYXNzIF9B cmcyPgpzdHJ1Y3QgX0NvbnN0YW50X2JpbmFyeV9mdW4gewogIHR5cGVkZWYgX0FyZzEgZmlyc3Rf YXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5 cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICBfUmVzdWx0IF9NX3ZhbDsKCiAgX0NvbnN0YW50 X2JpbmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3Qg cmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJnMiYpIGNvbnN0 IHsKICAgIHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0 cnVjdCBjb25zdGFudF92b2lkX2Z1biA6IHB1YmxpYyBfQ29uc3RhbnRfdm9pZF9mdW48X1Jlc3Vs dD4gewogIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfQ29uc3RhbnRf dm9pZF9mdW48X1Jlc3VsdD4oX192KSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LAog ICAgICAgICAgY2xhc3MgX0FyZ3VtZW50ID0gX1Jlc3VsdD4Kc3RydWN0IGNvbnN0YW50X3VuYXJ5 X2Z1biA6IHB1YmxpYyBfQ29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsIF9Bcmd1bWVudD4Kewog IGNvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCiAgICA6IF9Db25zdGFudF91 bmFyeV9mdW48X1Jlc3VsdCwgX0FyZ3VtZW50PihfX3YpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNz IF9SZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJnMSA9IF9SZXN1bHQsCiAgICAgICAgICBjbGFz cyBfQXJnMiA9IF9BcmcxPgpzdHJ1Y3QgY29uc3RhbnRfYmluYXJ5X2Z1bgogIDogcHVibGljIF9D b25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4KewogIGNvbnN0YW50X2Jp bmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KQogICAgOiBfQ29uc3RhbnRfYmluYXJ5X2Z1bjxf UmVzdWx0LCBfQXJnMSwgX0FyZzI+KF9fdikge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0 PgppbmxpbmUgY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4gY29uc3RhbnQwKGNvbnN0IF9SZXN1 bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdmFsKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF91bmFyeV9mdW48X1Jl c3VsdCxfUmVzdWx0PiBjb25zdGFudDEoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4g Y29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0 LF9SZXN1bHQ+CmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25z dGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCgoKY2xh c3Mgc3VidHJhY3RpdmVfcm5nIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHVuc2lnbmVkIGludCwg dW5zaWduZWQgaW50PiB7CnByaXZhdGU6CiAgdW5zaWduZWQgaW50IF9NX3RhYmxlWzU1XTsKICBz aXplX3QgX01faW5kZXgxOwogIHNpemVfdCBfTV9pbmRleDI7CnB1YmxpYzoKICB1bnNpZ25lZCBp bnQgb3BlcmF0b3IoKSh1bnNpZ25lZCBpbnQgX19saW1pdCkgewogICAgX01faW5kZXgxID0gKF9N X2luZGV4MSArIDEpICUgNTU7CiAgICBfTV9pbmRleDIgPSAoX01faW5kZXgyICsgMSkgJSA1NTsK ICAgIF9NX3RhYmxlW19NX2luZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRleDFdIC0gX01fdGFibGVb X01faW5kZXgyXTsKICAgIHJldHVybiBfTV90YWJsZVtfTV9pbmRleDFdICUgX19saW1pdDsKICB9 CgogIHZvaWQgX01faW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQogIHsKICAgIHVuc2ln bmVkIGludCBfX2sgPSAxOwogICAgX01fdGFibGVbNTRdID0gX19zZWVkOwogICAgc2l6ZV90IF9f aTsKICAgIGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsrKSB7CiAgICAgICAgc2l6ZV90IF9f aWkgPSAoMjEgKiAoX19pICsgMSkgJSA1NSkgLSAxOwogICAgICAgIF9NX3RhYmxlW19faWldID0g X19rOwogICAgICAgIF9fayA9IF9fc2VlZCAtIF9fazsKICAgICAgICBfX3NlZWQgPSBfTV90YWJs ZVtfX2lpXTsKICAgIH0KICAgIGZvciAoaW50IF9fbG9vcCA9IDA7IF9fbG9vcCA8IDQ7IF9fbG9v cCsrKSB7CiAgICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCiAgICAgICAgICAg IF9NX3RhYmxlW19faV0gPSBfTV90YWJsZVtfX2ldIC0gX01fdGFibGVbKDEgKyBfX2kgKyAzMCkg JSA1NV07CiAgICB9CiAgICBfTV9pbmRleDEgPSAwOwogICAgX01faW5kZXgyID0gMzE7CiAgfQoK ICBzdWJ0cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IF9fc2VlZCkgeyBfTV9pbml0aWFsaXplKF9f c2VlZCk7IH0KICBzdWJ0cmFjdGl2ZV9ybmcoKSB7IF9NX2luaXRpYWxpemUoMTYxODAzMzk4dSk7 IH0KfTsKIyA1MzMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9m dW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9m dW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp Y2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0 IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnBy aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxj b25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0 IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko Y29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6 CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U cCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9f cGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3Qg eyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVu X3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBs aWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01f ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1 cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBt ZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gewpwdWJs aWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9m KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyBy ZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf QXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs YXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCos X0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9U cDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko Y29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2Yp KF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRl bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4x X3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoK ICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9m KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyBy ZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9B cmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh c3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJn LF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9U cDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gp OyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9m dW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChf VHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3Ap IGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgp Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90PHZvaWQsIF9U cD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1YmxpYzoKICBl eHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9m KF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IChfX3At PipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1Ymxp YyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9y ZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y KCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9U cDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVu X3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBj b25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBj b25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNv bnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFf dDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9p ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJn KSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkg Y29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2Yp KF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3Rf bWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNv bnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90 KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9w ZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShf X3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBf VHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6 IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25z dCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJn KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9m dW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9p ZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0 b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsg fQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgoKCgoKdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxfUmV0LF9UcD4g bWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsX1Rw PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3Rf bWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7 IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVu X3JlZihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9U cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0 X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBj b25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1 bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyBy ZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0 LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1 cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1Jl dCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVy biBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8 X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkK ICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1 bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsg cmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNz IF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1Jl dCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJl dHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxf UmV0LF9UcCxfQXJnPiBtZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJl dHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVm X3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29u c3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsg fQoKfQojIDIyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnVu Y3Rpb25hbC5oIiAyIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2lvbWFuaXAuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgc3RydWN0IF9SZXNldGlv c2ZsYWdzIHsgaW9zX2Jhc2U6OmZtdGZsYWdzIF9NX21hc2s7IH07CgogIGlubGluZSBfUmVzZXRp b3NmbGFncwogIHJlc2V0aW9zZmxhZ3MoaW9zX2Jhc2U6OmZtdGZsYWdzIF9fbWFzaykKICB7CiAg ICBfUmVzZXRpb3NmbGFncyBfX3g7CiAgICBfX3guX01fbWFzayA9IF9fbWFzazsKICAgIHJldHVy biBfX3g7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl YW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfUmVzZXRpb3NmbGFncyBfX2YpCiAgICB7CiAgICAg IF9faXMuc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIF9fZi5fTV9tYXNrKTsKICAgICAgcmV0 dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9SZXNldGlvc2ZsYWdzIF9fZikKICAgIHsK ICAgICAgX19vcy5zZXRmKGlvc19iYXNlOjpmbXRmbGFncygwKSwgX19mLl9NX21hc2spOwogICAg ICByZXR1cm4gX19vczsKICAgIH0KCgogIHN0cnVjdCBfU2V0aW9zZmxhZ3MgeyBpb3NfYmFzZTo6 Zm10ZmxhZ3MgX01fbWFzazsgfTsKCiAgaW5saW5lIF9TZXRpb3NmbGFncwogIHNldGlvc2ZsYWdz IChpb3NfYmFzZTo6Zm10ZmxhZ3MgX19tYXNrKQogIHsKICAgIF9TZXRpb3NmbGFncyBfX3g7CiAg ICBfX3guX01fbWFzayA9IF9fbWFzazsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1Ry YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lz LCBfU2V0aW9zZmxhZ3MgX19mKQogICAgewogICAgICBfX2lzLnNldGYoX19mLl9NX21hc2spOwog ICAgICByZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3Mg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I8 PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1NldGlvc2ZsYWdzIF9fZikK ICAgIHsKICAgICAgX19vcy5zZXRmKF9fZi5fTV9tYXNrKTsKICAgICAgcmV0dXJuIF9fb3M7CiAg ICB9CgoKICBzdHJ1Y3QgX1NldGJhc2UgeyBpbnQgX01fYmFzZTsgfTsKCiAgaW5saW5lIF9TZXRi YXNlCiAgc2V0YmFzZSAoaW50IF9fYmFzZSkKICB7CiAgICBfU2V0YmFzZSBfX3g7CiAgICBfX3gu X01fYmFzZSA9IF9fYmFzZTsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4m CiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0 YmFzZSBfX2YpCiAgICB7CiAgICAgIF9faXMuc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jh c2U6Om9jdCA6CiAgICAgICAgICAgICAgX19mLl9NX2Jhc2UgPT0gMTAgPyBpb3NfYmFzZTo6ZGVj IDoKICAgICAgICAgICAgICBfX2YuX01fYmFzZSA9PSAxNiA/IGlvc19iYXNlOjpoZXggOgogICAg ICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAg ICAgIHJldHVybiBfX2lzOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0YmFzZSBfX2YpCiAgICB7 CiAgICAgIF9fb3Muc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAg ICAgICAgICAgICBfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOgogICAgICAgICAg ICAgICAgX19mLl9NX2Jhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDoKICAgICAgICAgICAgICAg IGlvc19iYXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICAgIHJldHVy biBfX29zOwogICAgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IF9TZXRm aWxsIHsgX0NoYXJUIF9NX2M7IH07CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIF9TZXRm aWxsPF9DaGFyVD4KICAgIHNldGZpbGwoX0NoYXJUIF9fYykKICAgIHsKICAgICAgX1NldGZpbGw8 X0NoYXJUPiBfX3g7CiAgICAgIF9feC5fTV9jID0gX19jOwogICAgICByZXR1cm4gX194OwogICAg fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJU LF9UcmFpdHM+JiBfX2lzLCBfU2V0ZmlsbDxfQ2hhclQ+IF9fZikKICAgIHsKICAgICAgX19pcy5m aWxsKF9fZi5fTV9jKTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFz cyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRz PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9T ZXRmaWxsPF9DaGFyVD4gX19mKQogICAgewogICAgICBfX29zLmZpbGwoX19mLl9NX2MpOwogICAg ICByZXR1cm4gX19vczsKICAgIH0KCgogIHN0cnVjdCBfU2V0cHJlY2lzaW9uIHsgaW50IF9NX247 IH07CgogIGlubGluZSBfU2V0cHJlY2lzaW9uCiAgc2V0cHJlY2lzaW9uKGludCBfX24pCiAgewog ICAgX1NldHByZWNpc2lvbiBfX3g7CiAgICBfX3guX01fbiA9IF9fbjsKICAgIHJldHVybiBfX3g7 CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No YXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0cHJlY2lzaW9uIF9fZikKICAgIHsKICAgICAgX19pcy5w cmVjaXNpb24oX19mLl9NX24pOwogICAgICByZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGUg PGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9U cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19v cywgX1NldHByZWNpc2lvbiBfX2YpCiAgICB7CiAgICAgIF9fb3MucHJlY2lzaW9uKF9fZi5fTV9u KTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1Y3QgX1NldHcgeyBpbnQgX01fbjsg fTsKCiAgaW5saW5lIF9TZXR3CiAgc2V0dyhpbnQgX19uKQogIHsKICAgIF9TZXR3IF9feDsKICAg IF9feC5fTV9uID0gX19uOwogICAgcmV0dXJuIF9feDsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf Q2hhclQsIGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYK ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faXMsIF9TZXR3 IF9fZikKICAgIHsKICAgICAgX19pcy53aWR0aChfX2YuX01fbik7CiAgICAgIHJldHVybiBfX2lz OwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08 X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0dyBfX2YpCiAgICB7CiAgICAgIF9fb3Mud2lkdGgo X19mLl9NX24pOwogICAgICByZXR1cm4gX19vczsKICAgIH0KCn0KIyAzMiAiL3Vzci9sb2NhbC9n Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2lvbWFuaXAiIDIgMwojIDY5ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAyCiMgMSAiL3Vzci9sb2Nh bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2lvcyIgMSAzCiMgNzAgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9zdHJlYW1zLmgiIDIKIyAxICIvdXNyL2xvY2Fs L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvc3Ryc3RyZWFtIiAxIDMKIyAyMiAiL3Vz ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL3N0cnN0cmVhbSIgMwojIDEg Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9iYWNrd2FyZF93YXJu aW5nLmgiIDEgMwojIDIzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYmFja3dh cmQvc3Ryc3RyZWFtIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDI0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n KystdjMvYmFja3dhcmQvc3Ryc3RyZWFtIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEgMwojIDI1ICIvdXNyL2xvY2FsL2djYy0zLjAv aW5jbHVkZS9nKystdjMvYmFja3dhcmQvc3Ryc3RyZWFtIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyAyNiAiL3Vzci9s b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL3N0cnN0cmVhbSIgMiAzCiMgMSAi L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMSAz CiMgMjcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9zdHJzdHJl YW0iIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z dHJpbmcuaCIgMSAzCiMgMjggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNr d2FyZC9zdHJzdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKY2xhc3Mgc3Ryc3RyZWFt YnVmIDogcHVibGljIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiA+CnsK cHVibGljOgogIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX1RyYWl0czsKICB0eXBlZGVmIGJh c2ljX3N0cmVhbWJ1ZjxjaGFyLCBfVHJhaXRzPiBfQmFzZTsKCnB1YmxpYzoKICBleHBsaWNpdCBz dHJzdHJlYW1idWYoc3RyZWFtc2l6ZSBfX2luaXRpYWxfY2FwYWNpdHkgPSAwKTsKICBzdHJzdHJl YW1idWYodm9pZCogKCpfX2FsbG9jKShzaXplX3QpLCB2b2lkICgqX19mcmVlKSh2b2lkKikpOwoK ICBzdHJzdHJlYW1idWYoY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uLCBjaGFyKiBfX3B1dCA9 IDApOwogIHN0cnN0cmVhbWJ1ZihzaWduZWQgY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uLCBz aWduZWQgY2hhciogX19wdXQgPSAwKTsKICBzdHJzdHJlYW1idWYodW5zaWduZWQgY2hhciogX19n ZXQsIHN0cmVhbXNpemUgX19uLCB1bnNpZ25lZCBjaGFyKiBfX3B1dD0wKTsKCiAgc3Ryc3RyZWFt YnVmKGNvbnN0IGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbik7CiAgc3Ryc3RyZWFtYnVmKGNv bnN0IHNpZ25lZCBjaGFyKiBfX2dldCwgc3RyZWFtc2l6ZSBfX24pOwogIHN0cnN0cmVhbWJ1Zihj b25zdCB1bnNpZ25lZCBjaGFyKiBfX2dldCwgc3RyZWFtc2l6ZSBfX24pOwoKICB2aXJ0dWFsIH5z dHJzdHJlYW1idWYoKTsKCnB1YmxpYzoKICB2b2lkIGZyZWV6ZShib29sID0gdHJ1ZSk7CiAgY2hh ciogc3RyKCk7CiAgaW50IHBjb3VudCgpIGNvbnN0OwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgaW50 X3R5cGUgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkpOwogIHZpcnR1YWwg aW50X3R5cGUgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKICB2aXJ0 dWFsIGludF90eXBlIHVuZGVyZmxvdygpOwogIHZpcnR1YWwgX0Jhc2UqIHNldGJ1ZihjaGFyKiBf X2J1Ziwgc3RyZWFtc2l6ZSBfX24pOwogIHZpcnR1YWwgcG9zX3R5cGUgc2Vla29mZihvZmZfdHlw ZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwogIHZpcnR1YWwgcG9z X3R5cGUgc2Vla3Bvcyhwb3NfdHlwZSBfX3BvcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaW9zX2Jhc2U6OmluIHwgaW9z X2Jhc2U6Om91dCk7Cgpwcml2YXRlOgoKICBjaGFyKiBfTV9hbGxvYyhzaXplX3QpOwogIHZvaWQg X01fZnJlZShjaGFyKik7CgoKICB2b2lkIF9NX3NldHVwKGNoYXIqIF9fZ2V0LCBjaGFyKiBfX3B1 dCwgc3RyZWFtc2l6ZSBfX24pOwoKcHJpdmF0ZToKICB2b2lkKiAoKl9NX2FsbG9jX2Z1bikoc2l6 ZV90KTsKICB2b2lkICgqX01fZnJlZV9mdW4pKHZvaWQqKTsKCiAgYm9vbCBfTV9keW5hbWljIDog MTsKICBib29sIF9NX2Zyb3plbiA6IDE7CiAgYm9vbCBfTV9jb25zdGFudCA6IDE7Cn07CgoKCgpj bGFzcyBpc3Ryc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08Y2hhcj4KewpwdWJsaWM6CiAg ZXhwbGljaXQgaXN0cnN0cmVhbShjaGFyKik7CiAgZXhwbGljaXQgaXN0cnN0cmVhbShjb25zdCBj aGFyKik7CiAgaXN0cnN0cmVhbShjaGFyKiAsIHN0cmVhbXNpemUpOwogIGlzdHJzdHJlYW0oY29u c3QgY2hhciosIHN0cmVhbXNpemUpOwogIHZpcnR1YWwgfmlzdHJzdHJlYW0oKTsKCiAgc3Ryc3Ry ZWFtYnVmKiByZGJ1ZigpIGNvbnN0OwogIGNoYXIqIHN0cigpOwoKcHJpdmF0ZToKICBzdHJzdHJl YW1idWYgX01fYnVmOwp9OwoKCgoKY2xhc3Mgb3N0cnN0cmVhbSA6IHB1YmxpYyBiYXNpY19vc3Ry ZWFtPGNoYXI+CnsKcHVibGljOgogIG9zdHJzdHJlYW0oKTsKICBvc3Ryc3RyZWFtKGNoYXIqLCBp bnQsIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjpvdXQpOwogIHZpcnR1YWwgfm9zdHJz dHJlYW0oKTsKCiAgc3Ryc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0OwogIHZvaWQgZnJlZXplKGJv b2wgPSB0cnVlKTsKICBjaGFyKiBzdHIoKTsKICBpbnQgcGNvdW50KCkgY29uc3Q7Cgpwcml2YXRl OgogIHN0cnN0cmVhbWJ1ZiBfTV9idWY7Cn07CgoKCgpjbGFzcyBzdHJzdHJlYW0gOiBwdWJsaWMg YmFzaWNfaW9zdHJlYW08Y2hhcj4KewpwdWJsaWM6CiAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsK ICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZSBpbnRfdHlwZTsKICB0eXBlZGVm IGNoYXJfdHJhaXRzPGNoYXI+Ojpwb3NfdHlwZSBwb3NfdHlwZTsKICB0eXBlZGVmIGNoYXJfdHJh aXRzPGNoYXI+OjpvZmZfdHlwZSBvZmZfdHlwZTsKCiAgc3Ryc3RyZWFtKCk7CiAgc3Ryc3RyZWFt KGNoYXIqLCBpbnQsIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNl OjpvdXQpOwogIHZpcnR1YWwgfnN0cnN0cmVhbSgpOwoKICBzdHJzdHJlYW1idWYqIHJkYnVmKCkg Y29uc3Q7CiAgdm9pZCBmcmVlemUoYm9vbCA9IHRydWUpOwogIGludCBwY291bnQoKSBjb25zdDsK ICBjaGFyKiBzdHIoKTsKCnByaXZhdGU6CiAgc3Ryc3RyZWFtYnVmIF9NX2J1ZjsKfTsKCn0KIyA3 MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3N0cmVhbXMu aCIgMgoKCgoKCgoKICAgICAgICB1c2luZyBzdGQ6OmlvczsKICAgICAgICB1c2luZyBzdGQ6OnN0 cmVhbWJ1ZjsKICAgICAgICB1c2luZyBzdGQ6OmlzdHJlYW07CiAgICAgICAgdXNpbmcgc3RkOjpv c3RyZWFtOwogICAgICAgIHVzaW5nIHN0ZDo6aW9zdHJlYW07CiAgICAgICAgdXNpbmcgc3RkOjpm aWxlYnVmOwogICAgICAgIHVzaW5nIHN0ZDo6aWZzdHJlYW07CiAgICAgICAgdXNpbmcgc3RkOjpv ZnN0cmVhbTsKICAgICAgICB1c2luZyBzdGQ6OmZzdHJlYW07CgogICAgICAgIHVzaW5nIHN0ZDo6 aXN0cnN0cmVhbTsKICAgICAgICB1c2luZyBzdGQ6Om9zdHJzdHJlYW07CgogICAgICAgIHVzaW5n IHN0ZDo6Y2luOwogICAgICAgIHVzaW5nIHN0ZDo6Y291dDsKICAgICAgICB1c2luZyBzdGQ6OmNl cnI7CiAgICAgICAgdXNpbmcgc3RkOjpjbG9nOwoKICAgICAgICB1c2luZyBzdGQ6OmVuZGw7CiAg ICAgICAgdXNpbmcgc3RkOjplbmRzOwogICAgICAgIHVzaW5nIHN0ZDo6Zmx1c2g7CgogICAgICAg IHVzaW5nIHN0ZDo6d3M7CgogICAgICAgIHVzaW5nIHN0ZDo6cmVzZXRpb3NmbGFnczsKICAgICAg ICB1c2luZyBzdGQ6OnNldGZpbGw7CiAgICAgICAgdXNpbmcgc3RkOjpzZXRpb3NmbGFnczsKICAg ICAgICB1c2luZyBzdGQ6OnNldHByZWNpc2lvbjsKICAgICAgICB1c2luZyBzdGQ6OnNldHc7Cgog ICAgICAgIHVzaW5nIHN0ZDo6ZGVjOwogICAgICAgIHVzaW5nIHN0ZDo6aGV4OwogICAgICAgIHVz aW5nIHN0ZDo6b2N0OwojIDE0OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL3N0cmVhbXMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMTQ5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAyCiMgMjkxNiAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKCgoKCiMgMSAiL3Vzci9pbmNs dWRlL2ZjbnRsLmgiIDEgMwojIDI5MjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMjkzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDEKIyAyOTM0ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDI5NDcgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogICAgICB0eXBlZGVm IGxvZmZfdCBBQ0VfTE9GRl9UOwojIDI5NTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpzdGF0aWMgY29uc3QgQUNFX1VJTlQzMiBBQ0VfVV9PTkVf U0VDT05EX0lOX01TRUNTID0gMTAwMFU7CnN0YXRpYyBjb25zdCBBQ0VfVUlOVDMyIEFDRV9VX09O RV9TRUNPTkRfSU5fVVNFQ1MgPSAxMDAwMDAwVTsKc3RhdGljIGNvbnN0IEFDRV9VSU5UMzIgQUNF X1VfT05FX1NFQ09ORF9JTl9OU0VDUyA9IDEwMDAwMDAwMDBVOwojIDMwMDggIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpleHRlcm4gIkMiIHNzaXpl X3QgcHJlYWQgKGludCBmZCwKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ieXRlcywKICAgICAgICAgICAgICAgICAg ICAgICAgICBvZmZfdCBvZmZzZXQpOwoKZXh0ZXJuICJDIiBzc2l6ZV90IHB3cml0ZSAoaW50IGZk LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZf dCBvZmZzZXQpOwojIDMwMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5oIgp0eXBlZGVmIGNvbnN0IHN0cnVjdCBtc2doZHIgQUNFX1NFTkRNU0dfVFlQ RTsKIyAzMDM5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1MuaCIKdHlwZWRlZiB1X2ludCBBQ0VfUkFORFJfVFlQRTsKIyAzMDg1ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKdHlwZWRlZiB2b2lkICgqQUNF X1NpZ25hbEhhbmRsZXIpKGludCk7CnR5cGVkZWYgdm9pZCAoKkFDRV9TaWduYWxIYW5kbGVyViko aW50KTsKIyAzNTMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1MuaCIKdHlwZWRlZiBpbnQgQUNFX2V4aXRjb2RlOwojIDM1NDYgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpjbGFzcyBBQ0VfZXZlbnRfdAp7 CiAgZnJpZW5kIGNsYXNzIEFDRV9PUzsKcHJvdGVjdGVkOgoKICBBQ0VfbXV0ZXhfdCBsb2NrXzsK CgogIEFDRV9jb25kX3QgY29uZGl0aW9uXzsKCgogIGludCBtYW51YWxfcmVzZXRfOwoKCiAgaW50 IGlzX3NpZ25hbGVkXzsKCgogIHVfbG9uZyB3YWl0aW5nX3RocmVhZHNfOwp9OwoKc3RydWN0IEFD RV9PVkVSTEFQUEVECnsKICB1X2xvbmcgSW50ZXJuYWw7CiAgdV9sb25nIEludGVybmFsSGlnaDsK ICB1X2xvbmcgT2Zmc2V0OwogIHVfbG9uZyBPZmZzZXRIaWdoOwogIEFDRV9IQU5ETEUgaEV2ZW50 Owp9OwojIDM2MTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9PUy5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDEgMwojIDIzICIvdXNyL2lu Y2x1ZGUvc3lzL3NvY2tldC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj IDI0ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5 cy91aW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjUgIi91 c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy91aW8uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3Vpby5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvdWlv LmgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvYml0cy91aW8uaCIgMwpzdHJ1Y3QgaW92ZWMKICB7 CiAgICB2b2lkICppb3ZfYmFzZTsKICAgIHNpemVfdCBpb3ZfbGVuOwogIH07CiMgMzAgIi91c3Iv aW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIHNzaXplX3QgcmVhZHYgKGludCBf X2ZkLCBfX2NvbnN0IHN0cnVjdCBpb3ZlYyAqX192ZWN0b3IsIGludCBfX2NvdW50KQogICAgIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gc3NpemVfdCB3cml0ZXYgKGludCBfX2ZkLCBfX2NvbnN0IHN0 cnVjdCBpb3ZlYyAqX192ZWN0b3IsIGludCBfX2NvdW50KQogICAgIHRocm93ICgpOwoKfQojIDI4 ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK IyAzMCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9zb2NrZXQuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAz CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0Lmgi IDIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy9zb2Nr ZXQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAzMyAiL3Vzci9p bmNsdWRlL2JpdHMvc29ja2V0LmgiIDIgMwojIDQxICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQu aCIgMwplbnVtIF9fc29ja2V0X3R5cGUKewogIFNPQ0tfU1RSRUFNID0gMSwKCgogIFNPQ0tfREdS QU0gPSAyLAoKCiAgU09DS19SQVcgPSAzLAoKICBTT0NLX1JETSA9IDQsCgogIFNPQ0tfU0VRUEFD S0VUID0gNSwKCgogIFNPQ0tfUEFDS0VUID0gMTAKCgoKfTsKIyAxMzggIi91c3IvaW5jbHVkZS9i aXRzL3NvY2tldC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCIgMSAzCiMg MjkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2thZGRyLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBzaG9y dCBpbnQgc2FfZmFtaWx5X3Q7CiMgMTM5ICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAz CgoKc3RydWN0IHNvY2thZGRyCiAgewogICAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgY2hh ciBzYV9kYXRhWzE0XTsKICB9OwojIDE1OCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMK c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UKICB7CiAgICBzYV9mYW1pbHlfdCBzc19mYW1pbHk7CiAg ICBfX3VpbnQzMl90IF9fc3NfYWxpZ247CiAgICBjaGFyIF9fc3NfcGFkZGluZ1soMTI4IC0gKDIg KiBzaXplb2YgKF9fdWludDMyX3QpKSldOwogIH07CgoKCmVudW0KICB7CiAgICBNU0dfT09CID0g MHgwMSwKCiAgICBNU0dfUEVFSyA9IDB4MDIsCgogICAgTVNHX0RPTlRST1VURSA9IDB4MDQsCgoK CiAgICBNU0dfVFJZSEFSRCA9IE1TR19ET05UUk9VVEUsCgoKICAgIE1TR19DVFJVTkMgPSAweDA4 LAoKICAgIE1TR19QUk9YWSA9IDB4MTAsCgogICAgTVNHX1RSVU5DID0gMHgyMCwKCiAgICBNU0df RE9OVFdBSVQgPSAweDQwLAoKICAgIE1TR19FT1IgPSAweDgwLAoKICAgIE1TR19XQUlUQUxMID0g MHgxMDAsCgogICAgTVNHX0ZJTiA9IDB4MjAwLAoKICAgIE1TR19TWU4gPSAweDQwMCwKCiAgICBN U0dfQ09ORklSTSA9IDB4ODAwLAoKICAgIE1TR19SU1QgPSAweDEwMDAsCgogICAgTVNHX0VSUlFV RVVFID0gMHgyMDAwLAoKICAgIE1TR19OT1NJR05BTCA9IDB4NDAwMAoKICB9OwoKCgoKc3RydWN0 IG1zZ2hkcgogIHsKICAgIHZvaWQgKm1zZ19uYW1lOwogICAgc29ja2xlbl90IG1zZ19uYW1lbGVu OwoKICAgIHN0cnVjdCBpb3ZlYyAqbXNnX2lvdjsKICAgIGludCBtc2dfaW92bGVuOwoKICAgIHZv aWQgKm1zZ19jb250cm9sOwogICAgc29ja2xlbl90IG1zZ19jb250cm9sbGVuOwoKICAgIGludCBt c2dfZmxhZ3M7CiAgfTsKCgpzdHJ1Y3QgY21zZ2hkcgogIHsKICAgIHNpemVfdCBjbXNnX2xlbjsK CiAgICBpbnQgY21zZ19sZXZlbDsKICAgIGludCBjbXNnX3R5cGU7CiAgICBfX2V4dGVuc2lvbl9f IHVuc2lnbmVkIGNoYXIgX19jbXNnX2RhdGEgW107CgogIH07CiMgMjUwICIvdXNyL2luY2x1ZGUv Yml0cy9zb2NrZXQuaCIgMwpleHRlcm4gc3RydWN0IGNtc2doZHIgKl9fY21zZ19ueHRoZHIgKHN0 cnVjdCBtc2doZHIgKl9fbWhkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2lubGluZSBz dHJ1Y3QgY21zZ2hkciAqCl9fY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwgc3Ry dWN0IGNtc2doZHIgKl9fY21zZykgdGhyb3cgKCkKewogIGlmICgoc2l6ZV90KSBfX2Ntc2ctPmNt c2dfbGVuIDwgc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikpCgogICAgcmV0dXJuIDA7CgogIF9fY21z ZyA9IChzdHJ1Y3QgY21zZ2hkciAqKSAoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChz aXplX3QpIC0gMSkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKSk7CiAgaWYgKCh1 bnNpZ25lZCBjaGFyICopIChfX2Ntc2cgKyAxKSA+PSAoKHVuc2lnbmVkIGNoYXIgKikgX19taGRy LT5tc2dfY29udHJvbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg X19taGRyLT5tc2dfY29udHJvbGxlbikKICAgICAgfHwgKCh1bnNpZ25lZCBjaGFyICopIF9fY21z ZyArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXplX3QpIC0gMSkgJiAoc2l6ZV90 KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKQogICAgICAgICAgPiAoKHVuc2lnbmVkIGNoYXIgKikg X19taGRyLT5tc2dfY29udHJvbCArIF9fbWhkci0+bXNnX2NvbnRyb2xsZW4pKSkKCiAgICByZXR1 cm4gMDsKICByZXR1cm4gX19jbXNnOwp9CgoKCgplbnVtCiAgewogICAgU0NNX1JJR0hUUyA9IDB4 MDEsCgoKICAgIFNDTV9DUkVERU5USUFMUyA9IDB4MDIsCgoKICAgIF9fU0NNX0NPTk5FQ1QgPSAw eDAzCiAgfTsKCgoKc3RydWN0IHVjcmVkCnsKICBwaWRfdCBwaWQ7CiAgdWlkX3QgdWlkOwogIGdp ZF90IGdpZDsKfTsKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29ja2V0LmgiIDEgMwoKCgojIDEg Ii91c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvYXNtL3Nv Y2tldC5oIiAyIDMKIyAyOTkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgoKc3Ry dWN0IGxpbmdlcgogIHsKICAgIGludCBsX29ub2ZmOwogICAgaW50IGxfbGluZ2VyOwogIH07CiMg MzYgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKCgoKc3RydWN0IG9zb2NrYWRkcgog IHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBzYV9mYW1pbHk7CiAgICB1bnNpZ25lZCBjaGFyIHNh X2RhdGFbMTRdOwogIH07CgoKCgplbnVtCnsKICBTSFVUX1JEID0gMCwKCiAgU0hVVF9XUiwKCiAg U0hVVF9SRFdSCgp9OwojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMwpleHRlcm4g aW50IHNvY2tldCAoaW50IF9fZG9tYWluLCBpbnQgX190eXBlLCBpbnQgX19wcm90b2NvbCkgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzb2NrZXRwYWlyIChpbnQgX19kb21haW4sIGludCBfX3R5 cGUsIGludCBfX3Byb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Zkc1syXSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kIChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3Qgc29j a2FkZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g aW50IGdldHNvY2tuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9f YWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fbGVu KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGNvbm5lY3QgKGludCBfX2ZkLCBfX2NvbnN0IHN0 cnVjdCBzb2NrYWRkciAqIF9fYWRkciwgc29ja2xlbl90IF9fbGVuKQogICAgIHRocm93ICgpOwoK CgpleHRlcm4gaW50IGdldHBlZXJuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRyICpfX3Jl c3RyaWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3Ry aWN0IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZW5kIChpbnQgX19mZCwgX19jb25z dCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgcmVjdiAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLCBpbnQg X19mbGFncykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZW5kdG8gKGludCBfX2ZkLCBf X2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgaW50IF9f ZmxhZ3MsIF9fY29uc3Qgc3RydWN0IHNvY2thZGRyICogX19hZGRyLAogICAgICAgICAgICAgICAg ICAgc29ja2xlbl90IF9fYWRkcl9sZW4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmVjdmZy b20gKGludCBfX2ZkLCB2b2lkICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19m bGFncywKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9f YWRkciwgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fYWRkcl9sZW4pCiAgICAgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHNlbmRtc2cgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBtc2doZHIgKl9f bWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmVjdm1z ZyAoaW50IF9fZmQsIHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50IF9fbGV2 ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmlj dCBfX29wdHZhbCwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3Qg X19vcHRsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRzb2Nrb3B0IChpbnQgX19mZCwg aW50IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB2b2lkICpfX29wdHZhbCwgc29ja2xlbl90IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gaW50IGxpc3RlbiAoaW50IF9fZmQsIGludCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4g aW50IGFjY2VwdCAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIs CiAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbikKICAg ICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgc2h1dGRvd24gKGludCBfX2ZkLCBpbnQgX19o b3cpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzZmR0eXBlIChpbnQgX19mZCwgaW50IF9f ZmR0eXBlKSB0aHJvdyAoKTsKCgp9CiMgMzYxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKCgpleHRlcm4gIkMiCnsKIyAzNjMwICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKIyAxICIvdXNyL2lu Y2x1ZGUvbmV0ZGIuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMiAz CgojIDEgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUv bmV0aW5ldC9pbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIv dXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW50Lmgi IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCgojIDEgIi91c3Iv bG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk ZS9zdGRpbnQuaCIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIHVu c2lnbmVkIGNoYXIgdWludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludDE2X3Q7 Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKCgoKCgpfX2V4dGVuc2lvbl9fCnR5cGVk ZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQg Y2hhciBpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYgc2hvcnQgaW50IGludF9sZWFzdDE2X3Q7CnR5cGVk ZWYgaW50IGludF9sZWFzdDMyX3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcg aW50IGludF9sZWFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90 Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50X2xlYXN0MTZfdDsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgdWludF9sZWFzdDMyX3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IHVpbnRfbGVhc3Q2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFy IGludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYgaW50IGludF9mYXN0MTZfdDsKdHlwZWRlZiBpbnQg aW50X2Zhc3QzMl90OwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfZmFz dDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9m YXN0MzJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWlu dF9mYXN0NjRfdDsKIyAxMzEgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIHVuc2ln bmVkIGludCB1aW50cHRyX3Q7CiMgMTQwICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKX19leHRl bnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50bWF4X3Q7Cl9fZXh0ZW5zaW9uX18KdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRtYXhfdDsKIyAyNCAiL3Vzci9pbmNsdWRl L25ldGluZXQvaW4uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg MjUgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCmVudW0K ICB7CiAgICBJUFBST1RPX0lQID0gMCwKCiAgICBJUFBST1RPX0hPUE9QVFMgPSAwLAoKICAgIElQ UFJPVE9fSUNNUCA9IDEsCgogICAgSVBQUk9UT19JR01QID0gMiwKCiAgICBJUFBST1RPX0lQSVAg PSA0LAoKICAgIElQUFJPVE9fVENQID0gNiwKCiAgICBJUFBST1RPX0VHUCA9IDgsCgogICAgSVBQ Uk9UT19QVVAgPSAxMiwKCiAgICBJUFBST1RPX1VEUCA9IDE3LAoKICAgIElQUFJPVE9fSURQID0g MjIsCgogICAgSVBQUk9UT19UUCA9IDI5LAoKICAgIElQUFJPVE9fSVBWNiA9IDQxLAoKICAgIElQ UFJPVE9fUk9VVElORyA9IDQzLAoKICAgIElQUFJPVE9fRlJBR01FTlQgPSA0NCwKCiAgICBJUFBS T1RPX1JTVlAgPSA0NiwKCiAgICBJUFBST1RPX0dSRSA9IDQ3LAoKICAgIElQUFJPVE9fRVNQID0g NTAsCgogICAgSVBQUk9UT19BSCA9IDUxLAoKICAgIElQUFJPVE9fSUNNUFY2ID0gNTgsCgogICAg SVBQUk9UT19OT05FID0gNTksCgogICAgSVBQUk9UT19EU1RPUFRTID0gNjAsCgogICAgSVBQUk9U T19NVFAgPSA5MiwKCiAgICBJUFBST1RPX0VOQ0FQID0gOTgsCgogICAgSVBQUk9UT19QSU0gPSAx MDMsCgogICAgSVBQUk9UT19DT01QID0gMTA4LAoKICAgIElQUFJPVE9fUkFXID0gMjU1LAoKICAg IElQUFJPVE9fTUFYCiAgfTsKCgoKdHlwZWRlZiB1aW50MTZfdCBpbl9wb3J0X3Q7CgoKZW51bQog IHsKICAgIElQUE9SVF9FQ0hPID0gNywKICAgIElQUE9SVF9ESVNDQVJEID0gOSwKICAgIElQUE9S VF9TWVNUQVQgPSAxMSwKICAgIElQUE9SVF9EQVlUSU1FID0gMTMsCiAgICBJUFBPUlRfTkVUU1RB VCA9IDE1LAogICAgSVBQT1JUX0ZUUCA9IDIxLAogICAgSVBQT1JUX1RFTE5FVCA9IDIzLAogICAg SVBQT1JUX1NNVFAgPSAyNSwKICAgIElQUE9SVF9USU1FU0VSVkVSID0gMzcsCiAgICBJUFBPUlRf TkFNRVNFUlZFUiA9IDQyLAogICAgSVBQT1JUX1dIT0lTID0gNDMsCiAgICBJUFBPUlRfTVRQID0g NTcsCgogICAgSVBQT1JUX1RGVFAgPSA2OSwKICAgIElQUE9SVF9SSkUgPSA3NywKICAgIElQUE9S VF9GSU5HRVIgPSA3OSwKICAgIElQUE9SVF9UVFlMSU5LID0gODcsCiAgICBJUFBPUlRfU1VQRFVQ ID0gOTUsCgoKICAgIElQUE9SVF9FWEVDU0VSVkVSID0gNTEyLAogICAgSVBQT1JUX0xPR0lOU0VS VkVSID0gNTEzLAogICAgSVBQT1JUX0NNRFNFUlZFUiA9IDUxNCwKICAgIElQUE9SVF9FRlNTRVJW RVIgPSA1MjAsCgoKICAgIElQUE9SVF9CSUZGVURQID0gNTEyLAogICAgSVBQT1JUX1dIT1NFUlZF UiA9IDUxMywKICAgIElQUE9SVF9ST1VURVNFUlZFUiA9IDUyMCwKCgogICAgSVBQT1JUX1JFU0VS VkVEID0gMTAyNCwKCgogICAgSVBQT1JUX1VTRVJSRVNFUlZFRCA9IDUwMDAKICB9OwoKCgp0eXBl ZGVmIHVpbnQzMl90IGluX2FkZHJfdDsKc3RydWN0IGluX2FkZHIKICB7CiAgICBpbl9hZGRyX3Qg c19hZGRyOwogIH07CiMgMTkwICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCnN0cnVjdCBp bjZfYWRkcgogIHsKICAgIHVuaW9uCiAgICAgIHsKICAgICAgICB1aW50OF90IHU2X2FkZHI4WzE2 XTsKICAgICAgICB1aW50MTZfdCB1Nl9hZGRyMTZbOF07CiAgICAgICAgdWludDMyX3QgdTZfYWRk cjMyWzRdOwogICAgICB9IGluNl91OwoKCgogIH07CgpleHRlcm4gY29uc3Qgc3RydWN0IGluNl9h ZGRyIGluNmFkZHJfYW55OwpleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbG9v cGJhY2s7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAxIDMKIyAyMTMg Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoKCgpzdHJ1Y3Qgc29ja2FkZHJfaW4KICB7 CiAgICBzYV9mYW1pbHlfdCBzaW5fZmFtaWx5OwogICAgaW5fcG9ydF90IHNpbl9wb3J0OwogICAg c3RydWN0IGluX2FkZHIgc2luX2FkZHI7CgoKICAgIHVuc2lnbmVkIGNoYXIgc2luX3plcm9bc2l6 ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVv ZiAodW5zaWduZWQgc2hvcnQgaW50KSkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YgKGluX3BvcnRfdCkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKHN0cnVj dCBpbl9hZGRyKV07CiAgfTsKCgpzdHJ1Y3Qgc29ja2FkZHJfaW42CiAgewogICAgc2FfZmFtaWx5 X3Qgc2luNl9mYW1pbHk7CiAgICBpbl9wb3J0X3Qgc2luNl9wb3J0OwogICAgdWludDMyX3Qgc2lu Nl9mbG93aW5mbzsKICAgIHN0cnVjdCBpbjZfYWRkciBzaW42X2FkZHI7CiAgICB1aW50MzJfdCBz aW42X3Njb3BlX2lkOwogIH07CgoKc3RydWN0IGlwdjZfbXJlcQogIHsKCiAgICBzdHJ1Y3QgaW42 X2FkZHIgaXB2Nm1yX211bHRpYWRkcjsKCgogICAgdW5zaWduZWQgaW50IGlwdjZtcl9pbnRlcmZh Y2U7CiAgfTsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luLmgiIDEgMwojIDY2ICIvdXNyL2lu Y2x1ZGUvYml0cy9pbi5oIiAzCnN0cnVjdCBpcF9vcHRzCiAgewogICAgc3RydWN0IGluX2FkZHIg aXBfZHN0OwogICAgY2hhciBpcF9vcHRzWzQwXTsKICB9OwoKCnN0cnVjdCBpcF9tcmVxCiAgewog ICAgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9p bnRlcmZhY2U7CiAgfTsKCgpzdHJ1Y3QgaXBfbXJlcW4KICB7CiAgICBzdHJ1Y3QgaW5fYWRkciBp bXJfbXVsdGlhZGRyOwogICAgc3RydWN0IGluX2FkZHIgaW1yX2FkZHJlc3M7CiAgICBpbnQgaW1y X2lmaW5kZXg7CiAgfTsKCgpzdHJ1Y3QgaW5fcGt0aW5mbwogIHsKICAgIGludCBpcGlfaWZpbmRl eDsKICAgIHN0cnVjdCBpbl9hZGRyIGlwaV9zcGVjX2RzdDsKICAgIHN0cnVjdCBpbl9hZGRyIGlw aV9hZGRyOwogIH07CiMgMjUxICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKIyAyNTkg Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKZXh0ZXJuIHVpbnQzMl90IG50b2hsICh1aW50 MzJfdCBfX25ldGxvbmcpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0 ZXJuIHVpbnQxNl90IG50b2hzICh1aW50MTZfdCBfX25ldHNob3J0KQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIHVpbnQzMl90IGh0b25sICh1aW50MzJf dCBfX2hvc3Rsb25nKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK ZXh0ZXJuIHVpbnQxNl90IGh0b25zICh1aW50MTZfdCBfX2hvc3RzaG9ydCkKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4u aCIgMSAzCiMgMjY4ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL2J5dGVzd2FwLmgiIDEgMwojIDI3MSAiL3Vzci9pbmNsdWRlL25ldGluZXQv aW4uaCIgMiAzCiMgMzMzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCmV4dGVybiBpbnQg YmluZHJlc3Zwb3J0IChpbnQgX19zb2NrZmQsIHN0cnVjdCBzb2NrYWRkcl9pbiAqX19zb2NrX2lu KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJpbmRyZXN2cG9ydDYgKGludCBfX3NvY2tmZCwgc3Ry dWN0IHNvY2thZGRyX2luNiAqX19zb2NrX2luKQogICAgIHRocm93ICgpOwojIDM2MSAiL3Vzci9p bmNsdWRlL25ldGluZXQvaW4uaCIgMwpzdHJ1Y3QgaW42X3BrdGluZm8KICB7CiAgICBzdHJ1Y3Qg aW42X2FkZHIgaXBpNl9hZGRyOwogICAgdW5zaWduZWQgaW50IGlwaTZfaWZpbmRleDsKICB9OwoK fQojIDI5ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlu dC5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKCgojIDEgIi91c3IvaW5j bHVkZS9ycGMvbmV0ZGIuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9ycGMvbmV0ZGIuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL3JwYy9u ZXRkYi5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9y cGMvbmV0ZGIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCnN0cnVjdCBycGNlbnQKewogIGNoYXIgKnJf bmFtZTsKICBjaGFyICoqcl9hbGlhc2VzOwogIGludCByX251bWJlcjsKfTsKCmV4dGVybiB2b2lk IHNldHJwY2VudCAoaW50IF9fc3RheW9wZW4pIHRocm93ICgpOwpleHRlcm4gdm9pZCBlbmRycGNl bnQgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gc3RydWN0IHJwY2VudCAqZ2V0cnBjYnluYW1lIChf X2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3QgcnBjZW50ICpnZXRy cGNieW51bWJlciAoaW50IF9fbnVtYmVyKSB0aHJvdyAoKTsKZXh0ZXJuIHN0cnVjdCBycGNlbnQg KmdldHJwY2VudCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRycGNieW5hbWVfciAo X19jb25zdCBjaGFyICpfX25hbWUsIHN0cnVjdCBycGNlbnQgKl9fcmVzdWx0X2J1ZiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJwY2VudCAqKl9fcmVzdWx0KSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgZ2V0cnBjYnludW1iZXJfciAoaW50IF9fbnVtYmVyLCBzdHJ1Y3QgcnBj ZW50ICpfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19i dWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgcnBjZW50ICoqX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRycGNlbnRfciAo c3RydWN0IHJwY2VudCAqX19yZXN1bHRfYnVmLCBjaGFyICpfX2J1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fYnVmbGVuLCBzdHJ1Y3QgcnBjZW50ICoqX19yZXN1bHQpIHRo cm93ICgpOwoKCn0KIyAzNCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKCgoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdp bmZvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNiAiL3Vz ci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL25ldGRiLmgi IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL25l dGRiLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmV0ZGIuaCIgMSAzCiMgMjcgIi91 c3IvaW5jbHVkZS9iaXRzL25ldGRiLmgiIDMKc3RydWN0IG5ldGVudAp7CiAgY2hhciAqbl9uYW1l OwogIGNoYXIgKipuX2FsaWFzZXM7CiAgaW50IG5fYWRkcnR5cGU7CiAgdWludDMyX3Qgbl9uZXQ7 Cn07CiMgNDQgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAyIDMKIyA1NCAiL3Vzci9pbmNsdWRlL25l dGRiLmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBoX2Vycm5vOwoKCmV4dGVybiBpbnQg Kl9faF9lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwojIDEwNSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuIHZvaWQgaGVycm9y IChfX2NvbnN0IGNoYXIgKl9fc3RyKSB0aHJvdyAoKTsKCgpleHRlcm4gX19jb25zdCBjaGFyICpo c3RyZXJyb3IgKGludCBfX2Vycl9udW0pIHRocm93ICgpOwoKCgoKc3RydWN0IGhvc3RlbnQKewog IGNoYXIgKmhfbmFtZTsKICBjaGFyICoqaF9hbGlhc2VzOwogIGludCBoX2FkZHJ0eXBlOwogIGlu dCBoX2xlbmd0aDsKICBjaGFyICoqaF9hZGRyX2xpc3Q7Cgp9OwoKCgpleHRlcm4gdm9pZCBzZXRo b3N0ZW50IChpbnQgX19zdGF5X29wZW4pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGVuZGhvc3Rl bnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IGhvc3RlbnQgKmdldGhvc3RlbnQg KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieWFkZHIg KF9fY29uc3Qgdm9pZCAqX19hZGRyLCBfX3NvY2tsZW5fdCBfX2xlbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gc3Ry dWN0IGhvc3RlbnQgKmdldGhvc3RieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieW5hbWUyIChfX2NvbnN0IGNo YXIgKl9fbmFtZSwgaW50IF9fYWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGhvc3Rl bnRfciAoc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAog ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0IF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3Ap IHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRob3N0YnlhZGRyX3IgKF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX2FkZHIsIF9fc29ja2xlbl90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0 ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgZ2V0aG9zdGJ5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVz dHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19y ZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKZXh0ZXJu IGludCBnZXRob3N0YnluYW1lMl9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLCBp bnQgX19hZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqX19y ZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIHZvaWQgc2V0bmV0ZW50IChpbnQgX19zdGF5X29wZW4pIHRocm93ICgpOwoKCmV4 dGVybiB2b2lkIGVuZG5ldGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgbmV0 ZW50ICpnZXRuZXRlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IG5ldGVudCAq Z2V0bmV0YnlhZGRyICh1aW50MzJfdCBfX25ldCwgaW50IF9fdHlwZSkKICAgICB0aHJvdyAoKTsK CgpleHRlcm4gc3RydWN0IG5ldGVudCAqZ2V0bmV0YnluYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFt ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldG5ldGVudF9yIChzdHJ1Y3QgbmV0ZW50 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKZXh0ZXJuIGludCBn ZXRuZXRieWFkZHJfciAodWludDMyX3QgX19uZXQsIGludCBfX3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19i dWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKipfX3Jlc3Ry aWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldG5ldGJ5bmFtZV9yIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgbmV0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93 ICgpOwoKCgoKc3RydWN0IHNlcnZlbnQKewogIGNoYXIgKnNfbmFtZTsKICBjaGFyICoqc19hbGlh c2VzOwogIGludCBzX3BvcnQ7CiAgY2hhciAqc19wcm90bzsKfTsKCgoKZXh0ZXJuIHZvaWQgc2V0 c2VydmVudCAoaW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRzZXJ2 ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBzZXJ2ZW50ICpnZXRzZXJ2ZW50 ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBzZXJ2ZW50ICpnZXRzZXJ2YnluYW1l IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcHJvdG8pIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHNl cnZlbnQgKmdldHNlcnZieXBvcnQgKGludCBfX3BvcnQsIF9fY29uc3QgY2hhciAqX19wcm90bykK ICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHNlcnZlbnRfciAoc3RydWN0IHNlcnZl bnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHNlcnZlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgZ2V0c2VydmJ5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqX19yZXN0 cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jl c3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJu IGludCBnZXRzZXJ2Ynlwb3J0X3IgKGludCBfX3BvcnQsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3Byb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZlbnQgKl9f cmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHNlcnZlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoK CnN0cnVjdCBwcm90b2VudAp7CiAgY2hhciAqcF9uYW1lOwogIGNoYXIgKipwX2FsaWFzZXM7CiAg aW50IHBfcHJvdG87Cn07CgoKCmV4dGVybiB2b2lkIHNldHByb3RvZW50IChpbnQgX19zdGF5X29w ZW4pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGVuZHByb3RvZW50ICh2b2lkKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9lbnQgKHZvaWQpIHRocm93ICgpOwoK CmV4dGVybiBzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnluYW1lIChfX2NvbnN0IGNoYXIgKl9f bmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW51bWJl ciAoaW50IF9fcHJvdG8pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0cHJvdG9lbnRfciAo c3RydWN0IHByb3RvZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICoqX19yZXN0cmljdCBfX3Jlc3Vs dCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHByb3RvYnluYW1lX3IgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBy b3RvZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkg dGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHByb3RvYnludW1iZXJfciAoaW50IF9fcHJvdG8sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3Qg X19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0 cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHByb3RvZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IHNldG5ldGdyZW50IChfX2NvbnN0IGNoYXIgKl9fbmV0Z3JvdXApIHRocm93ICgp OwoKCmV4dGVybiB2b2lkIGVuZG5ldGdyZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBnZXRuZXRncmVudCAoY2hhciAqKl9fcmVzdHJpY3QgX19ob3N0cCwKICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX191c2VycCwKICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19kb21haW5wKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBp bm5ldGdyIChfX2NvbnN0IGNoYXIgKl9fbmV0Z3JvdXAsIF9fY29uc3QgY2hhciAqX19ob3N0LAog ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX191c2VyLCBfX2NvbnN0IGNoYXIgKmRv bWFpbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRuZXRncmVudF9yIChjaGFyICoqX19yZXN0 cmljdCBfX2hvc3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fdXNlcnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19k b21haW5wLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZm ZXIsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CiMgMzUxICIvdXNyL2luY2x1ZGUvbmV0ZGIu aCIgMwpleHRlcm4gaW50IHJjbWQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3QsIHVuc2lnbmVk IHNob3J0IGludCBfX3Jwb3J0LAogICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2xvY3VzZXIsCiAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcmVtdXNlciwKICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19j bWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg cmNtZF9hZiAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9zdCwgdW5zaWduZWQgc2hvcnQgaW50IF9f cnBvcnQsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbG9j dXNlciwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19yZW11 c2VyLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2NtZCwg aW50ICpfX3Jlc3RyaWN0IF9fZmQycCwKICAgICAgICAgICAgICAgICAgICBzYV9mYW1pbHlfdCBf X2FmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCByZXhlYyAoY2hhciAqKl9fcmVzdHJpY3Qg X19haG9zdCwgaW50IF9fcnBvcnQsCiAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3Bhc3MsCiAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Nt ZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBy ZXhlY19hZiAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9zdCwgaW50IF9fcnBvcnQsCiAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Bhc3MsCiAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9f ZmQycCwKICAgICAgICAgICAgICAgICAgICAgc2FfZmFtaWx5X3QgX19hZikgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHJ1c2Vyb2sgKF9fY29uc3QgY2hhciAqX19yaG9zdCwgaW50IF9fc3VzZXIs CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3JlbXVzZXIsIF9fY29uc3QgY2hh ciAqX19sb2N1c2VyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBydXNlcm9rX2FmIChfX2NvbnN0 IGNoYXIgKl9fcmhvc3QsIGludCBfX3N1c2VyLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZW11c2VyLCBfX2NvbnN0IGNoYXIgKl9fbG9jdXNlciwKICAgICAgICAgICAg ICAgICAgICAgICBzYV9mYW1pbHlfdCBfX2FmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcnJl c3Zwb3J0IChpbnQgKl9fYWxwb3J0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBycmVzdnBvcnRf YWYgKGludCAqX19hbHBvcnQsIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoKCgoKCgpzdHJ1 Y3QgYWRkcmluZm8KewogIGludCBhaV9mbGFnczsKICBpbnQgYWlfZmFtaWx5OwogIGludCBhaV9z b2NrdHlwZTsKICBpbnQgYWlfcHJvdG9jb2w7CiAgc29ja2xlbl90IGFpX2FkZHJsZW47CiAgc3Ry dWN0IHNvY2thZGRyICphaV9hZGRyOwogIGNoYXIgKmFpX2Nhbm9ubmFtZTsKICBzdHJ1Y3QgYWRk cmluZm8gKmFpX25leHQ7Cn07CgoKCnN0cnVjdCBnYWljYgp7CiAgY29uc3QgY2hhciAqYXJfbmFt ZTsKICBjb25zdCBjaGFyICphcl9zZXJ2aWNlOwogIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqYXJf cmVxdWVzdDsKICBzdHJ1Y3QgYWRkcmluZm8gKmFyX3Jlc3VsdDsKCiAgaW50IF9fcmV0dXJuOwog IGludCBfX3VudXNlZFs1XTsKfTsKIyA0NzYgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVy biBpbnQgZ2V0YWRkcmluZm8gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NlcnZpY2UsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGFkZHJpbmZvICpfX3Jlc3RyaWN0 IF9fcmVxLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gKipfX3Jlc3Ry aWN0IF9fcGFpKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmcmVlYWRkcmluZm8gKHN0cnVjdCBh ZGRyaW5mbyAqX19haSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmdhaV9zdHJlcnJvciAoaW50 IF9fZWNvZGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0bmFtZWluZm8gKF9fY29uc3Qgc3Ry dWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fc2EsCiAgICAgICAgICAgICAgICAgICAgICAgIHNv Y2tsZW5fdCBfX3NhbGVuLCBjaGFyICpfX3Jlc3RyaWN0IF9faG9zdCwKICAgICAgICAgICAgICAg ICAgICAgICAgc29ja2xlbl90IF9faG9zdGxlbiwgY2hhciAqX19yZXN0cmljdCBfX3NlcnYsCiAg ICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBfX3NlcnZsZW4sIHVuc2lnbmVkIGludCBf X2ZsYWdzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldGFkZHJpbmZvX2EgKGludCBfX21v ZGUsIHN0cnVjdCBnYWljYiAqX19saXN0W10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fZW50LCBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19zaWcpCiAgICAgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGdhaV9zdXNwZW5kIChfX2NvbnN0IHN0cnVjdCBnYWljYiAqX19jb25z dCBfX2xpc3RbXSwgaW50IF9fZW50LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0 cnVjdCB0aW1lc3BlYyAqX190aW1lb3V0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdhaV9lcnJv ciAoc3RydWN0IGdhaWNiICpfX3JlcSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnYWlfY2FuY2Vs IChzdHJ1Y3QgZ2FpY2IgKl9fZ2FpY2JwKSB0aHJvdyAoKTsKCgoKfQojIDM2MzEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMzY0MSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vz ci9pbmNsdWRlL25ldC9pZi5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL25ldC9pZi5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvbmV0L2lm LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNyAiL3Vzci9p bmNsdWRlL25ldC9pZi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAxIDMK IyAyOCAiL3Vzci9pbmNsdWRlL25ldC9pZi5oIiAyIDMKCgoKCgoKc3RydWN0IGlmX25hbWVpbmRl eAogIHsKICAgIHVuc2lnbmVkIGludCBpZl9pbmRleDsKICAgIGNoYXIgKmlmX25hbWU7CiAgfTsK CgoKCmVudW0KICB7CiAgICBJRkZfVVAgPSAweDEsCgogICAgSUZGX0JST0FEQ0FTVCA9IDB4MiwK CiAgICBJRkZfREVCVUcgPSAweDQsCgogICAgSUZGX0xPT1BCQUNLID0gMHg4LAoKICAgIElGRl9Q T0lOVE9QT0lOVCA9IDB4MTAsCgogICAgSUZGX05PVFJBSUxFUlMgPSAweDIwLAoKICAgIElGRl9S VU5OSU5HID0gMHg0MCwKCiAgICBJRkZfTk9BUlAgPSAweDgwLAoKICAgIElGRl9QUk9NSVNDID0g MHgxMDAsCgoKCiAgICBJRkZfQUxMTVVMVEkgPSAweDIwMCwKCgogICAgSUZGX01BU1RFUiA9IDB4 NDAwLAoKICAgIElGRl9TTEFWRSA9IDB4ODAwLAoKCiAgICBJRkZfTVVMVElDQVNUID0gMHgxMDAw LAoKCiAgICBJRkZfUE9SVFNFTCA9IDB4MjAwMCwKCiAgICBJRkZfQVVUT01FRElBID0gMHg0MDAw CgogIH07CgoKCgoKCnN0cnVjdCBpZmFkZHIKICB7CiAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZhX2Fk ZHI7CiAgICB1bmlvbgogICAgICB7CiAgICAgICAgc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFk ZHI7CiAgICAgICAgc3RydWN0IHNvY2thZGRyIGlmdV9kc3RhZGRyOwogICAgICB9IGlmYV9pZnU7 CiAgICBzdHJ1Y3QgaWZhY2UgKmlmYV9pZnA7CiAgICBzdHJ1Y3QgaWZhZGRyICppZmFfbmV4dDsK ICB9OwojIDExMCAiL3Vzci9pbmNsdWRlL25ldC9pZi5oIiAzCnN0cnVjdCBpZm1hcAogIHsKICAg IHVuc2lnbmVkIGxvbmcgaW50IG1lbV9zdGFydDsKICAgIHVuc2lnbmVkIGxvbmcgaW50IG1lbV9l bmQ7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYmFzZV9hZGRyOwogICAgdW5zaWduZWQgY2hhciBp cnE7CiAgICB1bnNpZ25lZCBjaGFyIGRtYTsKICAgIHVuc2lnbmVkIGNoYXIgcG9ydDsKCiAgfTsK CgoKCgpzdHJ1Y3QgaWZyZXEKICB7CgoKICAgIHVuaW9uCiAgICAgIHsKICAgICAgICBjaGFyIGlm cm5fbmFtZVsxNl07CiAgICAgIH0gaWZyX2lmcm47CgogICAgdW5pb24KICAgICAgewogICAgICAg IHN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7CiAgICAgICAgc3RydWN0IHNvY2thZGRyIGlmcnVf ZHN0YWRkcjsKICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9icm9hZGFkZHI7CiAgICAgICAg c3RydWN0IHNvY2thZGRyIGlmcnVfbmV0bWFzazsKICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZy dV9od2FkZHI7CiAgICAgICAgc2hvcnQgaW50IGlmcnVfZmxhZ3M7CiAgICAgICAgaW50IGlmcnVf aXZhbHVlOwogICAgICAgIGludCBpZnJ1X210dTsKICAgICAgICBzdHJ1Y3QgaWZtYXAgaWZydV9t YXA7CiAgICAgICAgY2hhciBpZnJ1X3NsYXZlWzE2XTsKICAgICAgICBjaGFyIGlmcnVfbmV3bmFt ZVsxNl07CiAgICAgICAgX19jYWRkcl90IGlmcnVfZGF0YTsKICAgICAgfSBpZnJfaWZydTsKICB9 OwojIDE3MyAiL3Vzci9pbmNsdWRlL25ldC9pZi5oIiAzCnN0cnVjdCBpZmNvbmYKICB7CiAgICBp bnQgaWZjX2xlbjsKICAgIHVuaW9uCiAgICAgIHsKICAgICAgICBfX2NhZGRyX3QgaWZjdV9idWY7 CiAgICAgICAgc3RydWN0IGlmcmVxICppZmN1X3JlcTsKICAgICAgfSBpZmNfaWZjdTsKICB9OwoK CgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB1bnNpZ25lZCBpbnQgaWZfbmFtZXRvaW5kZXggKF9f Y29uc3QgY2hhciAqX19pZm5hbWUpIHRocm93ICgpOwpleHRlcm4gY2hhciAqaWZfaW5kZXh0b25h bWUgKHVuc2lnbmVkIGludCBfX2lmaW5kZXgsIGNoYXIgKl9faWZuYW1lKSB0aHJvdyAoKTsKCgpl eHRlcm4gc3RydWN0IGlmX25hbWVpbmRleCAqaWZfbmFtZWluZGV4ICh2b2lkKSB0aHJvdyAoKTsK CgpleHRlcm4gdm9pZCBpZl9mcmVlbmFtZWluZGV4IChzdHJ1Y3QgaWZfbmFtZWluZGV4ICpfX3B0 cikgdGhyb3cgKCk7Cgp9CiMgMzY0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09TLmgiIDIKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4u aCIgMSAzCiMgMzY1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09TLmgiIDIKIyAzNjYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvT1MuaCIKIyAxICIvdXNyL2luY2x1ZGUvYXJwYS9pbmV0LmgiIDEgMwojIDIyICIv dXNyL2luY2x1ZGUvYXJwYS9pbmV0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L25ldGluZXQvaW4uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCgoK CgoKCgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2FkZHIgKF9fY29uc3Qg Y2hhciAqX19jcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2xuYW9mIChzdHJ1 Y3QgaW5fYWRkciBfX2luKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRf bWFrZWFkZHIgKGluX2FkZHJfdCBfX25ldCwgaW5fYWRkcl90IF9faG9zdCkKICAgICB0aHJvdyAo KTsKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0b2YgKHN0cnVjdCBpbl9hZGRyIF9faW4pIHRo cm93ICgpOwoKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0d29yayAoX19jb25zdCBjaGFyICpf X2NwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSAoc3RydWN0IGluX2FkZHIg X19pbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGluZXRfcHRvbiAoaW50IF9fYWYsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2NwLAogICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19y ZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19jb25zdCBjaGFyICppbmV0X250 b3AgKGludCBfX2FmLCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19jcCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzb2NrbGVuX3QgX19s ZW4pCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9hdG9uIChfX2Nv bnN0IGNoYXIgKl9fY3AsIHN0cnVjdCBpbl9hZGRyICpfX2lucCkgdGhyb3cgKCk7CgoKCmV4dGVy biBjaGFyICppbmV0X25ldGEgKGluX2FkZHJfdCBfX25ldCwgY2hhciAqX19idWYsIHNpemVfdCBf X2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqaW5ldF9uZXRfbnRvcCAoaW50IF9fYWYs IF9fY29uc3Qgdm9pZCAqX19jcCwgaW50IF9fYml0cywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBp bmV0X25ldF9wdG9uIChpbnQgX19hZiwgX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0 ZXJuIHVuc2lnbmVkIGludCBpbmV0X25zYXBfYWRkciAoX19jb25zdCBjaGFyICpfX2NwLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2J1ZiwgaW50 IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnNhcF9udG9hIChpbnQgX19s ZW4sIF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19jcCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKfQojIDM2NjIgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCgp9CiMgMzY3MyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNs dWRlL25ldGluZXQvdGNwLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC90Y3AuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL25l dGluZXQvdGNwLmgiIDIgMwojIDUzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC90Y3AuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9uZXRpbmV0 L3RjcC5oIiAyIDMKIyA4OCAiL3Vzci9pbmNsdWRlL25ldGluZXQvdGNwLmgiIDMKc3RydWN0IHRj cGhkcgogIHsKICAgIHVfaW50MTZfdCBzb3VyY2U7CiAgICB1X2ludDE2X3QgZGVzdDsKICAgIHVf aW50MzJfdCBzZXE7CiAgICB1X2ludDMyX3QgYWNrX3NlcTsKCiAgICB1X2ludDE2X3QgcmVzMTo0 OwogICAgdV9pbnQxNl90IGRvZmY6NDsKICAgIHVfaW50MTZfdCBmaW46MTsKICAgIHVfaW50MTZf dCBzeW46MTsKICAgIHVfaW50MTZfdCByc3Q6MTsKICAgIHVfaW50MTZfdCBwc2g6MTsKICAgIHVf aW50MTZfdCBhY2s6MTsKICAgIHVfaW50MTZfdCB1cmc6MTsKICAgIHVfaW50MTZfdCByZXMyOjI7 CiMgMTE3ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC90Y3AuaCIgMwogICAgdV9pbnQxNl90IHdpbmRv dzsKICAgIHVfaW50MTZfdCBjaGVjazsKICAgIHVfaW50MTZfdCB1cmdfcHRyOwp9OwoKCmVudW0K ewogIFRDUF9FU1RBQkxJU0hFRCA9IDEsCiAgVENQX1NZTl9TRU5ULAogIFRDUF9TWU5fUkVDViwK ICBUQ1BfRklOX1dBSVQxLAogIFRDUF9GSU5fV0FJVDIsCiAgVENQX1RJTUVfV0FJVCwKICBUQ1Bf Q0xPU0UsCiAgVENQX0NMT1NFX1dBSVQsCiAgVENQX0xBU1RfQUNLLAogIFRDUF9MSVNURU4sCiAg VENQX0NMT1NJTkcKfTsKIyAxNzUgIi91c3IvaW5jbHVkZS9uZXRpbmV0L3RjcC5oIiAzCmVudW0g dGNwX2NhX3N0YXRlCnsKICBUQ1BfQ0FfT3BlbiA9IDAsCiAgVENQX0NBX0Rpc29yZGVyID0gMSwK ICBUQ1BfQ0FfQ1dSID0gMiwKICBUQ1BfQ0FfUmVjb3ZlcnkgPSAzLAogIFRDUF9DQV9Mb3NzID0g NAp9OwoKc3RydWN0IHRjcF9pbmZvCnsKICB1X2ludDhfdCB0Y3BpX3N0YXRlOwogIHVfaW50OF90 IHRjcGlfY2Ffc3RhdGU7CiAgdV9pbnQ4X3QgdGNwaV9yZXRyYW5zbWl0czsKICB1X2ludDhfdCB0 Y3BpX3Byb2JlczsKICB1X2ludDhfdCB0Y3BpX2JhY2tvZmY7CiAgdV9pbnQ4X3QgdGNwaV9vcHRp b25zOwogIHVfaW50OF90IHRjcGlfc25kX3dzY2FsZSA6IDQsIHRjcGlfcmN2X3dzY2FsZSA6IDQ7 CgogIHVfaW50MzJfdCB0Y3BpX3J0bzsKICB1X2ludDMyX3QgdGNwaV9hdG87CiAgdV9pbnQzMl90 IHRjcGlfc25kX21zczsKICB1X2ludDMyX3QgdGNwaV9yY3ZfbXNzOwoKICB1X2ludDMyX3QgdGNw aV91bmFja2VkOwogIHVfaW50MzJfdCB0Y3BpX3NhY2tlZDsKICB1X2ludDMyX3QgdGNwaV9sb3N0 OwogIHVfaW50MzJfdCB0Y3BpX3JldHJhbnM7CiAgdV9pbnQzMl90IHRjcGlfZmFja2V0czsKCgog IHVfaW50MzJfdCB0Y3BpX2xhc3RfZGF0YV9zZW50OwogIHVfaW50MzJfdCB0Y3BpX2xhc3RfYWNr X3NlbnQ7CiAgdV9pbnQzMl90IHRjcGlfbGFzdF9kYXRhX3JlY3Y7CiAgdV9pbnQzMl90IHRjcGlf bGFzdF9hY2tfcmVjdjsKCgogIHVfaW50MzJfdCB0Y3BpX3BtdHU7CiAgdV9pbnQzMl90IHRjcGlf cmN2X3NzdGhyZXNoOwogIHVfaW50MzJfdCB0Y3BpX3J0dDsKICB1X2ludDMyX3QgdGNwaV9ydHR2 YXI7CiAgdV9pbnQzMl90IHRjcGlfc25kX3NzdGhyZXNoOwogIHVfaW50MzJfdCB0Y3BpX3NuZF9j d25kOwogIHVfaW50MzJfdCB0Y3BpX2Fkdm1zczsKICB1X2ludDMyX3QgdGNwaV9yZW9yZGVyaW5n Owp9OwojIDM2NzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9PUy5oIiAyCiMgMzc1NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIgMSAzCiMgMzc1NSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyAxICIv dXNyL2luY2x1ZGUvc3lzL2lwYy5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy9pcGMuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5 cy9pcGMuaCIgMiAzCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaXBjLmgiIDEgMwojIDIz ICIvdXNyL2luY2x1ZGUvYml0cy9pcGMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9pcGMuaCIgMiAzCiMgNDMgIi91c3IvaW5j bHVkZS9iaXRzL2lwYy5oIiAzCnN0cnVjdCBpcGNfcGVybQogIHsKICAgIF9fa2V5X3QgX19rZXk7 CiAgICBfX3VpZF90IHVpZDsKICAgIF9fZ2lkX3QgZ2lkOwogICAgX191aWRfdCBjdWlkOwogICAg X19naWRfdCBjZ2lkOwogICAgdW5zaWduZWQgc2hvcnQgaW50IG1vZGU7CiAgICB1bnNpZ25lZCBz aG9ydCBpbnQgX19wYWQxOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fc2VxOwogICAgdW5zaWdu ZWQgc2hvcnQgaW50IF9fcGFkMjsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKICAg IHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc3lz L2lwYy5oIiAyIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3N5cy9pcGMuaCIgMwpleHRlcm4gIkMiIHsK CgpleHRlcm4ga2V5X3QgZnRvayAoX19jb25zdCBjaGFyICpfX3BhdGhuYW1lLCBpbnQgX19wcm9q X2lkKSB0aHJvdyAoKTsKCn0KIyAzNzU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1MuaCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zaG0uaCIgMSAz CiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvc2htLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvc2htLmgiIDIgMwoKCiMgMSAiL3Vzci9s b2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zaG0uaCIgMiAzCgoKIyAxICIvdXNy L2luY2x1ZGUvc3lzL2lwYy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zaG0uaCIgMiAz CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaG0uaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9i aXRzL3NobS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjQgIi91 c3IvaW5jbHVkZS9iaXRzL3NobS5oIiAyIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2JpdHMvc2htLmgi IDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBzaG1hdHRfdDsKCgpzdHJ1Y3Qgc2htaWRfZHMK ICB7CiAgICBzdHJ1Y3QgaXBjX3Blcm0gc2htX3Blcm07CiAgICBzaXplX3Qgc2htX3NlZ3N6Owog ICAgX190aW1lX3Qgc2htX2F0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwog ICAgX190aW1lX3Qgc2htX2R0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQyOwog ICAgX190aW1lX3Qgc2htX2N0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwog ICAgX19waWRfdCBzaG1fY3BpZDsKICAgIF9fcGlkX3Qgc2htX2xwaWQ7CiAgICBzaG1hdHRfdCBz aG1fbmF0dGNoOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQ0OwogICAgdW5zaWduZWQg bG9uZyBpbnQgX191bnVzZWQ1OwogIH07CiMgNzAgIi91c3IvaW5jbHVkZS9iaXRzL3NobS5oIiAz CnN0cnVjdCBzaG1pbmZvCiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgc2htbWF4OwogICAgdW5z aWduZWQgbG9uZyBpbnQgc2htbWluOwogICAgdW5zaWduZWQgbG9uZyBpbnQgc2htbW5pOwogICAg dW5zaWduZWQgbG9uZyBpbnQgc2htc2VnOwogICAgdW5zaWduZWQgbG9uZyBpbnQgc2htYWxsOwog ICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191 bnVzZWQyOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwogICAgdW5zaWduZWQgbG9u ZyBpbnQgX191bnVzZWQ0OwogIH07CgpzdHJ1Y3Qgc2htX2luZm8KICB7CiAgICBpbnQgdXNlZF9p ZHM7CiAgICB1bnNpZ25lZCBsb25nIGludCBzaG1fdG90OwogICAgdW5zaWduZWQgbG9uZyBpbnQg c2htX3JzczsKICAgIHVuc2lnbmVkIGxvbmcgaW50IHNobV9zd3A7CiAgICB1bnNpZ25lZCBsb25n IGludCBzd2FwX2F0dGVtcHRzOwogICAgdW5zaWduZWQgbG9uZyBpbnQgc3dhcF9zdWNjZXNzZXM7 CiAgfTsKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zaG0uaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9zeXMvc2htLmgiIDIgMwojIDQ0ICIv dXNyL2luY2x1ZGUvc3lzL3NobS5oIiAzCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IF9fZ2V0 cGFnZXNpemUgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK CgoKZXh0ZXJuIGludCBzaG1jdGwgKGludCBfX3NobWlkLCBpbnQgX19jbWQsIHN0cnVjdCBzaG1p ZF9kcyAqX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2htZ2V0IChrZXlfdCBfX2tleSwg c2l6ZV90IF9fc2l6ZSwgaW50IF9fc2htZmxnKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqc2ht YXQgKGludCBfX3NobWlkLCBfX2NvbnN0IHZvaWQgKl9fc2htYWRkciwgaW50IF9fc2htZmxnKQog ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2htZHQgKF9fY29uc3Qgdm9pZCAqX19zaG1hZGRy KSB0aHJvdyAoKTsKCn0KIyAzNzU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvT1MuaCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZW0uaCIgMSAzCiMg MjIgIi91c3IvaW5jbHVkZS9zeXMvc2VtLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvc2VtLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2Nh bC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zZW0uaCIgMiAzCgoKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL2lwYy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZW0uaCIgMiAzCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZW0uaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRz L3NlbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNCAiL3Vzci9p bmNsdWRlL2JpdHMvc2VtLmgiIDIgMwojIDM5ICIvdXNyL2luY2x1ZGUvYml0cy9zZW0uaCIgMwpz dHJ1Y3Qgc2VtaWRfZHMKewogIHN0cnVjdCBpcGNfcGVybSBzZW1fcGVybTsKICBfX3RpbWVfdCBz ZW1fb3RpbWU7CiAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwogIF9fdGltZV90IHNlbV9j dGltZTsKICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDI7CiAgdW5zaWduZWQgbG9uZyBpbnQg c2VtX25zZW1zOwogIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMzsKICB1bnNpZ25lZCBsb25n IGludCBfX3VudXNlZDQ7Cn07CiMgNzMgIi91c3IvaW5jbHVkZS9iaXRzL3NlbS5oIiAzCnN0cnVj dCBzZW1pbmZvCnsKICBpbnQgc2VtbWFwOwogIGludCBzZW1tbmk7CiAgaW50IHNlbW1uczsKICBp bnQgc2VtbW51OwogIGludCBzZW1tc2w7CiAgaW50IHNlbW9wbTsKICBpbnQgc2VtdW1lOwogIGlu dCBzZW11c3o7CiAgaW50IHNlbXZteDsKICBpbnQgc2VtYWVtOwp9OwojIDMyICIvdXNyL2luY2x1 ZGUvc3lzL3NlbS5oIiAyIDMKCgoKCgpzdHJ1Y3Qgc2VtYnVmCnsKICB1bnNpZ25lZCBzaG9ydCBp bnQgc2VtX251bTsKICBzaG9ydCBpbnQgc2VtX29wOwogIHNob3J0IGludCBzZW1fZmxnOwp9OwoK CmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2VtY3RsIChpbnQgX19zZW1pZCwgaW50IF9fc2Vt bnVtLCBpbnQgX19jbWQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzZW1nZXQgKGtleV90 IF9fa2V5LCBpbnQgX19uc2VtcywgaW50IF9fc2VtZmxnKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHNlbW9wIChpbnQgX19zZW1pZCwgc3RydWN0IHNlbWJ1ZiAqX19zb3BzLCBzaXplX3QgX19uc29w cykgdGhyb3cgKCk7Cgp9CiMgMzc2MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09TLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9maWxlLmgiIDEgMwoj IDIyICIvdXNyL2luY2x1ZGUvc3lzL2ZpbGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9maWxlLmgiIDIgMwoKCgoKCmV4dGVybiAi QyIgewojIDUxICIvdXNyL2luY2x1ZGUvc3lzL2ZpbGUuaCIgMwpleHRlcm4gaW50IGZsb2NrIChp bnQgX19mZCwgaW50IF9fb3BlcmF0aW9uKSB0aHJvdyAoKTsKCgp9CiMgMzc2NCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3RpbWUuaCIgMSAzCiMgMzc2NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNl LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIg MiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9yZXNvdXJjZS5oIiAxIDMKIyAyNCAiL3Vzci9p bmNsdWRlL2JpdHMvcmVzb3VyY2UuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi IDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9yZXNvdXJjZS5oIiAyIDMKCgoKCgoKCmVudW0g X19ybGltaXRfcmVzb3VyY2UKewoKICBSTElNSVRfQ1BVID0gMCwKCgoKICBSTElNSVRfRlNJWkUg PSAxLAoKCgogIFJMSU1JVF9EQVRBID0gMiwKCgoKICBSTElNSVRfU1RBQ0sgPSAzLAoKCgogIFJM SU1JVF9DT1JFID0gNCwKCgoKCgoKICBSTElNSVRfUlNTID0gNSwKCgoKICBSTElNSVRfTk9GSUxF ID0gNywKICBSTElNSVRfT0ZJTEUgPSBSTElNSVRfTk9GSUxFLAoKCgoKICBSTElNSVRfQVMgPSA5 LAoKCgogIFJMSU1JVF9OUFJPQyA9IDYsCgoKCiAgUkxJTUlUX01FTUxPQ0sgPSA4LAoKCgogIFJM SU1JVF9MT0NLUyA9IDEwLAoKCiAgUkxJTUlUX05MSU1JVFMgPSAxMSwKICBSTElNX05MSU1JVFMg PSBSTElNSVRfTkxJTUlUUwoKCn07CiMgMTA3ICIvdXNyL2luY2x1ZGUvYml0cy9yZXNvdXJjZS5o IiAzCnR5cGVkZWYgX19ybGltX3QgcmxpbV90OwoKCgoKdHlwZWRlZiBfX3JsaW02NF90IHJsaW02 NF90OwoKCnN0cnVjdCBybGltaXQKICB7CgogICAgcmxpbV90IHJsaW1fY3VyOwoKICAgIHJsaW1f dCBybGltX21heDsKICB9OwoKCnN0cnVjdCBybGltaXQ2NAogIHsKCiAgICBybGltNjRfdCBybGlt X2N1cjsKCiAgICBybGltNjRfdCBybGltX21heDsKIH07CgoKCmVudW0gX19ydXNhZ2Vfd2hvCnsK CiAgUlVTQUdFX1NFTEYgPSAwLAoKCgogIFJVU0FHRV9DSElMRFJFTiA9IC0xLAoKCgogIFJVU0FH RV9CT1RIID0gLTIKCn07CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDE1 MSAiL3Vzci9pbmNsdWRlL2JpdHMvcmVzb3VyY2UuaCIgMiAzCgoKc3RydWN0IHJ1c2FnZQogIHsK CiAgICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsKCiAgICBzdHJ1Y3QgdGltZXZhbCBydV9zdGlt ZTsKCiAgICBsb25nIGludCBydV9tYXhyc3M7CgoKICAgIGxvbmcgaW50IHJ1X2l4cnNzOwoKICAg IGxvbmcgaW50IHJ1X2lkcnNzOwoKICAgIGxvbmcgaW50IHJ1X2lzcnNzOwoKCiAgICBsb25nIGlu dCBydV9taW5mbHQ7CgogICAgbG9uZyBpbnQgcnVfbWFqZmx0OwoKICAgIGxvbmcgaW50IHJ1X25z d2FwOwoKCiAgICBsb25nIGludCBydV9pbmJsb2NrOwoKICAgIGxvbmcgaW50IHJ1X291YmxvY2s7 CgogICAgbG9uZyBpbnQgcnVfbXNnc25kOwoKICAgIGxvbmcgaW50IHJ1X21zZ3JjdjsKCiAgICBs b25nIGludCBydV9uc2lnbmFsczsKCgoKICAgIGxvbmcgaW50IHJ1X252Y3N3OwoKCiAgICBsb25n IGludCBydV9uaXZjc3c7CiAgfTsKCgoKCgoKCmVudW0gX19wcmlvcml0eV93aGljaAp7CiAgUFJJ T19QUk9DRVNTID0gMCwKCiAgUFJJT19QR1JQID0gMSwKCiAgUFJJT19VU0VSID0gMgoKfTsKIyAy NiAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAyIDMKCgoKCgoKZXh0ZXJuICJDIiB7CgoK CgoKCnR5cGVkZWYgZW51bSBfX3JsaW1pdF9yZXNvdXJjZSBfX3JsaW1pdF9yZXNvdXJjZV90Owp0 eXBlZGVmIGVudW0gX19ydXNhZ2Vfd2hvIF9fcnVzYWdlX3dob190Owp0eXBlZGVmIGVudW0gX19w cmlvcml0eV93aGljaCBfX3ByaW9yaXR5X3doaWNoX3Q7CiMgNTEgIi91c3IvaW5jbHVkZS9zeXMv cmVzb3VyY2UuaCIgMwpleHRlcm4gaW50IGdldHJsaW1pdCAoX19ybGltaXRfcmVzb3VyY2VfdCBf X3Jlc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJsaW1pdCAqX19ybGltaXRz KSB0aHJvdyAoKTsKIyA2MyAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzCmV4dGVybiBp bnQgZ2V0cmxpbWl0NjQgKF9fcmxpbWl0X3Jlc291cmNlX3QgX19yZXNvdXJjZSwKICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHJsaW1pdDY0ICpfX3JsaW1pdHMpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gaW50IHNldHJsaW1pdCAoX19ybGltaXRfcmVzb3VyY2VfdCBfX3Jlc291cmNlLAog ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgcmxpbWl0ICpfX3JsaW1pdHMpIHRo cm93ICgpOwojIDgzICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMKZXh0ZXJuIGludCBz ZXRybGltaXQ2NCAoX19ybGltaXRfcmVzb3VyY2VfdCBfX3Jlc291cmNlLAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBybGltaXQ2NCAqX19ybGltaXRzKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgZ2V0cnVzYWdlIChfX3J1c2FnZV93aG9fdCBfX3dobywgc3RydWN0IHJ1 c2FnZSAqX191c2FnZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRwcmlvcml0eSAoX19w cmlvcml0eV93aGljaF90IF9fd2hpY2gsIGlkX3QgX193aG8pIHRocm93ICgpOwoKCgpleHRlcm4g aW50IHNldHByaW9yaXR5IChfX3ByaW9yaXR5X3doaWNoX3QgX193aGljaCwgaWRfdCBfX3dobywg aW50IF9fcHJpbykKICAgICB0aHJvdyAoKTsKCn0KIyAzNzY2ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zeXMv d2FpdC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMK CmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwojIDMxICIvdXNy L2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5o IiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMwojIDk4ICIvdXNyL2luY2x1 ZGUvc3lzL3dhaXQuaCIgMwp0eXBlZGVmIGVudW0KewogIFBfQUxMLAogIFBfUElELAogIFBfUEdJ RAp9IGlkdHlwZV90OwoKCgoKCmV4dGVybiBfX3BpZF90IHdhaXQgKHZvaWQgKiBfX3N0YXRfbG9j KSB0aHJvdyAoKTsKIyAxMjkgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzCmV4dGVybiBfX3Bp ZF90IHdhaXRwaWQgKF9fcGlkX3QgX19waWQsIGludCAqX19zdGF0X2xvYywgaW50IF9fb3B0aW9u cykgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAxIDMKIyAy NSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv d29yZHNpemUuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMiAzCiMg MTM0ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzCiMgMTQyICIvdXNyL2luY2x1ZGUvc3lz L3dhaXQuaCIgMwpleHRlcm4gaW50IHdhaXRpZCAoaWR0eXBlX3QgX19pZHR5cGUsIF9faWRfdCBf X2lkLCBzaWdpbmZvX3QgKl9faW5mb3AsCiAgICAgICAgICAgICAgICAgICBpbnQgX19vcHRpb25z KSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgcnVzYWdlOwoKCgoKCgpleHRlcm4gX19waWRfdCB3YWl0 MyAodm9pZCAqIF9fc3RhdF9sb2MsIGludCBfX29wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgcnVzYWdlICogX191c2FnZSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IHJ1c2FnZTsK CgpleHRlcm4gX19waWRfdCB3YWl0NCAoX19waWRfdCBfX3BpZCwgdm9pZCAqIF9fc3RhdF9sb2Ms IGludCBfX29wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnVzYWdlICpfX3Vz YWdlKSB0aHJvdyAoKTsKCgoKfQojIDM3NjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAxIDMKIyAy NiAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg MwojIDI3ICIvdXNyL2luY2x1ZGUvcHdkLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvcHdkLmgiIDIgMwoK CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAyIDMKIyA1 MCAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAzCnN0cnVjdCBwYXNzd2QKewogIGNoYXIgKnB3X25hbWU7 CiAgY2hhciAqcHdfcGFzc3dkOwogIF9fdWlkX3QgcHdfdWlkOwogIF9fZ2lkX3QgcHdfZ2lkOwog IGNoYXIgKnB3X2dlY29zOwogIGNoYXIgKnB3X2RpcjsKICBjaGFyICpwd19zaGVsbDsKfTsKCgoK CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvcHdkLmgiIDIgMwoKCgoK CmV4dGVybiB2b2lkIHNldHB3ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRw d2VudCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwYXNzd2QgKmdldHB3ZW50ICh2 b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgcGFzc3dkICpmZ2V0cHdlbnQgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHB3ZW50IChfX2NvbnN0IHN0cnVj dCBwYXNzd2QgKl9fcmVzdHJpY3QgX19wLAogICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jl c3RyaWN0IF9fZikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgcGFzc3dkICpnZXRwd3VpZCAo X191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwYXNzd2QgKmdldHB3bmFt IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgMTExICIvdXNyL2luY2x1ZGUvcHdk LmgiIDMKZXh0ZXJuIGludCBnZXRwd2VudF9yIChzdHJ1Y3QgcGFzc3dkICpfX3Jlc3RyaWN0IF9f cmVzdWx0YnVmLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZm ZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFzc3dk ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwd3VpZF9y IChfX3VpZF90IF9fdWlkLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYXNzd2QgKl9f cmVzdHJpY3QgX19yZXN1bHRidWYsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0 cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBwYXNzd2QgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg Z2V0cHduYW1fciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgcGFzc3dkICpfX3Jlc3RyaWN0IF9fcmVzdWx0YnVmLAogICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZmZXIsIHNpemVfdCBfX2J1Zmxl biwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFzc3dkICoqX19yZXN0cmljdCBfX3Jl c3VsdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmZ2V0cHdlbnRfciAoRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhc3N3ZCAqX19y ZXN0cmljdCBfX3Jlc3VsdGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0 cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgcGFzc3dkICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CiMgMTQyICIvdXNy L2luY2x1ZGUvcHdkLmgiIDMKZXh0ZXJuIGludCBnZXRwdyAoX191aWRfdCBfX3VpZCwgY2hhciAq X19idWZmZXIpIHRocm93ICgpOwoKCn0KIyAzNzY4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lvY3Rs LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvc3lzL2lvY3RsLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvaW9jdGwuaCIgMiAzCgpl eHRlcm4gIkMiIHsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2lvY3Rscy5oIiAxIDMKIyAyNCAi L3Vzci9pbmNsdWRlL2JpdHMvaW9jdGxzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2lvY3Rs cy5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2lvY3RsLmgiIDEgMwojIDUgIi91c3Iv aW5jbHVkZS9hc20vaW9jdGxzLmgiIDIgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9pb2N0bHMu aCIgMiAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvaW9jdGwuaCIgMiAzCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9pb2N0bC10eXBlcy5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvaW9j dGwtdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9hc20vaW9jdGxzLmgiIDEgMwojIDI2ICIv dXNyL2luY2x1ZGUvYml0cy9pb2N0bC10eXBlcy5oIiAyIDMKCgpzdHJ1Y3Qgd2luc2l6ZQogIHsK ICAgIHVuc2lnbmVkIHNob3J0IGludCB3c19yb3c7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgd3Nf Y29sOwogICAgdW5zaWduZWQgc2hvcnQgaW50IHdzX3hwaXhlbDsKICAgIHVuc2lnbmVkIHNob3J0 IGludCB3c195cGl4ZWw7CiAgfTsKCgpzdHJ1Y3QgdGVybWlvCiAgewogICAgdW5zaWduZWQgc2hv cnQgaW50IGNfaWZsYWc7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgY19vZmxhZzsKICAgIHVuc2ln bmVkIHNob3J0IGludCBjX2NmbGFnOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGNfbGZsYWc7CiAg ICB1bnNpZ25lZCBjaGFyIGNfbGluZTsKICAgIHVuc2lnbmVkIGNoYXIgY19jY1s4XTsKfTsKIyAz MSAiL3Vzci9pbmNsdWRlL3N5cy9pb2N0bC5oIiAyIDMKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv c3lzL3R0eWRlZmF1bHRzLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvc3lzL2lvY3RsLmgiIDIg MwoKCgoKZXh0ZXJuIGludCBpb2N0bCAoaW50IF9fZmQsIHVuc2lnbmVkIGxvbmcgaW50IF9fcmVx dWVzdCwgLi4uKSB0aHJvdyAoKTsKCn0KIyAzNzcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDM3ODUgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGVy bWlvcy5oIiAxIDMKCgojIDEgIi91c3IvaW5jbHVkZS90ZXJtaW9zLmgiIDEgMwojIDI2ICIvdXNy L2luY2x1ZGUvdGVybWlvcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj IDI3ICIvdXNyL2luY2x1ZGUvdGVybWlvcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3R5cGVzLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvdGVybWlvcy5oIiAyIDMKCgoKCgoKZXh0 ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGVybWlvcy5oIiAxIDMKIyAyNCAi L3Vzci9pbmNsdWRlL2JpdHMvdGVybWlvcy5oIiAzCnR5cGVkZWYgdW5zaWduZWQgY2hhciBjY190 Owp0eXBlZGVmIHVuc2lnbmVkIGludCBzcGVlZF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB0Y2Zs YWdfdDsKCgpzdHJ1Y3QgdGVybWlvcwogIHsKICAgIHRjZmxhZ190IGNfaWZsYWc7CiAgICB0Y2Zs YWdfdCBjX29mbGFnOwogICAgdGNmbGFnX3QgY19jZmxhZzsKICAgIHRjZmxhZ190IGNfbGZsYWc7 CiAgICBjY190IGNfbGluZTsKICAgIGNjX3QgY19jY1szMl07CiAgICBzcGVlZF90IGNfaXNwZWVk OwogICAgc3BlZWRfdCBjX29zcGVlZDsKICB9OwojIDQxICIvdXNyL2luY2x1ZGUvdGVybWlvcy5o IiAyIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3Rlcm1pb3MuaCIgMwpleHRlcm4gc3BlZWRfdCBjZmdl dG9zcGVlZCAoX19jb25zdCBzdHJ1Y3QgdGVybWlvcyAqX190ZXJtaW9zX3ApIHRocm93ICgpOwoK CmV4dGVybiBzcGVlZF90IGNmZ2V0aXNwZWVkIChfX2NvbnN0IHN0cnVjdCB0ZXJtaW9zICpfX3Rl cm1pb3NfcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjZnNldG9zcGVlZCAoc3RydWN0IHRlcm1p b3MgKl9fdGVybWlvc19wLCBzcGVlZF90IF9fc3BlZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg Y2ZzZXRpc3BlZWQgKHN0cnVjdCB0ZXJtaW9zICpfX3Rlcm1pb3NfcCwgc3BlZWRfdCBfX3NwZWVk KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjZnNldHNwZWVkIChzdHJ1Y3QgdGVybWlvcyAqX190 ZXJtaW9zX3AsIHNwZWVkX3QgX19zcGVlZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRjZ2V0 YXR0ciAoaW50IF9fZmQsIHN0cnVjdCB0ZXJtaW9zICpfX3Rlcm1pb3NfcCkgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgdGNzZXRhdHRyIChpbnQgX19mZCwgaW50IF9fb3B0aW9uYWxfYWN0aW9ucywK ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRlcm1pb3MgKl9fdGVybWlvc19w KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNmbWFrZXJhdyAoc3RydWN0IHRlcm1pb3MgKl9f dGVybWlvc19wKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0Y3NlbmRicmVhayAoaW50IF9fZmQs IGludCBfX2R1cmF0aW9uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRjZHJhaW4gKGludCBfX2Zk KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0Y2ZsdXNoIChpbnQgX19mZCwgaW50IF9fcXVldWVf c2VsZWN0b3IpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRjZmxvdyAoaW50IF9fZmQsIGludCBf X2FjdGlvbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19waWRfdCB0Y2dldHNpZCAoaW50IF9fZmQp IHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R0eWRlZmF1bHRzLmgiIDEgMwoj IDEwMyAiL3Vzci9pbmNsdWRlL3Rlcm1pb3MuaCIgMiAzCgoKfQojIDQgIi91c3IvaW5jbHVkZS9z eXMvdGVybWlvcy5oIiAyIDMKIyAzNzg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDM4MDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEgIi91c3IvaW5jbHVkZS9haW8uaCIgMSAzCiMg MjYgIi91c3IvaW5jbHVkZS9haW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx IDMKIyAyNyAiL3Vzci9pbmNsdWRlL2Fpby5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZmNudGwu aCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9haW8uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3Np Z25hbC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2Fpby5oIiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2Fpby5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvYWlvLmgiIDIgMwoKZXh0 ZXJuICJDIiB7CgoKc3RydWN0IGFpb2NiCnsKICBpbnQgYWlvX2ZpbGRlczsKICBpbnQgYWlvX2xp b19vcGNvZGU7CiAgaW50IGFpb19yZXFwcmlvOwogIHZvbGF0aWxlIHZvaWQgKmFpb19idWY7CiAg c2l6ZV90IGFpb19uYnl0ZXM7CiAgc3RydWN0IHNpZ2V2ZW50IGFpb19zaWdldmVudDsKCgogIHN0 cnVjdCBhaW9jYiAqX19uZXh0X3ByaW87CiAgaW50IF9fYWJzX3ByaW87CiAgaW50IF9fcG9saWN5 OwogIGludCBfX2Vycm9yX2NvZGU7CiAgX19zc2l6ZV90IF9fcmV0dXJuX3ZhbHVlOwoKCiAgX19v ZmZfdCBhaW9fb2Zmc2V0OwogIGNoYXIgX19wYWRbc2l6ZW9mIChfX29mZjY0X3QpIC0gc2l6ZW9m IChfX29mZl90KV07CgoKCiAgY2hhciBfX3VudXNlZFszMl07Cn07CgoKCgpzdHJ1Y3QgYWlvY2I2 NAp7CiAgaW50IGFpb19maWxkZXM7CiAgaW50IGFpb19saW9fb3Bjb2RlOwogIGludCBhaW9fcmVx cHJpbzsKICB2b2xhdGlsZSB2b2lkICphaW9fYnVmOwogIHNpemVfdCBhaW9fbmJ5dGVzOwogIHN0 cnVjdCBzaWdldmVudCBhaW9fc2lnZXZlbnQ7CgoKICBzdHJ1Y3QgYWlvY2IgKl9fbmV4dF9wcmlv OwogIGludCBfX2Fic19wcmlvOwogIGludCBfX3BvbGljeTsKICBpbnQgX19lcnJvcl9jb2RlOwog IF9fc3NpemVfdCBfX3JldHVybl92YWx1ZTsKCiAgX19vZmY2NF90IGFpb19vZmZzZXQ7CiAgY2hh ciBfX3VudXNlZFszMl07Cn07CgoKCgoKCnN0cnVjdCBhaW9pbml0CiAgewogICAgaW50IGFpb190 aHJlYWRzOwogICAgaW50IGFpb19udW07CiAgICBpbnQgYWlvX2xvY2tzOwogICAgaW50IGFpb191 c2VkYmE7CiAgICBpbnQgYWlvX2RlYnVnOwogICAgaW50IGFpb19udW11c2VyczsKICAgIGludCBh aW9faWRsZV90aW1lOwoKICAgIGludCBhaW9fcmVzZXJ2ZWQ7CiAgfTsKCgoKCmVudW0KewogIEFJ T19DQU5DRUxFRCwKCiAgQUlPX05PVENBTkNFTEVELAoKICBBSU9fQUxMRE9ORQoKfTsKCgoKZW51 bQp7CiAgTElPX1JFQUQsCgogIExJT19XUklURSwKCiAgTElPX05PUAoKfTsKCgoKZW51bQp7CiAg TElPX1dBSVQsCgogIExJT19OT1dBSVQKCn07CgoKCgpleHRlcm4gdm9pZCBhaW9faW5pdCAoX19j b25zdCBzdHJ1Y3QgYWlvaW5pdCAqX19pbml0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGFp b19yZWFkIChzdHJ1Y3QgYWlvY2IgKl9fYWlvY2JwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgYWlv X3dyaXRlIChzdHJ1Y3QgYWlvY2IgKl9fYWlvY2JwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxp b19saXN0aW8gKGludCBfX21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFpb2Ni ICpfX2NvbnN0IF9fbGlzdFtdLAogICAgICAgICAgICAgICAgICAgICAgIGludCBfX25lbnQsIHN0 cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBh aW9fZXJyb3IgKF9fY29uc3Qgc3RydWN0IGFpb2NiICpfX2Fpb2NicCkgdGhyb3cgKCk7CgpleHRl cm4gX19zc2l6ZV90IGFpb19yZXR1cm4gKHN0cnVjdCBhaW9jYiAqX19haW9jYnApIHRocm93ICgp OwoKCgpleHRlcm4gaW50IGFpb19jYW5jZWwgKGludCBfX2ZpbGRlcywgc3RydWN0IGFpb2NiICpf X2Fpb2NicCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgYWlvX3N1c3BlbmQgKF9fY29uc3Qgc3Ry dWN0IGFpb2NiICpfX2NvbnN0IF9fbGlzdFtdLCBpbnQgX19uZW50LAogICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IGFpb19mc3luYyAoaW50IF9fb3BlcmF0aW9uLCBzdHJ1Y3Qg YWlvY2IgKl9fYWlvY2JwKSB0aHJvdyAoKTsKIyAyMTUgIi91c3IvaW5jbHVkZS9haW8uaCIgMwpl eHRlcm4gaW50IGFpb19yZWFkNjQgKHN0cnVjdCBhaW9jYjY0ICpfX2Fpb2NicCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgYWlvX3dyaXRlNjQgKHN0cnVjdCBhaW9jYjY0ICpfX2Fpb2NicCkgdGhyb3cg KCk7CgpleHRlcm4gaW50IGxpb19saXN0aW82NCAoaW50IF9fbW9kZSwKICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBhaW9jYjY0ICpfX2NvbnN0IF9fbGlzdFtdLAogICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fbmVudCwgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fc2ln KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBhaW9fZXJyb3I2NCAoX19jb25zdCBzdHJ1Y3Qg YWlvY2I2NCAqX19haW9jYnApIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGFpb19yZXR1cm42 NCAoc3RydWN0IGFpb2NiNjQgKl9fYWlvY2JwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgYWlvX2Nh bmNlbDY0IChpbnQgX19maWxkZXMsIHN0cnVjdCBhaW9jYjY0ICpfX2Fpb2NicCkgdGhyb3cgKCk7 CgpleHRlcm4gaW50IGFpb19zdXNwZW5kNjQgKF9fY29uc3Qgc3RydWN0IGFpb2NiNjQgKl9fY29u c3QgX19saXN0W10sIGludCBfX25lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0KQogICAgIHRocm93ICgpOwoK ZXh0ZXJuIGludCBhaW9fZnN5bmM2NCAoaW50IF9fb3BlcmF0aW9uLCBzdHJ1Y3QgYWlvY2I2NCAq X19haW9jYnApIHRocm93ICgpOwoKCn0KIyAzODAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvcGFy YW0uaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMwojIDEgIi91c3IvbG9j YWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1p dHMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3N5cy9wYXJhbS5o IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvcGFyYW0uaCIgMSAzCgoKCiMgMSAiL3Vzci9p bmNsdWRlL2FzbS9wYXJhbS5oIiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvcGFyYW0uaCIg MiAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMiAzCiMgNDIgIi91c3IvaW5jbHVk ZS9zeXMvcGFyYW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgNDMg Ii91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMiAzCiMgMzgwNyAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKCgoKIyAxICIvdXNyL2luY2x1ZGUv c3lzL3VuLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3VuLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc3lzL3VuLmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk ZS9zeXMvdW4uaCIgMiAzCgpleHRlcm4gIkMiIHsKCgpzdHJ1Y3Qgc29ja2FkZHJfdW4KICB7CiAg ICBzYV9mYW1pbHlfdCBzdW5fZmFtaWx5OwogICAgY2hhciBzdW5fcGF0aFsxMDhdOwogIH07CgoK CiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3N5cy91 bi5oIiAyIDMKCgoKCgoKfQojIDM4MTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMzgyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3Vjb250ZXh0LmgiIDEg MwojIDM4MjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P Uy5oIiAyCgoKCgojIDEgIi91c3IvaW5jbHVkZS9wb2xsLmgiIDEgMwojIDEgIi91c3IvaW5jbHVk ZS9zeXMvcG9sbC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9wb2xsLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9zeXMvcG9sbC5o IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3BvbGwuaCIgMSAzCiMgMjcgIi91c3IvaW5j bHVkZS9zeXMvcG9sbC5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBuZmRzX3Q7 CgoKc3RydWN0IHBvbGxmZAogIHsKICAgIGludCBmZDsKICAgIHNob3J0IGludCBldmVudHM7CiAg ICBzaG9ydCBpbnQgcmV2ZW50czsKICB9OwoKCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50 IHBvbGwgKHN0cnVjdCBwb2xsZmQgKl9fZmRzLCBuZmRzX3QgX19uZmRzLCBpbnQgX190aW1lb3V0 KSB0aHJvdyAoKTsKCn0KIyAyICIvdXNyL2luY2x1ZGUvcG9sbC5oIiAyIDMKIyAzODMwICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDM4NzMg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEg Ii91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMzg3NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyAzODg0ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKIyAxICIvdXNyL2luY2x1ZGUvZGxm Y24uaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9kbGZjbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2ZlYXR1cmVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvZGxmY24uaCIgMiAzCgoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9kbGZjbi5oIiAxIDMKIyA1OCAiL3Vzci9pbmNsdWRlL2JpdHMvZGxm Y24uaCIgMwpleHRlcm4gdm9pZCBfZGxfbWNvdW50X3dyYXBwZXJfY2hlY2sgKHZvaWQgKl9fc2Vs ZnBjKSB0aHJvdyAoKTsKIyAyNyAiL3Vzci9pbmNsdWRlL2RsZmNuLmgiIDIgMwojIDQxICIvdXNy L2luY2x1ZGUvZGxmY24uaCIgMwpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIHZvaWQgKmRsb3BlbiAo X19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX21vZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IGRsY2xvc2UgKHZvaWQgKl9faGFuZGxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgKmRsc3lt ICh2b2lkICpfX3Jlc3RyaWN0IF9faGFuZGxlLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25hbWUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKmRsdnN5 bSAodm9pZCAqX19yZXN0cmljdCBfX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fdmVyc2lvbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmRs ZXJyb3IgKHZvaWQpIHRocm93ICgpOwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fY29uc3QgY2hh ciAqZGxpX2ZuYW1lOwogIHZvaWQgKmRsaV9mYmFzZTsKICBfX2NvbnN0IGNoYXIgKmRsaV9zbmFt ZTsKICB2b2lkICpkbGlfc2FkZHI7Cn0gRGxfaW5mbzsKCgoKZXh0ZXJuIGludCBkbGFkZHIgKGNv bnN0IHZvaWQgKl9fYWRkcmVzcywgRGxfaW5mbyAqX19pbmZvKSB0aHJvdyAoKTsKCgp9CiMgMzg4 NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIK CgoKICB0eXBlZGVmIHZvaWQgKkFDRV9TSExJQl9IQU5ETEU7CiMgMzk1NiAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRl L3N5cy9tbWFuLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc3lzL21tYW4uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1 ZGUvc3lzL21tYW4uaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjcgIi91c3IvaW5j bHVkZS9zeXMvbW1hbi5oIiAyIDMKIyA0MiAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9tbWFuLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3lzL21t YW4uaCIgMiAzCgoKCgpleHRlcm4gIkMiIHsKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgi IDMKZXh0ZXJuIHZvaWQgKm1tYXAgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19w cm90LAogICAgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29mZl90IF9f b2Zmc2V0KSB0aHJvdyAoKTsKIyA3MSAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDMKZXh0ZXJu IHZvaWQgKm1tYXA2NCAodm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4sIGludCBfX3Byb3QsCiAg ICAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCBpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zm c2V0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbXVubWFwICh2b2lkICpfX2FkZHIsIHNpemVf dCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG1wcm90ZWN0ICh2b2lkICpfX2FkZHIs IHNpemVfdCBfX2xlbiwgaW50IF9fcHJvdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG1zeW5j ICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fZmxhZ3MpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBtYWR2aXNlICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fYWR2 aWNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwb3NpeF9tYWR2aXNlICh2b2lkICpfX2FkZHIs IHNpemVfdCBfX2xlbiwgaW50IF9fYWR2aWNlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbWxv Y2sgKF9fY29uc3Qgdm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgbXVubG9jayAoX19jb25zdCB2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbikgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IG1sb2NrYWxsIChpbnQgX19mbGFncykgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgbXVubG9ja2FsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1y ZW1hcCAodm9pZCAqX19hZGRyLCBzaXplX3QgX19vbGRfbGVuLCBzaXplX3QgX19uZXdfbGVuLAog ICAgICAgICAgICAgICAgICAgICBpbnQgX19tYXlfbW92ZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBpbnQgbWluY29yZSAodm9pZCAqX19zdGFydCwgc2l6ZV90IF9fbGVuLCB1bnNpZ25lZCBjaGFy ICpfX3ZlYyk7CgoKCgpleHRlcm4gaW50IHNobV9vcGVuIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwg aW50IF9fb2ZsYWcsIG1vZGVfdCBfX21vZGUpOwoKCmV4dGVybiBpbnQgc2htX3VubGluayAoX19j b25zdCBjaGFyICpfX25hbWUpOwoKfQojIDM5NTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMv bXNnLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvc3lzL21zZy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc3lzL21zZy5oIiAyIDMKCgoj IDEgIi91c3IvaW5jbHVkZS9zeXMvaXBjLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL21z Zy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21zcS5oIiAxIDMKIyAyMyAiL3Vzci9p bmNsdWRlL2JpdHMvbXNxLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK IyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvbXNxLmgiIDIgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0 cy9tc3EuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IG1zZ3FudW1fdDsKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGludCBtc2dsZW5fdDsKCgoKCnN0cnVjdCBtc3FpZF9kcwp7CiAgc3RydWN0 IGlwY19wZXJtIG1zZ19wZXJtOwogIF9fdGltZV90IG1zZ19zdGltZTsKICB1bnNpZ25lZCBsb25n IGludCBfX3VudXNlZDE7CiAgX190aW1lX3QgbXNnX3J0aW1lOwogIHVuc2lnbmVkIGxvbmcgaW50 IF9fdW51c2VkMjsKICBfX3RpbWVfdCBtc2dfY3RpbWU7CiAgdW5zaWduZWQgbG9uZyBpbnQgX191 bnVzZWQzOwogIHVuc2lnbmVkIGxvbmcgaW50IF9fbXNnX2NieXRlczsKICBtc2dxbnVtX3QgbXNn X3FudW07CiAgbXNnbGVuX3QgbXNnX3FieXRlczsKICBfX3BpZF90IG1zZ19sc3BpZDsKICBfX3Bp ZF90IG1zZ19scnBpZDsKICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDQ7CiAgdW5zaWduZWQg bG9uZyBpbnQgX191bnVzZWQ1Owp9OwojIDY1ICIvdXNyL2luY2x1ZGUvYml0cy9tc3EuaCIgMwpz dHJ1Y3QgbXNnaW5mbwogIHsKICAgIGludCBtc2dwb29sOwogICAgaW50IG1zZ21hcDsKICAgIGlu dCBtc2dtYXg7CiAgICBpbnQgbXNnbW5iOwogICAgaW50IG1zZ21uaTsKICAgIGludCBtc2dzc3o7 CiAgICBpbnQgbXNndHFsOwogICAgdW5zaWduZWQgc2hvcnQgaW50IG1zZ3NlZzsKICB9OwojIDI5 ICIvdXNyL2luY2x1ZGUvc3lzL21zZy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5o IiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9tc2cuaCIgMiAzCiMgNDkgIi91c3IvaW5jbHVk ZS9zeXMvbXNnLmgiIDMKc3RydWN0IG1zZ2J1ZgogIHsKICAgIGxvbmcgaW50IG10eXBlOwogICAg Y2hhciBtdGV4dFsxXTsKICB9OwoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IG1zZ2N0bCAo aW50IF9fbXNxaWQsIGludCBfX2NtZCwgc3RydWN0IG1zcWlkX2RzICpfX2J1ZikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBtc2dnZXQgKGtleV90IF9fa2V5LCBpbnQgX19tc2dmbGcpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgbXNncmN2IChpbnQgX19tc3FpZCwgdm9pZCAqX19tc2dwLCBzaXplX3Qg X19tc2dzeiwKICAgICAgICAgICAgICAgICAgIGxvbmcgaW50IF9fbXNndHlwLCBpbnQgX19tc2dm bGcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXNnc25kIChpbnQgX19tc3FpZCwgX19jb25zdCB2 b2lkICpfX21zZ3AsIHNpemVfdCBfX21zZ3N6LAogICAgICAgICAgICAgICAgICAgaW50IF9fbXNn ZmxnKSB0aHJvdyAoKTsKCn0KIyAzOTY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDM5ODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIHR5cGVkZWYgaW50IEFDRV9pZHR5cGVfdDsKIyAz OTk4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIK ICB0eXBlZGVmIGxvbmcgQUNFX2lkX3Q7CgogIHR5cGVkZWYgc2hvcnQgQUNFX3ByaV90OwoKCgoK CgogIHR5cGVkZWYgQUNFX1VJTlQ2NCBBQ0VfaHJ0aW1lX3Q7CiMgNDEwOCAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRl L3N5cy91dHNuYW1lLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3V0c25hbWUuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy91 dHNuYW1lLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3V0c25h bWUuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdXRzbmFtZS5oIiAyIDMKCgoKCgoKc3Ry dWN0IHV0c25hbWUKICB7CgogICAgY2hhciBzeXNuYW1lWzY1XTsKCgogICAgY2hhciBub2RlbmFt ZVs2NV07CgoKICAgIGNoYXIgcmVsZWFzZVs2NV07CgogICAgY2hhciB2ZXJzaW9uWzY1XTsKCgog ICAgY2hhciBtYWNoaW5lWzY1XTsKCgoKCiAgICBjaGFyIGRvbWFpbm5hbWVbNjVdOwoKCgoKICB9 OwoKCgoKCgoKZXh0ZXJuIGludCB1bmFtZSAoc3RydWN0IHV0c25hbWUgKl9fbmFtZSkgdGhyb3cg KCk7CgoKfQojIDQxMDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9PUy5oIiAyCnR5cGVkZWYgc3RydWN0IHV0c25hbWUgQUNFX3V0c25hbWU7CiMgNDEyOSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCnR5cGVk ZWYgZmRfc2V0IEFDRV9GRF9TRVRfVFlQRTsKIyA0NDYyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKdHlwZWRlZiBjaGFyIEFDRV9IT1NURU5UX0RB VEFbKDQqMTAyNCldOwp0eXBlZGVmIGNoYXIgQUNFX1NFUlZFTlRfREFUQVsoNCoxMDI0KV07CnR5 cGVkZWYgY2hhciBBQ0VfUFJPVE9FTlRfREFUQVsoMioxMDI0KV07CgoKCnVuaW9uIHNlbXVuCnsK ICBpbnQgdmFsOwogIHN0cnVjdCBzZW1pZF9kcyAqYnVmOwogIHVfc2hvcnQgKmFycmF5Owp9Owoj IDQ0OTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5o Igp0eXBlZGVmIGNvbnN0IGNoYXIgKipTWVNfU0lHTElTVDsKIyA0NDk5ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKdHlwZWRlZiBBQ0VfVEhSX0ZV TkMgQUNFX1RIUl9GVU5DX0lOVEVSTkFMOwoKCmV4dGVybiAiQyIgewp0eXBlZGVmIHZvaWQgKCpB Q0VfVEhSX0NfREVTVCkodm9pZCAqKTsKfQp0eXBlZGVmIHZvaWQgKCpBQ0VfVEhSX0RFU1QpKHZv aWQgKik7CiMgNDUxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09TLmgiCnR5cGVkZWYgY29uc3QgQUNFX1RDSEFSICogQUNFX0RMX1RZUEU7CiMgNDU0MCAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCmV4dGVy biAiQyIKewogIHR5cGVkZWYgdm9pZCAoKkFDRV9TSUdOQUxfQ19GVU5DKShpbnQsc2lnaW5mb190 Kix2b2lkKik7Cn0KIyA0NTc0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvT1MuaCIKY2xhc3MgQUNFX1RocmVhZF9JRAp7CnB1YmxpYzoKCiAgQUNFX1RocmVh ZF9JRCAoQUNFX3RocmVhZF90LCBBQ0VfaHRocmVhZF90KTsKICBBQ0VfVGhyZWFkX0lEIChjb25z dCBBQ0VfVGhyZWFkX0lEICZpZCk7CgoKICBBQ0VfdGhyZWFkX3QgaWQgKHZvaWQpOwogIHZvaWQg aWQgKEFDRV90aHJlYWRfdCk7CgoKICBBQ0VfaHRocmVhZF90IGhhbmRsZSAodm9pZCk7CiAgdm9p ZCBoYW5kbGUgKEFDRV9odGhyZWFkX3QpOwoKCiAgaW50IG9wZXJhdG9yPT0gKGNvbnN0IEFDRV9U aHJlYWRfSUQgJikgY29uc3Q7CiAgaW50IG9wZXJhdG9yIT0gKGNvbnN0IEFDRV9UaHJlYWRfSUQg JikgY29uc3Q7Cgpwcml2YXRlOgoKICBBQ0VfdGhyZWFkX3QgdGhyZWFkX2lkXzsKCgogIEFDRV9o dGhyZWFkX3QgdGhyZWFkX2hhbmRsZV87Cn07CgoKdHlwZWRlZiB2b2lkICgqQUNFX1NpZ19IYW5k bGVyX0V4KSAoaW50LCBzaWdpbmZvX3QgKnNpZ2luZm8sIHVjb250ZXh0X3QgKnVjb250ZXh0KTsK CgoKCnR5cGVkZWYgaW50IEFDRV9TY2hlZF9Qcmlvcml0eTsKCgpjbGFzcyBBQ0VfU2NoZWRfUGFy YW1zOwojIDQ2NDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9PUy5oIgpzdHJ1Y3Qgc3RyYnVmCnsKICBpbnQgbWF4bGVuOwogIGludCBsZW47CiAgdm9pZCAq YnVmOwp9OwoKCgoKCgoKY2xhc3MgQUNFX1N0cl9CdWYgOiBwdWJsaWMgc3RyYnVmCnsKcHVibGlj OgoKCiAgQUNFX1N0cl9CdWYgKHZvaWQgKmIgPSAwLCBpbnQgbCA9IDAsIGludCBtYXggPSAwKTsK CgogIEFDRV9TdHJfQnVmIChzdHJidWYgJik7Cn07CiMgNDY4OCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCnR5cGVkZWYgdm9pZCAoKkFDRV9DTEVB TlVQX0ZVTkMpKHZvaWQgKm9iamVjdCwgdm9pZCAqcGFyYW0pIDsKIyA0NzA0ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKY2xhc3MgQUNFX0NsZWFu dXAKewpwdWJsaWM6CgogIEFDRV9DbGVhbnVwICh2b2lkKTsKCgogIHZpcnR1YWwgfkFDRV9DbGVh bnVwICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCBjbGVhbnVwICh2b2lkICpwYXJhbSA9IDApOwp9 OwoKCmV4dGVybiAiQyIKdm9pZCBhY2VfY2xlYW51cF9kZXN0cm95ZXIgKEFDRV9DbGVhbnVwICos IHZvaWQgKnBhcmFtID0gMCk7CgoKCgoKCmNsYXNzIEFDRV9DbGVhbnVwX0luZm8KewpwdWJsaWM6 CgogIEFDRV9DbGVhbnVwX0luZm8gKHZvaWQpOwoKCiAgaW50IG9wZXJhdG9yPT0gKGNvbnN0IEFD RV9DbGVhbnVwX0luZm8gJm8pIGNvbnN0OwoKCiAgaW50IG9wZXJhdG9yIT0gKGNvbnN0IEFDRV9D bGVhbnVwX0luZm8gJm8pIGNvbnN0OwoKCiAgdm9pZCAqb2JqZWN0XzsKCgogIEFDRV9DTEVBTlVQ X0ZVTkMgY2xlYW51cF9ob29rXzsKCgogIHZvaWQgKnBhcmFtXzsKfTsKCmNsYXNzIEFDRV9DbGVh bnVwX0luZm9fTm9kZTsKIyA0NzU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvT1MuaCIKY2xhc3MgQUNFX09TX0V4aXRfSW5mbwp7CnB1YmxpYzoKCiAgQUNF X09TX0V4aXRfSW5mbyAodm9pZCk7CgoKICB+QUNFX09TX0V4aXRfSW5mbyAodm9pZCk7CgoKICBp bnQgYXRfZXhpdF9pICh2b2lkICpvYmplY3QsIEFDRV9DTEVBTlVQX0ZVTkMgY2xlYW51cF9ob29r LCB2b2lkICpwYXJhbSk7CgoKCiAgaW50IGZpbmQgKHZvaWQgKm9iamVjdCk7CgoKCiAgdm9pZCBj YWxsX2hvb2tzICgpOwoKcHJpdmF0ZToKCgoKCgogIEFDRV9DbGVhbnVwX0luZm9fTm9kZSAqcmVn aXN0ZXJlZF9vYmplY3RzXzsKfTsKCmNsYXNzIEFDRV9CYXNlX1RocmVhZF9BZGFwdGVyOwpjbGFz cyBBQ0VfVGhyZWFkX0hvb2s7CiMgNDc5OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmgiCnR5cGVkZWYgZG91YmxlIEFDRV90aW1lcl90OwoKCgoKCiAg ICB0eXBlZGVmIHJ1c2FnZSBBQ0VfUnVzYWdlOwojIDQ4MjAgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogICAgICB0eXBlZGVmIHN0cnVjdCBzdGF0 IEFDRV9zdGF0OwoKCgoKZXh0ZXJuICJDIiB7CiAgdHlwZWRlZiBpbnQgKCpBQ0VfQ09NUEFSRV9G VU5DKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Cn0KIyA0ODY0ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKdHlwZWRlZiB1X2xvbmcgQUNF X1NFUlZJQ0VfVFlQRTsKdHlwZWRlZiB1X2xvbmcgQUNFX1NPQ0tfR1JPVVA7CnN0cnVjdCBBQ0Vf UHJvdG9jb2xfSW5mbwp7CiAgdV9sb25nIGR3U2VydmljZUZsYWdzMTsKICBpbnQgaUFkZHJlc3NG YW1pbHk7CiAgaW50IGlQcm90b2NvbDsKICBjaGFyIHN6UHJvdG9jb2xbMjU1KzFdOwp9OwojIDQ5 MTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpj bGFzcyBBQ0VfRmxvd19TcGVjCgoKCnsKcHVibGljOgoKCiAgQUNFX0Zsb3dfU3BlYyAodm9pZCk7 CgoKICBBQ0VfRmxvd19TcGVjICh1X2xvbmcgdG9rZW5fcmF0ZSwKICAgICAgICAgICAgICAgICB1 X2xvbmcgdG9rZW5fYnVja2V0X3NpemUsCiAgICAgICAgICAgICAgICAgdV9sb25nIHBlYWtfYmFu ZHdpZHRoLAogICAgICAgICAgICAgICAgIHVfbG9uZyBsYXRlbmN5LAogICAgICAgICAgICAgICAg IHVfbG9uZyBkZWxheV92YXJpYXRpb24sCiAgICAgICAgICAgICAgICAgQUNFX1NFUlZJQ0VfVFlQ RSBzZXJ2aWNlX3R5cGUsCiAgICAgICAgICAgICAgICAgdV9sb25nIG1heF9zZHVfc2l6ZSwKICAg ICAgICAgICAgICAgICB1X2xvbmcgbWluaW11bV9wb2xpY2VkX3NpemUsCiAgICAgICAgICAgICAg ICAgaW50IHR0bCwKICAgICAgICAgICAgICAgICBpbnQgcHJpb3JpdHkpOwoKCiAgdV9sb25nIHRv a2VuX3JhdGUgKHZvaWQpIGNvbnN0OwogIHZvaWQgdG9rZW5fcmF0ZSAodV9sb25nIHRyKTsKCgog IHVfbG9uZyB0b2tlbl9idWNrZXRfc2l6ZSAodm9pZCkgY29uc3Q7CiAgdm9pZCB0b2tlbl9idWNr ZXRfc2l6ZSAodV9sb25nIHRicyk7CgoKICB1X2xvbmcgcGVha19iYW5kd2lkdGggKHZvaWQpIGNv bnN0OwogIHZvaWQgcGVha19iYW5kd2lkdGggKHVfbG9uZyBwYik7CgoKICB1X2xvbmcgbGF0ZW5j eSAodm9pZCkgY29uc3Q7CiAgdm9pZCBsYXRlbmN5ICh1X2xvbmcgbCk7CgoKICB1X2xvbmcgZGVs YXlfdmFyaWF0aW9uICh2b2lkKSBjb25zdDsKICB2b2lkIGRlbGF5X3ZhcmlhdGlvbiAodV9sb25n IGR2KTsKCgogIEFDRV9TRVJWSUNFX1RZUEUgc2VydmljZV90eXBlICh2b2lkKSBjb25zdDsKICB2 b2lkIHNlcnZpY2VfdHlwZSAoQUNFX1NFUlZJQ0VfVFlQRSBzdCk7CgoKICB1X2xvbmcgbWF4X3Nk dV9zaXplICh2b2lkKSBjb25zdDsKICB2b2lkIG1heF9zZHVfc2l6ZSAodV9sb25nIG1zcyk7CgoK ICB1X2xvbmcgbWluaW11bV9wb2xpY2VkX3NpemUgKHZvaWQpIGNvbnN0OwogIHZvaWQgbWluaW11 bV9wb2xpY2VkX3NpemUgKHVfbG9uZyBtcHMpOwoKCiAgaW50IHR0bCAodm9pZCkgY29uc3Q7CiAg dm9pZCB0dGwgKGludCB0KTsKCgogIGludCBwcmlvcml0eSAodm9pZCkgY29uc3Q7CiAgdm9pZCBw cmlvcml0eSAoaW50IHApOwoKCgoKcHJpdmF0ZToKICB1X2xvbmcgdG9rZW5fcmF0ZV87CiAgdV9s b25nIHRva2VuX2J1Y2tldF9zaXplXzsKICB1X2xvbmcgcGVha19iYW5kd2lkdGhfOwogIHVfbG9u ZyBsYXRlbmN5XzsKICB1X2xvbmcgZGVsYXlfdmFyaWF0aW9uXzsKICBBQ0VfU0VSVklDRV9UWVBF IHNlcnZpY2VfdHlwZV87CiAgdV9sb25nIG1heF9zZHVfc2l6ZV87CiAgdV9sb25nIG1pbmltdW1f cG9saWNlZF9zaXplXzsKICBpbnQgdHRsXzsKICBpbnQgcHJpb3JpdHlfOwoKCn07CgoKCgoKCgpj bGFzcyBBQ0VfUW9TCgoKCnsKcHVibGljOgoKICBBQ0VfRmxvd19TcGVjIHNlbmRpbmdfZmxvd3Nw ZWMgKHZvaWQpIGNvbnN0OwogIHZvaWQgc2VuZGluZ19mbG93c3BlYyAoY29uc3QgQUNFX0Zsb3df U3BlYyAmZnMpOwoKCiAgQUNFX0Zsb3dfU3BlYyByZWNlaXZpbmdfZmxvd3NwZWMgKHZvaWQpIGNv bnN0OwogIHZvaWQgcmVjZWl2aW5nX2Zsb3dzcGVjIChjb25zdCBBQ0VfRmxvd19TcGVjICZmcyk7 CgoKICBpb3ZlYyBwcm92aWRlcl9zcGVjaWZpYyAodm9pZCkgY29uc3Q7CiAgdm9pZCBwcm92aWRl cl9zcGVjaWZpYyAoY29uc3QgaW92ZWMgJnBzKTsKCgoKcHJpdmF0ZToKCiAgQUNFX0Zsb3dfU3Bl YyBzZW5kaW5nX2Zsb3dzcGVjXzsKICBBQ0VfRmxvd19TcGVjIHJlY2VpdmluZ19mbG93c3BlY187 CgoKfTsKCgoKCgoKCmNsYXNzIEFDRV9Rb1NfUGFyYW1zCnsKcHVibGljOgojIDUwNDQgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIEFDRV9Rb1Nf UGFyYW1zIChpb3ZlYyAqY2FsbGVyX2RhdGEgPSAwLAogICAgICAgICAgICAgICAgICBpb3ZlYyAq Y2FsbGVlX2RhdGEgPSAwLAogICAgICAgICAgICAgICAgICBBQ0VfUW9TICpzb2NrZXRfcW9zID0g MCwKICAgICAgICAgICAgICAgICAgQUNFX1FvUyAqZ3JvdXBfc29ja2V0X3FvcyA9IDAsCiAgICAg ICAgICAgICAgICAgIHVfbG9uZyBmbGFncyA9IDApOwoKCiAgaW92ZWMgKmNhbGxlcl9kYXRhICh2 b2lkKSBjb25zdDsKICB2b2lkIGNhbGxlcl9kYXRhIChpb3ZlYyAqKTsKCgogIGlvdmVjICpjYWxs ZWVfZGF0YSAodm9pZCkgY29uc3Q7CiAgdm9pZCBjYWxsZWVfZGF0YSAoaW92ZWMgKik7CgoKICBB Q0VfUW9TICpzb2NrZXRfcW9zICh2b2lkKSBjb25zdDsKICB2b2lkIHNvY2tldF9xb3MgKEFDRV9R b1MgKik7CgoKICBBQ0VfUW9TICpncm91cF9zb2NrZXRfcW9zICh2b2lkKSBjb25zdDsKICB2b2lk IGdyb3VwX3NvY2tldF9xb3MgKEFDRV9Rb1MgKik7CgoKICB1X2xvbmcgZmxhZ3MgKHZvaWQpIGNv bnN0OwogIHZvaWQgZmxhZ3MgKHVfbG9uZyk7Cgpwcml2YXRlOgoKCiAgaW92ZWMgKmNhbGxlcl9k YXRhXzsKCgoKICBpb3ZlYyAqY2FsbGVlX2RhdGFfOwoKCgogIEFDRV9Rb1MgKnNvY2tldF9xb3Nf OwoKCgogIEFDRV9Rb1MgKmdyb3VwX3NvY2tldF9xb3NfOwoKCiAgdV9sb25nIGZsYWdzXzsKfTsK CgoKdHlwZWRlZiBpbnQgKCpBQ0VfUU9TX0NPTkRJVElPTl9GVU5DKSAoaW92ZWMgKmNhbGxlcl9p ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW92ZWMgKmNhbGxlcl9k YXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfUW9TICpzb2Nr ZXRfcW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfUW9TICpn cm91cF9zb2NrZXRfcW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp b3ZlYyAqY2FsbGVlX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp b3ZlYyAqY2FsbGVlX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFDRV9TT0NLX0dST1VQICpnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1X2xvbmcgY2FsbGJhY2tkYXRhKTsKCgoKCgoKdHlwZWRlZiB2b2lkICgqQUNFX09WRVJMQVBQ RURfQ09NUExFVElPTl9GVU5DKSAodV9sb25nIGVycm9yLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgYnl0ZXNfdHJhbnNmZXJyZWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9PVkVSTEFQUEVE ICpvdmVybGFwcGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1X2xvbmcgZmxhZ3MpOwojIDUxMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpjbGFzcyBBQ0VfQWNjZXB0X1FvU19QYXJhbXMKewpwdWJs aWM6CiMgNTEzMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmgiCiAgQUNFX0FjY2VwdF9Rb1NfUGFyYW1zIChBQ0VfUU9TX0NPTkRJVElPTl9GVU5DIHFv c19jb25kaXRpb25fY2FsbGJhY2sgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25n IGNhbGxiYWNrX2RhdGEgPSAwKTsKCgogIEFDRV9RT1NfQ09ORElUSU9OX0ZVTkMgcW9zX2NvbmRp dGlvbl9jYWxsYmFjayAodm9pZCkgY29uc3Q7CiAgdm9pZCBxb3NfY29uZGl0aW9uX2NhbGxiYWNr IChBQ0VfUU9TX0NPTkRJVElPTl9GVU5DIHFjYyk7CgoKICB1X2xvbmcgY2FsbGJhY2tfZGF0YSAo dm9pZCkgY29uc3Q7CiAgdm9pZCBjYWxsYmFja19kYXRhICh1X2xvbmcgY2QpOwoKcHJpdmF0ZToK CgoKCgoKCiAgQUNFX1FPU19DT05ESVRJT05fRlVOQyBxb3NfY29uZGl0aW9uX2NhbGxiYWNrXzsK CgoKCgoKICB1X2xvbmcgY2FsbGJhY2tfZGF0YV87Cn07CiMgNTE3MSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCmlubGluZSBsb25nIGFjZV90aW1l em9uZSgpCnsKCgoKCgogIGxvbmcgcmVzdWx0ID0gMDsKICBzdHJ1Y3QgdGltZXZhbCB0aW1lOwog IHN0cnVjdCB0aW1lem9uZSB6b25lOwogIGRvIHsgfSB3aGlsZSAoJnJlc3VsdCA9PSAwKTsKICBk byB7IHJlc3VsdCA9IChpbnQpIDo6Z2V0dGltZW9mZGF5ICgmdGltZSwgJnpvbmUpOyB9IHdoaWxl ICgwKTsKICByZXR1cm4gem9uZS50el9taW51dGVzd2VzdCAqIDYwOwoKCgoKCgp9CiMgNTIwMyAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCmlubGlu ZSBkb3VibGUgYWNlX2RpZmZ0aW1lKHRpbWVfdCB0MSwgdGltZV90IHQwKQp7CgoKCgoKCiAgcmV0 dXJuIGRpZmZ0aW1lICh0MSwgdDApOwoKfQojIDUyODAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpjbGFzcyBBQ0VfT1MKICA6IHB1YmxpYyBBQ0Vf T1NfRGlyZW50LAogICAgcHVibGljIEFDRV9PU19TdHJpbmcsCiAgICBwdWJsaWMgQUNFX09TX01l bW9yeSwKICAgIHB1YmxpYyBBQ0VfT1NfVExJCnsKCiAgcHJpdmF0ZTogQUNFX09TICh2b2lkKTsg QUNFX09TIChjb25zdCBBQ0VfT1MmKTsgZnJpZW5kIGNsYXNzIGFjZV9kZXdhcm5fZ3BsdXNwbHVz OwpwdWJsaWM6CiAgZnJpZW5kIGNsYXNzIEFDRV9UaW1lb3V0X01hbmFnZXI7CiMgNTMwMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgZW51bSBB Q0VfSFJUaW1lcl9PcAogICAgewogICAgICBBQ0VfSFJUSU1FUl9TVEFSVCA9IDB4MCwKICAgICAg QUNFX0hSVElNRVJfSU5DUiA9IDB4MSwKICAgICAgQUNFX0hSVElNRVJfU1RPUCA9IDB4MiwKICAg ICAgQUNFX0hSVElNRVJfR0VUVElNRSA9IDB4RkZGRgogICAgfTsKCgoKCgoKCiAgY2xhc3MgYWNl X2Zsb2NrX3QKICB7CiAgcHVibGljOgoKICAgIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKCgog ICAgc3RydWN0IGZsb2NrIGxvY2tfOwoKCgogICAgY29uc3QgQUNFX1RDSEFSICpsb2NrbmFtZV87 CgoKICAgIEFDRV9IQU5ETEUgaGFuZGxlXzsKCgoKCgoKICB9OwojIDUzNjIgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIHN0YXRpYyBpbnQgYXRv aSAoY29uc3QgY2hhciAqcyk7CgoKCgoKCiAgc3RhdGljIGRvdWJsZSBmbG9vciAoZG91YmxlIHgp OwoKCiAgc3RhdGljIGRvdWJsZSBjZWlsIChkb3VibGUgeCk7CgoKICBzdGF0aWMgY2hhciAqZ2V0 ZW52IChjb25zdCBjaGFyICpzeW1ib2wpOwoKCgoKICBzdGF0aWMgaW50IHB1dGVudiAoY29uc3Qg QUNFX1RDSEFSICpzdHJpbmcpOwogIHN0YXRpYyBBQ0VfVENIQVIgKnN0cmVudmR1cCAoY29uc3Qg QUNFX1RDSEFSICpzdHIpOwogIHN0YXRpYyBBQ0VfVENIQVIgKmdldGVudnN0cmluZ3MgKHZvaWQp OwoKCgogIHN0YXRpYyBpbnQgZ2V0b3B0IChpbnQgYXJnYywKICAgICAgICAgICAgICAgICAgICAg Y2hhciAqY29uc3QgKmFyZ3YsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wdHN0 cmluZyk7CiAgc3RhdGljIGludCBhcmd2X3RvX3N0cmluZyAoQUNFX1RDSEFSICoqYXJndiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVENIQVIgKiZidWYsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHN1YnN0aXR1dGVfZW52X2FyZ3MgPSAxKTsKICBzdGF0aWMgaW50 IHN0cmluZ190b19hcmd2IChBQ0VfVENIQVIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgJmFyZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1RDSEFS ICoqJmFyZ3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN1YnN0aXR1dGVfZW52 X2FyZ3MgPSAxKTsKICBzdGF0aWMgbG9uZyBzeXNjb25mIChpbnQpOwoKCiAgc3RhdGljIGludCBj b25kYXR0cl9pbml0IChBQ0VfY29uZGF0dHJfdCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUpOwogIHN0YXRp YyBpbnQgY29uZGF0dHJfZGVzdHJveSAoQUNFX2NvbmRhdHRyX3QgJmF0dHJpYnV0ZXMpOwogIHN0 YXRpYyBpbnQgY29uZF9icm9hZGNhc3QgKEFDRV9jb25kX3QgKmN2KTsKICBzdGF0aWMgaW50IGNv bmRfZGVzdHJveSAoQUNFX2NvbmRfdCAqY3YpOwogIHN0YXRpYyBpbnQgY29uZF9pbml0IChBQ0Vf Y29uZF90ICpjdiwKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgdHlwZSA9IFBUSFJFQURf UFJPQ0VTU19QUklWQVRFLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1l ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnID0gMCk7CiAgc3RhdGljIGlu dCBjb25kX2luaXQgKEFDRV9jb25kX3QgKmN2LAogICAgICAgICAgICAgICAgICAgICAgICBBQ0Vf Y29uZGF0dHJfdCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyA9IDApOwojIDU0 MjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgog IHN0YXRpYyBpbnQgY29uZF9zaWduYWwgKEFDRV9jb25kX3QgKmN2KTsKICBzdGF0aWMgaW50IGNv bmRfdGltZWR3YWl0IChBQ0VfY29uZF90ICpjdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBQ0VfbXV0ZXhfdCAqbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVGltZV9W YWx1ZSAqKTsKICBzdGF0aWMgaW50IGNvbmRfd2FpdCAoQUNFX2NvbmRfdCAqY3YsCiAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9tdXRleF90ICptKTsKIyA1NDQzICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMgY2hhciAqY3VzZXJp ZCAoY2hhciAqdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heGxlbiA9IDkp OwojIDU0NTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P Uy5oIgogIHN0YXRpYyBpbnQgdW5hbWUgKEFDRV91dHNuYW1lICpuYW1lKTsKICBzdGF0aWMgbG9u ZyBzeXNpbmZvIChpbnQgY21kLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKICAg ICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50KTsKICBzdGF0aWMgaW50IGhvc3RuYW1lIChj aGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhuYW1lbGVuKTsKIyA1 NDY4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIK ICBzdGF0aWMgaW50IGRsY2xvc2UgKEFDRV9TSExJQl9IQU5ETEUgaGFuZGxlKTsKCiAgc3RhdGlj IEFDRV9UQ0hBUiAqZGxlcnJvciAodm9pZCk7CiAgc3RhdGljIEFDRV9TSExJQl9IQU5ETEUgZGxv cGVuIChjb25zdCBBQ0VfVENIQVIgKmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IG1vZGUgPSAweDAwMDAxKTsKICBzdGF0aWMgdm9pZCAqZGxzeW0gKEFDRV9T SExJQl9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFS ICpzeW1ib2wpOwoKCgogIHN0YXRpYyBpbnQgbGFzdF9lcnJvciAodm9pZCk7CiAgc3RhdGljIHZv aWQgbGFzdF9lcnJvciAoaW50KTsKICBzdGF0aWMgaW50IHNldF9lcnJub190b19sYXN0X2Vycm9y ICh2b2lkKTsKICBzdGF0aWMgaW50IHNldF9lcnJub190b193c2FfbGFzdF9lcnJvciAodm9pZCk7 CiAgc3RhdGljIGludCBmY2xvc2UgKEZJTEUgKmZwKTsKICBzdGF0aWMgaW50IGZjbnRsIChBQ0Vf SEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICBpbnQgY21kLAogICAgICAgICAgICAg ICAgICAgIGxvbmcgYXJnID0gMCk7CiAgc3RhdGljIGludCBmZGV0YWNoIChjb25zdCBjaGFyICpm aWxlKTsKCiAgc3RhdGljIGludCBmc3luYyAoQUNFX0hBTkRMRSBoYW5kbGUpOwoKICBzdGF0aWMg RklMRSAqZm9wZW4gKGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5hbWUsIGNvbnN0IEFDRV9UQ0hBUiAq bW9kZSk7CgoKCiAgc3RhdGljIEZJTEUgKmZkb3BlbiAoQUNFX0hBTkRMRSBoYW5kbGUsIGNvbnN0 IEFDRV9UQ0hBUiAqbW9kZSk7CiAgc3RhdGljIEFDRV9UQ0hBUiAqZmdldHMgKEFDRV9UQ0hBUiAq YnVmLCBpbnQgc2l6ZSwgRklMRSAqZnApOwogIHN0YXRpYyBpbnQgc3RhdCAoY29uc3QgQUNFX1RD SEFSICpmaWxlLCBBQ0Vfc3RhdCAqKTsKICBzdGF0aWMgaW50IHRydW5jYXRlIChjb25zdCBBQ0Vf VENIQVIgKmZpbGVuYW1lLCBvZmZfdCBsZW5ndGgpOwoKICBzdGF0aWMgaW50IGZwcmludGYgKEZJ TEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAgc3RhdGljIGludCBzcHJpbnRmIChj aGFyICpidWYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKICBzdGF0aWMgaW50IHZzcHJpbnRm IChjaGFyICpidWZmZXIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdwdHIpOwogIHN0 YXRpYyBpbnQgcHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CgoKCgoKCiAgc3RhdGlj IHZvaWQgcGVycm9yIChjb25zdCBBQ0VfVENIQVIgKnMpOwojIDU1MjAgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIHN0YXRpYyBjaGFyICpnZXRz IChjaGFyICpzdHIsIGludCBuID0gMCk7CiAgc3RhdGljIGludCBwdXRzIChjb25zdCBBQ0VfVENI QVIgKnMpOwogIHN0YXRpYyBpbnQgZnB1dHMgKGNvbnN0IEFDRV9UQ0hBUiAqcywKICAgICAgICAg ICAgICAgICAgICBGSUxFICpzdHJlYW0pOwoKICBzdGF0aWMgaW50IGZmbHVzaCAoRklMRSAqZnAp OwogIHN0YXRpYyBzaXplX3QgZnJlYWQgKHZvaWQgKnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmVsZW1zLAogICAg ICAgICAgICAgICAgICAgICAgIEZJTEUgKmZwKTsKICBzdGF0aWMgaW50IGZzZWVrIChGSUxFICpm cCwKICAgICAgICAgICAgICAgICAgICBsb25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICBp bnQgcHRybmFtZSk7CiAgc3RhdGljIGludCBmc3RhdCAoQUNFX0hBTkRMRSwKICAgICAgICAgICAg ICAgICAgICBBQ0Vfc3RhdCAqKTsKICBzdGF0aWMgaW50IGxzdGF0IChjb25zdCBjaGFyICosCiAg ICAgICAgICAgICAgICAgICAgQUNFX3N0YXQgKik7CiAgc3RhdGljIGludCBmdHJ1bmNhdGUgKEFD RV9IQU5ETEUsCiAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90KTsKICBzdGF0aWMgc2l6ZV90 IGZ3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdGVtcywKICAgICAgICAgICAg ICAgICAgICAgICAgRklMRSAqZnApOwogIHN0YXRpYyB2b2lkIHJld2luZCAoRklMRSAqZnApOwoK CgogIHN0YXRpYyB2b2lkICpic2VhcmNoIChjb25zdCB2b2lkICprZXksCiAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHZvaWQgKmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBuZWwsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAg ICAgICAgICAgICBBQ0VfQ09NUEFSRV9GVU5DKTsKICBzdGF0aWMgdm9pZCBxc29ydCAodm9pZCAq YmFzZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5lbCwKICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICBBQ0VfQ09NUEFSRV9GVU5DKTsK CgoKICBzdGF0aWMgaW50IGZsb2NrX2luaXQgKEFDRV9PUzo6YWNlX2Zsb2NrX3QgKmxvY2ssCiAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MgPSAwLAogICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQUNFX1RDSEFSICpuYW1lID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAg IG1vZGVfdCBwZXJtcyA9IDApOwogIHN0YXRpYyBpbnQgZmxvY2tfZGVzdHJveSAoQUNFX09TOjph Y2VfZmxvY2tfdCAqbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1bmxpbmtf ZmlsZSA9IDEpOwoKCgoKCgogIHN0YXRpYyBpbnQgZmxvY2tfcmRsb2NrIChBQ0VfT1M6OmFjZV9m bG9ja190ICpsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB3aGVuY2UgPSAw LAogICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBzdGFydCA9IDAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9mZl90IGxlbiA9IDApOwogIHN0YXRpYyBpbnQgZmxvY2tfdHJ5cmRs b2NrIChBQ0VfT1M6OmFjZV9mbG9ja190ICpsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaG9ydCB3aGVuY2UgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZf dCBzdGFydCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IGxlbiA9IDAp OwogIHN0YXRpYyBpbnQgZmxvY2tfdHJ5d3Jsb2NrIChBQ0VfT1M6OmFjZV9mbG9ja190ICpsb2Nr LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB3aGVuY2UgPSAwLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBzdGFydCA9IDAsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9mZl90IGxlbiA9IDApOwogIHN0YXRpYyBpbnQgZmxvY2tfdW5sb2NrIChB Q0VfT1M6OmFjZV9mbG9ja190ICpsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9y dCB3aGVuY2UgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBzdGFydCA9IDAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IGxlbiA9IDApOwogIHN0YXRpYyBpbnQg ZmxvY2tfd3Jsb2NrIChBQ0VfT1M6OmFjZV9mbG9ja190ICpsb2NrLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBzaG9ydCB3aGVuY2UgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBv ZmZfdCBzdGFydCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IGxlbiA9IDAp OwoKCgogIHN0YXRpYyBpbnQgYXRleGl0IChBQ0VfRVhJVF9IT09LIGZ1bmMpOwogIHN0YXRpYyBp bnQgZXhlY2wgKGNvbnN0IGNoYXIgKnBhdGgsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqYXJnMCwgLi4uKTsKICBzdGF0aWMgaW50IGV4ZWNsZSAoY29uc3QgY2hhciAqcGF0aCwKICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXJnMCwgLi4uKTsKICBzdGF0aWMgaW50IGV4 ZWNscCAoY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq YXJnMCwgLi4uKTsKICBzdGF0aWMgaW50IGV4ZWN2IChjb25zdCBjaGFyICpwYXRoLAogICAgICAg ICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSk7CiAgc3RhdGljIGludCBleGVjdnAgKGNv bnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSk7 CiAgc3RhdGljIGludCBleGVjdmUgKGNvbnN0IGNoYXIgKnBhdGgsCiAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3Qg ZW52cFtdKTsKICBzdGF0aWMgdm9pZCBfZXhpdCAoaW50IHN0YXR1cyA9IDApOwogIHN0YXRpYyB2 b2lkIGV4aXQgKGludCBzdGF0dXMgPSAwKTsKICBzdGF0aWMgdm9pZCBhYm9ydCAodm9pZCk7CiAg c3RhdGljIHBpZF90IGZvcmsgKHZvaWQpOwoKCgoKICBzdGF0aWMgcGlkX3QgZm9yayAoY29uc3Qg QUNFX1RDSEFSICpwcm9ncmFtX25hbWUpOwogIHN0YXRpYyBwaWRfdCBmb3JrX2V4ZWMgKEFDRV9U Q0hBUiAqYXJndltdKTsKCgogIHN0YXRpYyBpbnQgZ2V0cGFnZXNpemUgKHZvaWQpOwogIHN0YXRp YyBpbnQgYWxsb2NhdGlvbl9ncmFudWxhcml0eSAodm9pZCk7CgogIHN0YXRpYyBnaWRfdCBnZXRn aWQgKHZvaWQpOwogIHN0YXRpYyBpbnQgc2V0Z2lkIChnaWRfdCk7CiAgc3RhdGljIHBpZF90IGdl dHBpZCAodm9pZCk7CiAgc3RhdGljIHBpZF90IGdldHBnaWQgKHBpZF90IHBpZCk7CiAgc3RhdGlj IHBpZF90IGdldHBwaWQgKHZvaWQpOwogIHN0YXRpYyB1aWRfdCBnZXR1aWQgKHZvaWQpOwogIHN0 YXRpYyBpbnQgc2V0dWlkICh1aWRfdCk7CiAgc3RhdGljIHBpZF90IHNldHNpZCAodm9pZCk7CiAg c3RhdGljIGludCBzZXRwZ2lkIChwaWRfdCBwaWQsIHBpZF90IHBnaWQpOwogIHN0YXRpYyBpbnQg c2V0cmV1aWQgKHVpZF90IHJ1aWQsIHVpZF90IGV1aWQpOwogIHN0YXRpYyBpbnQgc2V0cmVnaWQg KGdpZF90IHJnaWQsIGdpZF90IGVnaWQpOwogIHN0YXRpYyBpbnQgc3lzdGVtIChjb25zdCBBQ0Vf VENIQVIgKnMpOwojIDU2NDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5oIgogIHN0YXRpYyBwaWRfdCB3YWl0cGlkIChwaWRfdCBwaWQsCiAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9leGl0Y29kZSAqc3RhdHVzID0gMCwKICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHdhaXRfb3B0aW9ucyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIEFD RV9IQU5ETEUgaGFuZGxlID0gMCk7CiMgNTY1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgc3RhdGljIHBpZF90IHdhaXQgKHBpZF90IHBpZCwK ICAgICAgICAgICAgICAgICAgICAgQUNFX2V4aXRjb2RlICpzdGF0dXMsCiAgICAgICAgICAgICAg ICAgICAgIGludCB3YWl0X29wdGlvbnMgPSAwLAogICAgICAgICAgICAgICAgICAgICBBQ0VfSEFO RExFIGhhbmRsZSA9IDApOwoKCgogIHN0YXRpYyBwaWRfdCB3YWl0IChpbnQgKiA9IDApOwoKCiAg c3RhdGljIHVfaW50IGFsYXJtICh1X2ludCBzZWNzKTsKICBzdGF0aWMgdV9pbnQgdWFsYXJtICh1 X2ludCB1c2VjcywKICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBpbnRlcnZhbCA9IDApOwog IHN0YXRpYyB1X2ludCB1YWxhcm0gKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0diwKICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHZfaW50ZXJ2YWwgPSBBQ0VfVGlt ZV9WYWx1ZTo6emVybyk7CiAgc3RhdGljIEFDRV9ocnRpbWVfdCBnZXRocnRpbWUgKGNvbnN0IEFD RV9IUlRpbWVyX09wID0gQUNFX0hSVElNRVJfR0VUVElNRSk7CgoKCgogIHN0YXRpYyBpbnQgY2xv Y2tfZ2V0dGltZSAoY2xvY2tpZF90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHRpbWVzcGVjICopOwogIHN0YXRpYyBBQ0VfVGltZV9WYWx1ZSBnZXR0aW1lb2ZkYXkgKHZvaWQp OwogIHN0YXRpYyBpbnQgZ2V0cnVzYWdlIChpbnQgd2hvLAogICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgcnVzYWdlICpydXNhZ2UpOwogIHN0YXRpYyBpbnQgZ2V0cmxpbWl0IChpbnQgcmVz b3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBybGltaXQgKnJsKTsKICBzdGF0 aWMgaW50IHNldHJsaW1pdCAoaW50IHJlc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICBB Q0VfU0VUUkxJTUlUX1RZUEUgKnJsKTsKICBzdGF0aWMgaW50IHNsZWVwICh1X2ludCBzZWNvbmRz KTsKICBzdGF0aWMgaW50IHNsZWVwIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYpOwogIHN0YXRp YyBpbnQgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlcXVlc3RlZCwKICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpyZW1haW5pbmcgPSAwKTsKIyA1NzAz ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBz dGF0aWMgdGltZV90IG1rdGltZSAoc3RydWN0IHRtICp0aW1lcHRyKTsKCgoKICBzdGF0aWMgdm9p ZCB0enNldCAodm9pZCk7CgoKCgogIHN0YXRpYyBsb25nIHRpbWV6b25lICh2b2lkKTsKCgoKCiAg c3RhdGljIGRvdWJsZSBkaWZmdGltZSAodGltZV90IHQxLAogICAgICAgICAgICAgICAgICAgICAg ICAgIHRpbWVfdCB0MCk7CiAgc3RhdGljIHRpbWVfdCB0aW1lICh0aW1lX3QgKnRsb2MgPSAwKTsK ICBzdGF0aWMgc3RydWN0IHRtICpsb2NhbHRpbWUgKGNvbnN0IHRpbWVfdCAqY2xvY2spOwogIHN0 YXRpYyBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChjb25zdCB0aW1lX3QgKmNsb2NrLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnJlcyk7CiAgc3RhdGljIHN0cnVj dCB0bSAqZ210aW1lIChjb25zdCB0aW1lX3QgKmNsb2NrKTsKICBzdGF0aWMgc3RydWN0IHRtICpn bXRpbWVfciAoY29uc3QgdGltZV90ICpjbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHRtICpyZXMpOwogIHN0YXRpYyBjaGFyICphc2N0aW1lIChjb25zdCBzdHJ1Y3Qg dG0gKnRtKTsKICBzdGF0aWMgY2hhciAqYXNjdGltZV9yIChjb25zdCBzdHJ1Y3QgdG0gKnRtLAog ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7CiAgc3RhdGlj IEFDRV9UQ0hBUiAqY3RpbWUgKGNvbnN0IHRpbWVfdCAqdCk7CiAgc3RhdGljIEFDRV9UQ0hBUiAq Y3RpbWVfciAoY29uc3QgdGltZV90ICpjbG9jaywgQUNFX1RDSEFSICpidWYsIGludCBidWZsZW4p OwogIHN0YXRpYyBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKnMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IG1heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0bSAqdGlt ZXB0cik7CgoKCiAgc3RhdGljIGludCBtc2djdGwgKGludCBtc3FpZCwKICAgICAgICAgICAgICAg ICAgICAgaW50IGNtZCwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1zcWlkX2RzICopOwog IHN0YXRpYyBpbnQgbXNnZ2V0IChrZXlfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgIGludCBt c2dmbGcpOwogIHN0YXRpYyBpbnQgbXNncmN2IChpbnQgaW50X2lkLAogICAgICAgICAgICAgICAg ICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCiAgICAgICAg ICAgICAgICAgICAgIGxvbmcgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsK ICBzdGF0aWMgaW50IG1zZ3NuZCAoaW50IGludF9pZCwKICAgICAgICAgICAgICAgICAgICAgY29u c3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAg ICAgICAgICAgICBpbnQgZmxhZ3MpOwoKCgogIHN0YXRpYyBpbnQgbWFkdmlzZSAoY2FkZHJfdCBh ZGRyLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAg ICAgIGludCBhZHZpY2UpOwogIHN0YXRpYyB2b2lkICptbWFwICh2b2lkICphZGRyLAogICAgICAg ICAgICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICBpbnQgcHJvdCwK ICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICBBQ0Vf SEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2ZmID0gMCwKICAgICAg ICAgICAgICAgICAgICAgQUNFX0hBTkRMRSAqZmlsZV9tYXBwaW5nID0gMCwKICAgICAgICAgICAg ICAgICAgICAgaW50IHNhID0gMCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFS ICpmaWxlX21hcHBpbmdfbmFtZSA9IDApOwogIHN0YXRpYyBpbnQgbXByb3RlY3QgKHZvaWQgKmFk ZHIsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAg ICAgICBpbnQgcHJvdCk7CiAgc3RhdGljIGludCBtc3luYyAodm9pZCAqYWRkciwKICAgICAgICAg ICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgIGludCBzeW5jKTsKICBz dGF0aWMgaW50IG11bm1hcCAodm9pZCAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IGxlbik7CgoKCiAgc3RhdGljIGludCByZWN1cnNpdmVfbXV0ZXhfaW5pdCAoQUNFX3JlY3Vyc2l2 ZV90aHJlYWRfbXV0ZXhfdCAqbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBQ0VfVENIQVIgKm5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFDRV9tdXRleGF0dHJfdCAqYXJnID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgc2EgPSAwKTsKICBzdGF0aWMgaW50IHJlY3Vyc2l2ZV9tdXRleF9kZXN0cm95 IChBQ0VfcmVjdXJzaXZlX3RocmVhZF9tdXRleF90ICptKTsKICBzdGF0aWMgaW50IHJlY3Vyc2l2 ZV9tdXRleF9sb2NrIChBQ0VfcmVjdXJzaXZlX3RocmVhZF9tdXRleF90ICptKTsKICBzdGF0aWMg aW50IHJlY3Vyc2l2ZV9tdXRleF90cnlsb2NrIChBQ0VfcmVjdXJzaXZlX3RocmVhZF9tdXRleF90 ICptKTsKICBzdGF0aWMgaW50IHJlY3Vyc2l2ZV9tdXRleF91bmxvY2sgKEFDRV9yZWN1cnNpdmVf dGhyZWFkX211dGV4X3QgKm0pOwoKCgogIHN0YXRpYyBpbnQgbXV0ZXhfaW5pdCAoQUNFX211dGV4 X3QgKm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSA9IFBUSFJFQURfUFJPQ0VT U19QUklWQVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAs CiAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfbXV0ZXhhdHRyX3QgKmFyZyA9IDAsCiAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc2EgPSAwKTsKCgoKCgoKCiAgc3RhdGljIGludCBtdXRl eF9kZXN0cm95IChBQ0VfbXV0ZXhfdCAqbSk7CgoKCiAgc3RhdGljIGludCBtdXRleF9sb2NrIChB Q0VfbXV0ZXhfdCAqbSk7CgoKCiAgc3RhdGljIGludCBtdXRleF9sb2NrIChBQ0VfbXV0ZXhfdCAq bSwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmYWJhbmRvbmVkKTsKIyA1ODIyICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMg aW50IG11dGV4X2xvY2sgKEFDRV9tdXRleF90ICptLAogICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgQUNFX1RpbWVfVmFsdWUgJnRpbWVvdXQpOwoKCgogIHN0YXRpYyBpbnQgbXV0ZXhfdHJ5 bG9jayAoQUNFX211dGV4X3QgKm0pOwoKCgogIHN0YXRpYyBpbnQgbXV0ZXhfdHJ5bG9jayAoQUNF X211dGV4X3QgKm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJmFiYW5kb25lZCk7 CgogIHN0YXRpYyBpbnQgbXV0ZXhfdW5sb2NrIChBQ0VfbXV0ZXhfdCAqbSk7CgoKCiAgc3RhdGlj IGludCB0aHJlYWRfbXV0ZXhfaW5pdCAoQUNFX3RocmVhZF9tdXRleF90ICptLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX211dGV4YXR0cl90ICphcmcgPSAwKTsK CgoKCgoKICBzdGF0aWMgaW50IHRocmVhZF9tdXRleF9kZXN0cm95IChBQ0VfdGhyZWFkX211dGV4 X3QgKm0pOwogIHN0YXRpYyBpbnQgdGhyZWFkX211dGV4X2xvY2sgKEFDRV90aHJlYWRfbXV0ZXhf dCAqbSk7CiAgc3RhdGljIGludCB0aHJlYWRfbXV0ZXhfbG9jayAoQUNFX3RocmVhZF9tdXRleF90 ICptLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVl ICZ0aW1lb3V0KTsKICBzdGF0aWMgaW50IHRocmVhZF9tdXRleF90cnlsb2NrIChBQ0VfdGhyZWFk X211dGV4X3QgKm0pOwogIHN0YXRpYyBpbnQgdGhyZWFkX211dGV4X3VubG9jayAoQUNFX3RocmVh ZF9tdXRleF90ICptKTsKCgoKICBzdGF0aWMgaW50IGFjY2VzcyAoY29uc3QgY2hhciAqcGF0aCwg aW50IGFtb2RlKTsKCgoKCiAgc3RhdGljIGludCBjbG9zZSAoQUNFX0hBTkRMRSBoYW5kbGUpOwog IHN0YXRpYyBBQ0VfSEFORExFIGNyZWF0IChjb25zdCBBQ0VfVENIQVIgKmZpbGVuYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBtb2RlX3QgbW9kZSk7CiAgc3RhdGljIEFDRV9IQU5ETEUg ZHVwIChBQ0VfSEFORExFIGhhbmRsZSk7CiAgc3RhdGljIGludCBkdXAyIChBQ0VfSEFORExFIG9s ZGZkLAogICAgICAgICAgICAgICAgICAgQUNFX0hBTkRMRSBuZXdmZCk7CiAgc3RhdGljIGludCBm YXR0YWNoIChpbnQgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0 aCk7CiAgc3RhdGljIGxvbmcgZmlsZXNpemUgKEFDRV9IQU5ETEUgaGFuZGxlKTsKICBzdGF0aWMg bG9uZyBmaWxlc2l6ZSAoY29uc3QgQUNFX1RDSEFSICpoYW5kbGUpOwogIHN0YXRpYyBpbnQgZ2V0 bXNnIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1 ZiAqY3RsLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RyYnVmCiAgICAgICAgICAgICAg ICAgICAgICpkYXRhLCBpbnQgKmZsYWdzKTsKICBzdGF0aWMgaW50IGdldHBtc2cgKEFDRV9IQU5E TEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZiAqY3RsLAogICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZgogICAgICAgICAgICAgICAgICAgICAgKmRh dGEsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJhbmQsCiAgICAgICAgICAgICAgICAgICAg ICBpbnQgKmZsYWdzKTsKCgogIHN0YXRpYyBpbnQgaW9jdGwgKEFDRV9IQU5ETEUgaGFuZGxlLAog ICAgICAgICAgICAgICAgICAgIGludCBjbWQsCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqID0g MCk7CgoKICBzdGF0aWMgaW50IGlvY3RsIChBQ0VfSEFORExFIHNvY2tldCwKICAgICAgICAgICAg ICAgICAgICB1X2xvbmcgaW9fY29udHJvbF9jb2RlLAogICAgICAgICAgICAgICAgICAgIHZvaWQg KmluX2J1ZmZlcl9wLAogICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpbl9idWZmZXIsCiAgICAg ICAgICAgICAgICAgICAgdm9pZCAqb3V0X2J1ZmZlcl9wLAogICAgICAgICAgICAgICAgICAgIHVf bG9uZyBvdXRfYnVmZmVyLAogICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqYnl0ZXNfcmV0dXJu ZWQsCiAgICAgICAgICAgICAgICAgICAgQUNFX09WRVJMQVBQRUQgKm92ZXJsYXBwZWQsCiAgICAg ICAgICAgICAgICAgICAgQUNFX09WRVJMQVBQRURfQ09NUExFVElPTl9GVU5DIGZ1bmMpOwoKCgog IHN0YXRpYyBpbnQgaW9jdGwgKEFDRV9IQU5ETEUgc29ja2V0LAogICAgICAgICAgICAgICAgICAg IHVfbG9uZyBpb19jb250cm9sX2NvZGUsCiAgICAgICAgICAgICAgICAgICAgQUNFX1FvUyAmYWNl X3FvcywKICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmJ5dGVzX3JldHVybmVkLAogICAgICAg ICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlcl9wID0gMCwKICAgICAgICAgICAgICAgICAgICB1X2xv bmcgYnVmZmVyID0gMCwKICAgICAgICAgICAgICAgICAgICBBQ0VfT1ZFUkxBUFBFRCAqb3Zlcmxh cHBlZCA9IDAsCiAgICAgICAgICAgICAgICAgICAgQUNFX09WRVJMQVBQRURfQ09NUExFVElPTl9G VU5DIGZ1bmMgPSAwKTsKCiAgc3RhdGljIGludCBpc2FzdHJlYW0gKEFDRV9IQU5ETEUgaGFuZGxl KTsKICBzdGF0aWMgaW50IGlzYXR0eSAoaW50IGhhbmRsZSk7CgoKCiAgc3RhdGljIG9mZl90IGxz ZWVrIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNl dCwKICAgICAgICAgICAgICAgICAgICAgIGludCB3aGVuY2UpOwoKICBBQ0VfTE9GRl9UIGxsc2Vl ayAoQUNFX0hBTkRMRSBoYW5kbGUsIEFDRV9MT0ZGX1Qgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKIyA1 OTM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIK ICBzdGF0aWMgQUNFX0hBTkRMRSBvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg cGVybXMgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYSA9IDApOwoKCgoKCgog IHN0YXRpYyBpbnQgcHV0bXNnIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqY3RsLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3Qgc3RyYnVmICpkYXRhLAogICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwogIHN0 YXRpYyBpbnQgcHV0cG1zZyAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpjdGwsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3Qgc3RyYnVmICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgaW50IGJhbmQsCiAgICAg ICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwogIHN0YXRpYyBzc2l6ZV90IHJlYWQgKEFDRV9I QU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZiwKICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKICBzdGF0aWMgc3NpemVfdCByZWFkIChBQ0VfSEFO RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICBBQ0VfT1ZFUkxB UFBFRCAqKTsKIyA1OTcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaCIKICBzdGF0aWMgc3NpemVfdCByZWFkX24gKEFDRV9IQU5ETEUgaGFuZGxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJh bnNmZXJyZWQgPSAwKTsKCiAgc3RhdGljIGludCByZWFkbGluayAoY29uc3QgY2hhciAqcGF0aCwK ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IGJ1ZnNpeik7CiAgc3RhdGljIHNzaXplX3QgcHJlYWQgKEFDRV9IQU5ETEUgaGFuZGxl LAogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBuYnl0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0KTsK ICBzdGF0aWMgaW50IHJlY3Ztc2cgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdz KTsKICBzdGF0aWMgaW50IHNlbmRtc2cgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IG1zZ2hkciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAg aW50IGZsYWdzKTsKICBzdGF0aWMgc3NpemVfdCB3cml0ZSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IG5ieXRlKTsKICBzdGF0aWMgc3NpemVfdCB3cml0ZSAoQUNFX0hBTkRMRSBo YW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IG5ieXRlLAogICAgICAgICAgICAgICAgICAgICAgICBBQ0Vf T1ZFUkxBUFBFRCAqKTsKIyA2MDA1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMgc3NpemVfdCB3cml0ZV9uIChBQ0VfSEFORExFIGhh bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgKmJ5dGVzX3RyYW5zZmVycmVkID0gMCk7CgogIHN0YXRpYyBzc2l6ZV90IHB3cml0ZSAo QUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpi dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJ5dGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICBvZmZfdCBvZmZzZXQpOwogIHN0YXRpYyBzc2l6ZV90IHJlYWR2IChBQ0VfSEFO RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgaW92ZWMgKmlvdiwKICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGlvdmxlbik7CiAgc3RhdGljIHNzaXplX3Qgd3JpdGV2IChBQ0Vf SEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvdmVjICppb3Ys CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW92Y250KTsKICBzdGF0aWMgc3NpemVfdCBy ZWN2diAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGlvdmVjICpp b3YsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBpb3ZsZW4pOwogIHN0YXRpYyBzc2l6ZV90 IHNlbmR2IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg aW92ZWMgKmlvdiwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlvdmNudCk7CgoKCiAgc3Rh dGljIGludCBzZWxlY3QgKGludCB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpy ZmRzLAogICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKndmZHMgPSAwLAogICAgICAgICAgICAg ICAgICAgICBmZF9zZXQgKmVmZHMgPSAwLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0Vf VGltZV9WYWx1ZSAqdHYgPSAwKTsKICBzdGF0aWMgaW50IHNlbGVjdCAoaW50IHdpZHRoLAogICAg ICAgICAgICAgICAgICAgICBmZF9zZXQgKnJmZHMsCiAgICAgICAgICAgICAgICAgICAgIGZkX3Nl dCAqd2ZkcywKICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICplZmRzLAogICAgICAgICAgICAg ICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYpOwogIHN0YXRpYyBpbnQgcG9sbCAoc3Ry dWN0IHBvbGxmZCAqcG9sbGZkcywKICAgICAgICAgICAgICAgICAgIHVfbG9uZyBsZW4sCiAgICAg ICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdHYgPSAwKTsKICBzdGF0aWMgaW50 IHBvbGwgKHN0cnVjdCBwb2xsZmQgKnBvbGxmZHMsCiAgICAgICAgICAgICAgICAgICB1X2xvbmcg bGVuLAogICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2KTsKICBzdGF0 aWMgaW50IHBpcGUgKEFDRV9IQU5ETEUgaGFuZGxlc1tdKTsKCiAgc3RhdGljIEFDRV9IQU5ETEUg c2htX29wZW4gKGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGVy bXMgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2EgPSAwKTsKICBzdGF0 aWMgaW50IHNobV91bmxpbmsgKGNvbnN0IEFDRV9UQ0hBUiAqcGF0aCk7CgoKCiAgc3RhdGljIG1v ZGVfdCB1bWFzayAobW9kZV90IGNtYXNrKTsKCgogIHN0YXRpYyBpbnQgY2hkaXIgKGNvbnN0IGNo YXIgKnBhdGgpOwoKCgoKCgogIHN0YXRpYyBpbnQgbWtkaXIgKGNvbnN0IEFDRV9UQ0hBUiAqcGF0 aCwKICAgICAgICAgICAgICAgICAgICBtb2RlX3QgbW9kZSA9IDA3NTUpOwogIHN0YXRpYyBpbnQg bWtmaWZvIChjb25zdCBBQ0VfVENIQVIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgIG1vZGVf dCBtb2RlID0gMDY0NCk7CiAgc3RhdGljIEFDRV9UQ0hBUiAqbWt0ZW1wIChBQ0VfVENIQVIgKnQp OwogIHN0YXRpYyBBQ0VfVENIQVIgKmdldGN3ZCAoQUNFX1RDSEFSICosIHNpemVfdCk7CiAgc3Rh dGljIGludCByZW5hbWUgKGNvbnN0IEFDRV9UQ0hBUiAqb2xkX25hbWUsCiAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAqbmV3X25hbWUsCiAgICAgICAgICAgICAgICAgICAgIGlu dCBmbGFncyA9IC0xKTsKICBzdGF0aWMgaW50IHVubGluayAoY29uc3QgQUNFX1RDSEFSICpwYXRo KTsKICBzdGF0aWMgQUNFX1RDSEFSICp0ZW1wbmFtIChjb25zdCBBQ0VfVENIQVIgKmRpciA9IDAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpwZnggPSAwKTsK CgoKICBzdGF0aWMgaW50IHJhbmQgKHZvaWQpOwogIHN0YXRpYyBpbnQgcmFuZF9yIChBQ0VfUkFO RFJfVFlQRSAmc2VlZCk7CiAgc3RhdGljIHZvaWQgc3JhbmQgKHVfaW50IHNlZWQpOwoKCgogIHN0 YXRpYyBpbnQgcndsb2NrX2luaXQgKEFDRV9yd2xvY2tfdCAqcncsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHR5cGUgPSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIgKm5hbWUgPSAwLAogICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKmFyZyA9IDApOwogIHN0YXRpYyBpbnQgcndsb2NrX2Rlc3Ryb3kgKEFD RV9yd2xvY2tfdCAqcncpOwogIHN0YXRpYyBpbnQgcndfcmRsb2NrIChBQ0Vfcndsb2NrX3QgKnJ3 KTsKICBzdGF0aWMgaW50IHJ3X3dybG9jayAoQUNFX3J3bG9ja190ICpydyk7CiAgc3RhdGljIGlu dCByd190cnlyZGxvY2sgKEFDRV9yd2xvY2tfdCAqcncpOwogIHN0YXRpYyBpbnQgcndfdHJ5d3Js b2NrIChBQ0Vfcndsb2NrX3QgKnJ3KTsKICBzdGF0aWMgaW50IHJ3X3RyeXdybG9ja191cGdyYWRl IChBQ0Vfcndsb2NrX3QgKnJ3KTsKICBzdGF0aWMgaW50IHJ3X3VubG9jayAoQUNFX3J3bG9ja190 ICpydyk7CgoKCiAgc3RhdGljIGludCBldmVudF9pbml0IChBQ0VfZXZlbnRfdCAqZXZlbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWFudWFsX3Jlc2V0ID0gMCwKICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBpbml0aWFsX3N0YXRlID0gMCwKICAgICAgICAgICAgICAgICAgICAg ICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCiAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKmFyZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2EgPSAwKTsKIyA2MTE2 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBz dGF0aWMgaW50IGV2ZW50X2Rlc3Ryb3kgKEFDRV9ldmVudF90ICpldmVudCk7CiAgc3RhdGljIGlu dCBldmVudF93YWl0IChBQ0VfZXZlbnRfdCAqZXZlbnQpOwogIHN0YXRpYyBpbnQgZXZlbnRfdGlt ZWR3YWl0IChBQ0VfZXZlbnRfdCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0KTsKICBzdGF0aWMgaW50IGV2ZW50X3NpZ25hbCAoQUNF X2V2ZW50X3QgKmV2ZW50KTsKICBzdGF0aWMgaW50IGV2ZW50X3B1bHNlIChBQ0VfZXZlbnRfdCAq ZXZlbnQpOwogIHN0YXRpYyBpbnQgZXZlbnRfcmVzZXQgKEFDRV9ldmVudF90ICpldmVudCk7CgoK CiAgc3RhdGljIGludCBzZW1hX2Rlc3Ryb3kgKEFDRV9zZW1hX3QgKnMpOwogIHN0YXRpYyBpbnQg c2VtYV9pbml0IChBQ0Vfc2VtYV90ICpzLAogICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBj b3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUgPSBQVEhSRUFEX1BST0NFU1Nf UFJJVkFURSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAsCiAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyA9IDAsCiAgICAgICAgICAgICAgICAgICAg ICAgIGludCBtYXggPSAweDdmZmZmZmZmLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Eg PSAwKTsKIyA2MTQzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1MuaCIKICBzdGF0aWMgaW50IHNlbWFfcG9zdCAoQUNFX3NlbWFfdCAqcyk7CiAgc3RhdGlj IGludCBzZW1hX3Bvc3QgKEFDRV9zZW1hX3QgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCByZWxlYXNlX2NvdW50KTsKICBzdGF0aWMgaW50IHNlbWFfdHJ5d2FpdCAoQUNFX3NlbWFf dCAqcyk7CiAgc3RhdGljIGludCBzZW1hX3dhaXQgKEFDRV9zZW1hX3QgKnMpOwogIHN0YXRpYyBp bnQgc2VtYV93YWl0IChBQ0Vfc2VtYV90ICpzLAogICAgICAgICAgICAgICAgICAgICAgICBBQ0Vf VGltZV9WYWx1ZSAmdHYpOwoKCgogIHN0YXRpYyBpbnQgc2VtY3RsIChpbnQgaW50X2lkLAogICAg ICAgICAgICAgICAgICAgICBpbnQgc2VtbnVtLAogICAgICAgICAgICAgICAgICAgICBpbnQgY21k LAogICAgICAgICAgICAgICAgICAgICBzZW11bik7CiAgc3RhdGljIGludCBzZW1nZXQgKGtleV90 IGtleSwKICAgICAgICAgICAgICAgICAgICAgaW50IG5zZW1zLAogICAgICAgICAgICAgICAgICAg ICBpbnQgZmxhZ3MpOwogIHN0YXRpYyBpbnQgc2Vtb3AgKGludCBpbnRfaWQsCiAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNlbWJ1ZiAqc29wcywKICAgICAgICAgICAgICAgICAgICBzaXplX3Qg bnNvcHMpOwoKCgoKCiAgc3RhdGljIGludCBzY2hlZF9wYXJhbXMgKGNvbnN0IEFDRV9TY2hlZF9Q YXJhbXMgJiwgQUNFX2lkX3QgaWQgPSAoLTEpKTsKCgoKICBzdGF0aWMgdm9pZCAqc2htYXQgKGlu dCBpbnRfaWQsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzaG1hZGRyLAogICAgICAgICAg ICAgICAgICAgICAgaW50IHNobWZsZyk7CiAgc3RhdGljIGludCBzaG1jdGwgKGludCBpbnRfaWQs CiAgICAgICAgICAgICAgICAgICAgIGludCBjbWQsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzaG1pZF9kcyAqYnVmKTsKICBzdGF0aWMgaW50IHNobWR0ICh2b2lkICpzaG1hZGRyKTsKICBz dGF0aWMgaW50IHNobWdldCAoa2V5X3Qga2V5LAogICAgICAgICAgICAgICAgICAgICBpbnQgc2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKCgoKICBzdGF0aWMgaW50IGtpbGwg KHBpZF90IHBpZCwKICAgICAgICAgICAgICAgICAgIGludCBzaWdudW0pOwogIHN0YXRpYyBpbnQg c2lnYWN0aW9uIChpbnQgc2lnbnVtLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3Qgc2lnYWN0aW9uICpuc2EsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdhY3Rp b24gKm9zYSk7CiAgc3RhdGljIGludCBzaWdhZGRzZXQgKHNpZ3NldF90ICpzLAogICAgICAgICAg ICAgICAgICAgICAgICBpbnQgc2lnbnVtKTsKICBzdGF0aWMgaW50IHNpZ2RlbHNldCAoc2lnc2V0 X3QgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWdudW0pOwogIHN0YXRpYyBpbnQg c2lnZW1wdHlzZXQgKHNpZ3NldF90ICpzKTsKICBzdGF0aWMgaW50IHNpZ2ZpbGxzZXQgKHNpZ3Nl dF90ICpzKTsKICBzdGF0aWMgaW50IHNpZ2lzbWVtYmVyIChzaWdzZXRfdCAqcywKICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgc2lnbnVtKTsKICBzdGF0aWMgQUNFX1NpZ25hbEhhbmRsZXIg c2lnbmFsIChpbnQgc2lnbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD RV9TaWduYWxIYW5kbGVyKTsKICBzdGF0aWMgaW50IHNpZ3N1c3BlbmQgKGNvbnN0IHNpZ3NldF90 ICpzZXQpOwogIHN0YXRpYyBpbnQgc2lncHJvY21hc2sgKGludCBob3csCiAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc2lnc2V0X3QgKm5zcCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBzaWdzZXRfdCAqb3NwKTsKCiAgc3RhdGljIGludCBwdGhyZWFkX3NpZ21hc2sgKGludCBob3cs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpuc3AsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpvc3ApOwoKCgoKICBzdGF0aWMgQUNF X0hBTkRMRSBhY2NlcHQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICphZGRybGVuKTsKCgoKCgoKICBzdGF0aWMgQUNFX0hBTkRMRSBhY2NlcHQgKEFDRV9IQU5E TEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICph ZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphZGRybGVuLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX0FjY2VwdF9Rb1NfUGFyYW1zICZxb3NfcGFyYW1z KTsKCiAgc3RhdGljIGludCBjb25uZWN0IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgIGlu dCBhZGRybGVuKTsKCgoKCgogIHN0YXRpYyBpbnQgY29ubmVjdCAoQUNFX0hBTkRMRSBoYW5kbGUs CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAg ICAgICAgICAgIGludCBhZGRybGVuLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1Fv U19QYXJhbXMgJnFvc19wYXJhbXMpOwoKICBzdGF0aWMgaW50IGJpbmQgKEFDRV9IQU5ETEUgcywK ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwKICAgICAgICAgICAgICAg ICAgIGludCBuYW1lbGVuKTsKCiAgc3RhdGljIGludCBjbG9zZXNvY2tldCAoQUNFX0hBTkRMRSBz KTsKICBzdGF0aWMgc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieWFkZHIgKGNvbnN0IGNoYXIgKmFk ZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUpOwogIHN0YXRp YyBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5bmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CiAgc3Rh dGljIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lMiAoY29uc3QgY2hhciAqbmFtZSwgaW50 IHR5cGUpOwogIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5YWRkcl9yIChjb25zdCBj aGFyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg bGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3Rl bnQgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNF X0hPU1RFTlRfREFUQSBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCAqaF9lcnJub3ApOwogIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5 bmFtZV9yIChjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBQ0VfSE9TVEVOVF9EQVRBIGJ1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpoX2Vycm5vcCk7CiAgc3RhdGljIGlu dCBnZXRwZWVybmFtZSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHNvY2thZGRyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq YWRkcmxlbik7CiAgc3RhdGljIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW5hbWUgKGNvbnN0 IGNoYXIgKm5hbWUpOwogIHN0YXRpYyBzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnluYW1lX3Ig KGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHByb3RvZW50ICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQUNFX1BST1RPRU5UX0RBVEEgYnVmZmVyKTsKICBzdGF0aWMgc3Ry dWN0IHByb3RvZW50ICpnZXRwcm90b2J5bnVtYmVyIChpbnQgcHJvdG8pOwogIHN0YXRpYyBzdHJ1 Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1iZXJfciAoaW50IHByb3RvLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICpyZXN1bHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfUFJPVE9F TlRfREFUQSBidWZmZXIpOwogIHN0YXRpYyBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFtZSAo Y29uc3QgY2hhciAqc3ZjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqcHJvdG8pOwogIHN0YXRpYyBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFt ZV9yIChjb25zdCBjaGFyICpzdmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKnByb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBQ0VfU0VSVkVOVF9EQVRBIGJ1Zik7CiAgc3RhdGljIGludCBn ZXRzb2NrbmFtZSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHNvY2thZGRyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYWRk cmxlbik7CiAgc3RhdGljIGludCBnZXRzb2Nrb3B0IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBvcHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3B0dmFsLAogICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpvcHRsZW4pOwogIHN0YXRpYyBsb25nIGluZXRfYWRkciAo Y29uc3QgY2hhciAqbmFtZSk7CiAgc3RhdGljIGNoYXIgKmluZXRfbnRvYSAoY29uc3Qgc3RydWN0 IGluX2FkZHIgYWRkcik7CiAgc3RhdGljIGludCBpbmV0X2F0b24gKGNvbnN0IGNoYXIgKnN0cnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluX2FkZHIgKmFkZHIpOwogIHN0YXRp YyBjb25zdCBjaGFyICppbmV0X250b3AgKGludCBmYW1pbHksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgdm9pZCAqYWRkcnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpzdHJwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBsZW4pOwogIHN0YXRpYyBpbnQgaW5ldF9wdG9uIChpbnQgZmFtaWx5LAogICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKmFkZHJwdHIpOwoKCiAgc3RhdGljIGludCBlbnVtX3Byb3RvY29scyAoaW50ICpwcm90 b2NvbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1Byb3RvY29sX0luZm8gKnBy b3RvY29sX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmJ1ZmZl cl9sZW5ndGgpOwoKICBzdGF0aWMgQUNFX0hBTkRMRSBqb2luX2xlYWYgKEFDRV9IQU5ETEUgc29j a2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ja2FkZHIgKm5hbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmFtZWxlbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9Rb1NfUGFyYW1zICZxb3NfcGFyYW1zKTsKICBz dGF0aWMgaW50IGxpc3RlbiAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAg IGludCBiYWNrbG9nKTsKICBzdGF0aWMgaW50IHJlY3YgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAg ICAgICAgICAgICAgICAgY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICAgaW50IGxlbiwKICAg ICAgICAgICAgICAgICAgIGludCBmbGFncyA9IDApOwogIHN0YXRpYyBpbnQgcmVjdmZyb20gKEFD RV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbGVuLAogICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFn cywKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAgICAgICAg ICAgICAgICAgICAgICAgaW50ICphZGRybGVuKTsKICBzdGF0aWMgaW50IHJlY3Zmcm9tIChBQ0Vf SEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICBpb3ZlYyAqYnVmZmVycywKICAg ICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVyX2NvdW50LAogICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCAmbnVtYmVyX29mX2J5dGVzX3JlY3ZkLAogICAgICAgICAgICAgICAgICAgICAg IGludCAmZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRy LAogICAgICAgICAgICAgICAgICAgICAgIGludCAqYWRkcmxlbiwKICAgICAgICAgICAgICAgICAg ICAgICBBQ0VfT1ZFUkxBUFBFRCAqb3ZlcmxhcHBlZCwKICAgICAgICAgICAgICAgICAgICAgICBB Q0VfT1ZFUkxBUFBFRF9DT01QTEVUSU9OX0ZVTkMgZnVuYyk7CiAgc3RhdGljIGludCBzZW5kIChB Q0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKICAg ICAgICAgICAgICAgICAgIGludCBsZW4sCiAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MgPSAw KTsKICBzdGF0aWMgaW50IHNlbmR0byAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwKICAg ICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAgICAgICAgICAgICAgICAgICAgIGludCBhZGRybGVuKTsK ICBzdGF0aWMgaW50IHNlbmR0byAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGlvdmVjICpidWZmZXJzLAogICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVy X2NvdW50LAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgJm51bWJlcl9vZl9ieXRlc19zZW50 LAogICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgaW50IGFkZHJs ZW4sCiAgICAgICAgICAgICAgICAgICAgIEFDRV9PVkVSTEFQUEVEICpvdmVybGFwcGVkLAogICAg ICAgICAgICAgICAgICAgICBBQ0VfT1ZFUkxBUFBFRF9DT01QTEVUSU9OX0ZVTkMgZnVuYyk7CgoK ICBzdGF0aWMgaW50IHNldHNvY2tvcHQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGxldmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdG5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvcHR2YWwsCiAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgb3B0bGVuKTsKICBzdGF0aWMgaW50IHNodXRkb3duIChBQ0Vf SEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgaG93KTsKCgogIHN0YXRp YyBBQ0VfSEFORExFIHNvY2tldCAoaW50IHByb3RvY29sX2ZhbWlseSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBy b3RvKTsKCgoKICBzdGF0aWMgQUNFX0hBTkRMRSBzb2NrZXQgKGludCBwcm90b2NvbF9mYW1pbHks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBwcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9Qcm90 b2NvbF9JbmZvICpwcm90b2NvbGluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0Vf U09DS19HUk9VUCBnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGZsYWdzKTsK CiAgc3RhdGljIGludCBzb2NrZXRwYWlyIChpbnQgZG9tYWluLAogICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJvdG9jb2wsCiAg ICAgICAgICAgICAgICAgICAgICAgICBBQ0VfSEFORExFIHN2WzJdKTsKCgoKICBzdGF0aWMgaW50 IHNvY2tldF9pbml0IChpbnQgdmVyc2lvbl9oaWdoID0gMSwKICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgdmVyc2lvbl9sb3cgPSAxKTsKCgogIHN0YXRpYyBpbnQgc29ja2V0X2ZpbmkgKHZv aWQpOwoKCgogIHN0YXRpYyB2b2lkIHNldHB3ZW50ICh2b2lkKTsKICBzdGF0aWMgdm9pZCBlbmRw d2VudCAodm9pZCk7CiAgc3RhdGljIHN0cnVjdCBwYXNzd2QgKmdldHB3ZW50ICh2b2lkKTsKICBz dGF0aWMgc3RydWN0IHBhc3N3ZCAqZ2V0cHduYW0gKGNvbnN0IGNoYXIgKnVzZXIpOwogIHN0YXRp YyBzdHJ1Y3QgcGFzc3dkICpnZXRwd25hbV9yIChjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFzc3dkICpwd2VudCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgYnVmbGVuKTsKCgoKICBzdGF0aWMgY2hhciAqY29tcGls ZSAoY29uc3QgY2hhciAqaW5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmV4 cGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZW5kYnVmKTsKICBzdGF0aWMgaW50 IHN0ZXAgKGNvbnN0IGNoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgIGNoYXIgKmV4cGJ1Zik7 CiMgNjQwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T LmgiCiAgdHlwZWRlZiBBQ0VfVUlOVDE2IFdDaGFyOwogIHN0YXRpYyB1X2ludCB3c2xlbiAoY29u c3QgV0NoYXIgKik7CiAgc3RhdGljIFdDaGFyICp3c2NweSAoV0NoYXIgKiwKICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBXQ2hhciAqKTsKICBzdGF0aWMgaW50IHdzY21wIChjb25zdCBXQ2hh ciAqLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFdDaGFyICopOwogIHN0YXRpYyBpbnQgd3Nu Y21wIChjb25zdCBXQ2hhciAqLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBXQ2hhciAqLAog ICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKIyA2NDQ5ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMgaW50IHRocl9jb250 aW51ZSAoQUNFX2h0aHJlYWRfdCB0YXJnZXRfdGhyZWFkKTsKIyA2NDgwICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMgaW50IHRocl9j cmVhdGUgKEFDRV9USFJfRlVOQyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICBBQ0VfdGhyZWFkX3QgKnRocl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAg IEFDRV9odGhyZWFkX3QgKnRfaGFuZGxlID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgIGxv bmcgcHJpb3JpdHkgPSAoLTB4N2ZmZmZmZmZMIC0gMUwpLAogICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqc3RhY2sgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0YWNr c2l6ZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQmFzZV9UaHJlYWRfQWRhcHRl ciAqdGhyZWFkX2FkYXB0ZXIgPSAwKTsKCiAgc3RhdGljIGludCB0aHJfZ2V0cHJpbyAoQUNFX2h0 aHJlYWRfdCB0aHJfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICZwcmlvKTsKICBz dGF0aWMgaW50IHRocl9qb2luIChBQ0VfaHRocmVhZF90IHdhaXRlcl9pZCwKICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICoqc3RhdHVzKTsKICBzdGF0aWMgaW50IHRocl9qb2luIChBQ0VfdGhy ZWFkX3Qgd2FpdGVyX2lkLAogICAgICAgICAgICAgICAgICAgICAgIEFDRV90aHJlYWRfdCAqdGhy X2lkLAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipzdGF0dXMpOwogIHN0YXRpYyBpbnQg dGhyX2tpbGwgKEFDRV90aHJlYWRfdCB0aHJfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50 IHNpZ251bSk7CiAgc3RhdGljIEFDRV90aHJlYWRfdCB0aHJfc2VsZiAodm9pZCk7CiAgc3RhdGlj IHZvaWQgdGhyX3NlbGYgKEFDRV9odGhyZWFkX3QgJik7CiAgc3RhdGljIGludCB0aHJfc2V0cHJp byAoQUNFX2h0aHJlYWRfdCB0aHJfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBy aW8pOwogIHN0YXRpYyBpbnQgdGhyX3NldHByaW8gKGNvbnN0IEFDRV9TY2hlZF9Qcmlvcml0eSBw cmlvKTsKICBzdGF0aWMgaW50IHRocl9zdXNwZW5kIChBQ0VfaHRocmVhZF90IHRhcmdldF90aHJl YWQpOwogIHN0YXRpYyBpbnQgdGhyX2NhbmNlbCAoQUNFX3RocmVhZF90IHRfaWQpOwoKICBzdGF0 aWMgaW50IHRocl9jbXAgKEFDRV9odGhyZWFkX3QgdDEsCiAgICAgICAgICAgICAgICAgICAgICBB Q0VfaHRocmVhZF90IHQyKTsKICBzdGF0aWMgaW50IHRocl9lcXVhbCAoQUNFX3RocmVhZF90IHQx LAogICAgICAgICAgICAgICAgICAgICAgICBBQ0VfdGhyZWFkX3QgdDIpOwogIHN0YXRpYyB2b2lk IHRocl9leGl0ICh2b2lkICpzdGF0dXMgPSAwKTsKICBzdGF0aWMgaW50IHRocl9nZXRjb25jdXJy ZW5jeSAodm9pZCk7CiAgc3RhdGljIGludCBsd3BfZ2V0cGFyYW1zIChBQ0VfU2NoZWRfUGFyYW1z ICYpOwoKCgoKICBzdGF0aWMgaW50IHRocl9nZXRzcGVjaWZpYyAoQUNFX3RocmVhZF9rZXlfdCBr ZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkYXRhKTsKICBzdGF0aWMg aW50IHRocl9rZXlmcmVlIChBQ0VfdGhyZWFkX2tleV90IGtleSk7CiAgc3RhdGljIGludCB0aHJf a2V5X2RldGFjaCAodm9pZCAqaW5zdCk7CiMgNjUzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgc3RhdGljIGludCB0aHJfa2V5Y3JlYXRlIChB Q0VfdGhyZWFkX2tleV90ICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVEhS X0RFU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0ID0gMCk7CgogIHN0 YXRpYyBpbnQgdGhyX2tleV91c2VkIChBQ0VfdGhyZWFkX2tleV90IGtleSk7CiAgc3RhdGljIHNp emVfdCB0aHJfbWluX3N0YWNrICh2b2lkKTsKICBzdGF0aWMgaW50IHRocl9zZXRjb25jdXJyZW5j eSAoaW50IGhpbnQpOwogIHN0YXRpYyBpbnQgbHdwX3NldHBhcmFtcyAoY29uc3QgQUNFX1NjaGVk X1BhcmFtcyAmKTsKCgoKCiAgc3RhdGljIGludCB0aHJfc2V0c3BlY2lmaWMgKEFDRV90aHJlYWRf a2V5X3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKICBz dGF0aWMgaW50IHRocl9zaWdzZXRtYXNrIChpbnQgaG93LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHNpZ3NldF90ICpuc20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2lnc2V0X3QgKm9zbSk7CiAgc3RhdGljIGludCB0aHJfc2V0Y2FuY2Vsc3RhdGUgKGludCBuZXdf c3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqb2xkX3N0YXRlKTsK ICBzdGF0aWMgaW50IHRocl9zZXRjYW5jZWx0eXBlIChpbnQgbmV3X3R5cGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICpvbGRfdHlwZSk7CiAgc3RhdGljIGludCBzaWd3YWl0 IChzaWdzZXRfdCAqc2V0LAogICAgICAgICAgICAgICAgICAgICAgaW50ICpzaWcgPSAwKTsKICBz dGF0aWMgaW50IHNpZ3RpbWVkd2FpdCAoY29uc3Qgc2lnc2V0X3QgKnNldCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2lnaW5mb190ICppbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCk7CiAgc3RhdGljIHZvaWQgdGhyX3Rlc3Rj YW5jZWwgKHZvaWQpOwogIHN0YXRpYyB2b2lkIHRocl95aWVsZCAodm9pZCk7CiMgNjU3NCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgc3RhdGlj IHZvaWQgdW5pcXVlX25hbWUgKGNvbnN0IHZvaWQgKm9iamVjdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgQUNFX1RDSEFSICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgbGVuZ3RoKTsKCgoKICBzdGF0aWMgQUNFX3RocmVhZF90IE5VTExfdGhyZWFkOwoKCgogIHN0 YXRpYyBBQ0VfaHRocmVhZF90IE5VTExfaHRocmVhZDsKCgoKICBzdGF0aWMgQUNFX3RocmVhZF9r ZXlfdCBOVUxMX2tleTsKIyA2NjAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMgdm9pZCBtdXRleF9sb2NrX2NsZWFudXAgKHZvaWQg Km11dGV4KTsKCgoKCgoKICBzdGF0aWMgdm9pZCBjbGVhbnVwX3RzcyAoY29uc3QgdV9pbnQgbWFp bl90aHJlYWQpOwoKCgoKCgoKICBzdGF0aWMgaW50IHNjaGVkdWxpbmdfY2xhc3MgKGNvbnN0IGNo YXIgKmNsYXNzX25hbWUsIEFDRV9pZF90ICYpOwoKCiAgc3RhdGljIGludCBzZXRfc2NoZWR1bGlu Z19wYXJhbXMgKGNvbnN0IEFDRV9TY2hlZF9QYXJhbXMgJiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQUNFX2lkX3QgaWQgPSAoLTEpKTsKCgoKCgoKICBzdGF0aWMgaW50IHBy aW9yaXR5X2NvbnRyb2wgKEFDRV9pZHR5cGVfdCwgQUNFX2lkX3QsIGludCwgdm9pZCAqKTsKCgog IHN0YXRpYyBjaGFyICpzdHJwdGltZSAoY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRt ICp0bSk7CiMgNjY0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09TLmgiCnByaXZhdGU6CiMgNjY1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgc3RhdGljIEFDRV9FWElUX0hPT0sgZXhpdF9ob29rXzsK CgogIHN0YXRpYyBBQ0VfRVhJVF9IT09LIHNldF9leGl0X2hvb2sgKEFDRV9FWElUX0hPT0sgaG9v ayk7CgoKICBmcmllbmQgY2xhc3MgQUNFX09TX09iamVjdF9NYW5hZ2VyOwojIDY2OTAgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIHN0YXRpYyBp bnQgY29uZF90aW1lZHdhaXRfaSAoQUNFX2NvbmRfdCAqY3YsCiAgICAgICAgICAgICAgICAgICAg ICAgQUNFX211dGV4X3QgKm0sCiAgICAgICAgICAgICAgICAgICAgICAgQUNFX1RpbWVfVmFsdWUg Kik7CgogIHN0YXRpYyB1X2ludCBhbGFybV9pICh1X2ludCBzZWNzKTsKCiAgc3RhdGljIHVfaW50 IHVhbGFybV9pICh1X2ludCB1c2VjcywgdV9pbnQgaW50ZXJ2YWwgPSAwKTsKCiAgc3RhdGljIHVf aW50IHVhbGFybV9pIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYsCiAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHZfaW50ZXJ2YWwgPSBBQ0VfVGltZV9WYWx1 ZTo6emVybyk7CgogIHN0YXRpYyBpbnQgc2xlZXBfaSAodV9pbnQgc2Vjb25kcyk7CgogIHN0YXRp YyBpbnQgc2xlZXBfaSAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2KTsKCiAgc3RhdGljIGludCBu YW5vc2xlZXBfaSAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXF1ZXN0ZWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpyZW1haW5pbmcgPSAwKTsKCiAgc3RhdGlj IGludCBzZWxlY3RfaSAoaW50IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCAq cmZkcywKICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKndmZHMsCiAgICAgICAgICAgICAg ICAgICAgICAgZmRfc2V0ICplZmRzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9U aW1lX1ZhbHVlICp0diA9IDApOwoKICBzdGF0aWMgaW50IHNlbGVjdF9pIChpbnQgd2lkdGgsCiAg ICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpyZmRzLAogICAgICAgICAgICAgICAgICAgICAg IGZkX3NldCAqd2ZkcywKICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKmVmZHMsCiAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2KTsKCiAgc3RhdGljIGlu dCBwb2xsX2kgKHN0cnVjdCBwb2xsZmQgKnBvbGxmZHMsCiAgICAgICAgICAgICAgICAgICAgIHVf bG9uZyBsZW4sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0diA9 IDApOwoKICBzdGF0aWMgaW50IHBvbGxfaSAoc3RydWN0IHBvbGxmZCAqcG9sbGZkcywKICAgICAg ICAgICAgICAgICAgICAgdV9sb25nIGxlbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF X1RpbWVfVmFsdWUgJnR2KTsKCiAgc3RhdGljIGludCBzZW1hX3dhaXRfaSAoQUNFX3NlbWFfdCAq cyk7CgogIHN0YXRpYyBpbnQgc2VtYV93YWl0X2kgKEFDRV9zZW1hX3QgKnMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgQUNFX1RpbWVfVmFsdWUgJnR2KTsKCiAgc3RhdGljIGludCBzaWd0aW1l ZHdhaXRfaSAoY29uc3Qgc2lnc2V0X3QgKnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaWdpbmZvX3QgKmluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF X1RpbWVfVmFsdWUgKnRpbWVvdXQpOwoKICBzdGF0aWMgQUNFX1RpbWVfVmFsdWUgZ2V0dGltZW9m ZGF5X2kgKHZvaWQpOwoKfTsKIyA2NzQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1MuaCIKY2xhc3MgQUNFX09iamVjdF9NYW5hZ2VyX0Jhc2UKewoKCgoK CgoKcHJvdGVjdGVkOgoKCiAgQUNFX09iamVjdF9NYW5hZ2VyX0Jhc2UgKHZvaWQpOwoKCiAgdmly dHVhbCB+QUNFX09iamVjdF9NYW5hZ2VyX0Jhc2UgKHZvaWQpOwoKcHVibGljOgoKCgoKCiAgdmly dHVhbCBpbnQgaW5pdCAodm9pZCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgaW50IGZpbmkgKHZvaWQp ID0gMDsKCiAgZW51bSBPYmplY3RfTWFuYWdlcl9TdGF0ZQogICAgewogICAgICBPQkpfTUFOX1VO SU5JVElBTElaRUQgPSAwLAogICAgICBPQkpfTUFOX0lOSVRJQUxJWklORywKICAgICAgT0JKX01B Tl9JTklUSUFMSVpFRCwKICAgICAgT0JKX01BTl9TSFVUVElOR19ET1dOLAogICAgICBPQkpfTUFO X1NIVVRfRE9XTgogICAgfTsKCnByb3RlY3RlZDoKIyA2Nzk5ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBpbnQgc3RhcnRpbmdfdXBfaSAodm9p ZCk7CiMgNjgwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmgiCiAgaW50IHNodXR0aW5nX2Rvd25faSAodm9pZCk7CgoKICBPYmplY3RfTWFuYWdlcl9T dGF0ZSBvYmplY3RfbWFuYWdlcl9zdGF0ZV87CgoKCgoKCgogIHVfaW50IGR5bmFtaWNhbGx5X2Fs bG9jYXRlZF87CgoKICBBQ0VfT2JqZWN0X01hbmFnZXJfQmFzZSAqbmV4dF87CnByaXZhdGU6Cgog IEFDRV9PYmplY3RfTWFuYWdlcl9CYXNlIChjb25zdCBBQ0VfT2JqZWN0X01hbmFnZXJfQmFzZSAm KTsKICBBQ0VfT2JqZWN0X01hbmFnZXJfQmFzZSAmb3BlcmF0b3I9IChjb25zdCBBQ0VfT2JqZWN0 X01hbmFnZXJfQmFzZSAmKTsKfTsKCmV4dGVybiAiQyIKdm9pZApBQ0VfT1NfT2JqZWN0X01hbmFn ZXJfSW50ZXJuYWxfRXhpdF9Ib29rICh2b2lkKTsKCgoKY2xhc3MgQUNFX0xvZ19Nc2c7CgpjbGFz cyBBQ0VfT1NfT2JqZWN0X01hbmFnZXIgOiBwdWJsaWMgQUNFX09iamVjdF9NYW5hZ2VyX0Jhc2UK ewpwdWJsaWM6CgogIHZpcnR1YWwgaW50IGluaXQgKHZvaWQpOwoKCiAgdmlydHVhbCBpbnQgZmlu aSAodm9pZCk7CgoKCgoKCiAgc3RhdGljIGludCBzdGFydGluZ191cCAodm9pZCk7CgoKCiAgc3Rh dGljIGludCBzaHV0dGluZ19kb3duICh2b2lkKTsKCgogIGVudW0gUHJlYWxsb2NhdGVkX09iamVj dAogICAgewoKICAgICAgQUNFX09TX01PTklUT1JfTE9DSywKICAgICAgQUNFX1RTU19DTEVBTlVQ X0xPQ0ssCiAgICAgIEFDRV9MT0dfTVNHX0lOU1RBTkNFX0xPQ0ssCiMgNjg3OCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgICAgIEFDRV9PU19Q UkVBTExPQ0FURURfT0JKRUNUUwogICAgfTsKCgoKICBzdGF0aWMgc2lnc2V0X3QgKmRlZmF1bHRf bWFzayAodm9pZCk7CgoKICBzdGF0aWMgQUNFX1RocmVhZF9Ib29rICp0aHJlYWRfaG9vayAodm9p ZCk7CgoKICBzdGF0aWMgQUNFX1RocmVhZF9Ib29rICp0aHJlYWRfaG9vayAoQUNFX1RocmVhZF9I b29rICpuZXdfdGhyZWFkX2hvb2spOwojIDY5MDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpwdWJsaWM6CgoKCgoKCiAgQUNFX09TX09iamVjdF9N YW5hZ2VyICh2b2lkKTsKCgogIH5BQ0VfT1NfT2JqZWN0X01hbmFnZXIgKHZvaWQpOwoKcHJpdmF0 ZToKCiAgc3RhdGljIEFDRV9PU19PYmplY3RfTWFuYWdlciAqaW5zdGFuY2UgKHZvaWQpOwoKCiAg c3RhdGljIEFDRV9PU19PYmplY3RfTWFuYWdlciAqaW5zdGFuY2VfOwoKCiAgc3RhdGljIHZvaWQg KnByZWFsbG9jYXRlZF9vYmplY3RbQUNFX09TX1BSRUFMTE9DQVRFRF9PQkpFQ1RTXTsKCgogIHNp Z3NldF90ICpkZWZhdWx0X21hc2tfOwoKCiAgQUNFX1RocmVhZF9Ib29rICp0aHJlYWRfaG9va187 CgoKICBBQ0VfT1NfRXhpdF9JbmZvIGV4aXRfaW5mb187CiMgNjkzOSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgaW50IGF0X2V4aXQgKEFDRV9F WElUX0hPT0sgZnVuYyk7CgoKICBzdGF0aWMgdm9pZCBwcmludF9lcnJvcl9tZXNzYWdlICh1X2lu dCBsaW5lX251bWJlciwgY29uc3QgQUNFX1RDSEFSICptZXNzYWdlKTsKCgogIGZyaWVuZCBjbGFz cyBBQ0VfT1M7CiAgZnJpZW5kIGNsYXNzIEFDRV9PYmplY3RfTWFuYWdlcjsKICBmcmllbmQgY2xh c3MgQUNFX09TX09iamVjdF9NYW5hZ2VyX01hbmFnZXI7CiAgZnJpZW5kIGNsYXNzIEFDRV9UU1Nf Q2xlYW51cDsKICBmcmllbmQgY2xhc3MgQUNFX1RTU19FbXVsYXRpb247CiAgZnJpZW5kIGNsYXNz IEFDRV9Mb2dfTXNnOwogIGZyaWVuZCB2b2lkIEFDRV9PU19PYmplY3RfTWFuYWdlcl9JbnRlcm5h bF9FeGl0X0hvb2sgKCk7Cn07CiMgNzUzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmgiCmV4dGVybiAiQyIgdm9pZCBhY2VfbXV0ZXhfbG9ja19jbGVh bnVwX2FkYXB0ZXIgKHZvaWQgKmFyZ3MpOwojIDc3MzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpzdHJ1Y3QgQUNFX1RSQU5TTUlUX0ZJTEVfQlVG RkVSUwp7CiAgdm9pZCAqSGVhZDsKICBzaXplX3QgSGVhZExlbmd0aDsKICB2b2lkICpUYWlsOwog IHNpemVfdCBUYWlsTGVuZ3RoOwp9Owp0eXBlZGVmIEFDRV9UUkFOU01JVF9GSUxFX0JVRkZFUlMq IEFDRV9QVFJBTlNNSVRfRklMRV9CVUZGRVJTOwp0eXBlZGVmIEFDRV9UUkFOU01JVF9GSUxFX0JV RkZFUlMqIEFDRV9MUFRSQU5TTUlUX0ZJTEVfQlVGRkVSUzsKIyA3NzU2ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVHJhY2UuaCIgMQojIDE1ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVHJhY2UuaCIKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNiAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RyYWNlLmgiIDIK CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgi IDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1Ry YWNlLmgiIDIKIyAyOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL1RyYWNlLmgiCmNsYXNzIEFDRV9UcmFjZQp7CnB1YmxpYzoKCgoKCiAgQUNFX1RyYWNlIChj b25zdCBBQ0VfVENIQVIgKm4sCiAgICAgICAgICAgICBpbnQgbGluZSA9IDAsCiAgICAgICAgICAg ICBjb25zdCBBQ0VfVENIQVIgKmZpbGUgPSAiIik7CgoKCiAgfkFDRV9UcmFjZSAodm9pZCk7CgoK CiAgc3RhdGljIGludCBpc190cmFjaW5nKHZvaWQpOwoKCiAgc3RhdGljIHZvaWQgc3RhcnRfdHJh Y2luZyAodm9pZCk7CgoKICBzdGF0aWMgdm9pZCBzdG9wX3RyYWNpbmcgKHZvaWQpOwoKCiAgc3Rh dGljIHZvaWQgc2V0X25lc3RpbmdfaW5kZW50IChpbnQgaW5kZW50KTsKCgogIHN0YXRpYyBpbnQg Z2V0X25lc3RpbmdfaW5kZW50ICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7Cgpw cml2YXRlOgoKCgoKCiAgY29uc3QgQUNFX1RDSEFSICpuYW1lXzsKCgogIHN0YXRpYyBpbnQgbmVz dGluZ19pbmRlbnRfOwoKCiAgc3RhdGljIGludCBlbmFibGVfdHJhY2luZ187CgoKICBlbnVtCiAg ewogICAgREVGQVVMVF9JTkRFTlQgPSAzLAogICAgREVGQVVMVF9UUkFDSU5HID0gMQogIH07Cn07 CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0 LmgiIDEKIyA4NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L1RyYWNlLmgiIDIKIyA3NzU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvT1MuaCIgMgoKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1MuaSIgMQojIDM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKdHlwZWRlZiBzb2NrbGVuX3QgQUNFX1NPQ0tFVF9M RU47CiMgNDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P Uy5pIgp0eXBlZGVmIGNvbnN0IHN0cnVjdCBzdHJidWYgKkFDRV9TVFJCVUZfVFlQRTsKCgoKdHlw ZWRlZiB2b2lkICpBQ0VfU09DS09QVF9UWVBFMTsKIyA3OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCnR5cGVkZWYgY2hhciAqQUNFX01NQVBfVFlQ RTsKIyAxMzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P Uy5pIgp0eXBlZGVmIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqIEFDRV9USU1FU1BFQ19QVFI7CgoK CiMgMSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL21hbGxv Yy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1 ZGUvbWFsbG9jLmgiIDIgMwojIDQ0ICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiIDMKIyAxICIvdXNy L2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwojIDQ1ICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiIDIgMwojIDEwNCAiL3Vz ci9pbmNsdWRlL21hbGxvYy5oIiAzCmV4dGVybiAiQyIgewojIDExMyAiL3Vzci9pbmNsdWRlL21h bGxvYy5oIiAzCmV4dGVybiBpbnQgX19tYWxsb2NfaW5pdGlhbGl6ZWQ7CgoKCgoKCgpleHRlcm4g dm9pZCAqIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f bWFsbG9jX18pKTsKCgpleHRlcm4gdm9pZCAqIGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVf dCBfX3NpemUpIHRocm93ICgpCiAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK CgpleHRlcm4gdm9pZCAqIHJlYWxsb2MgKHZvaWQgKiBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhy b3cgKCkKCiAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCmV4dGVybiB2b2lk IGZyZWUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQg KiBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKiBtZW1hbGlnbiAoc2l6ZV90IF9fYWxp Z25tZW50LCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqIHZhbGxvYyAo c2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoK ZXh0ZXJuIHZvaWQgKiBwdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKQogICAgICAgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgKiAoKl9fbW9yZWNvcmUp IChwdHJkaWZmX3QgX19zaXplKTsKCgpleHRlcm4gdm9pZCAqIF9fZGVmYXVsdF9tb3JlY29yZSAo cHRyZGlmZl90IF9fc2l6ZSkgdGhyb3cgKCkKICAgICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxv Y19fKSk7CgoKc3RydWN0IG1hbGxpbmZvIHsKICBpbnQgYXJlbmE7CiAgaW50IG9yZGJsa3M7CiAg aW50IHNtYmxrczsKICBpbnQgaGJsa3M7CiAgaW50IGhibGtoZDsKICBpbnQgdXNtYmxrczsKICBp bnQgZnNtYmxrczsKICBpbnQgdW9yZGJsa3M7CiAgaW50IGZvcmRibGtzOwogIGludCBrZWVwY29z dDsKfTsKCgpleHRlcm4gc3RydWN0IG1hbGxpbmZvIG1hbGxpbmZvICh2b2lkKSB0aHJvdyAoKTsK IyAxOTcgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIgMwpleHRlcm4gaW50IG1hbGxvcHQgKGludCBf X3BhcmFtLCBpbnQgX192YWwpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IG1hbGxvY190cmltIChz aXplX3QgX19wYWQpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1hbGxvY191c2FibGVfc2l6 ZSAodm9pZCAqIF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBtYWxsb2Nfc3RhdHMgKHZv aWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICogbWFsbG9jX2dldF9zdGF0ZSAodm9pZCkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgbWFsbG9jX3NldF9zdGF0ZSAodm9pZCAqIF9fcHRyKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gdm9pZCAoKl9fbWFsbG9jX2luaXRpYWxpemVfaG9vaykgKHZvaWQp OwoKZXh0ZXJuIHZvaWQgKCpfX2ZyZWVfaG9vaykgKHZvaWQgKiBfX3B0ciwgX19jb25zdCB2b2lk ICopOwoKZXh0ZXJuIHZvaWQgKiAoKl9fbWFsbG9jX2hvb2spIChzaXplX3QgX19zaXplLCBfX2Nv bnN0IHZvaWQgKik7CgpleHRlcm4gdm9pZCAqICgqX19yZWFsbG9jX2hvb2spICh2b2lkICogX19w dHIsIHNpemVfdCBfX3NpemUsIF9fY29uc3Qgdm9pZCAqKTsKCgpleHRlcm4gdm9pZCAqICgqX19t ZW1hbGlnbl9ob29rKSAoc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplLCBfX2NvbnN0 IHZvaWQgKik7CgoKZXh0ZXJuIHZvaWQgKCpfX2FmdGVyX21vcmVjb3JlX2hvb2spICh2b2lkKTsK CgpleHRlcm4gdm9pZCBfX21hbGxvY19jaGVja19pbml0ICh2b2lkKSB0aHJvdyAoKTsKCgoKfTsK IyAxMzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5p IiAyCgoKCgppbmxpbmUKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yIHRpbWV2YWwgKCkgY29uc3QK ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg cmV0dXJuIHRoaXMtPnR2XzsKfQoKCgppbmxpbmUKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yIGNv bnN0IHRpbWV2YWwgKiAoKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiAoY29uc3QgdGltZXZhbCAqKSAm dGhpcy0+dHZfOwp9CgppbmxpbmUgdm9pZApBQ0VfVGltZV9WYWx1ZTo6c2V0IChsb25nIHNlYywg bG9uZyB1c2VjKQp7CgogIHRoaXMtPnR2Xy50dl9zZWMgPSBzZWM7CiAgdGhpcy0+dHZfLnR2X3Vz ZWMgPSB1c2VjOwp9CgppbmxpbmUgdm9pZApBQ0VfVGltZV9WYWx1ZTo6c2V0IChkb3VibGUgZCkK ewoKICBsb25nIGwgPSAobG9uZykgZDsKICB0aGlzLT50dl8udHZfc2VjID0gbDsKICB0aGlzLT50 dl8udHZfdXNlYyA9IChsb25nKSAoKGQgLSAoZG91YmxlKSBsKSAqIDEwMDAwMDBMKTsKICB0aGlz LT5ub3JtYWxpemUgKCk7Cn0KCgoKCgppbmxpbmUgdm9pZApBQ0VfVGltZV9WYWx1ZTo6c2V0IChj b25zdCB0aW1lc3BlY190ICZ0dikKewoKCiAgdGhpcy0+dHZfLnR2X3NlYyA9IHR2LnR2X3NlYzsK CiAgdGhpcy0+dHZfLnR2X3VzZWMgPSB0di50dl9uc2VjIC8gMTAwMDsKCgoKCgoKICB0aGlzLT5u b3JtYWxpemUgKCk7Cn0KCmlubGluZSB2b2lkCkFDRV9UaW1lX1ZhbHVlOjpzZXQgKGNvbnN0IHRp bWV2YWwgJnR2KQp7CgogIHRoaXMtPnR2Xy50dl9zZWMgPSB0di50dl9zZWM7CiAgdGhpcy0+dHZf LnR2X3VzZWMgPSB0di50dl91c2VjOwoKICB0aGlzLT5ub3JtYWxpemUgKCk7Cn0KCmlubGluZQpB Q0VfVGltZV9WYWx1ZTo6QUNFX1RpbWVfVmFsdWUgKGNvbnN0IHRpbWV2YWwgJnR2KQoKewoKICB0 aGlzLT5zZXQgKHR2KTsKfQoKaW5saW5lCkFDRV9UaW1lX1ZhbHVlOjpBQ0VfVGltZV9WYWx1ZSAo dm9pZCkKCnsKCiAgdGhpcy0+c2V0ICgwLCAwKTsKCgp9CgppbmxpbmUKQUNFX1RpbWVfVmFsdWU6 OkFDRV9UaW1lX1ZhbHVlIChsb25nIHNlYywgbG9uZyB1c2VjKQp7CgogIHRoaXMtPnNldCAoc2Vj LCB1c2VjKTsKICB0aGlzLT5ub3JtYWxpemUgKCk7Cn0KCgoKaW5saW5lIGxvbmcKQUNFX1RpbWVf VmFsdWU6OnNlYyAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICByZXR1cm4gdGhpcy0+dHZfLnR2X3NlYzsKfQoKCgppbmxpbmUgdm9pZApBQ0Vf VGltZV9WYWx1ZTo6c2VjIChsb25nIHNlYykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICB0aGlzLT50dl8udHZfc2VjID0gc2VjOwp9CgoKCmlubGluZSBsb25nCkFD RV9UaW1lX1ZhbHVlOjptc2VjICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+dHZfLnR2X3NlYyAqIDEwMDAgKyB0aGlz LT50dl8udHZfdXNlYyAvIDEwMDA7Cn0KCgoKaW5saW5lIHZvaWQKQUNFX1RpbWVfVmFsdWU6Om1z ZWMgKGxvbmcgbWlsbGlzZWNvbmRzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCiAgdGhpcy0+dHZfLnR2X3NlYyA9IG1pbGxpc2Vjb25kcyAvIDEwMDA7CgogIHRo aXMtPnR2Xy50dl91c2VjID0gKG1pbGxpc2Vjb25kcyAtICh0aGlzLT50dl8udHZfc2VjICogMTAw MCkpICogMTAwMDsKfQoKCgppbmxpbmUgbG9uZwpBQ0VfVGltZV9WYWx1ZTo6dXNlYyAodm9pZCkg Y29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJu IHRoaXMtPnR2Xy50dl91c2VjOwp9CgoKCmlubGluZSB2b2lkCkFDRV9UaW1lX1ZhbHVlOjp1c2Vj IChsb25nIHVzZWMpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IHRoaXMtPnR2Xy50dl91c2VjID0gdXNlYzsKfQoKCgppbmxpbmUKQUNFX1RpbWVfVmFsdWU6OkFD RV9UaW1lX1ZhbHVlIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYpCiAgOiB0dl8gKHR2LnR2XykK ewoKfQoKaW5saW5lIEFDRV9UaW1lX1ZhbHVlICYKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yICo9 IChkb3VibGUgZCkKewogIGRvdWJsZSB0aW1lID0gdGhpcy0+c2VjICgpICogMTAwMDAwMEwgKyB0 aGlzLT51c2VjICgpOwogIHRpbWUgKj0gZDsKICB0aGlzLT5zZWMgKChsb25nKSh0aW1lIC8gMTAw MDAwMEwpKTsKICB0aGlzLT51c2VjICgoKGxvbmcpdGltZSkgJSAxMDAwMDAwTCk7CgogIHJldHVy biAqdGhpczsKfQoKaW5saW5lIEFDRV9UaW1lX1ZhbHVlCm9wZXJhdG9yICogKGRvdWJsZSBkLCBj b25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYpCnsKICByZXR1cm4gQUNFX1RpbWVfVmFsdWUgKHR2KSAq PSBkOwp9CgppbmxpbmUgQUNFX1RpbWVfVmFsdWUKb3BlcmF0b3IgKiAoY29uc3QgQUNFX1RpbWVf VmFsdWUgJnR2LCBkb3VibGUgZCkKewogIHJldHVybiBBQ0VfVGltZV9WYWx1ZSAodHYpICo9IGQ7 Cn0KCgoKaW5saW5lIGludApvcGVyYXRvciA+IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYxLAog ICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYyKQp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogIGlmICh0djEuc2VjICgpID4gdHYyLnNlYyAoKSkKICAgIHJldHVybiAx OwogIGVsc2UgaWYgKHR2MS5zZWMgKCkgPT0gdHYyLnNlYyAoKQogICAgICAgICAgICYmIHR2MS51 c2VjICgpID4gdHYyLnVzZWMgKCkpCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsK fQoKCgppbmxpbmUgaW50Cm9wZXJhdG9yID49IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYxLAog ICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2MikKewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgaWYgKHR2MS5zZWMgKCkgPiB0djIuc2VjICgpKQogICAgcmV0dXJu IDE7CiAgZWxzZSBpZiAodHYxLnNlYyAoKSA9PSB0djIuc2VjICgpCiAgICAgICAgICAgJiYgdHYx LnVzZWMgKCkgPj0gdHYyLnVzZWMgKCkpCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4g MDsKfQoKCgppbmxpbmUKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yIHRpbWVzcGVjX3QgKCkgY29u c3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgdGltZXNwZWNfdCB0djsKCiAgdHYudHZfc2VjID0gdGhpcy0+c2VjICgpOwoKICB0di50 dl9uc2VjID0gdGhpcy0+dHZfLnR2X3VzZWMgKiAxMDAwOwoKCgoKCiAgcmV0dXJuIHR2Owp9CgoK CmlubGluZQpBQ0VfVGltZV9WYWx1ZTo6QUNFX1RpbWVfVmFsdWUgKGNvbnN0IHRpbWVzcGVjX3Qg JnR2KQoKewoKICB0aGlzLT5zZXQgKHR2KTsKfQoKCgppbmxpbmUgaW50Cm9wZXJhdG9yIDwgKGNv bnN0IEFDRV9UaW1lX1ZhbHVlICZ0djEsCiAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVl ICZ0djIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHR2MiA+IHR2 MTsKfQoKCgppbmxpbmUgaW50Cm9wZXJhdG9yIDw9IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYx LAogICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2MikKewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHR2MiA+PSB0djE7Cn0KCgoKaW5saW5lIGludApv cGVyYXRvciA9PSAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2MSwKICAgICAgICAgICAgIGNvbnN0 IEFDRV9UaW1lX1ZhbHVlICZ0djIpCnsKCiAgcmV0dXJuIHR2MS5zZWMgKCkgPT0gdHYyLnNlYyAo KQogICAgJiYgdHYxLnVzZWMgKCkgPT0gdHYyLnVzZWMgKCk7Cn0KCgoKaW5saW5lIGludApvcGVy YXRvciAhPSAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2MSwKICAgICAgICAgICAgIGNvbnN0IEFD RV9UaW1lX1ZhbHVlICZ0djIpCnsKCiAgcmV0dXJuICEodHYxID09IHR2Mik7Cn0KCgoKaW5saW5l IHZvaWQKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yKz0gKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0 dikKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhp cy0+c2VjICh0aGlzLT5zZWMgKCkgKyB0di5zZWMgKCkpOwogIHRoaXMtPnVzZWMgKHRoaXMtPnVz ZWMgKCkgKyB0di51c2VjICgpKTsKICB0aGlzLT5ub3JtYWxpemUgKCk7Cn0KCgoKaW5saW5lIHZv aWQKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yLT0gKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0dikK ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+ c2VjICh0aGlzLT5zZWMgKCkgLSB0di5zZWMgKCkpOwogIHRoaXMtPnVzZWMgKHRoaXMtPnVzZWMg KCkgLSB0di51c2VjICgpKTsKICB0aGlzLT5ub3JtYWxpemUgKCk7Cn0KCgoKaW5saW5lIEFDRV9U aW1lX1ZhbHVlCm9wZXJhdG9yICsgKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0djEsCiAgICAgICAg ICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0djIpCnsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgQUNFX1RpbWVfVmFsdWUgc3VtICh0djEuc2VjICgpICsgdHYyLnNlYyAoKSwKICAg ICAgICAgICAgICAgICAgICAgIHR2MS51c2VjICgpICsgdHYyLnVzZWMgKCkpOwoKICBzdW0ubm9y bWFsaXplICgpOwogIHJldHVybiBzdW07Cn0KCgoKaW5saW5lIEFDRV9UaW1lX1ZhbHVlCm9wZXJh dG9yIC0gKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0djEsCiAgICAgICAgICAgIGNvbnN0IEFDRV9U aW1lX1ZhbHVlICZ0djIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgQUNFX1Rp bWVfVmFsdWUgZGVsdGEgKHR2MS5zZWMgKCkgLSB0djIuc2VjICgpLAogICAgICAgICAgICAgICAg ICAgICAgICB0djEudXNlYyAoKSAtIHR2Mi51c2VjICgpKTsKICBkZWx0YS5ub3JtYWxpemUgKCk7 CiAgcmV0dXJuIGRlbHRhOwp9CgppbmxpbmUgaW50CkFDRV9PUzo6ZmNudGwgKEFDRV9IQU5ETEUg aGFuZGxlLCBpbnQgY21kLCBsb25nIGFyZykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKIyA0ODUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jl c3VsdF87IHJldHVybiA6OmZjbnRsIChoYW5kbGUsIGNtZCwgYXJnKTsgfSB3aGlsZSAoMCk7Cgp9 CgoKaW5saW5lIGludApBQ0VfT1M6OmNoZGlyIChjb25zdCBjaGFyICpwYXRoKQp7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwojIDUxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Y2hkaXIgKHBhdGgpOyB9IHdoaWxl ICgwKTsKCgp9CiMgNTM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKaW5saW5lIEFDRV9UQ0hBUiAqCkFDRV9PUzo6bWt0ZW1wIChBQ0VfVENIQVIg KnMpCnsKCgoKCgogIHJldHVybiA6Om1rdGVtcCAocyk7Cgp9CgoKaW5saW5lIGludApBQ0VfT1M6 Om1rZmlmbyAoY29uc3QgQUNFX1RDSEFSICpmaWxlLCBtb2RlX3QgbW9kZSkKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0g LTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6Om1rZmlmbyAoZmlsZSwgbW9k ZSk7IH0gd2hpbGUgKDApOwoKfQojIDU3NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCiMgMSAiL3Vzci9pbmNsdWRlL21lbW9yeS5oIiAxIDMKIyA1 NzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIiAy CgoKCgoKZXh0ZXJuICJDIiBpbnQgaXNhc3RyZWFtIChpbnQpOwojIDYwOCAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiMgMSAiL3Vzci9pbmNsdWRl L3N5cy9zeXNjYWxsLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3N5c2NhbGwuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9hc20vdW5pc3RkLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lz L3N5c2NhbGwuaCIgMiAzCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzY2FsbC5oIiAx IDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9zeXNjYWxsLmgiIDIgMwojIDYwOSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiIDIKIyA2MjUgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgppbmxpbmUgaW50 CkFDRV9PUzo6ZnN0YXQgKEFDRV9IQU5ETEUgaGFuZGxlLCBBQ0Vfc3RhdCAqc3RwKQp7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDY0NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgICBkbyB7IGludCBhY2VfcmVzdWx0XyA9 IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpmc3RhdCAoaGFuZGxlLCBz dHApOyB9IHdoaWxlICgwKTsKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bHN0YXQgKGNvbnN0IGNo YXIgKmZpbGUsIEFDRV9zdGF0ICpzdHApCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiMgNjY4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1 bHRfOyByZXR1cm4gOjpsc3RhdCAoZmlsZSwgc3RwKTsgfSB3aGlsZSAoMCk7CgoKfQoKaW5saW5l IGludApBQ0VfT1M6OmZzeW5jIChBQ0VfSEFORExFIGhhbmRsZSkKewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2Vf cmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpmc3luYyAoaGFuZGxlKTsgfSB3aGlsZSAo MCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6Z2V0b3B0IChpbnQgYXJnYywgY2hhciAqY29uc3Qg KmFyZ3YsIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiMgNzAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj ZV9yZXN1bHRfOyByZXR1cm4gOjpnZXRvcHQgKGFyZ2MsIGFyZ3YsIG9wdHN0cmluZyk7IH0gd2hp bGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnBpcGUgKEFDRV9IQU5ETEUgZmRzW10pCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICBkbyB7IGludCBhY2VfcmVz dWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpwaXBlIChmZHMp OyB9IHdoaWxlICgwKTsKCn0KIyA3NDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5pIgppbmxpbmUgaW50CkFDRV9PUzo6cmFuZF9yIChBQ0VfUkFORFJf VFlQRSAmc2VlZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNzYwICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7 IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4g OjpyYW5kX3IgKCZzZWVkKTsgfSB3aGlsZSAoMCk7CgoKCgoKfQoKaW5saW5lIHBpZF90CkFDRV9P Uzo6c2V0c2lkICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87 IHJldHVybiA6OnNldHNpZCAoKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgbW9kZV90CkFDRV9P Uzo6dW1hc2sgKG1vZGVfdCBjbWFzaykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgoKCgoKICByZXR1cm4gOjp1bWFzayAoY21hc2spOwoKfQojIDkzNiAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09T OjpjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgY2xvY2tpZCwgc3RydWN0IHRpbWVzcGVjICp0cykK ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDk1MSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdo aWxlICgmY2xvY2tpZCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZ0cyA9PSAwKTsKICBkbyB7ICgq X19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9Cgpp bmxpbmUgQUNFX1RpbWVfVmFsdWUKQUNFX09TOjpnZXR0aW1lb2ZkYXkgKHZvaWQpCnsKCgoKICB0 aW1ldmFsIHR2OwogIGludCByZXN1bHQgPSAwOwojIDEwMDIgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgcmVzdWx0ID0gKGludCkgOjpn ZXR0aW1lb2ZkYXkgKCZ0diwgMCk7IH0gd2hpbGUgKDApOwojIDEwMTcgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGlmIChyZXN1bHQgPT0gLTEp CiAgICByZXR1cm4gLTE7CiAgZWxzZQogICAgcmV0dXJuIEFDRV9UaW1lX1ZhbHVlICh0dik7Cgp9 CgppbmxpbmUgaW50CkFDRV9PUzo6c3RhdCAoY29uc3QgQUNFX1RDSEFSICpmaWxlLCBBQ0Vfc3Rh dCAqc3RwKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA3NCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQg YWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6c3Rh dCAoZmlsZSwgc3RwKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgdGltZV90CkFDRV9PUzo6dGlt ZSAodGltZV90ICp0bG9jKQp7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK CgoKCgogIGRvIHsgdGltZV90IGFjZV9yZXN1bHRfID0gKHRpbWVfdCkgLTE7IGFjZV9yZXN1bHRf ID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnRpbWUgKHRsb2MpOyB9IHdoaWxlICgwKTsKCgoKCgoK Cn0KCmlubGluZSB2b2lkCkFDRV9PUzo6c3JhbmQgKHVfaW50IHNlZWQpCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKCiAgOjpzcmFuZCAoc2VlZCk7Cgp9CgppbmxpbmUgaW50 CkFDRV9PUzo6cmFuZCAodm9pZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87 IHJldHVybiA6OnJhbmQgKCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnVu bGluayAoY29uc3QgQUNFX1RDSEFSICpwYXRoKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKIyAxMTQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj ZV9yZXN1bHRfOyByZXR1cm4gOjp1bmxpbmsgKHBhdGgpOyB9IHdoaWxlICgwKTsKCn0KCmlubGlu ZSBpbnQKQUNFX09TOjpyZW5hbWUgKGNvbnN0IEFDRV9UQ0hBUiAqb2xkX25hbWUsCiAgICAgICAg ICAgICAgICBjb25zdCBBQ0VfVENIQVIgKm5ld19uYW1lLAogICAgICAgICAgICAgICAgaW50IGZs YWdzKQp7CiMgMTE4NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmZmxhZ3MgPT0gMCk7CiAgZG8geyBpbnQgYWNlX3Jl c3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6cmVuYW1lIChv bGRfbmFtZSwgbmV3X25hbWUpOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBBQ0VfVENIQVIgKgpB Q0VfT1M6OnRlbXBuYW0gKGNvbnN0IEFDRV9UQ0hBUiAqZGlyLCBjb25zdCBBQ0VfVENIQVIgKnBm eCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDEyMDYgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgY2hhciAq IGFjZV9yZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6dGVt cG5hbSAoZGlyLCBwZngpOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBBQ0VfSEFORExFCkFDRV9P Uzo6c2htX29wZW4gKGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAg IGludCBtb2RlLAogICAgICAgICAgICAgICAgICBpbnQgcGVybXMsCiAgICAgICAgICAgICAgICAg IGludCBzYSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAxMjI1ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICByZXR1 cm4gQUNFX09TOjpvcGVuIChmaWxlbmFtZSwgbW9kZSwgcGVybXMsIHNhKTsKCn0KCmlubGluZSBp bnQKQUNFX09TOjpzaG1fdW5saW5rIChjb25zdCBBQ0VfVENIQVIgKnBhdGgpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICByZXR1cm4gQUNFX09TOjp1bmxp bmsgKHBhdGgpOwoKfQoKCmlubGluZSBjaGFyICoKQUNFX09TOjpjdXNlcmlkIChjaGFyICp1c2Vy LCBzaXplX3QgbWF4bGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMg MTI4MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmki CiAgaWYgKG1heGxlbiA9PSAwKQogICAgewoKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9 IDIyOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgc3RydWN0IHBhc3N3ZCAqcHcgPSAwOwoKCiAg OjpzZXRwd2VudCAoKTsKCgoKCiAgcHcgPSA6OmdldHB3dWlkICg6OmdldGV1aWQgKCkpOwoKCiAg OjplbmRwd2VudCAoKTsKCiAgc2l6ZV90IG1heF9sZW5ndGggPSAwOwogIGNoYXIgKnVzZXJpZCA9 IDA7CgogIGlmICh1c2VyID09IDApCiAgICB7CgoKCgogICAgICBjb25zdCBzaXplX3QgQUNFX0xf Y3VzZXJpZCA9IDk7CgoKCgogICAgICBzdGF0aWMgQUNFX1RDSEFSIHRtcFtBQ0VfTF9jdXNlcmlk XSA9IHsgMCB9OwogICAgICBtYXhfbGVuZ3RoID0gQUNFX0xfY3VzZXJpZCAtIDE7CgogICAgICB1 c2VyaWQgPSB0bXA7CiAgICB9CiAgZWxzZQogICAgewogICAgICBtYXhfbGVuZ3RoID0gbWF4bGVu OwogICAgICB1c2VyaWQgPSB1c2VyOwogICAgfQoKCiAgaWYgKEFDRV9PU19TdHJpbmc6OnN0cmxl biAocHctPnB3X25hbWUpIDw9IG1heF9sZW5ndGgpCiAgICB7CiAgICAgIHJldHVybiBBQ0VfT1Nf U3RyaW5nOjpzdHJjcHkgKHVzZXJpZCwgcHctPnB3X25hbWUpOwogICAgfQogIGVsc2UKICAgIHsK ICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDI4OwogICAgICByZXR1cm4gMDsKICAgIH0K CgoKCgp9CiMgMTM3MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjphdGV4aXQgKEFDRV9FWElUX0hPT0sgZnVuYykK ewogIHJldHVybiBBQ0VfT1NfT2JqZWN0X01hbmFnZXI6Omluc3RhbmNlICgpLT5hdF9leGl0IChm dW5jKTsKfQoKCgppbmxpbmUgdm9pZApBQ0VfT1M6Ol9leGl0IChpbnQgc3RhdHVzKQp7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDEzOTggIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIDo6X2V4aXQgKHN0YXR1cyk7CgoKCgp9 CgppbmxpbmUgdm9pZApBQ0VfT1M6OmFib3J0ICh2b2lkKQp7CgoKCiAgOjphYm9ydCAoKTsKCgoK Cn0KCgppbmxpbmUgaW50CkFDRV9PUzo6dnNwcmludGYgKGNoYXIgKmJ1ZmZlciwgY29uc3QgY2hh ciAqZm9ybWF0LCB2YV9saXN0IGFyZ3B0cikKewoKCgogIHJldHVybiA6OnZzcHJpbnRmIChidWZm ZXIsIGZvcm1hdCwgYXJncHRyKTsKCn0KIyAxNDQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIGxvbmcKQUNFX09TOjpzeXNjb25mIChp bnQgbmFtZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGRv IHsgbG9uZyBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1 cm4gOjpzeXNjb25mIChuYW1lKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6 bXV0ZXhfaW5pdCAoQUNFX211dGV4X3QgKm0sCiAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUs CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAg ICBBQ0VfbXV0ZXhhdHRyX3QgKmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgaW50IHNh KQp7CiMgMTUxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmkiCiAgZG8geyB9IHdoaWxlICgmbmFtZSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZhdHRy aWJ1dGVzID09IDApOwogIGRvIHsgfSB3aGlsZSAoJnNhID09IDApOwoKICBwdGhyZWFkX211dGV4 YXR0cl90IGxfYXR0cmlidXRlczsKICBpZiAoYXR0cmlidXRlcyA9PSAwKQogICAgYXR0cmlidXRl cyA9ICZsX2F0dHJpYnV0ZXM7CiAgaW50IHJlc3VsdCA9IDA7CiAgaW50IGF0dHJfaW5pdCA9IDA7 CgoKCiAgaWYgKGF0dHJpYnV0ZXMgPT0gJmxfYXR0cmlidXRlcykKICAgIHsKCgoKICAgICAgaWYg KCgocmVzdWx0ID0gKDo6cHRocmVhZF9tdXRleGF0dHJfaW5pdCAoYXR0cmlidXRlcykpKSAhPSAw ID8gKCgqX19lcnJub19sb2NhdGlvbiAoKSkgPSByZXN1bHQsIC0xKSA6IDApID09IDApCgoKCiAg ICAgICAgewogICAgICAgICAgcmVzdWx0ID0gMDsKICAgICAgICAgIGF0dHJfaW5pdCA9IDE7CiAg ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgcmVzdWx0ID0gLTE7CiAgICB9CgogIGlmIChyZXN1 bHQgPT0gMCkKICAgIHsKCgoKCgoKCiAgICAgIGlmICgKCgoKCiAgICAgICAgICAgKChyZXN1bHQg PSAoOjpwdGhyZWFkX211dGV4X2luaXQgKG0sIGF0dHJpYnV0ZXMpKSkgIT0gMCA/ICgoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gcmVzdWx0LCAtMSkgOiAwKSA9PSAwKQojIDE1NjUgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAgICAgIHJlc3Vs dCA9IDA7CiAgICAgIGVsc2UKICAgICAgICByZXN1bHQgPSAtMTsKICAgIH0KCgoKICBkbyB7IH0g d2hpbGUgKCZ0eXBlID09IDApOwoKCgoKICBpZiAoYXR0cmlidXRlcyA9PSAmbF9hdHRyaWJ1dGVz ICYmIGF0dHJfaW5pdCkKCgoKICAgIDo6cHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAoJmxfYXR0 cmlidXRlcyk7CgoKICByZXR1cm4gcmVzdWx0OwojIDE2OTYgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CiMgMTczNyAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpt dXRleF9kZXN0cm95IChBQ0VfbXV0ZXhfdCAqbSkKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwojIDE3NTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1 bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiAoKGFjZV9yZXN1bHRfID0gKDo6cHRocmVhZF9tdXRl eF9kZXN0cm95IChtKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IGFjZV9yZXN1 bHRfLCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgMTc4NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjptdXRl eF9sb2NrIChBQ0VfbXV0ZXhfdCAqbSkKewojIDE4MDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7 IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiAoKGFjZV9yZXN1bHRfID0gKHB0aHJl YWRfbXV0ZXhfbG9jayAobSkpKSAhPSAwID8gKCgqX19lcnJub19sb2NhdGlvbiAoKSkgPSBhY2Vf cmVzdWx0XywgLTEpIDogMCk7IH0gd2hpbGUgKDApOwojIDE4NDggIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6 bXV0ZXhfbG9jayAoQUNFX211dGV4X3QgKm0sCiAgICAgICAgICAgICAgICAgICAgaW50ICZhYmFu ZG9uZWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAxODgzICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7 IH0gd2hpbGUgKCZtID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmFiYW5kb25lZCA9PSAwKTsKICBk byB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7 Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bXV0ZXhfdHJ5bG9jayAoQUNFX211dGV4X3QgKm0pCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAxOTEwICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBh Y2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gKChhY2Vf cmVzdWx0XyA9IChwdGhyZWFkX211dGV4X3RyeWxvY2sgKG0pKSkgIT0gMCA/ICgoKl9fZXJybm9f bG9jYXRpb24gKCkpID0gYWNlX3Jlc3VsdF8sIC0xKSA6IDApOyB9IHdoaWxlICgwKTsKIyAxOTgx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoK aW5saW5lIGludApBQ0VfT1M6Om11dGV4X3RyeWxvY2sgKEFDRV9tdXRleF90ICptLCBpbnQgJmFi YW5kb25lZCkKewojIDIwMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5pIgogIGRvIHsgfSB3aGlsZSAoJm0gPT0gMCk7CiAgZG8geyB9IHdoaWxlICgm YWJhbmRvbmVkID09IDApOwogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0 dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TOjptdXRleF9sb2NrIChB Q0VfbXV0ZXhfdCAqbSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAm dGltZW91dCkKewoKCgogIGludCByZXN1bHQ7CgoKCiAgdGltZXNwZWNfdCB0cyA9IHRpbWVvdXQ7 CgoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3Vs dF87IHJldHVybiAoKHJlc3VsdCA9ICg6OnB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChtLCAmdHMp KSkgIT0gMCA/ICgoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gcmVzdWx0LCAtMSkgOiAwKTsgfSB3 aGlsZSAoMCk7CiMgMjExOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjptdXRleF91bmxvY2sgKEFDRV9tdXRl eF90ICptKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAyMTM0 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBk byB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1 cm4gKChhY2VfcmVzdWx0XyA9IChwdGhyZWFkX211dGV4X3VubG9jayAobSkpKSAhPSAwID8gKCgq X19lcnJub19sb2NhdGlvbiAoKSkgPSBhY2VfcmVzdWx0XywgLTEpIDogMCk7IH0gd2hpbGUgKDAp OwojIDIxNjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P Uy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dGhyZWFkX211dGV4X2luaXQgKEFDRV90aHJlYWRf bXV0ZXhfdCAqbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFDRV9tdXRleGF0dHJfdCAqYXJnKQp7CiMgMjE4NiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmdHlwZSA9 PSAwKTsKCiAgcmV0dXJuIEFDRV9PUzo6bXV0ZXhfaW5pdCAobSwgUFRIUkVBRF9QUk9DRVNTX1BS SVZBVEUsIG5hbWUsIGFyZyk7CiMgMjIwMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KIyAyMjQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIGludApBQ0VfT1M6OnRocmVhZF9tdXRl eF9kZXN0cm95IChBQ0VfdGhyZWFkX211dGV4X3QgKm0pCnsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgcmV0dXJuIEFDRV9PUzo6bXV0ZXhf ZGVzdHJveSAobSk7CiMgMjI2NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjp0aHJlYWRfbXV0ZXhfbG9jayAo QUNFX3RocmVhZF9tdXRleF90ICptKQp7CgoKCgoKCiAgcmV0dXJuIEFDRV9PUzo6bXV0ZXhfbG9j ayAobSk7CgoKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dGhyZWFkX211dGV4X2xvY2sgKEFD RV90aHJlYWRfbXV0ZXhfdCAqbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF X1RpbWVfVmFsdWUgJnRpbWVvdXQpCnsKIyAyMzAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICByZXR1cm4gQUNFX09TOjptdXRleF9sb2NrICht LCB0aW1lb3V0KTsKIyAyMzEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnRocmVhZF9tdXRleF90cnlsb2Nr IChBQ0VfdGhyZWFkX211dGV4X3QgKm0pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiMgMjMzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgcmV0dXJuIEFDRV9PUzo6bXV0ZXhfdHJ5bG9jayAobSk7 CiMgMjM0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T LmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjp0aHJlYWRfbXV0ZXhfdW5sb2NrIChBQ0VfdGhyZWFk X211dGV4X3QgKm0pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCgoKCgogIHJldHVybiBBQ0VfT1M6Om11dGV4X3VubG9jayAobSk7CgoKCgoKCgp9CgoK CgoKCgppbmxpbmUgaW50CkFDRV9PUzo6Y29uZF9kZXN0cm95IChBQ0VfY29uZF90ICpjdikKewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMjM4MSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNl X3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuICgoYWNlX3Jl c3VsdF8gPSAoOjpwdGhyZWFkX2NvbmRfZGVzdHJveSAoY3YpKSkgIT0gMCA/ICgoKl9fZXJybm9f bG9jYXRpb24gKCkpID0gYWNlX3Jlc3VsdF8sIC0xKSA6IDApOyB9IHdoaWxlICgwKTsKIyAyMzkz ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoK aW5saW5lIGludApBQ0VfT1M6OmNvbmRhdHRyX2luaXQgKEFDRV9jb25kYXR0cl90ICZhdHRyaWJ1 dGVzLAogICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlKQp7CiAgZG8geyB9IHdoaWxlICgm dHlwZSA9PSAwKTsKIyAyNDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvT1MuaSIKICBpbnQgcmVzdWx0ID0gLTE7CgogIGlmICgKCgoKICAgICAgKChyZXN1 bHQgPSAoOjpwdGhyZWFkX2NvbmRhdHRyX2luaXQgKCZhdHRyaWJ1dGVzKSkpICE9IDAgPyAoKCpf X2Vycm5vX2xvY2F0aW9uICgpKSA9IHJlc3VsdCwgLTEpIDogMCkgPT0gMAojIDI0MzYgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAgICApCiAg ICAgcmVzdWx0ID0gMDsKICBlbHNlCiAgICAgcmVzdWx0ID0gLTE7CgogIHJldHVybiByZXN1bHQ7 CiMgMjQ3MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T LmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjpjb25kYXR0cl9kZXN0cm95IChBQ0VfY29uZGF0dHJf dCAmYXR0cmlidXRlcykKewojIDI0ODUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5pIgogIDo6cHRocmVhZF9jb25kYXR0cl9kZXN0cm95ICgmYXR0cmli dXRlcyk7CiMgMjQ5NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09TLmkiCiAgcmV0dXJuIDA7CgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6Y29uZF9pbml0 IChBQ0VfY29uZF90ICpjdiwKICAgICAgICAgICAgICAgICAgIEFDRV9jb25kYXR0cl90ICZhdHRy aWJ1dGVzLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAg ICAgICAgIHZvaWQgKmFyZykKewoKICBkbyB7IH0gd2hpbGUgKCZuYW1lID09IDApOwogIGRvIHsg fSB3aGlsZSAoJmFyZyA9PSAwKTsKCgoKCgogIGludCByZXN1bHQgPSAtMTsKCiAgaWYgKAoKCgog ICAgICAoKHJlc3VsdCA9ICg6OnB0aHJlYWRfY29uZF9pbml0IChjdiwgJmF0dHJpYnV0ZXMpKSkg IT0gMCA/ICgoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gcmVzdWx0LCAtMSkgOiAwKSA9PSAwCgoK CiAgICAgICkKICAgICByZXN1bHQgPSAwOwogIGVsc2UKICAgICByZXN1bHQgPSAtMTsKCiAgcmV0 dXJuIHJlc3VsdDsKIyAyNTUyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvT1MuaSIKfQojIDI1NjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5pIgppbmxpbmUgaW50CkFDRV9PUzo6Y29uZF9pbml0IChBQ0VfY29u ZF90ICpjdiwgc2hvcnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYXJnKQp7CiAgQUNF X2NvbmRhdHRyX3QgYXR0cmlidXRlczsKICBpZiAoQUNFX09TOjpjb25kYXR0cl9pbml0IChhdHRy aWJ1dGVzLCB0eXBlKSA9PSAwCiAgICAgICYmIEFDRV9PUzo6Y29uZF9pbml0IChjdiwgYXR0cmli dXRlcywgbmFtZSwgYXJnKSA9PSAwKQogICAgewogICAgICAodm9pZCkgQUNFX09TOjpjb25kYXR0 cl9kZXN0cm95IChhdHRyaWJ1dGVzKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgcmV0dXJuIC0x Owp9CiMgMjU4NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpjb25kX3NpZ25hbCAoQUNFX2NvbmRfdCAqY3YpCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCgogIGRvIHsgaW50 IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiAoKGFj ZV9yZXN1bHRfID0gKDo6cHRocmVhZF9jb25kX3NpZ25hbCAoY3YpKSkgIT0gMCA/ICgoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gYWNlX3Jlc3VsdF8sIC0xKSA6IDApOyB9IHdoaWxlICgwKTsKIyAy NjEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIK fQoKaW5saW5lIGludApBQ0VfT1M6OmNvbmRfYnJvYWRjYXN0IChBQ0VfY29uZF90ICpjdikKewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKCiAgZG8geyBp bnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuICgo YWNlX3Jlc3VsdF8gPSAoOjpwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChjdikpKSAhPSAwID8gKCgq X19lcnJub19sb2NhdGlvbiAoKSkgPSBhY2VfcmVzdWx0XywgLTEpIDogMCk7IH0gd2hpbGUgKDAp OwojIDI2MzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P Uy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6Y29uZF93YWl0IChBQ0VfY29uZF90ICpjdiwKICAg ICAgICAgICAgICAgICAgIEFDRV9tdXRleF90ICpleHRlcm5hbF9tdXRleCkKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRf ID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiAoKGFjZV9yZXN1bHRfID0g KDo6cHRocmVhZF9jb25kX3dhaXQgKGN2LCBleHRlcm5hbF9tdXRleCkpKSAhPSAwID8gKCgqX19l cnJub19sb2NhdGlvbiAoKSkgPSBhY2VfcmVzdWx0XywgLTEpIDogMCk7IH0gd2hpbGUgKDApOwoj IDI2NjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5p Igp9CgppbmxpbmUgaW50CkFDRV9PUzo6Y29uZF90aW1lZHdhaXQgKEFDRV9jb25kX3QgKmN2LAog ICAgICAgICAgICAgICAgICAgICAgICBBQ0VfbXV0ZXhfdCAqZXh0ZXJuYWxfbXV0ZXgsCiAgICAg ICAgICAgICAgICAgICAgICAgIEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0KQp7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDI3MDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGludCByZXN1bHQ7CiAgdGltZXNw ZWNfdCB0czsKCiAgaWYgKHRpbWVvdXQgIT0gMCkKICAgIHRzID0gKnRpbWVvdXQ7CiMgMjczNSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8g eyByZXN1bHQgPSAoaW50KSAoKHJlc3VsdCA9ICh0aW1lb3V0ID09IDAgPyA6OnB0aHJlYWRfY29u ZF93YWl0IChjdiwgZXh0ZXJuYWxfbXV0ZXgpIDogOjpwdGhyZWFkX2NvbmRfdGltZWR3YWl0IChj diwgZXh0ZXJuYWxfbXV0ZXgsIChBQ0VfVElNRVNQRUNfUFRSKSAmdHMpKSkgIT0gMCA/ICgoKl9f ZXJybm9fbG9jYXRpb24gKCkpID0gcmVzdWx0LCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgMjc0 NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAg aWYgKHJlc3VsdCA9PSAtMSAmJgogICAgICAoKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAxMTAg fHwgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAxMSB8fCAoKl9fZXJybm9fbG9jYXRpb24gKCkp ID09IDQpKQogICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDYyOwojIDI3OTEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGlmICh0aW1lb3V0 ICE9IDApCiAgICB0aW1lb3V0LT5zZXQgKHRzKTsKCiAgcmV0dXJuIHJlc3VsdDsKCgoKCgoKfQoK CmlubGluZSBpbnQKQUNFX09TOjp0aHJfZXF1YWwgKEFDRV90aHJlYWRfdCB0MSwgQUNFX3RocmVh ZF90IHQyKQp7CgoKCgoKCgogIHJldHVybiA6OnB0aHJlYWRfZXF1YWwgKHQxLCB0Mik7CiMgMjgy MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0K CmlubGluZSB2b2lkCkFDRV9PUzo6dGhyX3NlbGYgKEFDRV9odGhyZWFkX3QgJnNlbGYpCnsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKICBzZWxmID0gcHRocmVhZF9z ZWxmICgpOwojIDI4NDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9PUy5pIgp9CgppbmxpbmUgQUNFX3RocmVhZF90CkFDRV9PUzo6dGhyX3NlbGYgKHZvaWQp CnsKCgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9y ZXN1bHRfOyByZXR1cm4gcHRocmVhZF9zZWxmICgpOyB9IHdoaWxlICgwKTsKIyAyODc1ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5l IGludApBQ0VfT1M6OnJlY3Vyc2l2ZV9tdXRleF9pbml0IChBQ0VfcmVjdXJzaXZlX3RocmVhZF9t dXRleF90ICptLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIg Km5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9tdXRleGF0dHJfdCAqYXJn LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2EpCnsKICBkbyB7IH0gd2hpbGUg KCZzYSA9PSAwKTsKCgoKCiAgaWYgKEFDRV9PUzo6dGhyZWFkX211dGV4X2luaXQgKCZtLT5uZXN0 aW5nX211dGV4XywgMCwgbmFtZSwgYXJnKSA9PSAtMSkKICAgIHJldHVybiAtMTsKICBlbHNlIGlm IChBQ0VfT1M6OmNvbmRfaW5pdCAoJm0tPmxvY2tfYXZhaWxhYmxlXywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHNob3J0KSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MCkgPT0gLTEpCiAgICByZXR1cm4gLTE7CiAgZWxzZQogICAgewogICAgICBtLT5uZXN0aW5nX2xl dmVsXyA9IDA7CiAgICAgIG0tPm93bmVyX2lkXyA9IEFDRV9PUzo6TlVMTF90aHJlYWQ7CiAgICAg IHJldHVybiAwOwogICAgfQoKCgoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OnJlY3Vyc2l2ZV9t dXRleF9kZXN0cm95IChBQ0VfcmVjdXJzaXZlX3RocmVhZF9tdXRleF90ICptKQp7CgoKCgogIGlm IChBQ0VfT1M6OnRocmVhZF9tdXRleF9kZXN0cm95ICgmbS0+bmVzdGluZ19tdXRleF8pID09IC0x KQogICAgcmV0dXJuIC0xOwogIGVsc2UgaWYgKEFDRV9PUzo6Y29uZF9kZXN0cm95ICgmbS0+bG9j a19hdmFpbGFibGVfKSA9PSAtMSkKICAgIHJldHVybiAtMTsKICBlbHNlCiAgICByZXR1cm4gMDsK CgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6cmVjdXJzaXZlX211dGV4X2xvY2sgKEFDRV9yZWN1 cnNpdmVfdGhyZWFkX211dGV4X3QgKm0pCnsKCgoKCiAgQUNFX3RocmVhZF90IHRfaWQgPSBBQ0Vf T1M6OnRocl9zZWxmICgpOwogIGludCByZXN1bHQgPSAwOwoKCiAgaWYgKEFDRV9PUzo6dGhyZWFk X211dGV4X2xvY2sgKCZtLT5uZXN0aW5nX211dGV4XykgPT0gLTEpCiAgICByZXN1bHQgPSAtMTsK ICBlbHNlCiAgICB7CgoKICAgICAgaWYgKG0tPm5lc3RpbmdfbGV2ZWxfID09IDApCiAgICAgICAg bS0+b3duZXJfaWRfID0gdF9pZDsKCgogICAgICBlbHNlIGlmIChBQ0VfT1M6OnRocl9lcXVhbCAo dF9pZCwgbS0+b3duZXJfaWRfKSA9PSAwKQogICAgICAgIHsKCgogICAgICAgICAgd2hpbGUgKG0t Pm5lc3RpbmdfbGV2ZWxfID4gMCkKICAgICAgICAgICAgQUNFX09TOjpjb25kX3dhaXQgKCZtLT5s b2NrX2F2YWlsYWJsZV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbS0+bmVzdGlu Z19tdXRleF8pOwoKCiAgICAgICAgICAgICAgbS0+b3duZXJfaWRfID0gdF9pZDsKICAgICAgICB9 CgoKCiAgICAgIG0tPm5lc3RpbmdfbGV2ZWxfKys7CiAgICB9CgogIHsKCiAgICBBQ0VfRXJybm9f R3VhcmQgZXJyb3IgKCgqX19lcnJub19sb2NhdGlvbiAoKSkpOwogICAgQUNFX09TOjp0aHJlYWRf bXV0ZXhfdW5sb2NrICgmbS0+bmVzdGluZ19tdXRleF8pOwogIH0KICByZXR1cm4gcmVzdWx0OwoK CgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpyZWN1cnNpdmVfbXV0ZXhfdHJ5bG9jayAoQUNFX3Jl Y3Vyc2l2ZV90aHJlYWRfbXV0ZXhfdCAqbSkKewoKCgoKICBBQ0VfdGhyZWFkX3QgdF9pZCA9IEFD RV9PUzo6dGhyX3NlbGYgKCk7CiAgaW50IHJlc3VsdCA9IDA7CgoKICBpZiAoQUNFX09TOjp0aHJl YWRfbXV0ZXhfbG9jayAoJm0tPm5lc3RpbmdfbXV0ZXhfKSA9PSAtMSkKICAgIHJlc3VsdCA9IC0x OwogIGVsc2UKICAgIHsKCiAgICAgIGlmIChtLT5uZXN0aW5nX2xldmVsXyA9PSAwKQogICAgICAg IHsKICAgICAgICAgIG0tPm93bmVyX2lkXyA9IHRfaWQ7CiAgICAgICAgICBtLT5uZXN0aW5nX2xl dmVsXyA9IDE7CiAgICAgICAgfQoKCiAgICAgIGVsc2UgaWYgKEFDRV9PUzo6dGhyX2VxdWFsICh0 X2lkLCBtLT5vd25lcl9pZF8pKQogICAgICAgIG0tPm5lc3RpbmdfbGV2ZWxfKys7CiAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTY7CiAgICAg ICAgICByZXN1bHQgPSAtMTsKICAgICAgICB9CiAgICB9CgogIHsKCiAgICBBQ0VfRXJybm9fR3Vh cmQgZXJyb3IgKCgqX19lcnJub19sb2NhdGlvbiAoKSkpOwogICAgQUNFX09TOjp0aHJlYWRfbXV0 ZXhfdW5sb2NrICgmbS0+bmVzdGluZ19tdXRleF8pOwogIH0KICByZXR1cm4gcmVzdWx0OwoKCgoK Cn0KCmlubGluZSBpbnQKQUNFX09TOjpyZWN1cnNpdmVfbXV0ZXhfdW5sb2NrIChBQ0VfcmVjdXJz aXZlX3RocmVhZF9tdXRleF90ICptKQp7CgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICBBQ0VfdGhyZWFkX3QgdF9pZCA9IEFDRV9PUzo6dGhy X3NlbGYgKCk7CgogIGludCByZXN1bHQgPSAwOwoKICBpZiAoQUNFX09TOjp0aHJlYWRfbXV0ZXhf bG9jayAoJm0tPm5lc3RpbmdfbXV0ZXhfKSA9PSAtMSkKICAgIHJlc3VsdCA9IC0xOwogIGVsc2UK ICAgIHsKCiAgICAgIGlmIChtLT5uZXN0aW5nX2xldmVsXyA9PSAwCiAgICAgICAgICB8fCBBQ0Vf T1M6OnRocl9lcXVhbCAodF9pZCwgbS0+b3duZXJfaWRfKSA9PSAwKQogICAgICAgIHsKICAgICAg ICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAyMjsKICAgICAgICAgIHJlc3VsdCA9IC0xOwog ICAgICAgIH0KICAgICAgZWxzZQoKICAgICAgICB7CiAgICAgICAgICBtLT5uZXN0aW5nX2xldmVs Xy0tOwogICAgICAgICAgaWYgKG0tPm5lc3RpbmdfbGV2ZWxfID09IDApCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIG0tPm93bmVyX2lkXyA9IEFDRV9PUzo6TlVMTF90aHJlYWQ7CgoKICAg ICAgICAgICAgICBpZiAoQUNFX09TOjpjb25kX3NpZ25hbCAoJm0tPmxvY2tfYXZhaWxhYmxlXykg PT0gLTEpCiAgICAgICAgICAgICAgICByZXN1bHQgPSAtMTsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgIH0KCiAgewoKICAgIEFDRV9FcnJub19HdWFyZCBlcnJvciAoKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSk7CiAgICBBQ0VfT1M6OnRocmVhZF9tdXRleF91bmxvY2sgKCZtLT5uZXN0aW5nX211 dGV4Xyk7CiAgfQogIHJldHVybiByZXN1bHQ7CgoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNl bWFfZGVzdHJveSAoQUNFX3NlbWFfdCAqcykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiMgMzEzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL09TLmkiCiAgaW50IHIxID0gQUNFX09TOjptdXRleF9kZXN0cm95ICgmcy0+bG9j a18pOwogIGludCByMiA9IEFDRV9PUzo6Y29uZF9kZXN0cm95ICgmcy0+Y291bnRfbm9uemVyb18p OwogIHJldHVybiByMSAhPSAwIHx8IHIyICE9IDAgPyAtMSA6IDA7CiMgMzE2MCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCgoKCmlubGluZSBp bnQKQUNFX09TOjpjbG9zZSAoQUNFX0hBTkRMRSBoYW5kbGUpCnsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiMgMzE4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3Vs dF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Y2xvc2UgKGhhbmRsZSk7IH0gd2hpbGUgKDApOwoK fQoKCgoKaW5saW5lIGxvbmcKQUNFX09TOjpmaWxlc2l6ZSAoQUNFX0hBTkRMRSBoYW5kbGUpCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgc3RydWN0IHN0YXQgc2I7 CiAgcmV0dXJuIEFDRV9PUzo6ZnN0YXQgKGhhbmRsZSwgJnNiKSA9PSAtMSA/IC0xIDogKGxvbmcp IHNiLnN0X3NpemU7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6ZnRydW5jYXRlIChBQ0VfSEFORExF IGhhbmRsZSwgb2ZmX3Qgb2Zmc2V0KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKIyAzMjIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9y ZXN1bHRfOyByZXR1cm4gOjpmdHJ1bmNhdGUgKGhhbmRsZSwgb2Zmc2V0KTsgfSB3aGlsZSAoMCk7 Cgp9CgppbmxpbmUgdm9pZCAqCkFDRV9PUzo6bW1hcCAodm9pZCAqYWRkciwKICAgICAgICAgICAg ICBzaXplX3QgbGVuLAogICAgICAgICAgICAgIGludCBwcm90LAogICAgICAgICAgICAgIGludCBm bGFncywKICAgICAgICAgICAgICBBQ0VfSEFORExFIGZpbGVfaGFuZGxlLAogICAgICAgICAgICAg IG9mZl90IG9mZiwKICAgICAgICAgICAgICBBQ0VfSEFORExFICpmaWxlX21hcHBpbmcsCiAgICAg ICAgICAgICAgaW50IHNhLAogICAgICAgICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAqZmlsZV9tYXBw aW5nX25hbWUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZG8geyB9IHdo aWxlICgmZmlsZV9tYXBwaW5nX25hbWUgPT0gMCk7CiMgMzM5MCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmc2EgPT0g MCk7CgoKCgogIGRvIHsgfSB3aGlsZSAoJmZpbGVfbWFwcGluZyA9PSAwKTsKICBkbyB7IHZvaWQg KiBhY2VfcmVzdWx0XyA9ICgodm9pZCAqKSAtMSk7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87 IHJldHVybiAodm9pZCAqKSA6Om1tYXAgKChBQ0VfTU1BUF9UWVBFKSBhZGRyLCBsZW4sIHByb3Qs IGZsYWdzLCBmaWxlX2hhbmRsZSwgb2ZmKTsgfSB3aGlsZSAoMCk7CiMgMzQxNCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCgoKCmlubGluZSBp bnQKQUNFX09TOjpzZW1hX2luaXQgKEFDRV9zZW1hX3QgKnMsCiAgICAgICAgICAgICAgICAgICB1 X2ludCBjb3VudCwKICAgICAgICAgICAgICAgICAgIGludCB0eXBlLAogICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZywKICAgICAg ICAgICAgICAgICAgIGludCBtYXgsCiAgICAgICAgICAgICAgICAgICBpbnQgc2EpCnsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDM1NTEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgfSB3aGlsZSAoJm1heCA9 PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZzYSA9PSAwKTsKICBpbnQgcmVzdWx0ID0gLTE7CgogIGlm IChBQ0VfT1M6Om11dGV4X2luaXQgKCZzLT5sb2NrXywgdHlwZSwgbmFtZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAoQUNFX211dGV4YXR0cl90ICopIGFyZykgPT0gMAogICAgICAmJiBBQ0Vf T1M6OmNvbmRfaW5pdCAoJnMtPmNvdW50X25vbnplcm9fLCB0eXBlLCBuYW1lLCBhcmcpID09IDAK ICAgICAgJiYgQUNFX09TOjptdXRleF9sb2NrICgmcy0+bG9ja18pID09IDApCiAgICB7CiAgICAg IHMtPmNvdW50XyA9IGNvdW50OwogICAgICBzLT53YWl0ZXJzXyA9IDA7CgogICAgICBpZiAoQUNF X09TOjptdXRleF91bmxvY2sgKCZzLT5sb2NrXykgPT0gMCkKICAgICAgICByZXN1bHQgPSAwOwog ICAgfQoKICBpZiAocmVzdWx0ID09IC0xKQogICAgewogICAgICBBQ0VfT1M6Om11dGV4X2Rlc3Ry b3kgKCZzLT5sb2NrXyk7CiAgICAgIEFDRV9PUzo6Y29uZF9kZXN0cm95ICgmcy0+Y291bnRfbm9u emVyb18pOwogICAgfQogIHJldHVybiByZXN1bHQ7CiMgMzY1MiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KIyAzNzIyICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIGludApBQ0VfT1M6 OnNlbWFfcG9zdCAoQUNFX3NlbWFfdCAqcykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiMgMzczNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TLmkiCiAgaW50IHJlc3VsdCA9IC0xOwoKICBpZiAoQUNFX09TOjptdXRleF9sb2Nr ICgmcy0+bG9ja18pID09IDApCiAgICB7CgogICAgICBpZiAocy0+d2FpdGVyc18gPiAwKQogICAg ICAgIHJlc3VsdCA9IEFDRV9PUzo6Y29uZF9zaWduYWwgKCZzLT5jb3VudF9ub256ZXJvXyk7CiAg ICAgIGVsc2UKICAgICAgICByZXN1bHQgPSAwOwoKICAgICAgcy0+Y291bnRfKys7CiAgICAgIEFD RV9PUzo6bXV0ZXhfdW5sb2NrICgmcy0+bG9ja18pOwogICAgfQogIHJldHVybiByZXN1bHQ7CiMg Mzc4MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmki Cn0KCmlubGluZSBpbnQKQUNFX09TOjpzZW1hX3Bvc3QgKEFDRV9zZW1hX3QgKnMsIHNpemVfdCBy ZWxlYXNlX2NvdW50KQp7CiMgMzgwNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09TLmkiCiAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxlYXNlX2NvdW50 OyBpKyspCiAgICBpZiAoQUNFX09TOjpzZW1hX3Bvc3QgKHMpID09IC0xKQogICAgICByZXR1cm4g LTE7CgogIHJldHVybiAwOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNlbWFfdHJ5d2FpdCAoQUNF X3NlbWFfdCAqcykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMg MzgzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmki CiAgaW50IHJlc3VsdCA9IC0xOwoKICBpZiAoQUNFX09TOjptdXRleF9sb2NrICgmcy0+bG9ja18p ID09IDApCiAgICB7CiAgICAgIGlmIChzLT5jb3VudF8gPiAwKQogICAgICAgIHsKICAgICAgICAg IC0tcy0+Y291bnRfOwogICAgICAgICAgcmVzdWx0ID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UK ICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTY7CgogICAgICBBQ0VfT1M6Om11dGV4 X3VubG9jayAoJnMtPmxvY2tfKTsKICAgIH0KICByZXR1cm4gcmVzdWx0OwojIDM5MjYgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUg aW50CkFDRV9PUzo6c2VtYV93YWl0IChBQ0Vfc2VtYV90ICpzKQp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKIyAzOTQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBpbnQgcmVzdWx0ID0gMDsKCiAgeyBzdHJ1Y3QgX3B0 aHJlYWRfY2xlYW51cF9idWZmZXIgX2J1ZmZlcjsgX3B0aHJlYWRfY2xlYW51cF9wdXNoICgmX2J1 ZmZlciwgKGFjZV9tdXRleF9sb2NrX2NsZWFudXBfYWRhcHRlciksICgodm9pZCAqKSAmcy0+bG9j a18pKTs7OwoKICBpZiAoQUNFX09TOjptdXRleF9sb2NrICgmcy0+bG9ja18pICE9IDApCiAgICBy ZXN1bHQgPSAtMTsKICBlbHNlCiAgICB7CgoKICAgICAgcy0+d2FpdGVyc18rKzsKCgogICAgICB3 aGlsZSAocy0+Y291bnRfID09IDApCiAgICAgICAgaWYgKEFDRV9PUzo6Y29uZF93YWl0ICgmcy0+ Y291bnRfbm9uemVyb18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+bG9ja18p ID09IC0xKQogICAgICAgICAgewogICAgICAgICAgICByZXN1bHQgPSAtMjsKICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICB9CgogICAgICAtLXMtPndhaXRlcnNfOwogICAgfQoKICBpZiAocmVz dWx0ID09IDApCiAgICAtLXMtPmNvdW50XzsKCiAgaWYgKHJlc3VsdCAhPSAtMSkKICAgIEFDRV9P Uzo6bXV0ZXhfdW5sb2NrICgmcy0+bG9ja18pOwogIF9wdGhyZWFkX2NsZWFudXBfcG9wICgmX2J1 ZmZlciwgKDApKTsgfTsKICByZXR1cm4gcmVzdWx0IDwgMCA/IC0xIDogcmVzdWx0OwojIDQwMzYg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9Cgpp bmxpbmUgaW50CkFDRV9PUzo6c2VtYV93YWl0IChBQ0Vfc2VtYV90ICpzLCBBQ0VfVGltZV9WYWx1 ZSAmdHYpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDQwNTIgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGludCBy ZXN1bHQgPSAwOwogIEFDRV9FcnJub19HdWFyZCBlcnJvciAoKCpfX2Vycm5vX2xvY2F0aW9uICgp KSk7CgogIHsgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyIF9idWZmZXI7IF9wdGhyZWFk X2NsZWFudXBfcHVzaCAoJl9idWZmZXIsIChhY2VfbXV0ZXhfbG9ja19jbGVhbnVwX2FkYXB0ZXIp LCAoKHZvaWQgKikgJnMtPmxvY2tfKSk7OzsKCiAgaWYgKEFDRV9PUzo6bXV0ZXhfbG9jayAoJnMt PmxvY2tfKSAhPSAwKQogICAgcmVzdWx0ID0gLTE7CiAgZWxzZQogICAgewoKCiAgICAgIHMtPndh aXRlcnNfKys7CgoKICAgICAgd2hpbGUgKHMtPmNvdW50XyA9PSAwKQogICAgICAgIGlmIChBQ0Vf T1M6OmNvbmRfdGltZWR3YWl0ICgmcy0+Y291bnRfbm9uemVyb18sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZzLT5sb2NrXywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnR2KSA9PSAtMSkKICAgICAgICAgIHsKICAgICAgICAgICAgZXJyb3IgPSAoKl9f ZXJybm9fbG9jYXRpb24gKCkpOwogICAgICAgICAgICByZXN1bHQgPSAtMjsKICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICB9CgogICAgICAtLXMtPndhaXRlcnNfOwogICAgfQoKICBpZiAocmVz dWx0ID09IDApCiAgICB7CgoKCiAgICAgIC0tcy0+Y291bnRfOwogICAgfQoKICBpZiAocmVzdWx0 ICE9IC0xKQogICAgQUNFX09TOjptdXRleF91bmxvY2sgKCZzLT5sb2NrXyk7CiAgX3B0aHJlYWRf Y2xlYW51cF9wb3AgKCZfYnVmZmVyLCAoMCkpOyB9OwogIHJldHVybiByZXN1bHQgPCAwID8gLTEg OiByZXN1bHQ7CiMgNDIzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjpyd190cnlyZGxvY2sgKEFDRV9yd2xv Y2tfdCAqcncpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDQy NDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgog IGludCByZXN1bHQgPSAtMTsKCiAgaWYgKEFDRV9PUzo6bXV0ZXhfbG9jayAoJnJ3LT5sb2NrXykg IT0gLTEpCiAgICB7CiAgICAgIEFDRV9FcnJub19HdWFyZCBlcnJvciAoKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSk7CgogICAgICBpZiAocnctPnJlZl9jb3VudF8gPT0gLTEgfHwgcnctPm51bV93YWl0 aW5nX3dyaXRlcnNfID4gMCkKICAgICAgICB7CiAgICAgICAgICBlcnJvciA9IDE2OwogICAgICAg ICAgcmVzdWx0ID0gLTE7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg cnctPnJlZl9jb3VudF8rKzsKICAgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgICAgfQoKICAgICAg QUNFX09TOjptdXRleF91bmxvY2sgKCZydy0+bG9ja18pOwogICAgfQogIHJldHVybiByZXN1bHQ7 CgoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OnJ3X3RyeXdybG9jayAoQUNFX3J3bG9ja190ICpy dykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNDI5MCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgaW50IHJl c3VsdCA9IC0xOwoKICBpZiAoQUNFX09TOjptdXRleF9sb2NrICgmcnctPmxvY2tfKSAhPSAtMSkK ICAgIHsKICAgICAgQUNFX0Vycm5vX0d1YXJkIGVycm9yICgoKl9fZXJybm9fbG9jYXRpb24gKCkp KTsKCiAgICAgIGlmIChydy0+cmVmX2NvdW50XyAhPSAwKQogICAgICAgIHsKICAgICAgICAgIGVy cm9yID0gMTY7CiAgICAgICAgICByZXN1bHQgPSAtMTsKICAgICAgICB9CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICBydy0+cmVmX2NvdW50XyA9IC0xOwogICAgICAgICAgcmVzdWx0ID0g MDsKICAgICAgICB9CgogICAgICBBQ0VfT1M6Om11dGV4X3VubG9jayAoJnJ3LT5sb2NrXyk7CiAg ICB9CiAgcmV0dXJuIHJlc3VsdDsKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6cndfcmRsb2Nr IChBQ0Vfcndsb2NrX3QgKnJ3KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKIyA0MzMyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1MuaSIKICB7IHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciBfYnVmZmVyOyBfcHRocmVh ZF9jbGVhbnVwX3B1c2ggKCZfYnVmZmVyLCAoYWNlX211dGV4X2xvY2tfY2xlYW51cF9hZGFwdGVy KSwgKCh2b2lkICopICZydy0+bG9ja18pKTs7OwoKICBpbnQgcmVzdWx0ID0gMDsKICBpZiAoQUNF X09TOjptdXRleF9sb2NrICgmcnctPmxvY2tfKSA9PSAtMSkKICAgIHJlc3VsdCA9IC0xOwogIGVs c2UKICAgIHsKCiAgICAgIHdoaWxlIChydy0+cmVmX2NvdW50XyA8IDAgfHwgcnctPm51bV93YWl0 aW5nX3dyaXRlcnNfID4gMCkKICAgICAgICB7CiAgICAgICAgICBydy0+bnVtX3dhaXRpbmdfcmVh ZGVyc18rKzsKICAgICAgICAgIGlmIChBQ0VfT1M6OmNvbmRfd2FpdCAoJnJ3LT53YWl0aW5nX3Jl YWRlcnNfLCAmcnctPmxvY2tfKSA9PSAtMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHJl c3VsdCA9IC0yOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBy dy0+bnVtX3dhaXRpbmdfcmVhZGVyc18tLTsKICAgICAgICB9CiAgICB9CiAgaWYgKHJlc3VsdCA9 PSAwKQogICAgcnctPnJlZl9jb3VudF8rKzsKICBpZiAocmVzdWx0ICE9IC0xKQogICAgQUNFX09T OjptdXRleF91bmxvY2sgKCZydy0+bG9ja18pOwoKICBfcHRocmVhZF9jbGVhbnVwX3BvcCAoJl9i dWZmZXIsICgwKSk7IH07CgogIHJldHVybiAwOwoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpy d193cmxvY2sgKEFDRV9yd2xvY2tfdCAqcncpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwojIDQzODEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5pIgogIHsgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyIF9idWZmZXI7 IF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoJl9idWZmZXIsIChhY2VfbXV0ZXhfbG9ja19jbGVhbnVw X2FkYXB0ZXIpLCAoKHZvaWQgKikgJnJ3LT5sb2NrXykpOzs7CgogIGludCByZXN1bHQgPSAwOwoK ICBpZiAoQUNFX09TOjptdXRleF9sb2NrICgmcnctPmxvY2tfKSA9PSAtMSkKICAgIHJlc3VsdCA9 IC0xOwogIGVsc2UKICAgIHsKICAgICAgd2hpbGUgKHJ3LT5yZWZfY291bnRfICE9IDApCiAgICAg ICAgewogICAgICAgICAgcnctPm51bV93YWl0aW5nX3dyaXRlcnNfKys7CgogICAgICAgICAgaWYg KEFDRV9PUzo6Y29uZF93YWl0ICgmcnctPndhaXRpbmdfd3JpdGVyc18sICZydy0+bG9ja18pID09 IC0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcmVzdWx0ID0gLTI7CiAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBydy0+bnVtX3dhaXRpbmdfd3JpdGVy c18tLTsKICAgICAgICB9CiAgICB9CiAgaWYgKHJlc3VsdCA9PSAwKQogICAgcnctPnJlZl9jb3Vu dF8gPSAtMTsKICBpZiAocmVzdWx0ICE9IC0xKQogICAgQUNFX09TOjptdXRleF91bmxvY2sgKCZy dy0+bG9ja18pOwoKICBfcHRocmVhZF9jbGVhbnVwX3BvcCAoJl9idWZmZXIsICgwKSk7IH07Cgog IHJldHVybiAwOwoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpyd191bmxvY2sgKEFDRV9yd2xv Y2tfdCAqcncpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDQ0MzEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGlm IChBQ0VfT1M6Om11dGV4X2xvY2sgKCZydy0+bG9ja18pID09IC0xKQogICAgcmV0dXJuIC0xOwoK ICBpZiAocnctPnJlZl9jb3VudF8gPiAwKQogICAgcnctPnJlZl9jb3VudF8tLTsKICBlbHNlIGlm IChydy0+cmVmX2NvdW50XyA9PSAtMSkKICAgIHJ3LT5yZWZfY291bnRfID0gMDsKICBlbHNlCiAg ICByZXR1cm4gLTE7CgoKICBpbnQgcmVzdWx0ID0gMDsKICBBQ0VfRXJybm9fR3VhcmQgZXJyb3Ig KCgqX19lcnJub19sb2NhdGlvbiAoKSkpOwoKICBpZiAocnctPmltcG9ydGFudF93cml0ZXJfICYm IHJ3LT5yZWZfY291bnRfID09IDEpCgogICAgewogICAgICByZXN1bHQgPSBBQ0VfT1M6OmNvbmRf c2lnbmFsICgmcnctPndhaXRpbmdfaW1wb3J0YW50X3dyaXRlcl8pOwogICAgICBlcnJvciA9ICgq X19lcnJub19sb2NhdGlvbiAoKSk7CiAgICB9CiAgZWxzZSBpZiAocnctPm51bV93YWl0aW5nX3dy aXRlcnNfID4gMCAmJiBydy0+cmVmX2NvdW50XyA9PSAwKQoKICAgIHsKICAgICAgcmVzdWx0ID0g QUNFX09TOjpjb25kX3NpZ25hbCAoJnJ3LT53YWl0aW5nX3dyaXRlcnNfKTsKICAgICAgZXJyb3Ig PSAoKl9fZXJybm9fbG9jYXRpb24gKCkpOwogICAgfQogIGVsc2UgaWYgKHJ3LT5udW1fd2FpdGlu Z19yZWFkZXJzXyA+IDAgJiYgcnctPm51bV93YWl0aW5nX3dyaXRlcnNfID09IDApCiAgICB7CiAg ICAgIHJlc3VsdCA9IEFDRV9PUzo6Y29uZF9icm9hZGNhc3QgKCZydy0+d2FpdGluZ19yZWFkZXJz Xyk7CiAgICAgIGVycm9yID0gKCpfX2Vycm5vX2xvY2F0aW9uICgpKTsKICAgIH0KCiAgQUNFX09T OjptdXRleF91bmxvY2sgKCZydy0+bG9ja18pOwogIHJldHVybiByZXN1bHQ7CgoKCgoKfQoKCgoK CgoKaW5saW5lIGludApBQ0VfT1M6OnJ3X3RyeXdybG9ja191cGdyYWRlIChBQ0Vfcndsb2NrX3Qg KnJ3KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoj IDQ0OTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5p IgogIGludCByZXN1bHQgPSAwOwoKCiAgeyBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIg X2J1ZmZlcjsgX3B0aHJlYWRfY2xlYW51cF9wdXNoICgmX2J1ZmZlciwgKGFjZV9tdXRleF9sb2Nr X2NsZWFudXBfYWRhcHRlciksICgodm9pZCAqKSAmcnctPmxvY2tfKSk7OzsKCgogIGlmIChBQ0Vf T1M6Om11dGV4X2xvY2sgKCZydy0+bG9ja18pID09IC0xKQogICAgcmV0dXJuIC0xOwoKICBlbHNl IGlmIChydy0+aW1wb3J0YW50X3dyaXRlcl8pCgogICAgewogICAgICByZXN1bHQgPSAtMTsKICAg ICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDE2OwogICAgfQogIGVsc2UKICAgIHsKICAgICAg d2hpbGUgKHJ3LT5yZWZfY291bnRfID4gMSkKICAgICAgICB7CiAgICAgICAgICBydy0+bnVtX3dh aXRpbmdfd3JpdGVyc18rKzsKICAgICAgICAgIHJ3LT5pbXBvcnRhbnRfd3JpdGVyXyA9IDE7Cgog ICAgICAgICAgaWYgKEFDRV9PUzo6Y29uZF93YWl0ICgmcnctPndhaXRpbmdfaW1wb3J0YW50X3dy aXRlcl8sICZydy0+bG9ja18pID09IC0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcmVz dWx0ID0gLTE7CgoKICAgICAgICAgICAgfQogICAgICAgICAgcnctPmltcG9ydGFudF93cml0ZXJf ID0gMDsKICAgICAgICAgIHJ3LT5udW1fd2FpdGluZ193cml0ZXJzXy0tOwogICAgICAgIH0KICAg ICAgaWYgKHJlc3VsdCA9PSAwKQogICAgICAgIHsKCiAgICAgICAgICBydy0+cmVmX2NvdW50XyA9 IC0xOwoKCiAgICAgICAgfQogICAgfQoKICBBQ0VfT1M6Om11dGV4X3VubG9jayAoJnJ3LT5sb2Nr Xyk7CgoKICBfcHRocmVhZF9jbGVhbnVwX3BvcCAoJl9idWZmZXIsICgwKSk7IH07CgoKICByZXR1 cm4gcmVzdWx0OwoKCgoKCgp9CiMgNDU3NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpyd2xvY2tfZGVzdHJveSAo QUNFX3J3bG9ja190ICpydykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKIyA0NTkxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1MuaSIKICBBQ0VfT1M6Om11dGV4X2Rlc3Ryb3kgKCZydy0+bG9ja18pOwogIEFDRV9PUzo6 Y29uZF9kZXN0cm95ICgmcnctPndhaXRpbmdfcmVhZGVyc18pOwogIEFDRV9PUzo6Y29uZF9kZXN0 cm95ICgmcnctPndhaXRpbmdfaW1wb3J0YW50X3dyaXRlcl8pOwogIHJldHVybiBBQ0VfT1M6OmNv bmRfZGVzdHJveSAoJnJ3LT53YWl0aW5nX3dyaXRlcnNfKTsKCgoKCgp9CgppbmxpbmUgaW50CkFD RV9PUzo6ZXZlbnRfaW5pdCAoQUNFX2V2ZW50X3QgKmV2ZW50LAogICAgICAgICAgICAgICAgICAg IGludCBtYW51YWxfcmVzZXQsCiAgICAgICAgICAgICAgICAgICAgaW50IGluaXRpYWxfc3RhdGUs CiAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcsCiAgICAgICAgICAgICAg ICAgICAgaW50IHNhKQp7CiMgNDYzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmc2EgPT0gMCk7CiAgZXZlbnQtPm1h bnVhbF9yZXNldF8gPSBtYW51YWxfcmVzZXQ7CiAgZXZlbnQtPmlzX3NpZ25hbGVkXyA9IGluaXRp YWxfc3RhdGU7CiAgZXZlbnQtPndhaXRpbmdfdGhyZWFkc18gPSAwOwoKICBpbnQgcmVzdWx0ID0g QUNFX09TOjpjb25kX2luaXQgKCZldmVudC0+Y29uZGl0aW9uXywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNob3J0PiAodHlwZSksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXJnKTsKICBpZiAocmVzdWx0ID09IDApCiAgICByZXN1bHQgPSBBQ0VfT1M6Om11dGV4X2lu aXQgKCZldmVudC0+bG9ja18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChBQ0VfbXV0ZXhhdHRyX3QgKikgYXJnKTsKICByZXR1cm4gcmVzdWx0 OwojIDQ2NTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P Uy5pIgp9CiMgNDY5MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpldmVudF9kZXN0cm95IChBQ0VfZXZlbnRfdCAq ZXZlbnQpCnsKCgoKICBpbnQgcjEgPSBBQ0VfT1M6Om11dGV4X2Rlc3Ryb3kgKCZldmVudC0+bG9j a18pOwogIGludCByMiA9IEFDRV9PUzo6Y29uZF9kZXN0cm95ICgmZXZlbnQtPmNvbmRpdGlvbl8p OwogIHJldHVybiByMSAhPSAwIHx8IHIyICE9IDAgPyAtMSA6IDA7CgoKCgp9CgppbmxpbmUgaW50 CkFDRV9PUzo6ZXZlbnRfd2FpdCAoQUNFX2V2ZW50X3QgKmV2ZW50KQp7CiMgNDcxOSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgaW50IHJlc3Vs dCA9IDA7CiAgaW50IGVycm9yID0gMDsKCgogIGlmIChBQ0VfT1M6Om11dGV4X2xvY2sgKCZldmVu dC0+bG9ja18pID09IDApCiAgICB7CiAgICAgIGlmIChldmVudC0+aXNfc2lnbmFsZWRfID09IDEp CgogICAgICAgIHsKICAgICAgICAgIGlmIChldmVudC0+bWFudWFsX3Jlc2V0XyA9PSAwKQoKICAg ICAgICAgICAgZXZlbnQtPmlzX3NpZ25hbGVkXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCgog ICAgICAgIHsKICAgICAgICAgIGV2ZW50LT53YWl0aW5nX3RocmVhZHNfKys7CgogICAgICAgICAg aWYgKEFDRV9PUzo6Y29uZF93YWl0ICgmZXZlbnQtPmNvbmRpdGlvbl8sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZldmVudC0+bG9ja18pICE9IDApCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICByZXN1bHQgPSAtMTsKICAgICAgICAgICAgICBlcnJvciA9ICgqX19lcnJub19s b2NhdGlvbiAoKSk7CgogICAgICAgICAgICB9CgogICAgICAgICAgZXZlbnQtPndhaXRpbmdfdGhy ZWFkc18tLTsKICAgICAgICB9CgoKICAgICAgQUNFX09TOjptdXRleF91bmxvY2sgKCZldmVudC0+ bG9ja18pOwoKICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKCiAgICAgICAgKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSA9IGVycm9yOwogICAgfQogIGVsc2UKICAgIHJlc3VsdCA9IC0xOwogIHJldHVybiBy ZXN1bHQ7CgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6ZXZlbnRfdGltZWR3YWl0IChBQ0VfZXZl bnRfdCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVGltZV9WYWx1ZSAqdGlt ZW91dCkKewojIDQ4MDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9PUy5pIgogIGludCByZXN1bHQgPSAwOwogIGludCBlcnJvciA9IDA7CgoKICBpZiAoQUNF X09TOjptdXRleF9sb2NrICgmZXZlbnQtPmxvY2tfKSA9PSAwKQogICAgewogICAgICBpZiAoZXZl bnQtPmlzX3NpZ25hbGVkXyA9PSAxKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoZXZlbnQtPm1h bnVhbF9yZXNldF8gPT0gMCkKCiAgICAgICAgICAgIGV2ZW50LT5pc19zaWduYWxlZF8gPSAwOwog ICAgICAgIH0KICAgICAgZWxzZQoKICAgICAgICB7CiAgICAgICAgICBldmVudC0+d2FpdGluZ190 aHJlYWRzXysrOwoKICAgICAgICAgIGlmIChBQ0VfT1M6OmNvbmRfdGltZWR3YWl0ICgmZXZlbnQt PmNvbmRpdGlvbl8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50 LT5sb2NrXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KSAh PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcmVzdWx0ID0gLTE7CiAgICAgICAgICAg ICAgZXJyb3IgPSAoKl9fZXJybm9fbG9jYXRpb24gKCkpOwogICAgICAgICAgICB9CgogICAgICAg ICAgZXZlbnQtPndhaXRpbmdfdGhyZWFkc18tLTsKICAgICAgICB9CgoKICAgICAgQUNFX09TOjpt dXRleF91bmxvY2sgKCZldmVudC0+bG9ja18pOwoKICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKCiAg ICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IGVycm9yOwogICAgfQogIGVsc2UKICAgIHJl c3VsdCA9IC0xOwogIHJldHVybiByZXN1bHQ7CgoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OmV2 ZW50X3NpZ25hbCAoQUNFX2V2ZW50X3QgKmV2ZW50KQp7CgoKCiAgaW50IHJlc3VsdCA9IDA7CiAg aW50IGVycm9yID0gMDsKCgogIGlmIChBQ0VfT1M6Om11dGV4X2xvY2sgKCZldmVudC0+bG9ja18p ID09IDApCiAgICB7CgogICAgICBpZiAoZXZlbnQtPm1hbnVhbF9yZXNldF8gPT0gMSkKICAgICAg ICB7CgogICAgICAgICAgZXZlbnQtPmlzX3NpZ25hbGVkXyA9IDE7CgogICAgICAgICAgaWYgKEFD RV9PUzo6Y29uZF9icm9hZGNhc3QgKCZldmVudC0+Y29uZGl0aW9uXykgIT0gMCkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIHJlc3VsdCA9IC0xOwogICAgICAgICAgICAgIGVycm9yID0gKCpf X2Vycm5vX2xvY2F0aW9uICgpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGVsc2UK ICAgICAgICB7CiAgICAgICAgICBpZiAoZXZlbnQtPndhaXRpbmdfdGhyZWFkc18gPT0gMCkKCiAg ICAgICAgICAgIGV2ZW50LT5pc19zaWduYWxlZF8gPSAxOwoKCiAgICAgICAgICBlbHNlIGlmIChB Q0VfT1M6OmNvbmRfc2lnbmFsICgmZXZlbnQtPmNvbmRpdGlvbl8pICE9IDApCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICByZXN1bHQgPSAtMTsKICAgICAgICAgICAgICBlcnJvciA9ICgqX19l cnJub19sb2NhdGlvbiAoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgQUNFX09T OjptdXRleF91bmxvY2sgKCZldmVudC0+bG9ja18pOwoKICAgICAgaWYgKHJlc3VsdCA9PSAtMSkK CiAgICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IGVycm9yOwogICAgfQogIGVsc2UKICAg IHJlc3VsdCA9IC0xOwogIHJldHVybiByZXN1bHQ7CgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6 ZXZlbnRfcHVsc2UgKEFDRV9ldmVudF90ICpldmVudCkKewoKCgogIGludCByZXN1bHQgPSAwOwog IGludCBlcnJvciA9IDA7CgoKICBpZiAoQUNFX09TOjptdXRleF9sb2NrICgmZXZlbnQtPmxvY2tf KSA9PSAwKQogICAgewoKICAgICAgaWYgKGV2ZW50LT5tYW51YWxfcmVzZXRfID09IDEpCiAgICAg ICAgewoKICAgICAgICAgIGlmIChBQ0VfT1M6OmNvbmRfYnJvYWRjYXN0ICgmZXZlbnQtPmNvbmRp dGlvbl8pICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICByZXN1bHQgPSAtMTsKICAg ICAgICAgICAgICBlcnJvciA9ICgqX19lcnJub19sb2NhdGlvbiAoKSk7CiAgICAgICAgICAgIH0K ICAgICAgICB9CgogICAgICBlbHNlIGlmIChBQ0VfT1M6OmNvbmRfc2lnbmFsICgmZXZlbnQtPmNv bmRpdGlvbl8pICE9IDApCiAgICAgICAgewogICAgICAgICAgcmVzdWx0ID0gLTE7CiAgICAgICAg ICBlcnJvciA9ICgqX19lcnJub19sb2NhdGlvbiAoKSk7CiAgICAgICAgfQoKCiAgICAgIGV2ZW50 LT5pc19zaWduYWxlZF8gPSAwOwoKCiAgICAgIEFDRV9PUzo6bXV0ZXhfdW5sb2NrICgmZXZlbnQt PmxvY2tfKTsKCiAgICAgIGlmIChyZXN1bHQgPT0gLTEpCgogICAgICAgICgqX19lcnJub19sb2Nh dGlvbiAoKSkgPSBlcnJvcjsKICAgIH0KICBlbHNlCiAgICByZXN1bHQgPSAtMTsKICByZXR1cm4g cmVzdWx0OwoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OmV2ZW50X3Jlc2V0IChBQ0VfZXZlbnRf dCAqZXZlbnQpCnsKCgoKICBpbnQgcmVzdWx0ID0gMDsKCgogIGlmIChBQ0VfT1M6Om11dGV4X2xv Y2sgKCZldmVudC0+bG9ja18pID09IDApCiAgICB7CgogICAgICBldmVudC0+aXNfc2lnbmFsZWRf ID0gMDsKCgogICAgICBBQ0VfT1M6Om11dGV4X3VubG9jayAoJmV2ZW50LT5sb2NrXyk7CiAgICB9 CiAgZWxzZQogICAgcmVzdWx0ID0gLTE7CiAgcmV0dXJuIHJlc3VsdDsKCgoKCn0KIyA1MDI3ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5l CkFDRV9GbG93X1NwZWM6OkFDRV9GbG93X1NwZWMgKHVfbG9uZyB0b2tlbl9yYXRlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdG9rZW5fYnVja2V0X3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBwZWFrX2JhbmR3aWR0aCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdV9sb25nIGxhdGVuY3ksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVfbG9uZyBkZWxheV92YXJpYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFDRV9TRVJWSUNFX1RZUEUgc2VydmljZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1X2xvbmcgbWF4X3NkdV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1X2xvbmcgbWluaW11bV9wb2xpY2VkX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCB0dGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmlvcml0eSkK ewojIDUwNTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P Uy5pIgogIHRoaXMtPnRva2VuX3JhdGVfID0gdG9rZW5fcmF0ZTsKICB0aGlzLT50b2tlbl9idWNr ZXRfc2l6ZV8gPSB0b2tlbl9idWNrZXRfc2l6ZTsKICB0aGlzLT5wZWFrX2JhbmR3aWR0aF8gPSBw ZWFrX2JhbmR3aWR0aDsKICB0aGlzLT5sYXRlbmN5XyA9IGxhdGVuY3k7CiAgdGhpcy0+ZGVsYXlf dmFyaWF0aW9uXyA9IGRlbGF5X3ZhcmlhdGlvbjsKICB0aGlzLT5zZXJ2aWNlX3R5cGVfID0gc2Vy dmljZV90eXBlOwogIHRoaXMtPm1heF9zZHVfc2l6ZV8gPSBtYXhfc2R1X3NpemU7CiAgdGhpcy0+ bWluaW11bV9wb2xpY2VkX3NpemVfID0gbWluaW11bV9wb2xpY2VkX3NpemU7CiAgdGhpcy0+dHRs XyA9IHR0bDsKICB0aGlzLT5wcmlvcml0eV8gPSBwcmlvcml0eTsKCgp9CgppbmxpbmUKQUNFX0Zs b3dfU3BlYzo6QUNFX0Zsb3dfU3BlYyAodm9pZCkKewojIDUwODggIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIHRoaXMtPnRva2VuX3JhdGVfID0g MDsKICB0aGlzLT50b2tlbl9idWNrZXRfc2l6ZV8gPSAwOwogIHRoaXMtPnBlYWtfYmFuZHdpZHRo XyA9IDA7CiAgdGhpcy0+bGF0ZW5jeV8gPSAwOwogIHRoaXMtPmRlbGF5X3ZhcmlhdGlvbl8gPSAw OwogIHRoaXMtPnNlcnZpY2VfdHlwZV8gPSAwOwogIHRoaXMtPm1heF9zZHVfc2l6ZV8gPSAwOwog IHRoaXMtPm1pbmltdW1fcG9saWNlZF9zaXplXyA9IDA7CiAgdGhpcy0+dHRsXyA9IDA7CiAgdGhp cy0+cHJpb3JpdHlfID0gMDsKCgp9CgppbmxpbmUgdV9sb25nCkFDRV9GbG93X1NwZWM6OnRva2Vu X3JhdGUgKHZvaWQpIGNvbnN0CnsKCgoKICByZXR1cm4gdGhpcy0+dG9rZW5fcmF0ZV87Cgp9Cgpp bmxpbmUgdm9pZApBQ0VfRmxvd19TcGVjOjp0b2tlbl9yYXRlICh1X2xvbmcgdHIpCnsKCgoKICB0 aGlzLT50b2tlbl9yYXRlXyA9IHRyOwoKfQoKaW5saW5lIHVfbG9uZwpBQ0VfRmxvd19TcGVjOjp0 b2tlbl9idWNrZXRfc2l6ZSAodm9pZCkgY29uc3QKewoKCgogIHJldHVybiB0aGlzLT50b2tlbl9i dWNrZXRfc2l6ZV87Cgp9CgppbmxpbmUgdm9pZApBQ0VfRmxvd19TcGVjOjp0b2tlbl9idWNrZXRf c2l6ZSAodV9sb25nIHRicykKewoKCgogIHRoaXMtPnRva2VuX2J1Y2tldF9zaXplXyA9IHRiczsK Cn0KCmlubGluZSB1X2xvbmcKQUNFX0Zsb3dfU3BlYzo6cGVha19iYW5kd2lkdGggKHZvaWQpIGNv bnN0CnsKCgoKICByZXR1cm4gdGhpcy0+cGVha19iYW5kd2lkdGhfOwoKfQoKaW5saW5lIHZvaWQK QUNFX0Zsb3dfU3BlYzo6cGVha19iYW5kd2lkdGggKHVfbG9uZyBwYikKewoKCgogIHRoaXMtPnBl YWtfYmFuZHdpZHRoXyA9IHBiOwoKfQoKaW5saW5lIHVfbG9uZwpBQ0VfRmxvd19TcGVjOjpsYXRl bmN5ICh2b2lkKSBjb25zdAp7CgoKCiAgcmV0dXJuIHRoaXMtPmxhdGVuY3lfOwoKfQoKaW5saW5l IHZvaWQKQUNFX0Zsb3dfU3BlYzo6bGF0ZW5jeSAodV9sb25nIGwpCnsKCgoKICB0aGlzLT5sYXRl bmN5XyA9IGw7Cgp9CgppbmxpbmUgdV9sb25nCkFDRV9GbG93X1NwZWM6OmRlbGF5X3ZhcmlhdGlv biAodm9pZCkgY29uc3QKewoKCgogIHJldHVybiB0aGlzLT5kZWxheV92YXJpYXRpb25fOwoKfQpp bmxpbmUgdm9pZApBQ0VfRmxvd19TcGVjOjpkZWxheV92YXJpYXRpb24gKHVfbG9uZyBkdikKewoK CgogIHRoaXMtPmRlbGF5X3ZhcmlhdGlvbl8gPSBkdjsKCn0KCmlubGluZSBBQ0VfU0VSVklDRV9U WVBFCkFDRV9GbG93X1NwZWM6OnNlcnZpY2VfdHlwZSAodm9pZCkgY29uc3QKewoKCgoKICByZXR1 cm4gdGhpcy0+c2VydmljZV90eXBlXzsKCn0KCmlubGluZSB2b2lkCkFDRV9GbG93X1NwZWM6OnNl cnZpY2VfdHlwZSAoQUNFX1NFUlZJQ0VfVFlQRSBzdCkKewoKCgoKICB0aGlzLT5zZXJ2aWNlX3R5 cGVfID0gc3Q7Cgp9CgppbmxpbmUgdV9sb25nCkFDRV9GbG93X1NwZWM6Om1heF9zZHVfc2l6ZSAo dm9pZCkgY29uc3QKewoKCgoKICByZXR1cm4gdGhpcy0+bWF4X3NkdV9zaXplXzsKCn0KCmlubGlu ZSB2b2lkCkFDRV9GbG93X1NwZWM6Om1heF9zZHVfc2l6ZSAodV9sb25nIG1zcykKewoKCgoKICB0 aGlzLT5tYXhfc2R1X3NpemVfID0gbXNzOwoKfQoKaW5saW5lIHVfbG9uZwpBQ0VfRmxvd19TcGVj OjptaW5pbXVtX3BvbGljZWRfc2l6ZSAodm9pZCkgY29uc3QKewoKCgoKICByZXR1cm4gdGhpcy0+ bWluaW11bV9wb2xpY2VkX3NpemVfOwoKfQoKaW5saW5lIHZvaWQKQUNFX0Zsb3dfU3BlYzo6bWlu aW11bV9wb2xpY2VkX3NpemUgKHVfbG9uZyBtcHMpCnsKCgoKCiAgdGhpcy0+bWluaW11bV9wb2xp Y2VkX3NpemVfID0gbXBzOwoKfQoKaW5saW5lIGludApBQ0VfRmxvd19TcGVjOjp0dGwgKHZvaWQp IGNvbnN0CnsKCgoKCiAgcmV0dXJuIHRoaXMtPnR0bF87Cgp9CgppbmxpbmUgdm9pZApBQ0VfRmxv d19TcGVjOjp0dGwgKGludCB0KQp7CgoKCgoKICB0aGlzLT50dGxfID0gdDsKCn0KCmlubGluZSBp bnQKQUNFX0Zsb3dfU3BlYzo6cHJpb3JpdHkgKHZvaWQpIGNvbnN0CnsKCgoKCiAgcmV0dXJuIHRo aXMtPnByaW9yaXR5XzsKCn0KCmlubGluZSB2b2lkCkFDRV9GbG93X1NwZWM6OnByaW9yaXR5IChp bnQgcCkKewoKCgoKCiAgdGhpcy0+cHJpb3JpdHlfID0gcDsKCn0KCmlubGluZSBBQ0VfRmxvd19T cGVjCkFDRV9Rb1M6OnNlbmRpbmdfZmxvd3NwZWMgKHZvaWQpIGNvbnN0CnsKCgoKICByZXR1cm4g dGhpcy0+c2VuZGluZ19mbG93c3BlY187Cgp9CgppbmxpbmUgdm9pZApBQ0VfUW9TOjpzZW5kaW5n X2Zsb3dzcGVjIChjb25zdCBBQ0VfRmxvd19TcGVjICZmcykKewoKCgogIHRoaXMtPnNlbmRpbmdf Zmxvd3NwZWNfID0gZnM7Cgp9CgppbmxpbmUgQUNFX0Zsb3dfU3BlYwpBQ0VfUW9TOjpyZWNlaXZp bmdfZmxvd3NwZWMgKHZvaWQpIGNvbnN0CnsKCgoKICByZXR1cm4gcmVjZWl2aW5nX2Zsb3dzcGVj XzsKCn0KCmlubGluZSB2b2lkCkFDRV9Rb1M6OnJlY2VpdmluZ19mbG93c3BlYyAoY29uc3QgQUNF X0Zsb3dfU3BlYyAmZnMpCnsKCgoKICB0aGlzLT5yZWNlaXZpbmdfZmxvd3NwZWNfID0gZnM7Cgp9 CgppbmxpbmUgaW92ZWMKQUNFX1FvUzo6cHJvdmlkZXJfc3BlY2lmaWMgKHZvaWQpIGNvbnN0CnsK CgoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiBpb3ZlYyAoKTsg fSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgdm9pZApBQ0VfUW9TOjpwcm92aWRlcl9zcGVjaWZpYyAo Y29uc3QgaW92ZWMgJnBzKQp7CgoKCiAgZG8geyB9IHdoaWxlICgmcHMgPT0gMCk7Cgp9Cgppbmxp bmUKQUNFX1FvU19QYXJhbXM6OkFDRV9Rb1NfUGFyYW1zIChpb3ZlYyAqY2FsbGVyX2RhdGEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW92ZWMgKmNhbGxlZV9kYXRhLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9Rb1MgKnNvY2tldF9xb3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQUNFX1FvUyAqZ3JvdXBfc29ja2V0X3FvcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZmxhZ3MpCiAgOiBjYWxsZXJfZGF0YV8gKGNh bGxlcl9kYXRhKSwKICAgIGNhbGxlZV9kYXRhXyAoY2FsbGVlX2RhdGEpLAogICAgc29ja2V0X3Fv c18gKHNvY2tldF9xb3MpLAogICAgZ3JvdXBfc29ja2V0X3Fvc18gKGdyb3VwX3NvY2tldF9xb3Mp LAogICAgZmxhZ3NfIChmbGFncykKewp9CgppbmxpbmUgaW92ZWMgKgpBQ0VfUW9TX1BhcmFtczo6 Y2FsbGVyX2RhdGEgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y2FsbGVyX2RhdGFfOwp9 CgppbmxpbmUgdm9pZApBQ0VfUW9TX1BhcmFtczo6Y2FsbGVyX2RhdGEgKGlvdmVjICpjZCkKewog IHRoaXMtPmNhbGxlcl9kYXRhXyA9IGNkOwp9CgppbmxpbmUgaW92ZWMgKgpBQ0VfUW9TX1BhcmFt czo6Y2FsbGVlX2RhdGEgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y2FsbGVlX2RhdGFf Owp9CgppbmxpbmUgdm9pZApBQ0VfUW9TX1BhcmFtczo6Y2FsbGVlX2RhdGEgKGlvdmVjICpjZCkK ewogIHRoaXMtPmNhbGxlZV9kYXRhXyA9IGNkOwp9CgppbmxpbmUgQUNFX1FvUyAqCkFDRV9Rb1Nf UGFyYW1zOjpzb2NrZXRfcW9zICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnNvY2tldF9x b3NfOwp9CgppbmxpbmUgdm9pZApBQ0VfUW9TX1BhcmFtczo6c29ja2V0X3FvcyAoQUNFX1FvUyAq c3EpCnsKICB0aGlzLT5zb2NrZXRfcW9zXyA9IHNxOwp9CgppbmxpbmUgQUNFX1FvUyAqCkFDRV9R b1NfUGFyYW1zOjpncm91cF9zb2NrZXRfcW9zICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMt Pmdyb3VwX3NvY2tldF9xb3NfOwp9CgppbmxpbmUgdm9pZApBQ0VfUW9TX1BhcmFtczo6Z3JvdXBf c29ja2V0X3FvcyAoQUNFX1FvUyAqZ3NxKQp7CiAgdGhpcy0+Z3JvdXBfc29ja2V0X3Fvc18gPSBn c3E7Cn0KCmlubGluZSB1X2xvbmcKQUNFX1FvU19QYXJhbXM6OmZsYWdzICh2b2lkKSBjb25zdAp7 CiAgcmV0dXJuIHRoaXMtPmZsYWdzXzsKfQoKaW5saW5lIHZvaWQKQUNFX1FvU19QYXJhbXM6OmZs YWdzICh1X2xvbmcgZikKewogIHRoaXMtPmZsYWdzXyA9IGY7Cn0KCmlubGluZQpBQ0VfQWNjZXB0 X1FvU19QYXJhbXM6OkFDRV9BY2NlcHRfUW9TX1BhcmFtcyAoQUNFX1FPU19DT05ESVRJT05fRlVO QyBxb3NfY29uZGl0aW9uX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdV9sb25nIGNhbGxiYWNrX2RhdGEpCiAgOiBxb3NfY29uZGl0aW9uX2Nh bGxiYWNrXyAocW9zX2NvbmRpdGlvbl9jYWxsYmFjayksCiAgICBjYWxsYmFja19kYXRhXyAoY2Fs bGJhY2tfZGF0YSkKewp9CgppbmxpbmUgQUNFX1FPU19DT05ESVRJT05fRlVOQwpBQ0VfQWNjZXB0 X1FvU19QYXJhbXM6OnFvc19jb25kaXRpb25fY2FsbGJhY2sgKHZvaWQpIGNvbnN0CnsKICByZXR1 cm4gdGhpcy0+cW9zX2NvbmRpdGlvbl9jYWxsYmFja187Cn0KCmlubGluZSB2b2lkCkFDRV9BY2Nl cHRfUW9TX1BhcmFtczo6cW9zX2NvbmRpdGlvbl9jYWxsYmFjayAoQUNFX1FPU19DT05ESVRJT05f RlVOQyBxY2MpCnsKICB0aGlzLT5xb3NfY29uZGl0aW9uX2NhbGxiYWNrXyA9IHFjYzsKfQoKaW5s aW5lIHVfbG9uZwpBQ0VfQWNjZXB0X1FvU19QYXJhbXM6OmNhbGxiYWNrX2RhdGEgKHZvaWQpIGNv bnN0CnsKICByZXR1cm4gdGhpcy0+Y2FsbGJhY2tfZGF0YV87Cn0KCmlubGluZSB2b2lkCkFDRV9B Y2NlcHRfUW9TX1BhcmFtczo6Y2FsbGJhY2tfZGF0YSAodV9sb25nIGNkKQp7CiAgdGhpcy0+Y2Fs bGJhY2tfZGF0YV8gPSBjZDsKfQoKaW5saW5lIEFDRV9IQU5ETEUKQUNFX09TOjphY2NlcHQgKEFD RV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLAog ICAgICAgICAgICAgICAgaW50ICphZGRybGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKIyA1NTMzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKICBBQ0VfSEFORExFIGFjZV9yZXN1bHQgPSA6OmFjY2VwdCAoKEFDRV9TT0NL RVQpIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDRV9TT0NLRVRfTEVOICopIGFkZHJs ZW4pIDsKICBpZiAoYWNlX3Jlc3VsdCA9PSAtMSAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09 IDExKQogICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDExOwogIHJldHVybiBhY2VfcmVzdWx0 OwoKCgp9CgppbmxpbmUgQUNFX0hBTkRMRQpBQ0VfT1M6OmFjY2VwdCAoQUNFX0hBTkRMRSBoYW5k bGUsCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAgICAgICAgICAgICAg ICBpbnQgKmFkZHJsZW4sCiAgICAgICAgICAgICAgICBjb25zdCBBQ0VfQWNjZXB0X1FvU19QYXJh bXMgJnFvc19wYXJhbXMpCnsKIyA1NTU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IH0gd2hpbGUgKCZxb3NfcGFyYW1zID09IDApOwog IHJldHVybiBBQ0VfT1M6OmFjY2VwdCAoaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg YWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJsZW4pOwoKfQoKaW5saW5lIGludApB Q0VfT1M6OmVudW1fcHJvdG9jb2xzIChpbnQgKnByb3RvY29scywKICAgICAgICAgICAgICAgICAg ICAgICAgQUNFX1Byb3RvY29sX0luZm8gKnByb3RvY29sX2J1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgICAgdV9sb25nICpidWZmZXJfbGVuZ3RoKQp7CiMgNTU4MCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmcHJv dG9jb2xzID09IDApOwogIGRvIHsgfSB3aGlsZSAoJnByb3RvY29sX2J1ZmZlciA9PSAwKTsKICBk byB7IH0gd2hpbGUgKCZidWZmZXJfbGVuZ3RoID09IDApOwogIGRvIHsgKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBBQ0VfSEFO RExFCkFDRV9PUzo6am9pbl9sZWFmIChBQ0VfSEFORExFIHNvY2tldCwKICAgICAgICAgICAgICAg ICAgIGNvbnN0IHNvY2thZGRyICpuYW1lLAogICAgICAgICAgICAgICAgICAgaW50IG5hbWVsZW4s CiAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfUW9TX1BhcmFtcyAmcW9zX3BhcmFtcykKewoj IDU2MTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5p IgogIGRvIHsgfSB3aGlsZSAoJnNvY2tldCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZuYW1lID09 IDApOwogIGRvIHsgfSB3aGlsZSAoJm5hbWVsZW4gPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmcW9z X3BhcmFtcyA9PSAwKTsKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVy biAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6aW9jdGwgKEFDRV9IQU5E TEUgc29ja2V0LAogICAgICAgICAgICAgICB1X2xvbmcgaW9fY29udHJvbF9jb2RlLAogICAgICAg ICAgICAgICB2b2lkICppbl9idWZmZXJfcCwKICAgICAgICAgICAgICAgdV9sb25nIGluX2J1ZmZl ciwKICAgICAgICAgICAgICAgdm9pZCAqb3V0X2J1ZmZlcl9wLAogICAgICAgICAgICAgICB1X2xv bmcgb3V0X2J1ZmZlciwKICAgICAgICAgICAgICAgdV9sb25nICpieXRlc19yZXR1cm5lZCwKICAg ICAgICAgICAgICAgQUNFX09WRVJMQVBQRUQgKm92ZXJsYXBwZWQsCiAgICAgICAgICAgICAgIEFD RV9PVkVSTEFQUEVEX0NPTVBMRVRJT05fRlVOQyBmdW5jKQp7CiMgNTY0NiAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgm c29ja2V0ID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmlvX2NvbnRyb2xfY29kZSA9PSAwKTsKICBk byB7IH0gd2hpbGUgKCZpbl9idWZmZXJfcCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZpbl9idWZm ZXIgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmb3V0X2J1ZmZlcl9wID09IDApOwogIGRvIHsgfSB3 aGlsZSAoJm91dF9idWZmZXIgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmYnl0ZXNfcmV0dXJuZWQg PT0gMCk7CiAgZG8geyB9IHdoaWxlICgmb3ZlcmxhcHBlZCA9PSAwKTsKICBkbyB7IH0gd2hpbGUg KCZmdW5jID09IDApOwogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJu IC0xOyB9IHdoaWxlICgwKTsKCn0KCgoKaW5saW5lIGludApBQ0VfT1M6OmlvY3RsIChBQ0VfSEFO RExFIHNvY2tldCwKICAgICAgICAgICAgICAgdV9sb25nIGlvX2NvbnRyb2xfY29kZSwKICAgICAg ICAgICAgICAgQUNFX1FvUyAmYWNlX3FvcywKICAgICAgICAgICAgICAgdV9sb25nICpieXRlc19y ZXR1cm5lZCwKICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyX3AsCiAgICAgICAgICAgICAgIHVf bG9uZyBidWZmZXIsCiAgICAgICAgICAgICAgIEFDRV9PVkVSTEFQUEVEICpvdmVybGFwcGVkLAog ICAgICAgICAgICAgICBBQ0VfT1ZFUkxBUFBFRF9DT01QTEVUSU9OX0ZVTkMgZnVuYykKewojIDU3 OTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgog IGRvIHsgfSB3aGlsZSAoJnNvY2tldCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZpb19jb250cm9s X2NvZGUgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmYWNlX3FvcyA9PSAwKTsKICBkbyB7IH0gd2hp bGUgKCZieXRlc19yZXR1cm5lZCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZidWZmZXJfcCA9PSAw KTsKICBkbyB7IH0gd2hpbGUgKCZidWZmZXIgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmb3Zlcmxh cHBlZCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZmdW5jID09IDApOwogIGRvIHsgKCpfX2Vycm5v X2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBp bnQKQUNFX09TOjpiaW5kIChBQ0VfSEFORExFIGhhbmRsZSwgc3RydWN0IHNvY2thZGRyICphZGRy LCBpbnQgYWRkcmxlbikKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgog IGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJl dHVybiA6OmJpbmQgKChBQ0VfU09DS0VUKSBoYW5kbGUsIGFkZHIsIChBQ0VfU09DS0VUX0xFTikg YWRkcmxlbik7IH0gd2hpbGUgKDApOwoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6Y29ubmVjdCAo QUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRy LAogICAgICAgICAgICAgICAgIGludCBhZGRybGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKCgoKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3Vs dF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Y29ubmVjdCAoKEFDRV9TT0NLRVQpIGhhbmRsZSwg YWRkciwgKEFDRV9TT0NLRVRfTEVOKSBhZGRybGVuKTsgfSB3aGlsZSAoMCk7CgoKCn0KCmlubGlu ZSBpbnQKQUNFX09TOjpjb25uZWN0IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAg ICBjb25zdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICBpbnQgYWRkcmxlbiwKICAg ICAgICAgICAgICAgICBjb25zdCBBQ0VfUW9TX1BhcmFtcyAmcW9zX3BhcmFtcykKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDU4NTYgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgfSB3aGlsZSAoJnFvc19wYXJh bXMgPT0gMCk7CiAgcmV0dXJuIEFDRV9PUzo6Y29ubmVjdCAoaGFuZGxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgIChzb2NrYWRkciAqKSBhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg IGFkZHJsZW4pOwoKfQoKCmlubGluZSBzdHJ1Y3QgaG9zdGVudCAqCkFDRV9PUzo6Z2V0aG9zdGJ5 bmFtZSAoY29uc3QgY2hhciAqbmFtZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwojIDU4NzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5pIgogIGRvIHsgc3RydWN0IGhvc3RlbnQgKiBhY2VfcmVzdWx0XyA9IDA7IGFj ZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmdldGhvc3RieW5hbWUgKG5hbWUpOyB9 IHdoaWxlICgwKTsKCgoKfQoKaW5saW5lIHN0cnVjdCBob3N0ZW50ICoKQUNFX09TOjpnZXRob3N0 YnluYW1lMiAoY29uc3QgY2hhciAqbmFtZSwgaW50IGZhbWlseSkKewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA1OTAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBpZiAoZmFtaWx5ID09IDIpCiAgICByZXR1 cm4gQUNFX09TOjpnZXRob3N0YnluYW1lIChuYW1lKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRp b24gKCkpID0gOTUgOyByZXR1cm4gMDsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgc3RydWN0IGhv c3RlbnQgKgpBQ0VfT1M6OmdldGhvc3RieWFkZHIgKGNvbnN0IGNoYXIgKmFkZHIsIGludCBsZW5n dGgsIGludCB0eXBlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiMgNTkyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T LmkiCiAgZG8geyBzdHJ1Y3QgaG9zdGVudCAqIGFjZV9yZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8g PSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Z2V0aG9zdGJ5YWRkciAoYWRkciwgKEFDRV9TT0NLRVRf TEVOKSBsZW5ndGgsIHR5cGUpOyB9IHdoaWxlICgwKTsKCgoKCgp9CgoKCgppbmxpbmUgaW50CkFD RV9PUzo6c2VsZWN0IChpbnQgd2lkdGgsCiAgICAgICAgICAgICAgICBmZF9zZXQgKnJmZHMsIGZk X3NldCAqd2ZkcywgZmRfc2V0ICplZmRzLAogICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVf VmFsdWUgKnRpbWVvdXQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg dGltZXZhbCBjb3B5OwogIHRpbWV2YWwgKnRpbWVwOwoKICBpZiAodGltZW91dCAhPSAwKQogICAg ewogICAgICBjb3B5ID0gKnRpbWVvdXQ7CiAgICAgIHRpbWVwID0gJmNvcHk7CiAgICB9CiAgZWxz ZQogICAgdGltZXAgPSAwOwoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1 bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNlbGVjdCAod2lkdGgsIChBQ0VfRkRfU0VUX1RZ UEUgKikgcmZkcywgKEFDRV9GRF9TRVRfVFlQRSAqKSB3ZmRzLCAoQUNFX0ZEX1NFVF9UWVBFICop IGVmZHMsIHRpbWVwKTsgfSB3aGlsZSAoMCk7CgoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNl bGVjdCAoaW50IHdpZHRoLAogICAgICAgICAgICAgICAgZmRfc2V0ICpyZmRzLCBmZF9zZXQgKndm ZHMsIGZkX3NldCAqZWZkcywKICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0 aW1lb3V0KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHRpbWV2YWwg Y29weSA9IHRpbWVvdXQ7CgoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1 bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNlbGVjdCAod2lkdGgsIChBQ0VfRkRfU0VUX1RZ UEUgKikgcmZkcywgKEFDRV9GRF9TRVRfVFlQRSAqKSB3ZmRzLCAoQUNFX0ZEX1NFVF9UWVBFICop IGVmZHMsICZjb3B5KTsgfSB3aGlsZSAoMCk7CgoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpy ZWN2IChBQ0VfSEFORExFIGhhbmRsZSwgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgZmxhZ3MpCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2MDA1ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBpbnQgYWNlX3Jlc3VsdF87CiAg YWNlX3Jlc3VsdF8gPSA6OnJlY3YgKChBQ0VfU09DS0VUKSBoYW5kbGUsIGJ1ZiwgbGVuLCBmbGFn cyk7CiAgaWYgKGFjZV9yZXN1bHRfID09IC0xICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0g MTEpCiAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTE7CiAgcmV0dXJuIGFjZV9yZXN1bHRf OwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnJlY3Zmcm9tIChBQ0VfSEFORExFIGhhbmRsZSwKICAg ICAgICAgICAgICAgICAgY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICBpbnQgbGVuLAogICAg ICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRk ciAqYWRkciwKICAgICAgICAgICAgICAgICAgaW50ICphZGRybGVuKQp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwojIDYwNTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFj ZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnJlY3Zmcm9tICgoQUNFX1NPQ0tFVCkg aGFuZGxlLCBidWYsIChBQ0VfU09DS0VUX0xFTikgbGVuLCBmbGFncywgYWRkciwgKEFDRV9TT0NL RVRfTEVOICopIGFkZHJsZW4pOyB9IHdoaWxlICgwKTsKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6 OnNlbmQgKEFDRV9IQU5ETEUgaGFuZGxlLCBjb25zdCBjaGFyICpidWYsIGludCBsZW4sIGludCBm bGFncykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDYwNzQgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGludCBhY2VfcmVz dWx0XzsKCgoKICBhY2VfcmVzdWx0XyA9IDo6c2VuZCAoKEFDRV9TT0NLRVQpIGhhbmRsZSwgYnVm LCBsZW4sIGZsYWdzKTsKCiAgaWYgKGFjZV9yZXN1bHRfID09IC0xICYmICgqX19lcnJub19sb2Nh dGlvbiAoKSkgPT0gMTEpCiAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTE7CiAgcmV0dXJu IGFjZV9yZXN1bHRfOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnJlY3Zmcm9tIChBQ0VfSEFORExF IGhhbmRsZSwKICAgICAgICAgICAgICAgICAgaW92ZWMgKmJ1ZmZlcnMsCiAgICAgICAgICAgICAg ICAgIGludCBidWZmZXJfY291bnQsCiAgICAgICAgICAgICAgICAgIHNpemVfdCAmbnVtYmVyX29m X2J5dGVzX3JlY3ZkLAogICAgICAgICAgICAgICAgICBpbnQgJmZsYWdzLAogICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAgICAgICAgICAgICAgICAgIGludCAqYWRkcmxl biwKICAgICAgICAgICAgICAgICAgQUNFX09WRVJMQVBQRUQgKm92ZXJsYXBwZWQsCiAgICAgICAg ICAgICAgICAgIEFDRV9PVkVSTEFQUEVEX0NPTVBMRVRJT05fRlVOQyBmdW5jKQp7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDYxMTUgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9 PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZidWZmZXJzID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmJ1 ZmZlcl9jb3VudCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZudW1iZXJfb2ZfYnl0ZXNfcmVjdmQg PT0gMCk7CiAgZG8geyB9IHdoaWxlICgmZmxhZ3MgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmYWRk ciA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZhZGRybGVuID09IDApOwogIGRvIHsgfSB3aGlsZSAo Jm92ZXJsYXBwZWQgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmZnVuYyA9PSAwKTsKICBkbyB7ICgq X19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9Cgpp bmxpbmUgaW50CkFDRV9PUzo6c2VuZHRvIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgIGludCBsZW4sCiAgICAgICAgICAg ICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFk ZHIsCiAgICAgICAgICAgICAgICBpbnQgYWRkcmxlbikKewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiMgNjE1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8g PSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6c2VuZHRvICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBidWYs IGxlbiwgZmxhZ3MsIGNvbnN0X2Nhc3Q8c3RydWN0IHNvY2thZGRyICo+IChhZGRyKSwgYWRkcmxl bik7IH0gd2hpbGUgKDApOwoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2VuZHRvIChBQ0VfSEFO RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgIGNvbnN0IGlvdmVjICpidWZmZXJzLAogICAgICAg ICAgICAgICAgaW50IGJ1ZmZlcl9jb3VudCwKICAgICAgICAgICAgICAgIHNpemVfdCAmbnVtYmVy X29mX2J5dGVzX3NlbnQsCiAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAgICAgICAgICAgICAgICBpbnQgYWRkcmxl biwKICAgICAgICAgICAgICAgIEFDRV9PVkVSTEFQUEVEICpvdmVybGFwcGVkLAogICAgICAgICAg ICAgICAgQUNFX09WRVJMQVBQRURfQ09NUExFVElPTl9GVU5DIGZ1bmMpCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwojIDYxODQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgfSB3aGlsZSAoJm92ZXJsYXBwZWQgPT0g MCk7CiAgZG8geyB9IHdoaWxlICgmZnVuYyA9PSAwKTsKCiAgbnVtYmVyX29mX2J5dGVzX3NlbnQg PSAwOwoKICBpbnQgcmVzdWx0ID0gMDsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXJfY291 bnQ7IGkrKykKICAgIHsKICAgICAgIHJlc3VsdCA9IEFDRV9PUzo6c2VuZHRvIChoYW5kbGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyICo+IChi dWZmZXJzW2ldLmlvdl9iYXNlKSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm ZmVyc1tpXS5pb3ZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYWRkcmxlbik7CiAgICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICBi cmVhazsKICAgICAgIG51bWJlcl9vZl9ieXRlc19zZW50ICs9IHJlc3VsdDsKICAgIH0KCiAgcmV0 dXJuIHJlc3VsdDsKCn0KCmlubGluZSBpbnQKQUNFX09TOjpnZXRwZWVybmFtZSAoQUNFX0hBTkRM RSBoYW5kbGUsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgaW50 ICphZGRybGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoK CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87 IHJldHVybiA6OmdldHBlZXJuYW1lICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBhZGRyLCAoQUNFX1NP Q0tFVF9MRU4gKikgYWRkcmxlbik7IH0gd2hpbGUgKDApOwoKCgoKfQoKaW5saW5lIHN0cnVjdCBw cm90b2VudCAqCkFDRV9PUzo6Z2V0cHJvdG9ieW5hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCnsKIyA2 MjM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIK ICBkbyB7IHN0cnVjdCBwcm90b2VudCAqIGFjZV9yZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8gPSBh Y2VfcmVzdWx0XzsgcmV0dXJuIDo6Z2V0cHJvdG9ieW5hbWUgKG5hbWUpOyB9IHdoaWxlICgwKTsK CgoKfQoKaW5saW5lIHN0cnVjdCBwcm90b2VudCAqCkFDRV9PUzo6Z2V0cHJvdG9ieW5hbWVfciAo Y29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9l bnQgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfUFJPVE9FTlRfREFUQSBi dWZmZXIpCnsKIyA2MjYyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKICBpZiAoOjpnZXRwcm90b2J5bmFtZV9yIChuYW1lLAogICAgICAgICAgICAg ICAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChBQ0VfUFJPVE9FTlRfREFUQSksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCkgPT0gMCkKICAgIHJldHVybiByZXN1bHQ7CiAg ZWxzZQogICAgcmV0dXJuIDA7CiMgNjI5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBzdHJ1Y3QgcHJvdG9lbnQgKgpBQ0VfT1M6 OmdldHByb3RvYnludW1iZXIgKGludCBwcm90bykKewoKCgoKICBkbyB7IHN0cnVjdCBwcm90b2Vu dCAqIGFjZV9yZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6 Z2V0cHJvdG9ieW51bWJlciAocHJvdG8pOyB9IHdoaWxlICgwKTsKCgp9CgppbmxpbmUgc3RydWN0 IHByb3RvZW50ICoKQUNFX09TOjpnZXRwcm90b2J5bnVtYmVyX3IgKGludCBwcm90bywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqcmVzdWx0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgQUNFX1BST1RPRU5UX0RBVEEgYnVmZmVyKQp7CiMgNjMyOSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgaWYgKDo6 Z2V0cHJvdG9ieW51bWJlcl9yIChwcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZiAoQUNFX1BST1RPRU5UX0RBVEEpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnJlc3VsdCkgPT0gMCkKICAgIHJldHVybiByZXN1bHQ7CiAgZWxzZQogICAg cmV0dXJuIDA7CiMgNjM1NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TLmkiCn0KCmlubGluZSBzdHJ1Y3Qgc2VydmVudCAqCkFDRV9PUzo6Z2V0c2VydmJ5 bmFtZSAoY29uc3QgY2hhciAqc3ZjLCBjb25zdCBjaGFyICpwcm90bykKewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDYzNzEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgc3RydWN0IHNlcnZlbnQgKiBh Y2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmdldHNl cnZieW5hbWUgKHN2YywgcHJvdG8pOyB9IHdoaWxlICgwKTsKCgoKCn0KCmlubGluZSBpbnQKQUNF X09TOjpnZXRzb2NrbmFtZSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgaW50ICphZGRybGVu KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGRvIHsg aW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6 OmdldHNvY2tuYW1lICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBhZGRyLCAoQUNFX1NPQ0tFVF9MRU4g KikgYWRkcmxlbik7IH0gd2hpbGUgKDApOwoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OmdldHNv Y2tvcHQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwK ICAgICAgICAgICAgICAgICAgICBpbnQgb3B0bmFtZSwKICAgICAgICAgICAgICAgICAgICBjaGFy ICpvcHR2YWwsCiAgICAgICAgICAgICAgICAgICAgaW50ICpvcHRsZW4pCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBh Y2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpnZXRzb2Nrb3B0ICgoQUNFX1NPQ0tF VCkgaGFuZGxlLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCAoQUNFX1NPQ0tFVF9MRU4gKikgb3B0 bGVuKTsgfSB3aGlsZSAoMCk7CgoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpsaXN0ZW4gKEFD RV9IQU5ETEUgaGFuZGxlLCBpbnQgYmFja2xvZykKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2Vf cmVzdWx0XzsgcmV0dXJuIDo6bGlzdGVuICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBiYWNrbG9nKTsg fSB3aGlsZSAoMCk7Cn0KCmlubGluZSBpbnQKQUNFX09TOjpzZXRzb2Nrb3B0IChBQ0VfSEFORExF IGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAg ICAgaW50IG9wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3B0dmFsLAog ICAgICAgICAgICAgICAgICAgIGludCBvcHRsZW4pCnsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9 IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzZXRzb2Nrb3B0ICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBs ZXZlbCwgb3B0bmFtZSwgKEFDRV9TT0NLT1BUX1RZUEUxKSBvcHR2YWwsIG9wdGxlbik7IH0gd2hp bGUgKDApOwoKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2h1dGRvd24gKEFDRV9IQU5ETEUg aGFuZGxlLCBpbnQgaG93KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJl dHVybiA6OnNodXRkb3duICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBob3cpOyB9IHdoaWxlICgwKTsK fQoKaW5saW5lIEFDRV9IQU5ETEUKQUNFX09TOjpzb2NrZXQgKGludCBkb21haW4sCiAgICAgICAg ICAgICAgICBpbnQgdHlwZSwKICAgICAgICAgICAgICAgIGludCBwcm90bykKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgZG8geyBBQ0VfSEFORExFIGFjZV9yZXN1bHRfID0g LTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNvY2tldCAoZG9tYWluLCB0 eXBlLCBwcm90byk7IH0gd2hpbGUgKDApOwoKCgoKfQoKaW5saW5lIEFDRV9IQU5ETEUKQUNFX09T Ojpzb2NrZXQgKGludCBkb21haW4sCiAgICAgICAgICAgICAgICBpbnQgdHlwZSwKICAgICAgICAg ICAgICAgIGludCBwcm90bywKICAgICAgICAgICAgICAgIEFDRV9Qcm90b2NvbF9JbmZvICpwcm90 b2NvbGluZm8sCiAgICAgICAgICAgICAgICBBQ0VfU09DS19HUk9VUCBnLAogICAgICAgICAgICAg ICAgdV9sb25nIGZsYWdzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2 NDc4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIK ICBkbyB7IH0gd2hpbGUgKCZwcm90b2NvbGluZm8gPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmZyA9 PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZmbGFncyA9PSAwKTsKCiAgcmV0dXJuIEFDRV9PUzo6c29j a2V0IChkb21haW4sCiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICAgcHJvdG8pOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OmF0b2kgKGNvbnN0IGNo YXIgKnMpCnsKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj ZV9yZXN1bHRfOyByZXR1cm4gOjphdG9pIChzKTsgfSB3aGlsZSAoMCk7Cgp9CiMgNjUxMCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBk b3VibGUKQUNFX09TOjpmbG9vciAoZG91YmxlIHgpCnsKCiAgcmV0dXJuIGRvdWJsZSAoc3RhdGlj X2Nhc3Q8bG9uZz4gKHgpKTsKfQoKaW5saW5lIGRvdWJsZQpBQ0VfT1M6OmNlaWwgKGRvdWJsZSB4 KQp7CgogIGRvdWJsZSBmbG9vciA9IEFDRV9PUzo6Zmxvb3IgKHgpOwogIGlmIChmbG9vciA9PSB4 KQogICAgcmV0dXJuIGZsb29yOwogIGVsc2UKICAgIHJldHVybiBmbG9vciArIDE7Cn0KCmlubGlu ZSBpbnQKQUNFX09TOjpyZWN2bXNnIChBQ0VfSEFORExFIGhhbmRsZSwgc3RydWN0IG1zZ2hkciAq bXNnLCBpbnQgZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2 NTU0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIK ICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyBy ZXR1cm4gOjpyZWN2bXNnIChoYW5kbGUsIG1zZywgZmxhZ3MpOyB9IHdoaWxlICgwKTsKIyA2NTYz ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoK aW5saW5lIGludApBQ0VfT1M6OnNlbmRtc2cgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAg ICAgICAgIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1zZywKICAgICAgICAgICAgICAgICBpbnQgZmxh Z3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2NTk0ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBh Y2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzZW5k bXNnIChoYW5kbGUsIChBQ0VfU0VORE1TR19UWVBFICopIG1zZywgZmxhZ3MpOyB9IHdoaWxlICgw KTsKIyA2NjAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OmZjbG9zZSAoRklMRSAqZnApCnsKCgoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7 IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmZjbG9zZSAoZnApOyB9IHdoaWxl ICgwKTsKCgoKCgp9CgppbmxpbmUgQUNFX1RDSEFSICoKQUNFX09TOjpmZ2V0cyAoQUNFX1RDSEFS ICpidWYsIGludCBzaXplLCBGSUxFICpmcCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKIyA2NjM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1MuaSIKICBkbyB7IGNoYXIgKiBhY2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNl X3Jlc3VsdF87IHJldHVybiA6OmZnZXRzIChidWYsIHNpemUsIGZwKTsgfSB3aGlsZSAoMCk7Cgp9 CgoKCgppbmxpbmUgRklMRSAqCkFDRV9PUzo6Zm9wZW4gKGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5h bWUsIGNvbnN0IEFDRV9UQ0hBUiAqbW9kZSkKewoKCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICBkbyB7IEZJTEUgKiBhY2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNl X3Jlc3VsdF87IHJldHVybiA6OmZvcGVuIChmaWxlbmFtZSwgbW9kZSk7IH0gd2hpbGUgKDApOwoK fQoKCmlubGluZSBpbnQKQUNFX09TOjpmZmx1c2ggKEZJTEUgKmZwKQp7CgoKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2Vf cmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpmZmx1c2ggKGZwKTsgfSB3aGlsZSAoMCk7 CgoKCgoKfQoKaW5saW5lIHNpemVfdApBQ0VfT1M6OmZyZWFkICh2b2lkICpwdHIsIHNpemVfdCBz aXplLCBzaXplX3QgbmVsZW1zLCBGSUxFICpmcCkKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKIyA2Njk0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNl X3Jlc3VsdF87IHJldHVybiA6OmZyZWFkIChwdHIsIHNpemUsIG5lbGVtcywgZnApOyB9IHdoaWxl ICgwKTsKCn0KCmlubGluZSBzaXplX3QKQUNFX09TOjpmd3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwg c2l6ZV90IHNpemUsIHNpemVfdCBuaXRlbXMsIEZJTEUgKmZwKQp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKIyA2NzI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1 bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmZ3cml0ZSAocHRyLCBzaXplLCBuaXRlbXMsIGZw KTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dHJ1bmNhdGUgKGNvbnN0IEFD RV9UQ0hBUiAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNldCkKewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2NzYwICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0 XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjp0cnVuY2F0ZSAoZmls ZW5hbWUsIG9mZnNldCk7IH0gd2hpbGUgKDApOwoKCgoKCn0KCgoKaW5saW5lIHN0cnVjdCBwYXNz d2QgKgpBQ0VfT1M6OmdldHB3bmFtIChjb25zdCBjaGFyICpuYW1lKQp7CgoKCgogIHJldHVybiA6 OmdldHB3bmFtIChuYW1lKTsKIyA2Nzg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5lIHZvaWQKQUNFX09TOjpzZXRwd2VudCAodm9p ZCkKewoKCiAgOjpzZXRwd2VudCAoKTsKCgoKCn0KCmlubGluZSB2b2lkCkFDRV9PUzo6ZW5kcHdl bnQgKHZvaWQpCnsKCgogIDo6ZW5kcHdlbnQgKCk7CgoKCgp9CgppbmxpbmUgc3RydWN0IHBhc3N3 ZCAqCkFDRV9PUzo6Z2V0cHdlbnQgKHZvaWQpCnsKCgogIHJldHVybiA6OmdldHB3ZW50ICgpOwoK CgoKCgp9CgppbmxpbmUgc3RydWN0IHBhc3N3ZCAqCkFDRV9PUzo6Z2V0cHduYW1fciAoY29uc3Qg Y2hhciAqbmFtZSwgc3RydWN0IHBhc3N3ZCAqcHdlbnQsCiAgICAgICAgICAgICAgICAgICAgY2hh ciAqYnVmZmVyLCBpbnQgYnVmbGVuKQp7CiMgNjg1MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgc3RydWN0IHBhc3N3ZCAqcmVzdWx0OwogIGlu dCBzdGF0dXM7CiMgNjg2MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TLmkiCiAgc3RhdHVzID0gOjpnZXRwd25hbV9yIChuYW1lLCBwd2VudCwgYnVmZmVy LCBidWZsZW4sICZyZXN1bHQpOwoKICBpZiAoc3RhdHVzICE9IDApCiAgICB7CiAgICAgICgqX19l cnJub19sb2NhdGlvbiAoKSkgPSBzdGF0dXM7CiAgICAgIHJlc3VsdCA9IDA7CiAgICB9CgogIHJl dHVybiByZXN1bHQ7CiMgNjkwMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL09TLmkiCn0KCgoKCmlubGluZSBzdHJ1Y3QgaG9zdGVudCAqCkFDRV9PUzo6Z2V0 aG9zdGJ5YWRkcl9yIChjb25zdCBjaGFyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg aW50IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLAogICAgICAgICAg ICAgICAgICAgICAgICAgaG9zdGVudCAqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg QUNFX0hPU1RFTlRfREFUQSBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmhf ZXJybm9wKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2 OTM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIK ICA6Om1lbXNldCAoYnVmZmVyLCAwLCBzaXplb2YgKEFDRV9IT1NURU5UX0RBVEEpKTsKCiAgaWYg KDo6Z2V0aG9zdGJ5YWRkcl9yICgoY2hhciAqKSBhZGRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKICAgICAgICAgICAgICAg ICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwKICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZiAoQUNFX0hPU1RFTlRfREFUQSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAmcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgaF9lcnJub3Ap ID09IDApCiAgICByZXR1cm4gcmVzdWx0OwogIGVsc2UKICAgIHJldHVybiAoc3RydWN0IGhvc3Rl bnQgKikgMDsKIyA2OTg0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKfQoKaW5saW5lIHN0cnVjdCBob3N0ZW50ICoKQUNFX09TOjpnZXRob3N0Ynlu YW1lX3IgKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBob3N0ZW50 ICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfSE9TVEVOVF9EQVRBIGJ1ZmZl ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaF9lcnJub3ApCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDcwMjEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIDo6bWVtc2V0IChidWZmZXIsIDAs IHNpemVvZiAoQUNFX0hPU1RFTlRfREFUQSkpOwoKICBpZiAoOjpnZXRob3N0YnluYW1lX3IgKG5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEFDRV9IT1NURU5U X0RBVEEpLAogICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCwKICAgICAgICAgICAgICAg ICAgICAgICAgIGhfZXJybm9wKSA9PSAwKQogICAgcmV0dXJuIHJlc3VsdDsKICBlbHNlCiAgICBy ZXR1cm4gKHN0cnVjdCBob3N0ZW50ICopIDA7CiMgNzA2MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KIyA3MDc5ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIHN0cnVjdCBzZXJ2ZW50 ICoKQUNFX09TOjpnZXRzZXJ2YnluYW1lX3IgKGNvbnN0IGNoYXIgKnN2YywKICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHNlcnZlbnQgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9TRVJW RU5UX0RBVEEgYnVmKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKIyA3MTAyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1MuaSIKICA6Om1lbXNldCAoYnVmLCAwLCBzaXplb2YgKEFDRV9TRVJWRU5UX0RBVEEpKTsKCiAg aWYgKDo6Z2V0c2VydmJ5bmFtZV9yIChzdmMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm90 bywKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoQUNFX1NFUlZFTlRfREFU QSksCiAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzdWx0KSA9PSAwKQogICAgcmV0dXJuIHJl c3VsdDsKICBlbHNlCiAgICByZXR1cm4gKHN0cnVjdCBzZXJ2ZW50ICopIDA7CiMgNzE0MSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGlu ZSBsb25nCkFDRV9PUzo6aW5ldF9hZGRyIChjb25zdCBjaGFyICpuYW1lKQp7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA3MTgzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICByZXR1cm4gOjppbmV0X2FkZHIgKG5hbWUp OwoKfQoKCgppbmxpbmUgY2hhciAqCkFDRV9PUzo6aW5ldF9udG9hIChjb25zdCBzdHJ1Y3QgaW5f YWRkciBhZGRyKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBkbyB7 IGNoYXIgKiBhY2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVy biA6OmluZXRfbnRvYSAoYWRkcik7IH0gd2hpbGUgKDApOwoKCn0KCgppbmxpbmUgaW50CkFDRV9P Uzo6aW5ldF9wdG9uIChpbnQgZmFtaWx5LCBjb25zdCBjaGFyICpzdHJwdHIsIHZvaWQgKmFkZHJw dHIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBpZiAoZmFt aWx5ID09IDIpCiAgICB7CiAgICAgIHN0cnVjdCBpbl9hZGRyIGluX3ZhbDsKCiAgICAgIGlmIChB Q0VfT1M6OmluZXRfYXRvbiAoc3RycHRyLCAmaW5fdmFsKSkKICAgICAgICB7CiAgICAgICAgICBB Q0VfT1M6Om1lbWNweSAoYWRkcnB0ciwgJmluX3ZhbCwgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcikp OwogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIDA7CiAgICB9Cgog IGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgw KTsKCn0KCmlubGluZSBjb25zdCBjaGFyICoKQUNFX09TOjppbmV0X250b3AgKGludCBmYW1pbHks IGNvbnN0IHZvaWQgKmFkZHJwdHIsIGNoYXIgKnN0cnB0ciwgc2l6ZV90IGxlbikKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGNvbnN0IHVfY2hhciAqcCA9CiAg ICByZWludGVycHJldF9jYXN0PGNvbnN0IHVfY2hhciAqPiAoYWRkcnB0cik7CgogIGlmIChmYW1p bHkgPT0gMikKICAgIHsKICAgICAgY2hhciB0ZW1wWzE2XTsKCgoKCiAgICAgIEFDRV9PUzo6c3By aW50ZiAodGVtcCwKICAgICAgICAgICAgICAgICAgICAgICAiJWQuJWQuJWQuJWQiLAogICAgICAg ICAgICAgICAgICAgICAgIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10pOwoKICAgICAgaWYgKEFDRV9P Uzo6c3RybGVuICh0ZW1wKSA+PSBsZW4pCiAgICAgICAgewogICAgICAgICAgKCpfX2Vycm5vX2xv Y2F0aW9uICgpKSA9IDI4OwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgICAgQUNF X09TOjpzdHJjcHkgKHN0cnB0ciwgdGVtcCk7CiAgICAgIHJldHVybiBzdHJwdHI7CiAgICB9Cgog IGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIDA7IH0gd2hpbGUgKDAp OwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNldF9lcnJub190b19sYXN0X2Vycm9yICh2b2lkKQp7 CiMgNzI3NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T LmkiCiAgcmV0dXJuICgqX19lcnJub19sb2NhdGlvbiAoKSk7Cgp9CgppbmxpbmUgaW50CkFDRV9P Uzo6c2V0X2Vycm5vX3RvX3dzYV9sYXN0X2Vycm9yICh2b2lkKQp7CiMgNzI5NCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgcmV0dXJuICgqX19l cnJub19sb2NhdGlvbiAoKSk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bGFzdF9lcnJvciAodm9p ZCkKewoKCgoKCgoKICByZXR1cm4gKCpfX2Vycm5vX2xvY2F0aW9uICgpKTsKCn0KCmlubGluZSB2 b2lkCkFDRV9PUzo6bGFzdF9lcnJvciAoaW50IGVycm9yKQp7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKCiAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IGVycm9yOwoK fQoKaW5saW5lIHZvaWQKQUNFX09TOjpwZXJyb3IgKGNvbnN0IEFDRV9UQ0hBUiAqcykKewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNzMzNSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgOjpwZXJyb3IgKHMpOwoKfQoKCgoK aW5saW5lIGludApBQ0VfT1M6OnB1dHMgKGNvbnN0IEFDRV9UQ0hBUiAqcykKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6cHV0cyAocyk7IH0gd2hpbGUgKDAp OwoKfQoKaW5saW5lIGludApBQ0VfT1M6OmZwdXRzIChjb25zdCBBQ0VfVENIQVIgKnMsIEZJTEUg KnN0cmVhbSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgogIGRvIHsg aW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6 OmZwdXRzIChzLCBzdHJlYW0pOyB9IHdoaWxlICgwKTsKCn0KCgppbmxpbmUgQUNFX1NpZ25hbEhh bmRsZXIKQUNFX09TOjpzaWduYWwgKGludCBzaWdudW0sIEFDRV9TaWduYWxIYW5kbGVyIGZ1bmMp CnsKICBpZiAoc2lnbnVtID09IDApCiAgICByZXR1cm4gMDsKICBlbHNlCiMgNzM5MiAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgICByZXR1cm4g OjpzaWduYWwgKHNpZ251bSwgZnVuYyk7CiMgNzQwMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjpzeXN0ZW0g KGNvbnN0IEFDRV9UQ0hBUiAqcykKewoKCgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0x OyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzeXN0ZW0gKHMpOyB9IHdoaWxl ICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TOjp0aHJfY29udGludWUgKEFDRV9odGhyZWFkX3Qg dGFyZ2V0X3RocmVhZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiMgNzQzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T LmkiCiAgZG8geyB9IHdoaWxlICgmdGFyZ2V0X3RocmVhZCA9PSAwKTsKICBkbyB7ICgqX19lcnJu b19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7CiMgNzQ0OSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGlu ZSBpbnQKQUNFX09TOjp0aHJfY21wIChBQ0VfaHRocmVhZF90IHQxLCBBQ0VfaHRocmVhZF90IHQy KQp7CgoKCgoKCgogIHJldHVybiA6OnB0aHJlYWRfZXF1YWwgKHQxLCB0Mik7CgoKCgoKCn0KCmlu bGluZSBpbnQKQUNFX09TOjp0aHJfZ2V0Y29uY3VycmVuY3kgKHZvaWQpCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBkbyB7ICgqX19lcnJub19s b2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7CgoKCgoKCn0KCmlubGlu ZSBpbnQKQUNFX09TOjp0aHJfZ2V0cHJpbyAoQUNFX2h0aHJlYWRfdCB0aHJfaWQsIGludCAmcHJp bykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA3NTI2ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBzdHJ1Y3Qg c2NoZWRfcGFyYW0gcGFyYW07CiAgaW50IHJlc3VsdDsKICBpbnQgcG9saWN5ID0gMDsKCiAgZG8g eyByZXN1bHQgPSAoaW50KSAoKHJlc3VsdCA9ICg6OnB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAodGhy X2lkLCAmcG9saWN5LCAmcGFyYW0pKSkgIT0gMCA/ICgoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g cmVzdWx0LCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CgoKICBwcmlvID0gcGFyYW0uX19zY2hlZF9w cmlvcml0eTsKICByZXR1cm4gcmVzdWx0OwojIDc1NTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CiMgNzY5OSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjp0aHJf Z2V0c3BlY2lmaWMgKEFDRV90aHJlYWRfa2V5X3Qga2V5LCB2b2lkICoqZGF0YSkKewojIDc3Mjgg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAg ICAqZGF0YSA9IHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7CiAgICAgIHJldHVybiAwOwojIDc3 NzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9 CgppbmxpbmUgaW50CkFDRV9PUzo6dGhyX2pvaW4gKEFDRV9odGhyZWFkX3QgdGhyX2hhbmRsZSwK ICAgICAgICAgICAgICAgICAgdm9pZCAqKnN0YXR1cykKewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKIyA3ODE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0 XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gKChhY2VfcmVzdWx0XyA9ICg6OnB0aHJlYWRfam9pbiAo dGhyX2hhbmRsZSwgc3RhdHVzKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IGFj ZV9yZXN1bHRfLCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgNzg0OSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09T Ojp0aHJfam9pbiAoQUNFX3RocmVhZF90IHdhaXRlcl9pZCwKICAgICAgICAgICAgICAgICAgQUNF X3RocmVhZF90ICp0aHJfaWQsCiAgICAgICAgICAgICAgICAgIHZvaWQgKipzdGF0dXMpCnsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNzg2NyAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmdGhy X2lkID09IDApOwojIDc4NzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0g YWNlX3Jlc3VsdF87IHJldHVybiAoKGFjZV9yZXN1bHRfID0gKDo6cHRocmVhZF9qb2luICh3YWl0 ZXJfaWQsIHN0YXR1cykpKSAhPSAwID8gKCgqX19lcnJub19sb2NhdGlvbiAoKSkgPSBhY2VfcmVz dWx0XywgLTEpIDogMCk7IH0gd2hpbGUgKDApOwojIDc5MDAgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dGhy X3NldGNhbmNlbHN0YXRlIChpbnQgbmV3X3N0YXRlLCBpbnQgKm9sZF9zdGF0ZSkKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNzkyMyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNl X3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuICgoYWNlX3Jl c3VsdF8gPSAoOjpwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChuZXdfc3RhdGUsIG9sZF9zdGF0ZSkp KSAhPSAwID8gKCgqX19lcnJub19sb2NhdGlvbiAoKSkgPSBhY2VfcmVzdWx0XywgLTEpIDogMCk7 IH0gd2hpbGUgKDApOwojIDc5NDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dGhyX3NldGNhbmNlbHR5cGUg KGludCBuZXdfdHlwZSwgaW50ICpvbGRfdHlwZSkKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKIyA3OTY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2Vf cmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gKChhY2VfcmVzdWx0XyA9ICg6OnB0aHJlYWRf c2V0Y2FuY2VsdHlwZSAobmV3X3R5cGUsIG9sZF90eXBlKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xv Y2F0aW9uICgpKSA9IGFjZV9yZXN1bHRfLCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgNzk4NCAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlu bGluZSBpbnQKQUNFX09TOjp0aHJfY2FuY2VsIChBQ0VfdGhyZWFkX3QgdGhyX2lkKQp7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNzk5OCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3Vs dF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuICgoYWNlX3Jlc3VsdF8g PSAoOjpwdGhyZWFkX2NhbmNlbCAodGhyX2lkKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xvY2F0aW9u ICgpKSA9IGFjZV9yZXN1bHRfLCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgODAxMCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBp bnQKQUNFX09TOjpzaWd3YWl0IChzaWdzZXRfdCAqc2V0LCBpbnQgKnNpZykKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogIGludCBsb2NhbF9zaWc7CiAgaWYgKHNpZyA9PSAw KQogICAgc2lnID0gJmxvY2FsX3NpZzsKIyA4MDU0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkp ID0gOjpzaWd3YWl0IChzZXQsIHNpZyk7CiAgICAgICAgcmV0dXJuICgqX19lcnJub19sb2NhdGlv biAoKSkgPT0gMCA/ICpzaWcgOiAtMTsKIyA4MDczICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnNpZ3RpbWVk d2FpdCAoY29uc3Qgc2lnc2V0X3QgKnNldCwKICAgICAgICAgICAgICAgICAgICAgIHNpZ2luZm9f dCAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1l b3V0KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA4MDk0ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICB0aW1l c3BlY190IHRzOwogIHRpbWVzcGVjX3QgKnRzcDsKCiAgaWYgKHRpbWVvdXQgIT0gMCkKICAgIHsK ICAgICAgdHMgPSAqdGltZW91dDsKICAgICAgdHNwID0gJnRzOwogICAgfQogIGVsc2UKICAgIHRz cCA9IDA7CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jl c3VsdF87IHJldHVybiA6OnNpZ3RpbWVkd2FpdCAoc2V0LCBpbmZvLCB0c3ApOyB9IHdoaWxlICgw KTsKCgoKCgoKCn0KCmlubGluZSB2b2lkCkFDRV9PUzo6dGhyX3Rlc3RjYW5jZWwgKHZvaWQpCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKICA6OnB0aHJl YWRfdGVzdGNhbmNlbCAoKTsKIyA4MTM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnRocl9zaWdzZXRtYXNr IChpbnQgaG93LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqbnNtLAog ICAgICAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqb3NtKQp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwojIDgxNzEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7 IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiAoKGFjZV9yZXN1bHRfID0gKDo6cHRo cmVhZF9zaWdtYXNrIChob3csIG5zbSwgb3NtKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xvY2F0aW9u ICgpKSA9IGFjZV9yZXN1bHRfLCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgODIyMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBp bnQKQUNFX09TOjp0aHJfa2lsbCAoQUNFX3RocmVhZF90IHRocl9pZCwgaW50IHNpZ251bSkKewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA4MjM3ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVz dWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gKChhY2VfcmVzdWx0 XyA9ICg6OnB0aHJlYWRfa2lsbCAodGhyX2lkLCBzaWdudW0pKSkgIT0gMCA/ICgoKl9fZXJybm9f bG9jYXRpb24gKCkpID0gYWNlX3Jlc3VsdF8sIC0xKSA6IDApOyB9IHdoaWxlICgwKTsKIyA4MjY5 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoK aW5saW5lIHNpemVfdApBQ0VfT1M6OnRocl9taW5fc3RhY2sgKHZvaWQpCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA4Mjg5ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICByZXR1cm4gKHNpemVfdCkgQUNFX09T OjpzeXNjb25mIChfU0NfVEhSRUFEX1NUQUNLX01JTik7CiMgODMxOCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09T Ojp0aHJfc2V0Y29uY3VycmVuY3kgKGludCBoaW50KQp7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICBkbyB7IH0gd2hpbGUgKCZoaW50ID09IDAp OwogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxl ICgwKTsKIyA4MzQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnRocl9zZXRwcmlvIChBQ0VfaHRocmVhZF90 IHRocl9pZCwgaW50IHByaW8pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiMgODM4NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmkiCiAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOwogIGludCBwb2xpY3kgPSAwOwogIGlu dCByZXN1bHQ7CgogIGRvIHsgcmVzdWx0ID0gKGludCkgKChyZXN1bHQgPSAoOjpwdGhyZWFkX2dl dHNjaGVkcGFyYW0gKHRocl9pZCwgJnBvbGljeSwgJnBhcmFtKSkpICE9IDAgPyAoKCpfX2Vycm5v X2xvY2F0aW9uICgpKSA9IHJlc3VsdCwgLTEpIDogMCk7IH0gd2hpbGUgKDApOwoKCiAgaWYgKHJl c3VsdCA9PSAtMSkKICAgIHJldHVybiByZXN1bHQ7CiAgcGFyYW0uX19zY2hlZF9wcmlvcml0eSA9 IHByaW87CiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVz dWx0XzsgcmV0dXJuICgocmVzdWx0ID0gKDo6cHRocmVhZF9zZXRzY2hlZHBhcmFtICh0aHJfaWQs IHBvbGljeSwgJnBhcmFtKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IHJlc3Vs dCwgLTEpIDogMCk7IH0gd2hpbGUgKDApOwojIDg0MjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dGhyX3N1 c3BlbmQgKEFDRV9odGhyZWFkX3QgdGFyZ2V0X3RocmVhZCkKewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKIyA4NDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IH0gd2hpbGUgKCZ0YXJnZXRfdGhyZWFkID09 IDApOwogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdo aWxlICgwKTsKIyA4NDU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKfQoKaW5saW5lIHZvaWQKQUNFX09TOjp0aHJfeWllbGQgKHZvaWQpCnsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIDo6c2NoZWRfeWllbGQg KCk7CiMgODQ4NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjpwcmlvcml0eV9jb250cm9sIChBQ0VfaWR0eXBl X3QgaWR0eXBlLCBBQ0VfaWRfdCBpZCwgaW50IGNtZCwgdm9pZCAqYXJnKQp7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGRvIHsgfSB3aGlsZSAoJmlk dHlwZSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZpZCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZj bWQgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmYXJnID09IDApOwogIGRvIHsgKCpfX2Vycm5vX2xv Y2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSB2b2lk CkFDRV9PUzo6cmV3aW5kIChGSUxFICpmcCkKewoKCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgOjpyZXdpbmQgKGZwKTsKCgoKCn0KCmlubGluZSBzc2l6ZV90CkFDRV9PUzo6 cmVhZHYgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICBpb3ZlYyAqaW92LAogICAg ICAgICAgICAgICBpbnQgaW92bGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCgoKCiAgZG8geyBzc2l6ZV90IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNl X3Jlc3VsdF87IHJldHVybiA6OnJlYWR2IChoYW5kbGUsIGlvdiwgaW92bGVuKTsgfSB3aGlsZSAo MCk7Cgp9CgppbmxpbmUgc3NpemVfdApBQ0VfT1M6OndyaXRldiAoQUNFX0hBTkRMRSBoYW5kbGUs CiAgICAgICAgICAgICAgICBjb25zdCBpb3ZlYyAqaW92LAogICAgICAgICAgICAgICAgaW50IGlv dmNudCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKICBkbyB7IGlu dCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjp3 cml0ZXYgKGhhbmRsZSwgKEFDRV9XUklURVZfVFlQRSAqKSBpb3YsIGlvdmNudCk7IH0gd2hpbGUg KDApOwoKCgp9CgppbmxpbmUgc3NpemVfdApBQ0VfT1M6OnJlY3Z2IChBQ0VfSEFORExFIGhhbmRs ZSwKICAgICAgICAgICAgICAgaW92ZWMgKmJ1ZmZlcnMsCiAgICAgICAgICAgICAgIGludCBuKQp7 CiMgODYwMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T LmkiCiAgcmV0dXJuIEFDRV9PUzo6cmVhZHYgKGhhbmRsZSwgYnVmZmVycywgbik7Cgp9Cgppbmxp bmUgc3NpemVfdApBQ0VfT1M6OnNlbmR2IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAg ICAgY29uc3QgaW92ZWMgKmJ1ZmZlcnMsCiAgICAgICAgICAgICAgIGludCBuKQp7CiMgODY0NiAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgcmV0 dXJuIEFDRV9PUzo6d3JpdGV2IChoYW5kbGUsIGJ1ZmZlcnMsIG4pOwoKfQoKaW5saW5lIGludApB Q0VfT1M6OnBvbGwgKHN0cnVjdCBwb2xsZmQgKnBvbGxmZHMsIHVfbG9uZyBsZW4sIGNvbnN0IEFD RV9UaW1lX1ZhbHVlICp0aW1lb3V0KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgogIGludCB0byA9IHRpbWVvdXQgPT0gMCA/IC0xIDogaW50ICh0aW1lb3V0LT5tc2VjICgpKTsK ICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyBy ZXR1cm4gOjpwb2xsIChwb2xsZmRzLCBsZW4sIHRvKTsgfSB3aGlsZSAoMCk7CgoKCgoKCgp9Cgpp bmxpbmUgaW50CkFDRV9PUzo6cG9sbCAoc3RydWN0IHBvbGxmZCAqcG9sbGZkcywgdV9sb25nIGxl biwgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnRpbWVvdXQpCnsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBh Y2VfcmVzdWx0XzsgcmV0dXJuIDo6cG9sbCAocG9sbGZkcywgbGVuLCBpbnQgKHRpbWVvdXQubXNl YyAoKSkpOyB9IHdoaWxlICgwKTsKCgoKCgoKCn0KCmlubGluZSBjaGFyICoKQUNFX09TOjpjb21w aWxlIChjb25zdCBjaGFyICppbnN0cmluZywgY2hhciAqZXhwYnVmLCBjaGFyICplbmRidWYpCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBkbyB7IH0gd2hpbGUgKCZp bnN0cmluZyA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZleHBidWYgPT0gMCk7CiAgZG8geyB9IHdo aWxlICgmZW5kYnVmID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7 IHJldHVybiAwOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBsb25nCkFDRV9PUzo6ZmlsZXNpemUg KGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5hbWUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogIEFDRV9IQU5ETEUgaCA9IEFDRV9PUzo6b3BlbiAoZmlsZW5hbWUsIDAwKTsK ICBpZiAoaCAhPSAtMSkKICAgIHsKICAgICAgbG9uZyBzaXplID0gQUNFX09TOjpmaWxlc2l6ZSAo aCk7CiAgICAgIEFDRV9PUzo6Y2xvc2UgKGgpOwogICAgICByZXR1cm4gc2l6ZTsKICAgIH0KICBl bHNlCiAgICByZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX09TOjpjbG9zZXNvY2tldCAoQUNF X0hBTkRMRSBoYW5kbGUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1 bHRfOyByZXR1cm4gOjpjbG9zZSAoaGFuZGxlKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50 CkFDRV9PUzo6YWNjZXNzIChjb25zdCBjaGFyICpwYXRoLCBpbnQgYW1vZGUpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwojIDg3NDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7 IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmFjY2VzcyAocGF0aCwgYW1vZGUp OyB9IHdoaWxlICgwKTsKCn0KIyA4NzYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIEFDRV9IQU5ETEUKQUNFX09TOjpjcmVhdCAoY29u c3QgQUNFX1RDSEFSICpmaWxlbmFtZSwgbW9kZV90IG1vZGUpCnsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiMgODc4MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBBQ0VfSEFORExFIGFjZV9yZXN1bHRfID0gLTE7IGFj ZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmNyZWF0IChmaWxlbmFtZSwgbW9kZSk7 IH0gd2hpbGUgKDApOwoKCn0KCgoKCgppbmxpbmUgaW50CkFDRV9PUzo6dW5hbWUgKEFDRV91dHNu YW1lICpuYW1lKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGRvIHsg aW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6 OnVuYW1lIChuYW1lKTsgfSB3aGlsZSAoMCk7Cgp9CgoKaW5saW5lIGludApBQ0VfT1M6Omhvc3Ru YW1lIChjaGFyIG5hbWVbXSwgc2l6ZV90IG1heG5hbWVsZW4pCnsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiMgODg0MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgQUNFX3V0c25hbWUgaG9zdF9pbmZvOwoKICBpZiAoQUNF X09TOjp1bmFtZSAoJmhvc3RfaW5mbykgPT0gLTEpCiAgICByZXR1cm4gLTE7CiAgZWxzZQogICAg ewogICAgICBBQ0VfT1M6OnN0cm5jcHkgKG5hbWUsIGhvc3RfaW5mby5ub2RlbmFtZSwgbWF4bmFt ZWxlbik7CiAgICAgIHJldHVybiAwOwogICAgfQoKfQojIDg4NzcgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgppbmxpbmUgaW50CkFDRV9PUzo6bXNn Y3RsIChpbnQgbXNxaWQsIGludCBjbWQsIHN0cnVjdCBtc3FpZF9kcyAqdmFsKQp7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6bXNnY3RsIChtc3FpZCwgY21kLCB2 YWwpOyB9IHdoaWxlICgwKTsKCgoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjptc2dnZXQgKGtl eV90IGtleSwgaW50IG1zZ2ZsZykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87 IHJldHVybiA6Om1zZ2dldCAoa2V5LCBtc2dmbGcpOyB9IHdoaWxlICgwKTsKCgoKCgoKfQoKaW5s aW5lIGludApBQ0VfT1M6Om1zZ3JjdiAoaW50IGludF9pZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVu LAogICAgICAgICAgICAgICAgbG9uZyB0eXBlLCBpbnQgZmxhZ3MpCnsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCgoKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNl X3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6bXNncmN2IChpbnRfaWQsIGJ1ZiwgbGVu LCB0eXBlLCBmbGFncyk7IH0gd2hpbGUgKDApOwojIDg5MjggIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bXNn c25kIChpbnQgaW50X2lkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIGludCBmbGFncykK ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgZG8geyBpbnQgYWNl X3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6bXNnc25k IChpbnRfaWQsIGJ1ZiwgbGVuLCBmbGFncyk7IH0gd2hpbGUgKDApOwojIDg5NTAgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgdV9p bnQKQUNFX09TOjphbGFybSAodV9pbnQgc2VjcykKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgoKCgoKCiAgcmV0dXJuIDo6YWxhcm0gKHNlY3MpOwoKfQoKaW5saW5lIHVfaW50 CkFDRV9PUzo6dWFsYXJtICh1X2ludCB1c2VjcywgdV9pbnQgaW50ZXJ2YWwpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBkbyB7IH0gd2hpbGUgKCZpbnRlcnZhbCA9 PSAwKTsKICByZXR1cm4gOjphbGFybSAodXNlY3MgKiAxMDAwMDAwTCk7CgoKCgoKfQoKaW5saW5l IHVfaW50CkFDRV9PUzo6dWFsYXJtIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYsCiAgICAgICAg ICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHZfaW50ZXJ2YWwpCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGRvIHsgfSB3aGlsZSAoJnR2X2ludGVydmFs ID09IDApOwogIHJldHVybiA6OmFsYXJtICh0di5zZWMgKCkpOwoKCgoKCn0KCmlubGluZSBpbnQK QUNFX09TOjpkbGNsb3NlIChBQ0VfU0hMSUJfSEFORExFIGhhbmRsZSkKewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwojIDkwMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6ZGxjbG9zZSAoaGFuZGxlKTsgfSB3 aGlsZSAoMCk7CiMgOTA1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TLmkiCn0KCmlubGluZSBBQ0VfVENIQVIgKgpBQ0VfT1M6OmRsZXJyb3IgKHZvaWQp CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgZG8geyBjaGFyICog YWNlX3Jlc3VsdF8gPSAwOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gKGNoYXIg Kik6OmRsZXJyb3IgKCk7IH0gd2hpbGUgKDApOwojIDkwODEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgQUNFX1NITElCX0hBTkRM RQpBQ0VfT1M6OmRsb3BlbiAoY29uc3QgQUNFX1RDSEFSICpmbmFtZSwKICAgICAgICAgICAgICAg IGludCBtb2RlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIEFDRV9E TF9UWVBFIGZpbGVuYW1lID0gY29uc3RfY2FzdDxBQ0VfRExfVFlQRT4gKGZuYW1lKTsKCgogIHZv aWQgKmhhbmRsZTsKCgoKCgogIGRvIHsgaGFuZGxlID0gKHZvaWQgKikgOjpkbG9wZW4gKGZpbGVu YW1lLCBtb2RlKTsgfSB3aGlsZSAoMCk7CiMgOTExOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgcmV0dXJuIGhhbmRsZTsKIyA5MTM2ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5l IHZvaWQgKgpBQ0VfT1M6OmRsc3ltIChBQ0VfU0hMSUJfSEFORExFIGhhbmRsZSwKICAgICAgICAg ICAgICAgY29uc3QgQUNFX1RDSEFSICpzbmFtZSkKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgoKCgoKCiAgY29uc3QgY2hhciAqc3ltYm9sbmFtZSA9IHNuYW1lOwojIDkxNzAg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRv IHsgdm9pZCAqIGFjZV9yZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0 dXJuIDo6ZGxzeW0gKGhhbmRsZSwgc3ltYm9sbmFtZSk7IH0gd2hpbGUgKDApOwojIDkxOTYgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9Cgppbmxp bmUgaW50CkFDRV9PUzo6c3RlcCAoY29uc3QgY2hhciAqc3RyLCBjaGFyICpleHBidWYpCnsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBkbyB7IH0gd2hpbGUgKCZzdHIgPT0g MCk7CiAgZG8geyB9IHdoaWxlICgmZXhwYnVmID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2Nh dGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgbG9uZwpB Q0VfT1M6OnN5c2luZm8gKGludCBjbWQsIGNoYXIgKmJ1ZiwgbG9uZyBjb3VudCkKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGRvIHsgfSB3aGlsZSAoJmNtZCA9PSAw KTsKICBkbyB7IH0gd2hpbGUgKCZidWYgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmY291bnQgPT0g MCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIDA7IH0gd2hp bGUgKDApOwoKfQoKaW5saW5lIHNzaXplX3QKQUNFX09TOjp3cml0ZSAoQUNFX0hBTkRMRSBoYW5k bGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlKQp7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwojIDkyNjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgc3NpemVfdCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVz dWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjp3cml0ZSAoaGFuZGxlLCBidWYsIG5ieXRlKTsg fSB3aGlsZSAoMCk7CgoKfQoKaW5saW5lIHNzaXplX3QKQUNFX09TOjp3cml0ZSAoQUNFX0hBTkRM RSBoYW5kbGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlLAogICAgICAgICAgICAgICBB Q0VfT1ZFUkxBUFBFRCAqb3ZlcmxhcHBlZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICBvdmVybGFwcGVkID0gb3ZlcmxhcHBlZDsKIyA5Mjc5ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICByZXR1cm4gQUNFX09TOjp3cml0 ZSAoaGFuZGxlLCBidWYsIG5ieXRlKTsKCn0KCmlubGluZSBzc2l6ZV90CkFDRV9PUzo6cmVhZCAo QUNFX0hBTkRMRSBoYW5kbGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwojIDkzMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGludCByZXN1bHQ7CgoKCgogIGRvIHsgcmVzdWx0ID0g KHNzaXplX3QpIDo6cmVhZCAoaGFuZGxlLCBidWYsIGxlbik7IH0gd2hpbGUgKDApOwoKICBpZiAo cmVzdWx0ID09IC0xICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMTEpCiAgICAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gMTE7CiAgcmV0dXJuIHJlc3VsdDsKCn0KCmlubGluZSBzc2l6ZV90 CkFDRV9PUzo6cmVhZCAoQUNFX0hBTkRMRSBoYW5kbGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwK ICAgICAgICAgICAgICBBQ0VfT1ZFUkxBUFBFRCAqb3ZlcmxhcHBlZCkKewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogIG92ZXJsYXBwZWQgPSBvdmVybGFwcGVkOwoKCgoKICByZXR1 cm4gQUNFX09TOjpyZWFkIChoYW5kbGUsIGJ1ZiwgbGVuKTsKCn0KCmlubGluZSBpbnQKQUNFX09T OjpyZWFkbGluayAoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6KQp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDkzNTQgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAgICBkbyB7IGludCBh Y2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpyZWFk bGluayAocGF0aCwgYnVmLCBidWZzaXopOyB9IHdoaWxlICgwKTsKCgoKCn0KCmlubGluZSBpbnQK QUNFX09TOjpnZXRtc2cgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgc3RydWN0 IHN0cmJ1ZiAqY3RsLAogICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZiAqZGF0YSwKICAgICAg ICAgICAgICAgIGludCAqZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZjdGwg PT0gMCk7CiAgZG8geyB9IHdoaWxlICgmZGF0YSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZmbGFn cyA9PSAwKTsKCgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0x OyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TOjpnZXRwbXNnIChBQ0VfSEFORExF IGhhbmRsZSwKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RyYnVmICpjdGwsCiAgICAgICAgICAg ICAgICAgc3RydWN0IHN0cmJ1ZiAqZGF0YSwKICAgICAgICAgICAgICAgICBpbnQgKmJhbmQsCiAg ICAgICAgICAgICAgICAgaW50ICpmbGFncykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKICBkbyB7IH0gd2hpbGUg KCZjdGwgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmZGF0YSA9PSAwKTsKICBkbyB7IH0gd2hpbGUg KCZiYW5kID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmZsYWdzID09IDApOwoKCiAgZG8geyAoKl9f ZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5s aW5lIGludApBQ0VfT1M6OmdldHJ1c2FnZSAoaW50IHdobywgc3RydWN0IHJ1c2FnZSAqcnUpCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDk0MjYgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9y ZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmdldHJ1c2Fn ZSAoKGVudW0gX19ydXNhZ2Vfd2hvKSB3aG8sIHJ1KTsgfSB3aGlsZSAoMCk7CiMgOTQzNiAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGlu ZSBpbnQKQUNFX09TOjppc2FzdHJlYW0gKEFDRV9IQU5ETEUgaGFuZGxlKQp7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUgPT0g MCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdo aWxlICgwKTsKCn0KCgoKCgoKaW5saW5lIGludApBQ0VfT1M6Om1wcm90ZWN0ICh2b2lkICphZGRy LCBzaXplX3QgbGVuLCBpbnQgcHJvdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj ZV9yZXN1bHRfOyByZXR1cm4gOjptcHJvdGVjdCAoKEFDRV9NTUFQX1RZUEUpIGFkZHIsIGxlbiwg cHJvdCk7IH0gd2hpbGUgKDApOwoKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bXN5bmMgKHZv aWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBzeW5jKQp7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwojIDk0ODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0g YWNlX3Jlc3VsdF87IHJldHVybiA6Om1zeW5jICgoQUNFX01NQVBfVFlQRSkgYWRkciwgbGVuLCBz eW5jKTsgfSB3aGlsZSAoMCk7CiMgOTQ5OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjptdW5tYXAgKHZvaWQg KmFkZHIsIHNpemVfdCBsZW4pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1 bHRfOyByZXR1cm4gOjptdW5tYXAgKChBQ0VfTU1BUF9UWVBFKSBhZGRyLCBsZW4pOyB9IHdoaWxl ICgwKTsKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bWFkdmlzZSAoY2FkZHJfdCBhZGRyLCBz aXplX3QgbGVuLCBpbnQgYWR2aWNlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKCgoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNl X3Jlc3VsdF87IHJldHVybiA6Om1hZHZpc2UgKGFkZHIsIGxlbiwgYWR2aWNlKTsgfSB3aGlsZSAo MCk7CgoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpwdXRtc2cgKEFDRV9IQU5ETEUgaGFuZGxl LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpjdGwsCiAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg c3RyYnVmICpkYXRhLCBpbnQgZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCgoKCgogIGRvIHsgfSB3aGlsZSAoJmZsYWdzID09IDApOwogIGlmIChjdGwgPT0gMCAm JiBkYXRhID09IDApCiAgICB7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAyMjsKICAg ICAgcmV0dXJuIDA7CiAgICB9CgogIGVsc2UgaWYgKGN0bCAhPSAwKQogICAgcmV0dXJuIEFDRV9P Uzo6d3JpdGUgKGhhbmRsZSwgY3RsLT5idWYsIGN0bC0+bGVuKTsKICBlbHNlIGlmIChkYXRhICE9 IDApCiAgICByZXR1cm4gQUNFX09TOjp3cml0ZSAoaGFuZGxlLCBkYXRhLT5idWYsIGRhdGEtPmxl bik7CiAgZWxzZQogICAgewoKICAgICAgY2hhciAqYnVmOwogICAgICBkbyB7IHRyeSB7IGJ1ZiA9 IG5ldyBjaGFyIFtjdGwtPmxlbiArIGRhdGEtPmxlbl07IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9j KSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIC0xOyB9IH0gd2hpbGUgKDAp OwogICAgICBBQ0VfT1M6Om1lbWNweSAoYnVmLCBjdGwtPmJ1ZiwgY3RsLT5sZW4pOwogICAgICBB Q0VfT1M6Om1lbWNweSAoYnVmICsgY3RsLT5sZW4sIGRhdGEtPmJ1ZiwgZGF0YS0+bGVuKTsKICAg ICAgaW50IHJlc3VsdCA9IEFDRV9PUzo6d3JpdGUgKGhhbmRsZSwgYnVmLCBjdGwtPmxlbiArIGRh dGEtPmxlbik7CiAgICAgIGRlbGV0ZSBbXSBidWY7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9 Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6cHV0cG1zZyAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAg ICAgICAgICAgICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqY3RsLAogICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBzdHJidWYgKmRhdGEsCiAgICAgICAgICAgICAgICAgaW50IGJhbmQsCiAgICAg ICAgICAgICAgICAgaW50IGZsYWdzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKCgoKCiAgZG8geyB9IHdoaWxlICgmZmxhZ3MgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgm YmFuZCA9PSAwKTsKICByZXR1cm4gQUNFX09TOjpwdXRtc2cgKGhhbmRsZSwgY3RsLCBkYXRhLCBm bGFncyk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2VtY3RsIChpbnQgaW50X2lkLCBpbnQgc2Vt bnVtLCBpbnQgY21kLCBzZW11biB2YWx1ZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jl c3VsdF87IHJldHVybiA6OnNlbWN0bCAoaW50X2lkLCBzZW1udW0sIGNtZCwgdmFsdWUpOyB9IHdo aWxlICgwKTsKIyA5NjA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnNlbWdldCAoa2V5X3Qga2V5LCBpbnQg bnNlbXMsIGludCBmbGFncykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog IGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJl dHVybiA6OnNlbWdldCAoa2V5LCBuc2VtcywgZmxhZ3MpOyB9IHdoaWxlICgwKTsKCgoKCgoKCn0K CmlubGluZSBpbnQKQUNFX09TOjpzZW1vcCAoaW50IGludF9pZCwgc3RydWN0IHNlbWJ1ZiAqc29w cywgc2l6ZV90IG5zb3BzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBk byB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1 cm4gOjpzZW1vcCAoaW50X2lkLCBzb3BzLCBuc29wcyk7IH0gd2hpbGUgKDApOwoKCgoKCgoKfQoK aW5saW5lIHZvaWQgKgpBQ0VfT1M6OnNobWF0IChpbnQgaW50X2lkLCB2b2lkICpzaG1hZGRyLCBp bnQgc2htZmxnKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBkbyB7 IHZvaWQgKiBhY2VfcmVzdWx0XyA9ICh2b2lkICopIC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1 bHRfOyByZXR1cm4gOjpzaG1hdCAoaW50X2lkLCBzaG1hZGRyLCBzaG1mbGcpOyB9IHdoaWxlICgw KTsKIyA5NjU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnNobWN0bCAoaW50IGludF9pZCwgaW50IGNtZCwg c3RydWN0IHNobWlkX2RzICpidWYpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRf OyByZXR1cm4gOjpzaG1jdGwgKGludF9pZCwgY21kLCBidWYpOyB9IHdoaWxlICgwKTsKCgoKCgoK Cn0KCmlubGluZSBpbnQKQUNFX09TOjpzaG1kdCAodm9pZCAqc2htYWRkcikKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNl X3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6c2htZHQgKChjaGFyICopIHNobWFkZHIp OyB9IHdoaWxlICgwKTsKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2htZ2V0IChrZXlfdCBr ZXksIGludCBzaXplLCBpbnQgZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1 bHRfOyByZXR1cm4gOjpzaG1nZXQgKGtleSwgc2l6ZSwgZmxhZ3MpOyB9IHdoaWxlICgwKTsKCgoK CgoKCn0KCmlubGluZSB2b2lkCkFDRV9PUzo6dHpzZXQgKHZvaWQpCnsKCgoKCgoKICA6OnR6c2V0 ICgpOwoKCgoKfQoKaW5saW5lIGxvbmcKQUNFX09TOjp0aW1lem9uZSAodm9pZCkKewogIHJldHVy biA6OmFjZV90aW1lem9uZSAoKTsKfQoKCmlubGluZSBkb3VibGUKQUNFX09TOjpkaWZmdGltZSAo dGltZV90IHQxLCB0aW1lX3QgdDApCnsKICByZXR1cm4gOjphY2VfZGlmZnRpbWUgKHQxLCB0MCk7 Cn0KCgppbmxpbmUgQUNFX1RDSEFSICoKQUNFX09TOjpjdGltZSAoY29uc3QgdGltZV90ICp0KQp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDk3NDkgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgY2hhciAqIGFjZV9y ZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Y3RpbWUgKHQp OyB9IHdoaWxlICgwKTsKCn0KCgppbmxpbmUgQUNFX1RDSEFSICoKQUNFX09TOjpjdGltZV9yIChj b25zdCB0aW1lX3QgKnQsIEFDRV9UQ0hBUiAqYnVmLCBpbnQgYnVmbGVuKQp7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKICBBQ0VfVENIQVIgKnJlc3VsdDsKCgoKICBk byB7IHJlc3VsdCA9IChBQ0VfVENIQVIgKikgOjpjdGltZV9yICh0LCBidWYpOyB9IHdoaWxlICgw KTsKCiAgaWYgKHJlc3VsdCAhPSAwKQogICAgOjpzdHJuY3B5IChidWYsIHJlc3VsdCwgYnVmbGVu KTsKICByZXR1cm4gYnVmOwojIDk3OTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5pIgp9CgoKaW5saW5lIHN0cnVjdCB0bSAqCkFDRV9PUzo6bG9jYWx0 aW1lIChjb25zdCB0aW1lX3QgKnQpCnsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogIGRvIHsgc3RydWN0IHRtICogYWNlX3Jlc3VsdF8gPSAwOyBhY2VfcmVzdWx0XyA9 IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpsb2NhbHRpbWUgKHQpOyB9IHdoaWxlICgwKTsKCgoKCgoK fQoKaW5saW5lIHN0cnVjdCB0bSAqCkFDRV9PUzo6Z210aW1lIChjb25zdCB0aW1lX3QgKnQpCnsK CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGRvIHsgc3RydWN0IHRtICog YWNlX3Jlc3VsdF8gPSAwOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpnbXRp bWUgKHQpOyB9IHdoaWxlICgwKTsKCgoKCgp9CgppbmxpbmUgc3RydWN0IHRtICoKQUNFX09TOjpn bXRpbWVfciAoY29uc3QgdGltZV90ICp0LCBzdHJ1Y3QgdG0gKnJlcykKewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKIyA5ODQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IHN0cnVjdCB0bSAqIGFjZV9yZXN1bHRf ID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Z210aW1lX3IgKHQsIHJl cyk7IH0gd2hpbGUgKDApOwojIDk4NTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgY2hhciAqCkFDRV9PUzo6YXNjdGltZSAoY29u c3Qgc3RydWN0IHRtICp0KQp7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgZG8geyBjaGFyICogYWNlX3Jlc3VsdF8gPSAwOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRf OyByZXR1cm4gOjphc2N0aW1lICh0KTsgfSB3aGlsZSAoMCk7CgoKCgoKfQoKaW5saW5lIGNoYXIg KgpBQ0VfT1M6OmFzY3RpbWVfciAoY29uc3Qgc3RydWN0IHRtICp0LCBjaGFyICpidWYsIGludCBi dWZsZW4pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCiAgY2hh ciAqcmVzdWx0OwoKCgogIGRvIHsgcmVzdWx0ID0gKGNoYXIgKikgOjphc2N0aW1lX3IgKHQsIGJ1 Zik7IH0gd2hpbGUgKDApOwoKICA6OnN0cm5jcHkgKGJ1ZiwgcmVzdWx0LCBidWZsZW4pOwogIHJl dHVybiBidWY7CiMgOTkxMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TLmkiCn0KCmlubGluZSBzaXplX3QKQUNFX09TOjpzdHJmdGltZSAoY2hhciAqcywg c2l6ZV90IG1heHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgY29u c3Qgc3RydWN0IHRtICp0aW1lcHRyKQp7CgoKCiAgcmV0dXJuIDo6c3RyZnRpbWUgKHMsIG1heHNp emUsIGZvcm1hdCwgdGltZXB0cik7CgoKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6ZmxvY2tf aW5pdCAoQUNFX09TOjphY2VfZmxvY2tfdCAqbG9jaywKICAgICAgICAgICAgICAgICAgICBpbnQg ZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpuYW1lLAogICAgICAg ICAgICAgICAgICAgIG1vZGVfdCBwZXJtcykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwojIDk5OTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5pIgogIGxvY2stPmhhbmRsZV8gPSAtMTsKICBsb2NrLT5sb2NrbmFtZV8gPSAw OwoKICBpZiAobmFtZSAhPSAwKQogICAgewogICAgICBkbyB7IGxvY2stPmhhbmRsZV8gPSAoQUNF X0hBTkRMRSkgQUNFX09TOjpvcGVuIChuYW1lLCBmbGFncywgcGVybXMpOyB9IHdoaWxlICgwKTsK CgoKICAgICAgbG9jay0+bG9ja25hbWVfID0gQUNFX09TOjpzdHJkdXAgKG5hbWUpOwogICAgICBy ZXR1cm4gbG9jay0+aGFuZGxlXyA9PSAtMSA/IC0xIDogMDsKICAgIH0KICBlbHNlCiAgICByZXR1 cm4gMDsKCn0KIyAxMDAzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpmbG9ja193cmxvY2sgKEFDRV9PUzo6YWNl X2Zsb2NrX3QgKmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB3aGVuY2UsCiAgICAg ICAgICAgICAgICAgICAgICBvZmZfdCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgIG9mZl90 IGxlbikKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTAwNzQg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGxv Y2stPmxvY2tfLmxfd2hlbmNlID0gd2hlbmNlOwogIGxvY2stPmxvY2tfLmxfc3RhcnQgPSBzdGFy dDsKICBsb2NrLT5sb2NrXy5sX2xlbiA9IGxlbjsKICBsb2NrLT5sb2NrXy5sX3R5cGUgPSAxOwoK ICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyBy ZXR1cm4gQUNFX09TOjpmY250bCAobG9jay0+aGFuZGxlXywgNywgcmVpbnRlcnByZXRfY2FzdDxs b25nPiAoJmxvY2stPmxvY2tfKSk7IH0gd2hpbGUgKDApOwoKCgp9CgppbmxpbmUgaW50CkFDRV9P Uzo6ZmxvY2tfcmRsb2NrIChBQ0VfT1M6OmFjZV9mbG9ja190ICpsb2NrLAogICAgICAgICAgICAg ICAgICAgICAgc2hvcnQgd2hlbmNlLAogICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgc3RhcnQs CiAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBsZW4pCnsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwojIDEwMTIyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBsb2NrLT5sb2NrXy5sX3doZW5jZSA9IHdoZW5jZTsK ICBsb2NrLT5sb2NrXy5sX3N0YXJ0ID0gc3RhcnQ7CiAgbG9jay0+bG9ja18ubF9sZW4gPSBsZW47 CiAgbG9jay0+bG9ja18ubF90eXBlID0gMDsKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIEFDRV9PUzo6ZmNudGwgKGxvY2stPmhh bmRsZV8sIDcsIHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZz4gKCZsb2NrLT5sb2NrXykpOyB9IHdoaWxl ICgwKTsKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OmZsb2NrX3RyeXdybG9jayAoQUNFX09TOjph Y2VfZmxvY2tfdCAqbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IHdoZW5jZSwK ICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IHN0YXJ0LAogICAgICAgICAgICAgICAgICAg ICAgICAgb2ZmX3QgbGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiMgMTAxNjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5pIgogIGxvY2stPmxvY2tfLmxfd2hlbmNlID0gd2hlbmNlOwogIGxvY2stPmxv Y2tfLmxfc3RhcnQgPSBzdGFydDsKICBsb2NrLT5sb2NrXy5sX2xlbiA9IGxlbjsKICBsb2NrLT5s b2NrXy5sX3R5cGUgPSAxOwoKICBpbnQgcmVzdWx0ID0gMDsKCiAgZG8geyByZXN1bHQgPSAoaW50 KSBBQ0VfT1M6OmZjbnRsIChsb2NrLT5oYW5kbGVfLCA2LCByZWludGVycHJldF9jYXN0PGxvbmc+ ICgmbG9jay0+bG9ja18pKTsgfSB3aGlsZSAoMCk7CgoKCgoKICBpZiAocmVzdWx0ID09IC0xICYm ICgoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDEzIHx8ICgqX19lcnJub19sb2NhdGlvbiAoKSkg PT0gMTEpKQogICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDE2OwoKCiAgcmV0dXJuIHJlc3Vs dDsKCn0KCmlubGluZSBpbnQKQUNFX09TOjpmbG9ja190cnlyZGxvY2sgKEFDRV9PUzo6YWNlX2Zs b2NrX3QgKmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB3aGVuY2UsCiAgICAg ICAgICAgICAgICAgICAgICAgICBvZmZfdCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAg IG9mZl90IGxlbikKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwojIDEwMjI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1MuaSIKICBsb2NrLT5sb2NrXy5sX3doZW5jZSA9IHdoZW5jZTsKICBsb2NrLT5sb2NrXy5s X3N0YXJ0ID0gc3RhcnQ7CiAgbG9jay0+bG9ja18ubF9sZW4gPSBsZW47CiAgbG9jay0+bG9ja18u bF90eXBlID0gMDsKCiAgaW50IHJlc3VsdCA9IDA7CgogIGRvIHsgcmVzdWx0ID0gKGludCkgQUNF X09TOjpmY250bCAobG9jay0+aGFuZGxlXywgNiwgcmVpbnRlcnByZXRfY2FzdDxsb25nPiAoJmxv Y2stPmxvY2tfKSk7IH0gd2hpbGUgKDApOwoKCgoKICBpZiAocmVzdWx0ID09IC0xICYmICgoKl9f ZXJybm9fbG9jYXRpb24gKCkpID09IDEzIHx8ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMTEp KQogICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDE2OwoKCiAgcmV0dXJuIHJlc3VsdDsKCn0K CmlubGluZSBpbnQKQUNFX09TOjpmbG9ja191bmxvY2sgKEFDRV9PUzo6YWNlX2Zsb2NrX3QgKmxv Y2ssCiAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB3aGVuY2UsCiAgICAgICAgICAgICAgICAg ICAgICBvZmZfdCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgIG9mZl90IGxlbikKewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTAyNzMgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGxvY2stPmxvY2tfLmxf d2hlbmNlID0gd2hlbmNlOwogIGxvY2stPmxvY2tfLmxfc3RhcnQgPSBzdGFydDsKICBsb2NrLT5s b2NrXy5sX2xlbiA9IGxlbjsKICBsb2NrLT5sb2NrXy5sX3R5cGUgPSAyOwoKCiAgZG8geyBpbnQg YWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIEFDRV9P Uzo6ZmNudGwgKGxvY2stPmhhbmRsZV8sIDYsIHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZz4gKCZsb2Nr LT5sb2NrXykpOyB9IHdoaWxlICgwKTsKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OmZsb2NrX2Rl c3Ryb3kgKEFDRV9PUzo6YWNlX2Zsb2NrX3QgKmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAg aW50IHVubGlua19maWxlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgaWYgKGxvY2stPmhhbmRsZV8gIT0gLTEpCiAgICB7CiAgICAgIEFDRV9PUzo6ZmxvY2tf dW5sb2NrIChsb2NrKTsKCiAgICAgIEFDRV9PUzo6Y2xvc2UgKGxvY2stPmhhbmRsZV8pOwogICAg ICBsb2NrLT5oYW5kbGVfID0gLTE7CiMgMTAzMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAgICBpZiAobG9jay0+bG9ja25hbWVfICE9IDAp CiAgICAgICAgewogICAgICAgICAgaWYgKHVubGlua19maWxlKQogICAgICAgICAgICBBQ0VfT1M6 OnVubGluayAobG9jay0+bG9ja25hbWVfKTsKICAgICAgICAgIEFDRV9PUzo6ZnJlZSAoc3RhdGlj X2Nhc3Q8dm9pZCAqPiAoY29uc3RfY2FzdDxBQ0VfVENIQVIgKj4gKGxvY2stPmxvY2tuYW1lXykp KTsKCgogICAgICAgIH0KCiAgICAgIGxvY2stPmxvY2tuYW1lXyA9IDA7CiAgICB9CiAgcmV0dXJu IDA7Cn0KCmlubGluZSBpbnQKQUNFX09TOjpleGVjdiAoY29uc3QgY2hhciAqcGF0aCwKICAgICAg ICAgICAgICAgY2hhciAqY29uc3QgYXJndltdKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwojIDEwMzU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj ZV9yZXN1bHRfOyByZXR1cm4gOjpleGVjdiAocGF0aCwgYXJndik7IH0gd2hpbGUgKDApOwoKfQoK aW5saW5lIGludApBQ0VfT1M6OmV4ZWN2ZSAoY29uc3QgY2hhciAqcGF0aCwKICAgICAgICAgICAg ICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSwKICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGVudnBb XSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTAzOTMgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFj ZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmV4ZWN2 ZSAocGF0aCwgYXJndiwgZW52cCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6 OmV4ZWN2cCAoY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFy Z3ZbXSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA0MjYgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50 IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmV4 ZWN2cCAoZmlsZSwgYXJndik7IH0gd2hpbGUgKDApOwoKfQoKCmlubGluZSBGSUxFICoKQUNFX09T OjpmZG9wZW4gKEFDRV9IQU5ETEUgaGFuZGxlLCBjb25zdCBBQ0VfVENIQVIgKm1vZGUpCnsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDEwNDc0ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IEZJTEUgKiBhY2VfcmVz dWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmZkb3BlbiAoaGFu ZGxlLCBtb2RlKTsgfSB3aGlsZSAoMCk7Cgp9CgoKaW5saW5lIGludApBQ0VfT1M6OmdldHJsaW1p dCAoaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0ICpybCkKewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiMgMTA0OTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9y ZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmdldHJsaW1pdCAoKGVudW0gX19ybGltaXRf cmVzb3VyY2UpIHJlc291cmNlLCBybCk7IH0gd2hpbGUgKDApOwoKCgoKfQoKaW5saW5lIGludApB Q0VfT1M6OnNldHJsaW1pdCAoaW50IHJlc291cmNlLCBBQ0VfU0VUUkxJTUlUX1RZUEUgKnJsKQp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAxMDUxMCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNl X3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6c2V0cmxp bWl0ICgoZW51bSBfX3JsaW1pdF9yZXNvdXJjZSkgcmVzb3VyY2UsIHJsKTsgfSB3aGlsZSAoMCk7 CgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c29ja2V0cGFpciAoaW50IGRvbWFpbiwgaW50IHR5 cGUsCiAgICAgICAgICAgICAgICAgICAgaW50IHByb3RvY29sLCBBQ0VfSEFORExFIHN2WzJdKQp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA1MzAgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFj ZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNvY2tl dHBhaXIgKGRvbWFpbiwgdHlwZSwgcHJvdG9jb2wsIHN2KTsgfSB3aGlsZSAoMCk7CgoKfQoKaW5s aW5lIEFDRV9IQU5ETEUKQUNFX09TOjpkdXAgKEFDRV9IQU5ETEUgaGFuZGxlKQp7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKIyAxMDU2MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBBQ0VfSEFORExFIGFjZV9yZXN1bHRf ID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmR1cCAoaGFuZGxlKTsg fSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6ZHVwMiAoQUNFX0hBTkRMRSBvbGRo YW5kbGUsIEFDRV9IQU5ETEUgbmV3aGFuZGxlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiMgMTA1NzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNl X3Jlc3VsdF87IHJldHVybiA6OmR1cDIgKG9sZGhhbmRsZSwgbmV3aGFuZGxlKTsgfSB3aGlsZSAo MCk7Cgp9CgoKCgoKaW5saW5lIEFDRV9ocnRpbWVfdApBQ0VfT1M6OmdldGhydGltZSAoY29uc3Qg QUNFX0hSVGltZXJfT3Agb3ApCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwojIDEwNjA2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1MuaSIKICBkbyB7IH0gd2hpbGUgKCZvcCA9PSAwKTsKCgoKCiAgQUNFX2hydGltZV90IG5vdzsK CgoKCgoKCiAgYXNtIHZvbGF0aWxlICgicmR0c2MiIDogIj1BIiAobm93KSA6IDogIm1lbW9yeSIp OwojIDEwNjMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1MuaSIKICByZXR1cm4gbm93OwojIDEwNzI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OmZkZXRhY2ggKGNv bnN0IGNoYXIgKmZpbGUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK ICBkbyB7IH0gd2hpbGUgKCZmaWxlID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAo KSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6 ZmF0dGFjaCAoaW50IGhhbmRsZSwgY29uc3QgY2hhciAqcGF0aCkKewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKICBk byB7IH0gd2hpbGUgKCZwYXRoID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkg PSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgcGlkX3QKQUNFX09TOjpm b3JrICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKICBkbyB7 IHBpZF90IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVy biA6OmZvcmsgKCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OmdldHBhZ2Vz aXplICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoK CiAgcmV0dXJuIChpbnQpIDo6c3lzY29uZiAoX1NDX1BBR0VTSVpFKTsKCgoKCgoKfQoKaW5saW5l IGludApBQ0VfT1M6OmFsbG9jYXRpb25fZ3JhbnVsYXJpdHkgKHZvaWQpCnsKCgoKCgogIHJldHVy biBBQ0VfT1M6OmdldHBhZ2VzaXplICgpOwoKfQoKaW5saW5lIHBpZF90CkFDRV9PUzo6Z2V0cGlk ICh2b2lkKQp7CiMgMTA4MTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0g YWNlX3Jlc3VsdF87IHJldHVybiA6OmdldHBpZCAoKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUg cGlkX3QKQUNFX09TOjpnZXRwZ2lkIChwaWRfdCBwaWQpCnsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKIyAxMDgzMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBwaWRfdCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVz dWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpfX2dldHBnaWQgKHBpZCk7IH0gd2hpbGUgKDAp OwoKCgp9CgppbmxpbmUgcGlkX3QKQUNFX09TOjpnZXRwcGlkICh2b2lkKQp7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA4NTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgcGlkX3QgYWNlX3Jlc3VsdF8gPSAt MTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Z2V0cHBpZCAoKTsgfSB3aGls ZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2V0cGdpZCAocGlkX3QgcGlkLCBwaWRfdCBw Z2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA4NzAgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50 IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNl dHBnaWQgKHBpZCwgcGdpZCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNl dHJldWlkICh1aWRfdCBydWlkLCB1aWRfdCBldWlkKQp7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwojIDEwODg4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0 XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzZXRyZXVpZCAocnVpZCwgZXVpZCk7IH0gd2hpbGUg KDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNldHJlZ2lkIChnaWRfdCByZ2lkLCBnaWRfdCBl Z2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDEwOTA2ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGlu dCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpz ZXRyZWdpZCAocmdpZCwgZWdpZCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIG9mZl90CkFDRV9P Uzo6bHNlZWsgKEFDRV9IQU5ETEUgaGFuZGxlLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA5NjUgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgb2ZmX3QgYWNlX3Jl c3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6bHNlZWsgKGhh bmRsZSwgb2Zmc2V0LCB3aGVuY2UpOyB9IHdoaWxlICgwKTsKCn0KCgppbmxpbmUgQUNFX0xPRkZf VApBQ0VfT1M6Omxsc2VlayAoQUNFX0hBTkRMRSBoYW5kbGUsIEFDRV9MT0ZGX1Qgb2Zmc2V0LCBp bnQgd2hlbmNlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKCiAg ZG8geyBBQ0VfTE9GRl9UIGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3Vs dF87IHJldHVybiA6OmxzZWVrNjQgKGhhbmRsZSwgb2Zmc2V0LCB3aGVuY2UpOyB9IHdoaWxlICgw KTsKCgoKCgoKCn0KCgppbmxpbmUgaW50CkFDRV9PUzo6ZnNlZWsgKEZJTEUgKmZwLCBsb25nIG9m ZnNldCwgaW50IHdoZW5jZSkKewojIDExMDIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2Vf cmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpmc2VlayAoZnAsIG9mZnNldCwgd2hlbmNl KTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgcGlkX3QKQUNFX09TOjp3YWl0cGlkIChwaWRfdCBw aWQsCiAgICAgICAgICAgICAgICAgQUNFX2V4aXRjb2RlICpzdGF0dXMsCiAgICAgICAgICAgICAg ICAgaW50IHdhaXRfb3B0aW9ucywKICAgICAgICAgICAgICAgICBBQ0VfSEFORExFIGhhbmRsZSkK ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDExMDkzICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IH0gd2hpbGUg KCZoYW5kbGUgPT0gMCk7CiAgZG8geyBwaWRfdCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0 XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjp3YWl0cGlkIChwaWQsIHN0YXR1cywgd2FpdF9vcHRp b25zKTsgfSB3aGlsZSAoMCk7CgoKfQoKaW5saW5lIHBpZF90CkFDRV9PUzo6d2FpdCAocGlkX3Qg cGlkLAogICAgICAgICAgICAgIEFDRV9leGl0Y29kZSAqc3RhdHVzLAogICAgICAgICAgICAgIGlu dCB3YWl0X29wdGlvbnMsCiAgICAgICAgICAgICAgQUNFX0hBTkRMRSBoYW5kbGUpCnsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gQUNFX09TOjp3YWl0cGlkIChwaWQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAg ICAgIHdhaXRfb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUpOwp9Cgpp bmxpbmUgcGlkX3QKQUNFX09TOjp3YWl0IChpbnQgKnN0YXR1cykKewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwojIDExMTI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IHBpZF90IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9y ZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OndhaXQgKHN0YXR1cyk7IH0gd2hpbGUgKDAp OwoKCn0KCmlubGluZSBpbnQKQUNFX09TOjppb2N0bCAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAg ICAgICAgICAgIGludCBjbWQsCiAgICAgICAgICAgICAgIHZvaWQgKnZhbCkKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKIyAxMTE1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6aW9jdGwgKGhhbmRsZSwgY21kLCB2 YWwpOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TOjpraWxsIChwaWRfdCBwaWQs IGludCBzaWdudW0pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKCiAg ZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0 dXJuIDo6a2lsbCAocGlkLCBzaWdudW0pOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNF X09TOjpzaWdhY3Rpb24gKGludCBzaWdudW0sCiAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3Qgc2lnYWN0aW9uICpuc2EsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uICpv c2EpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChzaWdudW0g PT0gMCkKICAgIHJldHVybiAwOwojIDExMjAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2Vf cmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzaWdhY3Rpb24gKHNpZ251bSwgbnNhLCBv c2EpOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBBQ0VfVENIQVIgKgpBQ0VfT1M6OmdldGN3ZCAo QUNFX1RDSEFSICpidWYsIHNpemVfdCBzaXplKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKIyAxMTMwNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09TLmkiCiAgZG8geyBjaGFyICogYWNlX3Jlc3VsdF8gPSAwOyBhY2VfcmVzdWx0XyA9 IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpnZXRjd2QgKGJ1Ziwgc2l6ZSk7IH0gd2hpbGUgKDApOwoK fQoKaW5saW5lIGludApBQ0VfT1M6OnNsZWVwICh1X2ludCBzZWNvbmRzKQp7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwojIDExMzM5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBh Y2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzbGVlcCAoc2Vjb25kcyk7IH0gd2hp bGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNsZWVwIChjb25zdCBBQ0VfVGltZV9WYWx1 ZSAmdHYpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCgogIHRpbWV2 YWwgdHZfY29weSA9IHR2OwogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRf ID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNlbGVjdCAoMCwgMCwgMCwgMCwgJnR2X2NvcHkpOyB9 IHdoaWxlICgwKTsKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bmFub3NsZWVwIChjb25zdCBz dHJ1Y3QgdGltZXNwZWMgKnJlcXVlc3RlZCwKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1l c3BlYyAqcmVtYWluaW5nKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK IyAxMTQxMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T LmkiCiAgZG8geyB9IHdoaWxlICgmcmVtYWluaW5nID09IDApOwoKCgogIEFDRV9UaW1lX1ZhbHVl IHR2IChyZXF1ZXN0ZWQtPnR2X3NlYywKICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkLT50 dl9uc2VjIC8gMTAwMCk7CgoKCgogIHJldHVybiBBQ0VfT1M6OnNsZWVwICh0dik7Cgp9Cgppbmxp bmUgaW50CkFDRV9PUzo6bWtkaXIgKGNvbnN0IEFDRV9UQ0hBUiAqcGF0aCwgbW9kZV90IG1vZGUp CnsKIyAxMTQ4OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVz dWx0XzsgcmV0dXJuIDo6bWtkaXIgKHBhdGgsIG1vZGUpOyB9IHdoaWxlICgwKTsKCn0KCgppbmxp bmUgY2hhciAqCkFDRV9PUzo6Z2V0ZW52IChjb25zdCBjaGFyICpzeW1ib2wpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGRvIHsgY2hhciAqIGFjZV9yZXN1bHRf ID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Z2V0ZW52IChzeW1ib2wp OyB9IHdoaWxlICgwKTsKCn0KIyAxMTUxNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpwdXRlbnYgKGNvbnN0IEFD RV9UQ0hBUiAqc3RyaW5nKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAx MTUyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmki CiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0Xzsg cmV0dXJuIDo6cHV0ZW52ICgoY2hhciAqKSBzdHJpbmcpOyB9IHdoaWxlICgwKTsKCn0KCgppbmxp bmUKQUNFX1N0cl9CdWY6OkFDRV9TdHJfQnVmICh2b2lkICpiLCBpbnQgbCwgaW50IG1heCkKewog IHRoaXMtPm1heGxlbiA9IG1heDsKICB0aGlzLT5sZW4gPSBsOwogIHRoaXMtPmJ1ZiA9IChjaGFy ICopIGI7Cn0KCmlubGluZQpBQ0VfU3RyX0J1Zjo6QUNFX1N0cl9CdWYgKHN0cmJ1ZiAmc2IpCnsK ICB0aGlzLT5tYXhsZW4gPSBzYi5tYXhsZW47CiAgdGhpcy0+bGVuID0gc2IubGVuOwogIHRoaXMt PmJ1ZiA9IHNiLmJ1ZjsKfQoKaW5saW5lIHVfaW50CkFDRV9PUzo6d3NsZW4gKGNvbnN0IFdDaGFy ICpzKQp7CiAgdV9pbnQgbGVuID0gMDsKCiAgd2hpbGUgKCpzKysgIT0gMCkKICAgIGxlbisrOwoK ICByZXR1cm4gbGVuOwp9CgppbmxpbmUgQUNFX09TOjpXQ2hhciAqCkFDRV9PUzo6d3NjcHkgKFdD aGFyICpkZXN0LCBjb25zdCBXQ2hhciAqc3JjKQp7CiAgV0NoYXIgKm9yaWdpbmFsX2Rlc3QgPSBk ZXN0OwoKICB3aGlsZSAoKCpkZXN0KysgPSAqc3JjKyspICE9IDApCiAgICBjb250aW51ZTsKCiAg cmV0dXJuIG9yaWdpbmFsX2Rlc3Q7Cn0KCmlubGluZSBpbnQKQUNFX09TOjp3c2NtcCAoY29uc3Qg V0NoYXIgKnMsIGNvbnN0IFdDaGFyICp0KQp7CiAgY29uc3QgV0NoYXIgKnNjYW4xID0gczsKICBj b25zdCBXQ2hhciAqc2NhbjIgPSB0OwoKICB3aGlsZSAoKnNjYW4xICE9IDAgJiYgKnNjYW4xID09 ICpzY2FuMikKICAgIHsKICAgICAgKytzY2FuMTsKICAgICAgKytzY2FuMjsKICAgIH0KCiAgcmV0 dXJuICpzY2FuMSAtICpzY2FuMjsKfQoKaW5saW5lIGludApBQ0VfT1M6OndzbmNtcCAoY29uc3Qg V0NoYXIgKnMsIGNvbnN0IFdDaGFyICp0LCBzaXplX3QgbGVuKQp7CiAgY29uc3QgV0NoYXIgKnNj YW4xID0gczsKICBjb25zdCBXQ2hhciAqc2NhbjIgPSB0OwoKICB3aGlsZSAobGVuICE9IDAgJiYg KnNjYW4xICE9IDAgJiYgKnNjYW4xID09ICpzY2FuMikKICAgIHsKICAgICAgKytzY2FuMTsKICAg ICAgKytzY2FuMjsKICAgICAgLS1sZW47CiAgICB9CgogIHJldHVybiBsZW4gPT0gMCA/IDAgOiAq c2NhbjEgLSAqc2NhbjI7Cn0KIyAxMTY5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpzaWdhZGRzZXQgKHNpZ3Nl dF90ICpzLCBpbnQgc2lnbnVtKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKIyAxMTcyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVz dWx0XzsgcmV0dXJuIDo6c2lnYWRkc2V0IChzLCBzaWdudW0pOyB9IHdoaWxlICgwKTsKCn0KCmlu bGluZSBpbnQKQUNFX09TOjpzaWdkZWxzZXQgKHNpZ3NldF90ICpzLCBpbnQgc2lnbnVtKQp7CiMg MTE3NTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5p IgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87 IHJldHVybiA6OnNpZ2RlbHNldCAocywgc2lnbnVtKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUg aW50CkFDRV9PUzo6c2lnZW1wdHlzZXQgKHNpZ3NldF90ICpzKQp7CiMgMTE3ODEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFj ZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNpZ2Vt cHR5c2V0IChzKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2lnZmlsbHNl dCAoc2lnc2V0X3QgKnMpCnsKIyAxMTgwNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jl c3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6c2lnZmlsbHNldCAocyk7IH0gd2hpbGUgKDAp OwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNpZ2lzbWVtYmVyIChzaWdzZXRfdCAqcywgaW50IHNp Z251bSkKewojIDExODQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj ZV9yZXN1bHRfOyByZXR1cm4gOjpzaWdpc21lbWJlciAocywgc2lnbnVtKTsgfSB3aGlsZSAoMCk7 Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2lnc3VzcGVuZCAoY29uc3Qgc2lnc2V0X3QgKnNpZ3Nl dCkKewoKCgogIHNpZ3NldF90IHM7CgogIGlmIChzaWdzZXQgPT0gMCkKICAgIHsKICAgICAgc2ln c2V0ID0gJnM7CiAgICAgIEFDRV9PUzo6c2lnZW1wdHlzZXQgKCZzKTsKICAgIH0KICBkbyB7IGlu dCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpz aWdzdXNwZW5kIChzaWdzZXQpOyB9IHdoaWxlICgwKTsKCgoKCn0KCmlubGluZSBpbnQKQUNFX09T OjpzaWdwcm9jbWFzayAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5zcCwgc2lnc2V0X3QgKm9z cCkKewojIDExODgwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9y ZXN1bHRfOyByZXR1cm4gOjpzaWdwcm9jbWFzayAoaG93LCBuc3AsIG9zcCk7IH0gd2hpbGUgKDAp OwoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpwdGhyZWFkX3NpZ21hc2sgKGludCBob3csIGNvbnN0 IHNpZ3NldF90ICpuc3AsIHNpZ3NldF90ICpvc3ApCnsKCgoKCiAgZG8geyBpbnQgYWNlX3Jlc3Vs dF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuICgoYWNlX3Jlc3VsdF8g PSAoOjpwdGhyZWFkX3NpZ21hc2sgKGhvdywgbnNwLCBvc3ApKSkgIT0gMCA/ICgoKl9fZXJybm9f bG9jYXRpb24gKCkpID0gYWNlX3Jlc3VsdF8sIC0xKSA6IDApOyB9IHdoaWxlICgwKTsKIyAxMTkw MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0K IyAxMTkyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T LmkiCmlubGluZQpBQ0VfQ2xlYW51cDo6QUNFX0NsZWFudXAgKHZvaWQpCnsKfQoKaW5saW5lIHZv aWQgKgpBQ0VfT1M6OmJzZWFyY2ggKGNvbnN0IHZvaWQgKmtleSwKICAgICAgICAgICAgICAgICBj b25zdCB2b2lkICpiYXNlLAogICAgICAgICAgICAgICAgIHNpemVfdCBuZWwsCiAgICAgICAgICAg ICAgICAgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgQUNFX0NPTVBBUkVfRlVOQyBjb21w YXIpCnsKCgoKICByZXR1cm4gOjpic2VhcmNoIChrZXksIGJhc2UsIG5lbCwgc2l6ZSwgY29tcGFy KTsKIyAxMTk0NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L09TLmkiCn0KCmlubGluZSB2b2lkCkFDRV9PUzo6cXNvcnQgKHZvaWQgKmJhc2UsCiAgICAgICAg ICAgICAgIHNpemVfdCBuZWwsCiAgICAgICAgICAgICAgIHNpemVfdCB3aWR0aCwKICAgICAgICAg ICAgICAgQUNFX0NPTVBBUkVfRlVOQyBjb21wYXIpCnsKCgoKICA6OnFzb3J0IChiYXNlLCBuZWws IHdpZHRoLCBjb21wYXIpOwoKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2V0dWlkICh1aWRf dCB1aWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDExOTgwICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGlu dCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpz ZXR1aWQgKHVpZCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIHVpZF90CkFDRV9PUzo6Z2V0dWlk ICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAxMTk5NiAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB1 aWRfdCBhY2VfcmVzdWx0XyA9ICh1aWRfdCkgLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87 IHJldHVybiA6OmdldHVpZCAoKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6 c2V0Z2lkIChnaWRfdCBnaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoj IDEyMDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Mu aSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRf OyByZXR1cm4gOjpzZXRnaWQgKGdpZCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGdpZF90CkFD RV9PUzo6Z2V0Z2lkICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK IyAxMjAzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T LmkiCiAgZG8geyBnaWRfdCBhY2VfcmVzdWx0XyA9IChnaWRfdCkgLTE7IGFjZV9yZXN1bHRfID0g YWNlX3Jlc3VsdF87IHJldHVybiA6OmdldGdpZCAoKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUg QUNFX0VYSVRfSE9PSwpBQ0VfT1M6OnNldF9leGl0X2hvb2sgKEFDRV9FWElUX0hPT0sgZXhpdF9o b29rKQp7CiAgQUNFX0VYSVRfSE9PSyBvbGRfaG9vayA9IGV4aXRfaG9va187CiAgZXhpdF9ob29r XyA9IGV4aXRfaG9vazsKICByZXR1cm4gb2xkX2hvb2s7Cn0KCmlubGluZSBpbnQKQUNFX09TOjpp c2F0dHkgKGludCBoYW5kbGUpCnsKIyAxMjA1NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRf OyByZXR1cm4gOjppc2F0dHkgKGhhbmRsZSk7IH0gd2hpbGUgKDApOwoKfQojIDEyMTIyICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIEFD RV9UQ0hBUiAqCkFDRV9PUzo6c3RyZW52ZHVwIChjb25zdCBBQ0VfVENIQVIgKnN0cikKewoKCgoK ICBBQ0VfVENIQVIgKnRlbXAgPSAwOwoKICBpZiAoc3RyWzBdID09ICckJwogICAgICAmJiAodGVt cCA9IEFDRV9PUzo6Z2V0ZW52ICgmc3RyWzFdKSkgIT0gMCkKICAgIHJldHVybiBBQ0VfT1M6OnN0 cmR1cCAodGVtcCk7CiAgZWxzZQogICAgcmV0dXJuIEFDRV9PUzo6c3RyZHVwIChzdHIpOwoKfQoK CmlubGluZSBpbnQKQUNFX0NvdW50ZG93bl9UaW1lOjpzdGFydCAodm9pZCkKewogIGlmICh0aGlz LT5tYXhfd2FpdF90aW1lXyAhPSAwKQogICAgewogICAgICB0aGlzLT5zdGFydF90aW1lXyA9IEFD RV9PUzo6Z2V0dGltZW9mZGF5ICgpOwogICAgICB0aGlzLT5zdG9wcGVkXyA9IDA7CiAgICB9CiAg cmV0dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX0NvdW50ZG93bl9UaW1lOjpzdG9wICh2b2lkKQp7 CiAgaWYgKHRoaXMtPm1heF93YWl0X3RpbWVfICE9IDAgJiYgdGhpcy0+c3RvcHBlZF8gPT0gMCkK ICAgIHsKICAgICAgQUNFX1RpbWVfVmFsdWUgZWxhcHNlZF90aW1lID0KICAgICAgICBBQ0VfT1M6 OmdldHRpbWVvZmRheSAoKSAtIHRoaXMtPnN0YXJ0X3RpbWVfOwoKICAgICAgaWYgKCp0aGlzLT5t YXhfd2FpdF90aW1lXyA+IGVsYXBzZWRfdGltZSkKICAgICAgICAqdGhpcy0+bWF4X3dhaXRfdGlt ZV8gLT0gZWxhcHNlZF90aW1lOwogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgICp0aGlz LT5tYXhfd2FpdF90aW1lXyA9IEFDRV9UaW1lX1ZhbHVlOjp6ZXJvOwoKICAgICAgICB9CiAgICAg IHRoaXMtPnN0b3BwZWRfID0gMTsKICAgIH0KICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0Vf Q291bnRkb3duX1RpbWU6OnVwZGF0ZSAodm9pZCkKewogIHJldHVybiB0aGlzLT5zdG9wICgpID09 IDAgJiYgdGhpcy0+c3RhcnQgKCk7Cn0KIyA3NzY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDc5NzQgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA3OTc1ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDE5ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiIDIKCgoKCgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9GbGFnX01hbmlwLmgi IDEKIyAxNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Zs YWdfTWFuaXAuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvcHJlLmgiIDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL0ZsYWdfTWFuaXAuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRmxhZ19NYW5pcC5oIiAyCgoKCgoKY2xhc3MgQUNFX0Zs YWdfTWFuaXAKewogcHVibGljOgoKCgogIHN0YXRpYyBpbnQgc2V0X2ZsYWdzIChBQ0VfSEFORExF IGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKCgogIHN0YXRpYyBp bnQgY2xyX2ZsYWdzIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg aW50IGZsYWdzKTsKCgogIHN0YXRpYyBpbnQgZ2V0X2ZsYWdzIChBQ0VfSEFORExFIGhhbmRsZSk7 CgoKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9GbGFnX01hbmlwLmkiIDEKCgoKCgppbmxpbmUgaW50CkFDRV9GbGFnX01hbmlwOjpnZXRfZmxh Z3MgKEFDRV9IQU5ETEUgaGFuZGxlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvRmxhZ19NYW5pcC5pIgogIHJldHVybiBBQ0VfT1M6OmZjbnRsIChoYW5kbGUsIDMsIDAp OwoKfQojIDQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv RmxhZ19NYW5pcC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgNDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9GbGFnX01hbmlwLmgiIDIKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0hhbmRsZV9PcHMuaCIgMQojIDE4ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvSGFuZGxlX09wcy5oIgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIg MQojIDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvSGFu ZGxlX09wcy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9PUy5oIiAxCiMgMjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9IYW5kbGVfT3BzLmgiIDIKCmNsYXNzIEFDRV9IYW5kbGVfT3BzCnsKcHVibGlj OgoKCgoKCgoKICBzdGF0aWMgQUNFX0hBTkRMRSBoYW5kbGVfdGltZWRfb3BlbiAoQUNFX1RpbWVf VmFsdWUgKnRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEFDRV9UQ0hBUiAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg cGVybXMpOwp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL0hhbmRsZV9PcHMuaSIgMQojIDQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvSGFuZGxlX09wcy5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgNDMgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9IYW5kbGVfT3BzLmgiIDIKIyAyNiAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAyCiMg MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xpYl9GaW5k LmgiIDEKIyAxNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L0xpYl9GaW5kLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL3ByZS5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9MaWJfRmluZC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9MaWJfRmluZC5oIiAyCgoKCgoKCgpjbGFzcyBBQ0VfTGli X0ZpbmQKewogcHVibGljOgojIDQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvTGliX0ZpbmQuaCIKICBzdGF0aWMgaW50IGxkZmluZCAoY29uc3QgQUNFX1RD SEFSICpmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgQUNFX1RDSEFSICpwYXRobmFtZSwK ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heGxlbik7CgoKCgoKCiAgc3RhdGljIEZJTEUg Kmxkb3BlbiAoY29uc3QgQUNFX1RDSEFSICpmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBBQ0VfVENIQVIgKnR5cGUpOwojIDU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvTGliX0ZpbmQuaCIKICBzdGF0aWMgQUNFX1RDSEFSICpsZG5h bWUgKGNvbnN0IEFDRV9UQ0hBUiAqZW50cnlfcG9pbnQpOwoKCgoKCgogIHN0YXRpYyBpbnQgZ2V0 X3RlbXBfZGlyIChBQ0VfVENIQVIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9sZW4pOwoKCgogIHN0 YXRpYyBBQ0VfSEFORExFIG9wZW5fdGVtcF9maWxlIChjb25zdCBBQ0VfVENIQVIgKm5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGVybSA9IDApOwoKCgoKCgoKICBzdGF0aWMgc2l6 ZV90IHN0cnJlcGwgKGNoYXIgKnMsIGNoYXIgc2VhcmNoLCBjaGFyIHJlcGxhY2UpOwojIDg5ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTGliX0ZpbmQuaCIK ICBzdGF0aWMgY2hhciAqc3Ryc3BsaXRfciAoY2hhciAqcywgY29uc3QgY2hhciAqdG9rZW4sIGNo YXIgKiZuZXh0X3N0YXJ0KTsKIyA5OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL0xpYl9GaW5kLmgiCn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTGliX0ZpbmQuaSIgMQojIDEwMyAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xpYl9GaW5kLmgiIDIKCgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAx MDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9MaWJfRmlu ZC5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9BQ0UuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9Jbml0X0FDRS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9Jbml0X0FDRS5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvSW5pdF9BQ0UuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMQojIDIxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvSW5pdF9BQ0UuaCIgMgojIDMzICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvSW5pdF9BQ0UuaCIK Y2xhc3MgQUNFX0luaXRfQUNFCnsKcHVibGljOgoKCgoKCgogIHN0YXRpYyBpbnQgaW5pdCAodm9p ZCk7CgoKCgoKCiAgc3RhdGljIGludCBmaW5pICh2b2lkKTsKCnByaXZhdGU6CgoKCgoKICBzdGF0 aWMgdV9pbnQgaW5pdF9maW5pX2NvdW50XzsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Jbml0X0FDRS5pIiAxCiMgNjIgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Jbml0X0FDRS5oIiAyCgoKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMg NjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Jbml0X0FD RS5oIiAyCiMgMjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9BQ0UuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9Tb2NrX0Nvbm5lY3QuaCIgMQojIDEzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvU29ja19Db25uZWN0LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTQgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Tb2NrX0Nvbm5lY3QuaCIgMgoKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMQojIDE2 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU29ja19Db25u ZWN0LmgiIDIKCgoKCgoKY2xhc3MgQUNFX0lORVRfQWRkcjsKCmNsYXNzIEFDRV9Tb2NrX0Nvbm5l Y3QKewogcHVibGljOgoKCgoKICBzdGF0aWMgaW50IGJpbmRfcG9ydCAoQUNFX0hBTkRMRSBoYW5k bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9VSU5UMzIgaXBfYWRkciA9ICgoaW5fYWRk cl90KSAweDAwMDAwMDAwKSk7CiMgNDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9Tb2NrX0Nvbm5lY3QuaCIKICBzdGF0aWMgaW50IGdldF9iY2FzdF9hZGRy IChBQ0VfVUlOVDMyICZiY2FzdF9hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEFDRV9UQ0hBUiAqaG9zdG5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFDRV9VSU5UMzIgaG9zdF9hZGRyID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Q0VfSEFORExFIGhhbmRsZSA9IC0xKTsKCgoKCgoKICBzdGF0aWMgaW50IGdldF9pcF9pbnRlcmZh Y2VzIChzaXplX3QgJmNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9J TkVUX0FkZHIgKiZhZGRyX2FycmF5KTsKCgoKCgoKICBzdGF0aWMgaW50IGNvdW50X2ludGVyZmFj ZXMgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICZob3dfbWFueSk7CgoKCiAgc3RhdGljIEFDRV9IQU5ETEUgZ2V0X2hhbmRsZSAodm9pZCk7 Cgp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L1NvY2tfQ29ubmVjdC5pIiAxCiMgNzEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9Tb2NrX0Nvbm5lY3QuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDc0ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU29ja19Db25uZWN0LmgiIDIKIyAyOSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAyCgoK Y2xhc3MgQUNFX1RpbWVfVmFsdWU7CmNsYXNzIEFDRV9NZXNzYWdlX0Jsb2NrOwojIDQ1ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiCmNsYXNzIEFD RSA6IHB1YmxpYyBBQ0VfRmxhZ19NYW5pcCwgcHVibGljIEFDRV9IYW5kbGVfT3BzLAogICAgICAg ICAgICAgICAgICAgICAgIHB1YmxpYyBBQ0VfTGliX0ZpbmQsIHB1YmxpYyBBQ0VfSW5pdF9BQ0Us CiAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIEFDRV9Tb2NrX0Nvbm5lY3QKewoKICBwcml2 YXRlOiBBQ0UgKHZvaWQpOyBBQ0UgKGNvbnN0IEFDRSYpOyBmcmllbmQgY2xhc3MgYWNlX2Rld2Fy bl9ncGx1c3BsdXM7CnB1YmxpYzoKCgoKICBzdGF0aWMgdV9pbnQgbWFqb3JfdmVyc2lvbiAodm9p ZCk7CgoKICBzdGF0aWMgdV9pbnQgbWlub3JfdmVyc2lvbiAodm9pZCk7CgoKCiAgc3RhdGljIHVf aW50IGJldGFfdmVyc2lvbiAodm9pZCk7CgoKCiAgc3RhdGljIGNvbnN0IEFDRV9UQ0hBUiAqIGNv bXBpbGVyX25hbWUgKHZvaWQpOwoKCiAgc3RhdGljIHVfaW50IGNvbXBpbGVyX21ham9yX3ZlcnNp b24gKHZvaWQpOwoKCiAgc3RhdGljIHVfaW50IGNvbXBpbGVyX21pbm9yX3ZlcnNpb24gKHZvaWQp OwoKCiAgc3RhdGljIHVfaW50IGNvbXBpbGVyX2JldGFfdmVyc2lvbiAodm9pZCk7CgoKCiAgc3Rh dGljIGludCBvdXRfb2ZfaGFuZGxlcyAoaW50IGVycm9yKTsKIyAxMzAgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIKICBzdGF0aWMgc3NpemVfdCBy ZWN2IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYs CiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUg KnRpbWVvdXQgPSAwKTsKIyAxNDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9BQ0UuaCIKICBzdGF0aWMgc3NpemVfdCByZWN2IChBQ0VfSEFORExFIGhhbmRs ZSwKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1 ZSAqdGltZW91dCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCByZWN2bXNnIChBQ0VfSEFORExFIGhh bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csCiAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0ID0gMCk7CgogIHN0YXRpYyBzc2l6ZV90IHJl Y3Zmcm9tIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphZGRybGVu LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91 dCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCByZWN2X24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0ID0gMCwKICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQgPSAwKTsKIyAxODIg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIKICBz dGF0aWMgc3NpemVfdCByZWN2X24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwK ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0ID0g MCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQgPSAw KTsKCgogIHN0YXRpYyBzc2l6ZV90IHJlY3YgKEFDRV9IQU5ETEUgaGFuZGxlLCBzaXplX3Qgbiwg Li4uKTsKCiAgc3RhdGljIHNzaXplX3QgcmVjdnYgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAg ICAgICAgICAgICAgICAgICBpb3ZlYyAqaW92LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQg aW92Y250LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGlt ZW91dCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCByZWN2dl9uIChBQ0VfSEFORExFIGhhbmRsZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICBpb3ZlYyAqaW92LAogICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBpb3ZjbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1Rp bWVfVmFsdWUgKnRpbWVvdXQgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq Ynl0ZXNfdHJhbnNmZXJyZWQgPSAwKTsKCiAgc3RhdGljIHNzaXplX3QgcmVjdl9uIChBQ0VfSEFO RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9NZXNzYWdlX0Jsb2NrICpt ZXNzYWdlX2Jsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFs dWUgKnRpbWVvdXQgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpieXRlc190 cmFuc2ZlcnJlZCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCBzZW5kIChBQ0VfSEFORExFIGhhbmRs ZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQgPSAwKTsK IyAyMjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0Uu aCIKICBzdGF0aWMgc3NpemVfdCBzZW5kIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91 dCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCBzZW5kbXNnIChBQ0VfSEFORExFIGhhbmRsZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbXNnaGRyICptc2csCiAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0ID0gMCk7CgogIHN0YXRpYyBzc2l6ZV90IHNlbmR0 byAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLAogICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IHNvY2thZGRyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkZHJsZW4sCiAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCA9IDAp OwoKICBzdGF0aWMgc3NpemVfdCBzZW5kX24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0ID0gMCwKICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQgPSAwKTsKIyAyNTkg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIKICBz dGF0aWMgc3NpemVfdCBzZW5kX24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1l b3V0ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJy ZWQgPSAwKTsKCgogIHN0YXRpYyBzc2l6ZV90IHNlbmQgKEFDRV9IQU5ETEUgaGFuZGxlLCBzaXpl X3QgbiwgLi4uKTsKCiAgc3RhdGljIHNzaXplX3Qgc2VuZHYgKEFDRV9IQU5ETEUgaGFuZGxlLAog ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpb3ZlYyAqaW92LAogICAgICAgICAgICAgICAg ICAgICAgICBpbnQgaW92Y250LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGlt ZV9WYWx1ZSAqdGltZW91dCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCBzZW5kdl9uIChBQ0VfSEFO RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpb3ZlYyAqaW92LAog ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpb3ZjbnQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQgPSAwLAogICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQgPSAwKTsKCiAgc3RhdGljIHNzaXpl X3Qgc2VuZF9uIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEFDRV9NZXNzYWdlX0Jsb2NrICptZXNzYWdlX2Jsb2NrLAogICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQgPSAwLAogICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCA9IDApOwoKCgogIHN0YXRpYyBzc2l6 ZV90IHJlYWRfbiAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCA9IDApOwoKICBzdGF0aWMg c3NpemVfdCB3cml0ZV9uIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxl biwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVycmVkID0g MCk7CgogIHN0YXRpYyBzc2l6ZV90IHJlYWR2X24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAg ICAgICAgICAgICAgICAgICAgIGlvdmVjICppb3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGlvdmNudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5z ZmVycmVkID0gMCk7CgogIHN0YXRpYyBzc2l6ZV90IHdyaXRldl9uIChBQ0VfSEFORExFIGhhbmRs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW92ZWMgKmlvdiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGlvdmNudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCA9IDApOwoKCgoKCgoKICBzdGF0aWMgaW50IGhhbmRs ZV90aW1lZF9hY2NlcHQgKEFDRV9IQU5ETEUgbGlzdGVuZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCByZXN0YXJ0KTsKCgoKCgoKCiAgc3RhdGljIEFDRV9IQU5ETEUg aGFuZGxlX3RpbWVkX2NvbXBsZXRlIChBQ0VfSEFORExFIGxpc3RlbmVyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVv dXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfdGxp ID0gMCk7CgoKCgoKCiAgc3RhdGljIGludCBzZXRfaGFuZGxlX2xpbWl0IChpbnQgbmV3X2xpbWl0 ID0gLTEpOwoKCgoKCgogIHN0YXRpYyBpbnQgbWF4X2hhbmRsZXMgKHZvaWQpOwojIDM0OCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIgogIHN0YXRp YyBBQ0VfVENIQVIgKnN0cmVudmR1cCAoY29uc3QgQUNFX1RDSEFSICpzdHIpOwoKCgoKICBzdGF0 aWMgY29uc3QgY2hhciAqc3RyZW5kIChjb25zdCBjaGFyICpzKTsKCgoKICBzdGF0aWMgY2hhciAq c3RybmV3IChjb25zdCBjaGFyICpzKTsKCgoKICBzdGF0aWMgY2hhciAqc3RybmR1cCAoY29uc3Qg Y2hhciAqc3RyLCBzaXplX3Qgbik7CgoKCiAgc3RhdGljIGNoYXIgKnN0cm5uZXcgKGNvbnN0IGNo YXIgKnN0ciwgc2l6ZV90IG4pOwojIDM4MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL0FDRS5oIgogIHN0YXRpYyBjb25zdCBBQ0VfVENIQVIgKmV4ZWNuYW1l IChjb25zdCBBQ0VfVENIQVIgKnBhdGhuYW1lKTsKCgoKCgoKICBzdGF0aWMgY29uc3QgQUNFX1RD SEFSICpiYXNlbmFtZSAoY29uc3QgQUNFX1RDSEFSICpwYXRobmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQUNFX1RDSEFSIGRlbGltID0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnLycpOwoKCgoKCgoKICBzdGF0aWMgY29uc3QgQUNFX1RDSEFS ICpkaXJuYW1lIChjb25zdCBBQ0VfVENIQVIgKnBhdGhuYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9UQ0hBUiBkZWxpbSA9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnLycpOwojIDQxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL0FDRS5oIgogIHN0YXRpYyBBQ0VfVENIQVIgKnRpbWVzdGFtcCAoQUNF X1RDSEFSIGRhdGVfYW5kX3RpbWVbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCB0aW1lX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXR1cm5fcG9p bnRlcl90b19maXJzdF9kaWdpdCA9IDApOwoKCgoKCgoKICBzdGF0aWMgcGlkX3QgZm9yayAoY29u c3QgQUNFX1RDSEFSICpwcm9ncmFtX25hbWUgPSAiPHVua25vd24+IiwKICAgICAgICAgICAgICAg ICAgICAgaW50IGF2b2lkX3pvbWJpZXMgPSAwKTsKCgoKCgoKCiAgc3RhdGljIGludCBkYWVtb25p emUgKGNvbnN0IEFDRV9UQ0hBUiBwYXRobmFtZVtdID0gIi8iLAogICAgICAgICAgICAgICAgICAg ICAgICBpbnQgY2xvc2VfYWxsX2hhbmRsZXMgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBQ0VfVENIQVIgcHJvZ3JhbV9uYW1lW10gPSAiPHVua25vd24+Iik7CgoKCgoKICBzdGF0 aWMgc2l6ZV90IHJvdW5kX3RvX3BhZ2VzaXplIChvZmZfdCBsZW5ndGgpOwoKCiAgc3RhdGljIHNp emVfdCByb3VuZF90b19hbGxvY2F0aW9uX2dyYW51bGFyaXR5IChvZmZfdCBsZW4pOwoKCgoKICBz dGF0aWMgaW50IGZvcm1hdF9oZXhkdW1wIChjb25zdCBjaGFyICpidWZmZXIsIGludCBzaXplLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9UQ0hBUiAqb2J1ZiwgaW50IG9idWZfc3op OwoKCiAgc3RhdGljIHVfbG9uZyBoYXNoX3BqdyAoY29uc3QgY2hhciAqc3RyKTsKCgogIHN0YXRp YyB1X2xvbmcgaGFzaF9wancgKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7CiMgNDcwICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiCiAgc3Rh dGljIHVfbG9uZyBjcmMzMiAoY29uc3QgY2hhciAqc3RyKTsKCgoKICBzdGF0aWMgdV9sb25nIGNy YzMyIChjb25zdCBjaGFyICpidWYsIEFDRV9VSU5UMzIgbGVuKTsKCgogIHN0YXRpYyB1X2xvbmcg Z2NkICh1X2xvbmcgeCwgdV9sb25nIHkpOwoKCiAgc3RhdGljIHVfbG9uZyBtaW5pbXVtX2ZyYW1l X3NpemUgKHVfbG9uZyBwZXJpb2QxLCB1X2xvbmcgcGVyaW9kMik7CiMgNDg5ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiCiAgc3RhdGljIHVfbG9u ZyBpc19wcmltZSAoY29uc3QgdV9sb25nIG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdV9sb25nIG1pbl9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9s b25nIG1heF9mYWN0b3IpOwoKCgogIHN0YXRpYyBpbnQgbWFwX2Vycm5vIChpbnQgZXJyb3IpOwoK CgogIHN0YXRpYyBjb25zdCBBQ0VfVENIQVIgKnNvY2tfZXJyb3IgKGludCBlcnJvcik7CgoKCgoK CiAgc3RhdGljIGludCBwcm9jZXNzX2FjdGl2ZSAocGlkX3QgcGlkKTsKIyA1MTYgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIKICBzdGF0aWMgaW50 IHRlcm1pbmF0ZV9wcm9jZXNzIChwaWRfdCBwaWQpOwojIDUyNiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIgogIHN0YXRpYyB2b2lkIHVuaXF1ZV9u YW1lIChjb25zdCB2b2lkICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9U Q0hBUiAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CgoK ICBzdGF0aWMgdV9sb25nIGxvZzIgKHVfbG9uZyBudW0pOwoKCiAgc3RhdGljIEFDRV9UQ0hBUiBu aWJibGUyaGV4ICh1X2ludCBuKTsKCgogIHN0YXRpYyB1X2NoYXIgaGV4MmJ5dGUgKEFDRV9UQ0hB UiBjKTsKCgogIHN0YXRpYyBjaGFyIGRlYnVnICh2b2lkKTsKICBzdGF0aWMgdm9pZCBkZWJ1ZyAo Y2hhciBkKTsKCgogIHN0YXRpYyBpbnQgaGFuZGxlX3JlYWRfcmVhZHkgKEFDRV9IQU5ETEUgaGFu ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVl ICp0aW1lb3V0KTsKCgogIHN0YXRpYyBpbnQgaGFuZGxlX3dyaXRlX3JlYWR5IChBQ0VfSEFORExF IGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVf VmFsdWUgKnRpbWVvdXQpOwoKCiAgc3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uX3JlYWR5IChB Q0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0KTsKCgogIHN0YXRpYyBpbnQgaGFuZGxlX3JlYWR5 IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF X1RpbWVfVmFsdWUgKnRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWFk X3JlYWR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd3JpdGVfcmVhZHksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBleGNlcHRpb25fcmVhZHkpOwoKCgogIHN0YXRpYyBp bnQgZW50ZXJfcmVjdl90aW1lZHdhaXQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmdmFsKTsKCgoKICBzdGF0aWMgaW50 IGVudGVyX3NlbmRfdGltZWR3YWl0IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSogdGltZW91dCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJnZhbCk7CgoKCiAgc3RhdGljIHZvaWQg cmVjb3JkX2FuZF9zZXRfbm9uX2Jsb2NraW5nX21vZGUgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJnZhbCk7CgoK CiAgc3RhdGljIHZvaWQgcmVzdG9yZV9ub25fYmxvY2tpbmdfbW9kZSAoQUNFX0hBTkRMRSBoYW5k bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCk7Cgpw cml2YXRlOgoKCgoKCiAgc3RhdGljIHNzaXplX3QgcmVjdl9pIChBQ0VfSEFORExFIGhhbmRsZSwK ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBsZW4pOwoKICBzdGF0aWMgc3NpemVfdCByZWN2X25faSAoQUNFX0hBTkRMRSBo YW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVy cmVkKTsKCiAgc3RhdGljIHNzaXplX3QgcmVjdl9uX2kgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpOwojIDYy NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIgog IHN0YXRpYyBzc2l6ZV90IHJlY3Zfbl9pIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVy cmVkKTsKCiAgc3RhdGljIHNzaXplX3QgcmVjdl9uX2kgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1l X1ZhbHVlICp0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVz X3RyYW5zZmVycmVkKTsKCiAgc3RhdGljIHNzaXplX3QgcmVjdnZfbl9pIChBQ0VfSEFORExFIGhh bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvdmVjICppb3YsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgaW92Y250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCk7CgogIHN0YXRpYyBzc2l6ZV90IHJlY3Z2X25faSAo QUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3ZlYyAqaW92 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlvdmNudCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCk7CgoKCgoKICBzdGF0aWMg c3NpemVfdCBzZW5kX2kgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7 CgogIHN0YXRpYyBzc2l6ZV90IHNlbmRfbl9pIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpOwoKICBz dGF0aWMgc3NpemVfdCBzZW5kX25faSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCk7CiMgNjg0ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiCiAgc3Rh dGljIHNzaXplX3Qgc2VuZF9uX2kgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNm ZXJyZWQpOwoKICBzdGF0aWMgc3NpemVfdCBzZW5kX25faSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCAqYnl0ZXNfdHJhbnNmZXJyZWQpOwoKICBzdGF0aWMgc3NpemVfdCBzZW5kdl9uX2kgKEFDRV9I QU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW92ZWMgKmlv diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpb3ZjbnQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVycmVkKTsKCiAgc3RhdGljIHNzaXpl X3Qgc2VuZHZfbl9pIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGlvdmVjICppb3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW92 Y250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRp bWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVy cmVkKTsKCgogIHN0YXRpYyBzaXplX3QgcGFnZXNpemVfOwoKCiAgc3RhdGljIHNpemVfdCBhbGxv Y2F0aW9uX2dyYW51bGFyaXR5XzsKCgogIHN0YXRpYyB1X2xvbmcgY3JjX3RhYmxlX1tdOwoKCiAg c3RhdGljIGNvbnN0IEFDRV9UQ0hBUiBoZXhfY2hhcnNfW107CgoKICBzdGF0aWMgY2hhciBkZWJ1 Z187Cn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvQUNFLmkiIDEKCgoKCgppbmxpbmUgc3NpemVfdApBQ0U6OnJlYWRfbiAoQUNFX0hBTkRMRSBo YW5kbGUsCiAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICBzaXplX3QgbGVuLAog ICAgICAgICAgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCkKewogIHJldHVybiBBQ0VfT1M6 OnJlYWRfbiAoaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgYnVmLAogICAgICAgICAg ICAgICAgICAgICAgICAgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdHJhbnNm ZXJyZWQpOwp9CgppbmxpbmUgc3NpemVfdApBQ0U6OndyaXRlX24gKEFDRV9IQU5ETEUgaGFuZGxl LAogICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICBzaXplX3QgbGVu LAogICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpCnsKICByZXR1cm4gQUNF X09TOjp3cml0ZV9uIChoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBieXRl c190cmFuc2ZlcnJlZCk7Cn0KCmlubGluZSBzc2l6ZV90CkFDRTo6cmVjdl9uIChBQ0VfSEFORExF IGhhbmRsZSwKICAgICAgICAgICAgIHZvaWQgKmJ1ZiwKICAgICAgICAgICAgIHNpemVfdCBsZW4s CiAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1 ZSAqdGltZW91dCwKICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpCnsKICBp ZiAodGltZW91dCA9PSAwKQogICAgcmV0dXJuIEFDRTo6cmVjdl9uX2kgKGhhbmRsZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLAog ICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg IGJ5dGVzX3RyYW5zZmVycmVkKTsKICBlbHNlCiAgICByZXR1cm4gQUNFOjpyZWN2X25faSAoaGFu ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc190cmFu c2ZlcnJlZCk7Cn0KIyA4MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL0FDRS5pIgppbmxpbmUgc3NpemVfdApBQ0U6OnJlY3ZfbiAoQUNFX0hBTkRMRSBoYW5k bGUsCiAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICBzaXplX3QgbGVuLAogICAg ICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQsCiAgICAgICAgICAgICBzaXpl X3QgKmJ5dGVzX3RyYW5zZmVycmVkKQp7CiAgaWYgKHRpbWVvdXQgPT0gMCkKICAgIHJldHVybiBB Q0U6OnJlY3Zfbl9pIChoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBieXRl c190cmFuc2ZlcnJlZCk7CiAgZWxzZQogICAgcmV0dXJuIEFDRTo6cmVjdl9uX2kgKGhhbmRsZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgYnl0ZXNfdHJhbnNmZXJyZWQpOwp9CgppbmxpbmUgc3NpemVfdApBQ0U6OnJlY3Z2 X24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgIGlvdmVjICppb3YsCiAgICAgICAg ICAgICAgaW50IGlvdmNudCwKICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGlt ZW91dCwKICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVycmVkKQp7CiAgaWYgKHRp bWVvdXQgPT0gMCkKICAgIHJldHVybiBBQ0U6OnJlY3Z2X25faSAoaGFuZGxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBpb3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvdmNudCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdHJhbnNmZXJyZWQpOwogIGVsc2UKICAg IHJldHVybiBBQ0U6OnJlY3Z2X25faSAoaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBpb3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvdmNudCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdHJh bnNmZXJyZWQpOwp9CgppbmxpbmUgc3NpemVfdApBQ0U6OnNlbmRfbiAoQUNFX0hBTkRMRSBoYW5k bGUsCiAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAgICBzaXplX3QgbGVu LAogICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFs dWUgKnRpbWVvdXQsCiAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVycmVkKQp7CiAg aWYgKHRpbWVvdXQgPT0gMCkKICAgIHJldHVybiBBQ0U6OnNlbmRfbl9pIChoYW5kbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAg ICBieXRlc190cmFuc2ZlcnJlZCk7CiAgZWxzZQogICAgcmV0dXJuIEFDRTo6c2VuZF9uX2kgKGhh bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAogICAgICAgICAgICAg ICAgICAgICAgICAgIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdHJh bnNmZXJyZWQpOwp9CiMgMTcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvQUNFLmkiCmlubGluZSBzc2l6ZV90CkFDRTo6c2VuZF9uIChBQ0VfSEFORExFIGhh bmRsZSwKICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAgICAgIHNpemVfdCBs ZW4sCiAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCwKICAgICAgICAg ICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpCnsKICBpZiAodGltZW91dCA9PSAwKQogICAg cmV0dXJuIEFDRTo6c2VuZF9uX2kgKGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBi dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgIGJ5dGVzX3RyYW5zZmVycmVkKTsKICBlbHNlCiAgICByZXR1cm4gQUNFOjpzZW5kX25faSAo aGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwKICAgICAgICAgICAgICAgICAg ICAgICAgICBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBieXRlc190cmFuc2ZlcnJlZCk7Cn0KCmlubGluZSBzc2l6ZV90CkFD RTo6c2VuZHZfbiAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgY29uc3QgaW92ZWMg KmlvdiwKICAgICAgICAgICAgICBpbnQgaW92Y250LAogICAgICAgICAgICAgIGNvbnN0IEFDRV9U aW1lX1ZhbHVlICp0aW1lb3V0LAogICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJy ZWQpCnsKICBpZiAodGltZW91dCA9PSAwKQogICAgcmV0dXJuIEFDRTo6c2VuZHZfbl9pIChoYW5k bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvdiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW92Y250LAogICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc190cmFuc2ZlcnJl ZCk7CiAgZWxzZQogICAgcmV0dXJuIEFDRTo6c2VuZHZfbl9pIChoYW5kbGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlvdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW92Y250LAog ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBieXRlc190cmFuc2ZlcnJlZCk7Cn0KCmlubGluZSBzc2l6ZV90CkFDRTo6c2VuZF9pIChB Q0VfSEFORExFIGhhbmRsZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQp7CgoKCiAgcmV0 dXJuIEFDRV9PUzo6d3JpdGUgKGhhbmRsZSwgKGNvbnN0IGNoYXIgKikgYnVmLCBsZW4pOwoKfQoK aW5saW5lIHNzaXplX3QKQUNFOjpyZWN2X2kgKEFDRV9IQU5ETEUgaGFuZGxlLCB2b2lkICpidWYs IHNpemVfdCBsZW4pCnsKCgoKICByZXR1cm4gQUNFX09TOjpyZWFkIChoYW5kbGUsIChjaGFyICop IGJ1ZiwgbGVuKTsKCn0KCmlubGluZSBpbnQKQUNFOjpoYW5kbGVfcmVhZF9yZWFkeSAoQUNFX0hB TkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVl ICp0aW1lb3V0KQp7CiAgcmV0dXJuIEFDRTo6aGFuZGxlX3JlYWR5IChoYW5kbGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwKTsKfQoKaW5saW5lIGludApBQ0U6OmhhbmRsZV93cml0ZV9yZWFkeSAoQUNFX0hBTkRM RSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAq dGltZW91dCkKewogIHJldHVybiBBQ0U6OmhhbmRsZV9yZWFkeSAoaGFuZGxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCk7Cn0KCmlubGluZSBpbnQKQUNFOjpoYW5kbGVfZXhjZXB0aW9uX3JlYWR5IChBQ0VfSEFO RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9W YWx1ZSAqdGltZW91dCkKewogIHJldHVybiBBQ0U6OmhhbmRsZV9yZWFkeSAoaGFuZGxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgMSk7Cn0KCmlubGluZSB2b2lkCkFDRTo6dW5pcXVlX25hbWUgKGNvbnN0IHZvaWQg Km9iamVjdCwKICAgICAgICAgICAgICAgICAgQUNFX1RDSEFSICpuYW1lLAogICAgICAgICAgICAg ICAgICBzaXplX3QgbGVuZ3RoKQp7CiAgQUNFX09TOjp1bmlxdWVfbmFtZSAob2JqZWN0LCBuYW1l LCBsZW5ndGgpOwp9CgppbmxpbmUgdV9sb25nCkFDRTo6bG9nMiAodV9sb25nIG51bSkKewogIHVf bG9uZyBsb2cgPSAwOwoKICBmb3IgKDsKICAgICAgIG51bSA+IDA7CiAgICAgICBsb2crKykKICAg IG51bSA+Pj0gMTsKCiAgcmV0dXJuIGxvZzsKfQoKaW5saW5lIEFDRV9UQ0hBUgpBQ0U6Om5pYmJs ZTJoZXggKHVfaW50IG4pCnsKCiAgcmV0dXJuIEFDRTo6aGV4X2NoYXJzX1tuICYgMHgwZl07Cn0K CmlubGluZSB1X2NoYXIKQUNFOjpoZXgyYnl0ZSAoQUNFX1RDSEFSIGMpCnsKICBpZiAoaXNkaWdp dCAoYykpCiAgICByZXR1cm4gKHVfY2hhcikgKGMgLSAnMCcpOwogIGVsc2UgaWYgKGlzbG93ZXIg KGMpKQogICAgcmV0dXJuICh1X2NoYXIpICgxMCArIGMgLSAnYScpOwogIGVsc2UKICAgIHJldHVy biAodV9jaGFyKSAoMTAgKyBjIC0gJ0EnKTsKfQoKaW5saW5lIGNoYXIKQUNFOjpkZWJ1ZyAodm9p ZCkKewogIHJldHVybiBBQ0U6OmRlYnVnXzsKfQoKaW5saW5lIHZvaWQKQUNFOjpkZWJ1ZyAoY2hh ciBjKQp7CiAgQUNFOjpkZWJ1Z18gPSBjOwp9CgppbmxpbmUgY2hhciAqCkFDRTo6c3RybmV3IChj b25zdCBjaGFyICpzKQp7CiAgY2hhciAqdCA9IG5ldyBjaGFyIFs6OnN0cmxlbihzKSArIDFdOwog IGlmICh0ID09IDApCiAgICByZXR1cm4gMDsKICBlbHNlCiAgICByZXR1cm4gQUNFX09TOjpzdHJj cHkgKHQsIHMpOwp9CiMgNzI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvQUNFLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA3MjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIgMgojIDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5oIiAyCgoKCgoKCgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIy ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9C bG9jay5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9NYWxsb2MuaCIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvTWFsbG9jLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2MuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvYy5oIiAyCgoKCgoKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX01zZy5oIiAxCiMg MTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNn LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3By ZS5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9Mb2dfTXNnLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIgMgojIDkyICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX01zZy5oIgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfUmVjb3JkLmgiIDEKIyAx NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19SZWNv cmQuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv T1MuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvTG9nX1JlY29yZC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9Mb2dfUHJpb3JpdHkuaCIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX1ByaW9yaXR5LmgiCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTYgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfUHJpb3JpdHkuaCIg MgojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9n X1ByaW9yaXR5LmgiCmVudW0gQUNFX0xvZ19Qcmlvcml0eQp7CgoKCiAgTE1fU0hVVERPV04gPSAw MSwKCgogIExNX1RSQUNFID0gMDIsCgoKCiAgTE1fREVCVUcgPSAwNCwKCgogIExNX0lORk8gPSAw MTAsCgoKCiAgTE1fTk9USUNFID0gMDIwLAoKCiAgTE1fV0FSTklORyA9IDA0MCwKCgogIExNX1NU QVJUVVAgPSAwMTAwLAoKCiAgTE1fRVJST1IgPSAwMjAwLAoKCiAgTE1fQ1JJVElDQUwgPSAwNDAw LAoKCgogIExNX0FMRVJUID0gMDEwMDAsCgoKCiAgTE1fRU1FUkdFTkNZID0gMDIwMDAsCgoKICBM TV9NQVggPSBMTV9FTUVSR0VOQ1ksCgoKCiAgTE1fRU5TVVJFXzMyX0JJVFMgPSAweDdGRkZGRkZG Cn07CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9w b3N0LmgiIDEKIyA3NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL0xvZ19Qcmlvcml0eS5oIiAyCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9Mb2dfUmVjb3JkLmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyMyAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19SZWNvcmQuaCIgMgoKCgoKCgpj bGFzcyBBQ0VfTG9nX1JlY29yZAp7CnB1YmxpYzoKCiAgZW51bQogIHsKCiAgICBNQVhMT0dNU0dM RU4gPSA0ICogMTAyNCwKCgogICAgQUxJR05fV09SREIgPSA4LAoKCgoKICAgIFZFUkJPU0VfTEVO ID0gMTI4LAoKCiAgICBNQVhWRVJCT1NFTE9HTVNHTEVOID0gVkVSQk9TRV9MRU4gKyBNQVhMT0dN U0dMRU4KICB9OwojIDU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvTG9nX1JlY29yZC5oIgogIEFDRV9Mb2dfUmVjb3JkICh2b2lkKTsKICBBQ0VfTG9nX1Jl Y29yZCAoQUNFX0xvZ19Qcmlvcml0eSBscCwKICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lX3N0 YW1wLAogICAgICAgICAgICAgICAgICBsb25nIHBpZCk7CiAgQUNFX0xvZ19SZWNvcmQgKEFDRV9M b2dfUHJpb3JpdHkgbHAsCiAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0 aW1lX3N0YW1wLAogICAgICAgICAgICAgICAgICBsb25nIHBpZCk7CgoKICB+QUNFX0xvZ19SZWNv cmQgKHZvaWQpOwoKCgoKICBpbnQgcHJpbnQgKGNvbnN0IEFDRV9UQ0hBUiBob3N0X25hbWVbXSwK ICAgICAgICAgICAgIHVfbG9uZyB2ZXJib3NlX2ZsYWcsCgogICAgICAgICAgICAgRklMRSAqZnAg PSBzdGRlcnIpOwoKCgoKCgoKICBpbnQgcHJpbnQgKGNvbnN0IEFDRV9UQ0hBUiBob3N0X25hbWVb XSwKICAgICAgICAgICAgIHVfbG9uZyB2ZXJib3NlX2ZsYWcsCiAgICAgICAgICAgICBvc3RyZWFt ICZzdHJlYW0pOwoKCiAgaW50IGZvcm1hdF9tc2cgKGNvbnN0IEFDRV9UQ0hBUiBob3N0X25hbWVb XSwKICAgICAgICAgICAgICAgICAgdV9sb25nIHZlcmJvc2VfZmxhZywKICAgICAgICAgICAgICAg ICAgQUNFX1RDSEFSICp2ZXJib3NlX21zZyk7CiMgMTA0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX1JlY29yZC5oIgogIHN0YXRpYyBjb25zdCBBQ0Vf VENIQVIgKnByaW9yaXR5X25hbWUgKEFDRV9Mb2dfUHJpb3JpdHkgcCk7CgoKICBzdGF0aWMgdm9p ZCBwcmlvcml0eV9uYW1lIChBQ0VfTG9nX1ByaW9yaXR5IHAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpuYW1lKTsKCgoKICB2b2lkIGVuY29kZSAodm9pZCk7 CgoKICB2b2lkIGRlY29kZSAodm9pZCk7CgoKCgogIGxvbmcgdHlwZSAodm9pZCkgY29uc3Q7CgoK ICB2b2lkIHR5cGUgKGxvbmcpOwoKCgoKCgogIHVfbG9uZyBwcmlvcml0eSAodm9pZCkgY29uc3Q7 CgoKCiAgdm9pZCBwcmlvcml0eSAodV9sb25nIG51bSk7CgoKICBsb25nIGxlbmd0aCAodm9pZCkg Y29uc3Q7CgoKICB2b2lkIGxlbmd0aCAobG9uZyk7CgoKICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAm dGltZV9zdGFtcCAodm9pZCkgY29uc3Q7CgoKICB2b2lkIHRpbWVfc3RhbXAgKGNvbnN0IEFDRV9U aW1lX1ZhbHVlICYpOwoKCiAgbG9uZyBwaWQgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBwaWQgKGxv bmcpOwoKCiAgQUNFX1RDSEFSICptc2dfZGF0YSAodm9pZCk7CgoKICB2b2lkIG1zZ19kYXRhIChj b25zdCBBQ0VfVENIQVIgKmRhdGEpOwoKCiAgdm9pZCBtc2dfZGF0YV9sZW4gKHNpemVfdCBsZW4p OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZh dGU6CgogIHZvaWQgcm91bmRfdXAgKHZvaWQpOwoKCgoKCgoKICBBQ0VfSU5UMzIgbGVuZ3RoXzsK CgogIGxvbmcgdHlwZV87CgoKICBBQ0VfVGltZV9WYWx1ZSB0aW1lX3N0YW1wXzsKCgogIGxvbmcg cGlkXzsKCgogIEFDRV9UQ0hBUiBtc2dfZGF0YV9bTUFYTE9HTVNHTEVOXTsKCgogIHN0YXRpYyBj b25zdCBBQ0VfVENIQVIgKnByaW9yaXR5X25hbWVzX1tdOwp9OwoKCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19SZWNvcmQuaSIgMQoKCgoKCmlu bGluZQpBQ0VfTG9nX1JlY29yZDo6fkFDRV9Mb2dfUmVjb3JkICh2b2lkKQp7Cn0KCmlubGluZSB2 b2lkCkFDRV9Mb2dfUmVjb3JkOjplbmNvZGUgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+bGVuZ3RoXyA9IChfX2V4dGVuc2lvbl9fICh7IHJl Z2lzdGVyIHVuc2lnbmVkIGludCBfX3Y7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAodGhpcy0+ bGVuZ3RoXykpIF9fdiA9ICgoKCh0aGlzLT5sZW5ndGhfKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8 ICgoKHRoaXMtPmxlbmd0aF8pICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0aGlzLT5sZW5ndGhf KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGhpcy0+bGVuZ3RoXykgJiAweDAwMDAwMGZmKSA8 PCAyNCkpOyBlbHNlIF9fYXNtX18gX192b2xhdGlsZV9fICgicm9ydyAkOCwgJXcwOyIgInJvcmwg JDE2LCAlMDsiICJyb3J3ICQ4LCAldzAiIDogIj1yIiAoX192KSA6ICIwIiAoKHVuc2lnbmVkIGlu dCkgKHRoaXMtPmxlbmd0aF8pKSA6ICJjYyIpOyBfX3Y7IH0pKTsKICB0aGlzLT50eXBlXyA9IChf X2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3Y7IGlmIChfX2J1aWx0aW5f Y29uc3RhbnRfcCAodGhpcy0+dHlwZV8pKSBfX3YgPSAoKCgodGhpcy0+dHlwZV8pICYgMHhmZjAw MDAwMCkgPj4gMjQpIHwgKCgodGhpcy0+dHlwZV8pICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0 aGlzLT50eXBlXykgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRoaXMtPnR5cGVfKSAmIDB4MDAw MDAwZmYpIDw8IDI0KSk7IGVsc2UgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyb3J3ICQ4LCAldzA7 IiAicm9ybCAkMTYsICUwOyIgInJvcncgJDgsICV3MCIgOiAiPXIiIChfX3YpIDogIjAiICgodW5z aWduZWQgaW50KSAodGhpcy0+dHlwZV8pKSA6ICJjYyIpOyBfX3Y7IH0pKTsKCgogIHRoaXMtPnRp bWVfc3RhbXBfLnNlYyAoKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9f djsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wICh0aGlzLT50aW1lX3N0YW1wXy5zZWMgKCkpKSBf X3YgPSAoKCgodGhpcy0+dGltZV9zdGFtcF8uc2VjICgpKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8 ICgoKHRoaXMtPnRpbWVfc3RhbXBfLnNlYyAoKSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHRo aXMtPnRpbWVfc3RhbXBfLnNlYyAoKSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRoaXMtPnRp bWVfc3RhbXBfLnNlYyAoKSkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOyBlbHNlIF9fYXNtX18gX192 b2xhdGlsZV9fICgicm9ydyAkOCwgJXcwOyIgInJvcmwgJDE2LCAlMDsiICJyb3J3ICQ4LCAldzAi IDogIj1yIiAoX192KSA6ICIwIiAoKHVuc2lnbmVkIGludCkgKHRoaXMtPnRpbWVfc3RhbXBfLnNl YyAoKSkpIDogImNjIik7IF9fdjsgfSkpKTsKICB0aGlzLT50aW1lX3N0YW1wXy51c2VjICgoX19l eHRlbnNpb25fXyAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgX192OyBpZiAoX19idWlsdGluX2Nv bnN0YW50X3AgKHRoaXMtPnRpbWVfc3RhbXBfLnVzZWMgKCkpKSBfX3YgPSAoKCgodGhpcy0+dGlt ZV9zdGFtcF8udXNlYyAoKSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0aGlzLT50aW1lX3N0 YW1wXy51c2VjICgpKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGhpcy0+dGltZV9zdGFtcF8u dXNlYyAoKSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRoaXMtPnRpbWVfc3RhbXBfLnVzZWMg KCkpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJv cncgJDgsICV3MDsiICJyb3JsICQxNiwgJTA7IiAicm9ydyAkOCwgJXcwIiA6ICI9ciIgKF9fdikg OiAiMCIgKCh1bnNpZ25lZCBpbnQpICh0aGlzLT50aW1lX3N0YW1wXy51c2VjICgpKSkgOiAiY2Mi KTsgX192OyB9KSkpOwogIHRoaXMtPnBpZF8gPSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciB1 bnNpZ25lZCBpbnQgX192OyBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKHRoaXMtPnBpZF8pKSBf X3YgPSAoKCgodGhpcy0+cGlkXykgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0aGlzLT5waWRf KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGhpcy0+cGlkXykgJiAweDAwMDBmZjAwKSA8PCA4 KSB8ICgoKHRoaXMtPnBpZF8pICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9fIF9f dm9sYXRpbGVfXyAoInJvcncgJDgsICV3MDsiICJyb3JsICQxNiwgJTA7IiAicm9ydyAkOCwgJXcw IiA6ICI9ciIgKF9fdikgOiAiMCIgKCh1bnNpZ25lZCBpbnQpICh0aGlzLT5waWRfKSkgOiAiY2Mi KTsgX192OyB9KSk7Cn0KCmlubGluZSB2b2lkCkFDRV9Mb2dfUmVjb3JkOjpkZWNvZGUgKHZvaWQp CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+dGltZV9z dGFtcF8gPSBBQ0VfVGltZV9WYWx1ZSAoKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWdu ZWQgaW50IF9fdjsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wICh0aGlzLT50aW1lX3N0YW1wXy5z ZWMoKSkpIF9fdiA9ICgoKCh0aGlzLT50aW1lX3N0YW1wXy5zZWMoKSkgJiAweGZmMDAwMDAwKSA+ PiAyNCkgfCAoKCh0aGlzLT50aW1lX3N0YW1wXy5zZWMoKSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8 ICgoKHRoaXMtPnRpbWVfc3RhbXBfLnNlYygpKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGhp cy0+dGltZV9zdGFtcF8uc2VjKCkpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9f IF9fdm9sYXRpbGVfXyAoInJvcncgJDgsICV3MDsiICJyb3JsICQxNiwgJTA7IiAicm9ydyAkOCwg JXcwIiA6ICI9ciIgKF9fdikgOiAiMCIgKCh1bnNpZ25lZCBpbnQpICh0aGlzLT50aW1lX3N0YW1w Xy5zZWMoKSkpIDogImNjIik7IF9fdjsgfSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3Y7IGlm IChfX2J1aWx0aW5fY29uc3RhbnRfcCAodGhpcy0+dGltZV9zdGFtcF8udXNlYygpKSkgX192ID0g KCgoKHRoaXMtPnRpbWVfc3RhbXBfLnVzZWMoKSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0 aGlzLT50aW1lX3N0YW1wXy51c2VjKCkpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0aGlzLT50 aW1lX3N0YW1wXy51c2VjKCkpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0aGlzLT50aW1lX3N0 YW1wXy51c2VjKCkpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoInJvcncgJDgsICV3MDsiICJyb3JsICQxNiwgJTA7IiAicm9ydyAkOCwgJXcwIiA6ICI9 ciIgKF9fdikgOiAiMCIgKCh1bnNpZ25lZCBpbnQpICh0aGlzLT50aW1lX3N0YW1wXy51c2VjKCkp KSA6ICJjYyIpOyBfX3Y7IH0pKSk7CiAgdGhpcy0+dHlwZV8gPSAoX19leHRlbnNpb25fXyAoeyBy ZWdpc3RlciB1bnNpZ25lZCBpbnQgX192OyBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKHRoaXMt PnR5cGVfKSkgX192ID0gKCgoKHRoaXMtPnR5cGVfKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgo KHRoaXMtPnR5cGVfKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGhpcy0+dHlwZV8pICYgMHgw MDAwZmYwMCkgPDwgOCkgfCAoKCh0aGlzLT50eXBlXykgJiAweDAwMDAwMGZmKSA8PCAyNCkpOyBl bHNlIF9fYXNtX18gX192b2xhdGlsZV9fICgicm9ydyAkOCwgJXcwOyIgInJvcmwgJDE2LCAlMDsi ICJyb3J3ICQ4LCAldzAiIDogIj1yIiAoX192KSA6ICIwIiAoKHVuc2lnbmVkIGludCkgKHRoaXMt PnR5cGVfKSkgOiAiY2MiKTsgX192OyB9KSk7CiAgdGhpcy0+cGlkXyA9IChfX2V4dGVuc2lvbl9f ICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3Y7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAo dGhpcy0+cGlkXykpIF9fdiA9ICgoKCh0aGlzLT5waWRfKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8 ICgoKHRoaXMtPnBpZF8pICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0aGlzLT5waWRfKSAmIDB4 MDAwMGZmMDApIDw8IDgpIHwgKCgodGhpcy0+cGlkXykgJiAweDAwMDAwMGZmKSA8PCAyNCkpOyBl bHNlIF9fYXNtX18gX192b2xhdGlsZV9fICgicm9ydyAkOCwgJXcwOyIgInJvcmwgJDE2LCAlMDsi ICJyb3J3ICQ4LCAldzAiIDogIj1yIiAoX192KSA6ICIwIiAoKHVuc2lnbmVkIGludCkgKHRoaXMt PnBpZF8pKSA6ICJjYyIpOyBfX3Y7IH0pKTsKICB0aGlzLT5sZW5ndGhfID0gKF9fZXh0ZW5zaW9u X18gKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9fdjsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9w ICh0aGlzLT5sZW5ndGhfKSkgX192ID0gKCgoKHRoaXMtPmxlbmd0aF8pICYgMHhmZjAwMDAwMCkg Pj4gMjQpIHwgKCgodGhpcy0+bGVuZ3RoXykgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHRoaXMt Pmxlbmd0aF8pICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0aGlzLT5sZW5ndGhfKSAmIDB4MDAw MDAwZmYpIDw8IDI0KSk7IGVsc2UgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyb3J3ICQ4LCAldzA7 IiAicm9ybCAkMTYsICUwOyIgInJvcncgJDgsICV3MCIgOiAiPXIiIChfX3YpIDogIjAiICgodW5z aWduZWQgaW50KSAodGhpcy0+bGVuZ3RoXykpIDogImNjIik7IF9fdjsgfSkpOwp9CgppbmxpbmUg bG9uZwpBQ0VfTG9nX1JlY29yZDo6dHlwZSAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnR5cGVfOwp9CgppbmxpbmUgdm9p ZApBQ0VfTG9nX1JlY29yZDo6dHlwZSAobG9uZyB0KQp7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICB0aGlzLT50eXBlXyA9IHQ7Cn0KCmlubGluZSBsb25nCkFDRV9Mb2df UmVjb3JkOjpsZW5ndGggKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmxlbmd0aF87Cn0KCmlubGluZSB2b2lkCkFDRV9M b2dfUmVjb3JkOjpsZW5ndGggKGxvbmcgbCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICB0aGlzLT5sZW5ndGhfID0gc3RhdGljX2Nhc3Q8QUNFX1VJTlQzMj4gKGwp Owp9CgppbmxpbmUgY29uc3QgQUNFX1RpbWVfVmFsdWUgJgpBQ0VfTG9nX1JlY29yZDo6dGltZV9z dGFtcCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgcmV0dXJuIHRoaXMtPnRpbWVfc3RhbXBfOwp9CgppbmxpbmUgdm9pZApBQ0VfTG9n X1JlY29yZDo6dGltZV9zdGFtcCAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnRzKQp7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT50aW1lX3N0YW1wXyA9 IHRzOwp9CgppbmxpbmUgbG9uZwpBQ0VfTG9nX1JlY29yZDo6cGlkICh2b2lkKSBjb25zdAp7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5waWRfOwp9 CgppbmxpbmUgdm9pZApBQ0VfTG9nX1JlY29yZDo6cGlkIChsb25nIHApCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+cGlkXyA9IHA7Cn0KCmlubGluZSBBQ0Vf VENIQVIgKgpBQ0VfTG9nX1JlY29yZDo6bXNnX2RhdGEgKHZvaWQpCnsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bXNnX2RhdGFfOwp9CiMg MTk5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX1Jl Y29yZC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvcG9zdC5oIiAxCiMgMjAyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvTG9nX1JlY29yZC5oIiAyCiMgOTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfTG9nX01zZ19BdHRyaWJ1dGVzLmgiIDEK IyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0xv Z19Nc2dfQXR0cmlidXRlcy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvT1NfTG9nX01zZ19BdHRyaWJ1dGVzLmgiIDIKCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMQoj IDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfTG9n X01zZ19BdHRyaWJ1dGVzLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAxCiMgMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIgMgojIDEgIi91 c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk ZS9zdGRhcmcuaCIgMSAzCiMgMjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIgMgojIDEgIi91c3IvbG9jYWwvZ2Nj LTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAx IDMKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T X0xvZ19Nc2dfQXR0cmlidXRlcy5oIiAyCiMgMzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIKIyAxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRXhwb3J0LmgiIDEKIyAz NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0xvZ19N c2dfQXR0cmlidXRlcy5oIiAyCiMgNDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIKY2xhc3MgQUNFX09TX0xvZ19N c2dfQXR0cmlidXRlcwp7CnB1YmxpYzoKCiAgQUNFX09TX0xvZ19Nc2dfQXR0cmlidXRlcyAodm9p ZCk7Cgpwcm90ZWN0ZWQ6CiAgZnJpZW5kIGNsYXNzIEFDRV9Mb2dfTXNnOwoKCiAgb3N0cmVhbSAq b3N0cmVhbV87CgoKICB1bnNpZ25lZCBsb25nIHByaW9yaXR5X21hc2tfOwoKCiAgaW50IHRyYWNp bmdfZW5hYmxlZF87CgoKCiAgaW50IHJlc3RhcnRfOwoKCiAgaW50IHRyYWNlX2RlcHRoXzsKCgoK CgoKfTsKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvT1NfTG9nX01zZ19BdHRyaWJ1dGVzLmlubCIgMQoKCmlubGluZQpBQ0VfT1NfTG9nX01z Z19BdHRyaWJ1dGVzOjpBQ0VfT1NfTG9nX01zZ19BdHRyaWJ1dGVzICh2b2lkKQp7Cn0KIyA4NiAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0xvZ19Nc2df QXR0cmlidXRlcy5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgODkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIgMgojIDk0ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX01zZy5oIiAyCiMgMTEw ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX01zZy5o IgpjbGFzcyBBQ0VfTG9nX01zZ19DYWxsYmFjazsKCgoKCgoKY2xhc3MgQUNFX1RocmVhZF9EZXNj cmlwdG9yOwojIDE0NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL0xvZ19Nc2cuaCIKY2xhc3MgQUNFX0xvZ19Nc2cKewoKcHVibGljOgoKICBlbnVtCiAgewoK ICAgIFNUREVSUiA9IDEsCgogICAgTE9HR0VSID0gMiwKCgogICAgT1NUUkVBTSA9IDQsCgogICAg TVNHX0NBTExCQUNLID0gOCwKCiAgICBWRVJCT1NFID0gMTYsCgoKICAgIFZFUkJPU0VfTElURSA9 IDMyLAoKCiAgICBTSUxFTlQgPSA2NCwKCiAgICBTWVNMT0cgPSAxMjgKIH07CgoKCgogIHN0YXRp YyBBQ0VfTG9nX01zZyAqaW5zdGFuY2UgKHZvaWQpOwoKCiAgc3RhdGljIGludCBleGlzdHMgKHZv aWQpOwoKCgogIHN0YXRpYyB2b2lkIGRpc2FibGVfZGVidWdfbWVzc2FnZXMgKEFDRV9Mb2dfUHJp b3JpdHkgcHJpb3JpdHkgPSBMTV9ERUJVRyk7CgoKCiAgc3RhdGljIHZvaWQgZW5hYmxlX2RlYnVn X21lc3NhZ2VzIChBQ0VfTG9nX1ByaW9yaXR5IHByaW9yaXR5ID0gTE1fREVCVUcpOwoKCiAgQUNF X0xvZ19Nc2cgKHZvaWQpOwoKCiAgfkFDRV9Mb2dfTXNnICh2b2lkKTsKIyAyMTIgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiCiAgaW50IG9w ZW4gKGNvbnN0IEFDRV9UQ0hBUiAqcHJvZ19uYW1lLAogICAgICAgICAgICB1X2xvbmcgb3B0aW9u c19mbGFncyA9IEFDRV9Mb2dfTXNnOjpTVERFUlIsCiAgICAgICAgICAgIGNvbnN0IEFDRV9UQ0hB UiAqbG9nZ2VyX2tleSA9IDApOwojIDIyMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIKICB2b2lkIHNldF9mbGFncyAodV9sb25nIGYpOwog IHZvaWQgY2xyX2ZsYWdzICh1X2xvbmcgZik7CiAgdV9sb25nIGZsYWdzICh2b2lkKTsKIyAyMzcg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgi CiAgaW50IGFjcXVpcmUgKHZvaWQpOwoKCiAgaW50IHJlbGVhc2UgKHZvaWQpOwoKCgoKICB2b2lk IHN5bmMgKGNvbnN0IEFDRV9UQ0hBUiAqcHJvZ3JhbV9uYW1lKTsKCgoKCgoKICB2b2lkIG9wX3N0 YXR1cyAoaW50IHN0YXR1cyk7CgoKCiAgaW50IG9wX3N0YXR1cyAodm9pZCk7CgoKCiAgdm9pZCBl cnJudW0gKGludCk7CgoKCiAgaW50IGVycm51bSAodm9pZCk7CgoKICB2b2lkIGxpbmVudW0gKGlu dCk7CgoKICBpbnQgbGluZW51bSAodm9pZCk7CgoKICB2b2lkIGZpbGUgKGNvbnN0IGNoYXIgKik7 CgoKICBjb25zdCBjaGFyICpmaWxlICh2b2lkKTsKCgogIHZvaWQgbXNnIChjb25zdCBBQ0VfVENI QVIgKik7CgoKICBjb25zdCBBQ0VfVENIQVIgKm1zZyAodm9pZCk7CgoKCiAgdm9pZCByZXN0YXJ0 IChpbnQpOwoKCgogIGludCByZXN0YXJ0ICh2b2lkKTsKCgoKCgoKICB2b2lkIG1zZ19vc3RyZWFt IChvc3RyZWFtICopOwoKCgoKCgogIHZvaWQgbXNnX29zdHJlYW0gKG9zdHJlYW0gKiwgaW50IGRl bGV0ZV9vc3RyZWFtKTsKCgogIG9zdHJlYW0gKm1zZ19vc3RyZWFtICh2b2lkKSBjb25zdDsKCgoK CgoKCiAgQUNFX0xvZ19Nc2dfQ2FsbGJhY2sgKm1zZ19jYWxsYmFjayAoQUNFX0xvZ19Nc2dfQ2Fs bGJhY2sgKmMpOwogIEFDRV9Mb2dfTXNnX0NhbGxiYWNrICptc2dfY2FsbGJhY2sgKHZvaWQpIGNv bnN0OwoKCiAgaW50IGluYyAodm9pZCk7CiAgaW50IGRlYyAodm9pZCk7CgoKICBpbnQgdHJhY2Vf ZGVwdGggKHZvaWQpOwogIHZvaWQgdHJhY2VfZGVwdGggKGludCk7CgoKICBpbnQgdHJhY2VfYWN0 aXZlICh2b2lkKTsKICB2b2lkIHRyYWNlX2FjdGl2ZSAoaW50IHZhbHVlKTsKCgogIEFDRV9UaHJl YWRfRGVzY3JpcHRvciAqdGhyX2Rlc2MgKHZvaWQpIGNvbnN0OwoKCgoKCgogIHZvaWQgdGhyX2Rl c2MgKEFDRV9UaHJlYWRfRGVzY3JpcHRvciAqdGQpOwojIDM1NiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIKICB2b2lkIHN0b3BfdHJhY2lu ZyAodm9pZCk7CiAgdm9pZCBzdGFydF90cmFjaW5nICh2b2lkKTsKICBpbnQgdHJhY2luZ19lbmFi bGVkICh2b2lkKTsKCiAgdHlwZWRlZiBlbnVtCiAgewogICAgUFJPQ0VTUyA9IDAsCiAgICBUSFJF QUQgPSAxCiAgfSBNQVNLX1RZUEU7CgoKCgogIHVfbG9uZyBwcmlvcml0eV9tYXNrIChNQVNLX1RZ UEUgPSBUSFJFQUQpOwogIHVfbG9uZyBwcmlvcml0eV9tYXNrICh1X2xvbmcsIE1BU0tfVFlQRSA9 IFRIUkVBRCk7CgoKICBpbnQgbG9nX3ByaW9yaXR5X2VuYWJsZWQgKEFDRV9Mb2dfUHJpb3JpdHkg bG9nX3ByaW9yaXR5KTsKCgogIGludCBsb2dfcHJpb3JpdHlfZW5hYmxlZCAoQUNFX0xvZ19Qcmlv cml0eSBsb2dfcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwojIDM5MyAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIKICBwaWRfdCBnZXRw aWQgKHZvaWQpIGNvbnN0OwoKCiAgY29uc3QgQUNFX1RDSEFSICpsb2NhbF9ob3N0ICh2b2lkKSBj b25zdDsKICB2b2lkIGxvY2FsX2hvc3QgKGNvbnN0IEFDRV9UQ0hBUiAqKTsKCgoKCgoKICB2b2lk IHNldCAoY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgaW50IGxpbmUsCiAgICAgICAgICAg IGludCBvcF9zdGF0dXMgPSAtMSwKICAgICAgICAgICAgaW50IGVycm51bSA9IDAsCiAgICAgICAg ICAgIGludCByZXN0YXJ0ID0gMSwKICAgICAgICAgICAgb3N0cmVhbSAqb3MgPSAwLAogICAgICAg ICAgICBBQ0VfTG9nX01zZ19DYWxsYmFjayAqYyA9IDApOwoKCgogIHZvaWQgY29uZGl0aW9uYWxf c2V0IChjb25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwK ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wX3N0YXR1cywKICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGVycm51bSk7CiMgNDU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvTG9nX01zZy5oIgogIHNzaXplX3QgbG9nIChBQ0VfTG9nX1ByaW9yaXR5 IHByaW9yaXR5LCBjb25zdCBBQ0VfVENIQVIgKmZvcm1hdCwgLi4uKTsKIyA0NjYgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiCiAgc3NpemVf dCBsb2cgKGNvbnN0IEFDRV9UQ0hBUiAqZm9ybWF0LAogICAgICAgICAgICAgICBBQ0VfTG9nX1By aW9yaXR5IHByaW9yaXR5LAogICAgICAgICAgICAgICB2YV9saXN0IGFyZ3ApOwoKCgogIHNzaXpl X3QgbG9nIChBQ0VfTG9nX1JlY29yZCAmbG9nX3JlY29yZCwKICAgICAgICAgICAgICAgaW50IHN1 cHByZXNzX3N0ZGVyciA9IDApOwoKCgoKCgogIGludCBsb2dfaGV4ZHVtcCAoQUNFX0xvZ19Qcmlv cml0eSBsb2dfcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWZmZXIs CiAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwKICAgICAgICAgICAgICAgICAgIGNvbnN0IEFD RV9UQ0hBUiAqdGV4dCA9IDApOwoKICBzdGF0aWMgdm9pZCBpbml0X2hvb2sgKEFDRV9PU19Mb2df TXNnX0F0dHJpYnV0ZXMgJmF0dHJpYnV0ZXMKIyA0OTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiCiAgICAgICAgICAgICAgICAgICAgICAg ICApOwoKCgoKCgogIHN0YXRpYyB2b2lkIGluaGVyaXRfaG9vayAoQUNFX09TX1RocmVhZF9EZXNj cmlwdG9yICp0aHJfZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9PU19Mb2df TXNnX0F0dHJpYnV0ZXMgJmF0dHJpYnV0ZXMpOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsK CgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZhdGU6CgogIGludCBzdGF0dXNfOwoKCiAgaW50IGVy cm51bV87CgoKICBpbnQgbGluZW51bV87CgoKICBjaGFyIGZpbGVfWzQwOTUgKyAxXTsKCgoKCiAg QUNFX1RDSEFSIG1zZ19bQUNFX0xvZ19SZWNvcmQ6Ok1BWExPR01TR0xFTl07CgoKCiAgaW50IHJl c3RhcnRfOwoKCiAgb3N0cmVhbSAqb3N0cmVhbV87CgoKICBBQ0VfTG9nX01zZ19DYWxsYmFjayAq bXNnX2NhbGxiYWNrXzsKCgogIGludCB0cmFjZV9kZXB0aF87CgoKICBpbnQgdHJhY2VfYWN0aXZl XzsKCgogIGludCB0cmFjaW5nX2VuYWJsZWRfOwoKCiAgaW50IGRlbGV0ZV9vc3RyZWFtXzsKCgoK CgoKCiAgQUNFX1RocmVhZF9EZXNjcmlwdG9yICp0aHJfZGVzY187CgoKCgoKCiAgdV9sb25nIHBy aW9yaXR5X21hc2tfOwojIDU3NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL0xvZ19Nc2cuaCIKICBzdGF0aWMgdV9sb25nIHByb2Nlc3NfcHJpb3JpdHlfbWFz a187CgoKICBzdGF0aWMgY29uc3QgQUNFX1RDSEFSICpwcm9ncmFtX25hbWVfOwoKCiAgc3RhdGlj IGNvbnN0IEFDRV9UQ0hBUiAqbG9jYWxfaG9zdF87CgoKICBzdGF0aWMgcGlkX3QgcGlkXzsKCgog IHN0YXRpYyB1X2xvbmcgZmxhZ3NfOwoKCiAgc3RhdGljIGludCBtc2dfb2ZmXzsKCgoKCgoKICBz dGF0aWMgaW50IGluc3RhbmNlX2NvdW50XzsKICBzdGF0aWMgdV9sb25nIGRlZmF1bHRfcHJpb3Jp dHlfbWFza187CgoKCgogIHN0cnVjdAogIHsKICAgIGludCBpc19zZXRfOwogICAgY29uc3QgY2hh ciAqZmlsZV87CiAgICBpbnQgbGluZV87CiAgICBpbnQgb3Bfc3RhdHVzXzsKICAgIGludCBlcnJu dW1fOwogIH0gY29uZGl0aW9uYWxfdmFsdWVzXzsKCgogIHN0YXRpYyBpbnQga2V5X2NyZWF0ZWRf OwoKCiAgc3RhdGljIEFDRV90aHJlYWRfa2V5X3QgbG9nX21zZ190c3Nfa2V5XzsKCgoKCiAgc3Rh dGljIHZvaWQgY2xvc2UgKHZvaWQpOwoKCiAgc3RhdGljIHZvaWQgc3luY19ob29rIChjb25zdCBB Q0VfVENIQVIgKnByZ19uYW1lKTsKCgogIHN0YXRpYyBBQ0VfT1NfVGhyZWFkX0Rlc2NyaXB0b3Ig KnRocl9kZXNjX2hvb2sgKHZvaWQpOwoKICBmcmllbmQgdm9pZCBBQ0VfT1M6OmNsZWFudXBfdHNz IChjb25zdCB1X2ludCk7CgoKICBBQ0VfTG9nX01zZyAmb3BlcmF0b3I9IChjb25zdCBBQ0VfTG9n X01zZyAmKTsKICBBQ0VfTG9nX01zZyAoY29uc3QgQUNFX0xvZ19Nc2cgJik7Cn07CiMgNjQ2ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX01zZy5oIgp2 b2lkCkFDRV9UU1NfY2xlYW51cCAodm9pZCAqcHRyKTsKIyA2NjAgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDY2MSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIgMgojIDI0 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jLmgi IDIKIyAyNTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9N YWxsb2MuaCIKY2xhc3MgQUNFX0NvbnRyb2xfQmxvY2sKewpwdWJsaWM6CiMgMjY2ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jLmgiCiAgY2xhc3Mg QUNFX01hbGxvY19IZWFkZXIKICB7CiAgcHVibGljOgogICAgQUNFX01hbGxvY19IZWFkZXIgKHZv aWQpOwoKCiAgICBBQ0VfTWFsbG9jX0hlYWRlciAqbmV4dF9ibG9ja187CgoKICAgIHN0YXRpYyB2 b2lkIGluaXRfcHRyIChBQ0VfTWFsbG9jX0hlYWRlciAqKnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICBBQ0VfTWFsbG9jX0hlYWRlciAqaW5pdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpiYXNlX2FkZHIpOwoKCiAgICBzaXplX3Qgc2l6ZV87CiMgMjkwICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jLmgiCiAgICBsb25nIHBh ZGRpbmdfWygoaW50KSAoKDEgJSAoKGludCkgc2l6ZW9mIChsb25nKSkgPT0gMCA/IDEgOiAoKCgx IC8gKChpbnQpIHNpemVvZiAobG9uZykpKSArIDEpICogKChpbnQpIHNpemVvZiAobG9uZykpKSkg LSAoc2l6ZW9mIChBQ0VfTWFsbG9jX0hlYWRlciopICsgc2l6ZW9mIChzaXplX3QpKSkgLyAoaW50 KSBzaXplb2YgKGxvbmcpKSA8IDEgPyAxIDogKChpbnQpICgoMSAlICgoaW50KSBzaXplb2YgKGxv bmcpKSA9PSAwID8gMSA6ICgoKDEgLyAoKGludCkgc2l6ZW9mIChsb25nKSkpICsgMSkgKiAoKGlu dCkgc2l6ZW9mIChsb25nKSkpKSAtIChzaXplb2YgKEFDRV9NYWxsb2NfSGVhZGVyKikgKyBzaXpl b2YgKHNpemVfdCkpKSAvIChpbnQpIHNpemVvZiAobG9uZykpXTsKCgoKICAgIHZvaWQgZHVtcCAo dm9pZCkgY29uc3Q7CiAgfTsKIyAzMDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9NYWxsb2MuaCIKICBjbGFzcyBBQ0VfTmFtZV9Ob2RlCiAgewogIHB1Ymxp YzoKCgogICAgQUNFX05hbWVfTm9kZSAoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg ICAgIGNoYXIgKm5hbWVfcHRyLAogICAgICAgICAgICAgICAgICAgY2hhciAqcG9pbnRlciwKICAg ICAgICAgICAgICAgICAgIEFDRV9OYW1lX05vZGUgKmhlYWQpOwoKCiAgICBBQ0VfTmFtZV9Ob2Rl IChjb25zdCBBQ0VfTmFtZV9Ob2RlICYpOwoKCiAgICBBQ0VfTmFtZV9Ob2RlICh2b2lkKTsKCgog ICAgfkFDRV9OYW1lX05vZGUgKHZvaWQpOwoKCiAgICBzdGF0aWMgdm9pZCBpbml0X3B0ciAoQUNF X05hbWVfTm9kZSAqKnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfTmFtZV9Ob2Rl ICppbml0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhc2VfYWRkcik7CgoKICAg IGNvbnN0IGNoYXIgKm5hbWUgKHZvaWQpIGNvbnN0OwoKCiAgICB2b2lkIG5hbWUgKGNvbnN0IGNo YXIgKik7CgoKICAgIGNoYXIgKm5hbWVfOwoKCiAgICBjaGFyICpwb2ludGVyXzsKCgogICAgQUNF X05hbWVfTm9kZSAqbmV4dF87CgoKICAgIEFDRV9OYW1lX05vZGUgKnByZXZfOwoKCiAgICB2b2lk IGR1bXAgKHZvaWQpIGNvbnN0OwogIH07CgoKICBzdGF0aWMgdm9pZCBwcmludF9hbGlnbm1lbnRf aW5mbyAodm9pZCk7CgoKICBpbnQgcmVmX2NvdW50ZXJfOwoKCiAgQUNFX05hbWVfTm9kZSAqbmFt ZV9oZWFkXzsKCgogIEFDRV9NYWxsb2NfSGVhZGVyICpmcmVlcF87CgoKICBjaGFyIGxvY2tfbmFt ZV9bNDA5NV07CiMgMzk0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvTWFsbG9jLmgiCiAgbG9uZyBhbGlnbl9bKCgoKGludCkoc2l6ZW9mIChBQ0VfTmFtZV9O b2RlKikgKyBzaXplb2YgKEFDRV9NYWxsb2NfSGVhZGVyKikgKyBzaXplb2YgKGludCkgKyA0MDk1 KSkgJSAoKGludCkgc2l6ZW9mIChsb25nKSkgIT0gMCA/ICgoaW50KSBzaXplb2YgKGxvbmcpKSAt ICgoKGludCkoc2l6ZW9mIChBQ0VfTmFtZV9Ob2RlKikgKyBzaXplb2YgKEFDRV9NYWxsb2NfSGVh ZGVyKikgKyBzaXplb2YgKGludCkgKyA0MDk1KSkgJSAoKGludCkgc2l6ZW9mIChsb25nKSkpIDog KChpbnQpIHNpemVvZiAobG9uZykpKSAvIGludCAoc2l6ZW9mIChsb25nKSkpIDwgMSA/IDEgOiAo KCgoaW50KShzaXplb2YgKEFDRV9OYW1lX05vZGUqKSArIHNpemVvZiAoQUNFX01hbGxvY19IZWFk ZXIqKSArIHNpemVvZiAoaW50KSArIDQwOTUpKSAlICgoaW50KSBzaXplb2YgKGxvbmcpKSAhPSAw ID8gKChpbnQpIHNpemVvZiAobG9uZykpIC0gKCgoaW50KShzaXplb2YgKEFDRV9OYW1lX05vZGUq KSArIHNpemVvZiAoQUNFX01hbGxvY19IZWFkZXIqKSArIHNpemVvZiAoaW50KSArIDQwOTUpKSAl ICgoaW50KSBzaXplb2YgKGxvbmcpKSkgOiAoKGludCkgc2l6ZW9mIChsb25nKSkpIC8gaW50IChz aXplb2YgKGxvbmcpKSldOwoKCgoKICBBQ0VfTWFsbG9jX0hlYWRlciBiYXNlXzsKCgogIHZvaWQg ZHVtcCAodm9pZCkgY29uc3Q7Cn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvTWFsbG9jLmkiIDEKCgoKaW5saW5lCkFDRV9Db250cm9sX0Jsb2Nr OjpBQ0VfTmFtZV9Ob2RlOjp+QUNFX05hbWVfTm9kZSAodm9pZCkKewp9CgppbmxpbmUgdm9pZApB Q0VfQ29udHJvbF9CbG9jazo6QUNFX01hbGxvY19IZWFkZXI6OmluaXRfcHRyCiAgKEFDRV9NYWxs b2NfSGVhZGVyICoqcHRyLCBBQ0VfTWFsbG9jX0hlYWRlciAqaW5pdCwgdm9pZCAqKQp7CiAgKnB0 ciA9IGluaXQ7Cn0KCmlubGluZSB2b2lkCkFDRV9Db250cm9sX0Jsb2NrOjpBQ0VfTmFtZV9Ob2Rl Ojppbml0X3B0cgogIChBQ0VfTmFtZV9Ob2RlICoqcHRyLCBBQ0VfTmFtZV9Ob2RlICppbml0LCB2 b2lkICopCnsKICAqcHRyID0gaW5pdDsKfQojIDQwNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvYy5oIiAyCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiIDEKIyAxNSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCiMgMSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMg MTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2Nf VC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9BQ0UuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvTWFsbG9jX1QuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5oIiAyCgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIgMQojIDIxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIgMgojIDMx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIK Y2xhc3MgQUNFX1RpbWVfVmFsdWU7CiMgNDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5oIgpjbGFzcyBBQ0VfTG9jawp7CnB1YmxpYzoKCiAgQUNF X0xvY2sgKHZvaWQpOwoKCiAgdmlydHVhbCB+QUNFX0xvY2sgKHZvaWQpOwoKCgoKCgogIHZpcnR1 YWwgaW50IHJlbW92ZSAodm9pZCkgPSAwOwoKCgogIHZpcnR1YWwgaW50IGFjcXVpcmUgKHZvaWQp ID0gMDsKCgoKCgoKICB2aXJ0dWFsIGludCB0cnlhY3F1aXJlICh2b2lkKSA9IDA7CgoKICB2aXJ0 dWFsIGludCByZWxlYXNlICh2b2lkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBpbnQgYWNxdWlyZV9y ZWFkICh2b2lkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBpbnQgYWNxdWlyZV93cml0ZSAodm9pZCkg PSAwOwoKCgoKCgoKICB2aXJ0dWFsIGludCB0cnlhY3F1aXJlX3JlYWQgKHZvaWQpID0gMDsKCgoK CgoKCiAgdmlydHVhbCBpbnQgdHJ5YWNxdWlyZV93cml0ZSAodm9pZCkgPSAwOwoKCgoKCgogIHZp cnR1YWwgaW50IHRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCkgPSAwOwp9OwojIDEyOSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCmNs YXNzIEFDRV9BZGFwdGl2ZV9Mb2NrIDogcHVibGljIEFDRV9Mb2NrCnsKcHVibGljOgoKCiAgdmly dHVhbCB+QUNFX0FkYXB0aXZlX0xvY2sgKHZvaWQpOwoKCgogIHZpcnR1YWwgaW50IHJlbW92ZSAo dm9pZCk7CiAgdmlydHVhbCBpbnQgYWNxdWlyZSAodm9pZCk7CiAgdmlydHVhbCBpbnQgdHJ5YWNx dWlyZSAodm9pZCk7CiAgdmlydHVhbCBpbnQgcmVsZWFzZSAodm9pZCk7CiAgdmlydHVhbCBpbnQg YWNxdWlyZV9yZWFkICh2b2lkKTsKICB2aXJ0dWFsIGludCBhY3F1aXJlX3dyaXRlICh2b2lkKTsK ICB2aXJ0dWFsIGludCB0cnlhY3F1aXJlX3JlYWQgKHZvaWQpOwogIHZpcnR1YWwgaW50IHRyeWFj cXVpcmVfd3JpdGUgKHZvaWQpOwogIHZpcnR1YWwgaW50IHRyeWFjcXVpcmVfd3JpdGVfdXBncmFk ZSAodm9pZCk7CiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCnByb3RlY3RlZDoKCgoKCgogIEFD RV9BZGFwdGl2ZV9Mb2NrICh2b2lkKTsKCiAgQUNFX0xvY2sgKmxvY2tfOwp9OwoKCgoKCgpjbGFz cyBBQ0VfU2VtYXBob3JlCnsKcHVibGljOgoKCiAgQUNFX1NlbWFwaG9yZSAodV9pbnQgY291bnQg PSAxLAogICAgICAgICAgICAgICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUs CiAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpuYW1lID0gMCwKICAgICAgICAgICAg ICAgICB2b2lkICogPSAwLAogICAgICAgICAgICAgICAgIGludCBtYXggPSAweDdmZmZmZmZmKTsK CgogIH5BQ0VfU2VtYXBob3JlICh2b2lkKTsKCgoKCgoKICBpbnQgcmVtb3ZlICh2b2lkKTsKCgoK ICBpbnQgYWNxdWlyZSAodm9pZCk7CiMgMjAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgYWNxdWlyZSAoQUNFX1RpbWVfVmFsdWUg JnR2KTsKCgoKCgoKCiAgaW50IHRyeWFjcXVpcmUgKHZvaWQpOwoKCgogIGludCByZWxlYXNlICh2 b2lkKTsKCgoKICBpbnQgcmVsZWFzZSAoc2l6ZV90IHJlbGVhc2VfY291bnQpOwoKCgoKCgogIGlu dCBhY3F1aXJlX3JlYWQgKHZvaWQpOwoKCgoKCgogIGludCBhY3F1aXJlX3dyaXRlICh2b2lkKTsK IyAyNDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j aC5oIgogIGludCB0cnlhY3F1aXJlX3JlYWQgKHZvaWQpOwojIDI1MSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCiAgaW50IHRyeWFjcXVpcmVf d3JpdGUgKHZvaWQpOwoKCgoKCgoKICBpbnQgdHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2b2lk KTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307CgoKICBj b25zdCBBQ0Vfc2VtYV90ICZsb2NrICh2b2lkKSBjb25zdDsKCnByb3RlY3RlZDoKICBBQ0Vfc2Vt YV90IHNlbWFwaG9yZV87CgoKCiAgaW50IHJlbW92ZWRfOwoKCgoKcHJpdmF0ZToKCiAgdm9pZCBv cGVyYXRvcj0gKGNvbnN0IEFDRV9TZW1hcGhvcmUgJik7CiAgQUNFX1NlbWFwaG9yZSAoY29uc3Qg QUNFX1NlbWFwaG9yZSAmKTsKfTsKCgoKCgoKCmNsYXNzIEFDRV9OdWxsX1NlbWFwaG9yZQp7CnB1 YmxpYzoKICBBQ0VfTnVsbF9TZW1hcGhvcmUgKHVfaW50IGNvdW50ID0gMSwKICAgICAgICAgICAg ICAgICAgICAgICBpbnQgdHlwZSA9IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAqbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqID0gMCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4ID0gMHg3ZmZm ZmZmZik7CiAgfkFDRV9OdWxsX1NlbWFwaG9yZSAodm9pZCk7CiAgaW50IHJlbW92ZSAodm9pZCk7 CgogIGludCBhY3F1aXJlIChBQ0VfVGltZV9WYWx1ZSAmKTsKICBpbnQgYWNxdWlyZSAodm9pZCk7 CiAgaW50IHRyeWFjcXVpcmUgKHZvaWQpOwogIGludCByZWxlYXNlICh2b2lkKTsKICBpbnQgcmVs ZWFzZSAoc2l6ZV90KTsKICBpbnQgYWNxdWlyZV93cml0ZSAodm9pZCk7CiAgaW50IHRyeWFjcXVp cmVfd3JpdGUgKHZvaWQpOwogIGludCB0cnlhY3F1aXJlX3dyaXRlX3VwZ3JhZGUgKHZvaWQpOwog IGludCBhY3F1aXJlX3JlYWQgKHZvaWQpOwogIGludCB0cnlhY3F1aXJlX3JlYWQgKHZvaWQpOwoK CiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKfTsKIyAzMjkg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5oIgpj bGFzcyBBQ0VfUldfTXV0ZXgKewpwdWJsaWM6CgogIEFDRV9SV19NdXRleCAoaW50IHR5cGUgPSBQ VEhSRUFEX1BST0NFU1NfUFJJVkFURSwKICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAq bmFtZSA9IDAsCiAgICAgICAgICAgICAgICB2b2lkICphcmcgPSAwKTsKCgogIH5BQ0VfUldfTXV0 ZXggKHZvaWQpOwoKCgoKCgogIGludCByZW1vdmUgKHZvaWQpOwoKCiAgaW50IGFjcXVpcmVfcmVh ZCAodm9pZCk7CgoKCiAgaW50IGFjcXVpcmVfd3JpdGUgKHZvaWQpOwoKCgoKCgogIGludCB0cnlh Y3F1aXJlX3JlYWQgKHZvaWQpOwoKCiAgaW50IHRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpOwojIDM3 MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgi CiAgaW50IHRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCk7CgoKCgoKCiAgaW50IGFjcXVp cmUgKHZvaWQpOwojIDM4OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL1N5bmNoLmgiCiAgaW50IHRyeWFjcXVpcmUgKHZvaWQpOwoKCiAgaW50IHJlbGVhc2Ug KHZvaWQpOwoKCiAgY29uc3QgQUNFX3J3bG9ja190ICZsb2NrICh2b2lkKSBjb25zdDsKCgogIHZv aWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6Cgog IEFDRV9yd2xvY2tfdCBsb2NrXzsKCgoKICBpbnQgcmVtb3ZlZF87CgoKCnByaXZhdGU6CgogIHZv aWQgb3BlcmF0b3I9IChjb25zdCBBQ0VfUldfTXV0ZXggJik7CiAgQUNFX1JXX011dGV4IChjb25z dCBBQ0VfUldfTXV0ZXggJik7Cn07CgoKCgoKCgpjbGFzcyBBQ0VfTXV0ZXgKewpwdWJsaWM6Cgog IEFDRV9NdXRleCAoaW50IHR5cGUgPSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKICAgICAgICAg ICAgIGNvbnN0IEFDRV9UQ0hBUiAqbmFtZSA9IDAsCiAgICAgICAgICAgICBBQ0VfbXV0ZXhhdHRy X3QgKmFyZyA9IDApOwoKCiAgfkFDRV9NdXRleCAodm9pZCk7CgoKCgoKCiAgaW50IHJlbW92ZSAo dm9pZCk7CgoKICBpbnQgYWNxdWlyZSAodm9pZCk7CgoKCgoKCgogIGludCBhY3F1aXJlIChBQ0Vf VGltZV9WYWx1ZSAmdHYpOwoKCgoKCgogIGludCB0cnlhY3F1aXJlICh2b2lkKTsKCgogIGludCBy ZWxlYXNlICh2b2lkKTsKCgoKCgoKICBpbnQgYWNxdWlyZV9yZWFkICh2b2lkKTsKCgoKCgoKICBp bnQgYWNxdWlyZV93cml0ZSAodm9pZCk7CiMgNDg0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgdHJ5YWNxdWlyZV9yZWFkICh2b2lk KTsKIyA0OTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9T eW5jaC5oIgogIGludCB0cnlhY3F1aXJlX3dyaXRlICh2b2lkKTsKCgoKCgoKICBpbnQgdHJ5YWNx dWlyZV93cml0ZV91cGdyYWRlICh2b2lkKTsKCgogIGNvbnN0IEFDRV9tdXRleF90ICZsb2NrICh2 b2lkKSBjb25zdDsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Ug e307CgoKcHVibGljOgoKCiAgQUNFX211dGV4X3QgKnByb2Nlc3NfbG9ja187CgoKCgoKCiAgY29u c3QgQUNFX1RDSEFSICpsb2NrbmFtZV87CgoKCiAgQUNFX211dGV4X3QgbG9ja187CgoKCiAgaW50 IHJlbW92ZWRfOwoKCgoKcHJpdmF0ZToKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9NdXRl eCAmKTsKICBBQ0VfTXV0ZXggKGNvbnN0IEFDRV9NdXRleCAmKTsKfTsKCgoKCgoKY2xhc3MgQUNF X051bGxfQmFycmllcgp7CnB1YmxpYzoKCiAgQUNFX051bGxfQmFycmllciAodV9pbnQsCiAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqID0gMCwKICAgICAgICAgICAgICAgICAgICB2b2lk ICogPSAwKTsKCgogIH5BQ0VfTnVsbF9CYXJyaWVyICh2b2lkKTsKCgoKICBpbnQgd2FpdCAodm9p ZCk7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9OwoKcHJp dmF0ZToKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9OdWxsX0JhcnJpZXIgJik7CiAgQUNF X051bGxfQmFycmllciAoY29uc3QgQUNFX051bGxfQmFycmllciAmKTsKfTsKCgoKCgoKCmNsYXNz IEFDRV9OdWxsX011dGV4CnsKcHVibGljOgogIEFDRV9OdWxsX011dGV4IChjb25zdCBBQ0VfVENI QVIgKiA9IDApOwogIH5BQ0VfTnVsbF9NdXRleCAodm9pZCk7CiAgaW50IHJlbW92ZSAodm9pZCk7 CgogIGludCBhY3F1aXJlICh2b2lkKTsKICBpbnQgYWNxdWlyZSAoQUNFX1RpbWVfVmFsdWUgJnRp bWVvdXQpOwogIGludCB0cnlhY3F1aXJlICh2b2lkKTsKICBpbnQgcmVsZWFzZSAodm9pZCk7CiAg aW50IGFjcXVpcmVfd3JpdGUgKHZvaWQpOwogIGludCB0cnlhY3F1aXJlX3dyaXRlICh2b2lkKTsK ICBpbnQgdHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2b2lkKTsKICBpbnQgYWNxdWlyZV9yZWFk ICh2b2lkKTsKICBpbnQgdHJ5YWNxdWlyZV9yZWFkICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9p ZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cn07CgpjbGFzcyBBQ0VfTm9vcF9Ub2tlbiA6 IHB1YmxpYyBBQ0VfTnVsbF9NdXRleAp7CnB1YmxpYzoKICBpbnQgcmVuZXcgKGludCA9IDAsIEFD RV9UaW1lX1ZhbHVlICogPTApOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVj dCBfX0FjZSB7fTsKfTsKIyA2MjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9TeW5jaC5oIgpjbGFzcyBBQ0VfTnVsbF9Db25kaXRpb24KewpwdWJsaWM6CiAg QUNFX051bGxfQ29uZGl0aW9uIChjb25zdCBBQ0VfTnVsbF9NdXRleCAmbSwKICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAqID0gMCwKICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKiA9IDApOwogIH5BQ0VfTnVsbF9Db25kaXRpb24gKHZvaWQpOwogIGludCByZW1vdmUgKHZv aWQpOwogIGludCB3YWl0IChBQ0VfVGltZV9WYWx1ZSAqID0gMCk7CiAgaW50IHNpZ25hbCAodm9p ZCk7CiAgaW50IGJyb2FkY2FzdCAodm9pZCk7CiAgQUNFX051bGxfTXV0ZXggJm11dGV4ICh2b2lk KTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKCgpwcm90ZWN0ZWQ6CiAgQUNFX051bGxf TXV0ZXggJm11dGV4XzsKCnByaXZhdGU6CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBBQ0VfTnVs bF9Db25kaXRpb24gJik7CiAgQUNFX051bGxfQ29uZGl0aW9uIChjb25zdCBBQ0VfTnVsbF9Db25k aXRpb24gJik7Cn07CiMgNjkzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvU3luY2guaCIKY2xhc3MgQUNFX1RTU19BZGFwdGVyCnsKcHVibGljOgoKICBBQ0Vf VFNTX0FkYXB0ZXIgKHZvaWQgKm9iamVjdCwgQUNFX1RIUl9ERVNUIGYpOwoKCiAgfkFDRV9UU1Nf QWRhcHRlciAodm9pZCk7CgoKICB2b2lkIGNsZWFudXAgKHZvaWQpOwoKCgoKICB2b2lkICp0c19v YmpfOwoKCiAgQUNFX1RIUl9ERVNUIGZ1bmNfOwp9OwojIDcyNCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCmNsYXNzIEFDRV9FdmVudAp7CnB1 YmxpYzoKCiAgQUNFX0V2ZW50IChpbnQgbWFudWFsX3Jlc2V0ID0gMCwKICAgICAgICAgICAgIGlu dCBpbml0aWFsX3N0YXRlID0gMCwKICAgICAgICAgICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9D RVNTX1BSSVZBVEUsCiAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIgKm5hbWUgPSAwLAogICAg ICAgICAgICAgdm9pZCAqYXJnID0gMCk7CgoKICB+QUNFX0V2ZW50ICh2b2lkKTsKCgoKCgoKICBp bnQgcmVtb3ZlICh2b2lkKTsKCgogIEFDRV9ldmVudF90IGhhbmRsZSAodm9pZCkgY29uc3Q7CiMg NzU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2gu aCIKICB2b2lkIGhhbmRsZSAoQUNFX2V2ZW50X3QgbmV3X2hhbmRsZSk7CiMgNzY1ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgd2Fp dCAodm9pZCk7CgoKCiAgaW50IHdhaXQgKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICphYnN0aW1lKTsK IyA3ODAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j aC5oIgogIGludCBzaWduYWwgKHZvaWQpOwojIDc5MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCiAgaW50IHB1bHNlICh2b2lkKTsKCgogIGlu dCByZXNldCAodm9pZCk7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0IF9f QWNlIHt9OwoKcHJvdGVjdGVkOgoKICBBQ0VfZXZlbnRfdCBoYW5kbGVfOwoKCgogIGludCByZW1v dmVkXzsKCgoKCnByaXZhdGU6CgogIEFDRV9FdmVudCAoY29uc3QgQUNFX0V2ZW50JiBldmVudCk7 CiAgY29uc3QgQUNFX0V2ZW50ICZvcGVyYXRvcj0gKGNvbnN0IEFDRV9FdmVudCAmcmhzKTsKfTsK IyA4MjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j aC5oIgpjbGFzcyBBQ0VfTWFudWFsX0V2ZW50IDogcHVibGljIEFDRV9FdmVudAp7CnB1YmxpYzoK CiAgQUNFX01hbnVhbF9FdmVudCAoaW50IGluaXRpYWxfc3RhdGUgPSAwLAogICAgICAgICAgICAg ICAgICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCiAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJn ID0gMCk7CiMgODQ1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvU3luY2guaCIKICB+QUNFX01hbnVhbF9FdmVudCAodm9pZCk7CgoKICB2b2lkIGR1bXAgKHZv aWQpIGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9Owp9OwojIDg2MyAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCmNsYXNzIEFDRV9BdXRvX0V2 ZW50IDogcHVibGljIEFDRV9FdmVudAp7CnB1YmxpYzoKCiAgQUNFX0F1dG9fRXZlbnQgKGludCBp bml0aWFsX3N0YXRlID0gMCwKICAgICAgICAgICAgICAgICAgaW50IHR5cGUgPSBQVEhSRUFEX1BS T0NFU1NfUFJJVkFURSwKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAsCiAg ICAgICAgICAgICAgICAgIHZvaWQgKmFyZyA9IDApOwojIDg4MSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCiAgfkFDRV9BdXRvX0V2ZW50ICh2 b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cn07 CiMgOTIxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3lu Y2guaCIKY2xhc3MgQUNFX1RocmVhZF9NdXRleAp7CiAgZnJpZW5kIGNsYXNzIEFDRV9Db25kaXRp b25fVGhyZWFkX011dGV4OwpwdWJsaWM6CgogIEFDRV9UaHJlYWRfTXV0ZXggKGNvbnN0IEFDRV9U Q0hBUiAqbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgQUNFX211dGV4YXR0cl90ICphdHRy aWJ1dGVzID0gMCk7CgoKICB+QUNFX1RocmVhZF9NdXRleCAodm9pZCk7CgoKCgoKCiAgaW50IHJl bW92ZSAodm9pZCk7CgoKICBpbnQgYWNxdWlyZSAodm9pZCk7CgoKCgoKCgogIGludCBhY3F1aXJl IChBQ0VfVGltZV9WYWx1ZSAmdHYpOwoKCgoKCgogIGludCB0cnlhY3F1aXJlICh2b2lkKTsKCgog IGludCByZWxlYXNlICh2b2lkKTsKCgoKCgoKICBpbnQgYWNxdWlyZV9yZWFkICh2b2lkKTsKCgoK CgoKICBpbnQgYWNxdWlyZV93cml0ZSAodm9pZCk7CiMgOTgxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgdHJ5YWNxdWlyZV9yZWFk ICh2b2lkKTsKIyA5OTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9TeW5jaC5oIgogIGludCB0cnlhY3F1aXJlX3dyaXRlICh2b2lkKTsKCgoKCgoKCiAgaW50 IHRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCk7CgoKICBjb25zdCBBQ0VfdGhyZWFkX211 dGV4X3QgJmxvY2sgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgog IHN0cnVjdCBfX0FjZSB7fTsKCgoKICBBQ0VfdGhyZWFkX211dGV4X3QgbG9ja187CgoKCiAgaW50 IHJlbW92ZWRfOwoKCgoKcHJpdmF0ZToKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9UaHJl YWRfTXV0ZXggJik7CiAgQUNFX1RocmVhZF9NdXRleCAoY29uc3QgQUNFX1RocmVhZF9NdXRleCAm KTsKfTsKIyAxMDkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvU3luY2guaCIKY2xhc3MgQUNFX0NvbmRpdGlvbl9BdHRyaWJ1dGVzCnsKcHVibGljOgoKICBB Q0VfQ29uZGl0aW9uX0F0dHJpYnV0ZXMgKGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZB VEUpOwoKCiAgfkFDRV9Db25kaXRpb25fQXR0cmlidXRlcyAodm9pZCk7Cgpwcml2YXRlOgogIGZy aWVuZCBjbGFzcyBBQ0VfQ29uZGl0aW9uX1RocmVhZF9NdXRleDsKCgogIEFDRV9jb25kYXR0cl90 IGF0dHJpYnV0ZXNfOwoKcHJpdmF0ZToKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9Db25k aXRpb25fQXR0cmlidXRlcyAmKTsKICBBQ0VfQ29uZGl0aW9uX0F0dHJpYnV0ZXMgKGNvbnN0IEFD RV9Db25kaXRpb25fQXR0cmlidXRlcyAmKTsKfTsKIyAxMTMxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKY2xhc3MgQUNFX0NvbmRpdGlvbl9U aHJlYWRfTXV0ZXgKewpwdWJsaWM6CgogIEFDRV9Db25kaXRpb25fVGhyZWFkX011dGV4IChjb25z dCBBQ0VfVGhyZWFkX011dGV4ICZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBBQ0VfVENIQVIgKm5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICphcmcgPSAwKTsKCgogIEFDRV9Db25kaXRpb25fVGhyZWFkX011dGV4IChjb25zdCBBQ0VfVGhy ZWFkX011dGV4ICZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ29uZGl0aW9u X0F0dHJpYnV0ZXMgJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEFDRV9UQ0hBUiAqbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKmFyZyA9IDApOwoKCiAgfkFDRV9Db25kaXRpb25fVGhyZWFkX011dGV4ICh2b2lkKTsKCgoK CgoKICBpbnQgcmVtb3ZlICh2b2lkKTsKCgoKCgoKCiAgaW50IHdhaXQgKGNvbnN0IEFDRV9UaW1l X1ZhbHVlICphYnN0aW1lKTsKCgogIGludCB3YWl0ICh2b2lkKTsKIyAxMTc0ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgd2FpdCAo QUNFX1RocmVhZF9NdXRleCAmbXV0ZXgsIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICphYnN0aW1lID0g MCk7CgoKICBpbnQgc2lnbmFsICh2b2lkKTsKCgogIGludCBicm9hZGNhc3QgKHZvaWQpOwoKCiAg QUNFX1RocmVhZF9NdXRleCAmbXV0ZXggKHZvaWQpOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25z dDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByb3RlY3RlZDoKCiAgQUNFX2NvbmRfdCBjb25kXzsK CgogIEFDRV9UaHJlYWRfTXV0ZXggJm11dGV4XzsKCgoKICBpbnQgcmVtb3ZlZF87CgoKCgpwcml2 YXRlOgoKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQUNFX0NvbmRpdGlvbl9UaHJlYWRfTXV0ZXgg Jik7CiAgQUNFX0NvbmRpdGlvbl9UaHJlYWRfTXV0ZXggKGNvbnN0IEFDRV9Db25kaXRpb25fVGhy ZWFkX011dGV4ICYpOwp9OwoKCgoKCgoKY2xhc3MgQUNFX1JlY3Vyc2l2ZV9UaHJlYWRfTXV0ZXgK ewpwdWJsaWM6CgogIEFDRV9SZWN1cnNpdmVfVGhyZWFkX011dGV4IChjb25zdCBBQ0VfVENIQVIg Km5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfbXV0ZXhhdHRyX3Qg KmFyZyA9IDApOwoKCiAgfkFDRV9SZWN1cnNpdmVfVGhyZWFkX011dGV4ICh2b2lkKTsKCgoKCgoK ICBpbnQgcmVtb3ZlICh2b2lkKTsKCgoKCgoKICBpbnQgYWNxdWlyZSAodm9pZCk7CgoKCgoKCiAg aW50IHRyeWFjcXVpcmUgKHZvaWQpOwoKCgoKCgogIGludCBhY3F1aXJlX3JlYWQgKHZvaWQpOwoK CgoKCgogIGludCBhY3F1aXJlX3dyaXRlICh2b2lkKTsKIyAxMjcwICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgdHJ5YWNxdWlyZV9y ZWFkICh2b2lkKTsKIyAxMjgwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvU3luY2guaCIKICBpbnQgdHJ5YWNxdWlyZV93cml0ZSAodm9pZCk7CgoKCgoKCgog IGludCB0cnlhY3F1aXJlX3dyaXRlX3VwZ3JhZGUgKHZvaWQpOwoKCgoKCgogIGludCByZWxlYXNl ICh2b2lkKTsKCgogIEFDRV90aHJlYWRfdCBnZXRfdGhyZWFkX2lkICh2b2lkKTsKCgoKCgoKCiAg aW50IGdldF9uZXN0aW5nX2xldmVsICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7 CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6CgogIHZvaWQgc2V0X3RocmVhZF9pZCAo QUNFX3RocmVhZF90IHQpOwoKCiAgQUNFX3JlY3Vyc2l2ZV90aHJlYWRfbXV0ZXhfdCByZWN1cnNp dmVfbXV0ZXhfOwoKCgogIGludCByZW1vdmVkXzsKCgoKCnByaXZhdGU6CgogIHZvaWQgb3BlcmF0 b3I9IChjb25zdCBBQ0VfUmVjdXJzaXZlX1RocmVhZF9NdXRleCAmKTsKICBBQ0VfUmVjdXJzaXZl X1RocmVhZF9NdXRleCAoY29uc3QgQUNFX1JlY3Vyc2l2ZV9UaHJlYWRfTXV0ZXggJik7Cn07CgoK CgoKCmNsYXNzIEFDRV9SV19UaHJlYWRfTXV0ZXggOiBwdWJsaWMgQUNFX1JXX011dGV4CnsKcHVi bGljOgogIEFDRV9SV19UaHJlYWRfTXV0ZXggKGNvbnN0IEFDRV9UQ0hBUiAqbmFtZSA9IDAsCiAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnID0gMCk7CgoKICB+QUNFX1JXX1RocmVhZF9N dXRleCAodm9pZCk7CiMgMTM1NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL1N5bmNoLmgiCiAgaW50IHRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCk7 CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9Owp9OwoKCgoK CgoKY2xhc3MgQUNFX1RocmVhZF9TZW1hcGhvcmUgOiBwdWJsaWMgQUNFX1NlbWFwaG9yZQp7CnB1 YmxpYzoKCgogIEFDRV9UaHJlYWRfU2VtYXBob3JlICh1X2ludCBjb3VudCA9IDEsCiAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAqbmFtZSA9IDAsCiAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKiA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXggPSAw eDdGRkZGRkZGKTsKCgogIH5BQ0VfVGhyZWFkX1NlbWFwaG9yZSAodm9pZCk7CgoKICB2b2lkIGR1 bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9Owp9OwoKc3RydWN0IEFDRV9TdWJf QmFycmllcgp7CgogIEFDRV9TdWJfQmFycmllciAodV9pbnQgY291bnQsCiAgICAgICAgICAgICAg ICAgICBBQ0VfVGhyZWFkX011dGV4ICZsb2NrLAogICAgICAgICAgICAgICAgICAgY29uc3QgQUNF X1RDSEFSICpuYW1lID0gMCwKICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyA9IDApOwoKICB+ QUNFX1N1Yl9CYXJyaWVyICh2b2lkKTsKCiAgQUNFX0NvbmRpdGlvbl9UaHJlYWRfTXV0ZXggYmFy cmllcl9maW5pc2hlZF87CgoKICBpbnQgcnVubmluZ190aHJlYWRzXzsKCgogIHZvaWQgZHVtcCAo dm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgp9OwojIDE0MjggIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5oIgpjbGFzcyBBQ0VfQmFy cmllcgp7CnB1YmxpYzoKCiAgQUNFX0JhcnJpZXIgKHVfaW50IGNvdW50LAogICAgICAgICAgICAg ICBjb25zdCBBQ0VfVENIQVIgKm5hbWUgPSAwLAogICAgICAgICAgICAgICB2b2lkICphcmcgPSAw KTsKCgogIH5BQ0VfQmFycmllciAodm9pZCk7CgoKCiAgaW50IHdhaXQgKHZvaWQpOwoKCiAgdm9p ZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByb3RlY3RlZDoKCiAg QUNFX1RocmVhZF9NdXRleCBsb2NrXzsKCgoKICBpbnQgY3VycmVudF9nZW5lcmF0aW9uXzsKCgog IGludCBjb3VudF87CiMgMTQ2OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL1N5bmNoLmgiCiAgQUNFX1N1Yl9CYXJyaWVyIHN1Yl9iYXJyaWVyXzFfOwogIEFD RV9TdWJfQmFycmllciBzdWJfYmFycmllcl8yXzsKICBBQ0VfU3ViX0JhcnJpZXIgKnN1Yl9iYXJy aWVyX1syXTsKCnByaXZhdGU6CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBBQ0VfQmFycmllciAm KTsKICBBQ0VfQmFycmllciAoY29uc3QgQUNFX0JhcnJpZXIgJik7Cn07CiMgMTUzMyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCmNsYXNzIEFD RV9UaHJlYWRfQmFycmllciA6IHB1YmxpYyBBQ0VfQmFycmllcgp7CnB1YmxpYzoKCiAgQUNFX1Ro cmVhZF9CYXJyaWVyICh1X2ludCBjb3VudCwgY29uc3QgQUNFX1RDSEFSICpuYW1lID0gMCk7CgoK ICB+QUNFX1RocmVhZF9CYXJyaWVyICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7 CgoKICBzdHJ1Y3QgX19BY2Uge307Cn07CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmkiIDEKCgoKaW5saW5lCkFDRV9Mb2NrOjpBQ0Vf TG9jayAodm9pZCkKewp9CgppbmxpbmUgY29uc3QgQUNFX3J3bG9ja190ICYKQUNFX1JXX011dGV4 Ojpsb2NrICh2b2lkKSBjb25zdAp7CgogIHJldHVybiB0aGlzLT5sb2NrXzsKfQoKaW5saW5lIGlu dApBQ0VfUldfTXV0ZXg6OnJlbW92ZSAodm9pZCkKewoKICBpbnQgcmVzdWx0ID0gMDsKICBpZiAo dGhpcy0+cmVtb3ZlZF8gPT0gMCkKICAgIHsKICAgICAgdGhpcy0+cmVtb3ZlZF8gPSAxOwogICAg ICByZXN1bHQgPSBBQ0VfT1M6OnJ3bG9ja19kZXN0cm95ICgmdGhpcy0+bG9ja18pOwogICAgfQog IHJldHVybiByZXN1bHQ7Cn0KCmlubGluZSBpbnQKQUNFX1JXX011dGV4OjphY3F1aXJlX3JlYWQg KHZvaWQpCnsKCiAgcmV0dXJuIEFDRV9PUzo6cndfcmRsb2NrICgmdGhpcy0+bG9ja18pOwp9Cgpp bmxpbmUgaW50CkFDRV9SV19NdXRleDo6YWNxdWlyZV93cml0ZSAodm9pZCkKewoKICByZXR1cm4g QUNFX09TOjpyd193cmxvY2sgKCZ0aGlzLT5sb2NrXyk7Cn0KCmlubGluZSBpbnQKQUNFX1JXX011 dGV4OjphY3F1aXJlICh2b2lkKQp7CgogIHJldHVybiBBQ0VfT1M6OnJ3X3dybG9jayAoJnRoaXMt PmxvY2tfKTsKfQoKaW5saW5lIGludApBQ0VfUldfTXV0ZXg6OnRyeWFjcXVpcmVfcmVhZCAodm9p ZCkKewoKICByZXR1cm4gQUNFX09TOjpyd190cnlyZGxvY2sgKCZ0aGlzLT5sb2NrXyk7Cn0KCmlu bGluZSBpbnQKQUNFX1JXX011dGV4Ojp0cnlhY3F1aXJlX3dyaXRlICh2b2lkKQp7CgogIHJldHVy biBBQ0VfT1M6OnJ3X3RyeXdybG9jayAoJnRoaXMtPmxvY2tfKTsKfQoKaW5saW5lIGludApBQ0Vf UldfTXV0ZXg6OnRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCkKewoKICByZXR1cm4gQUNF X09TOjpyd190cnl3cmxvY2tfdXBncmFkZSAoJnRoaXMtPmxvY2tfKTsKfQoKaW5saW5lIGludApB Q0VfUldfTXV0ZXg6OnRyeWFjcXVpcmUgKHZvaWQpCnsKCiAgcmV0dXJuIHRoaXMtPnRyeWFjcXVp cmVfd3JpdGUgKCk7Cn0KCmlubGluZSBpbnQKQUNFX1JXX011dGV4OjpyZWxlYXNlICh2b2lkKQp7 CgogIHJldHVybiBBQ0VfT1M6OnJ3X3VubG9jayAoJnRoaXMtPmxvY2tfKTsKfQoKCmlubGluZSBp bnQKQUNFX1JXX1RocmVhZF9NdXRleDo6dHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2b2lkKQp7 CgogIHJldHVybiBBQ0VfT1M6OnJ3X3RyeXdybG9ja191cGdyYWRlICgmdGhpcy0+bG9ja18pOwp9 CgoKaW5saW5lIGludApBQ0VfTXV0ZXg6OmFjcXVpcmVfcmVhZCAodm9pZCkKewoKCgoKCiAgcmV0 dXJuIEFDRV9PUzo6bXV0ZXhfbG9jayAoJnRoaXMtPmxvY2tfKTsKfQoKaW5saW5lIGludApBQ0Vf TXV0ZXg6OmFjcXVpcmVfd3JpdGUgKHZvaWQpCnsKCgoKCgogIHJldHVybiBBQ0VfT1M6Om11dGV4 X2xvY2sgKCZ0aGlzLT5sb2NrXyk7Cn0KCmlubGluZSBpbnQKQUNFX011dGV4Ojp0cnlhY3F1aXJl X3JlYWQgKHZvaWQpCnsKCgoKCgogIHJldHVybiBBQ0VfT1M6Om11dGV4X3RyeWxvY2sgKCZ0aGlz LT5sb2NrXyk7Cn0KCmlubGluZSBjb25zdCBBQ0VfbXV0ZXhfdCAmCkFDRV9NdXRleDo6bG9jayAo dm9pZCkgY29uc3QKewoKCgoKCiAgcmV0dXJuIHRoaXMtPmxvY2tfOwp9CgppbmxpbmUgaW50CkFD RV9NdXRleDo6dHJ5YWNxdWlyZV93cml0ZSAodm9pZCkKewoKCgoKCiAgcmV0dXJuIEFDRV9PUzo6 bXV0ZXhfdHJ5bG9jayAoJnRoaXMtPmxvY2tfKTsKfQoKaW5saW5lIGludApBQ0VfTXV0ZXg6OnRy eWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCkKewoKICByZXR1cm4gMDsKfQoKaW5saW5lIGlu dApBQ0VfTXV0ZXg6OmFjcXVpcmUgKHZvaWQpCnsKCgoKCgogIHJldHVybiBBQ0VfT1M6Om11dGV4 X2xvY2sgKCZ0aGlzLT5sb2NrXyk7Cn0KCmlubGluZSBpbnQKQUNFX011dGV4OjphY3F1aXJlIChB Q0VfVGltZV9WYWx1ZSAmdHYpCnsKCiAgcmV0dXJuIEFDRV9PUzo6bXV0ZXhfbG9jayAoJnRoaXMt PmxvY2tfLCB0dik7Cn0KCmlubGluZSBpbnQKQUNFX011dGV4Ojp0cnlhY3F1aXJlICh2b2lkKQp7 CgoKCgoKICByZXR1cm4gQUNFX09TOjptdXRleF90cnlsb2NrICgmdGhpcy0+bG9ja18pOwp9Cgpp bmxpbmUgaW50CkFDRV9NdXRleDo6cmVsZWFzZSAodm9pZCkKewoKCgoKCiAgcmV0dXJuIEFDRV9P Uzo6bXV0ZXhfdW5sb2NrICgmdGhpcy0+bG9ja18pOwp9CgppbmxpbmUgaW50CkFDRV9NdXRleDo6 cmVtb3ZlICh2b2lkKQp7CgoKICAgaW50IHJlc3VsdCA9IDA7CgoKCgoKCiAgIGlmICh0aGlzLT5w cm9jZXNzX2xvY2tfKQogICAgIHsKICAgICAgIGlmICh0aGlzLT5yZW1vdmVkXyA9PSAwKQogICAg ICAgICB7CiAgICAgICAgICAgdGhpcy0+cmVtb3ZlZF8gPSAxOwoKCgogICAgICAgICAgIGlmICgh dGhpcy0+bG9ja25hbWVfKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBBQ0VfT1M6Om11 bm1hcCAodGhpcy0+cHJvY2Vzc19sb2NrXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZiAoQUNFX211dGV4X3QpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJlc3VsdCA9IEFDRV9PUzo6bXV0ZXhfZGVzdHJv eSAodGhpcy0+cHJvY2Vzc19sb2NrXyk7CiAgICAgICAgICAgICAgIEFDRV9PUzo6bXVubWFwICh0 aGlzLT5wcm9jZXNzX2xvY2tfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m IChBQ0VfbXV0ZXhfdCkpOwogICAgICAgICAgICAgICBBQ0VfT1M6OnNobV91bmxpbmsgKHRoaXMt PmxvY2tuYW1lXyk7CiAgICAgICAgICAgICAgIEFDRV9PUzo6ZnJlZSAoc3RhdGljX2Nhc3Q8dm9p ZCAqPiAoY29uc3RfY2FzdDxBQ0VfVENIQVIgKj4gKHRoaXMtPmxvY2tuYW1lXykpKTsKCgogICAg ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICByZXR1cm4gcmVzdWx0OwojIDI0MyAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmkiCn0KCmlu bGluZSBjb25zdCBBQ0Vfc2VtYV90ICYKQUNFX1NlbWFwaG9yZTo6bG9jayAodm9pZCkgY29uc3QK ewoKICByZXR1cm4gdGhpcy0+c2VtYXBob3JlXzsKfQoKaW5saW5lIGludApBQ0VfU2VtYXBob3Jl OjpyZW1vdmUgKHZvaWQpCnsKCiAgaW50IHJlc3VsdCA9IDA7CiAgaWYgKHRoaXMtPnJlbW92ZWRf ID09IDApCiAgICB7CiAgICAgIHRoaXMtPnJlbW92ZWRfID0gMTsKICAgICAgcmVzdWx0ID0gQUNF X09TOjpzZW1hX2Rlc3Ryb3kgKCZ0aGlzLT5zZW1hcGhvcmVfKTsKICAgIH0KICByZXR1cm4gcmVz dWx0Owp9CgppbmxpbmUgaW50CkFDRV9TZW1hcGhvcmU6OmFjcXVpcmUgKHZvaWQpCnsKCiAgcmV0 dXJuIEFDRV9PUzo6c2VtYV93YWl0ICgmdGhpcy0+c2VtYXBob3JlXyk7Cn0KCmlubGluZSBpbnQK QUNFX1NlbWFwaG9yZTo6YWNxdWlyZSAoQUNFX1RpbWVfVmFsdWUgJnR2KQp7CgogIHJldHVybiBB Q0VfT1M6OnNlbWFfd2FpdCAoJnRoaXMtPnNlbWFwaG9yZV8sIHR2KTsKfQoKaW5saW5lIGludApB Q0VfU2VtYXBob3JlOjp0cnlhY3F1aXJlICh2b2lkKQp7CgogIHJldHVybiBBQ0VfT1M6OnNlbWFf dHJ5d2FpdCAoJnRoaXMtPnNlbWFwaG9yZV8pOwp9CgppbmxpbmUgaW50CkFDRV9TZW1hcGhvcmU6 OnJlbGVhc2UgKHZvaWQpCnsKCiAgcmV0dXJuIEFDRV9PUzo6c2VtYV9wb3N0ICgmdGhpcy0+c2Vt YXBob3JlXyk7Cn0KCmlubGluZSBpbnQKQUNFX1NlbWFwaG9yZTo6cmVsZWFzZSAoc2l6ZV90IHJl bGVhc2VfY291bnQpCnsKCiAgcmV0dXJuIEFDRV9PUzo6c2VtYV9wb3N0ICgmdGhpcy0+c2VtYXBo b3JlXywgcmVsZWFzZV9jb3VudCk7Cn0KCgoKCgppbmxpbmUgaW50CkFDRV9TZW1hcGhvcmU6OmFj cXVpcmVfcmVhZCAodm9pZCkKewogIHJldHVybiB0aGlzLT5hY3F1aXJlICgpOwp9CgoKCgoKaW5s aW5lIGludApBQ0VfU2VtYXBob3JlOjphY3F1aXJlX3dyaXRlICh2b2lkKQp7CiAgcmV0dXJuIHRo aXMtPmFjcXVpcmUgKCk7Cn0KCgoKCgppbmxpbmUgaW50CkFDRV9TZW1hcGhvcmU6OnRyeWFjcXVp cmVfcmVhZCAodm9pZCkKewogIHJldHVybiB0aGlzLT50cnlhY3F1aXJlICgpOwp9CgoKCgoKaW5s aW5lIGludApBQ0VfU2VtYXBob3JlOjp0cnlhY3F1aXJlX3dyaXRlICh2b2lkKQp7CiAgcmV0dXJu IHRoaXMtPnRyeWFjcXVpcmUgKCk7Cn0KCgoKCgppbmxpbmUgaW50CkFDRV9TZW1hcGhvcmU6OnRy eWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCkKewogIHJldHVybiAwOwp9CgoKCmlubGluZQpB Q0VfTnVsbF9TZW1hcGhvcmU6OkFDRV9OdWxsX1NlbWFwaG9yZSAodV9pbnQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCkKewp9CgppbmxpbmUKQUNFX051bGxfU2VtYXBob3JlOjp+QUNFX051bGxf U2VtYXBob3JlICh2b2lkKQp7Cn0KCmlubGluZSBpbnQKQUNFX051bGxfU2VtYXBob3JlOjpyZW1v dmUgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9TZW1hcGhvcmU6 OmFjcXVpcmUgKEFDRV9UaW1lX1ZhbHVlICYpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApB Q0VfTnVsbF9TZW1hcGhvcmU6OmFjcXVpcmUgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5l IGludApBQ0VfTnVsbF9TZW1hcGhvcmU6OnRyeWFjcXVpcmUgKHZvaWQpCnsKICByZXR1cm4gMDsK fQoKaW5saW5lIGludApBQ0VfTnVsbF9TZW1hcGhvcmU6OnJlbGVhc2UgKHNpemVfdCkKewogIHJl dHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX1NlbWFwaG9yZTo6cmVsZWFzZSAodm9pZCkK ewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX1NlbWFwaG9yZTo6YWNxdWlyZV93 cml0ZSAodm9pZCkKewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX1NlbWFwaG9y ZTo6dHJ5YWNxdWlyZV93cml0ZSAodm9pZCkKewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFD RV9OdWxsX1NlbWFwaG9yZTo6dHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2b2lkKQp7CiAgcmV0 dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX051bGxfU2VtYXBob3JlOjphY3F1aXJlX3JlYWQgKHZv aWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9TZW1hcGhvcmU6OnRyeWFj cXVpcmVfcmVhZCAodm9pZCkKewogIHJldHVybiAwOwp9CgppbmxpbmUgdm9pZApBQ0VfTnVsbF9T ZW1hcGhvcmU6OmR1bXAgKHZvaWQpIGNvbnN0CnsKfQoKCgppbmxpbmUgY29uc3QgQUNFX3RocmVh ZF9tdXRleF90ICYKQUNFX1RocmVhZF9NdXRleDo6bG9jayAodm9pZCkgY29uc3QKewoKICByZXR1 cm4gdGhpcy0+bG9ja187Cn0KCmlubGluZSBpbnQKQUNFX1RocmVhZF9NdXRleDo6YWNxdWlyZV9y ZWFkICh2b2lkKQp7CgogIHJldHVybiBBQ0VfT1M6OnRocmVhZF9tdXRleF9sb2NrICgmdGhpcy0+ bG9ja18pOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWRfTXV0ZXg6OmFjcXVpcmVfd3JpdGUgKHZv aWQpCnsKCiAgcmV0dXJuIEFDRV9PUzo6dGhyZWFkX211dGV4X2xvY2sgKCZ0aGlzLT5sb2NrXyk7 Cn0KCmlubGluZSBpbnQKQUNFX1RocmVhZF9NdXRleDo6dHJ5YWNxdWlyZV9yZWFkICh2b2lkKQp7 CgogIHJldHVybiBBQ0VfT1M6OnRocmVhZF9tdXRleF90cnlsb2NrICgmdGhpcy0+bG9ja18pOwp9 CgppbmxpbmUgaW50CkFDRV9UaHJlYWRfTXV0ZXg6OnRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpCnsK CiAgcmV0dXJuIEFDRV9PUzo6dGhyZWFkX211dGV4X3RyeWxvY2sgKCZ0aGlzLT5sb2NrXyk7Cn0K CmlubGluZSBpbnQKQUNFX1RocmVhZF9NdXRleDo6dHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2 b2lkKQp7CgogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWRfTXV0ZXg6OmFjcXVp cmUgKHZvaWQpCnsKCiAgcmV0dXJuIEFDRV9PUzo6dGhyZWFkX211dGV4X2xvY2sgKCZ0aGlzLT5s b2NrXyk7Cn0KCmlubGluZSBpbnQKQUNFX1RocmVhZF9NdXRleDo6YWNxdWlyZSAoQUNFX1RpbWVf VmFsdWUgJnR2KQp7CgogIHJldHVybiBBQ0VfT1M6OnRocmVhZF9tdXRleF9sb2NrICgmdGhpcy0+ bG9ja18sIHR2KTsKfQoKaW5saW5lIGludApBQ0VfVGhyZWFkX011dGV4Ojp0cnlhY3F1aXJlICh2 b2lkKQp7CgogIHJldHVybiBBQ0VfT1M6OnRocmVhZF9tdXRleF90cnlsb2NrICgmdGhpcy0+bG9j a18pOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWRfTXV0ZXg6OnJlbGVhc2UgKHZvaWQpCnsKCiAg cmV0dXJuIEFDRV9PUzo6dGhyZWFkX211dGV4X3VubG9jayAoJnRoaXMtPmxvY2tfKTsKfQoKaW5s aW5lIGludApBQ0VfVGhyZWFkX011dGV4OjpyZW1vdmUgKHZvaWQpCnsKCiAgaW50IHJlc3VsdCA9 IDA7CiAgaWYgKHRoaXMtPnJlbW92ZWRfID09IDApCiAgICB7CiAgICAgIHRoaXMtPnJlbW92ZWRf ID0gMTsKICAgICAgcmVzdWx0ID0gQUNFX09TOjp0aHJlYWRfbXV0ZXhfZGVzdHJveSAoJnRoaXMt PmxvY2tfKTsKICAgIH0KICByZXR1cm4gcmVzdWx0Owp9CiMgNTk3ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaSIKaW5saW5lCkFDRV9Db25kaXRp b25fQXR0cmlidXRlczo6QUNFX0NvbmRpdGlvbl9BdHRyaWJ1dGVzIChpbnQgdHlwZSkKewogICh2 b2lkKSBBQ0VfT1M6OmNvbmRhdHRyX2luaXQgKHRoaXMtPmF0dHJpYnV0ZXNfLCB0eXBlKTsKfQoK aW5saW5lCkFDRV9Db25kaXRpb25fQXR0cmlidXRlczo6fkFDRV9Db25kaXRpb25fQXR0cmlidXRl cyAodm9pZCkKewogIEFDRV9PUzo6Y29uZGF0dHJfZGVzdHJveSAodGhpcy0+YXR0cmlidXRlc18p Owp9CgppbmxpbmUgaW50CkFDRV9Db25kaXRpb25fVGhyZWFkX011dGV4OjpyZW1vdmUgKHZvaWQp CnsKIyA2MjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9T eW5jaC5pIgogIGludCByZXN1bHQgPSAwOwoKICBpZiAodGhpcy0+cmVtb3ZlZF8gPT0gMCkKICAg IHsKICAgICAgdGhpcy0+cmVtb3ZlZF8gPSAxOwoKICAgICAgd2hpbGUgKChyZXN1bHQgPSBBQ0Vf T1M6OmNvbmRfZGVzdHJveSAoJnRoaXMtPmNvbmRfKSkgPT0gLTEKICAgICAgICAgICAgICYmICgq X19lcnJub19sb2NhdGlvbiAoKSkgPT0gMTYpCiAgICAgICAgewogICAgICAgICAgQUNFX09TOjpj b25kX2Jyb2FkY2FzdCAoJnRoaXMtPmNvbmRfKTsKICAgICAgICAgIEFDRV9PUzo6dGhyX3lpZWxk ICgpOwogICAgICAgIH0KICAgIH0KICByZXR1cm4gcmVzdWx0Owp9CgppbmxpbmUgQUNFX1RocmVh ZF9NdXRleCAmCkFDRV9Db25kaXRpb25fVGhyZWFkX011dGV4OjptdXRleCAodm9pZCkKewoKICBy ZXR1cm4gdGhpcy0+bXV0ZXhfOwp9CgppbmxpbmUgdm9pZApBQ0VfUmVjdXJzaXZlX1RocmVhZF9N dXRleDo6c2V0X3RocmVhZF9pZCAoQUNFX3RocmVhZF90IHQpCnsKCgoKCiAgdGhpcy0+cmVjdXJz aXZlX211dGV4Xy5vd25lcl9pZF8gPSB0OwoKfQoKaW5saW5lIGludApBQ0VfUmVjdXJzaXZlX1Ro cmVhZF9NdXRleDo6YWNxdWlyZV9yZWFkICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmFjcXVpcmUg KCk7Cn0KCmlubGluZSBpbnQKQUNFX1JlY3Vyc2l2ZV9UaHJlYWRfTXV0ZXg6OmFjcXVpcmVfd3Jp dGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+YWNxdWlyZSAoKTsKfQoKaW5saW5lIGludApBQ0Vf UmVjdXJzaXZlX1RocmVhZF9NdXRleDo6dHJ5YWNxdWlyZV9yZWFkICh2b2lkKQp7CiAgcmV0dXJu IHRoaXMtPnRyeWFjcXVpcmUgKCk7Cn0KCmlubGluZSBpbnQKQUNFX1JlY3Vyc2l2ZV9UaHJlYWRf TXV0ZXg6OnRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+dHJ5YWNxdWly ZSAoKTsKfQoKaW5saW5lIGludApBQ0VfUmVjdXJzaXZlX1RocmVhZF9NdXRleDo6dHJ5YWNxdWly ZV93cml0ZV91cGdyYWRlICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCgoKaW5saW5lCkFDRV9OdWxs X0JhcnJpZXI6OkFDRV9OdWxsX0JhcnJpZXIgKHVfaW50LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKikKewp9CgppbmxpbmUKQUNFX051bGxfQmFycmllcjo6fkFDRV9OdWxsX0Jh cnJpZXIgKHZvaWQpCnsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9CYXJyaWVyOjp3YWl0ICh2b2lk KQp7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSB2b2lkCkFDRV9OdWxsX0JhcnJpZXI6OmR1bXAgKHZv aWQpIGNvbnN0CnsKfQoKaW5saW5lCkFDRV9OdWxsX011dGV4OjpBQ0VfTnVsbF9NdXRleCAoY29u c3QgQUNFX1RDSEFSICopCnsKfQoKaW5saW5lCkFDRV9OdWxsX011dGV4Ojp+QUNFX051bGxfTXV0 ZXggKHZvaWQpCnsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9NdXRleDo6cmVtb3ZlICh2b2lkKQp7 CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX051bGxfTXV0ZXg6OmFjcXVpcmUgKHZvaWQp CnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9NdXRleDo6YWNxdWlyZSAoQUNF X1RpbWVfVmFsdWUgJikKewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX011dGV4 Ojp0cnlhY3F1aXJlICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX051bGxf TXV0ZXg6OnJlbGVhc2UgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVs bF9NdXRleDo6YWNxdWlyZV93cml0ZSAodm9pZCkKewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50 CkFDRV9OdWxsX011dGV4Ojp0cnlhY3F1aXJlX3dyaXRlICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0K CmlubGluZSBpbnQKQUNFX051bGxfTXV0ZXg6OnRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9p ZCkKewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX011dGV4OjphY3F1aXJlX3Jl YWQgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9NdXRleDo6dHJ5 YWNxdWlyZV9yZWFkICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSB2b2lkCkFDRV9OdWxs X011dGV4OjpkdW1wICh2b2lkKSBjb25zdAp7Cn0KCmlubGluZSBpbnQKQUNFX05vb3BfVG9rZW46 OnJlbmV3IChpbnQsIEFDRV9UaW1lX1ZhbHVlICopCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIHZv aWQKQUNFX05vb3BfVG9rZW46OmR1bXAgKHZvaWQpIGNvbnN0CnsKfQoKCmlubGluZQpBQ0VfTnVs bF9Db25kaXRpb246OkFDRV9OdWxsX0NvbmRpdGlvbiAoY29uc3QgQUNFX051bGxfTXV0ZXggJm0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKQogIDogbXV0 ZXhfICgoQUNFX051bGxfTXV0ZXggJikgbSkKewp9CgppbmxpbmUgQUNFX051bGxfQ29uZGl0aW9u Ojp+QUNFX051bGxfQ29uZGl0aW9uICh2b2lkKQp7Cn0KCmlubGluZSBpbnQgQUNFX051bGxfQ29u ZGl0aW9uOjpyZW1vdmUgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVs bF9Db25kaXRpb246OndhaXQgKEFDRV9UaW1lX1ZhbHVlICopCnsKICAoKl9fZXJybm9fbG9jYXRp b24gKCkpID0gNjI7CiAgcmV0dXJuIC0xOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX0NvbmRpdGlv bjo6c2lnbmFsICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX051bGxfQ29u ZGl0aW9uOjpicm9hZGNhc3QgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIEFDRV9OdWxs X011dGV4ICYKQUNFX051bGxfQ29uZGl0aW9uOjptdXRleCAodm9pZCkKewogIHJldHVybiB0aGlz LT5tdXRleF87Cn0KCmlubGluZSB2b2lkCkFDRV9OdWxsX0NvbmRpdGlvbjo6ZHVtcCAodm9pZCkg Y29uc3QKewp9CiMgODkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvU3luY2guaSIKaW5saW5lCkFDRV9UU1NfQWRhcHRlcjo6fkFDRV9UU1NfQWRhcHRlciAo dm9pZCkKewp9CgppbmxpbmUKQUNFX01hbnVhbF9FdmVudDo6fkFDRV9NYW51YWxfRXZlbnQgKHZv aWQpCnsKfQoKaW5saW5lCkFDRV9BdXRvX0V2ZW50Ojp+QUNFX0F1dG9fRXZlbnQgKHZvaWQpCnsK fQoKCmlubGluZQpBQ0VfUldfVGhyZWFkX011dGV4Ojp+QUNFX1JXX1RocmVhZF9NdXRleCAodm9p ZCkKewp9CgppbmxpbmUKQUNFX1RocmVhZF9TZW1hcGhvcmU6On5BQ0VfVGhyZWFkX1NlbWFwaG9y ZSAodm9pZCkKewp9CgppbmxpbmUKQUNFX1N1Yl9CYXJyaWVyOjp+QUNFX1N1Yl9CYXJyaWVyICh2 b2lkKQp7Cn0KCmlubGluZQpBQ0VfQmFycmllcjo6fkFDRV9CYXJyaWVyICh2b2lkKQp7Cn0KCmlu bGluZQpBQ0VfVGhyZWFkX0JhcnJpZXI6On5BQ0VfVGhyZWFkX0JhcnJpZXIgKHZvaWQpCnsKfQoj IDE1NTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j aC5oIiAyCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL1N5bmNoX1QuaCIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvU3luY2hfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIgMgoKCgoKCgpjbGFz cyBBQ0VfVGltZV9WYWx1ZTsKIyAzNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01FQ0hB TklTTT4KY2xhc3MgQUNFX0xvY2tfQWRhcHRlciA6IHB1YmxpYyBBQ0VfTG9jawp7CnB1YmxpYzoK ICB0eXBlZGVmIEFDRV9MT0NLSU5HX01FQ0hBTklTTSBBQ0VfTE9DSzsKCgoKCiAgQUNFX0xvY2tf QWRhcHRlciAoQUNFX0xPQ0tJTkdfTUVDSEFOSVNNICZsb2NrKTsKCgoKICBBQ0VfTG9ja19BZGFw dGVyICh2b2lkKTsKCgoKICB2aXJ0dWFsIH5BQ0VfTG9ja19BZGFwdGVyICh2b2lkKTsKCgoKICB2 aXJ0dWFsIGludCBhY3F1aXJlICh2b2lkKTsKCgogIHZpcnR1YWwgaW50IHRyeWFjcXVpcmUgKHZv aWQpOwoKCiAgdmlydHVhbCBpbnQgcmVsZWFzZSAodm9pZCk7CgoKCgoKCiAgdmlydHVhbCBpbnQg YWNxdWlyZV9yZWFkICh2b2lkKTsKCgoKCgoKICB2aXJ0dWFsIGludCBhY3F1aXJlX3dyaXRlICh2 b2lkKTsKCgoKICB2aXJ0dWFsIGludCB0cnlhY3F1aXJlX3JlYWQgKHZvaWQpOwoKCgogIHZpcnR1 YWwgaW50IHRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpOwoKCgoKCgogIHZpcnR1YWwgaW50IHRyeWFj cXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCk7CgoKICB2aXJ0dWFsIGludCByZW1vdmUgKHZvaWQp OwoKcHJpdmF0ZToKCiAgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNICpsb2NrXzsKCgoKICBpbnQgZGVs ZXRlX2xvY2tfOwp9OwojIDEyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL1N5bmNoX1QuaCIKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01FQ0hBTklT TT4KY2xhc3MgQUNFX1JldmVyc2VfTG9jayA6IHB1YmxpYyBBQ0VfTG9jawp7CnB1YmxpYzoKICB0 eXBlZGVmIEFDRV9MT0NLSU5HX01FQ0hBTklTTSBBQ0VfTE9DSzsKCgoKCiAgQUNFX1JldmVyc2Vf TG9jayAoQUNFX0xPQ0tJTkdfTUVDSEFOSVNNICZsb2NrKTsKCgoKICB2aXJ0dWFsIH5BQ0VfUmV2 ZXJzZV9Mb2NrICh2b2lkKTsKCgoKICB2aXJ0dWFsIGludCBhY3F1aXJlICh2b2lkKTsKCgogIHZp cnR1YWwgaW50IHRyeWFjcXVpcmUgKHZvaWQpOwoKCiAgdmlydHVhbCBpbnQgcmVsZWFzZSAodm9p ZCk7CgoKICB2aXJ0dWFsIGludCBhY3F1aXJlX3JlYWQgKHZvaWQpOwoKCiAgdmlydHVhbCBpbnQg YWNxdWlyZV93cml0ZSAodm9pZCk7CgoKICB2aXJ0dWFsIGludCB0cnlhY3F1aXJlX3JlYWQgKHZv aWQpOwoKCiAgdmlydHVhbCBpbnQgdHJ5YWNxdWlyZV93cml0ZSAodm9pZCk7CgoKICB2aXJ0dWFs IGludCB0cnlhY3F1aXJlX3dyaXRlX3VwZ3JhZGUgKHZvaWQpOwoKCiAgdmlydHVhbCBpbnQgcmVt b3ZlICh2b2lkKTsKCnByaXZhdGU6CgogIEFDRV9MT0NLSU5HX01FQ0hBTklTTSAmbG9ja187Cn07 CiMgMTgyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3lu Y2hfVC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+CmNsYXNzIEFDRV9B dG9taWNfT3AKewpwdWJsaWM6CgoKCiAgQUNFX0F0b21pY19PcCAodm9pZCk7CgoKICBBQ0VfQXRv bWljX09wIChjb25zdCBUWVBFICZjKTsKCgoKCiAgVFlQRSBvcGVyYXRvcisrICh2b2lkKTsKCgog IFRZUEUgb3BlcmF0b3IrKyAoaW50KTsKCgogIFRZUEUgb3BlcmF0b3IrPSAoY29uc3QgVFlQRSAm aSk7CgoKICBUWVBFIG9wZXJhdG9yLS0gKHZvaWQpOwoKCiAgVFlQRSBvcGVyYXRvci0tIChpbnQp OwoKCiAgVFlQRSBvcGVyYXRvci09IChjb25zdCBUWVBFICZpKTsKCgogIGludCBvcGVyYXRvcj09 IChjb25zdCBUWVBFICZpKSBjb25zdDsKCgogIGludCBvcGVyYXRvciE9IChjb25zdCBUWVBFICZp KSBjb25zdDsKCgogIGludCBvcGVyYXRvcj49IChjb25zdCBUWVBFICZpKSBjb25zdDsKCgogIGlu dCBvcGVyYXRvcj4gKGNvbnN0IFRZUEUgJnJocykgY29uc3Q7CgoKICBpbnQgb3BlcmF0b3I8PSAo Y29uc3QgVFlQRSAmcmhzKSBjb25zdDsKCgogIGludCBvcGVyYXRvcjwgKGNvbnN0IFRZUEUgJnJo cykgY29uc3Q7CgoKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgVFlQRSAmaSk7CgoKICB2b2lkIG9w ZXJhdG9yPSAoY29uc3QgQUNFX0F0b21pY19PcDxBQ0VfTE9DSywgVFlQRT4gJnJocyk7CgoKICBU WVBFIHZhbHVlICh2b2lkKSBjb25zdDsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKCgoK ICBBQ0VfQXRvbWljX09wIChjb25zdCBBQ0VfQXRvbWljX09wPEFDRV9MT0NLLCBUWVBFPiAmKTsK IyAyNTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j aF9ULmgiCiAgQUNFX0xPQ0sgJm11dGV4ICh2b2lkKTsKCgoKCgoKCiAgVFlQRSAmdmFsdWVfaSAo dm9pZCk7Cgpwcml2YXRlOgoKICBBQ0VfTE9DSyBtdXRleF87CgoKICBUWVBFIHZhbHVlXzsKfTsK IyAyOTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j aF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBUWVBFPgpjbGFzcyBBQ0VfVFNTCnsKcHVibGljOgojIDMw NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1Qu aCIKICBBQ0VfVFNTIChUWVBFICp0c19vYmogPSAwKTsKCgogIHZpcnR1YWwgfkFDRV9UU1MgKHZv aWQpOwojIDMxOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L1N5bmNoX1QuaCIKICBUWVBFICp0c19vYmplY3QgKHZvaWQpIGNvbnN0OwoKCgogIFRZUEUgKnRz X29iamVjdCAoVFlQRSAqKTsKCgoKICBUWVBFICpvcGVyYXRvci0+ICgpIGNvbnN0OwoKCiAgb3Bl cmF0b3IgVFlQRSAqKHZvaWQpIGNvbnN0OwoKCiAgdmlydHVhbCBUWVBFICptYWtlX1RTU19UWVBF ICh2b2lkKSBjb25zdDsKCgoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgoKCnByb3RlY3Rl ZDoKCgogIFRZUEUgKnRzX2dldCAodm9pZCkgY29uc3Q7CgoKCiAgaW50IHRzX2luaXQgKHZvaWQp IGNvbnN0OwoKCgoKCgogIEFDRV9UaHJlYWRfTXV0ZXgga2V5bG9ja187CgoKICBpbnQgb25jZV87 CgoKICBBQ0VfdGhyZWFkX2tleV90IGtleV87CgoKICBzdGF0aWMgdm9pZCBjbGVhbnVwICh2b2lk ICpwdHIpOwoKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9UU1M8VFlQRT4gJik7CiAgQUNF X1RTUyAoY29uc3QgQUNFX1RTUzxUWVBFPiAmKTsKfTsKIyAzODkgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBU WVBFPgpjbGFzcyBBQ0VfVFNTX1R5cGVfQWRhcHRlcgp7CnB1YmxpYzoKCiAgQUNFX1RTU19UeXBl X0FkYXB0ZXIgKGNvbnN0IFRZUEUgdmFsdWUgPSAwKTogdmFsdWVfICh2YWx1ZSkge30KCgoKICBv cGVyYXRvciBUWVBFICgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlXzsgfTsKCgoKICBvcGVyYXRvciBU WVBFICYoKSB7IHJldHVybiB2YWx1ZV87IH07Cgpwcml2YXRlOgoKICBUWVBFIHZhbHVlXzsKfTsK IyA0MjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j aF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX0d1YXJkCnsKcHVibGlj OgoKCiAgQUNFX0d1YXJkIChBQ0VfTE9DSyAmbCk7CgoKCgogIEFDRV9HdWFyZCAoQUNFX0xPQ0sg JmwsIGludCBibG9jayk7CgoKCgoKCiAgQUNFX0d1YXJkIChBQ0VfTE9DSyAmbCwgaW50IGJsb2Nr LCBpbnQgYmVjb21lX293bmVyKTsKCgogIH5BQ0VfR3VhcmQgKHZvaWQpOwoKCgoKICBpbnQgYWNx dWlyZSAodm9pZCk7CgoKICBpbnQgdHJ5YWNxdWlyZSAodm9pZCk7CgoKICBpbnQgcmVsZWFzZSAo dm9pZCk7CgoKCiAgdm9pZCBkaXNvd24gKHZvaWQpOwoKCgoKICBpbnQgbG9ja2VkICh2b2lkKSBj b25zdDsKCgogIGludCByZW1vdmUgKHZvaWQpOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsK CgoKCnByb3RlY3RlZDoKCgogIEFDRV9HdWFyZCAoQUNFX0xPQ0sgKmxvY2spOiBsb2NrXyAobG9j aykge30KCgogIEFDRV9MT0NLICpsb2NrXzsKCgogIGludCBvd25lcl87Cgpwcml2YXRlOgoKICB2 b2lkIG9wZXJhdG9yPSAoY29uc3QgQUNFX0d1YXJkPEFDRV9MT0NLPiAmKTsKICBBQ0VfR3VhcmQg KGNvbnN0IEFDRV9HdWFyZDxBQ0VfTE9DSz4gJik7Cn07CiMgNDk3ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5oIgp0ZW1wbGF0ZSA8Y2xhc3Mg QUNFX0xPQ0s+CmNsYXNzIEFDRV9Xcml0ZV9HdWFyZCA6IHB1YmxpYyBBQ0VfR3VhcmQ8QUNFX0xP Q0s+CnsKcHVibGljOgoKCgogIEFDRV9Xcml0ZV9HdWFyZCAoQUNFX0xPQ0sgJm0pOwoKCgogIEFD RV9Xcml0ZV9HdWFyZCAoQUNFX0xPQ0sgJm0sIGludCBibG9jayk7CgoKCgogIGludCBhY3F1aXJl X3dyaXRlICh2b2lkKTsKCgogIGludCBhY3F1aXJlICh2b2lkKTsKCgogIGludCB0cnlhY3F1aXJl X3dyaXRlICh2b2lkKTsKCgogIGludCB0cnlhY3F1aXJlICh2b2lkKTsKCgoKCiAgdm9pZCBkdW1w ICh2b2lkKSBjb25zdDsKCgoKfTsKIyA1NDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KY2xh c3MgQUNFX1JlYWRfR3VhcmQgOiBwdWJsaWMgQUNFX0d1YXJkPEFDRV9MT0NLPgp7CnB1YmxpYzoK CgoKICBBQ0VfUmVhZF9HdWFyZCAoQUNFX0xPQ0smIG0pOwoKCgogIEFDRV9SZWFkX0d1YXJkIChB Q0VfTE9DSyAmbSwgaW50IGJsb2NrKTsKCgoKCiAgaW50IGFjcXVpcmVfcmVhZCAodm9pZCk7CgoK ICBpbnQgYWNxdWlyZSAodm9pZCk7CgoKICBpbnQgdHJ5YWNxdWlyZV9yZWFkICh2b2lkKTsKCgog IGludCB0cnlhY3F1aXJlICh2b2lkKTsKCgoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgoK fTsKIyA1OTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9T eW5jaF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX1RTU19HdWFyZAp7 CnB1YmxpYzoKCgoKICBBQ0VfVFNTX0d1YXJkIChBQ0VfTE9DSyAmbG9jaywgaW50IGJsb2NrID0g MSk7CgoKICB+QUNFX1RTU19HdWFyZCAodm9pZCk7CgoKCgogIGludCBhY3F1aXJlICh2b2lkKTsK CgoKICBpbnQgdHJ5YWNxdWlyZSAodm9pZCk7CgoKICBpbnQgcmVsZWFzZSAodm9pZCk7CgoKCiAg aW50IHJlbW92ZSAodm9pZCk7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCgoKcHJvdGVj dGVkOgoKICBBQ0VfVFNTX0d1YXJkICh2b2lkKTsKCgogIHZvaWQgaW5pdF9rZXkgKHZvaWQpOwoK CiAgc3RhdGljIHZvaWQgY2xlYW51cCAodm9pZCAqcHRyKTsKCgogIEFDRV90aHJlYWRfa2V5X3Qg a2V5XzsKCnByaXZhdGU6CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBBQ0VfVFNTX0d1YXJkPEFD RV9MT0NLPiAmKTsKICBBQ0VfVFNTX0d1YXJkIChjb25zdCBBQ0VfVFNTX0d1YXJkPEFDRV9MT0NL PiAmKTsKfTsKIyA2NTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9TeW5jaF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX1RTU19X cml0ZV9HdWFyZCA6IHB1YmxpYyBBQ0VfVFNTX0d1YXJkPEFDRV9MT0NLPgp7CnB1YmxpYzoKCgoK ICBBQ0VfVFNTX1dyaXRlX0d1YXJkIChBQ0VfTE9DSyAmbG9jaywgaW50IGJsb2NrID0gMSk7CgoK CgogIGludCBhY3F1aXJlX3dyaXRlICh2b2lkKTsKCgogIGludCBhY3F1aXJlICh2b2lkKTsKCgog IGludCB0cnlhY3F1aXJlX3dyaXRlICh2b2lkKTsKCgogIGludCB0cnlhY3F1aXJlICh2b2lkKTsK CgoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgoKfTsKIyA2OTYgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiCnRlbXBsYXRlIDxjbGFz cyBBQ0VfTE9DSz4KY2xhc3MgQUNFX1RTU19SZWFkX0d1YXJkIDogcHVibGljIEFDRV9UU1NfR3Vh cmQ8QUNFX0xPQ0s+CnsKcHVibGljOgoKCiAgQUNFX1RTU19SZWFkX0d1YXJkIChBQ0VfTE9DSyAm bG9jaywgaW50IGJsb2NrID0gMSk7CgoKCiAgaW50IGFjcXVpcmVfcmVhZCAodm9pZCk7CgoKICBp bnQgYWNxdWlyZSAodm9pZCk7CgoKCiAgaW50IHRyeWFjcXVpcmVfcmVhZCAodm9pZCk7CgoKCiAg aW50IHRyeWFjcXVpcmUgKHZvaWQpOwoKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKCn07 CiMgNzUwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3lu Y2hfVC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+CmNsYXNzIEFDRV9Db25kaXRpb24KewpwdWJs aWM6CgoKICBBQ0VfQ29uZGl0aW9uIChNVVRFWCAmbSwgaW50IHR5cGUgPSBQVEhSRUFEX1BST0NF U1NfUFJJVkFURSwKICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIgKm5hbWUgPSAwLCB2 b2lkICphcmcgPSAwKTsKCgogIH5BQ0VfQ29uZGl0aW9uICh2b2lkKTsKIyA3NjkgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiCiAgaW50IHdh aXQgKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICphYnN0aW1lKTsKCgogIGludCB3YWl0ICh2b2lkKTsK IyA3ODIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j aF9ULmgiCiAgaW50IHdhaXQgKE1VVEVYICZtdXRleCwgY29uc3QgQUNFX1RpbWVfVmFsdWUgKmFi c3RpbWUgPSAwKTsKCgogIGludCBzaWduYWwgKHZvaWQpOwoKCiAgaW50IGJyb2FkY2FzdCAodm9p ZCk7CgoKCiAgaW50IHJlbW92ZSAodm9pZCk7CgoKICBNVVRFWCAmbXV0ZXggKHZvaWQpOwoKCiAg dm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgoKCnByb3RlY3RlZDoKIyA4MTcgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiCiAgQUNFX2NvbmRf dCBjb25kXzsKCgogIE1VVEVYICZtdXRleF87Cgpwcml2YXRlOgoKICB2b2lkIG9wZXJhdG9yPSAo Y29uc3QgQUNFX0NvbmRpdGlvbjxNVVRFWD4gJik7CiAgQUNFX0NvbmRpdGlvbiAoY29uc3QgQUNF X0NvbmRpdGlvbjxNVVRFWD4gJik7Cn07CiMgODQ1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+CmNs YXNzIEFDRV9UaHJlYWRfQ29uZGl0aW9uIDogcHVibGljIEFDRV9Db25kaXRpb248TVVURVg+CnsK cHVibGljOgoKICBBQ0VfVGhyZWFkX0NvbmRpdGlvbiAoTVVURVggJm0sIGNvbnN0IEFDRV9UQ0hB UiAqbmFtZSA9IDAsIHZvaWQgKmFyZyA9IDApOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsK CgoKfTsKIyA4NjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9TeW5jaF9ULmgiCmNsYXNzIEFDRV9OVUxMX1NZTkNICnsKcHVibGljOgogIHR5cGVkZWYgQUNF X051bGxfTXV0ZXggTVVURVg7CiAgdHlwZWRlZiBBQ0VfTnVsbF9NdXRleCBOVUxMX01VVEVYOwog IHR5cGVkZWYgQUNFX051bGxfTXV0ZXggUFJPQ0VTU19NVVRFWDsKICB0eXBlZGVmIEFDRV9OdWxs X011dGV4IFJFQ1VSU0lWRV9NVVRFWDsKICB0eXBlZGVmIEFDRV9OdWxsX011dGV4IFJXX01VVEVY OwogIHR5cGVkZWYgQUNFX051bGxfQ29uZGl0aW9uIENPTkRJVElPTjsKICB0eXBlZGVmIEFDRV9O dWxsX1NlbWFwaG9yZSBTRU1BUEhPUkU7CiAgdHlwZWRlZiBBQ0VfTnVsbF9NdXRleCBOVUxMX1NF TUFQSE9SRTsKfTsKCgoKY2xhc3MgQUNFX1Byb2Nlc3NfTXV0ZXg7CiMgODk1ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5oIgpjbGFzcyBBQ0Vf TVRfU1lOQ0gKewpwdWJsaWM6CiAgdHlwZWRlZiBBQ0VfVGhyZWFkX011dGV4IE1VVEVYOwogIHR5 cGVkZWYgQUNFX051bGxfTXV0ZXggTlVMTF9NVVRFWDsKICB0eXBlZGVmIEFDRV9Qcm9jZXNzX011 dGV4IFBST0NFU1NfTVVURVg7CiAgdHlwZWRlZiBBQ0VfUmVjdXJzaXZlX1RocmVhZF9NdXRleCBS RUNVUlNJVkVfTVVURVg7CiAgdHlwZWRlZiBBQ0VfUldfVGhyZWFkX011dGV4IFJXX01VVEVYOwog IHR5cGVkZWYgQUNFX0NvbmRpdGlvbl9UaHJlYWRfTXV0ZXggQ09ORElUSU9OOwogIHR5cGVkZWYg QUNFX1RocmVhZF9TZW1hcGhvcmUgU0VNQVBIT1JFOwogIHR5cGVkZWYgQUNFX051bGxfU2VtYXBo b3JlIE5VTExfU0VNQVBIT1JFOwp9OwojIDk2MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5pIiAxCgoKCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZC5oIiAxCiMgMTYgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9UaHJlYWQuaCIKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAx NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZC5o IiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9B Q0UuaCIgMQojIDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvVGhyZWFkLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvVGhyZWFkX0FkYXB0ZXIuaCIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVGhyZWFkX0FkYXB0ZXIuaCIKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNiAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZF9BZGFwdGVyLmgi IDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jh c2VfVGhyZWFkX0FkYXB0ZXIuaCIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvQmFzZV9UaHJlYWRfQWRhcHRlci5oIgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE2ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQmFzZV9UaHJlYWRfQWRhcHRl ci5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQmFzZV9UaHJlYWRfQWRhcHRlci5oIiAyCgoKCgoKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRXhwb3J0 LmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L0Jhc2VfVGhyZWFkX0FkYXB0ZXIuaCIgMgoKCgoKCgpleHRlcm4gIkMiIHZvaWQgKmFjZV90aHJl YWRfYWRhcHRlciAodm9pZCAqYXJncyk7CiMgNDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9CYXNlX1RocmVhZF9BZGFwdGVyLmgiCmNsYXNzIEFDRV9PU19U aHJlYWRfRGVzY3JpcHRvcgp7CnB1YmxpYzoKCiAgbG9uZyBmbGFncyAodm9pZCkgY29uc3Q7Cgpw cm90ZWN0ZWQ6CgogIEFDRV9PU19UaHJlYWRfRGVzY3JpcHRvciAobG9uZyBmbGFncyA9IDApOwoK CgoKCgoKICBsb25nIGZsYWdzXzsKfTsKIyA3NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2VfVGhyZWFkX0FkYXB0ZXIuaCIKY2xhc3MgQUNFX0Jhc2Vf VGhyZWFkX0FkYXB0ZXIKewpwdWJsaWM6CiAgQUNFX0Jhc2VfVGhyZWFkX0FkYXB0ZXIgKEFDRV9U SFJfRlVOQyB1c2VyX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1RIUl9DX0ZVTkMgZW50cnlfcG9pbnQgPSAo QUNFX1RIUl9DX0ZVTkMpIGFjZV90aHJlYWRfYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgQUNFX09TX1RocmVhZF9EZXNjcmlwdG9yICp0ZCA9IDAKCgoKCgogICAgICAgICAgICAg ICAgICAgICAgKTsKCgogIHZpcnR1YWwgdm9pZCAqaW52b2tlICh2b2lkKSA9IDA7CgoKCiAgQUNF X1RIUl9DX0ZVTkMgZW50cnlfcG9pbnQgKHZvaWQpOwoKCiAgc3RhdGljIHZvaWQgY2xvc2VfbG9n X21zZyAodm9pZCk7CgoKICBzdGF0aWMgdm9pZCBzeW5jX2xvZ19tc2cgKGNvbnN0IEFDRV9UQ0hB UiAqcHJvZ19uYW1lKTsKCgogIHN0YXRpYyBBQ0VfT1NfVGhyZWFkX0Rlc2NyaXB0b3IgKnRocl9k ZXNjX2xvZ19tc2cgKHZvaWQpOwoKcHJvdGVjdGVkOgoKCiAgdmlydHVhbCB+QUNFX0Jhc2VfVGhy ZWFkX0FkYXB0ZXIgKHZvaWQpOwoKCgogIHZvaWQgaW5oZXJpdF9sb2dfbXNnICh2b2lkKTsKCnBy aXZhdGU6CgogIHN0YXRpYyBBQ0VfSU5JVF9MT0dfTVNHX0hPT0sgaW5pdF9sb2dfbXNnX2hvb2tf OwogIHN0YXRpYyBBQ0VfSU5IRVJJVF9MT0dfTVNHX0hPT0sgaW5oZXJpdF9sb2dfbXNnX2hvb2tf OwogIHN0YXRpYyBBQ0VfQ0xPU0VfTE9HX01TR19IT09LIGNsb3NlX2xvZ19tc2dfaG9va187CiAg c3RhdGljIEFDRV9TWU5DX0xPR19NU0dfSE9PSyBzeW5jX2xvZ19tc2dfaG9va187CiAgc3RhdGlj IEFDRV9USFJfREVTQ19MT0dfTVNHX0hPT0sgdGhyX2Rlc2NfbG9nX21zZ19ob29rXzsKCgogIHN0 YXRpYyB2b2lkIHNldF9sb2dfbXNnX2hvb2tzIChBQ0VfSU5JVF9MT0dfTVNHX0hPT0sgaW5pdF9o b29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfSU5IRVJJVF9MT0dfTVNH X0hPT0sgaW5oZXJpdF9ob29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0Vf Q0xPU0VfTE9HX01TR19IT09LIGNsb3NlX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFDRV9TWU5DX0xPR19NU0dfSE9PSyBzeW5jX2hvb2ssCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9USFJfREVTQ19MT0dfTVNHX0hPT0sgdGhyX2Rlc2MpOwoKCiAg ZnJpZW5kIGNsYXNzIEFDRV9Mb2dfTXNnOwoKcHJvdGVjdGVkOgoKICBBQ0VfVEhSX0ZVTkMgdXNl cl9mdW5jXzsKCgogIHZvaWQgKmFyZ187CgoKCiAgQUNFX1RIUl9DX0ZVTkMgZW50cnlfcG9pbnRf OwoKCgoKCgoKICBBQ0VfT1NfVGhyZWFkX0Rlc2NyaXB0b3IgKnRocl9kZXNjXzsKCgogIEFDRV9P U19Mb2dfTXNnX0F0dHJpYnV0ZXMgbG9nX21zZ19hdHRyaWJ1dGVzXzsKCgoKICBmcmllbmQgY2xh c3MgQUNFX1RocmVhZF9BZGFwdGVyX0hhc19Qcml2YXRlX0Rlc3RydWN0b3I7Cn07CgoKCgoKCiMg MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2VfVGhy ZWFkX0FkYXB0ZXIuaW5sIiAxCgoKaW5saW5lIGxvbmcKQUNFX09TX1RocmVhZF9EZXNjcmlwdG9y OjpmbGFncyAodm9pZCkgY29uc3QKewogIHJldHVybiBmbGFnc187Cn0KCgppbmxpbmUKQUNFX09T X1RocmVhZF9EZXNjcmlwdG9yOjpBQ0VfT1NfVGhyZWFkX0Rlc2NyaXB0b3IgKGxvbmcgZmxhZ3Mp CiAgOiBmbGFnc18gKGZsYWdzKQp7Cn0KCmlubGluZSB2b2lkCkFDRV9CYXNlX1RocmVhZF9BZGFw dGVyOjpzZXRfbG9nX21zZ19ob29rcyAoCiAgICBBQ0VfSU5JVF9MT0dfTVNHX0hPT0sgaW5pdF9o b29rLAogICAgQUNFX0lOSEVSSVRfTE9HX01TR19IT09LIGluaGVyaXRfaG9vaywKICAgIEFDRV9D TE9TRV9MT0dfTVNHX0hPT0sgY2xvc2VfaG9vaywKICAgIEFDRV9TWU5DX0xPR19NU0dfSE9PSyBz eW5jX2hvb2ssCiAgICBBQ0VfVEhSX0RFU0NfTE9HX01TR19IT09LIHRocl9kZXNjX2hvb2spCnsK ICBBQ0VfQmFzZV9UaHJlYWRfQWRhcHRlcjo6aW5pdF9sb2dfbXNnX2hvb2tfID0gaW5pdF9ob29r OwogIEFDRV9CYXNlX1RocmVhZF9BZGFwdGVyOjppbmhlcml0X2xvZ19tc2dfaG9va18gPSBpbmhl cml0X2hvb2s7CiAgQUNFX0Jhc2VfVGhyZWFkX0FkYXB0ZXI6OmNsb3NlX2xvZ19tc2dfaG9va18g PSBjbG9zZV9ob29rOwogIEFDRV9CYXNlX1RocmVhZF9BZGFwdGVyOjpzeW5jX2xvZ19tc2dfaG9v a18gPSBzeW5jX2hvb2s7CiAgQUNFX0Jhc2VfVGhyZWFkX0FkYXB0ZXI6OnRocl9kZXNjX2xvZ19t c2dfaG9va18gPSB0aHJfZGVzY19ob29rOwp9CgppbmxpbmUgQUNFX1RIUl9DX0ZVTkMKQUNFX0Jh c2VfVGhyZWFkX0FkYXB0ZXI6OmVudHJ5X3BvaW50ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmVu dHJ5X3BvaW50XzsKfQojIDE2NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL0Jhc2VfVGhyZWFkX0FkYXB0ZXIuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE2OSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2VfVGhyZWFkX0FkYXB0ZXIu aCIgMgojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv VGhyZWFkX0FkYXB0ZXIuaCIgMgoKCgoKCgpjbGFzcyBBQ0VfVGhyZWFkX01hbmFnZXI7CmNsYXNz IEFDRV9UaHJlYWRfRGVzY3JpcHRvcjsKIyA0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZF9BZGFwdGVyLmgiCmNsYXNzIEFDRV9UaHJlYWRfQWRh cHRlciA6IHB1YmxpYyBBQ0VfQmFzZV9UaHJlYWRfQWRhcHRlcgp7CnB1YmxpYzoKICBBQ0VfVGhy ZWFkX0FkYXB0ZXIgKEFDRV9USFJfRlVOQyB1c2VyX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAg ICB2b2lkICphcmcsCiAgICAgICAgICAgICAgICAgICAgICBBQ0VfVEhSX0NfRlVOQyBlbnRyeV9w b2ludCA9IChBQ0VfVEhSX0NfRlVOQykgYWNlX3RocmVhZF9hZGFwdGVyLAogICAgICAgICAgICAg ICAgICAgICAgQUNFX1RocmVhZF9NYW5hZ2VyICp0aHJfbWdyID0gMCwKICAgICAgICAgICAgICAg ICAgICAgIEFDRV9UaHJlYWRfRGVzY3JpcHRvciAqdGQgPSAwCgoKCgoKICAgICAgICAgICAgICAg ICAgICAgICk7CgoKCgoKCiAgdmlydHVhbCB2b2lkICppbnZva2UgKHZvaWQpOwoKCiAgQUNFX1Ro cmVhZF9NYW5hZ2VyICp0aHJfbWdyICh2b2lkKTsKCnByaXZhdGU6CgogIH5BQ0VfVGhyZWFkX0Fk YXB0ZXIgKHZvaWQpOwoKCgogIHZpcnR1YWwgdm9pZCAqaW52b2tlX2kgKHZvaWQpOwoKcHJpdmF0 ZToKCiAgQUNFX1RocmVhZF9NYW5hZ2VyICp0aHJfbWdyXzsKCgoKICBmcmllbmQgY2xhc3MgQUNF X1RocmVhZF9BZGFwdGVyX0hhc19Qcml2YXRlX0Rlc3RydWN0b3I7Cn07CgoKCgoKCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZF9BZGFwdGVy LmlubCIgMQoKCmlubGluZSBBQ0VfVGhyZWFkX01hbmFnZXIgKgpBQ0VfVGhyZWFkX0FkYXB0ZXI6 OnRocl9tZ3IgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+dGhyX21ncl87Cn0KIyA5MCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZF9BZGFwdGVyLmgi IDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9w b3N0LmgiIDEKIyA5MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL1RocmVhZF9BZGFwdGVyLmgiIDIKIyAyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZC5oIiAyCiMgMzcgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9UaHJlYWQuaCIKY2xhc3MgQUNFX1RocmVhZAp7CnB1 YmxpYzoKIyA2OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L1RocmVhZC5oIgogIHN0YXRpYyBpbnQgc3Bhd24gKEFDRV9USFJfRlVOQyBmdW5jLAogICAgICAg ICAgICAgICAgICAgIHZvaWQgKmFyZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFn cyA9IDB4MDAwMDAwMDIgfCAweDAwMDEwMDAwLAogICAgICAgICAgICAgICAgICAgIEFDRV90aHJl YWRfdCAqdF9pZCA9IDAsCiAgICAgICAgICAgICAgICAgICAgQUNFX2h0aHJlYWRfdCAqdF9oYW5k bGUgPSAwLAogICAgICAgICAgICAgICAgICAgIGxvbmcgcHJpb3JpdHkgPSAoLTB4N2ZmZmZmZmZM IC0gMUwpLAogICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0YWNrID0gMCwKICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgc3RhY2tfc2l6ZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgQUNFX1Ro cmVhZF9BZGFwdGVyICp0aHJlYWRfYWRhcHRlciA9IDApOwojIDkzICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVGhyZWFkLmgiCiAgc3RhdGljIGludCBzcGF3 bl9uIChzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgIEFDRV9USFJfRlVOQyBmdW5jLAog ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnID0gMCwKICAgICAgICAgICAgICAgICAgICAg IGxvbmcgZmxhZ3MgPSAweDAwMDAwMDAyIHwgMHgwMDAxMDAwMCwKICAgICAgICAgICAgICAgICAg ICAgIGxvbmcgcHJpb3JpdHkgPSAoLTB4N2ZmZmZmZmZMIC0gMUwpLAogICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqc3RhY2tbXSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3Rh Y2tfc2l6ZVtdID0gMCwKICAgICAgICAgICAgICAgICAgICAgIEFDRV9UaHJlYWRfQWRhcHRlciAq dGhyZWFkX2FkYXB0ZXIgPSAwKTsKIyAxMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9UaHJlYWQuaCIKICBzdGF0aWMgaW50IHNwYXduX24gKEFDRV90aHJl YWRfdCB0aHJlYWRfaWRzW10sCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiwKICAgICAg ICAgICAgICAgICAgICAgIEFDRV9USFJfRlVOQyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAg dm9pZCAqYXJnLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywKICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgcHJpb3JpdHkgPSAoLTB4N2ZmZmZmZmZMIC0gMUwpLAogICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqc3RhY2tbXSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBzaXpl X3Qgc3RhY2tfc2l6ZVtdID0gMCwKICAgICAgICAgICAgICAgICAgICAgIEFDRV9odGhyZWFkX3Qg dGhyZWFkX2hhbmRsZXNbXSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBBQ0VfVGhyZWFkX0Fk YXB0ZXIgKnRocmVhZF9hZGFwdGVyID0gMCk7CgoKICBzdGF0aWMgaW50IGpvaW4gKEFDRV90aHJl YWRfdCwKICAgICAgICAgICAgICAgICAgIEFDRV90aHJlYWRfdCAqLAogICAgICAgICAgICAgICAg ICAgdm9pZCAqKnN0YXR1cyk7CgoKICBzdGF0aWMgaW50IGpvaW4gKEFDRV9odGhyZWFkX3QsCiAg ICAgICAgICAgICAgICAgICB2b2lkICoqID0gMCk7CgoKICBzdGF0aWMgaW50IHJlc3VtZSAoQUNF X2h0aHJlYWRfdCk7CgoKICBzdGF0aWMgaW50IHN1c3BlbmQgKEFDRV9odGhyZWFkX3QpOwoKCiAg c3RhdGljIGludCBnZXRwcmlvIChBQ0VfaHRocmVhZF90LCBpbnQgJnByaW8pOwoKCiAgc3RhdGlj IGludCBzZXRwcmlvIChBQ0VfaHRocmVhZF90LCBpbnQgcHJpbyk7CgoKICBzdGF0aWMgaW50IGtp bGwgKEFDRV90aHJlYWRfdCwgaW50IHNpZ251bSk7CgoKICBzdGF0aWMgdm9pZCB5aWVsZCAodm9p ZCk7CgoKCgoKCgogIHN0YXRpYyB2b2lkIHNlbGYgKEFDRV9odGhyZWFkX3QgJnRfaGFuZGxlKTsK CgogIHN0YXRpYyBBQ0VfdGhyZWFkX3Qgc2VsZiAodm9pZCk7CgoKCiAgc3RhdGljIHZvaWQgZXhp dCAodm9pZCAqc3RhdHVzID0gMCk7CgoKICBzdGF0aWMgaW50IGdldGNvbmN1cnJlbmN5ICh2b2lk KTsKCgogIHN0YXRpYyBpbnQgc2V0Y29uY3VycmVuY3kgKGludCBuZXdfbGV2ZWwpOwoKCiAgc3Rh dGljIGludCBzaWdzZXRtYXNrIChpbnQgaG93LAogICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc2lnc2V0X3QgKnNpZ3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpv c2lnc2V0ID0gMCk7CgogIHN0YXRpYyBpbnQga2V5Y3JlYXRlIChBQ0VfdGhyZWFkX2tleV90ICpr ZXlwLAoKCgogICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVEhSX0RFU1QgZGVzdHJ1Y3RvciwK CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqID0gMCk7CgoKICBzdGF0aWMgaW50 IGtleWZyZWUgKEFDRV90aHJlYWRfa2V5X3Qga2V5KTsKCgoKICBzdGF0aWMgaW50IHNldHNwZWNp ZmljIChBQ0VfdGhyZWFkX2tleV90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICp2YWx1ZSk7CgoKCiAgc3RhdGljIGludCBnZXRzcGVjaWZpYyAoQUNFX3RocmVhZF9rZXlfdCBr ZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKnZhbHVlcCk7CgoKICBzdGF0aWMg aW50IGRpc2FibGVjYW5jZWwgKHN0cnVjdCBjYW5jZWxfc3RhdGUgKm9sZF9zdGF0ZSk7CgoKICBz dGF0aWMgaW50IGVuYWJsZWNhbmNlbCAoc3RydWN0IGNhbmNlbF9zdGF0ZSAqb2xkX3N0YXRlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZyk7CgoKICBzdGF0aWMgaW50IHNldGNh bmNlbHN0YXRlIChzdHJ1Y3QgY2FuY2VsX3N0YXRlICZuZXdfc3RhdGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGNhbmNlbF9zdGF0ZSAqb2xkX3N0YXRlKTsKCgoKCgoKICBz dGF0aWMgaW50IGNhbmNlbCAoQUNFX3RocmVhZF90IHRfaWQpOwoKCiAgc3RhdGljIHZvaWQgdGVz dGNhbmNlbCAodm9pZCk7Cgpwcml2YXRlOgoKICBBQ0VfVGhyZWFkICh2b2lkKTsKfTsKCgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9UaHJlYWQuaSIg MQojIDEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVGhy ZWFkLmkiCmlubGluZSBpbnQKQUNFX1RocmVhZDo6a2V5Y3JlYXRlIChBQ0VfdGhyZWFkX2tleV90 ICprZXlwLAoKCgogICAgICAgICAgICAgICAgICAgICAgIEFDRV9USFJfREVTVCBkZXN0cnVjdG9y LAoKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0KQp7CgogIHJldHVybiBBQ0VfT1M6 OnRocl9rZXljcmVhdGUgKGtleXAsIGRlc3RydWN0b3IsIGluc3QpOwp9CgoKCmlubGluZSBpbnQK QUNFX1RocmVhZDo6a2V5ZnJlZSAoQUNFX3RocmVhZF9rZXlfdCBrZXkpCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6dGhyX2tleWZyZWUgKGtl eSk7Cn0KCgoKCmlubGluZSBpbnQKQUNFX1RocmVhZDo6c2V0c3BlY2lmaWMgKEFDRV90aHJlYWRf a2V5X3Qga2V5LCB2b2lkICp2YWx1ZSkKewoKICByZXR1cm4gQUNFX09TOjp0aHJfc2V0c3BlY2lm aWMgKGtleSwgdmFsdWUpOwp9CgoKCgppbmxpbmUgaW50CkFDRV9UaHJlYWQ6OmdldHNwZWNpZmlj IChBQ0VfdGhyZWFkX2tleV90IGtleSwgdm9pZCAqKnZhbHVlcCkKewoKICByZXR1cm4gQUNFX09T Ojp0aHJfZ2V0c3BlY2lmaWMgKGtleSwgdmFsdWVwKTsKfQoKaW5saW5lIEFDRV90aHJlYWRfdApB Q0VfVGhyZWFkOjpzZWxmICh2b2lkKQp7CgogIHJldHVybiBBQ0VfT1M6OnRocl9zZWxmICgpOwp9 CgppbmxpbmUgdm9pZApBQ0VfVGhyZWFkOjpleGl0ICh2b2lkICpzdGF0dXMpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgQUNFX09TOjp0aHJfZXhpdCAoc3RhdHVzKTsKfQoK aW5saW5lIHZvaWQKQUNFX1RocmVhZDo6eWllbGQgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogIEFDRV9PUzo6dGhyX3lpZWxkICgpOwp9CgppbmxpbmUgaW50CkFD RV9UaHJlYWQ6OnNwYXduIChBQ0VfVEhSX0ZVTkMgZnVuYywKICAgICAgICAgICAgICAgICAgIHZv aWQgKmFyZywKICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsCiAgICAgICAgICAgICAgICAg ICBBQ0VfdGhyZWFkX3QgKnRfaWQsCiAgICAgICAgICAgICAgICAgICBBQ0VfaHRocmVhZF90ICp0 X2hhbmRsZSwKICAgICAgICAgICAgICAgICAgIGxvbmcgcHJpb3JpdHksCiAgICAgICAgICAgICAg ICAgICB2b2lkICp0aHJfc3RhY2ssCiAgICAgICAgICAgICAgICAgICBzaXplX3QgdGhyX3N0YWNr X3NpemUsCiAgICAgICAgICAgICAgICAgICBBQ0VfVGhyZWFkX0FkYXB0ZXIgKnRocmVhZF9hZGFw dGVyKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIEFDRV9P Uzo6dGhyX2NyZWF0ZSAoZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0X2hhbmRsZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aHJfc3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyX3N0YWNrX3Np emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX2FkYXB0ZXIpOwp9Cgppbmxp bmUgaW50CkFDRV9UaHJlYWQ6OnJlc3VtZSAoQUNFX2h0aHJlYWRfdCB0X2lkKQp7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6dGhyX2NvbnRpbnVl ICh0X2lkKTsKfQoKaW5saW5lIGludApBQ0VfVGhyZWFkOjpzdXNwZW5kIChBQ0VfaHRocmVhZF90 IHRfaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFD RV9PUzo6dGhyX3N1c3BlbmQgKHRfaWQpOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWQ6OmtpbGwg KEFDRV90aHJlYWRfdCB0X2lkLCBpbnQgc2lnbnVtKQp7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogIHJldHVybiBBQ0VfT1M6OnRocl9raWxsICh0X2lkLCBzaWdudW0pOwp9Cgpp bmxpbmUgaW50CkFDRV9UaHJlYWQ6OmpvaW4gKEFDRV90aHJlYWRfdCB3YWl0X2ZvciwKICAgICAg ICAgICAgICAgICAgQUNFX3RocmVhZF90ICpkZXBhcnRlZCwKICAgICAgICAgICAgICAgICAgdm9p ZCAqKnN0YXR1cykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4g QUNFX09TOjp0aHJfam9pbiAod2FpdF9mb3IsIGRlcGFydGVkLCBzdGF0dXMpOwp9CgppbmxpbmUg aW50CkFDRV9UaHJlYWQ6OmpvaW4gKEFDRV9odGhyZWFkX3Qgd2FpdF9mb3IsCiAgICAgICAgICAg ICAgICAgIHZvaWQgKipzdGF0dXMpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgcmV0dXJuIEFDRV9PUzo6dGhyX2pvaW4gKHdhaXRfZm9yLCBzdGF0dXMpOwp9CgppbmxpbmUg aW50CkFDRV9UaHJlYWQ6OmdldGNvbmN1cnJlbmN5ICh2b2lkKQp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gQUNFX09TOjp0aHJfZ2V0Y29uY3Vy cmVuY3kgKCk7Cn0KCmlubGluZSBpbnQKQUNFX1RocmVhZDo6c2V0Y29uY3VycmVuY3kgKGludCBu ZXdfbGV2ZWwpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IHJldHVybiBBQ0VfT1M6OnRocl9zZXRjb25jdXJyZW5jeSAobmV3X2xldmVsKTsKfQoKaW5saW5l IGludApBQ0VfVGhyZWFkOjpzaWdzZXRtYXNrIChpbnQgaG93LAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBzaWdzZXRfdCAqc2lnc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBzaWdz ZXRfdCAqb3NpZ3NldCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICByZXR1cm4gQUNFX09TOjp0aHJfc2lnc2V0bWFzayAoaG93LCBzaWdzZXQsIG9zaWdzZXQpOwp9 CgppbmxpbmUgaW50CkFDRV9UaHJlYWQ6OmRpc2FibGVjYW5jZWwgKHN0cnVjdCBjYW5jZWxfc3Rh dGUgKm9sZF9zdGF0ZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICBpbnQgb2xkX2NzdGF0ZSA9IDA7CiAgaW50IHJlc3VsdCA9IEFDRV9PUzo6dGhyX3NldGNh bmNlbHN0YXRlIChQVEhSRUFEX0NBTkNFTF9ESVNBQkxFLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJm9sZF9jc3RhdGUpOwogIGlmIChyZXN1bHQgPT0gMCAmJiBv bGRfc3RhdGUgIT0gMCkKICAgIHsKICAgICAgQUNFX09TOjptZW1zZXQgKG9sZF9zdGF0ZSwKICAg ICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKG9sZF9z dGF0ZSkpOwogICAgICBvbGRfc3RhdGUtPmNhbmNlbHN0YXRlID0gb2xkX2NzdGF0ZTsKICAgIH0K CiAgcmV0dXJuIHJlc3VsdDsKfQoKaW5saW5lIGludApBQ0VfVGhyZWFkOjplbmFibGVjYW5jZWwg KHN0cnVjdCBjYW5jZWxfc3RhdGUgKm9sZF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZmxhZykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IGludCBvbGRfY3N0YXRlID0gMDsKICBpbnQgb2xkX2N0eXBlID0gMDsKICBpbnQgcmVzdWx0OwoK ICByZXN1bHQgPSBBQ0VfT1M6OnRocl9zZXRjYW5jZWxzdGF0ZSAoUFRIUkVBRF9DQU5DRUxfRU5B QkxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkX2NzdGF0ZSk7 CiAgaWYgKHJlc3VsdCAhPSAwKQogICAgcmV0dXJuIHJlc3VsdDsKCiAgcmVzdWx0ID0gQUNFX09T Ojp0aHJfc2V0Y2FuY2VsdHlwZSAoZmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmb2xkX2N0eXBlKTsKICBpZiAocmVzdWx0ICE9IDApCiAgICByZXR1cm4gcmVzdWx0 OwoKICBpZiAob2xkX3N0YXRlICE9IDApCiAgICB7CiAgICAgIG9sZF9zdGF0ZS0+Y2FuY2Vsc3Rh dGUgPSBvbGRfY3N0YXRlOwogICAgICBvbGRfc3RhdGUtPmNhbmNlbHR5cGUgPSBvbGRfY3R5cGU7 CiAgICB9CgogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWQ6OnNldGNhbmNlbHN0 YXRlIChzdHJ1Y3QgY2FuY2VsX3N0YXRlICZuZXdfc3RhdGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgY2FuY2VsX3N0YXRlICpvbGRfc3RhdGUpCnsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGludCBvbGRfY3N0YXRlID0gMDsKICBpbnQg b2xkX2N0eXBlID0gMDsKCiAgaWYgKG5ld19zdGF0ZS5jYW5jZWxzdGF0ZSAhPSAwCiAgICAgICYm IEFDRV9PUzo6dGhyX3NldGNhbmNlbHN0YXRlIChuZXdfc3RhdGUuY2FuY2Vsc3RhdGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkX2NzdGF0ZSkgIT0gMCkKICAgIHJl dHVybiAtMTsKCiAgaWYgKG5ld19zdGF0ZS5jYW5jZWx0eXBlICE9IDAKICAgICAgJiYgQUNFX09T Ojp0aHJfc2V0Y2FuY2VsdHlwZSAobmV3X3N0YXRlLmNhbmNlbHR5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZvbGRfY3R5cGUpICE9IDApCiAgICB7CiAgICAgIGludCBv X2NzdGF0ZTsKCiAgICAgIEFDRV9PUzo6dGhyX3NldGNhbmNlbHN0YXRlIChvbGRfY3N0YXRlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9fY3N0YXRlKTsKICAgICAgcmV0dXJu IC0xOwogICAgfQoKICBpZiAob2xkX3N0YXRlICE9IDApCiAgICB7CiAgICAgIG9sZF9zdGF0ZS0+ Y2FuY2Vsc3RhdGUgPSBvbGRfY3N0YXRlOwogICAgICBvbGRfc3RhdGUtPmNhbmNlbHR5cGUgPSBv bGRfY3R5cGU7CiAgICB9CgogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWQ6OmNh bmNlbCAoQUNFX3RocmVhZF90IHRfaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgcmV0dXJuIEFDRV9PUzo6dGhyX2NhbmNlbCAodF9pZCk7Cn0KCmlubGluZSB2b2lk CkFDRV9UaHJlYWQ6OnRlc3RjYW5jZWwgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgogIEFDRV9PUzo6dGhyX3Rlc3RjYW5jZWwgKCk7Cn0KCmlubGluZSB2 b2lkCkFDRV9UaHJlYWQ6OnNlbGYgKEFDRV9odGhyZWFkX3QgJnRfaWQpCnsKCiAgQUNFX09TOjp0 aHJfc2VsZiAodF9pZCk7Cn0KCmlubGluZSBpbnQKQUNFX1RocmVhZDo6Z2V0cHJpbyAoQUNFX2h0 aHJlYWRfdCB0X2lkLCBpbnQgJnByaW8pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6dGhyX2dldHByaW8gKHRfaWQsIHByaW8pOwp9Cgppbmxp bmUgaW50CkFDRV9UaHJlYWQ6OnNldHByaW8gKEFDRV9odGhyZWFkX3QgdF9pZCwgaW50IHByaW8p CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6 dGhyX3NldHByaW8gKHRfaWQsIHByaW8pOwp9CiMgMjM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVGhyZWFkLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDI0MCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZC5oIiAyCiMgNSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuaSIgMgoK dGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUgaW50CkFDRV9HdWFyZDxBQ0VfTE9DSz46 OmFjcXVpcmUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+b3duZXJfID0gdGhpcy0+bG9ja18tPmFj cXVpcmUgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIGludApBQ0VfR3Vh cmQ8QUNFX0xPQ0s+Ojp0cnlhY3F1aXJlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPm93bmVyXyA9 IHRoaXMtPmxvY2tfLT50cnlhY3F1aXJlICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+ IGlubGluZSBpbnQKQUNFX0d1YXJkPEFDRV9MT0NLPjo6cmVsZWFzZSAodm9pZCkKewogIGlmICh0 aGlzLT5vd25lcl8gIT0gLTEpCiAgICB7CiAgICAgIHRoaXMtPm93bmVyXyA9IC0xOwogICAgICBy ZXR1cm4gdGhpcy0+bG9ja18tPnJlbGVhc2UgKCk7CiAgICB9CiAgZWxzZQogICAgcmV0dXJuIDA7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lCkFDRV9HdWFyZDxBQ0VfTE9DSz46 OkFDRV9HdWFyZCAoQUNFX0xPQ0sgJmwpCiAgOiBsb2NrXyAoJmwpLAogICAgb3duZXJfICgwKQp7 CiAgdGhpcy0+YWNxdWlyZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUK QUNFX0d1YXJkPEFDRV9MT0NLPjo6QUNFX0d1YXJkIChBQ0VfTE9DSyAmbCwgaW50IGJsb2NrKQog IDogbG9ja18gKCZsKSwKICAgIG93bmVyXyAoMCkKewogIGlmIChibG9jaykKICAgIHRoaXMtPmFj cXVpcmUgKCk7CiAgZWxzZQogICAgdGhpcy0+dHJ5YWNxdWlyZSAoKTsKfQoKdGVtcGxhdGUgPGNs YXNzIEFDRV9MT0NLPiBpbmxpbmUKQUNFX0d1YXJkPEFDRV9MT0NLPjo6QUNFX0d1YXJkIChBQ0Vf TE9DSyAmbCwgaW50IGJsb2NrLCBpbnQgYmVjb21lX293bmVyKQogIDogbG9ja18gKCZsKSwKICAg IG93bmVyXyAoYmVjb21lX293bmVyID09IDAgPyAtMSA6IDApCnsKICBkbyB7IH0gd2hpbGUgKCZi bG9jayA9PSAwKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUKQUNFX0d1 YXJkPEFDRV9MT0NLPjo6fkFDRV9HdWFyZCAodm9pZCkKewogIHRoaXMtPnJlbGVhc2UgKCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIGludApBQ0VfR3VhcmQ8QUNFX0xPQ0s+ Ojpsb2NrZWQgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+b3duZXJfICE9IC0xOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGlubGluZSBpbnQKQUNFX0d1YXJkPEFDRV9MT0NLPjo6 cmVtb3ZlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tfLT5yZW1vdmUgKCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIHZvaWQKQUNFX0d1YXJkPEFDRV9MT0NLPjo6ZGlz b3duICh2b2lkKQp7CiAgdGhpcy0+b3duZXJfID0gLTE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0Vf TE9DSz4gaW5saW5lCkFDRV9Xcml0ZV9HdWFyZDxBQ0VfTE9DSz46OkFDRV9Xcml0ZV9HdWFyZCAo QUNFX0xPQ0sgJm0pCiAgOiBBQ0VfR3VhcmQ8QUNFX0xPQ0s+ICgmbSkKewogIHRoaXMtPmFjcXVp cmVfd3JpdGUgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIGludApBQ0Vf V3JpdGVfR3VhcmQ8QUNFX0xPQ0s+OjphY3F1aXJlX3dyaXRlICh2b2lkKQp7CiAgcmV0dXJuIHRo aXMtPm93bmVyXyA9IHRoaXMtPmxvY2tfLT5hY3F1aXJlX3dyaXRlICgpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgQUNFX0xPQ0s+IGlubGluZSBpbnQKQUNFX1dyaXRlX0d1YXJkPEFDRV9MT0NLPjo6YWNx dWlyZSAodm9pZCkKewogIHJldHVybiB0aGlzLT5vd25lcl8gPSB0aGlzLT5sb2NrXy0+YWNxdWly ZV93cml0ZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUgaW50CkFDRV9X cml0ZV9HdWFyZDxBQ0VfTE9DSz46OnRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpCnsKICByZXR1cm4g dGhpcy0+b3duZXJfID0gdGhpcy0+bG9ja18tPnRyeWFjcXVpcmVfd3JpdGUgKCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIGludApBQ0VfV3JpdGVfR3VhcmQ8QUNFX0xPQ0s+ Ojp0cnlhY3F1aXJlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPm93bmVyXyA9IHRoaXMtPmxvY2tf LT50cnlhY3F1aXJlX3dyaXRlICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGlubGlu ZQpBQ0VfV3JpdGVfR3VhcmQ8QUNFX0xPQ0s+OjpBQ0VfV3JpdGVfR3VhcmQgKEFDRV9MT0NLICZt LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9jaykK ICA6IEFDRV9HdWFyZDxBQ0VfTE9DSz4gKCZtKQp7CiAgaWYgKGJsb2NrKQogICAgdGhpcy0+YWNx dWlyZV93cml0ZSAoKTsKICBlbHNlCiAgICB0aGlzLT50cnlhY3F1aXJlX3dyaXRlICgpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGlubGluZSBpbnQKQUNFX1JlYWRfR3VhcmQ8QUNFX0xP Q0s+OjphY3F1aXJlX3JlYWQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+b3duZXJfID0gdGhpcy0+ bG9ja18tPmFjcXVpcmVfcmVhZCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxp bmUgaW50CkFDRV9SZWFkX0d1YXJkPEFDRV9MT0NLPjo6YWNxdWlyZSAodm9pZCkKewogIHJldHVy biB0aGlzLT5vd25lcl8gPSB0aGlzLT5sb2NrXy0+YWNxdWlyZV9yZWFkICgpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgQUNFX0xPQ0s+IGlubGluZSBpbnQKQUNFX1JlYWRfR3VhcmQ8QUNFX0xPQ0s+Ojp0 cnlhY3F1aXJlX3JlYWQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+b3duZXJfID0gdGhpcy0+bG9j a18tPnRyeWFjcXVpcmVfcmVhZCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxp bmUgaW50CkFDRV9SZWFkX0d1YXJkPEFDRV9MT0NLPjo6dHJ5YWNxdWlyZSAodm9pZCkKewogIHJl dHVybiB0aGlzLT5vd25lcl8gPSB0aGlzLT5sb2NrXy0+dHJ5YWNxdWlyZV9yZWFkICgpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGlubGluZQpBQ0VfUmVhZF9HdWFyZDxBQ0VfTE9DSz46 OkFDRV9SZWFkX0d1YXJkIChBQ0VfTE9DSyAmbSkKICA6IEFDRV9HdWFyZDxBQ0VfTE9DSz4gKCZt KQp7CiAgdGhpcy0+YWNxdWlyZV9yZWFkICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+ IGlubGluZQpBQ0VfUmVhZF9HdWFyZDxBQ0VfTE9DSz46OkFDRV9SZWFkX0d1YXJkIChBQ0VfTE9D SyAmbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2Nr KQogIDogQUNFX0d1YXJkPEFDRV9MT0NLPiAoJm0pCnsKICBpZiAoYmxvY2spCiAgICB0aGlzLT5h Y3F1aXJlX3JlYWQgKCk7CiAgZWxzZQogICAgdGhpcy0+dHJ5YWNxdWlyZV9yZWFkICgpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNPiBpbmxpbmUKQUNFX0xvY2tfQWRh cHRlcjxBQ0VfTE9DS0lOR19NRUNIQU5JU00+OjpBQ0VfTG9ja19BZGFwdGVyIChBQ0VfTE9DS0lO R19NRUNIQU5JU00gJmxvY2spCiAgOiBsb2NrXyAoJmxvY2spLAogICAgZGVsZXRlX2xvY2tfICgw KQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZQpBQ0Vf TG9ja19BZGFwdGVyPEFDRV9MT0NLSU5HX01FQ0hBTklTTT46On5BQ0VfTG9ja19BZGFwdGVyICh2 b2lkKQp7CiAgaWYgKHRoaXMtPmRlbGV0ZV9sb2NrXykKICAgIGRlbGV0ZSB0aGlzLT5sb2NrXzsK fQoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBpbnQKQUNF X0xvY2tfQWRhcHRlcjxBQ0VfTE9DS0lOR19NRUNIQU5JU00+OjpyZW1vdmUgKHZvaWQpCnsKICBy ZXR1cm4gdGhpcy0+bG9ja18tPnJlbW92ZSAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9D S0lOR19NRUNIQU5JU00+IGlubGluZSBpbnQKQUNFX0xvY2tfQWRhcHRlcjxBQ0VfTE9DS0lOR19N RUNIQU5JU00+OjphY3F1aXJlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tfLT5hY3F1aXJl ICgpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBp bnQKQUNFX0xvY2tfQWRhcHRlcjxBQ0VfTE9DS0lOR19NRUNIQU5JU00+Ojp0cnlhY3F1aXJlICh2 b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tfLT50cnlhY3F1aXJlICgpOwp9CgoKCnRlbXBsYXRl IDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBpbnQKQUNFX0xvY2tfQWRhcHRl cjxBQ0VfTE9DS0lOR19NRUNIQU5JU00+OjpyZWxlYXNlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMt PmxvY2tfLT5yZWxlYXNlICgpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01F Q0hBTklTTT4gaW5saW5lIGludApBQ0VfTG9ja19BZGFwdGVyPEFDRV9MT0NLSU5HX01FQ0hBTklT TT46OmFjcXVpcmVfcmVhZCAodm9pZCkKewogIHJldHVybiB0aGlzLT5sb2NrXy0+YWNxdWlyZV9y ZWFkICgpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01FQ0hBTklTTT4gaW5s aW5lIGludApBQ0VfTG9ja19BZGFwdGVyPEFDRV9MT0NLSU5HX01FQ0hBTklTTT46OmFjcXVpcmVf d3JpdGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18tPmFjcXVpcmVfd3JpdGUgKCk7Cn0K CgoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBpbnQKQUNF X0xvY2tfQWRhcHRlcjxBQ0VfTE9DS0lOR19NRUNIQU5JU00+Ojp0cnlhY3F1aXJlX3JlYWQgKHZv aWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18tPnRyeWFjcXVpcmVfcmVhZCAoKTsKfQoKCgoKdGVt cGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01FQ0hBTklTTT4gaW5saW5lIGludApBQ0VfTG9ja19B ZGFwdGVyPEFDRV9MT0NLSU5HX01FQ0hBTklTTT46OnRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpCnsK ICByZXR1cm4gdGhpcy0+bG9ja18tPnRyeWFjcXVpcmVfd3JpdGUgKCk7Cn0KCgoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNPiBpbmxpbmUgaW50CkFDRV9Mb2NrX0FkYXB0 ZXI8QUNFX0xPQ0tJTkdfTUVDSEFOSVNNPjo6dHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2b2lk KQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tfLT50cnlhY3F1aXJlX3dyaXRlX3VwZ3JhZGUgKCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZQpBQ0VfUmV2ZXJz ZV9Mb2NrPEFDRV9MT0NLSU5HX01FQ0hBTklTTT46OkFDRV9SZXZlcnNlX0xvY2sgKEFDRV9MT0NL SU5HX01FQ0hBTklTTSAmbG9jaykKICA6IGxvY2tfIChsb2NrKQp7Cn0KCgp0ZW1wbGF0ZSA8Y2xh c3MgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNPiBpbmxpbmUgaW50CkFDRV9SZXZlcnNlX0xvY2s8QUNF X0xPQ0tJTkdfTUVDSEFOSVNNPjo6cmVtb3ZlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tf LnJlbW92ZSAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlu bGluZSBpbnQKQUNFX1JldmVyc2VfTG9jazxBQ0VfTE9DS0lOR19NRUNIQU5JU00+OjphY3F1aXJl ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tfLnJlbGVhc2UgKCk7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNPiBpbmxpbmUgaW50CkFDRV9SZXZlcnNlX0xvY2s8 QUNFX0xPQ0tJTkdfTUVDSEFOSVNNPjo6dHJ5YWNxdWlyZSAodm9pZCkKewogIHJldHVybiB0aGlz LT5sb2NrXy50cnlhY3F1aXJlICgpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01F Q0hBTklTTT4gaW5saW5lIGludApBQ0VfUmV2ZXJzZV9Mb2NrPEFDRV9MT0NLSU5HX01FQ0hBTklT TT46OnJlbGVhc2UgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18uYWNxdWlyZSAoKTsKfQoK CnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBpbnQKQUNFX1Jl dmVyc2VfTG9jazxBQ0VfTE9DS0lOR19NRUNIQU5JU00+OjphY3F1aXJlX3JlYWQgKHZvaWQpCnsK ICByZXR1cm4gdGhpcy0+bG9ja18uYWNxdWlyZV9yZWFkICgpOwp9CgoKdGVtcGxhdGUgPGNsYXNz IEFDRV9MT0NLSU5HX01FQ0hBTklTTT4gaW5saW5lIGludApBQ0VfUmV2ZXJzZV9Mb2NrPEFDRV9M T0NLSU5HX01FQ0hBTklTTT46OmFjcXVpcmVfd3JpdGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+ bG9ja18uYWNxdWlyZV93cml0ZSAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19N RUNIQU5JU00+IGlubGluZSBpbnQKQUNFX1JldmVyc2VfTG9jazxBQ0VfTE9DS0lOR19NRUNIQU5J U00+Ojp0cnlhY3F1aXJlX3JlYWQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18udHJ5YWNx dWlyZV9yZWFkICgpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01FQ0hBTklTTT4g aW5saW5lIGludApBQ0VfUmV2ZXJzZV9Mb2NrPEFDRV9MT0NLSU5HX01FQ0hBTklTTT46OnRyeWFj cXVpcmVfd3JpdGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18udHJ5YWNxdWlyZV93cml0 ZSAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBp bnQKQUNFX1JldmVyc2VfTG9jazxBQ0VfTE9DS0lOR19NRUNIQU5JU00+Ojp0cnlhY3F1aXJlX3dy aXRlX3VwZ3JhZGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18udHJ5YWNxdWlyZV93cml0 ZV91cGdyYWRlICgpOwp9CgoKCnRlbXBsYXRlPGNsYXNzIE1VVEVYPiBpbmxpbmUgaW50CkFDRV9D b25kaXRpb248TVVURVg+OjpyZW1vdmUgKHZvaWQpCnsKIyAzNDIgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmkiCiAgaW50IHJlc3VsdCA9IDA7 CiMgMzcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3lu Y2hfVC5pIgogICAgd2hpbGUgKChyZXN1bHQgPSBBQ0VfT1M6OmNvbmRfZGVzdHJveSAoJnRoaXMt PmNvbmRfKSkgPT0gLTEKICAgICAgICAgICAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDE2 KQogICAgICB7CiAgICAgICAgQUNFX09TOjpjb25kX2Jyb2FkY2FzdCAoJnRoaXMtPmNvbmRfKTsK ICAgICAgICBBQ0VfT1M6OnRocl95aWVsZCAoKTsKICAgICAgfQoKICByZXR1cm4gcmVzdWx0Owp9 Cgp0ZW1wbGF0ZTxjbGFzcyBNVVRFWD4gaW5saW5lIE1VVEVYICYKQUNFX0NvbmRpdGlvbjxNVVRF WD46Om11dGV4ICh2b2lkKQp7CgogIHJldHVybiB0aGlzLT5tdXRleF87Cn0KCnRlbXBsYXRlIDxj bGFzcyBNVVRFWD4gaW5saW5lIGludApBQ0VfQ29uZGl0aW9uPE1VVEVYPjo6c2lnbmFsICh2b2lk KQp7CgoKCgoKICByZXR1cm4gQUNFX09TOjpjb25kX3NpZ25hbCAoJnRoaXMtPmNvbmRfKTsKfQoK dGVtcGxhdGUgPGNsYXNzIE1VVEVYPiBpbmxpbmUgaW50CkFDRV9Db25kaXRpb248TVVURVg+Ojpi cm9hZGNhc3QgKHZvaWQpCnsKCgoKCgogIHJldHVybiBBQ0VfT1M6OmNvbmRfYnJvYWRjYXN0ICgm dGhpcy0+Y29uZF8pOwp9CiMgOTYzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvU3luY2hfVC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvQXRvbWljX09wLmkiIDEKCgoKdGVtcGxhdGUgPGNsYXNzIEFD RV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgVFlQRQpBQ0VfQXRvbWljX09wPEFDRV9MT0NLLCBU WVBFPjo6b3BlcmF0b3IrKyAodm9pZCkKewoKICBBQ0VfR3VhcmQ8IEFDRV9MT0NLID4gYWNlX21v biAodGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVybiB0aGlz LT52YWx1ZV87OwogIHJldHVybiArK3RoaXMtPnZhbHVlXzsKfQoKdGVtcGxhdGUgPGNsYXNzIEFD RV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgVFlQRQpBQ0VfQXRvbWljX09wPEFDRV9MT0NLLCBU WVBFPjo6b3BlcmF0b3IrPSAoY29uc3QgVFlQRSAmaSkKewoKICBBQ0VfR3VhcmQ8IEFDRV9MT0NL ID4gYWNlX21vbiAodGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJl dHVybiB0aGlzLT52YWx1ZV87OwogIHJldHVybiB0aGlzLT52YWx1ZV8gKz0gaTsKfQoKdGVtcGxh dGUgPGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgVFlQRQpBQ0VfQXRvbWljX09w PEFDRV9MT0NLLCBUWVBFPjo6b3BlcmF0b3ItLSAodm9pZCkKewoKICBBQ0VfR3VhcmQ8IEFDRV9M T0NLID4gYWNlX21vbiAodGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDAp IHJldHVybiB0aGlzLT52YWx1ZV87OwogIHJldHVybiAtLXRoaXMtPnZhbHVlXzsKfQoKdGVtcGxh dGUgPGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgVFlQRQpBQ0VfQXRvbWljX09w PEFDRV9MT0NLLCBUWVBFPjo6b3BlcmF0b3ItPSAoY29uc3QgVFlQRSAmaSkKewoKICBBQ0VfR3Vh cmQ8IEFDRV9MT0NLID4gYWNlX21vbiAodGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2Vk ICgpID09IDApIHJldHVybiB0aGlzLT52YWx1ZV87OwogIHJldHVybiB0aGlzLT52YWx1ZV8gLT0g aTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUKQUNFX0F0 b21pY19PcDxBQ0VfTE9DSywgVFlQRT46OkFDRV9BdG9taWNfT3AgKGNvbnN0IEFDRV9BdG9taWNf T3A8QUNFX0xPQ0ssIFRZUEU+ICZyaHMpCnsKCiAgKnRoaXMgPSByaHM7Cn0KCnRlbXBsYXRlIDxj bGFzcyBBQ0VfTE9DSywgY2xhc3MgVFlQRT4gaW5saW5lIFRZUEUKQUNFX0F0b21pY19PcDxBQ0Vf TE9DSywgVFlQRT46Om9wZXJhdG9yKysgKGludCkKewoKICBBQ0VfR3VhcmQ8IEFDRV9MT0NLID4g YWNlX21vbiAodGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVy biB0aGlzLT52YWx1ZV87OwogIHJldHVybiB0aGlzLT52YWx1ZV8rKzsKfQoKdGVtcGxhdGUgPGNs YXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgVFlQRQpBQ0VfQXRvbWljX09wPEFDRV9M T0NLLCBUWVBFPjo6b3BlcmF0b3ItLSAoaW50KQp7CgogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBh Y2VfbW9uICh0aGlzLT5tdXRleF8pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJu IHRoaXMtPnZhbHVlXzs7CiAgcmV0dXJuIHRoaXMtPnZhbHVlXy0tOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+IGlubGluZSBpbnQKQUNFX0F0b21pY19PcDxBQ0VfTE9D SywgVFlQRT46Om9wZXJhdG9yPT0gKGNvbnN0IFRZUEUgJmkpIGNvbnN0CnsKCiAgQUNFX0d1YXJk PCBBQ0VfTE9DSyA+IGFjZV9tb24gKChBQ0VfTE9DSyAmKSB0aGlzLT5tdXRleF8pOyBpZiAoYWNl X21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIC0xOzsKICByZXR1cm4gdGhpcy0+dmFsdWVfID09 IGk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSywgY2xhc3MgVFlQRT4gaW5saW5lIGludApB Q0VfQXRvbWljX09wPEFDRV9MT0NLLCBUWVBFPjo6b3BlcmF0b3IhPSAoY29uc3QgVFlQRSAmaSkg Y29uc3QKewoKICByZXR1cm4gISgqdGhpcyA9PSBpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9M T0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgaW50CkFDRV9BdG9taWNfT3A8QUNFX0xPQ0ssIFRZUEU+ OjpvcGVyYXRvcj49IChjb25zdCBUWVBFICZpKSBjb25zdAp7CgogIEFDRV9HdWFyZDwgQUNFX0xP Q0sgPiBhY2VfbW9uICgoQUNFX0xPQ0sgJikgdGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9j a2VkICgpID09IDApIHJldHVybiAtMTs7CiAgcmV0dXJuIHRoaXMtPnZhbHVlXyA+PSBpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+IGlubGluZSBpbnQKQUNFX0F0b21p Y19PcDxBQ0VfTE9DSywgVFlQRT46Om9wZXJhdG9yPiAoY29uc3QgVFlQRSAmcmhzKSBjb25zdAp7 CgogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICgoQUNFX0xPQ0sgJikgdGhpcy0+bXV0 ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVybiAtMTs7CiAgcmV0dXJuIHRo aXMtPnZhbHVlXyA+IHJoczsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBF PiBpbmxpbmUgaW50CkFDRV9BdG9taWNfT3A8QUNFX0xPQ0ssIFRZUEU+OjpvcGVyYXRvcjw9IChj b25zdCBUWVBFICZyaHMpIGNvbnN0CnsKCiAgQUNFX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24g KChBQ0VfTE9DSyAmKSB0aGlzLT5tdXRleF8pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkg cmV0dXJuIC0xOzsKICByZXR1cm4gdGhpcy0+dmFsdWVfIDw9IHJoczsKfQoKdGVtcGxhdGUgPGNs YXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgaW50CkFDRV9BdG9taWNfT3A8QUNFX0xP Q0ssIFRZUEU+OjpvcGVyYXRvcjwgKGNvbnN0IFRZUEUgJnJocykgY29uc3QKewoKICBBQ0VfR3Vh cmQ8IEFDRV9MT0NLID4gYWNlX21vbiAoKEFDRV9MT0NLICYpIHRoaXMtPm11dGV4Xyk7IGlmIChh Y2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gLTE7OwogIHJldHVybiB0aGlzLT52YWx1ZV8g PCByaHM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSywgY2xhc3MgVFlQRT4gaW5saW5lIHZv aWQKQUNFX0F0b21pY19PcDxBQ0VfTE9DSywgVFlQRT46Om9wZXJhdG9yPSAoY29uc3QgQUNFX0F0 b21pY19PcDxBQ0VfTE9DSywgVFlQRT4gJnJocykKewoKICBpZiAoJnJocyA9PSB0aGlzKQogICAg cmV0dXJuOwogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICh0aGlzLT5tdXRleF8pOyBp ZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuOzsKCgoKICB0aGlzLT52YWx1ZV8gPSBy aHMudmFsdWUgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSywgY2xhc3MgVFlQRT4gaW5s aW5lIFRZUEUKQUNFX0F0b21pY19PcDxBQ0VfTE9DSywgVFlQRT46OnZhbHVlICh2b2lkKSBjb25z dAp7CgogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICgoQUNFX0xPQ0sgJikgdGhpcy0+ bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVybiB0aGlzLT52YWx1ZV87 OwogIHJldHVybiB0aGlzLT52YWx1ZV87Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSywgY2xh c3MgVFlQRT4gaW5saW5lIFRZUEUgJgpBQ0VfQXRvbWljX09wPEFDRV9MT0NLLCBUWVBFPjo6dmFs dWVfaSAodm9pZCkKewoKCgoKICByZXR1cm4gdGhpcy0+dmFsdWVfOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+IGlubGluZSB2b2lkCkFDRV9BdG9taWNfT3A8QUNFX0xP Q0ssIFRZUEU+OjpvcGVyYXRvcj0gKGNvbnN0IFRZUEUgJmkpCnsKCiAgQUNFX0d1YXJkPCBBQ0Vf TE9DSyA+IGFjZV9tb24gKHRoaXMtPm11dGV4Xyk7IGlmIChhY2VfbW9uLmxvY2tlZCAoKSA9PSAw KSByZXR1cm47OwogIHRoaXMtPnZhbHVlXyA9IGk7Cn0KIyA5NjYgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiIDIKCgoKCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiAxCgoK CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVGhy ZWFkLmgiIDEKIyA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvU3luY2hfVC5jcHAiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiIDEKIyAxMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiAyCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIgMQojIDE0ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiIDIK CmlubGluZSBjb25zdCBjaGFyKiBnZXRfcmNzaWRfYWNlX1N5bmNoX1QgKGNvbnN0IGNoYXIqKSB7 IHJldHVybiAiU3luY2hfVC5jcHAsdiA0LjUyIDIwMDEvMDMvMDQgMDA6NTU6MzIgYnJ1bnNjaCBF eHAiIDsgfSBzdGF0aWMgY29uc3QgY2hhciogcmNzaWRfYWNlX1N5bmNoX1QgPSBnZXRfcmNzaWRf YWNlX1N5bmNoX1QgKCByY3NpZF9hY2VfU3luY2hfVCApIDsKIyAyOSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIgp0ZW1wbGF0ZSA8Y2xh c3MgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNPgpBQ0VfTG9ja19BZGFwdGVyPEFDRV9MT0NLSU5HX01F Q0hBTklTTT46OkFDRV9Mb2NrX0FkYXB0ZXIgKHZvaWQpCiAgOiBsb2NrXyAoMCksCiAgICBkZWxl dGVfbG9ja18gKDEpCnsKICBkbyB7IHRyeSB7IHRoaXMtPmxvY2tfID0gbmV3IEFDRV9MT0NLSU5H X01FQ0hBTklTTTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9u ICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7Cgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNF X0xPQ0tJTkdfTUVDSEFOSVNNPgpBQ0VfUmV2ZXJzZV9Mb2NrPEFDRV9MT0NLSU5HX01FQ0hBTklT TT46On5BQ0VfUmV2ZXJzZV9Mb2NrICh2b2lkKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9D SywgY2xhc3MgVFlQRT4gQUNFX0xPQ0sgJgpBQ0VfQXRvbWljX09wPEFDRV9MT0NLLCBUWVBFPjo6 bXV0ZXggKHZvaWQpCnsKCiAgcmV0dXJuIHRoaXMtPm11dGV4XzsKfQoKdGVtcGxhdGUgPGNsYXNz IEFDRV9MT0NLLCBjbGFzcyBUWVBFPiB2b2lkCkFDRV9BdG9taWNfT3A8QUNFX0xPQ0ssIFRZUEU+ OjpkdW1wICh2b2lkKSBjb25zdAp7CgoKICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6 bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j ZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiLCA1NSwgMCwgX19hY2VfZXJyb3IpOyBh Y2VfX18tPmxvZyAoTE1fREVCVUcsICJcbj09PT1cbiglUHwldHwleCkiLCB0aGlzKTsgfSB3aGls ZSAoMCk7CiAgdGhpcy0+bXV0ZXhfLmR1bXAgKCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBB Q0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6 aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiwgNTcsIDAsIF9fYWNlX2Vy cm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiPT09PVxuIik7IH0gd2hpbGUgKDApOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+CkFDRV9BdG9taWNfT3A8QUNFX0xP Q0ssIFRZUEU+OjpBQ0VfQXRvbWljX09wICh2b2lkKQogIDogdmFsdWVfICgwKQp7Cgp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+CkFDRV9BdG9taWNfT3A8QUNFX0xPQ0ss IFRZUEU+OjpBQ0VfQXRvbWljX09wIChjb25zdCBUWVBFICZjKQogIDogdmFsdWVfIChjKQp7Cgp9 CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IHZvaWQKQUNFX0d1YXJkPEFDRV9MT0NLPjo6 ZHVtcCAodm9pZCkgY29uc3QKewoKCiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxh c3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2Ug KCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiwgODIsIDAsIF9fYWNlX2Vycm9yKTsgYWNl X19fLT5sb2cgKExNX0RFQlVHLCAiXG49PT09XG4oJVB8JXR8JXgpIiwgdGhpcyk7IH0gd2hpbGUg KDApOwogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0Vf TG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRp dGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9TeW5jaF9ULmNwcCIsIDgzLCAwLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJV RywgIm11dGV4XyA9ICV4XG4iLCB0aGlzLT5sb2NrXyk7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50 IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIs IDg0LCAwLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgIm93bmVyXyA9ICVk XG4iLCB0aGlzLT5vd25lcl8pOyB9IHdoaWxlICgwKTsKICBkbyB7IGludCBfX2FjZV9lcnJvciA9 IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNn OjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiLCA4NSwgMCwgX19hY2Vf ZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICI9PT09XG4iKTsgfSB3aGlsZSAoMCk7Cn0K CgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiB2b2lkCkFDRV9Xcml0ZV9HdWFyZDxBQ0VfTE9D Sz46OmR1bXAgKHZvaWQpIGNvbnN0CnsKCiAgQUNFX0d1YXJkPEFDRV9MT0NLPjo6ZHVtcCAoKTsK fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IHZvaWQKQUNFX1JlYWRfR3VhcmQ8QUNFX0xP Q0s+OjpkdW1wICh2b2lkKSBjb25zdAp7CgogIEFDRV9HdWFyZDxBQ0VfTE9DSz46OmR1bXAgKCk7 Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+IHZvaWQKQUNFX0NvbmRpdGlvbjxNVVRFWD46 OmR1bXAgKHZvaWQpIGNvbnN0CnsKCgogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjps YXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNl ICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIsIDExNSwgMCwgX19hY2VfZXJyb3IpOyBh Y2VfX18tPmxvZyAoTE1fREVCVUcsICJcbj09PT1cbiglUHwldHwleCkiLCB0aGlzKTsgfSB3aGls ZSAoMCk7CgoKCgogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgp OyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18t PmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9TeW5jaF9ULmNwcCIsIDEyMCwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAo TE1fREVCVUcsICJcbiIpOyB9IHdoaWxlICgwKTsKICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFD RV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjpp bnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiLCAxMjEsIDAsIF9fYWNlX2Vy cm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiPT09PVxuIik7IH0gd2hpbGUgKDApOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+CkFDRV9UaHJlYWRfQ29uZGl0aW9uPE1VVEVYPjo6QUNFX1Ro cmVhZF9Db25kaXRpb24gKE1VVEVYICZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIgKm5hbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykKICA6IEFDRV9D b25kaXRpb248TVVURVg+IChtLCBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwgbmFtZSwgYXJnKQp7 Cgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+IHZvaWQKQUNFX1RocmVhZF9Db25kaXRpb248TVVU RVg+OjpkdW1wICh2b2lkKSBjb25zdAp7CgoKICBBQ0VfQ29uZGl0aW9uPE1VVEVYPjo6ZHVtcCAo KTsKfQoKdGVtcGxhdGUgPGNsYXNzIE1VVEVYPgpBQ0VfQ29uZGl0aW9uPE1VVEVYPjo6QUNFX0Nv bmRpdGlvbiAoTVVURVggJm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9U Q0hBUiAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFy ZykKICA6CgoKCgogICAgbXV0ZXhfIChtKQp7CiMgMjExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiCiAgaWYgKEFDRV9PUzo6Y29uZF9p bml0ICgmdGhpcy0+Y29uZF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvcnQpIHR5cGUs CiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg YXJnKSAhPSAwKQogICAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3Ig KCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9f Xy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL1N5bmNoX1QuY3BwIiwgMjE1LCAtMSwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxv ZyAoTE1fRVJST1IsICIlcFxuIiwgIkFDRV9Db25kaXRpb246OkFDRV9Db25kaXRpb24iKTsgfSB3 aGlsZSAoMCk7CgoKfQoKdGVtcGxhdGUgPGNsYXNzIE1VVEVYPgpBQ0VfQ29uZGl0aW9uPE1VVEVY Pjo6fkFDRV9Db25kaXRpb24gKHZvaWQpCnsKCgogIGlmICh0aGlzLT5yZW1vdmUgKCkgPT0gLTEp CiAgICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xv Z19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRp b25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv U3luY2hfVC5jcHAiLCAyMjYsIC0xLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9FUlJP UiwgIiVwXG4iLCAiQUNFX0NvbmRpdGlvbjo6fkFDRV9Db25kaXRpb24iKTsgfSB3aGlsZSAoMCk7 CgoKfQoKdGVtcGxhdGUgPGNsYXNzIE1VVEVYPiBpbnQKQUNFX0NvbmRpdGlvbjxNVVRFWD46Ondh aXQgKHZvaWQpCnsKCgoKCgoKICByZXR1cm4gQUNFX09TOjpjb25kX3dhaXQgKCZ0aGlzLT5jb25k XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aGlzLT5tdXRleF8ubG9ja18pOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+IGludApBQ0VfQ29uZGl0aW9uPE1VVEVYPjo6d2FpdCAoTVVU RVggJm11dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFs dWUgKmFic3RpbWUpCnsKCiAgaWYgKGFic3RpbWUgPT0gMCkKICAgIHJldHVybiB0aGlzLT53YWl0 ICgpOwogIGVsc2UKICAgIHsKCgoKCgoKICAgICAgcmV0dXJuIEFDRV9PUzo6Y29uZF90aW1lZHdh aXQgKCZ0aGlzLT5jb25kXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt dXRleC5sb2NrXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBQ0VfVGlt ZV9WYWx1ZSAqKSBhYnN0aW1lKTsKICAgIH0KfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBNVVRFWD4g aW50CkFDRV9Db25kaXRpb248TVVURVg+Ojp3YWl0IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAqYWJz dGltZSkKewoKICByZXR1cm4gdGhpcy0+d2FpdCAodGhpcy0+bXV0ZXhfLCBhYnN0aW1lKTsKfQoK CgoKdGVtcGxhdGUgPGNsYXNzIFRZUEU+CkFDRV9UU1M8VFlQRT46On5BQ0VfVFNTICh2b2lkKQp7 CgoKCiAgQUNFX09TOjp0aHJfa2V5X2RldGFjaCAodGhpcyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBU WVBFPiBUWVBFICoKQUNFX1RTUzxUWVBFPjo6b3BlcmF0b3ItPiAoKSBjb25zdAp7CiAgcmV0dXJu IHRoaXMtPnRzX2dldCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFRZUEU+CkFDRV9UU1M8VFlQRT46 Om9wZXJhdG9yIFRZUEUgKih2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnRzX2dldCAoKTsK fQoKdGVtcGxhdGUgPGNsYXNzIFRZUEU+IFRZUEUgKgpBQ0VfVFNTPFRZUEU+OjptYWtlX1RTU19U WVBFICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIG5ldyBUWVBFOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VFlQRT4gdm9pZApBQ0VfVFNTPFRZUEU+OjpkdW1wICh2b2lkKSBjb25zdAp7CgoKICBkbyB7IGlu dCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9f XyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAi LCAzMTEsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiXG49PT09XG4o JVB8JXR8JXgpIiwgdGhpcyk7IH0gd2hpbGUgKDApOwogIHRoaXMtPmtleWxvY2tfLmR1bXAgKCk7 CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2df TXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9u YWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5 bmNoX1QuY3BwIiwgMzEzLCAwLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywg ImtleV8gPSAlZFxuIiwgdGhpcy0+a2V5Xyk7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50IF9fYWNl X2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNF X0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIsIDMxNCwg MCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbm9uY2VfID0gJWQiLCB0 aGlzLT5vbmNlXyk7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09T OjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3Rh bmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIsIDMxNSwgMCwgX19hY2VfZXJyb3Ip OyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbiIpOyB9IHdoaWxlICgwKTsKICBkbyB7IGludCBf X2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9 IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiLCAz MTYsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiPT09PVxuIik7IH0g d2hpbGUgKDApOwoKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVFlQRT4gdm9pZApBQ0VfVFNTPFRZ UEU+OjpjbGVhbnVwICh2b2lkICpwdHIpCnsKCiAgZGVsZXRlIChUWVBFICopIHB0cjsKfQoKdGVt cGxhdGUgPGNsYXNzIFRZUEU+IGludApBQ0VfVFNTPFRZUEU+Ojp0c19pbml0ICh2b2lkKSBjb25z dAp7CgogIEFDRV9HdWFyZDwgQUNFX1RocmVhZF9NdXRleCA+IGFjZV9tb24gKChBQ0VfVGhyZWFk X011dGV4ICYpIHRoaXMtPmtleWxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJl dHVybiAwOzsKCgoKICBpZiAodGhpcy0+b25jZV8gPT0gMCkKICAgIHsKICAgICAgaWYgKEFDRV9U aHJlYWQ6OmtleWNyZWF0ZSAoY29uc3RfY2FzdDxBQ0VfdGhyZWFkX2tleV90ICo+ICgmdGhpcy0+ a2V5XyksCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBQ0VfVFNTPFRZUEU+ OjpjbGVhbnVwLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhp cykgIT0gMCkKICAgICAgICByZXR1cm4gLTE7CiAgICAgIGVsc2UKICAgICAgICB7CgoKICAgICAg ICAgICogY29uc3RfY2FzdDxpbnQqPiAoJnRoaXMtPm9uY2VfKSA9IDE7CiAgICAgICAgICByZXR1 cm4gMDsKICAgICAgICB9CiAgICB9CgogIHJldHVybiAtMTsKfQoKdGVtcGxhdGUgPGNsYXNzIFRZ UEU+CkFDRV9UU1M8VFlQRT46OkFDRV9UU1MgKFRZUEUgKnRzX29iaikKICA6IG9uY2VfICgwKSwK ICAgIGtleV8gKEFDRV9PUzo6TlVMTF9rZXkpCnsKCgoKCgoKICBpZiAodHNfb2JqICE9IDApCiAg ICB7CiAgICAgIGlmICh0aGlzLT50c19pbml0ICgpID09IC0xKQogICAgICAgIHsKCiAgICAgICAg ICBBQ0VfRXJybm9fR3VhcmQgZXJyb3IgKCgqX19lcnJub19sb2NhdGlvbiAoKSkpOwoKCgoKCgoK ICAgICAgICAgIEFDRV9PUzo6ZnByaW50ZiAoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAiQUNFX1RocmVhZDo6a2V5Y3JlYXRlKCkgZmFpbGVkISIpOwoKICAgICAgICAgIHJldHVy bjsKICAgICAgICB9CiMgNDEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvU3luY2hfVC5jcHAiCiAgICAgIGlmIChBQ0VfVGhyZWFkOjpzZXRzcGVjaWZpYyAo dGhpcy0+a2V5XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSB0 c19vYmopICE9IDApCiAgICAgICAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3Rf ZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7 IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiwgNDEyLCAtMSwgX19hY2VfZXJyb3IpOyBhY2Vf X18tPmxvZyAoTE1fRVJST1IsICIlcFxuIiwgIkFDRV9UaHJlYWQ6OnNldHNwZWNpZmljKCkgZmFp bGVkISIpOyB9IHdoaWxlICgwKTsKCgoKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFRZUEU+IFRZ UEUgKgpBQ0VfVFNTPFRZUEU+Ojp0c19nZXQgKHZvaWQpIGNvbnN0CnsKICBpZiAodGhpcy0+b25j ZV8gPT0gMCkKCiAgICB0aGlzLT50c19pbml0ICgpOwoKICBUWVBFICp0c19vYmogPSAwOwojIDQ0 MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1Qu Y3BwIgogIGlmIChBQ0VfVGhyZWFkOjpnZXRzcGVjaWZpYyAodGhpcy0+a2V5XywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSAmdHNfb2JqKSA9PSAtMSkKICAgIHJldHVy biAwOwoKCiAgaWYgKHRzX29iaiA9PSAwKQoKICAgIHsKCgoKICAgICAgdHNfb2JqID0gdGhpcy0+ bWFrZV9UU1NfVFlQRSAoKTsKCiAgICAgIGlmICh0c19vYmogPT0gMCkKICAgICAgICByZXR1cm4g MDsKIyA0NzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9T eW5jaF9ULmNwcCIKICAgICAgaWYgKEFDRV9UaHJlYWQ6OnNldHNwZWNpZmljICh0aGlzLT5rZXlf LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIHRzX29iaikgIT0g MCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdHNfb2JqOwogICAgICAgICAgcmV0dXJuIDA7 CiAgICAgICAgfQoKICAgIH0KCgoKCgogIHJldHVybiB0c19vYmo7Cgp9CgoKCgoKdGVtcGxhdGUg PGNsYXNzIFRZUEU+IFRZUEUgKgpBQ0VfVFNTPFRZUEU+Ojp0c19vYmplY3QgKHZvaWQpIGNvbnN0 CnsKCiAgQUNFX0d1YXJkPCBBQ0VfVGhyZWFkX011dGV4ID4gYWNlX21vbiAoKEFDRV9UaHJlYWRf TXV0ZXggJikgdGhpcy0+a2V5bG9ja18pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0 dXJuIDA7OwoKICBpZiAodGhpcy0+b25jZV8gPT0gMCkKICAgIHJldHVybiAwOwoKICBUWVBFICp0 c19vYmogPSAwOwojIDUxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL1N5bmNoX1QuY3BwIgogIGlmIChBQ0VfVGhyZWFkOjpnZXRzcGVjaWZpYyAodGhpcy0+ a2V5XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSAmdHNfb2JqKSA9 PSAtMSkKICAgIHJldHVybiAwOwoKCiAgcmV0dXJuIHRzX29iajsKfQoKdGVtcGxhdGUgPGNsYXNz IFRZUEU+IFRZUEUgKgpBQ0VfVFNTPFRZUEU+Ojp0c19vYmplY3QgKFRZUEUgKm5ld190c19vYmop CnsKCgoKICBpZiAodGhpcy0+b25jZV8gPT0gMCkKCiAgICB0aGlzLT50c19pbml0ICgpOwoKCiAg QUNFX0d1YXJkPCBBQ0VfVGhyZWFkX011dGV4ID4gYWNlX21vbiAodGhpcy0+a2V5bG9ja18pOyBp ZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwoKICBUWVBFICp0c19vYmogPSAw OwojIDU2NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5 bmNoX1QuY3BwIgogIGlmIChBQ0VfVGhyZWFkOjpnZXRzcGVjaWZpYyAodGhpcy0+a2V5XywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSAmdHNfb2JqKSA9PSAtMSkKICAg IHJldHVybiAwOwogIGlmIChBQ0VfVGhyZWFkOjpzZXRzcGVjaWZpYyAodGhpcy0+a2V5XywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIG5ld190c19vYmopID09IC0xKQog ICAgcmV0dXJuIHRzX29iajsKCgogIHJldHVybiB0c19vYmo7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz IEFDRV9MT0NLPiB2b2lkCkFDRV9UU1NfR3VhcmQ8QUNFX0xPQ0s+OjpkdW1wICh2b2lkKSBjb25z dAp7CgoKICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNF X0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25k aXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvU3luY2hfVC5jcHAiLCA1ODQsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RF QlVHLCAiXG49PT09XG4oJVB8JXR8JXgpIiwgdGhpcyk7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50 IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIs IDU4NSwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJrZXlfID0gJWQi LCB0aGlzLT5rZXlfKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0Vf T1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5z dGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiwgNTg2LCAwLCBfX2FjZV9lcnJv cik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgIlxuIik7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50 IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIs IDU4NywgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICI9PT09XG4iKTsg fSB3aGlsZSAoMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gdm9pZApBQ0VfVFNTX0d1 YXJkPEFDRV9MT0NLPjo6aW5pdF9rZXkgKHZvaWQpCnsKCgogIHRoaXMtPmtleV8gPSBBQ0VfT1M6 Ok5VTExfa2V5OwogIEFDRV9UaHJlYWQ6OmtleWNyZWF0ZSAoJnRoaXMtPmtleV8sCgoKCiAgICAg ICAgICAgICAgICAgICAgICAgICAmQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46OmNsZWFudXAsCgog ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhpcyk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBBQ0VfTE9DSz4KQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46OkFDRV9UU1NfR3VhcmQgKHZvaWQp CnsKCiAgdGhpcy0+aW5pdF9rZXkgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW50 CkFDRV9UU1NfR3VhcmQ8QUNFX0xPQ0s+OjpyZWxlYXNlICh2b2lkKQp7CgoKICBBQ0VfR3VhcmQ8 QUNFX0xPQ0s+ICpndWFyZCA9IDA7CgoKCgoKCgogIEFDRV9UaHJlYWQ6OmdldHNwZWNpZmljICh0 aGlzLT5rZXlfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikgJmd1YXJkKTsK CgogIHJldHVybiBndWFyZC0+cmVsZWFzZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NL PiBpbnQKQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46OnJlbW92ZSAodm9pZCkKewoKCiAgQUNFX0d1 YXJkPEFDRV9MT0NLPiAqZ3VhcmQgPSAwOwoKCgoKCgoKICBBQ0VfVGhyZWFkOjpnZXRzcGVjaWZp YyAodGhpcy0+a2V5XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiopICZndWFy ZCk7CgoKICByZXR1cm4gZ3VhcmQtPnJlbW92ZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9M T0NLPgpBQ0VfVFNTX0d1YXJkPEFDRV9MT0NLPjo6fkFDRV9UU1NfR3VhcmQgKHZvaWQpCnsKCgog IEFDRV9HdWFyZDxBQ0VfTE9DSz4gKmd1YXJkID0gMDsKCgoKCgoKCiAgQUNFX1RocmVhZDo6Z2V0 c3BlY2lmaWMgKHRoaXMtPmtleV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoq KSAmZ3VhcmQpOwoKCgogIEFDRV9UaHJlYWQ6OnNldHNwZWNpZmljICh0aGlzLT5rZXlfLCAwKTsK ICBBQ0VfVGhyZWFkOjprZXlmcmVlICh0aGlzLT5rZXlfKTsKCiAgZGVsZXRlIGd1YXJkOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IHZvaWQKQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46OmNs ZWFudXAgKHZvaWQgKnB0cikKewoKCgogIGRlbGV0ZSAoQUNFX0d1YXJkPEFDRV9MT0NLPiAqKSBw dHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46 OkFDRV9UU1NfR3VhcmQgKEFDRV9MT0NLICZsb2NrLCBpbnQgYmxvY2spCnsKCgogIHRoaXMtPmlu aXRfa2V5ICgpOwogIEFDRV9HdWFyZDxBQ0VfTE9DSz4gKmd1YXJkOwogIGRvIHsgdHJ5IHsgZ3Vh cmQgPSBuZXcgQUNFX0d1YXJkPEFDRV9MT0NLPiAobG9jaywgYmxvY2spOyB9IGNhdGNoIChzdGQ6 OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdo aWxlICgwKTsKIyA3MDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9TeW5jaF9ULmNwcCIKICBBQ0VfVGhyZWFkOjpzZXRzcGVjaWZpYyAodGhpcy0+a2V5XywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgZ3VhcmQpOwoKfQoKdGVtcGxhdGUg PGNsYXNzIEFDRV9MT0NLPiBpbnQKQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46OmFjcXVpcmUgKHZv aWQpCnsKCgogIEFDRV9HdWFyZDxBQ0VfTE9DSz4gKmd1YXJkID0gMDsKCgoKCgoKCiAgQUNFX1Ro cmVhZDo6Z2V0c3BlY2lmaWMgKHRoaXMtPmtleV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICh2b2lkICoqKSAmZ3VhcmQpOwoKCiAgcmV0dXJuIGd1YXJkLT5hY3F1aXJlICgpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGludApBQ0VfVFNTX0d1YXJkPEFDRV9MT0NLPjo6dHJ5YWNx dWlyZSAodm9pZCkKewoKCiAgQUNFX0d1YXJkPEFDRV9MT0NLPiAqZ3VhcmQgPSAwOwoKCgoKCgoK ICBBQ0VfVGhyZWFkOjpnZXRzcGVjaWZpYyAodGhpcy0+a2V5XywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHZvaWQgKiopICZndWFyZCk7CgoKICByZXR1cm4gZ3VhcmQtPnRyeWFjcXVpcmUg KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KQUNFX1RTU19Xcml0ZV9HdWFyZDxBQ0Vf TE9DSz46OkFDRV9UU1NfV3JpdGVfR3VhcmQgKEFDRV9MT0NLICZsb2NrLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrKQp7CgoKICB0 aGlzLT5pbml0X2tleSAoKTsKICBBQ0VfR3VhcmQ8QUNFX0xPQ0s+ICpndWFyZDsKICBkbyB7IHRy eSB7IGd1YXJkID0gbmV3IEFDRV9Xcml0ZV9HdWFyZDxBQ0VfTE9DSz4gKGxvY2ssIGJsb2NrKTsg fSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyBy ZXR1cm47IH0gfSB3aGlsZSAoMCk7CiMgNzY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiCiAgQUNFX1RocmVhZDo6c2V0c3BlY2lmaWMg KHRoaXMtPmtleV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIGd1YXJkKTsK Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW50CkFDRV9UU1NfV3JpdGVfR3VhcmQ8QUNF X0xPQ0s+OjphY3F1aXJlICh2b2lkKQp7CgoKICBBQ0VfV3JpdGVfR3VhcmQ8QUNFX0xPQ0s+ICpn dWFyZCA9IDA7CgoKCgoKCgogIEFDRV9UaHJlYWQ6OmdldHNwZWNpZmljICh0aGlzLT5rZXlfLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikgJmd1YXJkKTsKCgogIHJldHVybiBn dWFyZC0+YWNxdWlyZV93cml0ZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbnQK QUNFX1RTU19Xcml0ZV9HdWFyZDxBQ0VfTE9DSz46OnRyeWFjcXVpcmUgKHZvaWQpCnsKCgogIEFD RV9Xcml0ZV9HdWFyZDxBQ0VfTE9DSz4gKmd1YXJkID0gMDsKCgoKCgoKCiAgQUNFX1RocmVhZDo6 Z2V0c3BlY2lmaWMgKHRoaXMtPmtleV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk ICoqKSAmZ3VhcmQpOwoKCiAgcmV0dXJuIGd1YXJkLT50cnlhY3F1aXJlX3dyaXRlICgpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGludApBQ0VfVFNTX1dyaXRlX0d1YXJkPEFDRV9MT0NL Pjo6YWNxdWlyZV93cml0ZSAodm9pZCkKewoKCiAgcmV0dXJuIHRoaXMtPmFjcXVpcmUgKCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW50CkFDRV9UU1NfV3JpdGVfR3VhcmQ8QUNFX0xP Q0s+Ojp0cnlhY3F1aXJlX3dyaXRlICh2b2lkKQp7CgoKICByZXR1cm4gdGhpcy0+dHJ5YWNxdWly ZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiB2b2lkCkFDRV9UU1NfV3JpdGVfR3Vh cmQ8QUNFX0xPQ0s+OjpkdW1wICh2b2lkKSBjb25zdAp7CgogIEFDRV9UU1NfR3VhcmQ8QUNFX0xP Q0s+OjpkdW1wICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+CkFDRV9UU1NfUmVhZF9H dWFyZDxBQ0VfTE9DSz46OkFDRV9UU1NfUmVhZF9HdWFyZCAoQUNFX0xPQ0sgJmxvY2ssIGludCBi bG9jaykKewoKCiAgdGhpcy0+aW5pdF9rZXkgKCk7CiAgQUNFX0d1YXJkPEFDRV9MT0NLPiAqZ3Vh cmQ7CiAgZG8geyB0cnkgeyBndWFyZCA9IG5ldyBBQ0VfUmVhZF9HdWFyZDxBQ0VfTE9DSz4gKGxv Y2ssIGJsb2NrKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9u ICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiMgODU1ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiCiAgQUNFX1RocmVhZDo6 c2V0c3BlY2lmaWMgKHRoaXMtPmtleV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk ICopIGd1YXJkKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW50CkFDRV9UU1NfUmVh ZF9HdWFyZDxBQ0VfTE9DSz46OmFjcXVpcmUgKHZvaWQpCnsKCgogIEFDRV9SZWFkX0d1YXJkPEFD RV9MT0NLPiAqZ3VhcmQgPSAwOwoKCgoKCgoKICBBQ0VfVGhyZWFkOjpnZXRzcGVjaWZpYyAodGhp cy0+a2V5XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiopICZndWFyZCk7CgoK ICByZXR1cm4gZ3VhcmQtPmFjcXVpcmVfcmVhZCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9M T0NLPiBpbnQKQUNFX1RTU19SZWFkX0d1YXJkPEFDRV9MT0NLPjo6dHJ5YWNxdWlyZSAodm9pZCkK ewoKCiAgQUNFX1JlYWRfR3VhcmQ8QUNFX0xPQ0s+ICpndWFyZCA9IDA7CgoKCgoKCgogIEFDRV9U aHJlYWQ6OmdldHNwZWNpZmljICh0aGlzLT5rZXlfLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAodm9pZCAqKikgJmd1YXJkKTsKCgogIHJldHVybiBndWFyZC0+dHJ5YWNxdWlyZV9yZWFkICgp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGludApBQ0VfVFNTX1JlYWRfR3VhcmQ8QUNF X0xPQ0s+OjphY3F1aXJlX3JlYWQgKHZvaWQpCnsKCgogIHJldHVybiB0aGlzLT5hY3F1aXJlICgp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGludApBQ0VfVFNTX1JlYWRfR3VhcmQ8QUNF X0xPQ0s+Ojp0cnlhY3F1aXJlX3JlYWQgKHZvaWQpCnsKCgogIHJldHVybiB0aGlzLT50cnlhY3F1 aXJlICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IHZvaWQKQUNFX1RTU19SZWFkX0d1 YXJkPEFDRV9MT0NLPjo6ZHVtcCAodm9pZCkgY29uc3QKewoKICBBQ0VfVFNTX0d1YXJkPEFDRV9M T0NLPjo6ZHVtcCAoKTsKfQojIDk3MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIgMgojIDk5NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgOTk3ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5oIiAyCiMgMTU1NiAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiIDIKCnRl bXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX0d1YXJkOwoKdGVtcGxhdGU8PgojIDE1 NzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5o IgpjbGFzcyBBQ0VfR3VhcmQ8QUNFX051bGxfTXV0ZXg+CnsKcHVibGljOgoKICBBQ0VfR3VhcmQg KEFDRV9OdWxsX011dGV4ICYpIHt9CiAgQUNFX0d1YXJkIChBQ0VfTnVsbF9NdXRleCAmLCBpbnQp IHt9CgoKCgogIGludCBhY3F1aXJlICh2b2lkKSB7IHJldHVybiAwOyB9CiAgaW50IHRyeWFjcXVp cmUgKHZvaWQpIHsgcmV0dXJuIDA7IH0KICBpbnQgcmVsZWFzZSAodm9pZCkgeyByZXR1cm4gMDsg fQogIGludCBsb2NrZWQgKHZvaWQpIHsgcmV0dXJuIDE7IH0KICBpbnQgcmVtb3ZlICh2b2lkKSB7 IHJldHVybiAwOyB9CiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdCB7fQoKcHJpdmF0ZToKCiAgdm9p ZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9HdWFyZDxBQ0VfTnVsbF9NdXRleD4gJik7CiAgQUNFX0d1 YXJkIChjb25zdCBBQ0VfR3VhcmQ8QUNFX051bGxfTXV0ZXg+ICYpOwp9OwoKdGVtcGxhdGUgPGNs YXNzIEFDRV9MT0NLPgpjbGFzcyBBQ0VfV3JpdGVfR3VhcmQ7Cgp0ZW1wbGF0ZTw+CgoKCgpjbGFz cyBBQ0VfV3JpdGVfR3VhcmQ8QUNFX051bGxfTXV0ZXg+IDogcHVibGljIEFDRV9HdWFyZDxBQ0Vf TnVsbF9NdXRleD4KewpwdWJsaWM6CiAgQUNFX1dyaXRlX0d1YXJkIChBQ0VfTnVsbF9NdXRleCAm bSkKICAgIDogQUNFX0d1YXJkPEFDRV9OdWxsX011dGV4PiAobSkge30KICBBQ0VfV3JpdGVfR3Vh cmQgKEFDRV9OdWxsX011dGV4ICZtLCBpbnQgYmxvY2tlZCkKICAgIDogQUNFX0d1YXJkPEFDRV9O dWxsX011dGV4PiAobSwgYmxvY2tlZCkge30KCiAgaW50IGFjcXVpcmVfd3JpdGUgKHZvaWQpIHsg cmV0dXJuIDA7IH0KICBpbnQgYWNxdWlyZSAodm9pZCkgeyByZXR1cm4gMDsgfQogIGludCB0cnlh Y3F1aXJlX3dyaXRlICh2b2lkKSB7IHJldHVybiAwOyB9CiAgaW50IHRyeWFjcXVpcmUgKHZvaWQp IHsgcmV0dXJuIDA7IH0KICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0IHt9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgQUNFX0xPQ0s+CmNsYXNzIEFDRV9SZWFkX0d1YXJkOwoKdGVtcGxhdGU8PgoKCgoKY2xh c3MgQUNFX1JlYWRfR3VhcmQ8QUNFX051bGxfTXV0ZXg+IDogcHVibGljIEFDRV9HdWFyZDxBQ0Vf TnVsbF9NdXRleD4KewpwdWJsaWM6CiAgQUNFX1JlYWRfR3VhcmQgKEFDRV9OdWxsX011dGV4ICZt KQogICAgOiBBQ0VfR3VhcmQ8QUNFX051bGxfTXV0ZXg+IChtKSB7fQogIEFDRV9SZWFkX0d1YXJk IChBQ0VfTnVsbF9NdXRleCAmbSwgaW50IGJsb2NrZWQpCiAgICA6IEFDRV9HdWFyZDxBQ0VfTnVs bF9NdXRleD4gKG0sIGJsb2NrZWQpIHt9CgogIGludCBhY3F1aXJlX3dyaXRlICh2b2lkKSB7IHJl dHVybiAwOyB9CiAgaW50IGFjcXVpcmUgKHZvaWQpIHsgcmV0dXJuIDA7IH0KICBpbnQgdHJ5YWNx dWlyZV93cml0ZSAodm9pZCkgeyByZXR1cm4gMDsgfQogIGludCB0cnlhY3F1aXJlICh2b2lkKSB7 IHJldHVybiAwOyB9CiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdCB7fQp9OwojIDE2NDcgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5oIgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAx NjQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2gu aCIgMgojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv TWFsbG9jX1QuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9NYWxsb2MuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfQWxsb2NhdG9yLmgiIDEKIyAxNSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19BbGxvY2F0b3Iu aCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJl LmgiIDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L01hbGxvY19BbGxvY2F0b3IuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvQUNFLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19BbGxvY2F0b3IuaCIgMgoKCgoKCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19CYXNlLmgi IDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01h bGxvY19CYXNlLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL3ByZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9NYWxsb2NfQmFzZS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfQmFzZS5oIiAyCiMgMzMgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfQmFzZS5oIgpjbGFz cyBBQ0VfQWxsb2NhdG9yCnsKcHVibGljOgoKCgogIHN0YXRpYyBBQ0VfQWxsb2NhdG9yICppbnN0 YW5jZSAodm9pZCk7CgoKCiAgc3RhdGljIEFDRV9BbGxvY2F0b3IgKmluc3RhbmNlIChBQ0VfQWxs b2NhdG9yICopOwoKCiAgc3RhdGljIHZvaWQgY2xvc2Vfc2luZ2xldG9uICh2b2lkKTsKCgogIEFD RV9BbGxvY2F0b3IgKHZvaWQpOwoKCiAgdmlydHVhbCB+QUNFX0FsbG9jYXRvciAodm9pZCk7CgoK ICB2aXJ0dWFsIHZvaWQgKm1hbGxvYyAoc2l6ZV90IG5ieXRlcykgPSAwOwoKCiAgdmlydHVhbCB2 b2lkICpjYWxsb2MgKHNpemVfdCBuYnl0ZXMsIGNoYXIgaW5pdGlhbF92YWx1ZSA9ICdcMCcpID0g MDsKCgoKICB2aXJ0dWFsIHZvaWQgKmNhbGxvYyAoc2l6ZV90IG5fZWxlbSwKICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciBpbml0aWFsX3ZhbHVlID0gJ1wwJykgPSAwOwoKCiAgdmlydHVhbCB2b2lkIGZyZWUgKHZvaWQg KnB0cikgPSAwOwoKCiAgdmlydHVhbCBpbnQgcmVtb3ZlICh2b2lkKSA9IDA7CiMgODMgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfQmFzZS5oIgog IHZpcnR1YWwgaW50IGJpbmQgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnBvaW50ZXIsIGludCBk dXBsaWNhdGVzID0gMCkgPSAwOwojIDk1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvTWFsbG9jX0Jhc2UuaCIKICB2aXJ0dWFsIGludCB0cnliaW5kIChjb25z dCBjaGFyICpuYW1lLCB2b2lkIComcG9pbnRlcikgPSAwOwoKCgogIHZpcnR1YWwgaW50IGZpbmQg KGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKiZwb2ludGVyKSA9IDA7CgoKICB2aXJ0dWFsIGludCBm aW5kIChjb25zdCBjaGFyICpuYW1lKSA9IDA7CgoKCiAgdmlydHVhbCBpbnQgdW5iaW5kIChjb25z dCBjaGFyICpuYW1lKSA9IDA7CgoKCiAgdmlydHVhbCBpbnQgdW5iaW5kIChjb25zdCBjaGFyICpu YW1lLCB2b2lkIComcG9pbnRlcikgPSAwOwojIDEyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19CYXNlLmgiCiAgdmlydHVhbCBpbnQgc3luYyAo c3NpemVfdCBsZW4gPSAtMSwgaW50IGZsYWdzID0gNCkgPSAwOwoKCgogIHZpcnR1YWwgaW50IHN5 bmMgKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBmbGFncyA9IDQpID0gMDsKCgoKCgoKICB2 aXJ0dWFsIGludCBwcm90ZWN0IChzc2l6ZV90IGxlbiA9IC0xLCBpbnQgcHJvdCA9ICgweDF8MHgy KSkgPSAwOwoKCgogIHZpcnR1YWwgaW50IHByb3RlY3QgKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4s IGludCBwcm90ID0gKDB4MXwweDIpKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgdm9pZCBkdW1wICh2 b2lkKSBjb25zdCA9IDA7CnByaXZhdGU6CgoKCgogIHN0YXRpYyBBQ0VfQWxsb2NhdG9yICphbGxv Y2F0b3JfOwoKCiAgc3RhdGljIGludCBkZWxldGVfYWxsb2NhdG9yXzsKfTsKCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE1NiAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19CYXNl LmgiIDIKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L01hbGxvY19BbGxvY2F0b3IuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19BbGxvY2F0b3IuaCIgMgojIDcyICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX0FsbG9jYXRv ci5oIgpjbGFzcyBBQ0VfTmV3X0FsbG9jYXRvciA6IHB1YmxpYyBBQ0VfQWxsb2NhdG9yCnsKcHVi bGljOgoKICB2aXJ0dWFsIHZvaWQgKm1hbGxvYyAoc2l6ZV90IG5ieXRlcyk7CiAgdmlydHVhbCB2 b2lkICpjYWxsb2MgKHNpemVfdCBuYnl0ZXMsIGNoYXIgaW5pdGlhbF92YWx1ZSA9ICdcMCcpOwog IHZpcnR1YWwgdm9pZCAqY2FsbG9jIChzaXplX3Qgbl9lbGVtLCBzaXplX3QgZWxlbV9zaXplLCBj aGFyIGluaXRpYWxfdmFsdWUgPSAnXDAnKTsKICB2aXJ0dWFsIHZvaWQgZnJlZSAodm9pZCAqcHRy KTsKCgogIHZpcnR1YWwgaW50IHJlbW92ZSAodm9pZCk7CiAgdmlydHVhbCBpbnQgYmluZCAoY29u c3QgY2hhciAqbmFtZSwgdm9pZCAqcG9pbnRlciwgaW50IGR1cGxpY2F0ZXMgPSAwKTsKICB2aXJ0 dWFsIGludCB0cnliaW5kIChjb25zdCBjaGFyICpuYW1lLCB2b2lkIComcG9pbnRlcik7CiAgdmly dHVhbCBpbnQgZmluZCAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqJnBvaW50ZXIpOwogIHZpcnR1 YWwgaW50IGZpbmQgKGNvbnN0IGNoYXIgKm5hbWUpOwogIHZpcnR1YWwgaW50IHVuYmluZCAoY29u c3QgY2hhciAqbmFtZSk7CiAgdmlydHVhbCBpbnQgdW5iaW5kIChjb25zdCBjaGFyICpuYW1lLCB2 b2lkIComcG9pbnRlcik7CiAgdmlydHVhbCBpbnQgc3luYyAoc3NpemVfdCBsZW4gPSAtMSwgaW50 IGZsYWdzID0gNCk7CiAgdmlydHVhbCBpbnQgc3luYyAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwg aW50IGZsYWdzID0gNCk7CiAgdmlydHVhbCBpbnQgcHJvdGVjdCAoc3NpemVfdCBsZW4gPSAtMSwg aW50IHByb3QgPSAoMHgxfDB4MikpOwogIHZpcnR1YWwgaW50IHByb3RlY3QgKHZvaWQgKmFkZHIs IHNpemVfdCBsZW4sIGludCBwcm90ID0gKDB4MXwweDIpKTsKCgoKICB2aXJ0dWFsIHZvaWQgZHVt cCAodm9pZCkgY29uc3Q7Cgpwcml2YXRlOgoKCn07CiMgMTE4ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX0FsbG9jYXRvci5oIgpjbGFzcyBBQ0Vf U3RhdGljX0FsbG9jYXRvcl9CYXNlIDogcHVibGljIEFDRV9BbGxvY2F0b3IKewpwdWJsaWM6CiAg QUNFX1N0YXRpY19BbGxvY2F0b3JfQmFzZSAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CiAg dmlydHVhbCB2b2lkICptYWxsb2MgKHNpemVfdCBuYnl0ZXMpOwogIHZpcnR1YWwgdm9pZCAqY2Fs bG9jIChzaXplX3QgbmJ5dGVzLCBjaGFyIGluaXRpYWxfdmFsdWUgPSAnXDAnKTsKICB2aXJ0dWFs IHZvaWQgKmNhbGxvYyAoc2l6ZV90IG5fZWxlbSwgc2l6ZV90IGVsZW1fc2l6ZSwgY2hhciBpbml0 aWFsX3ZhbHVlID0gJ1wwJyk7CiAgdmlydHVhbCB2b2lkIGZyZWUgKHZvaWQgKnB0cik7CiAgdmly dHVhbCBpbnQgcmVtb3ZlICh2b2lkKTsKICB2aXJ0dWFsIGludCBiaW5kIChjb25zdCBjaGFyICpu YW1lLCB2b2lkICpwb2ludGVyLCBpbnQgZHVwbGljYXRlcyA9IDApOwogIHZpcnR1YWwgaW50IHRy eWJpbmQgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKiZwb2ludGVyKTsKICB2aXJ0dWFsIGludCBm aW5kIChjb25zdCBjaGFyICpuYW1lLCB2b2lkIComcG9pbnRlcik7CiAgdmlydHVhbCBpbnQgZmlu ZCAoY29uc3QgY2hhciAqbmFtZSk7CiAgdmlydHVhbCBpbnQgdW5iaW5kIChjb25zdCBjaGFyICpu YW1lKTsKICB2aXJ0dWFsIGludCB1bmJpbmQgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKiZwb2lu dGVyKTsKICB2aXJ0dWFsIGludCBzeW5jIChzc2l6ZV90IGxlbiA9IC0xLCBpbnQgZmxhZ3MgPSA0 KTsKICB2aXJ0dWFsIGludCBzeW5jICh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3Mg PSA0KTsKICB2aXJ0dWFsIGludCBwcm90ZWN0IChzc2l6ZV90IGxlbiA9IC0xLCBpbnQgcHJvdCA9 ICgweDF8MHgyKSk7CiAgdmlydHVhbCBpbnQgcHJvdGVjdCAodm9pZCAqYWRkciwgc2l6ZV90IGxl biwgaW50IHByb3QgPSAoMHgxfDB4MikpOwoKCgogIHZpcnR1YWwgdm9pZCBkdW1wICh2b2lkKSBj b25zdDsKCnByb3RlY3RlZDoKCiAgQUNFX1N0YXRpY19BbGxvY2F0b3JfQmFzZSAodm9pZCk7CgoK ICBjaGFyICpidWZmZXJfOwoKCiAgc2l6ZV90IHNpemVfOwoKCiAgc2l6ZV90IG9mZnNldF87Cn07 CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFs bG9jX0FsbG9jYXRvci5pIiAxCgoKaW5saW5lIHZvaWQgKgpBQ0VfTmV3X0FsbG9jYXRvcjo6bWFs bG9jIChzaXplX3QgbmJ5dGVzKQp7CiAgY2hhciAqcHRyID0gMDsKCiAgaWYgKG5ieXRlcyA+IDAp CiAgICBkbyB7IHRyeSB7IHB0ciA9IG5ldyBjaGFyW25ieXRlc107IH0gY2F0Y2ggKHN0ZDo6YmFk X2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGls ZSAoMCk7CiAgcmV0dXJuICh2b2lkICopIHB0cjsKfQoKaW5saW5lIHZvaWQgKgpBQ0VfTmV3X0Fs bG9jYXRvcjo6Y2FsbG9jIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyIGluaXRpYWxfdmFsdWUpCnsKICBjaGFyICpwdHIgPSAwOwoKICBkbyB7IHRyeSB7IHB0 ciA9IG5ldyBjaGFyW25ieXRlc107IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJu b19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGlsZSAoMCk7CgogIEFDRV9PUzo6 bWVtc2V0IChwdHIsIGluaXRpYWxfdmFsdWUsIG5ieXRlcyk7CiAgcmV0dXJuICh2b2lkICopIHB0 cjsKfQoKaW5saW5lIHZvaWQgKgpBQ0VfTmV3X0FsbG9jYXRvcjo6Y2FsbG9jIChzaXplX3Qgbl9l bGVtLCBzaXplX3QgZWxlbV9zaXplLCBjaGFyIGluaXRpYWxfdmFsdWUpCnsKICByZXR1cm4gQUNF X05ld19BbGxvY2F0b3I6OmNhbGxvYyAobl9lbGVtICogZWxlbV9zaXplLCBpbml0aWFsX3ZhbHVl KTsKfQoKaW5saW5lIHZvaWQKQUNFX05ld19BbGxvY2F0b3I6OmZyZWUgKHZvaWQgKnB0cikKewog IGRlbGV0ZSBbXSAoY2hhciAqKSBwdHI7Cn0KCmlubGluZSBpbnQKQUNFX05ld19BbGxvY2F0b3I6 OnJlbW92ZSAodm9pZCkKewogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0 dXJuIC0xOyB9IHdoaWxlICgwKTsKfQoKaW5saW5lIGludApBQ0VfTmV3X0FsbG9jYXRvcjo6Ymlu ZCAoY29uc3QgY2hhciAqLCB2b2lkICosIGludCkKewogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9u ICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKfQoKaW5saW5lIGludApBQ0VfTmV3 X0FsbG9jYXRvcjo6dHJ5YmluZCAoY29uc3QgY2hhciAqLCB2b2lkIComKQp7CiAgZG8geyAoKl9f ZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwp9Cgppbmxp bmUgaW50CkFDRV9OZXdfQWxsb2NhdG9yOjpmaW5kIChjb25zdCBjaGFyICosIHZvaWQgKiYpCnsK ICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAo MCk7Cn0KCmlubGluZSBpbnQKQUNFX05ld19BbGxvY2F0b3I6OmZpbmQgKGNvbnN0IGNoYXIgKikK ewogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxl ICgwKTsKfQoKaW5saW5lIGludApBQ0VfTmV3X0FsbG9jYXRvcjo6dW5iaW5kIChjb25zdCBjaGFy ICopCnsKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3 aGlsZSAoMCk7Cn0KCmlubGluZSBpbnQKQUNFX05ld19BbGxvY2F0b3I6OnVuYmluZCAoY29uc3Qg Y2hhciAqLCB2b2lkIComKQp7CiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyBy ZXR1cm4gLTE7IH0gd2hpbGUgKDApOwp9CgppbmxpbmUgaW50CkFDRV9OZXdfQWxsb2NhdG9yOjpz eW5jIChzc2l6ZV90LCBpbnQpCnsKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7 IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cn0KCmlubGluZSBpbnQKQUNFX05ld19BbGxvY2F0b3I6 OnN5bmMgKHZvaWQgKiwgc2l6ZV90LCBpbnQpCnsKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAo KSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cn0KCmlubGluZSBpbnQKQUNFX05ld19B bGxvY2F0b3I6OnByb3RlY3QgKHNzaXplX3QsIGludCkKewogIGRvIHsgKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKfQoKaW5saW5lIGludApBQ0Vf TmV3X0FsbG9jYXRvcjo6cHJvdGVjdCAodm9pZCAqLCBzaXplX3QsIGludCkKewogIGRvIHsgKCpf X2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKfQojIDEx MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19B bGxvY2F0b3IuaSIKaW5saW5lIHZvaWQKQUNFX05ld19BbGxvY2F0b3I6OmR1bXAgKHZvaWQpIGNv bnN0CnsKfQoKaW5saW5lIHZvaWQgKgpBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjptYWxsb2Mg KHNpemVfdCBuYnl0ZXMpCnsKICBpZiAodGhpcy0+b2Zmc2V0XyArIG5ieXRlcyA+IHRoaXMtPnNp emVfKQogICAgewogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7CiAgICAgIHJldHVy biAwOwogICAgfQogIGVsc2UKICAgIHsKCgogICAgICBjaGFyICpwdHIgPSAmdGhpcy0+YnVmZmVy X1t0aGlzLT5vZmZzZXRfXTsKICAgICAgdGhpcy0+b2Zmc2V0XyArPSBuYnl0ZXM7CiAgICAgIHJl dHVybiAodm9pZCAqKSBwdHI7CiAgICB9Cn0KCmlubGluZSB2b2lkICoKQUNFX1N0YXRpY19BbGxv Y2F0b3JfQmFzZTo6Y2FsbG9jIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgaW5pdGlhbF92YWx1ZSkKewogIHZvaWQgKnB0ciA9IHRoaXMtPm1h bGxvYyAobmJ5dGVzKTsKCiAgQUNFX09TOjptZW1zZXQgKHB0ciwgaW5pdGlhbF92YWx1ZSwgbmJ5 dGVzKTsKICByZXR1cm4gKHZvaWQgKikgcHRyOwp9CgppbmxpbmUgdm9pZCAqCkFDRV9TdGF0aWNf QWxsb2NhdG9yX0Jhc2U6OmNhbGxvYyAoc2l6ZV90IG5fZWxlbSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgaW5pdGlhbF92YWx1ZSkKewogIHJldHVybiB0aGlzLT5jYWxsb2Mg KG5fZWxlbSAqIGVsZW1fc2l6ZSwgaW5pdGlhbF92YWx1ZSk7Cn0KCmlubGluZSB2b2lkCkFDRV9T dGF0aWNfQWxsb2NhdG9yX0Jhc2U6OmZyZWUgKHZvaWQgKnB0cikKewoKICBkbyB7IH0gd2hpbGUg KCZwdHIgPT0gMCk7CiAgZG8geyBpZighKHB0ciA+PSB0aGlzLT5idWZmZXJfICYmIHB0ciA8IHRo aXMtPmJ1ZmZlcl8gKyB0aGlzLT5zaXplXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjps YXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNl ICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9NYWxsb2NfQWxsb2NhdG9yLmkiLCAxNTYsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19f LT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFj ayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUg JWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgInB0ciA+PSB0aGlzLT5idWZmZXJf ICYmIHB0ciA8IHRoaXMtPmJ1ZmZlcl8gKyB0aGlzLT5zaXplXyIsIC0xKTsgfSB9IHdoaWxlICgw KTsKfQoKaW5saW5lIGludApBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjpyZW1vdmUgKHZvaWQp CnsKICByZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX1N0YXRpY19BbGxvY2F0b3JfQmFzZTo6 YmluZCAoY29uc3QgY2hhciAqLCB2b2lkICosIGludCkKewogIHJldHVybiAtMTsKfQoKaW5saW5l IGludApBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjp0cnliaW5kIChjb25zdCBjaGFyICosIHZv aWQgKiYpCnsKICByZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX1N0YXRpY19BbGxvY2F0b3Jf QmFzZTo6ZmluZCAoY29uc3QgY2hhciAqLCB2b2lkIComKQp7CiAgcmV0dXJuIC0xOwp9Cgppbmxp bmUgaW50CkFDRV9TdGF0aWNfQWxsb2NhdG9yX0Jhc2U6OmZpbmQgKGNvbnN0IGNoYXIgKikKewog IHJldHVybiAtMTsKfQoKaW5saW5lIGludApBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjp1bmJp bmQgKGNvbnN0IGNoYXIgKikKewogIHJldHVybiAtMTsKfQoKaW5saW5lIGludApBQ0VfU3RhdGlj X0FsbG9jYXRvcl9CYXNlOjp1bmJpbmQgKGNvbnN0IGNoYXIgKiwgdm9pZCAqJikKewogIHJldHVy biAtMTsKfQoKaW5saW5lIGludApBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjpzeW5jIChzc2l6 ZV90LCBpbnQpCnsKICByZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX1N0YXRpY19BbGxvY2F0 b3JfQmFzZTo6c3luYyAodm9pZCAqLCBzaXplX3QsIGludCkKewogIHJldHVybiAtMTsKfQoKaW5s aW5lIGludApBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjpwcm90ZWN0IChzc2l6ZV90LCBpbnQp CnsKICByZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX1N0YXRpY19BbGxvY2F0b3JfQmFzZTo6 cHJvdGVjdCAodm9pZCAqLCBzaXplX3QsIGludCkKewogIHJldHVybiAtMTsKfQojIDIzMiAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19BbGxvY2F0 b3IuaSIKaW5saW5lCkFDRV9TdGF0aWNfQWxsb2NhdG9yX0Jhc2U6OkFDRV9TdGF0aWNfQWxsb2Nh dG9yX0Jhc2UgKGNoYXIgKmJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpCiAgOiBidWZmZXJfIChidWZmZXIpLAog ICAgc2l6ZV8gKHNpemUpLAogICAgb2Zmc2V0XyAoMCkKewp9CiMgMTU4ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX0FsbG9jYXRvci5oIiAyCgoK IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5o IiAxCiMgMTYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv TWFsbG9jX0FsbG9jYXRvci5oIiAyCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0ZyZWVfTGlzdC5oIiAxCiMgMTUgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9GcmVlX0xpc3QuaCIKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNiAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0ZyZWVfTGlzdC5o IiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P Uy5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9GcmVlX0xpc3QuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIgMQojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRnJlZV9MaXN0LmgiIDIKIyAzMiAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0ZyZWVfTGlzdC5oIgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4KY2xhc3MgQUNFX0ZyZWVfTGlzdAp7CnB1YmxpYzoKCiAgdmlydHVhbCB+QUNFX0Zy ZWVfTGlzdCAodm9pZCk7CgoKCiAgdmlydHVhbCB2b2lkIGFkZCAoVCAqZWxlbWVudCkgPSAwOwoK CgogIHZpcnR1YWwgVCAqcmVtb3ZlICh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIHNpemVfdCBzaXpl ICh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIHZvaWQgcmVzaXplIChzaXplX3QgbmV3c2l6ZSkgPSAw Owp9OwojIDY0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv RnJlZV9MaXN0LmgiCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNF X0xvY2tlZF9GcmVlX0xpc3QgOiBwdWJsaWMgQUNFX0ZyZWVfTGlzdDxUPgp7CnB1YmxpYzoKIyA3 NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0ZyZWVfTGlz dC5oIgogIEFDRV9Mb2NrZWRfRnJlZV9MaXN0IChpbnQgbW9kZSA9IDEsCiAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBwcmVhbGxvYyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBsd20gPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaHdtID0gMjUwMDAs CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmMgPSAxMDApOwoKCiAgdmlydHVhbCB+ QUNFX0xvY2tlZF9GcmVlX0xpc3QgKHZvaWQpOwoKCgogIHZpcnR1YWwgdm9pZCBhZGQgKFQgKmVs ZW1lbnQpOwoKCgogIHZpcnR1YWwgVCAqcmVtb3ZlICh2b2lkKTsKCgogIHZpcnR1YWwgc2l6ZV90 IHNpemUgKHZvaWQpOwoKCiAgdmlydHVhbCB2b2lkIHJlc2l6ZSAoc2l6ZV90IG5ld3NpemUpOwoK cHJvdGVjdGVkOgoKICB2aXJ0dWFsIHZvaWQgYWxsb2MgKHNpemVfdCBuKTsKCgogIHZpcnR1YWwg dm9pZCBkZWFsbG9jIChzaXplX3Qgbik7CgoKCiAgaW50IG1vZGVfOwoKCiAgVCAqZnJlZV9saXN0 XzsKCgogIHNpemVfdCBsd21fOwoKCiAgc2l6ZV90IGh3bV87CgoKICBzaXplX3QgaW5jXzsKCgog IHNpemVfdCBzaXplXzsKCgogIEFDRV9MT0NLIG11dGV4XzsKCnByaXZhdGU6CgogIEFDRV9Mb2Nr ZWRfRnJlZV9MaXN0IChjb25zdCBBQ0VfTG9ja2VkX0ZyZWVfTGlzdDxULCBBQ0VfTE9DSz4gJik7 CiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9Mb2NrZWRfRnJlZV9MaXN0PFQsIEFDRV9MT0NL PiAmKTsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9GcmVlX0xpc3QuaSIgMQojIDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9GcmVlX0xpc3QuaSIKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFDRV9M T0NLPiBpbmxpbmUgdm9pZApBQ0VfTG9ja2VkX0ZyZWVfTGlzdDxULCBBQ0VfTE9DSz46OmFkZCAo VCAqZWxlbWVudCkKewogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICh0aGlzLT5tdXRl eF8pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuOzsKCgogIGlmICh0aGlzLT5t b2RlXyA9PSAyCiAgICAgIHx8IHRoaXMtPnNpemVfIDwgdGhpcy0+aHdtXykKICAgIHsKICAgICAg ZWxlbWVudC0+c2V0X25leHQgKHRoaXMtPmZyZWVfbGlzdF8pOwogICAgICB0aGlzLT5mcmVlX2xp c3RfID0gZWxlbWVudDsKICAgICAgdGhpcy0+c2l6ZV8rKzsKICAgIH0KICBlbHNlCiAgICBkZWxl dGUgZWxlbWVudDsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9DSz4gaW5s aW5lIFQgKgpBQ0VfTG9ja2VkX0ZyZWVfTGlzdDxULCBBQ0VfTE9DSz46OnJlbW92ZSAodm9pZCkK ewogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICh0aGlzLT5tdXRleF8pOyBpZiAoYWNl X21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwoKCiAgaWYgKHRoaXMtPm1vZGVfICE9IDIg JiYgdGhpcy0+c2l6ZV8gPD0gdGhpcy0+bHdtXykKICAgIHRoaXMtPmFsbG9jICh0aGlzLT5pbmNf KTsKCgogIFQgKnRlbXAgPSB0aGlzLT5mcmVlX2xpc3RfOwoKICBpZiAodGVtcCAhPSAwKQogICAg ewogICAgICB0aGlzLT5mcmVlX2xpc3RfID0gdGhpcy0+ZnJlZV9saXN0Xy0+Z2V0X25leHQgKCk7 CiAgICAgIHRoaXMtPnNpemVfLS07CiAgICB9CgogIHJldHVybiB0ZW1wOwp9CgoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgVCwgY2xhc3MgQUNFX0xPQ0s+IGlubGluZSBzaXplX3QKQUNFX0xvY2tlZF9GcmVl X0xpc3Q8VCwgQUNFX0xPQ0s+OjpzaXplICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnNpemVfOwp9 CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIHZvaWQKQUNFX0xv Y2tlZF9GcmVlX0xpc3Q8VCwgQUNFX0xPQ0s+OjpyZXNpemUgKHNpemVfdCBuZXdzaXplKQp7CiAg QUNFX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24gKHRoaXMtPm11dGV4Xyk7IGlmIChhY2VfbW9u LmxvY2tlZCAoKSA9PSAwKSByZXR1cm47OwoKCiAgaWYgKHRoaXMtPm1vZGVfICE9IDIpCgogICAg aWYgKG5ld3NpemUgPCB0aGlzLT5zaXplXykKICAgICAgdGhpcy0+ZGVhbGxvYyAodGhpcy0+c2l6 ZV8gLSBuZXdzaXplKTsKICAgIGVsc2UKICAgICAgdGhpcy0+YWxsb2MgKG5ld3NpemUgLSB0aGlz LT5zaXplXyk7Cn0KIyAxMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9GcmVlX0xpc3QuaCIgMgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9GcmVlX0xpc3QuY3BwIiAxCgoKCgoKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRnJlZV9MaXN0LmgiIDEKIyA3ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRnJlZV9MaXN0LmNw cCIgMgojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv RnJlZV9MaXN0LmNwcCIKaW5saW5lIGNvbnN0IGNoYXIqIGdldF9yY3NpZF9hY2VfRnJlZV9MaXN0 IChjb25zdCBjaGFyKikgeyByZXR1cm4gIkZyZWVfTGlzdC5jcHAsdiAxLjE4IDE5OTkvMDcvMDIg MTg6NDg6MTUgaXJmYW4gRXhwIiA7IH0gc3RhdGljIGNvbnN0IGNoYXIqIHJjc2lkX2FjZV9GcmVl X0xpc3QgPSBnZXRfcmNzaWRfYWNlX0ZyZWVfTGlzdCAoIHJjc2lkX2FjZV9GcmVlX0xpc3QgKSA7 CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpBQ0VfRnJlZV9MaXN0PFQ+Ojp+QUNFX0ZyZWVfTGlzdCAo dm9pZCkKewoKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9DSz4KQUNFX0xv Y2tlZF9GcmVlX0xpc3Q8VCwgQUNFX0xPQ0s+OjpBQ0VfTG9ja2VkX0ZyZWVfTGlzdCAoaW50IG1v ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IHByZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBsd20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGh3bSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5jKQogIDogbW9kZV8gKG1vZGUp LAogICAgZnJlZV9saXN0XyAoMCksCiAgICBsd21fIChsd20pLAogICAgaHdtXyAoaHdtKSwKICAg IGluY18gKGluYyksCiAgICBzaXplXyAoMCkKewogIHRoaXMtPmFsbG9jIChwcmVhbGxvYyk7Cn0K CgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFDRV9MT0NLPgpBQ0VfTG9ja2VkX0ZyZWVfTGlz dDxULCBBQ0VfTE9DSz46On5BQ0VfTG9ja2VkX0ZyZWVfTGlzdCAodm9pZCkKewogIGlmICh0aGlz LT5tb2RlXyAhPSAyKQogICAgd2hpbGUgKHRoaXMtPmZyZWVfbGlzdF8gIT0gMCkKICAgICAgewog ICAgICAgIFQgKnRlbXAgPSB0aGlzLT5mcmVlX2xpc3RfOwogICAgICAgIHRoaXMtPmZyZWVfbGlz dF8gPSB0aGlzLT5mcmVlX2xpc3RfLT5nZXRfbmV4dCAoKTsKICAgICAgICBkZWxldGUgdGVtcDsK ICAgICAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9DSz4gdm9pZApBQ0Vf TG9ja2VkX0ZyZWVfTGlzdDxULCBBQ0VfTE9DSz46OmFsbG9jIChzaXplX3QgbikKewogIGZvciAo OyBuID4gMDsgbi0tKQogICAgewogICAgICBUICp0ZW1wID0gMDsKICAgICAgZG8geyB0cnkgeyB0 ZW1wID0gbmV3IFQ7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlv biAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogICAgICB0ZW1wLT5zZXRfbmV4dCAo dGhpcy0+ZnJlZV9saXN0Xyk7CiAgICAgIHRoaXMtPmZyZWVfbGlzdF8gPSB0ZW1wOwogICAgICB0 aGlzLT5zaXplXysrOwogICAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9D Sz4gdm9pZApBQ0VfTG9ja2VkX0ZyZWVfTGlzdDxULCBBQ0VfTE9DSz46OmRlYWxsb2MgKHNpemVf dCBuKQp7CiAgZm9yICg7IHRoaXMtPmZyZWVfbGlzdF8gIT0gMCAmJiBuID4gMDsKICAgICAgIG4t LSkKICAgIHsKICAgICAgVCAqdGVtcCA9IHRoaXMtPmZyZWVfbGlzdF87CiAgICAgIHRoaXMtPmZy ZWVfbGlzdF8gPSB0aGlzLT5mcmVlX2xpc3RfLT5nZXRfbmV4dCAoKTsKICAgICAgZGVsZXRlIHRl bXA7CiAgICAgIHRoaXMtPnNpemVfLS07CiAgICB9Cn0KIyAxNDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9GcmVlX0xpc3QuaCIgMgoKCgoKCgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAx NDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9GcmVlX0xp c3QuaCIgMgojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvTWFsbG9jX1QuaCIgMgojIDQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEFDRV9DYWNo ZWRfTWVtX1Bvb2xfTm9kZQp7CnB1YmxpYzoKCiAgVCAqYWRkciAodm9pZCk7CgoKICBBQ0VfQ2Fj aGVkX01lbV9Qb29sX05vZGU8VD4gKmdldF9uZXh0ICh2b2lkKTsKCgogIHZvaWQgc2V0X25leHQg KEFDRV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxUPiAqcHRyKTsKCnByaXZhdGU6CgoKCgoKCgogIEFD RV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxUPiAqbmV4dF87Cn07CiMgNzggIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5oIgp0ZW1wbGF0ZSA8Y2xh c3MgVCwgY2xhc3MgQUNFX0xPQ0s+CmNsYXNzIEFDRV9DYWNoZWRfQWxsb2NhdG9yIDogcHVibGlj IEFDRV9OZXdfQWxsb2NhdG9yCnsKcHVibGljOgoKCiAgQUNFX0NhY2hlZF9BbGxvY2F0b3IgKHNp emVfdCBuX2NodW5rcyk7CgoKICB+QUNFX0NhY2hlZF9BbGxvY2F0b3IgKHZvaWQpOwoKCgoKCgoK ICB2b2lkICptYWxsb2MgKHNpemVfdCBuYnl0ZXMgPSBzaXplb2YgKFQpKTsKCgoKCgoKCiAgdmly dHVhbCB2b2lkICpjYWxsb2MgKHNpemVfdCBuYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgaW5pdGlhbF92YWx1ZSA9ICdcMCcpOwoKCgogIHZpcnR1YWwgdm9pZCAqY2FsbG9jIChz aXplX3Qgbl9lbGVtLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLAog ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGluaXRpYWxfdmFsdWUgPSAnXDAnKTsKCgogIHZv aWQgZnJlZSAodm9pZCAqKTsKCnByaXZhdGU6CgoKICBjaGFyICpwb29sXzsKCgogIEFDRV9Mb2Nr ZWRfRnJlZV9MaXN0PEFDRV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxUPiwgQUNFX0xPQ0s+IGZyZWVf bGlzdF87Cn07CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPgpjbGFzcyBBQ0VfQWxsb2Nh dG9yX0FkYXB0ZXIgOiBwdWJsaWMgQUNFX0FsbG9jYXRvcgp7CnB1YmxpYzoKCiAgdHlwZWRlZiBN QUxMT0MgQUxMT0NBVE9SOwoKCgoKICB0eXBlZGVmIGNvbnN0IHR5cGVuYW1lIE1BTExPQzo6TUVN T1JZX1BPT0xfT1BUSU9OUyAqTUVNT1JZX1BPT0xfT1BUSU9OUzsKCgoKCgogIEFDRV9BbGxvY2F0 b3JfQWRhcHRlciAoY29uc3QgY2hhciAqcG9vbF9uYW1lID0gMCk7CgogIEFDRV9BbGxvY2F0b3Jf QWRhcHRlciAoY29uc3QgY2hhciAqcG9vbF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqbG9ja19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX1BP T0xfT1BUSU9OUyBvcHRpb25zID0gMCkKICAgICAgOiBhbGxvY2F0b3JfIChwb29sX25hbWUsCiAg ICAgICAgICAgICAgICAgICAgbG9ja19uYW1lLAogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMp CiAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgIH0KIyAxNzUgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5oIgogIHZpcnR1YWwgfkFDRV9BbGxv Y2F0b3JfQWRhcHRlciAodm9pZCk7CgoKCgogIHZpcnR1YWwgdm9pZCAqbWFsbG9jIChzaXplX3Qg bmJ5dGVzKTsKCgogIHZpcnR1YWwgdm9pZCAqY2FsbG9jIChzaXplX3QgbmJ5dGVzLCBjaGFyIGlu aXRpYWxfdmFsdWUgPSAnXDAnKTsKCgoKICB2aXJ0dWFsIHZvaWQgKmNhbGxvYyAoc2l6ZV90IG5f ZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciBpbml0aWFsX3ZhbHVlID0gJ1wwJyk7CgoKICB2aXJ0dWFsIHZv aWQgZnJlZSAodm9pZCAqcHRyKTsKCgogIHZpcnR1YWwgaW50IHJlbW92ZSAodm9pZCk7CiMgMjA4 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1Qu aCIKICB2aXJ0dWFsIGludCBiaW5kIChjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwb2ludGVyLCBp bnQgZHVwbGljYXRlcyA9IDApOwojIDIyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCiAgdmlydHVhbCBpbnQgdHJ5YmluZCAoY29uc3Qg Y2hhciAqbmFtZSwgdm9pZCAqJnBvaW50ZXIpOwoKCgogIHZpcnR1YWwgaW50IGZpbmQgKGNvbnN0 IGNoYXIgKm5hbWUsIHZvaWQgKiZwb2ludGVyKTsKCgogIHZpcnR1YWwgaW50IGZpbmQgKGNvbnN0 IGNoYXIgKm5hbWUpOwoKCgogIHZpcnR1YWwgaW50IHVuYmluZCAoY29uc3QgY2hhciAqbmFtZSk7 CgoKCiAgdmlydHVhbCBpbnQgdW5iaW5kIChjb25zdCBjaGFyICpuYW1lLCB2b2lkIComcG9pbnRl cik7CiMgMjQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv TWFsbG9jX1QuaCIKICB2aXJ0dWFsIGludCBzeW5jIChzc2l6ZV90IGxlbiA9IC0xLCBpbnQgZmxh Z3MgPSA0KTsKCgoKICB2aXJ0dWFsIGludCBzeW5jICh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBp bnQgZmxhZ3MgPSA0KTsKCgoKCgoKICB2aXJ0dWFsIGludCBwcm90ZWN0IChzc2l6ZV90IGxlbiA9 IC0xLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CgoKCiAgdmlydHVhbCBpbnQgcHJvdGVjdCAodm9p ZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3QgPSAoMHgxfDB4MikpOwoKCiAgQUxMT0NBVE9S ICZhbGxvYyAodm9pZCk7CgoKCgoKCgogIHZpcnR1YWwgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsK CnByaXZhdGU6CgogIEFMTE9DQVRPUiBhbGxvY2F0b3JfOwp9OwojIDI4OCAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCnRlbXBsYXRlIDxz aXplX3QgUE9PTF9TSVpFPgpjbGFzcyBBQ0VfU3RhdGljX0FsbG9jYXRvciA6IHB1YmxpYyBBQ0Vf U3RhdGljX0FsbG9jYXRvcl9CYXNlCnsKcHVibGljOgogIEFDRV9TdGF0aWNfQWxsb2NhdG9yICh2 b2lkKQogICAgOiBBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlIChwb29sXywgUE9PTF9TSVpFKQog IHsKCiAgfQoKcHJpdmF0ZToKCiAgY2hhciBwb29sX1tQT09MX1NJWkVdOwp9OwoKCnRlbXBsYXRl IDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPgpjbGFz cyBBQ0VfTWFsbG9jX0xJRk9fSXRlcmF0b3JfVDsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9N RU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4KY2xhc3MgQUNFX01hbGxvY19G SUZPX0l0ZXJhdG9yX1Q7CiMgMzI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNs YXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+CmNsYXNzIEFDRV9NYWxsb2NfVAp7CnB1YmxpYzoK ICBmcmllbmQgY2xhc3MgQUNFX01hbGxvY19MSUZPX0l0ZXJhdG9yX1Q8X0FDRV9NRU1fUE9PTCwg QUNFX0xPQ0ssIEFDRV9DQj47CiAgZnJpZW5kIGNsYXNzIEFDRV9NYWxsb2NfRklGT19JdGVyYXRv cl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OwogIHR5cGVkZWYgX0FDRV9NRU1f UE9PTCBNRU1PUllfUE9PTDsKICB0eXBlZGVmIHR5cGVuYW1lIF9BQ0VfTUVNX1BPT0w6Ok9QVElP TlMgTUVNT1JZX1BPT0xfT1BUSU9OUzsKICB0eXBlZGVmIHR5cGVuYW1lIEFDRV9DQjo6QUNFX05h bWVfTm9kZSBOQU1FX05PREU7CiAgdHlwZWRlZiB0eXBlbmFtZSBBQ0VfQ0I6OkFDRV9NYWxsb2Nf SGVhZGVyIE1BTExPQ19IRUFERVI7CiMgMzQzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKICBBQ0VfTWFsbG9jX1QgKGNvbnN0IEFDRV9U Q0hBUiAqcG9vbF9uYW1lID0gMCk7CiMgMzUyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKICBBQ0VfTWFsbG9jX1QgKGNvbnN0IEFDRV9U Q0hBUiAqcG9vbF9uYW1lLAogICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpsb2NrX25h bWUsCiAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfQUNFX01FTV9QT09MOjpPUFRJT05T ICpvcHRpb25zID0gMCk7CiMgMzY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKICB+QUNFX01hbGxvY19UICh2b2lkKTsKCgogIGludCBy ZWZfY291bnRlciAodm9pZCk7CgoKICBpbnQgcmVsZWFzZSAodm9pZCk7CgoKICBpbnQgcmVtb3Zl ICh2b2lkKTsKCgoKCiAgdm9pZCAqbWFsbG9jIChzaXplX3QgbmJ5dGVzKTsKCgogIHZvaWQgKmNh bGxvYyAoc2l6ZV90IG5ieXRlcywgY2hhciBpbml0aWFsX3ZhbHVlID0gJ1wwJyk7CgoKCiAgdm9p ZCAqY2FsbG9jIChzaXplX3Qgbl9lbGVtLAogICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6 ZSwKICAgICAgICAgICAgICAgIGNoYXIgaW5pdGlhbF92YWx1ZSA9ICdcMCcpOwoKCgogIHZvaWQg ZnJlZSAodm9pZCAqcHRyKTsKCgogIE1FTU9SWV9QT09MICZtZW1vcnlfcG9vbCAodm9pZCk7CiMg NDA4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9j X1QuaCIKICBpbnQgYmluZCAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqcG9pbnRlciwgaW50IGR1 cGxpY2F0ZXMgPSAwKTsKIyA0MjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9NYWxsb2NfVC5oIgogIGludCB0cnliaW5kIChjb25zdCBjaGFyICpuYW1lLCB2 b2lkIComcG9pbnRlcik7CgoKCiAgaW50IGZpbmQgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKiZw b2ludGVyKTsKCgogIGludCBmaW5kIChjb25zdCBjaGFyICpuYW1lKTsKCgoKCgoKICBpbnQgdW5i aW5kIChjb25zdCBjaGFyICpuYW1lKTsKCgoKCgoKCiAgaW50IHVuYmluZCAoY29uc3QgY2hhciAq bmFtZSwgdm9pZCAqJnBvaW50ZXIpOwojIDQ1MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCiAgaW50IHN5bmMgKHNzaXplX3QgbGVuID0g LTEsIGludCBmbGFncyA9IDQpOwoKCgogIGludCBzeW5jICh2b2lkICphZGRyLCBzaXplX3QgbGVu LCBpbnQgZmxhZ3MgPSA0KTsKCgoKCgoKICBpbnQgcHJvdGVjdCAoc3NpemVfdCBsZW4gPSAtMSwg aW50IHByb3QgPSAoMHgxfDB4MikpOwoKCgogIGludCBwcm90ZWN0ICh2b2lkICphZGRyLCBzaXpl X3QgbGVuLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CiMgNDc4ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKICBzc2l6ZV90IGF2YWlsX2No dW5rcyAoc2l6ZV90IHNpemUpIGNvbnN0OwojIDQ4NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCiAgQUNFX0xPQ0sgJm11dGV4ICh2b2lk KTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307CgoKICB2 b2lkICpiYXNlX2FkZHIgKHZvaWQpOwoKcHJpdmF0ZToKCiAgaW50IG9wZW4gKHZvaWQpOwoKCgog IGludCBzaGFyZWRfYmluZCAoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgIHZv aWQgKnBvaW50ZXIpOwoKCgoKCgoKICB2b2lkICpzaGFyZWRfZmluZCAoY29uc3QgY2hhciAqbmFt ZSk7CgoKICB2b2lkICpzaGFyZWRfbWFsbG9jIChzaXplX3QgbmJ5dGVzKTsKCgogIHZvaWQgc2hh cmVkX2ZyZWUgKHZvaWQgKnB0cik7CgoKCiAgQUNFX0NCICpjYl9wdHJfOwoKCiAgTUVNT1JZX1BP T0wgbWVtb3J5X3Bvb2xfOwoKCiAgQUNFX0xPQ0sgbG9ja187Cn07CiMgNTM5ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKdGVtcGxhdGUg PGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+CmNsYXNz IEFDRV9NYWxsb2NfTElGT19JdGVyYXRvcl9UCnsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg QUNFX0NCOjpBQ0VfTmFtZV9Ob2RlIE5BTUVfTk9ERTsKICB0eXBlZGVmIHR5cGVuYW1lIEFDRV9D Qjo6QUNFX01hbGxvY19IZWFkZXIgTUFMTE9DX0hFQURFUjsKCgoKCiAgQUNFX01hbGxvY19MSUZP X0l0ZXJhdG9yX1QgKEFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NC PiAmbWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1l ID0gMCk7CgogIH5BQ0VfTWFsbG9jX0xJRk9fSXRlcmF0b3JfVCAodm9pZCk7CgoKCgogIGludCBk b25lICh2b2lkKSBjb25zdDsKCgoKICBpbnQgbmV4dCAodm9pZCAqJm5leHRfZW50cnkpOwoKCgoK CgogIGludCBuZXh0ICh2b2lkICombmV4dF9lbnRyeSwKICAgICAgICAgICAgY29uc3QgY2hhciAq Jm5hbWUpOwoKCgogIGludCBhZHZhbmNlICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29u c3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcml2YXRlOgoKICBBQ0VfTWFsbG9jX1Q8X0FDRV9N RU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj4gJm1hbGxvY187CgoKICBOQU1FX05PREUgKmN1cnJf OwoKCiAgQUNFX1JlYWRfR3VhcmQ8QUNFX0xPQ0s+IGd1YXJkXzsKCgogIGNvbnN0IGNoYXIgKm5h bWVfOwp9OwojIDYwMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL01hbGxvY19ULmgiCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0Vf TE9DSywgY2xhc3MgQUNFX0NCPgpjbGFzcyBBQ0VfTWFsbG9jX0ZJRk9fSXRlcmF0b3JfVAp7CnB1 YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIEFDRV9DQjo6QUNFX05hbWVfTm9kZSBOQU1FX05PREU7 CiAgdHlwZWRlZiB0eXBlbmFtZSBBQ0VfQ0I6OkFDRV9NYWxsb2NfSGVhZGVyIE1BTExPQ19IRUFE RVI7CgoKCgogIEFDRV9NYWxsb2NfRklGT19JdGVyYXRvcl9UIChBQ0VfTWFsbG9jX1Q8X0FDRV9N RU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj4gJm1hbGxvYywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDApOwoKICB+QUNFX01hbGxvY19GSUZPX0l0ZXJh dG9yX1QgKHZvaWQpOwoKCgoKICBpbnQgZG9uZSAodm9pZCkgY29uc3Q7CgoKCiAgaW50IG5leHQg KHZvaWQgKiZuZXh0X2VudHJ5KTsKCgoKCgoKICBpbnQgbmV4dCAodm9pZCAqJm5leHRfZW50cnks CiAgICAgICAgICAgIGNvbnN0IGNoYXIgKiZuYW1lKTsKCgoKICBpbnQgYWR2YW5jZSAodm9pZCk7 CgoKCiAgaW50IHN0YXJ0ICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBz dHJ1Y3QgX19BY2Uge307Cgpwcml2YXRlOgoKICBBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwg QUNFX0xPQ0ssIEFDRV9DQj4gJm1hbGxvY187CgoKICBOQU1FX05PREUgKmN1cnJfOwoKCiAgQUNF X1JlYWRfR3VhcmQ8QUNFX0xPQ0s+IGd1YXJkXzsKCgogIGNvbnN0IGNoYXIgKm5hbWVfOwp9OwoK dGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLPgpjbGFzcyBBQ0Vf TWFsbG9jIDogcHVibGljIEFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNF X0NvbnRyb2xfQmxvY2s+CnsKcHVibGljOgoKCgoKCgoKICBBQ0VfTWFsbG9jIChjb25zdCBBQ0Vf VENIQVIgKnBvb2xfbmFtZSA9IDApOwojIDY4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCiAgQUNFX01hbGxvYyAoY29uc3QgQUNFX1RD SEFSICpwb29sX25hbWUsCiAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpsb2NrX25hbWUs CiAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX0FDRV9NRU1fUE9PTDo6T1BUSU9OUyAqb3B0 aW9ucyA9IDApOwojIDY5MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL01hbGxvY19ULmgiCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xh c3MgQUNFX0xPQ0s+CmNsYXNzIEFDRV9NYWxsb2NfTElGT19JdGVyYXRvciA6IHB1YmxpYyBBQ0Vf TWFsbG9jX0xJRk9fSXRlcmF0b3JfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NvbnRy b2xfQmxvY2s+CnsKcHVibGljOgoKCgogIEFDRV9NYWxsb2NfTElGT19JdGVyYXRvciAoQUNFX01h bGxvYzxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSz4gJm1hbGxvYywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSAwKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQUNF X01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX01hbGxvY19GSUZPX0l0ZXJhdG9y IDogcHVibGljIEFDRV9NYWxsb2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9M T0NLLCBBQ0VfQ29udHJvbF9CbG9jaz4KewpwdWJsaWM6CgoKCiAgQUNFX01hbGxvY19GSUZPX0l0 ZXJhdG9yIChBQ0VfTWFsbG9jPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLPiAmbWFsbG9jLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDApOwp9OwoKCiMgMSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmki IDEKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgKgpBQ0VfQ2FjaGVkX01lbV9Qb29s X05vZGU8VD46OmFkZHIgKHZvaWQpCnsKCgoKICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAoc3Rh dGljX2Nhc3Q8dm9pZCAqPiAodGhpcykpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIEFD RV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxUPiAqCkFDRV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxUPjo6 Z2V0X25leHQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bmV4dF87Cn0KCnRlbXBsYXRlIDxjbGFz cyBUPiBpbmxpbmUgdm9pZApBQ0VfQ2FjaGVkX01lbV9Qb29sX05vZGU8VD46OnNldF9uZXh0IChB Q0VfQ2FjaGVkX01lbV9Qb29sX05vZGU8VD4gKnB0cikKewogIHRoaXMtPm5leHRfID0gcHRyOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQUNFX0xPQ0s+IGlubGluZSB2b2lkICoKQUNFX0Nh Y2hlZF9BbGxvY2F0b3I8VCwgQUNFX0xPQ0s+OjptYWxsb2MgKHNpemVfdCBuYnl0ZXMpCnsKCiAg aWYgKG5ieXRlcyA+IHNpemVvZiAoVCkpCiAgICByZXR1cm4gX19udWxsOwoKCgogIHJldHVybiB0 aGlzLT5mcmVlX2xpc3RfLnJlbW92ZSAoKS0+YWRkciAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQs IGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUgdm9pZCAqCkFDRV9DYWNoZWRfQWxsb2NhdG9yPFQsIEFD RV9MT0NLPjo6Y2FsbG9jIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciBpbml0aWFsX3ZhbHVlKQp7CgogIGlmIChuYnl0ZXMgPiBz aXplb2YgKFQpKQogICAgcmV0dXJuIF9fbnVsbDsKCgoKICB2b2lkICpwdHIgPSB0aGlzLT5mcmVl X2xpc3RfLnJlbW92ZSAoKS0+YWRkciAoKTsKICBBQ0VfT1M6Om1lbXNldCAocHRyLCBpbml0aWFs X3ZhbHVlLCBzaXplb2YgKFQpKTsKICByZXR1cm4gcHRyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwg Y2xhc3MgQUNFX0xPQ0s+IGlubGluZSB2b2lkICoKQUNFX0NhY2hlZF9BbGxvY2F0b3I8VCwgQUNF X0xPQ0s+OjpjYWxsb2MgKHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIpCnsKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAw OyB9IHdoaWxlICgwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFDRV9MT0NLPiBpbmxp bmUgdm9pZApBQ0VfQ2FjaGVkX0FsbG9jYXRvcjxULCBBQ0VfTE9DSz46OmZyZWUgKHZvaWQgKiBw dHIpCnsKICB0aGlzLT5mcmVlX2xpc3RfLmFkZCAoKEFDRV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxU PiAqKSBwdHIpIDsKfQoKdGVtcGxhdGUgPGNsYXNzIE1BTExPQz4gaW5saW5lIHZvaWQgKgpBQ0Vf QWxsb2NhdG9yX0FkYXB0ZXI8TUFMTE9DPjo6bWFsbG9jIChzaXplX3QgbmJ5dGVzKQp7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVy biB0aGlzLT5hbGxvY2F0b3JfLm1hbGxvYyAobmJ5dGVzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIE1B TExPQz4gaW5saW5lIHZvaWQgKgpBQ0VfQWxsb2NhdG9yX0FkYXB0ZXI8TUFMTE9DPjo6Y2FsbG9j IChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyIGluaXRpYWxfdmFsdWUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmFsbG9jYXRvcl8uY2FsbG9jIChuYnl0 ZXMsIGluaXRpYWxfdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPiBpbmxpbmUgdm9p ZCAqCkFDRV9BbGxvY2F0b3JfQWRhcHRlcjxNQUxMT0M+OjpjYWxsb2MgKHNpemVfdCBuX2VsZW0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgaW5pdGlhbF92YWx1 ZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICByZXR1cm4gdGhpcy0+YWxsb2NhdG9yXy5jYWxsb2MgKG5fZWxlbSwgZWxlbV9zaXplLCBp bml0aWFsX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIE1BTExPQz4gaW5saW5lIE1BTExPQyAm CkFDRV9BbGxvY2F0b3JfQWRhcHRlcjxNQUxMT0M+OjphbGxvYyAodm9pZCkKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4g dGhpcy0+YWxsb2NhdG9yXzsKfQoKdGVtcGxhdGUgPGNsYXNzIE1BTExPQz4gaW5saW5lIHZvaWQK QUNFX0FsbG9jYXRvcl9BZGFwdGVyPE1BTExPQz46OmZyZWUgKHZvaWQgKnB0cikKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+YWxs b2NhdG9yXy5mcmVlIChwdHIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPiBpbmxpbmUgaW50 CkFDRV9BbGxvY2F0b3JfQWRhcHRlcjxNQUxMT0M+OjpyZW1vdmUgKHZvaWQpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRo aXMtPmFsbG9jYXRvcl8ucmVtb3ZlICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPiBpbmxp bmUgaW50CkFDRV9BbGxvY2F0b3JfQWRhcHRlcjxNQUxMT0M+Ojp0cnliaW5kIChjb25zdCBjaGFy ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqJnBv aW50ZXIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogIHJldHVybiB0aGlzLT5hbGxvY2F0b3JfLnRyeWJpbmQgKG5hbWUsIHBvaW50ZXIp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPiBpbmxpbmUgaW50CkFDRV9BbGxvY2F0b3JfQWRh cHRlcjxNQUxMT0M+OjpiaW5kIChjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqcG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBkdXBsaWNhdGVzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YWxsb2NhdG9yXy5iaW5k IChuYW1lLCBwb2ludGVyLCBkdXBsaWNhdGVzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIE1BTExPQz4g aW5saW5lIGludApBQ0VfQWxsb2NhdG9yX0FkYXB0ZXI8TUFMTE9DPjo6ZmluZCAoY29uc3QgY2hh ciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiZwb2lu dGVyKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICByZXR1cm4gdGhpcy0+YWxsb2NhdG9yXy5maW5kIChuYW1lLCBwb2ludGVyKTsKfQoKdGVt cGxhdGUgPGNsYXNzIE1BTExPQz4gaW5saW5lIGludApBQ0VfQWxsb2NhdG9yX0FkYXB0ZXI8TUFM TE9DPjo6ZmluZCAoY29uc3QgY2hhciAqbmFtZSkKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmFsbG9jYXRvcl8uZmlu ZCAobmFtZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBNQUxMT0M+IGlubGluZSBpbnQKQUNFX0FsbG9j YXRvcl9BZGFwdGVyPE1BTExPQz46OnVuYmluZCAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqJnBv aW50ZXIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgcmV0dXJuIHRoaXMtPmFsbG9jYXRvcl8udW5iaW5kIChuYW1lLCBwb2ludGVyKTsK fQoKdGVtcGxhdGUgPGNsYXNzIE1BTExPQz4gaW5saW5lIGludApBQ0VfQWxsb2NhdG9yX0FkYXB0 ZXI8TUFMTE9DPjo6dW5iaW5kIChjb25zdCBjaGFyICpuYW1lKQp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5hbGxv Y2F0b3JfLnVuYmluZCAobmFtZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBNQUxMT0M+IGlubGluZSBp bnQKQUNFX0FsbG9jYXRvcl9BZGFwdGVyPE1BTExPQz46OnN5bmMgKHNzaXplX3QgbGVuLCBpbnQg ZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogIHJldHVybiB0aGlzLT5hbGxvY2F0b3JfLnN5bmMgKGxlbiwgZmxhZ3MpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgTUFMTE9DPiBpbmxpbmUgaW50CkFDRV9BbGxvY2F0b3JfQWRhcHRlcjxNQUxM T0M+OjpzeW5jICh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlz LT5hbGxvY2F0b3JfLnN5bmMgKGFkZHIsIGxlbiwgZmxhZ3MpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gaW5saW5lIGludApB Q0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OnJlZl9jb3VudGVy ICh2b2lkKQp7CiAgQUNFX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24gKChBQ0VfTE9DSyAmKSB0 aGlzLT5sb2NrXyk7IGlmIChhY2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gLTE7OwogIGlm ICh0aGlzLT5jYl9wdHJfICE9IDApCiAgICByZXR1cm4gdGhpcy0+Y2JfcHRyXy0+cmVmX2NvdW50 ZXJfOwoKICByZXR1cm4gLTE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFz cyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiBpbmxpbmUgaW50CkFDRV9NYWxsb2NfVDxfQUNFX01F TV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6cmVsZWFzZSAodm9pZCkKewogIEFDRV9HdWFyZDwg QUNFX0xPQ0sgPiBhY2VfbW9uICgoQUNFX0xPQ0sgJikgdGhpcy0+bG9ja18pOyBpZiAoYWNlX21v bi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIC0xOzsKICBpZiAodGhpcy0+Y2JfcHRyXyAhPSAwKQog ICAgcmV0dXJuIC0tdGhpcy0+Y2JfcHRyXy0+cmVmX2NvdW50ZXJfOwogIGVsc2UKICAgIHJldHVy biAtMTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBj bGFzcyBBQ0VfQ0I+IGlubGluZSBfQUNFX01FTV9QT09MICYKQUNFX01hbGxvY19UPF9BQ0VfTUVN X1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjptZW1vcnlfcG9vbCAodm9pZCkKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgcmV0dXJuIHRoaXMtPm1lbW9yeV9wb29sXzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9B Q0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGlubGluZSBpbnQKQUNF X01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpzeW5jIChzc2l6ZV90 IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBmbGFncykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bWVtb3J5X3Bvb2xfLnN5bmMg KGxlbiwgZmxhZ3MpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNF X0xPQ0ssIGNsYXNzIEFDRV9DQj4gaW5saW5lIGludApBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9P TCwgQUNFX0xPQ0ssIEFDRV9DQj46OnN5bmMgKHZvaWQgKmFkZHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKQp7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogIHJldHVybiB0aGlzLT5tZW1vcnlfcG9vbF8uc3luYyAoYWRkciwgbGVuLCBmbGFn cyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xh c3MgQUNFX0NCPiBpbmxpbmUgaW50CkFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9D SywgQUNFX0NCPjo6cHJvdGVjdCAoc3NpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgcmV0dXJuIHRoaXMtPm1lbW9yeV9wb29sXy5wcm90ZWN0IChsZW4sIGZsYWdzKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+ IGlubGluZSBpbnQKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+ Ojpwcm90ZWN0ICh2b2lkICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncykKewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bWVtb3J5X3Bvb2xfLnByb3RlY3QgKGFkZHIsIGxl biwgZmxhZ3MpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xP Q0ssIGNsYXNzIEFDRV9DQj4gaW5saW5lIEFDRV9MT0NLICYKQUNFX01hbGxvY19UPF9BQ0VfTUVN X1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjptdXRleCAodm9pZCkKewogIHJldHVybiB0aGlzLT5s b2NrXzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBj bGFzcyBBQ0VfQ0I+IGlubGluZSB2b2lkICoKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFD RV9MT0NLLCBBQ0VfQ0I+OjpiYXNlX2FkZHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+Y2JfcHRy XzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLPiBpbmxp bmUKQUNFX01hbGxvYzxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSz46OkFDRV9NYWxsb2MgKGNvbnN0 IEFDRV9UQ0hBUiAqcG9vbF9uYW1lKQogIDogQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFD RV9MT0NLLCBBQ0VfQ29udHJvbF9CbG9jaz4gKHBvb2xfbmFtZSkKewp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0s+IGlubGluZQpBQ0VfTWFsbG9jPF9BQ0Vf TUVNX1BPT0wsIEFDRV9MT0NLPjo6QUNFX01hbGxvYyAoY29uc3QgQUNFX1RDSEFSICpwb29sX25h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQUNFX1RDSEFSICpsb2NrX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX0FDRV9NRU1fUE9PTDo6T1BUSU9OUyAq b3B0aW9ucykKICA6IEFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0Nv bnRyb2xfQmxvY2s+IChwb29sX25hbWUsIGxvY2tfbmFtZSwgb3B0aW9ucykKewp9CiMgMjcwICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaSIK dGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUKQUNF X01hbGxvY19MSUZPX0l0ZXJhdG9yPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLPjo6QUNFX01hbGxv Y19MSUZPX0l0ZXJhdG9yIChBQ0VfTWFsbG9jPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLPiAmbWFs bG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKQogIDogQUNFX01hbGxv Y19MSUZPX0l0ZXJhdG9yX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9Db250cm9sX0Js b2NrPiAobWFsbG9jLCBuYW1lKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBj bGFzcyBBQ0VfTE9DSz4gaW5saW5lCkFDRV9NYWxsb2NfRklGT19JdGVyYXRvcjxfQUNFX01FTV9Q T09MLCBBQ0VfTE9DSz46OkFDRV9NYWxsb2NfRklGT19JdGVyYXRvciAoQUNFX01hbGxvYzxfQUNF X01FTV9QT09MLCBBQ0VfTE9DSz4gJm1hbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqbmFtZSkKICA6IEFDRV9NYWxsb2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0ws IEFDRV9MT0NLLCBBQ0VfQ29udHJvbF9CbG9jaz4gKG1hbGxvYywgbmFtZSkKewp9CiMgNzE5ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIg MgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9N YWxsb2NfVC5jcHAiIDEKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIgMQojIDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiIDIKIyAxNyAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmNwcCIKaW5saW5lIGNv bnN0IGNoYXIqIGdldF9yY3NpZF9hY2VfTWFsbG9jX1QgKGNvbnN0IGNoYXIqKSB7IHJldHVybiAi TWFsbG9jX1QuY3BwLHYgNC44MiAyMDAxLzA2LzI1IDE1OjIwOjA0IG5hbmJvciBFeHAiIDsgfSBz dGF0aWMgY29uc3QgY2hhciogcmNzaWRfYWNlX01hbGxvY19UID0gZ2V0X3Jjc2lkX2FjZV9NYWxs b2NfVCAoIHJjc2lkX2FjZV9NYWxsb2NfVCApIDsKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBB Q0VfTE9DSz4KQUNFX0NhY2hlZF9BbGxvY2F0b3I8VCwgQUNFX0xPQ0s+OjpBQ0VfQ2FjaGVkX0Fs bG9jYXRvciAoc2l6ZV90IG5fY2h1bmtzKQogIDogcG9vbF8gKDApLAogICAgZnJlZV9saXN0XyAo MikKewogIGRvIHsgdHJ5IHsgdGhpcy0+cG9vbF8gPSBuZXcgY2hhcltuX2NodW5rcyAqIHNpemVv ZiAoVCldOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkp ID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKCgogIGZvciAoc2l6ZV90IGMgPSAwOwogICAg ICAgYyA8IG5fY2h1bmtzOwogICAgICAgYysrKQogICAgewogICAgICB2b2lkKiBwbGFjZW1lbnQg PSB0aGlzLT5wb29sXyArIGMgKiBzaXplb2YoVCk7CiAgICAgIHRoaXMtPmZyZWVfbGlzdF8uYWRk IChuZXcgKHBsYWNlbWVudCkgQUNFX0NhY2hlZF9NZW1fUG9vbF9Ob2RlPFQ+KTsKICAgIH0KCgp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQUNFX0xPQ0s+CkFDRV9DYWNoZWRfQWxsb2NhdG9y PFQsIEFDRV9MT0NLPjo6fkFDRV9DYWNoZWRfQWxsb2NhdG9yICh2b2lkKQp7CiAgZGVsZXRlIFtd IHRoaXMtPnBvb2xfOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBNQUxMT0M+IGludApBQ0VfQWxsb2Nh dG9yX0FkYXB0ZXI8TUFMTE9DPjo6cHJvdGVjdCAoc3NpemVfdCBsZW4sIGludCBmbGFncykKewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg cmV0dXJuIHRoaXMtPmFsbG9jYXRvcl8ucHJvdGVjdCAobGVuLCBmbGFncyk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBNQUxMT0M+IGludApBQ0VfQWxsb2NhdG9yX0FkYXB0ZXI8TUFMTE9DPjo6cHJvdGVj dCAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YWxs b2NhdG9yXy5wcm90ZWN0IChhZGRyLCBsZW4sIGZsYWdzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIE1B TExPQz4KQUNFX0FsbG9jYXRvcl9BZGFwdGVyPE1BTExPQz46OkFDRV9BbGxvY2F0b3JfQWRhcHRl ciAoY29uc3QgY2hhciAqcG9vbF9uYW1lKQogIDogYWxsb2NhdG9yXyAocG9vbF9uYW1lKQp7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwp9CiMgNzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9NYWxsb2NfVC5jcHAiCnRlbXBsYXRlIDxjbGFzcyBNQUxMT0M+CkFDRV9BbGxvY2F0 b3JfQWRhcHRlcjxNQUxMT0M+Ojp+QUNFX0FsbG9jYXRvcl9BZGFwdGVyICh2b2lkKQp7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKfQojIDkxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvTWFsbG9jX1QuY3BwIgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPiB2b2lkCkFDRV9BbGxv Y2F0b3JfQWRhcHRlcjxNQUxMT0M+OjpkdW1wICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT5hbGxvY2F0b3Jf LmR1bXAgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9D SywgY2xhc3MgQUNFX0NCPiB2b2lkCkFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9D SywgQUNFX0NCPjo6ZHVtcCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZG8geyBpbnQg X19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18g PSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmNwcCIs IDEwMywgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbj09PT1cbigl UHwldHwleCkiLCB0aGlzKTsgfSB3aGlsZSAoMCk7CiAgdGhpcy0+bWVtb3J5X3Bvb2xfLmR1bXAg KCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9M b2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0 aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L01hbGxvY19ULmNwcCIsIDEwNSwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVC VUcsICJjYl9wdHJfID0gJXgiLCB0aGlzLT5jYl9wdHJfKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBp bnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2Vf X18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmNw cCIsIDEwNiwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbiIpOyB9 IHdoaWxlICgwKTsKICB0aGlzLT5jYl9wdHJfLT5kdW1wICgpOwoKCgoKICBkbyB7IGludCBfX2Fj ZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFD RV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuY3BwIiwgMTEy LCAwLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgIj09PT1cbiIpOyB9IHdo aWxlICgwKTsKfQojIDE0NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL01hbGxvY19ULmNwcCIKdGVtcGxhdGU8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3Mg QUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gdm9pZApBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwg QUNFX0xPQ0ssIEFDRV9DQj46OmZyZWUgKHZvaWQgKnB0cikKewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBBQ0Vf R3VhcmQ8IEFDRV9MT0NLID4gYWNlX21vbiAodGhpcy0+bG9ja18pOyBpZiAoYWNlX21vbi5sb2Nr ZWQgKCkgPT0gMCkgcmV0dXJuOzsKCiAgdGhpcy0+c2hhcmVkX2ZyZWUgKHB0cik7Cn0KIyAxNjIg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5j cHAiCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3Mg QUNFX0NCPiBpbnQKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+ OjpvcGVuICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2Vf bW9uICh0aGlzLT5sb2NrXyk7IGlmIChhY2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gLTE7 OwoKICBzaXplX3Qgcm91bmRlZF9ieXRlcyA9IDA7CiAgaW50IGZpcnN0X3RpbWUgPSAwOwoKICB0 aGlzLT5jYl9wdHJfID0gKEFDRV9DQiAqKQogICAgdGhpcy0+bWVtb3J5X3Bvb2xfLmluaXRfYWNx dWlyZSAoc2l6ZW9mICp0aGlzLT5jYl9wdHJfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcm91bmRlZF9ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZpcnN0X3RpbWUpOwogIGlmICh0aGlzLT5jYl9wdHJfID09IDApCiAgICBkbyB7IGludCBf X2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9 IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuY3BwIiwg MTc2LCAtMSwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICIoJVB8JXQpICVw XG4iLCAiaW5pdF9hY3F1aXJlIGZhaWxlZCIpOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKCgog IGVsc2UgaWYgKGZpcnN0X3RpbWUpCiAgICB7CgoKICAgICAgTUFMTE9DX0hFQURFUjo6aW5pdF9w dHIgKCZ0aGlzLT5jYl9wdHJfLT5mcmVlcF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdGhpcy0+Y2JfcHRyXy0+YmFzZV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGlzLT5jYl9wdHJfKTsKCiAgICAgIE1BTExPQ19IRUFERVI6OmluaXRfcHRyICgmdGhpcy0+Y2Jf cHRyXy0+ZnJlZXBfLT5uZXh0X2Jsb2NrXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXMtPmNiX3B0cl8tPmZyZWVwXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo aXMtPmNiX3B0cl8pOwoKICAgICAgTkFNRV9OT0RFOjppbml0X3B0ciAoJnRoaXMtPmNiX3B0cl8t Pm5hbWVfaGVhZF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoaXMtPmNiX3B0cl8pOwoKICAgICAgdGhpcy0+Y2JfcHRyXy0+ZnJlZXBf LT5zaXplXyA9IDA7CiAgICAgIHRoaXMtPmNiX3B0cl8tPnJlZl9jb3VudGVyXyA9IDE7CgogICAg ICBpZiAocm91bmRlZF9ieXRlcyA+IChzaXplb2YgKnRoaXMtPmNiX3B0cl8gKyBzaXplb2YgKE1B TExPQ19IRUFERVIpKSkKICAgICAgICB7CgoKCiAgICAgICAgICBNQUxMT0NfSEVBREVSICpwID0g KChNQUxMT0NfSEVBREVSICopICh0aGlzLT5jYl9wdHJfLT5mcmVlcF8pKSArIDE7CgogICAgICAg ICAgTUFMTE9DX0hFQURFUjo6aW5pdF9wdHIgKCZwLT5uZXh0X2Jsb2NrXywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoaXMtPmNiX3B0cl8pOwojIDIxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmNwcCIKICAgICAgICAgIHAtPnNpemVfID0gKHJvdW5k ZWRfYnl0ZXMgLSBzaXplb2YgKnRoaXMtPmNiX3B0cl8pCiAgICAgICAgICAgIC8gc2l6ZW9mIChN QUxMT0NfSEVBREVSKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK CgogICAgICAgICAgdGhpcy0+c2hhcmVkX2ZyZWUgKHAgKyAxKTsKICAgICAgICB9CiAgICB9CiAg ZWxzZQogICAgKyt0aGlzLT5jYl9wdHJfLT5yZWZfY291bnRlcl87CiAgcmV0dXJuIDA7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NC PgpBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OkFDRV9NYWxs b2NfVCAoY29uc3QgQUNFX1RDSEFSICpwb29sX25hbWUpCiAgOiBtZW1vcnlfcG9vbF8gKHBvb2xf bmFtZSksCiAgICBsb2NrXyAocG9vbF9uYW1lID09IDAgPyAwIDogQUNFOjpiYXNlbmFtZSAocG9v bF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcv JykpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAodGhpcy0+b3BlbiAoKSA9PSAtMSkKICAg IGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01z ZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFs X3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxs b2NfVC5jcHAiLCAyNDUsIC0xLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwg IiVwXG4iLCAiQUNFX01hbGxvY19UPEFDRV9NRU1fUE9PTF8yLCBBQ0VfTE9DSywgQUNFX0NCPjo6 QUNFX01hbGxvY19UIik7IH0gd2hpbGUgKDApOwoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01F TV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPgpBQ0VfTWFsbG9jX1Q8X0FDRV9N RU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OkFDRV9NYWxsb2NfVCAoY29uc3QgQUNFX1RDSEFS ICpwb29sX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpsb2NrX25hbWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dHlwZW5hbWUgX0FDRV9NRU1fUE9PTDo6T1BUSU9OUyAqb3B0aW9ucykKICA6IG1lbW9yeV9wb29s XyAocG9vbF9uYW1lLCBvcHRpb25zKSwKICAgIGxvY2tfIChsb2NrX25hbWUgIT0gMCA/IGxvY2tf bmFtZSA6IEFDRTo6YmFzZW5hbWUgKHBvb2xfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJykpCnsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICBpZiAodGhpcy0+b3BlbiAoKSA9PSAtMSkKICAgIGRvIHsgaW50IF9fYWNlX2Vycm9yID0g QUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6 Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiLCAyNjAsIC0xLCBfX2Fj ZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIiVwXG4iLCAiQUNFX01hbGxvY19UPEFD RV9NRU1fUE9PTF8yLCBBQ0VfTE9DSywgQUNFX0NCPjo6QUNFX01hbGxvY19UIik7IH0gd2hpbGUg KDApOwoKCn0KIyAyODMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9NYWxsb2NfVC5jcHAiCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBB Q0VfTE9DSywgY2xhc3MgQUNFX0NCPgpBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xP Q0ssIEFDRV9DQj46On5BQ0VfTWFsbG9jX1QgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKCnRlbXBsYXRl IDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiBpbnQK QUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpyZW1vdmUgKHZv aWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgaW50IHJlc3VsdCA9IDA7CgoKCgoKCiAgdGhpcy0+bG9j a18ucmVtb3ZlICgpOwoKCiAgcmVzdWx0ID0gdGhpcy0+bWVtb3J5X3Bvb2xfLnJlbGVhc2UgKCk7 CgoKCgoKCgogIHRoaXMtPmNiX3B0cl8gPSAwOwoKICByZXR1cm4gcmVzdWx0Owp9CgoKCnRlbXBs YXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiB2 b2lkICoKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpzaGFy ZWRfbWFsbG9jIChzaXplX3QgbmJ5dGVzKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlm ICh0aGlzLT5jYl9wdHJfID09IDApCiAgICByZXR1cm4gMDsKCgogIHNpemVfdCBudW5pdHMgPQog ICAgKG5ieXRlcyArIHNpemVvZiAoTUFMTE9DX0hFQURFUikgLSAxKSAvIHNpemVvZiAoTUFMTE9D X0hFQURFUikKICAgICsgMTsKCiAgTUFMTE9DX0hFQURFUiAqcHJldnAgPSAwOwogIE1BTExPQ19I RUFERVIgKmN1cnJwID0gMDsKCiAgaWYgKDEpCiAgICB7CgoKICAgICAgcHJldnAgPSB0aGlzLT5j Yl9wdHJfLT5mcmVlcF87CiAgICAgIGN1cnJwID0gcHJldnAtPm5leHRfYmxvY2tfOwogICAgfQoj IDM1NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxv Y19ULmNwcCIKICB3aGlsZSAoMSkKCgoKICAgIHsKICAgICAgaWYgKDEpCiAgICAgICAgewogICAg ICAgICAgaWYgKGN1cnJwLT5zaXplXyA+PSBudW5pdHMpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgaWYgKGN1cnJwLT5zaXplXyA9PSBudW5pdHMpCgogICAgICAg ICAgICAgICAgcHJldnAtPm5leHRfYmxvY2tfID0gY3VycnAtPm5leHRfYmxvY2tfOwogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICBjdXJycC0+c2l6ZV8gLT0gbnVuaXRzOwogICAgICAgICAgICAgICAgICBj dXJycCArPSBjdXJycC0+c2l6ZV87CiAgICAgICAgICAgICAgICAgIE1BTExPQ19IRUFERVI6Omlu aXRfcHRyICgmY3VycnAtPm5leHRfYmxvY2tfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoaXMtPmNiX3B0cl8pOwogICAgICAgICAgICAgICAgICBjdXJycC0+c2l6ZV8gPSBudW5p dHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy0+Y2JfcHRyXy0+ZnJlZXBf ID0gcHJldnA7CgoKICAgICAgICAgICAgICByZXR1cm4gY3VycnAgKyAxOwogICAgICAgICAgICB9 CiAgICAgICAgICBlbHNlIGlmIChjdXJycCA9PSB0aGlzLT5jYl9wdHJfLT5mcmVlcF8pCiAgICAg ICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgc2l6ZV90IGNodW5rX2J5dGVzID0gMDsKCiAgICAg ICAgICAgICAgY3VycnAgPSAoTUFMTE9DX0hFQURFUiAqKQogICAgICAgICAgICAgICAgdGhpcy0+ bWVtb3J5X3Bvb2xfLmFjcXVpcmUgKG51bml0cyAqIHNpemVvZiAoTUFMTE9DX0hFQURFUiksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfYnl0ZXMpOwog ICAgICAgICAgICAgIGlmIChjdXJycCAhPSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg ICAgICAgICAgICAgICBNQUxMT0NfSEVBREVSOjppbml0X3B0ciAoJmN1cnJwLT5uZXh0X2Jsb2Nr XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5jYl9wdHJfKTsKCiAgICAg ICAgICAgICAgICAgIGN1cnJwLT5zaXplXyA9IGNodW5rX2J5dGVzIC8gc2l6ZW9mIChNQUxMT0Nf SEVBREVSKTsKCgoKCgoKICAgICAgICAgICAgICAgICAgdGhpcy0+c2hhcmVkX2ZyZWUgKGN1cnJw ICsgMSk7CiAgICAgICAgICAgICAgICAgIGN1cnJwID0gdGhpcy0+Y2JfcHRyXy0+ZnJlZXBfOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVy biAwOwojIDQyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L01hbGxvY19ULmNwcCIKICAgICAgICAgICAgfQogICAgICAgICAgcHJldnAgPSBjdXJycDsKICAg ICAgICAgIGN1cnJwID0gY3VycnAtPm5leHRfYmxvY2tfOwogICAgICAgIH0KICAgICAgd2hpbGUg KDApCiAgICAgICAgewogICAgICAgIH0KICAgIH0KICByZXR1cm4gMDsKfQoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gdm9pZCAq CkFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6bWFsbG9jIChz aXplX3QgbmJ5dGVzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgQUNFX0d1YXJkPCBBQ0VfTE9DSyA+IGFj ZV9tb24gKHRoaXMtPmxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVybiAw OzsKCiAgcmV0dXJuIHRoaXMtPnNoYXJlZF9tYWxsb2MgKG5ieXRlcyk7Cn0KCgoKdGVtcGxhdGUg PGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IHZvaWQg KgpBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OmNhbGxvYyAo c2l6ZV90IG5ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyIGluaXRpYWxfdmFsdWUpCnsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB2b2lk ICpwdHIgPSB0aGlzLT5tYWxsb2MgKG5ieXRlcyk7CgogIGlmIChwdHIgIT0gMCkKICAgIEFDRV9P Uzo6bWVtc2V0IChwdHIsIGluaXRpYWxfdmFsdWUsIG5ieXRlcyk7CgogIHJldHVybiBwdHI7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNF X0NCPiB2b2lkICoKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+ OjpjYWxsb2MgKHNpemVfdCBuX2VsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGluaXRpYWxfdmFs dWUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIHRoaXMtPmNhbGxvYyAobl9lbGVtICogZWxl bV9zaXplLCBpbml0aWFsX3ZhbHVlKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9P TCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gdm9pZApBQ0VfTWFsbG9jX1Q8X0FDRV9N RU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OnNoYXJlZF9mcmVlICh2b2lkICphcCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKCiAgaWYgKGFwID09IDAgfHwgdGhpcy0+Y2JfcHRyXyA9PSAwKQog ICAgcmV0dXJuOwoKCgogIE1BTExPQ19IRUFERVIgKmJsb2NrcCA9ICgoTUFMTE9DX0hFQURFUiAq KSBhcCkgLSAxOwogIE1BTExPQ19IRUFERVIgKmN1cnJwID0gdGhpcy0+Y2JfcHRyXy0+ZnJlZXBf OwoKCgoKICBpZiAoMSkKICAgIHsKICAgICAgZm9yICg7CiAgICAgICAgICAgYmxvY2twIDw9IGN1 cnJwCiAgICAgICAgICAgICB8fCBibG9ja3AgPj0gKE1BTExPQ19IRUFERVIgKikgY3VycnAtPm5l eHRfYmxvY2tfOwogICAgICAgICAgIGN1cnJwID0gY3VycnAtPm5leHRfYmxvY2tfKQogICAgICAg IHsKICAgICAgICAgIGlmIChjdXJycCA+PSAoTUFMTE9DX0hFQURFUiAqKSBjdXJycC0+bmV4dF9i bG9ja18KICAgICAgICAgICAgICAmJiAoYmxvY2twID4gY3VycnAKICAgICAgICAgICAgICAgICAg fHwgYmxvY2twIDwgKE1BTExPQ19IRUFERVIgKikgY3VycnAtPm5leHRfYmxvY2tfKSkKCiAgICAg ICAgICAgIGJyZWFrOwogICAgICAgIH0KCgogICAgICBpZiAoKGJsb2NrcCArIGJsb2NrcC0+c2l6 ZV8pID09IGN1cnJwLT5uZXh0X2Jsb2NrXykKICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgYmxvY2twLT5zaXplXyArPSBjdXJycC0+bmV4dF9ibG9ja18tPnNpemVfOwogICAgICAgICAg YmxvY2twLT5uZXh0X2Jsb2NrXyA9IGN1cnJwLT5uZXh0X2Jsb2NrXy0+bmV4dF9ibG9ja187CiAg ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgYmxvY2twLT5uZXh0X2Jsb2NrXyA9IGN1cnJwLT5u ZXh0X2Jsb2NrXzsKCgogICAgICBpZiAoKGN1cnJwICsgY3VycnAtPnNpemVfKSA9PSBibG9ja3Ap CiAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgIGN1cnJwLT5zaXplXyArPSBibG9ja3At PnNpemVfOwogICAgICAgICAgY3VycnAtPm5leHRfYmxvY2tfID0gYmxvY2twLT5uZXh0X2Jsb2Nr XzsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBjdXJycC0+bmV4dF9ibG9ja18gPSBibG9j a3A7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgIHRoaXMtPmNiX3B0cl8tPmZyZWVwXyA9IGN1cnJwOwogICAgfQog IHdoaWxlICgwKQogICAgewogICAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09M LCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiB2b2lkKgpBQ0VfTWFsbG9jX1Q8X0FDRV9N RU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OnNoYXJlZF9maW5kIChjb25zdCBjaGFyICpuYW1l KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAodGhpcy0+Y2JfcHRyXyA9PSAwKQogICAg cmV0dXJuIDA7CgogIGlmICgxKQogICAgewogICAgICBmb3IgKE5BTUVfTk9ERSAqbm9kZSA9IHRo aXMtPmNiX3B0cl8tPm5hbWVfaGVhZF87CiAgICAgICAgICAgbm9kZSAhPSAwOwogICAgICAgICAg IG5vZGUgPSBub2RlLT5uZXh0XykKICAgICAgICBpZiAoQUNFX09TOjpzdHJjbXAgKG5vZGUtPm5h bWUgKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKSA9PSAwKQogICAgICAgICAg cmV0dXJuIG5vZGU7CiAgICB9CiAgd2hpbGUgKDApCiAgICB7CiAgICB9CiAgcmV0dXJuIDA7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNF X0NCPiBpbnQKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+Ojpz aGFyZWRfYmluZCAoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBvaW50ZXIpCnsKICBpZiAo dGhpcy0+Y2JfcHRyXyA9PSAwKQogICAgcmV0dXJuIC0xOwoKCiAgTkFNRV9OT0RFICpuZXdfbm9k ZSA9IDA7CgogIGRvIHsgbmV3X25vZGUgPSAoTkFNRV9OT0RFICopIHRoaXMtPnNoYXJlZF9tYWxs b2MgKHNpemVvZiAoTkFNRV9OT0RFKSArIEFDRV9PUzo6c3RybGVuIChuYW1lKSArIDEpOyBpZiAo bmV3X25vZGUgPT0gMCkgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAtMTsg fSB9IHdoaWxlICgwKTsKCgoKCiAgY2hhciAqbmFtZV9wdHIgPSAoY2hhciAqKSAobmV3X25vZGUg KyAxKTsKCgoKICBOQU1FX05PREUgKnJlc3VsdCA9CiAgICBuZXcgKG5ld19ub2RlKSBOQU1FX05P REUgKG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIgKj4gKHBvaW50ZXIp LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Y2JfcHRyXy0+bmFtZV9oZWFk Xyk7CiAgdGhpcy0+Y2JfcHRyXy0+bmFtZV9oZWFkXyA9IHJlc3VsdDsKICByZXR1cm4gMDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0Vf Q0I+IGludApBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OnRy eWJpbmQgKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiZwb2ludGVyKQp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogIEFDRV9Xcml0ZV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICh0aGlzLT5sb2NrXyk7IGlm IChhY2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gLTE7OwoKICBOQU1FX05PREUgKm5vZGUg PSAoTkFNRV9OT0RFICopIHRoaXMtPnNoYXJlZF9maW5kIChuYW1lKTsKCiAgaWYgKG5vZGUgPT0g MCkKCiAgICByZXR1cm4gdGhpcy0+c2hhcmVkX2JpbmQgKG5hbWUsIHBvaW50ZXIpOwoKCiAgcG9p bnRlciA9IChjaGFyICopIG5vZGUtPnBvaW50ZXJfOwogIHJldHVybiAxOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gaW50CkFD RV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6YmluZCAoY29uc3Qg Y2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqcG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGR1cGxpY2F0ZXMpCnsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgQUNF X1dyaXRlX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24gKHRoaXMtPmxvY2tfKTsgaWYgKGFjZV9t b24ubG9ja2VkICgpID09IDApIHJldHVybiAtMTs7CgogIGlmIChkdXBsaWNhdGVzID09IDAgJiYg dGhpcy0+c2hhcmVkX2ZpbmQgKG5hbWUpICE9IDApCgoKICAgIHJldHVybiAxOwoKCgogIHJldHVy biB0aGlzLT5zaGFyZWRfYmluZCAobmFtZSwgcG9pbnRlcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf QUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiBpbnQKQUNFX01hbGxv Y19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpmaW5kIChjb25zdCBjaGFyICpu YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqJnBvaW50ZXIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIEFDRV9SZWFkX0d1YXJkPCBBQ0VfTE9D SyA+IGFjZV9tb24gKHRoaXMtPmxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJl dHVybiAtMTs7CgogIE5BTUVfTk9ERSAqbm9kZSA9IChOQU1FX05PREUgKikgdGhpcy0+c2hhcmVk X2ZpbmQgKG5hbWUpOwoKICBpZiAobm9kZSA9PSAwKQogICAgcmV0dXJuIC0xOwoKICBwb2ludGVy ID0gKGNoYXIgKikgbm9kZS0+cG9pbnRlcl87CiAgcmV0dXJuIDA7Cn0KIyA2NTQgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiCnRlbXBs YXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiBz c2l6ZV90CkFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6YXZh aWxfY2h1bmtzIChzaXplX3Qgc2l6ZSkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIEFD RV9SZWFkX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24gKChBQ0VfTE9DSyAmKSB0aGlzLT5sb2Nr Xyk7IGlmIChhY2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gLTE7OwoKICBpZiAodGhpcy0+ Y2JfcHRyXyA9PSAwKQogICAgcmV0dXJuIC0xOwoKICBzaXplX3QgY291bnQgPSAwOwoKICBzaXpl ID0gc2l6ZSA9PSAwID8gMSA6IHNpemU7CiAgTUFMTE9DX0hFQURFUiAqY3VycnAgPSB0aGlzLT5j Yl9wdHJfLT5mcmVlcF87CgoKICBkbyB7CiAgICBzaXplX3QgYXZhaWxfc2l6ZSA9IGN1cnJwLT5z aXplXyA9PSAwID8gMCA6IGN1cnJwLT5zaXplXyAtIDE7CiAgICBpZiAoYXZhaWxfc2l6ZSAqIHNp emVvZiAoTUFMTE9DX0hFQURFUikgPj0gc2l6ZSkKICAgICAgY291bnQgKz0gYXZhaWxfc2l6ZSAq IHNpemVvZiAoTUFMTE9DX0hFQURFUikgLyBzaXplOwogICAgY3VycnAgPSBjdXJycC0+bmV4dF9i bG9ja187CiAgfQogIHdoaWxlIChjdXJycCAhPSB0aGlzLT5jYl9wdHJfLT5mcmVlcF8pOwoKICBy ZXR1cm4gY291bnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0Vf TE9DSywgY2xhc3MgQUNFX0NCPiBpbnQKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9M T0NLLCBBQ0VfQ0I+OjpmaW5kIChjb25zdCBjaGFyICpuYW1lKQp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIEFD RV9SZWFkX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24gKHRoaXMtPmxvY2tfKTsgaWYgKGFjZV9t b24ubG9ja2VkICgpID09IDApIHJldHVybiAtMTs7CgogIHJldHVybiB0aGlzLT5zaGFyZWRfZmlu ZCAobmFtZSkgPT0gMCA/IC0xIDogMDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0ws IGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGludApBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1f UE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OnVuYmluZCAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq JnBvaW50ZXIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBBQ0VfV3JpdGVfR3VhcmQ8IEFDRV9MT0NLID4g YWNlX21vbiAodGhpcy0+bG9ja18pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJu IC0xOzsKCiAgaWYgKHRoaXMtPmNiX3B0cl8gPT0gMCkKICAgIHJldHVybiAtMTsKCiAgTkFNRV9O T0RFICpwcmV2ID0gMDsKCiAgZm9yIChOQU1FX05PREUgKmN1cnIgPSB0aGlzLT5jYl9wdHJfLT5u YW1lX2hlYWRfOwogICAgICAgY3VyciAhPSAwOwogICAgICAgY3VyciA9IGN1cnItPm5leHRfKQog ICAgewogICAgICBpZiAoQUNFX09TOjpzdHJjbXAgKGN1cnItPm5hbWUgKCksIG5hbWUpID09IDAp CiAgICAgICAgewogICAgICAgICAgcG9pbnRlciA9IChjaGFyICopIGN1cnItPnBvaW50ZXJfOwoK ICAgICAgICAgIGlmIChwcmV2ID09IDApCiAgICAgICAgICAgIHRoaXMtPmNiX3B0cl8tPm5hbWVf aGVhZF8gPSBjdXJyLT5uZXh0XzsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcHJldi0+bmV4 dF8gPSBjdXJyLT5uZXh0XzsKCiAgICAgICAgICBpZiAoY3Vyci0+bmV4dF8pCiAgICAgICAgICAg IGN1cnItPm5leHRfLT5wcmV2XyA9IHByZXY7CgoKCiAgICAgICAgICB0aGlzLT5zaGFyZWRfZnJl ZSAoY3Vycik7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgIHByZXYgPSBjdXJy OwogICAgfQoKCiAgcmV0dXJuIC0xOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwg Y2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gaW50CkFDRV9NYWxsb2NfVDxfQUNFX01FTV9Q T09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6dW5iaW5kIChjb25zdCBjaGFyICpuYW1lKQp7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgdm9pZCAqdGVtcCA9IDA7CiAgcmV0dXJuIHRoaXMtPnVuYmluZCAobmFtZSwg dGVtcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywg Y2xhc3MgQUNFX0NCPiB2b2lkCkFDRV9NYWxsb2NfTElGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BP T0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpkdW1wICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9y ICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2Vf X18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiLCA3NDEsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5s b2cgKExNX0RFQlVHLCAiXG49PT09XG4oJVB8JXR8JXgpIiwgdGhpcyk7IH0gd2hpbGUgKDApOwog IHRoaXMtPmN1cnJfLT5kdW1wICgpOwogIHRoaXMtPmd1YXJkXy5kdW1wICgpOwogIGRvIHsgaW50 IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAi LCA3NDQsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAibmFtZV8gPSAl cyIsIHRoaXMtPm5hbWVfKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBB Q0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6 aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmNwcCIsIDc0NSwgMCwgX19hY2Vf ZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbiIpOyB9IHdoaWxlICgwKTsKICBkbyB7 IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFj ZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQg KCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1Qu Y3BwIiwgNzQ2LCAwLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgIj09PT1c biIpOyB9IHdoaWxlICgwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNz IEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+CkFDRV9NYWxsb2NfTElGT19JdGVyYXRvcl9UPF9BQ0Vf TUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpBQ0VfTWFsbG9jX0xJRk9fSXRlcmF0b3JfVCAo QUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+ICZtYWxsb2MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkKICA6IG1hbGxvY18g KG1hbGxvYyksCiAgICBjdXJyXyAoMCksCiAgICBndWFyZF8gKG1hbGxvY18ubG9ja18pLAogICAg bmFtZV8gKG5hbWUgIT0gMCA/IEFDRV9PUzo6c3RyZHVwIChuYW1lKSA6IDApCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBOQU1FX05PREUgdGVt cDsKICB0aGlzLT5jdXJyXyA9ICZ0ZW1wOwogIHRoaXMtPmN1cnJfLT5uZXh0XyA9IG1hbGxvY18u Y2JfcHRyXy0+bmFtZV9oZWFkXzsKCiAgdGhpcy0+YWR2YW5jZSAoKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+CkFDRV9NYWxs b2NfTElGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+Ojp+QUNF X01hbGxvY19MSUZPX0l0ZXJhdG9yX1QgKHZvaWQpCnsKICBBQ0VfT1M6OmZyZWUgKCh2b2lkICop IHRoaXMtPm5hbWVfKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFD RV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGludApBQ0VfTWFsbG9jX0xJRk9fSXRlcmF0b3JfVDxfQUNF X01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6bmV4dCAodm9pZCAqJm5leHRfZW50cnksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqJm5hbWUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgaWYgKHRoaXMtPmN1cnJfICE9IDApCiAgICB7CiAgICAgIG5leHRfZW50cnkgPSAoY2hhciAq KSB0aGlzLT5jdXJyXy0+cG9pbnRlcl87CiAgICAgIG5hbWUgPSB0aGlzLT5jdXJyXy0+bmFtZSAo KTsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiBpbnQK QUNFX01hbGxvY19MSUZPX0l0ZXJhdG9yX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9D Qj46Om5leHQgKHZvaWQgKiZuZXh0X2VudHJ5KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgogIGlmICh0aGlzLT5jdXJyXyAhPSAwKQogICAgewogICAgICBuZXh0X2VudHJ5ID0gdGhpcy0+ Y3Vycl8tPnBvaW50ZXJfOwogICAgICByZXR1cm4gMTsKICAgIH0KICBlbHNlCiAgICByZXR1cm4g MDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFz cyBBQ0VfQ0I+IGludApBQ0VfTWFsbG9jX0xJRk9fSXRlcmF0b3JfVDxfQUNFX01FTV9QT09MLCBB Q0VfTE9DSywgQUNFX0NCPjo6ZG9uZSAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICByZXR1cm4gdGhpcy0+Y3Vycl8gPT0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9B Q0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGludApBQ0VfTWFsbG9j X0xJRk9fSXRlcmF0b3JfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6YWR2YW5j ZSAodm9pZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0aGlzLT5jdXJyXyA9 IHRoaXMtPmN1cnJfLT5uZXh0XzsKCiAgaWYgKHRoaXMtPm5hbWVfID09IDApCiAgICByZXR1cm4g dGhpcy0+Y3Vycl8gIT0gMDsKCiAgd2hpbGUgKHRoaXMtPmN1cnJfICE9IDAKICAgICAgICAgJiYg QUNFX09TOjpzdHJjbXAgKHRoaXMtPm5hbWVfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg dGhpcy0+Y3Vycl8tPm5hbWUgKCkpICE9IDApCiAgICB0aGlzLT5jdXJyXyA9IHRoaXMtPmN1cnJf LT5uZXh0XzsKCiAgcmV0dXJuIHRoaXMtPmN1cnJfICE9IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf QUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiB2b2lkCkFDRV9NYWxs b2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpkdW1w ICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGRvIHsgaW50IF9f YWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0g QUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiLCA4 MzQsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiXG49PT09XG4oJVB8 JXR8JXgpIiwgdGhpcyk7IH0gd2hpbGUgKDApOwogIHRoaXMtPmN1cnJfLT5kdW1wICgpOwogIHRo aXMtPmd1YXJkXy5kdW1wICgpOwogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0 X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgp OyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiLCA4MzcsIDAsIF9fYWNlX2Vycm9yKTsgYWNl X19fLT5sb2cgKExNX0RFQlVHLCAibmFtZV8gPSAlcyIsIHRoaXMtPm5hbWVfKTsgfSB3aGlsZSAo MCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9M b2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0 aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L01hbGxvY19ULmNwcCIsIDgzOCwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVC VUcsICJcbiIpOyB9IHdoaWxlICgwKTsKICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6 bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j ZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuY3BwIiwgODM5LCAwLCBfX2FjZV9lcnJvcik7 IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgIj09PT1cbiIpOyB9IHdoaWxlICgwKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+CkFD RV9NYWxsb2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+ OjpBQ0VfTWFsbG9jX0ZJRk9fSXRlcmF0b3JfVCAoQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0ws IEFDRV9MT0NLLCBBQ0VfQ0I+ICZtYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqbmFtZSkKICA6IG1hbGxvY18gKG1hbGxvYyksCiAgICBjdXJyXyAoMCksCiAg ICBndWFyZF8gKG1hbGxvY18ubG9ja18pLAogICAgbmFtZV8gKG5hbWUgIT0gMCA/IEFDRV9PUzo6 c3RyZHVwIChuYW1lKSA6IDApCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCiAgTkFNRV9OT0RFIHRlbXA7CiAgdGhpcy0+Y3Vycl8gPSAmdGVtcDsKICB0 aGlzLT5jdXJyXy0+bmV4dF8gPSBtYWxsb2NfLmNiX3B0cl8tPm5hbWVfaGVhZF87CiAgdGhpcy0+ Y3Vycl8tPnByZXZfID0gMDsKCgogIHRoaXMtPnN0YXJ0ICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4KQUNFX01hbGxvY19G SUZPX0l0ZXJhdG9yX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46On5BQ0VfTWFs bG9jX0ZJRk9fSXRlcmF0b3JfVCAodm9pZCkKewogIEFDRV9PUzo6ZnJlZSAoKHZvaWQgKikgdGhp cy0+bmFtZV8pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xP Q0ssIGNsYXNzIEFDRV9DQj4gaW50CkFDRV9NYWxsb2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVN X1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpuZXh0ICh2b2lkICombmV4dF9lbnRyeSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICombmFtZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBp ZiAodGhpcy0+Y3Vycl8gIT0gMCkKICAgIHsKICAgICAgbmV4dF9lbnRyeSA9IChjaGFyICopIHRo aXMtPmN1cnJfLT5wb2ludGVyXzsKICAgICAgbmFtZSA9IHRoaXMtPmN1cnJfLT5uYW1lICgpOwog ICAgICByZXR1cm4gMTsKICAgIH0KICBlbHNlCiAgICByZXR1cm4gMDsKfQoKdGVtcGxhdGUgPGNs YXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGludApBQ0Vf TWFsbG9jX0ZJRk9fSXRlcmF0b3JfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6 bmV4dCAodm9pZCAqJm5leHRfZW50cnkpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg aWYgKHRoaXMtPmN1cnJfICE9IDApCiAgICB7CiAgICAgIG5leHRfZW50cnkgPSB0aGlzLT5jdXJy Xy0+cG9pbnRlcl87CiAgICAgIHJldHVybiAxOwogICAgfQogIGVsc2UKICAgIHJldHVybiAwOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFD RV9DQj4gaW50CkFDRV9NYWxsb2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9M T0NLLCBBQ0VfQ0I+Ojpkb25lICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgogIHJldHVybiB0aGlzLT5jdXJyXyA9PSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9N RU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gaW50CkFDRV9NYWxsb2NfRklG T19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjphZHZhbmNlICh2 b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHRoaXMtPmN1cnJfID0gdGhp cy0+Y3Vycl8tPnByZXZfOwoKICBpZiAodGhpcy0+bmFtZV8gPT0gMCkKICAgIHJldHVybiB0aGlz LT5jdXJyXyAhPSAwOwoKICB3aGlsZSAodGhpcy0+Y3Vycl8gIT0gMAogICAgICAgICAmJiBBQ0Vf T1M6OnN0cmNtcCAodGhpcy0+bmFtZV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz LT5jdXJyXy0+bmFtZSAoKSkgIT0gMCkKICAgIHRoaXMtPmN1cnJfID0gdGhpcy0+Y3Vycl8tPnBy ZXZfOwoKICByZXR1cm4gdGhpcy0+Y3Vycl8gIT0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0Vf TUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGludApBQ0VfTWFsbG9jX0ZJ Rk9fSXRlcmF0b3JfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6c3RhcnQgKHZv aWQpCnsKICB0aGlzLT5jdXJyXyA9IHRoaXMtPmN1cnJfLT5uZXh0XzsKICBOQU1FX05PREUgKnBy ZXYgPSAwOwoKCgoKICB3aGlsZSAodGhpcy0+Y3Vycl8gIT0gMCkKICAgIHsKICAgICAgcHJldiA9 IHRoaXMtPmN1cnJfOwogICAgICB0aGlzLT5jdXJyXyA9IHRoaXMtPmN1cnJfLT5uZXh0XzsKICAg IH0KCiAgdGhpcy0+Y3Vycl8gPSBwcmV2OwogIHJldHVybiB0aGlzLT5jdXJyXyAhPSAwOwp9CiMg NzIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9j X1QuaCIgMgoKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9wb3N0LmgiIDEKIyA3MzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5oIiAyCiMgNDExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIgMQojIDE1ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIK IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgi IDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01l bW9yeV9Qb29sLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL0FDRS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9NZW1vcnlfUG9vbC5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRXZlbnRfSGFuZGxlci5oIiAxCiMgMTYgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9FdmVudF9IYW5kbGVy LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3By ZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9FdmVudF9IYW5kbGVyLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9FdmVudF9IYW5kbGVyLmgiIDIKCgoKCgoKY2xhc3MgQUNFX01l c3NhZ2VfQmxvY2s7CmNsYXNzIEFDRV9SZWFjdG9yOwpjbGFzcyBBQ0VfVGhyZWFkX01hbmFnZXI7 CmNsYXNzIEFDRV9Qcm9jZXNzOwoKdHlwZWRlZiB1X2xvbmcgQUNFX1JlYWN0b3JfTWFzazsKIyA0 MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0V2ZW50X0hh bmRsZXIuaCIKY2xhc3MgQUNFX0V2ZW50X0hhbmRsZXIKewpwdWJsaWM6CiAgZW51bQogIHsKICAg IExPX1BSSU9SSVRZID0gMCwKICAgIEhJX1BSSU9SSVRZID0gMTAsCiAgICBOVUxMX01BU0sgPSAw LAoKCgoKCiAgICBSRUFEX01BU0sgPSAoMSA8PCAwKSwKICAgIFdSSVRFX01BU0sgPSAoMSA8PCAx KSwKICAgIEVYQ0VQVF9NQVNLID0gKDEgPDwgMiksCgogICAgQUNDRVBUX01BU0sgPSAoMSA8PCAz KSwKICAgIENPTk5FQ1RfTUFTSyA9ICgxIDw8IDQpLAogICAgVElNRVJfTUFTSyA9ICgxIDw8IDUp LAogICAgUU9TX01BU0sgPSAoMSA8PCA2KSwKICAgIEdST1VQX1FPU19NQVNLID0gKDEgPDwgNyks CiAgICBTSUdOQUxfTUFTSyA9ICgxIDw8IDgpLAogICAgQUxMX0VWRU5UU19NQVNLID0gUkVBRF9N QVNLIHwKICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX01BU0sgfAogICAgICAgICAgICAgICAg ICAgICAgRVhDRVBUX01BU0sgfAogICAgICAgICAgICAgICAgICAgICAgQUNDRVBUX01BU0sgfAog ICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVF9NQVNLIHwKICAgICAgICAgICAgICAgICAgICAg IFRJTUVSX01BU0sgfAogICAgICAgICAgICAgICAgICAgICAgUU9TX01BU0sgfAogICAgICAgICAg ICAgICAgICAgICAgR1JPVVBfUU9TX01BU0sgfAogICAgICAgICAgICAgICAgICAgICAgU0lHTkFM X01BU0ssCiAgICBSV0VfTUFTSyA9IFJFQURfTUFTSyB8CiAgICAgICAgICAgICAgIFdSSVRFX01B U0sgfAogICAgICAgICAgICAgICBFWENFUFRfTUFTSywKICAgIERPTlRfQ0FMTCA9ICgxIDw8IDkp CiAgfTsKCgogIHZpcnR1YWwgfkFDRV9FdmVudF9IYW5kbGVyICh2b2lkKTsKCgoKICB2aXJ0dWFs IEFDRV9IQU5ETEUgZ2V0X2hhbmRsZSAodm9pZCkgY29uc3Q7CiAgdmlydHVhbCB2b2lkIHNldF9o YW5kbGUgKEFDRV9IQU5ETEUpOwoKCgoKCgoKICB2aXJ0dWFsIGludCBwcmlvcml0eSAodm9pZCkg Y29uc3Q7CiAgdmlydHVhbCB2b2lkIHByaW9yaXR5IChpbnQgcHJpb3JpdHkpOwoKCiAgdmlydHVh bCBpbnQgaGFuZGxlX2lucHV0IChBQ0VfSEFORExFIGZkID0gLTEpOwoKCgogIHZpcnR1YWwgaW50 IGhhbmRsZV9vdXRwdXQgKEFDRV9IQU5ETEUgZmQgPSAtMSk7CgoKICB2aXJ0dWFsIGludCBoYW5k bGVfZXhjZXB0aW9uIChBQ0VfSEFORExFIGZkID0gLTEpOwoKCgoKCgoKICB2aXJ0dWFsIGludCBo YW5kbGVfdGltZW91dCAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJmN1cnJlbnRfdGltZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYWN0ID0gMCk7CgoKICB2aXJ0dWFs IGludCBoYW5kbGVfZXhpdCAoQUNFX1Byb2Nlc3MgKik7CgoKCgoKICB2aXJ0dWFsIGludCBoYW5k bGVfY2xvc2UgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg QUNFX1JlYWN0b3JfTWFzayBjbG9zZV9tYXNrKTsKCgoKICB2aXJ0dWFsIGludCBoYW5kbGVfc2ln bmFsIChpbnQgc2lnbnVtLCBzaWdpbmZvX3QgKiA9IDAsIHVjb250ZXh0X3QgKiA9IDApOwoKCgoK CgoKICB2aXJ0dWFsIGludCByZXN1bWVfaGFuZGxlciAodm9pZCk7CgogIHZpcnR1YWwgaW50IGhh bmRsZV9xb3MgKEFDRV9IQU5ETEUgPSAtMSk7CiAgdmlydHVhbCBpbnQgaGFuZGxlX2dyb3VwX3Fv cyAoQUNFX0hBTkRMRSA9IC0xKTsKCgogIHZpcnR1YWwgdm9pZCByZWFjdG9yIChBQ0VfUmVhY3Rv ciAqcmVhY3Rvcik7CiAgdmlydHVhbCBBQ0VfUmVhY3RvciAqcmVhY3RvciAodm9pZCkgY29uc3Q7 CiMgMTU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRXZl bnRfSGFuZGxlci5oIgogIHN0YXRpYyB2b2lkICpyZWFkX2FkYXB0ZXIgKHZvaWQgKmV2ZW50X2hh bmRsZXIpOwoKCgoKCgogIHN0YXRpYyBpbnQgcmVnaXN0ZXJfc3RkaW5faGFuZGxlciAoQUNFX0V2 ZW50X0hhbmRsZXIgKmVoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNF X1JlYWN0b3IgKnJlYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Q0VfVGhyZWFkX01hbmFnZXIgKnRocl9tZ3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgZmxhZ3MgPSAweDAwMDAwMDQwKTsKCgogIHN0YXRpYyBpbnQgcmVtb3ZlX3N0 ZGluX2hhbmRsZXIgKEFDRV9SZWFjdG9yICpyZWFjdG9yLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFDRV9UaHJlYWRfTWFuYWdlciAqdGhyX21ncik7CgoKcHJvdGVjdGVkOgoK ICBBQ0VfRXZlbnRfSGFuZGxlciAoQUNFX1JlYWN0b3IgKiA9IDAsCiAgICAgICAgICAgICAgICAg ICAgIGludCBwcmlvcml0eSA9IEFDRV9FdmVudF9IYW5kbGVyOjpMT19QUklPUklUWSk7Cgpwcml2 YXRlOgoKCiAgaW50IHByaW9yaXR5XzsKCgogIEFDRV9SZWFjdG9yICpyZWFjdG9yXzsKfTsKCgoK CgoKCmNsYXNzIEFDRV9Ob3RpZmljYXRpb25fQnVmZmVyCnsKcHVibGljOgogIEFDRV9Ob3RpZmlj YXRpb25fQnVmZmVyICh2b2lkKTsKCiAgQUNFX05vdGlmaWNhdGlvbl9CdWZmZXIgKEFDRV9FdmVu dF9IYW5kbGVyICplaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1JlYWN0b3JfTWFz ayBtYXNrKTsKCgogIH5BQ0VfTm90aWZpY2F0aW9uX0J1ZmZlciAodm9pZCk7CgoKCiAgQUNFX0V2 ZW50X0hhbmRsZXIgKmVoXzsKCgogIEFDRV9SZWFjdG9yX01hc2sgbWFza187Cn07CgoKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRXZlbnRfSGFuZGxl ci5pIiAxCgoKCgoKaW5saW5lCkFDRV9Ob3RpZmljYXRpb25fQnVmZmVyOjp+QUNFX05vdGlmaWNh dGlvbl9CdWZmZXIgKHZvaWQpCnsKfQojIDIxNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL0V2ZW50X0hhbmRsZXIuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDIxNyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0V2ZW50X0hhbmRsZXIuaCIg MgojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVt b3J5X1Bvb2wuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9TaWduYWwuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvU2lnbmFsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TaWduYWwuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiIDEKIyAyMyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NpZ25hbC5oIiAyCgoKCgoK IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRXZlbnRf SGFuZGxlci5oIiAxCiMgMjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9TaWduYWwuaCIgMgoKCnR5cGVkZWYgc3RydWN0IHNpZ2FjdGlvbiBBQ0VfU0lHQUNU SU9OOwojIDQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv U2lnbmFsLmgiCmNsYXNzIEFDRV9TaWdfU2V0CnsKcHVibGljOgoKCgogIEFDRV9TaWdfU2V0IChz aWdzZXRfdCAqc2lnc2V0KTsKCgoKICBBQ0VfU2lnX1NldCAoQUNFX1NpZ19TZXQgKnNpZ3NldCk7 CgoKCiAgQUNFX1NpZ19TZXQgKGludCBmaWxsID0gMCk7CgogIH5BQ0VfU2lnX1NldCAodm9pZCk7 CgoKICBpbnQgZW1wdHlfc2V0ICh2b2lkKTsKCgogIGludCBmaWxsX3NldCAodm9pZCk7CgoKICBp bnQgc2lnX2FkZCAoaW50IHNpZ25vKTsKCgogIGludCBzaWdfZGVsIChpbnQgc2lnbm8pOwoKCiAg aW50IGlzX21lbWJlciAoaW50IHNpZ25vKSBjb25zdDsKCgogIG9wZXJhdG9yIHNpZ3NldF90ICoo KTsKCgogIHNpZ3NldF90IHNpZ3NldCAodm9pZCkgY29uc3Q7CgoKICB2b2lkIGR1bXAgKHZvaWQp IGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9OwoKcHJpdmF0ZToKCiAgc2lnc2V0X3Qgc2lnc2V0 XzsKfTsKCgoKCgoKY2xhc3MgQUNFX1NpZ19BY3Rpb24KewpwdWJsaWM6CgoKICBBQ0VfU2lnX0Fj dGlvbiAodm9pZCk7CgoKCiAgQUNFX1NpZ19BY3Rpb24gKEFDRV9TaWduYWxIYW5kbGVyIGhhbmRs ZXIsCiAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpzaWdtYXNrID0gMCwKICAgICAgICAgICAg ICAgICAgaW50IGZsYWdzID0gMCk7CgoKCiAgQUNFX1NpZ19BY3Rpb24gKEFDRV9TaWduYWxIYW5k bGVyIGhhbmRsZXIsCiAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9TaWdfU2V0ICZzaWdtYXNr LAogICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MgPSAwKTsKCgoKCgoKICBBQ0VfU2lnX0FjdGlv biAoQUNFX1NpZ25hbEhhbmRsZXIgaGFuZGxlciwKICAgICAgICAgICAgICAgICAgaW50IHNpZ251 bSwKICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKnNpZ21hc2sgPSAwLAogICAgICAgICAgICAg ICAgICBpbnQgZmxhZ3MgPSAwKTsKCgoKCgoKICBBQ0VfU2lnX0FjdGlvbiAoQUNFX1NpZ25hbEhh bmRsZXIgaGFuZGxlciwKICAgICAgICAgICAgICAgICAgaW50IHNpZ251bSwKICAgICAgICAgICAg ICAgICAgY29uc3QgQUNFX1NpZ19TZXQgJnNpZ21hc2ssCiAgICAgICAgICAgICAgICAgIGludCBm bGFncyA9IDApOwojIDE1NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL1NpZ25hbC5oIgogIEFDRV9TaWdfQWN0aW9uIChjb25zdCBBQ0VfU2lnX1NldCAmc2ln bmFsc3MsCiAgICAgICAgICAgICAgICAgIEFDRV9TaWduYWxIYW5kbGVyIGhhbmRsZXIsCiAgICAg ICAgICAgICAgICAgIGNvbnN0IEFDRV9TaWdfU2V0ICZzaWdtYXNrLAogICAgICAgICAgICAgICAg ICBpbnQgZmxhZ3MgPSAwKTsKCgoKCgoKICBBQ0VfU2lnX0FjdGlvbiAoY29uc3QgQUNFX1NpZ19T ZXQgJnNpZ25hbHNzLAogICAgICAgICAgICAgICAgICBBQ0VfU2lnbmFsSGFuZGxlciBoYW5kbGVy LAogICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqc2lnbWFzayA9IDAsCiAgICAgICAgICAgICAg ICAgIGludCBmbGFncyA9IDApOwoKCiAgQUNFX1NpZ19BY3Rpb24gKGNvbnN0IEFDRV9TaWdfQWN0 aW9uICZzKTsKCgogIH5BQ0VfU2lnX0FjdGlvbiAodm9pZCk7CgoKCgogIGludCByZWdpc3Rlcl9h Y3Rpb24gKGludCBzaWdudW0sCiAgICAgICAgICAgICAgICAgICAgICAgQUNFX1NpZ19BY3Rpb24g Km9hY3Rpb24gPSAwKTsKCgoKICBpbnQgcmVzdG9yZV9hY3Rpb24gKGludCBzaWdudW0sCiAgICAg ICAgICAgICAgICAgICAgICBBQ0VfU2lnX0FjdGlvbiAmb2FjdGlvbik7CgoKICBpbnQgcmV0cmll dmVfYWN0aW9uIChpbnQgc2lnbnVtKTsKCgogIHZvaWQgc2V0IChzdHJ1Y3Qgc2lnYWN0aW9uICop OwogIHN0cnVjdCBzaWdhY3Rpb24gKmdldCAodm9pZCk7CiAgb3BlcmF0b3IgQUNFX1NJR0FDVElP TiAqKCk7CgoKICB2b2lkIGZsYWdzIChpbnQpOwogIGludCBmbGFncyAodm9pZCk7CgoKICB2b2lk IG1hc2sgKHNpZ3NldF90ICopOwogIHZvaWQgbWFzayAoQUNFX1NpZ19TZXQgJik7CiAgc2lnc2V0 X3QgKm1hc2sgKHZvaWQpOwoKCiAgdm9pZCBoYW5kbGVyIChBQ0VfU2lnbmFsSGFuZGxlcik7CiAg QUNFX1NpZ25hbEhhbmRsZXIgaGFuZGxlciAodm9pZCk7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNv bnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9OwoKcHJpdmF0ZToKCiAgc3RydWN0IHNpZ2FjdGlvbiBz YV87Cn07CgoKCgoKCgpjbGFzcyBBQ0VfU2lnX0d1YXJkCnsKcHVibGljOgoKCiAgQUNFX1NpZ19H dWFyZCAoQUNFX1NpZ19TZXQgKm1hc2sgPSAwKTsKCgogIH5BQ0VfU2lnX0d1YXJkICh2b2lkKTsK CgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcml2YXRl OgoKICBBQ0VfU2lnX1NldCBvbWFza187Cn07CiMgMjU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2lnbmFsLmgiCmNsYXNzIEFDRV9TaWdfSGFuZGxlcgp7 CnB1YmxpYzoKIyAyNzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9TaWduYWwuaCIKICB2aXJ0dWFsIGludCByZWdpc3Rlcl9oYW5kbGVyIChpbnQgc2lnbnVt LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9FdmVudF9IYW5kbGVyICpuZXdf c2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1NpZ19BY3Rpb24gKm5ld19k aXNwID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfRXZlbnRfSGFuZGxl ciAqKm9sZF9zaCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1NpZ19B Y3Rpb24gKm9sZF9kaXNwID0gMCk7CiMgMjg5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvU2lnbmFsLmgiCiAgdmlydHVhbCBpbnQgcmVtb3ZlX2hhbmRsZXIg KGludCBzaWdudW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9TaWdfQWN0aW9u ICpuZXdfZGlzcCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9TaWdfQWN0 aW9uICpvbGRfZGlzcCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWdr ZXkgPSAtMSk7CgoKCiAgc3RhdGljIGludCBzaWdfcGVuZGluZyAodm9pZCk7CgoKICBzdGF0aWMg dm9pZCBzaWdfcGVuZGluZyAoaW50KTsKCgoKCiAgdmlydHVhbCBBQ0VfRXZlbnRfSGFuZGxlciAq aGFuZGxlciAoaW50IHNpZ251bSk7CgoKCiAgdmlydHVhbCBBQ0VfRXZlbnRfSGFuZGxlciAqaGFu ZGxlciAoaW50IHNpZ251bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Q0VfRXZlbnRfSGFuZGxlciAqKTsKCgoKCgoKICBzdGF0aWMgdm9pZCBkaXNwYXRjaCAoaW50LCBz aWdpbmZvX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgdWNvbnRleHRfdCAqKTsKCgogIHZv aWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6CgoK CgoKCgogIHN0YXRpYyBBQ0VfRXZlbnRfSGFuZGxlciAqaGFuZGxlcl9pIChpbnQgc2lnbnVtLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfRXZlbnRfSGFuZGxlciAq KTsKIyAzNDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9T aWduYWwuaCIKICBzdGF0aWMgaW50IHJlZ2lzdGVyX2hhbmRsZXJfaSAoaW50IHNpZ251bSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0V2ZW50X0hhbmRsZXIgKm5ld19zaCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1NpZ19BY3Rpb24gKm5ld19kaXNw ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0V2ZW50X0hhbmRsZXIg KipvbGRfc2ggPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfU2lnX0Fj dGlvbiAqb2xkX2Rpc3AgPSAwKTsKCgogIHN0YXRpYyBpbnQgaW5fcmFuZ2UgKGludCBzaWdudW0p OwoKCiAgc3RhdGljIHNpZ19hdG9taWNfdCBzaWdfcGVuZGluZ187Cgpwcml2YXRlOgoKCiAgc3Rh dGljIEFDRV9FdmVudF9IYW5kbGVyICpzaWduYWxfaGFuZGxlcnNfWzY0XTsKfTsKCgoKCgoKCmNs YXNzIEFDRV9TaWdfQWRhcHRlciA6IHB1YmxpYyBBQ0VfRXZlbnRfSGFuZGxlcgp7CnB1YmxpYzoK ICBBQ0VfU2lnX0FkYXB0ZXIgKEFDRV9TaWdfQWN0aW9uICYsIGludCBzaWdrZXkpOwogIEFDRV9T aWdfQWRhcHRlciAoQUNFX0V2ZW50X0hhbmRsZXIgKiwgaW50IHNpZ2tleSk7CiAgQUNFX1NpZ19B ZGFwdGVyIChBQ0VfU2lnX0hhbmRsZXJfRXgsIGludCBzaWdrZXkgPSAwKTsKICB+QUNFX1NpZ19B ZGFwdGVyICh2b2lkKTsKCgoKICBpbnQgc2lna2V5ICh2b2lkKTsKCgogIHZpcnR1YWwgaW50IGhh bmRsZV9zaWduYWwgKGludCwgc2lnaW5mb190ICosIHVjb250ZXh0X3QgKik7Cgpwcml2YXRlOgoK ICBpbnQgc2lna2V5XzsKCgogIGVudW0KICB7CgogICAgQUNFX0hBTkRMRVIsCgogICAgU0lHX0FD VElPTiwKCiAgICBDX0ZVTkNUSU9OCiAgfSB0eXBlXzsKCgoKCiAgQUNFX1NpZ19BY3Rpb24gc2Ff OwoKCiAgQUNFX0V2ZW50X0hhbmRsZXIgKmVoXzsKCgogIEFDRV9TaWdfSGFuZGxlcl9FeCBzaWdf ZnVuY187Cn07CiMgNDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvU2lnbmFsLmgiCmNsYXNzIEFDRV9TaWdfSGFuZGxlcnMgOiBwdWJsaWMgQUNFX1NpZ19I YW5kbGVyCnsKcHVibGljOgoKCgoKCgoKICB2aXJ0dWFsIGludCByZWdpc3Rlcl9oYW5kbGVyIChp bnQgc2lnbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9FdmVudF9IYW5k bGVyICpuZXdfc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1NpZ19BY3Rp b24gKm5ld19kaXNwID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfRXZl bnRfSGFuZGxlciAqKm9sZF9zaCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QUNFX1NpZ19BY3Rpb24gKm9sZF9kaXNwID0gMCk7CiMgNDUxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2lnbmFsLmgiCiAgdmlydHVhbCBpbnQgcmVtb3Zl X2hhbmRsZXIgKGludCBzaWdudW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9T aWdfQWN0aW9uICpuZXdfZGlzcCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD RV9TaWdfQWN0aW9uICpvbGRfZGlzcCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBzaWdrZXkgPSAtMSk7CgoKCgoKICB2aXJ0dWFsIEFDRV9FdmVudF9IYW5kbGVyICpoYW5k bGVyIChpbnQgc2lnbnVtKTsKCgoKCgoKICB2aXJ0dWFsIEFDRV9FdmVudF9IYW5kbGVyICpoYW5k bGVyIChpbnQgc2lnbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD RV9FdmVudF9IYW5kbGVyICopOwoKCgoKCgogIHN0YXRpYyB2b2lkIGRpc3BhdGNoIChpbnQgc2ln bnVtLCBzaWdpbmZvX3QgKiwgdWNvbnRleHRfdCAqKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29u c3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcml2YXRlOgoKCgoKCiAgc3RhdGljIGludCBzaWdr ZXlfOwoKCgogIHN0YXRpYyBpbnQgdGhpcmRfcGFydHlfc2lnX2hhbmRsZXJfOwp9OwojIDUwOSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NpZ25hbC5oIgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TaWduYWwu aSIgMQoKCgppbmxpbmUKQUNFX1NpZ19TZXQ6OkFDRV9TaWdfU2V0IChzaWdzZXRfdCAqc3MpCgp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChzcyA9PSAw KQogICAgQUNFX09TOjpzaWdmaWxsc2V0ICgmdGhpcy0+c2lnc2V0Xyk7CiAgZWxzZQoKICAgIHRo aXMtPnNpZ3NldF8gPSAqc3M7Cn0KCmlubGluZQpBQ0VfU2lnX1NldDo6QUNFX1NpZ19TZXQgKGlu dCBmaWxsKQoKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBp ZiAoZmlsbCkKICAgIEFDRV9PUzo6c2lnZmlsbHNldCAoJnRoaXMtPnNpZ3NldF8pOwogIGVsc2UK ICAgIEFDRV9PUzo6c2lnZW1wdHlzZXQgKCZ0aGlzLT5zaWdzZXRfKTsKfQoKaW5saW5lCkFDRV9T aWdfU2V0OjpBQ0VfU2lnX1NldCAoQUNFX1NpZ19TZXQgKnNzKQoKewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAoc3MgPT0gMCkKICAgIEFDRV9PUzo6c2ln ZmlsbHNldCAoJnRoaXMtPnNpZ3NldF8pOwogIGVsc2UKICAgIHRoaXMtPnNpZ3NldF8gPSBzcy0+ c2lnc2V0XzsKfQoKaW5saW5lCkFDRV9TaWdfU2V0Ojp+QUNFX1NpZ19TZXQgKHZvaWQpCnsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgQUNFX09TOjpzaWdlbXB0 eXNldCAoJnRoaXMtPnNpZ3NldF8pOwp9CgppbmxpbmUgaW50CkFDRV9TaWdfU2V0OjplbXB0eV9z ZXQgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0 dXJuIEFDRV9PUzo6c2lnZW1wdHlzZXQgKCZ0aGlzLT5zaWdzZXRfKTsKfQoKaW5saW5lIGludApB Q0VfU2lnX1NldDo6ZmlsbF9zZXQgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICByZXR1cm4gQUNFX09TOjpzaWdmaWxsc2V0ICgmdGhpcy0+c2lnc2V0Xyk7 Cn0KCmlubGluZSBpbnQKQUNFX1NpZ19TZXQ6OnNpZ19hZGQgKGludCBzaWdubykKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6c2lnYWRkc2V0 ICgmdGhpcy0+c2lnc2V0Xywgc2lnbm8pOwp9CgppbmxpbmUgaW50CkFDRV9TaWdfU2V0OjpzaWdf ZGVsIChpbnQgc2lnbm8pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IHJldHVybiBBQ0VfT1M6OnNpZ2RlbHNldCAoJnRoaXMtPnNpZ3NldF8sIHNpZ25vKTsKfQoKaW5s aW5lIGludApBQ0VfU2lnX1NldDo6aXNfbWVtYmVyIChpbnQgc2lnbm8pIGNvbnN0CnsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6c2lnaXNt ZW1iZXIgKGNvbnN0X2Nhc3Q8c2lnc2V0X3QgKj4gKCZ0aGlzLT5zaWdzZXRfKSwgc2lnbm8pOwp9 CgppbmxpbmUKQUNFX1NpZ19TZXQ6Om9wZXJhdG9yIHNpZ3NldF90ICoodm9pZCkKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuICZ0aGlz LT5zaWdzZXRfOwp9CgppbmxpbmUgc2lnc2V0X3QKQUNFX1NpZ19TZXQ6OnNpZ3NldCAodm9pZCkg Y29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhp cy0+c2lnc2V0XzsKfQoKaW5saW5lCkFDRV9TaWdfQWN0aW9uOjp+QUNFX1NpZ19BY3Rpb24gKHZv aWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0K CmlubGluZSBpbnQKQUNFX1NpZ19BY3Rpb246OmZsYWdzICh2b2lkKQp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnNhXy5zYV9mbGFnczsKfQoK aW5saW5lIHZvaWQKQUNFX1NpZ19BY3Rpb246OmZsYWdzIChpbnQgZmxhZ3MpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT5zYV8uc2FfZmxhZ3MgPSBmbGFn czsKfQoKaW5saW5lIHNpZ3NldF90ICoKQUNFX1NpZ19BY3Rpb246Om1hc2sgKHZvaWQpCnsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiAmdGhpcy0+c2FfLnNh X21hc2s7Cn0KCmlubGluZSB2b2lkCkFDRV9TaWdfQWN0aW9uOjptYXNrIChzaWdzZXRfdCAqc3Mp CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChzcyAhPSAwKQog ICAgdGhpcy0+c2FfLnNhX21hc2sgPSAqc3M7Cn0KCmlubGluZSB2b2lkCkFDRV9TaWdfQWN0aW9u OjptYXNrIChBQ0VfU2lnX1NldCAmc3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogIHRoaXMtPnNhXy5zYV9tYXNrID0gc3Muc2lnc2V0ICgpOwp9CgppbmxpbmUgQUNF X1NpZ25hbEhhbmRsZXIKQUNFX1NpZ19BY3Rpb246OmhhbmRsZXIgKHZvaWQpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBBQ0VfU2lnbmFsSGFuZGxl ciAodGhpcy0+c2FfLl9fc2lnYWN0aW9uX2hhbmRsZXIuc2FfaGFuZGxlcik7Cn0KCmlubGluZSB2 b2lkCkFDRV9TaWdfQWN0aW9uOjpoYW5kbGVyIChBQ0VfU2lnbmFsSGFuZGxlciBoYW5kbGVyKQp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgdGhpcy0+c2FfLl9f c2lnYWN0aW9uX2hhbmRsZXIuc2FfaGFuZGxlciA9IEFDRV9TaWduYWxIYW5kbGVyViAoaGFuZGxl cik7CgoKCn0KIyAxNzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9TaWduYWwuaSIKaW5saW5lIHZvaWQKQUNFX1NpZ19BY3Rpb246OnNldCAoc3RydWN0IHNp Z2FjdGlvbiAqc2EpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhp cy0+c2FfID0gKnNhOwp9CgppbmxpbmUgc3RydWN0IHNpZ2FjdGlvbiAqCkFDRV9TaWdfQWN0aW9u OjpnZXQgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0 dXJuICZ0aGlzLT5zYV87Cn0KCmlubGluZQpBQ0VfU2lnX0FjdGlvbjo6b3BlcmF0b3IgQUNFX1NJ R0FDVElPTiAqICgpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgcmV0dXJuICZ0aGlzLT5zYV87Cn0KCmlubGluZQpBQ0VfU2lnX0Fj dGlvbjo6QUNFX1NpZ19BY3Rpb24gKGNvbnN0IEFDRV9TaWdfQWN0aW9uICZzKQoKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICp0aGlzID0gczsKfQoK aW5saW5lIGludApBQ0VfU2lnX0FjdGlvbjo6cmVnaXN0ZXJfYWN0aW9uIChpbnQgc2lnbnVtLCBB Q0VfU2lnX0FjdGlvbiAqb2FjdGlvbikKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICBzdHJ1Y3Qgc2lnYWN0aW9uICpzYSA9IG9hY3Rpb24gPT0gMCA/ IDAgOiBvYWN0aW9uLT5nZXQgKCk7CgogIHJldHVybiBBQ0VfT1M6OnNpZ2FjdGlvbiAoc2lnbnVt LCAmdGhpcy0+c2FfLCBzYSk7Cn0KCmlubGluZSBpbnQKQUNFX1NpZ19BY3Rpb246OnJldHJpZXZl X2FjdGlvbiAoaW50IHNpZ251bSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICByZXR1cm4gQUNFX09TOjpzaWdhY3Rpb24gKHNpZ251bSwgMCwgJnRo aXMtPnNhXyk7Cn0KCmlubGluZSBpbnQKQUNFX1NpZ19BY3Rpb246OnJlc3RvcmVfYWN0aW9uIChp bnQgc2lnbnVtLCBBQ0VfU2lnX0FjdGlvbiAmb2FjdGlvbikKewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHRoaXMtPnNhXyA9ICpvYWN0aW9uLmdldCAo KTsKICByZXR1cm4gQUNFX09TOjpzaWdhY3Rpb24gKHNpZ251bSwgJnRoaXMtPnNhXywgMCk7Cn0K CgoKaW5saW5lCkFDRV9TaWdfR3VhcmQ6OkFDRV9TaWdfR3VhcmQgKEFDRV9TaWdfU2V0ICptYXNr KQogIDogb21hc2tfICgpCnsKCgoKCgoKICBpZiAobWFzayA9PSAwKQogICAgewoKCgoKCiAgICAg IEFDRV9PUzo6dGhyX3NpZ3NldG1hc2sgKDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFDRV9PU19PYmplY3RfTWFuYWdlcjo6ZGVmYXVsdF9tYXNrICgpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc2lnc2V0X3QgKikgdGhpcy0+b21hc2tfKTsKCiAgICB9CiAgZWxzZQoK CgoKCgogICAgQUNFX09TOjp0aHJfc2lnc2V0bWFzayAoMCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzaWdzZXRfdCAqKSAqbWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz aWdzZXRfdCAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+b21hc2tfKTsKCgp9 CgoKCmlubGluZQpBQ0VfU2lnX0d1YXJkOjp+QUNFX1NpZ19HdWFyZCAodm9pZCkKewoKCgoKCgoK ICBBQ0VfT1M6OnRocl9zaWdzZXRtYXNrICgyLAogICAgICAgICAgICAgICAgICAgICAgICAgIChz aWdzZXRfdCAqKSB0aGlzLT5vbWFza18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CgoK fQojIDI5NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1Np Z25hbC5pIgppbmxpbmUgaW50CkFDRV9TaWdfSGFuZGxlcjo6aW5fcmFuZ2UgKGludCBzaWdudW0p CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHNp Z251bSA+IDAgJiYgc2lnbnVtIDwgNjQ7Cn0KCmlubGluZQpBQ0VfU2lnX0FkYXB0ZXI6On5BQ0Vf U2lnX0FkYXB0ZXIgKHZvaWQpCnsKfQojIDUxMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL1NpZ25hbC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgNTEzICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2lnbmFsLmgiIDIKIyAyNSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmgiIDIK IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtX01h cC5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9NZW1fTWFwLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL3ByZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9NZW1fTWFwLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZW1fTWFwLmgiIDIKIyAzMiAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbV9NYXAuaCIKY2xhc3MgQUNFX01lbV9N YXAKewpwdWJsaWM6CgoKCiAgQUNFX01lbV9NYXAgKHZvaWQpOwoKCgogIEFDRV9NZW1fTWFwIChB Q0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgaW50IGxlbmd0aCA9IC0xLAogICAgICAg ICAgICAgICBpbnQgcHJvdCA9ICgweDF8MHgyKSwKICAgICAgICAgICAgICAgaW50IHNoYXJlID0g MHgwMiwKICAgICAgICAgICAgICAgdm9pZCAqYWRkciA9IDAsCiAgICAgICAgICAgICAgIG9mZl90 IG9mZnNldCA9IDAsCiAgICAgICAgICAgICAgIGludCBzYSA9IDApOwoKCiAgQUNFX01lbV9NYXAg KGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgIGludCBsZW4gPSAtMSwK ICAgICAgICAgICAgICAgaW50IGZsYWdzID0gMDIgfCAwMTAwLAogICAgICAgICAgICAgICBpbnQg bW9kZSA9IDA2NDQsCiAgICAgICAgICAgICAgIGludCBwcm90ID0gKDB4MXwweDIpLAogICAgICAg ICAgICAgICBpbnQgc2hhcmUgPSAweDAyLAogICAgICAgICAgICAgICB2b2lkICphZGRyID0gMCwK ICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0ID0gMCwKICAgICAgICAgICAgICAgaW50IHNhID0g MCk7CgoKCiAgaW50IG1hcCAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgaW50IGxlbmd0 aCA9IC0xLAogICAgICAgICAgIGludCBwcm90ID0gKDB4MXwweDIpLAogICAgICAgICAgIGludCBz aGFyZSA9IDB4MDIsCiAgICAgICAgICAgdm9pZCAqYWRkciA9IDAsCiAgICAgICAgICAgb2ZmX3Qg b2Zmc2V0ID0gMCwKICAgICAgICAgICBpbnQgc2EgPSAwKTsKCgogIGludCBtYXAgKGludCBsZW5n dGggPSAtMSwKICAgICAgICAgICBpbnQgcHJvdCA9ICgweDF8MHgyKSwKICAgICAgICAgICBpbnQg c2hhcmUgPSAweDAyLAogICAgICAgICAgIHZvaWQgKmFkZHIgPSAwLAogICAgICAgICAgIG9mZl90 IG9mZnNldCA9IDAsCiAgICAgICAgICAgaW50IHNhID0gMCk7CgoKICBpbnQgbWFwIChjb25zdCBB Q0VfVENIQVIgKmZpbGVuYW1lLAogICAgICAgICAgIGludCBsZW4gPSAtMSwKICAgICAgICAgICBp bnQgZmxhZ3MgPSAwMiB8IDAxMDAsCiAgICAgICAgICAgaW50IG1vZGUgPSAwNjQ0LAogICAgICAg ICAgIGludCBwcm90ID0gKDB4MXwweDIpLAogICAgICAgICAgIGludCBzaGFyZSA9IDB4MDIsCiAg ICAgICAgICAgdm9pZCAqYWRkciA9IDAsCiAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0ID0gMCwKICAg ICAgICAgICBpbnQgc2EgPSAwKTsKCgogIH5BQ0VfTWVtX01hcCAodm9pZCk7CgoKICBpbnQgb3Bl biAoY29uc3QgQUNFX1RDSEFSICpmaWxlbmFtZSwKICAgICAgICAgICAgaW50IGZsYWdzID0gMDIg fCAwMTAwLAogICAgICAgICAgICBpbnQgbW9kZSA9IDA2NDQsCiAgICAgICAgICAgIGludCBzYSA9 IDApOwoKCiAgaW50IGNsb3NlICh2b2lkKTsKCgogIGludCBjbG9zZV9oYW5kbGUgKHZvaWQpOwoK CgoKCgogIGludCBjbG9zZV9maWxlbWFwcGluZ19oYW5kbGUgKHZvaWQpOwoKCgogIGludCBvcGVy YXRvciAoKSAodm9pZCAqJmFkZHIpOwoKCiAgdm9pZCAqYWRkciAodm9pZCkgY29uc3Q7CgoKCiAg c2l6ZV90IHNpemUgKHZvaWQpIGNvbnN0OwoKCiAgaW50IHVubWFwIChpbnQgbGVuID0gLTEpOwoK CiAgaW50IHVubWFwICh2b2lkICphZGRyLCBpbnQgbGVuKTsKCgoKCgoKICBpbnQgc3luYyAoc3Np emVfdCBsZW4gPSAtMSwgaW50IGZsYWdzID0gNCk7CgoKCiAgaW50IHN5bmMgKHZvaWQgKmFkZHIs IHNpemVfdCBsZW4sIGludCBmbGFncyA9IDQpOwoKCgoKCgogIGludCBwcm90ZWN0IChzc2l6ZV90 IGxlbiA9IC0xLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CgoKCiAgaW50IHByb3RlY3QgKHZvaWQg KmFkZHIsIHNpemVfdCBsZW4sIGludCBwcm90ID0gKDB4MXwweDIpKTsKCgogIGludCByZW1vdmUg KHZvaWQpOwoKCiAgaW50IGFkdmlzZSAoaW50IGJlaGF2aW9yLCBpbnQgbGVuID0gLTEpOwoKCiAg QUNFX0hBTkRMRSBoYW5kbGUgKHZvaWQpIGNvbnN0OwoKCiAgY29uc3QgQUNFX1RDSEFSICpmaWxl bmFtZSAodm9pZCkgY29uc3Q7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0 IF9fQWNlIHt9OwoKcHJpdmF0ZToKCiAgdm9pZCAqYmFzZV9hZGRyXzsKCgogIEFDRV9UQ0hBUiBm aWxlbmFtZV9bNDA5NSArIDFdOwoKCiAgc2l6ZV90IGxlbmd0aF87CgoKICBBQ0VfSEFORExFIGhh bmRsZV87CgoKICBBQ0VfSEFORExFIGZpbGVfbWFwcGluZ187CiMgMTkyICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtX01hcC5oIgogIGludCBjbG9zZV9o YW5kbGVfOwoKCgogIGludCBtYXBfaXQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAg IGludCBsZW4gPSAtMSwKICAgICAgICAgICAgICBpbnQgcHJvdCA9ICgweDF8MHgyKSwKICAgICAg ICAgICAgICBpbnQgc2hhcmUgPSAweDAxLAogICAgICAgICAgICAgIHZvaWQgKmFkZHIgPSAwLAog ICAgICAgICAgICAgIG9mZl90IG9mZnNldCA9IDAsCiAgICAgICAgICAgICAgaW50IHNhID0gMCk7 CgoKICBBQ0VfTWVtX01hcCAoY29uc3QgQUNFX01lbV9NYXAgJik7CiAgdm9pZCBvcGVyYXRvciA9 IChjb25zdCBBQ0VfTWVtX01hcCAmKTsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZW1fTWFwLmkiIDEKCgoKaW5saW5lIEFDRV9IQU5ETEUK QUNFX01lbV9NYXA6OmhhbmRsZSAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+aGFuZGxlXzsKfQoKCgppbmxpbmUgY29uc3Qg QUNFX1RDSEFSICoKQUNFX01lbV9NYXA6OmZpbGVuYW1lICh2b2lkKSBjb25zdAp7CiAgcmV0dXJu IHRoaXMtPmZpbGVuYW1lXzsKfQoKaW5saW5lIGludApBQ0VfTWVtX01hcDo6bWFwIChBQ0VfSEFO RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgaW50IGxlbiwKICAgICAgICAgICAgICAgICAg aW50IHByb3QsCiAgICAgICAgICAgICAgICAgIGludCBzaGFyZSwKICAgICAgICAgICAgICAgICAg dm9pZCAqYWRkciwKICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0LAogICAgICAgICAgICAg ICAgICBpbnQgc2EpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJu IHRoaXMtPm1hcF9pdCAoaGFuZGxlLCBsZW4sIHByb3QsIHNoYXJlLCBhZGRyLCBvZmZzZXQsIHNh KTsKfQoKCgppbmxpbmUgaW50CkFDRV9NZW1fTWFwOjptYXAgKGludCBsZW4sCiAgICAgICAgICAg ICAgICAgIGludCBwcm90LAogICAgICAgICAgICAgICAgICBpbnQgc2hhcmUsCiAgICAgICAgICAg ICAgICAgIHZvaWQgKmFkZHIsCiAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNldCwKICAgICAg ICAgICAgICAgICAgaW50IHNhKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CiAgaWYgKGFkZHIgPT0gMCAmJiB0aGlzLT5iYXNlX2FkZHJfICE9IDAgJiYgdGhpcy0+YmFzZV9h ZGRyXyAhPSAoKHZvaWQgKikgLTEpKQogICAgewogICAgICBzaGFyZSB8PSAweDEwOwogICAgICBh ZGRyID0gdGhpcy0+YmFzZV9hZGRyXzsKICAgIH0KICByZXR1cm4gdGhpcy0+bWFwX2l0ICh0aGlz LT5oYW5kbGUgKCksIGxlbiwgcHJvdCwKICAgICAgICAgICAgICAgICAgICAgICBzaGFyZSwgYWRk ciwgb2Zmc2V0LCBzYSk7Cn0KCgoKaW5saW5lIGludApBQ0VfTWVtX01hcDo6b3BlcmF0b3IgKCkg KHZvaWQgKiZhZGRyKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog IGlmICh0aGlzLT5iYXNlX2FkZHJfID09ICgodm9pZCAqKSAtMSkpCiAgICByZXR1cm4gLTE7CiAg ZWxzZQogICAgewogICAgICBhZGRyID0gdGhpcy0+YmFzZV9hZGRyXzsKICAgICAgcmV0dXJuIDA7 CiAgICB9Cn0KCgoKaW5saW5lIHZvaWQgKgpBQ0VfTWVtX01hcDo6YWRkciAodm9pZCkgY29uc3QK ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiB0aGlzLT5iYXNl X2FkZHJfOwp9CgoKCgppbmxpbmUgc2l6ZV90CkFDRV9NZW1fTWFwOjpzaXplICh2b2lkKSBjb25z dAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bGVu Z3RoXzsKfQoKaW5saW5lIGludApBQ0VfTWVtX01hcDo6Y2xvc2VfZmlsZW1hcHBpbmdfaGFuZGxl ICh2b2lkKQp7CiAgaW50IHJlc3VsdCA9IDA7CgogIGlmICh0aGlzLT5maWxlX21hcHBpbmdfICE9 IHRoaXMtPmhhbmRsZV8KICAgICAgJiYgdGhpcy0+ZmlsZV9tYXBwaW5nXyAhPSAtMSkKICAgIHsK CgogICAgICByZXN1bHQgPSBBQ0VfT1M6OmNsb3NlICh0aGlzLT5maWxlX21hcHBpbmdfKTsKICAg ICAgdGhpcy0+ZmlsZV9tYXBwaW5nXyA9IC0xOwogICAgfQoKICByZXR1cm4gcmVzdWx0Owp9CgoK CmlubGluZSBpbnQKQUNFX01lbV9NYXA6OnVubWFwIChpbnQgbGVuKQp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogIHRoaXMtPmNsb3NlX2ZpbGVtYXBwaW5nX2hhbmRsZSAo KTsKIyAxMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9N ZW1fTWFwLmkiCiAgaWYgKHRoaXMtPmJhc2VfYWRkcl8gIT0gKCh2b2lkICopIC0xKSkKICAgIHsK ICAgICAgaW50IHJlc3VsdCA9IEFDRV9PUzo6bXVubWFwICh0aGlzLT5iYXNlX2FkZHJfLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA8IDAgPyB0aGlzLT5sZW5ndGhfIDog bGVuKTsKICAgICAgdGhpcy0+YmFzZV9hZGRyXyA9ICgodm9pZCAqKSAtMSk7CiAgICAgIHJldHVy biByZXN1bHQ7CiAgICB9CiAgZWxzZQoKCgogICAgcmV0dXJuIDA7Cgp9CgoKCmlubGluZSBpbnQK QUNFX01lbV9NYXA6OnVubWFwICh2b2lkICphZGRyLCBpbnQgbGVuKQp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogIHRoaXMtPmNsb3NlX2ZpbGVtYXBwaW5nX2hhbmRsZSAo KTsKIyAxNzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9N ZW1fTWFwLmkiCiAgcmV0dXJuIEFDRV9PUzo6bXVubWFwIChhZGRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgbGVuIDwgMCA/IHRoaXMtPmxlbmd0aF8gOiBsZW4pOwoKfQoKCgoKCmlubGluZSBp bnQKQUNFX01lbV9NYXA6OnN5bmMgKHNzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBBQ0VfT1M6Om1zeW5jICh0aGlzLT5i YXNlX2FkZHJfLAogICAgICAgICAgICAgICAgICAgICAgICBsZW4gPCAwID8gdGhpcy0+bGVuZ3Ro XyA6IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOwp9CgoKCgppbmxpbmUgaW50 CkFDRV9NZW1fTWFwOjpzeW5jICh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBBQ0VfT1M6Om1zeW5j IChhZGRyLCBsZW4sIGZsYWdzKTsKfQoKCgoKCmlubGluZSBpbnQKQUNFX01lbV9NYXA6OnByb3Rl Y3QgKHNzaXplX3QgbGVuLCBpbnQgcHJvdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgaWYgKGxlbiA8IDApCiAgICBsZW4gPSB0aGlzLT5sZW5ndGhfOwogIHJldHVy biBBQ0VfT1M6Om1wcm90ZWN0ICh0aGlzLT5iYXNlX2FkZHJfLCBsZW4sIHByb3QpOwp9CgoKCgpp bmxpbmUgaW50CkFDRV9NZW1fTWFwOjpwcm90ZWN0ICh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBp bnQgcHJvdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJu IEFDRV9PUzo6bXByb3RlY3QgKGFkZHIsIGxlbiwgcHJvdCk7Cn0KCgoKaW5saW5lIGludApBQ0Vf TWVtX01hcDo6YWR2aXNlIChpbnQgYmVoYXZpb3IsIGludCBsZW4pCnsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgaWYgKGxlbiA8IDApCiAgICBsZW4gPSB0aGlzLT5sZW5n dGhfOwoKICByZXR1cm4gQUNFX09TOjptYWR2aXNlICgoY2FkZHJfdCkgdGhpcy0+YmFzZV9hZGRy XywKICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgYmVoYXZpb3IpOwp9CgppbmxpbmUgaW50CkFDRV9NZW1fTWFwOjpjbG9zZV9oYW5kbGUgKHZv aWQpCnsKICBpbnQgcmVzdWx0ID0gMDsKCiAgaWYgKHRoaXMtPmNsb3NlX2hhbmRsZV8pCiAgICB7 CiAgICAgIHRoaXMtPmNsb3NlX2hhbmRsZV8gPSAwOwogICAgICByZXN1bHQgPSBBQ0VfT1M6OmNs b3NlICh0aGlzLT5oYW5kbGVfKTsKICAgICAgdGhpcy0+aGFuZGxlXyA9IC0xOwogICAgfQoKICBy ZXR1cm4gcmVzdWx0Owp9CiMgMjExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvTWVtX01hcC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMjE0ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtX01hcC5oIiAyCiMgMjYgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZW1vcnlfUG9vbC5oIiAyCgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhv cmVfQ29tcGxleC5oIiAxCiMgMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfQ29tcGxleC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1ZfU2VtYXBob3JlX0NvbXBsZXguaCIg MgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1Zf U2VtYXBob3JlX1NpbXBsZS5oIiAxCiMgMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfU2ltcGxlLmgiCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTYgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfU2ltcGxl LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L0FDRS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9TVl9TZW1hcGhvcmVfU2ltcGxlLmgiIDIKIyAzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NWX1NlbWFwaG9yZV9TaW1wbGUuaCIKY2xhc3MgQUNF X1NWX1NlbWFwaG9yZV9TaW1wbGUKewpwdWJsaWM6CiAgZW51bQogIHsKICAgIEFDRV9DUkVBVEUg PSAwMTAwMCwKICAgIEFDRV9FWENMID0gMDIwMDAsCiAgICBBQ0VfT1BFTiA9IDAKICB9OwoKCiAg QUNFX1NWX1NlbWFwaG9yZV9TaW1wbGUgKHZvaWQpOwogIEFDRV9TVl9TZW1hcGhvcmVfU2ltcGxl IChrZXlfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyA9IEFDRV9T Vl9TZW1hcGhvcmVfU2ltcGxlOjpBQ0VfQ1JFQVRFLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgaW5pdGlhbF92YWx1ZSA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfc2hv cnQgbnNlbXMgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGVybXMgPSAwNjQ0 KTsKICBBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZSAoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGZsYWdzID0gQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6OkFD RV9DUkVBVEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbml0aWFsX3ZhbHVlID0g MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9zaG9ydCBuc2VtcyA9IDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBwZXJtcyA9IDA2NDQpOwogIH5BQ0VfU1ZfU2VtYXBob3Jl X1NpbXBsZSAodm9pZCk7CgogIGludCBvcGVuIChjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAg ICBpbnQgZmxhZ3MgPSBBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6QUNFX0NSRUFURSwKICAgICAg ICAgICAgaW50IGluaXRpYWxfdmFsdWUgPSAxLAogICAgICAgICAgICB1X3Nob3J0IG5zZW1zID0g MSwKICAgICAgICAgICAgaW50IHBlcm1zID0gMDY0NCk7CgoKCiAgaW50IG9wZW4gKGtleV90IGtl eSwKICAgICAgICAgICAgaW50IGZsYWdzID0gQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6OkFDRV9D UkVBVEUsCiAgICAgICAgICAgIGludCBpbml0aWFsX3ZhbHVlID0gMSwKICAgICAgICAgICAgdV9z aG9ydCBuc2VtcyA9IDEsCiAgICAgICAgICAgIGludCBwZXJtcyA9IDA2NDQpOwoKCgogIGludCBj bG9zZSAodm9pZCk7CiMgNzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9TVl9TZW1hcGhvcmVfU2ltcGxlLmgiCiAgaW50IHJlbW92ZSAodm9pZCkgY29uc3Q7 CgoKCgoKCgogIGludCBhY3F1aXJlICh1X3Nob3J0IG4gPSAwLCBpbnQgZmxhZ3MgPSAwKSBjb25z dDsKCgogIGludCBhY3F1aXJlX3JlYWQgKHVfc2hvcnQgbiA9IDAsIGludCBmbGFncyA9IDApIGNv bnN0OwoKCiAgaW50IGFjcXVpcmVfd3JpdGUgKHVfc2hvcnQgbiA9IDAsIGludCBmbGFncyA9IDAp IGNvbnN0OwoKCiAgaW50IHRyeWFjcXVpcmUgKHVfc2hvcnQgbiA9IDAsIGludCBmbGFncyA9IDAp IGNvbnN0OwoKCiAgaW50IHRyeWFjcXVpcmVfcmVhZCAodV9zaG9ydCBuID0gMCwgaW50IGZsYWdz ID0gMCkgY29uc3Q7CgoKICBpbnQgdHJ5YWNxdWlyZV93cml0ZSAodV9zaG9ydCBuID0gMCwgaW50 IGZsYWdzID0gMCkgY29uc3Q7CgoKCiAgaW50IHJlbGVhc2UgKHVfc2hvcnQgbiA9IDAsIGludCBm bGFncyA9IDApIGNvbnN0OwoKCgoKICBpbnQgb3AgKGludCB2YWwsIHVfc2hvcnQgc2VtbnVtID0g MCwgaW50IGZsYWdzID0gMHgxMDAwKSBjb25zdDsKCgogIGludCBvcCAoc2VtYnVmIG9wX3ZlY1td LCB1X3Nob3J0IG5zZW1zKSBjb25zdDsKCgogIGludCBjb250cm9sIChpbnQgY21kLCBzZW11biBh cmcsIHVfc2hvcnQgbiA9IDApIGNvbnN0OwogIGludCBjb250cm9sIChpbnQgY21kLCBpbnQgdmFs dWUgPSAwLCB1X3Nob3J0IG4gPSAwKSBjb25zdDsKCgogIGludCBnZXRfaWQgKHZvaWQpIGNvbnN0 OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByb3Rl Y3RlZDoKCiAga2V5X3Qga2V5XzsKCgogIGludCBpbnRlcm5hbF9pZF87CgoKICBpbnQgc2VtX251 bWJlcl87CiMgMTQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvU1ZfU2VtYXBob3JlX1NpbXBsZS5oIgogIGludCBpbml0IChrZXlfdCBrID0gc3RhdGljX2Nh c3Q8a2V5X3Q+ICgtMSksCiAgICAgICAgICAgIGludCBpID0gLTEpOwogIGtleV90IG5hbWVfMl9r ZXkgKGNvbnN0IGNoYXIgKm5hbWUpOwp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NWX1NlbWFwaG9yZV9TaW1wbGUuaSIgMQoKCgoKCiMgMSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RyYWNlLmgiIDEK IyA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1ZfU2Vt YXBob3JlX1NpbXBsZS5pIiAyCgppbmxpbmUgaW50CkFDRV9TVl9TZW1hcGhvcmVfU2ltcGxlOjpj b250cm9sIChpbnQgY21kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtdW4g YXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9zaG9ydCBuKSBjb25zdAp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1 cm4gdGhpcy0+aW50ZXJuYWxfaWRfID09IC0xID8KICAgIC0xIDogQUNFX09TOjpzZW1jdGwgKHRo aXMtPmludGVybmFsX2lkXywgbiwgY21kLCBhcmcpOwp9CgoKCgppbmxpbmUgaW50CkFDRV9TVl9T ZW1hcGhvcmVfU2ltcGxlOjpjbG9zZSAodm9pZCkKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5pbml0ICgpOwp9CgoKCmlubGlu ZSBpbnQKQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6Om9wIChzZW1idWYgb3BfdmVjW10sIHVfc2hv cnQgbikgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogIHJldHVybiB0aGlzLT5pbnRlcm5hbF9pZF8gPT0gLTEKICAgID8gLTEgOiBBQ0VfT1M6OnNl bW9wICh0aGlzLT5pbnRlcm5hbF9pZF8sIG9wX3ZlYywgbik7Cn0KCgoKCgppbmxpbmUgaW50CkFD RV9TVl9TZW1hcGhvcmVfU2ltcGxlOjphY3F1aXJlICh1X3Nob3J0IG4sIGludCBmbGFncykgY29u c3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg cmV0dXJuIHRoaXMtPm9wICgtMSwgbiwgZmxhZ3MpOwp9CgppbmxpbmUgaW50CkFDRV9TVl9TZW1h cGhvcmVfU2ltcGxlOjphY3F1aXJlX3JlYWQgKHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25zdAp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IHJldHVybiB0aGlzLT5hY3F1aXJlIChuLCBmbGFncyk7Cn0KCmlubGluZSBpbnQKQUNFX1NWX1Nl bWFwaG9yZV9TaW1wbGU6OmFjcXVpcmVfd3JpdGUgKHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25z dAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICByZXR1cm4gdGhpcy0+YWNxdWlyZSAobiwgZmxhZ3MpOwp9CgoKCmlubGluZSBpbnQKQUNF X1NWX1NlbWFwaG9yZV9TaW1wbGU6OnRyeWFjcXVpcmUgKHVfc2hvcnQgbiwgaW50IGZsYWdzKSBj b25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICByZXR1cm4gdGhpcy0+b3AgKC0xLCBuLCBmbGFncyB8IDA0MDAwKTsKfQoKCgppbmxpbmUg aW50CkFDRV9TVl9TZW1hcGhvcmVfU2ltcGxlOjp0cnlhY3F1aXJlX3JlYWQgKHVfc2hvcnQgbiwg aW50IGZsYWdzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT50cnlhY3F1aXJlIChuLCBmbGFncyk7 Cn0KCgoKaW5saW5lIGludApBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6dHJ5YWNxdWlyZV93cml0 ZSAodV9zaG9ydCBuLCBpbnQgZmxhZ3MpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT50cnlhY3F1 aXJlIChuLCBmbGFncyk7Cn0KCgoKCmlubGluZSBpbnQKQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6 OnJlbGVhc2UgKHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+b3AgKDEsIG4s IGZsYWdzKTsKfQoKaW5saW5lIGludApBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6Z2V0X2lkICh2 b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogIHJldHVybiB0aGlzLT5pbnRlcm5hbF9pZF87Cn0KIyAxNTUgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfU2ltcGxlLmgiIDIK CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0 LmgiIDEKIyAxNTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9TVl9TZW1hcGhvcmVfU2ltcGxlLmgiIDIKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NWX1NlbWFwaG9yZV9Db21wbGV4LmgiIDIKIyA1MiAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NWX1NlbWFwaG9yZV9D b21wbGV4LmgiCmNsYXNzIEFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleCA6IHByaXZhdGUgQUNFX1NW X1NlbWFwaG9yZV9TaW1wbGUKewpwdWJsaWM6CiAgZW51bQogIHsKICAgIEFDRV9DUkVBVEUgPSAw MTAwMCwKICAgIEFDRV9PUEVOID0gMAogIH07CgoKICBBQ0VfU1ZfU2VtYXBob3JlX0NvbXBsZXgg KHZvaWQpOwogIEFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleCAoa2V5X3Qga2V5LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGNyZWF0ZSA9IEFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleDo6 QUNFX0NSRUFURSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbml0aWFsX3ZhbHVl ID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfc2hvcnQgbnNlbXMgPSAxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBlcm1zID0gMDY0NCk7CiAgQUNFX1NWX1NlbWFw aG9yZV9Db21wbGV4IChjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGNyZWF0ZSA9IEFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleDo6QUNFX0NSRUFURSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbml0aWFsX3ZhbHVlID0gMSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVfc2hvcnQgbnNlbXMgPSAxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHBlcm1zID0gMDY0NCk7CiAgfkFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleCAo dm9pZCk7CgoKCiAgaW50IG9wZW4gKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgIGludCBm bGFncyA9IEFDRV9TVl9TZW1hcGhvcmVfU2ltcGxlOjpBQ0VfQ1JFQVRFLAogICAgICAgICAgICBp bnQgaW5pdGlhbF92YWx1ZSA9IDEsCiAgICAgICAgICAgIHVfc2hvcnQgbnNlbXMgPSAxLAogICAg ICAgICAgICBpbnQgcGVybXMgPSAwNjQ0KTsKCgoKICBpbnQgb3BlbiAoa2V5X3Qga2V5LAogICAg ICAgICAgICBpbnQgZmxhZ3MgPSBBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6QUNFX0NSRUFURSwK ICAgICAgICAgICAgaW50IGluaXRpYWxfdmFsdWUgPSAxLAogICAgICAgICAgICB1X3Nob3J0IG5z ZW1zID0gMSwKICAgICAgICAgICAgaW50IHBlcm1zID0gMDY0NCk7CiMgOTggIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfQ29tcGxleC5o IgogIGludCBjbG9zZSAodm9pZCk7CgoKCgogIGludCBhY3F1aXJlICh1X3Nob3J0IG4gPSAwLCBp bnQgZmxhZ3MgPSAwKSBjb25zdDsKCgogIGludCBhY3F1aXJlX3JlYWQgKHVfc2hvcnQgbiA9IDAs IGludCBmbGFncyA9IDApIGNvbnN0OwoKCiAgaW50IGFjcXVpcmVfd3JpdGUgKHVfc2hvcnQgbiA9 IDAsIGludCBmbGFncyA9IDApIGNvbnN0OwoKCiAgaW50IHRyeWFjcXVpcmUgKHVfc2hvcnQgbiA9 IDAsIGludCBmbGFncyA9IDApIGNvbnN0OwoKCiAgaW50IHRyeWFjcXVpcmVfcmVhZCAodV9zaG9y dCBuID0gMCwgaW50IGZsYWdzID0gMCkgY29uc3Q7CgoKICBpbnQgdHJ5YWNxdWlyZV93cml0ZSAo dV9zaG9ydCBuID0gMCwgaW50IGZsYWdzID0gMCkgY29uc3Q7CgoKICBpbnQgcmVsZWFzZSAodV9z aG9ydCBuID0gMCwgaW50IGZsYWdzID0gMCkgY29uc3Q7CgoKICBpbnQgb3AgKGludCB2YWwsIHVf c2hvcnQgbiA9IDAsIGludCBmbGFncyA9IDApIGNvbnN0OwogIGludCBvcCAoc2VtYnVmIG9wX3Zl Y1tdLCB1X3Nob3J0IG4pIGNvbnN0OwoKCiAgaW50IGNvbnRyb2wgKGludCBjbWQsIHNlbXVuIGFy ZywgdV9zaG9ydCBuID0gMCkgY29uc3Q7CiAgaW50IGNvbnRyb2wgKGludCBjbWQsIGludCB2YWx1 ZSA9IDAsIHVfc2hvcnQgbiA9IDApIGNvbnN0OwoKCiAgdXNpbmcgQUNFX1NWX1NlbWFwaG9yZV9T aW1wbGU6OmdldF9pZDsKICB1c2luZyBBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6cmVtb3ZlOwoK CiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZhdGU6 CiAgc3RhdGljIGNvbnN0IGludCBCSUdDT1VOVF87CiAgc3RhdGljIHNlbWJ1ZiBvcF9sb2NrX1sy XTsKICBzdGF0aWMgc2VtYnVmIG9wX2VuZGNyZWF0ZV9bMl07CiAgc3RhdGljIHNlbWJ1ZiBvcF9v cGVuX1sxXTsKICBzdGF0aWMgc2VtYnVmIG9wX2Nsb3NlX1szXTsKICBzdGF0aWMgc2VtYnVmIG9w X3VubG9ja19bMV07Cn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvU1ZfU2VtYXBob3JlX0NvbXBsZXguaSIgMQoKCgoKCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RyYWNlLmgiIDEKIyA3ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1ZfU2VtYXBob3JlX0Nv bXBsZXguaSIgMgoKaW5saW5lIGludApBQ0VfU1ZfU2VtYXBob3JlX0NvbXBsZXg6OmFjcXVpcmUg KHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9TVl9TZW1hcGhvcmVfU2ltcGxl OjphY3F1aXJlICgodV9zaG9ydCkgbiArIDIsIGZsYWdzKTsKfQoKaW5saW5lIGludApBQ0VfU1Zf U2VtYXBob3JlX0NvbXBsZXg6OmFjcXVpcmVfcmVhZCAodV9zaG9ydCBuLCBpbnQgZmxhZ3MpIGNv bnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogIHJldHVybiB0aGlzLT5hY3F1aXJlIChuLCBmbGFncyk7Cn0KCmlubGluZSBpbnQKQUNF X1NWX1NlbWFwaG9yZV9Db21wbGV4OjphY3F1aXJlX3dyaXRlICh1X3Nob3J0IG4sIGludCBmbGFn cykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogIHJldHVybiB0aGlzLT5hY3F1aXJlIChuLCBmbGFncyk7Cn0KCmlubGluZSBp bnQKQUNFX1NWX1NlbWFwaG9yZV9Db21wbGV4Ojp0cnlhY3F1aXJlICh1X3Nob3J0IG4sIGludCBm bGFncykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogIHJldHVybiBBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6dHJ5YWNxdWlyZSAo KHVfc2hvcnQpIG4gKyAyLCBmbGFncyk7Cn0KCmlubGluZSBpbnQKQUNFX1NWX1NlbWFwaG9yZV9D b21wbGV4Ojp0cnlhY3F1aXJlX3JlYWQgKHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25zdAp7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICByZXR1cm4gdGhpcy0+dHJ5YWNxdWlyZSAobiwgZmxhZ3MpOwp9CgppbmxpbmUgaW50CkFDRV9T Vl9TZW1hcGhvcmVfQ29tcGxleDo6dHJ5YWNxdWlyZV93cml0ZSAodV9zaG9ydCBuLCBpbnQgZmxh Z3MpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+dHJ5YWNxdWlyZSAobiwgZmxhZ3MpOwp9Cgpp bmxpbmUgaW50CkFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleDo6cmVsZWFzZSAodV9zaG9ydCBuLCBp bnQgZmxhZ3MpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICByZXR1cm4gQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6OnJlbGVhc2UgKCh1 X3Nob3J0KSBuICsgMiwgZmxhZ3MpOwp9CgppbmxpbmUgaW50CkFDRV9TVl9TZW1hcGhvcmVfQ29t cGxleDo6b3AgKGludCB2YWwsIHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25zdAp7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBBQ0VfU1ZfU2Vt YXBob3JlX1NpbXBsZTo6b3AgKHZhbCwgKHVfc2hvcnQpIG4gKyAyLCBmbGFncyk7Cn0KCmlubGlu ZSBpbnQKQUNFX1NWX1NlbWFwaG9yZV9Db21wbGV4OjpvcCAoc2VtYnVmIG9wX3ZlY1tdLCB1X3No b3J0IG4pIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgcmV0dXJuIEFDRV9TVl9TZW1hcGhvcmVfU2ltcGxlOjpvcCAob3BfdmVjLCAodV9zaG9y dCkgbiArIDIpOwp9CgppbmxpbmUgaW50CkFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleDo6Y29udHJv bCAoaW50IGNtZCwgc2VtdW4gYXJnLCB1X3Nob3J0IG4pIGNvbnN0CnsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gQUNFX1NWX1NlbWFw aG9yZV9TaW1wbGU6OmNvbnRyb2wgKGNtZCwgYXJnLCAodV9zaG9ydCkgbiArIDIpOwp9Cgppbmxp bmUgaW50CkFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleDo6Y29udHJvbCAoaW50IGNtZCwgaW50IHZh bHVlLCB1X3Nob3J0IG4pIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICByZXR1cm4gQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6OmNvbnRy b2wgKGNtZCwgdmFsdWUsICh1X3Nob3J0KSBuICsgMik7Cn0KIyAxNTIgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfQ29tcGxleC5oIiAy CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9z dC5oIiAxCiMgMTU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvU1ZfU2VtYXBob3JlX0NvbXBsZXguaCIgMgojIDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIgMgoKCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuaCIgMQoj IDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3Vu ZGVkX1NldC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9wcmUuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvVW5ib3VuZGVkX1NldC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Ob2RlLmgiIDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL05vZGUuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL05vZGUuaCIgMgoKIyAxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMg MTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Ob2RlLmgi IDIKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIEFDRV9VbmJvdW5kZWRfU2V0Owp0ZW1w bGF0ZSA8Y2xhc3MgVD4gY2xhc3MgQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I7CnRlbXBsYXRl IDxjbGFzcyBUPiBjbGFzcyBBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9JdGVyYXRvcjsKdGVtcGxh dGUgPGNsYXNzIFQ+IGNsYXNzIEFDRV9VbmJvdW5kZWRfUXVldWU7CnRlbXBsYXRlIDxjbGFzcyBU PiBjbGFzcyBBQ0VfVW5ib3VuZGVkX1F1ZXVlX0l0ZXJhdG9yOwp0ZW1wbGF0ZSA8Y2xhc3MgVD4g Y2xhc3MgQUNFX1VuYm91bmRlZF9TdGFjazsKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIEFDRV9V bmJvdW5kZWRfU3RhY2tfSXRlcmF0b3I7CgoKCgoKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIEFD RV9Ob2RlCnsKcHVibGljOgogIGZyaWVuZCBjbGFzcyBBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+Owog IGZyaWVuZCBjbGFzcyBBQ0VfVW5ib3VuZGVkX1F1ZXVlX0l0ZXJhdG9yPFQ+OwogIGZyaWVuZCBj bGFzcyBBQ0VfVW5ib3VuZGVkX1NldDxUPjsKICBmcmllbmQgY2xhc3MgQUNFX1VuYm91bmRlZF9T ZXRfSXRlcmF0b3I8VD47CiAgZnJpZW5kIGNsYXNzIEFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0 ZXJhdG9yPFQ+OwogIGZyaWVuZCBjbGFzcyBBQ0VfVW5ib3VuZGVkX1N0YWNrPFQ+OwogIGZyaWVu ZCBjbGFzcyBBQ0VfVW5ib3VuZGVkX1N0YWNrX0l0ZXJhdG9yPFQ+OwoKCgogIH5BQ0VfTm9kZSAo dm9pZCk7CgoKcHJpdmF0ZToKCiAgQUNFX05vZGUgKGNvbnN0IFQgJmksIEFDRV9Ob2RlPFQ+ICpu KTsKICBBQ0VfTm9kZSAoQUNFX05vZGU8VD4gKm4gPSAwLCBpbnQgPSAwKTsKICBBQ0VfTm9kZSAo Y29uc3QgQUNFX05vZGU8VD4gJm4pOwoKCiAgQUNFX05vZGU8VD4gKm5leHRfOwoKCiAgVCBpdGVt XzsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9Ob2RlLmNwcCIgMQoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL05vZGUuaCIgMQojIDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9Ob2RlLmNwcCIgMgoKCgoKCmlubGluZSBjb25zdCBjaGFyKiBnZXRf cmNzaWRfYWNlX05vZGUgKGNvbnN0IGNoYXIqKSB7IHJldHVybiAiTm9kZS5jcHAsdiA0LjEgMjAw MS8wMy8yNiAyMToxODo1MCBjb3J5YW4gRXhwIiA7IH0gc3RhdGljIGNvbnN0IGNoYXIqIHJjc2lk X2FjZV9Ob2RlID0gZ2V0X3Jjc2lkX2FjZV9Ob2RlICggcmNzaWRfYWNlX05vZGUgKSA7CgoKCgog IHRlbXBsYXRlIDxjbGFzcyBUPgpBQ0VfTm9kZTxUPjo6fkFDRV9Ob2RlICh2b2lkKQp7Cn0KCgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4KQUNFX05vZGU8VD46OkFDRV9Ob2RlIChjb25zdCBUICZpLCBBQ0Vf Tm9kZTxUPiAqbikKICA6IG5leHRfIChuKSwKICAgIGl0ZW1fIChpKQp7Cgp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4KQUNFX05vZGU8VD46OkFDRV9Ob2RlIChBQ0VfTm9kZTxUPiAqbiwgaW50KQogIDog bmV4dF8gKG4pCnsKCn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpBQ0VfTm9kZTxUPjo6QUNFX05vZGUg KGNvbnN0IEFDRV9Ob2RlPFQ+ICZzKQogIDogbmV4dF8gKHMubmV4dF8pLAogICAgaXRlbV8gKHMu aXRlbV8pCnsKCn0KIyA3MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL05vZGUuaCIgMgoKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA3NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL05vZGUuaCIgMgojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1NldC5oIiAyCgoKCgoKY2xhc3Mg QUNFX0FsbG9jYXRvcjsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEFDRV9VbmJvdW5k ZWRfU2V0X0l0ZXJhdG9yCnsKcHVibGljOgoKICBBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvciAo QUNFX1VuYm91bmRlZF9TZXQ8VD4gJnMsIGludCBlbmQgPSAwKTsKCgoKCgogIGludCBuZXh0IChU ICombmV4dF9pdGVtKTsKCgoKICBpbnQgYWR2YW5jZSAodm9pZCk7CgoKCiAgaW50IGZpcnN0ICh2 b2lkKTsKCgogIGludCBkb25lICh2b2lkKSBjb25zdDsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29u c3Q7CgoKCgogIEFDRV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+IG9wZXJhdG9yKysgKGludCk7 CgoKICBBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPiYgb3BlcmF0b3IrKyAodm9pZCk7CgoK ICBUJiBvcGVyYXRvciogKHZvaWQpOwoKCiAgaW50IG9wZXJhdG9yPT0gKGNvbnN0IEFDRV9VbmJv dW5kZWRfU2V0X0l0ZXJhdG9yPFQ+ICYpIGNvbnN0OwogIGludCBvcGVyYXRvciE9IChjb25zdCBB Q0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPiAmKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7 fTsKCnByaXZhdGU6CgoKICBBQ0VfTm9kZTxUPiAqY3VycmVudF87CgoKICBBQ0VfVW5ib3VuZGVk X1NldDxUPiAqc2V0XzsKfTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEFDRV9VbmJv dW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9yCnsKcHVibGljOgoKICBBQ0VfVW5ib3VuZGVkX1NldF9D b25zdF9JdGVyYXRvciAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJnMsIGludCBlbmQgPSAw KTsKCgoKCgogIGludCBuZXh0IChUICombmV4dF9pdGVtKTsKCgoKICBpbnQgYWR2YW5jZSAodm9p ZCk7CgoKCiAgaW50IGZpcnN0ICh2b2lkKTsKCgogIGludCBkb25lICh2b2lkKSBjb25zdDsKCgog IHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKCgogIEFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0 ZXJhdG9yPFQ+IG9wZXJhdG9yKysgKGludCk7CgoKICBBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9J dGVyYXRvcjxUPiYgb3BlcmF0b3IrKyAodm9pZCk7CgoKICBUJiBvcGVyYXRvciogKHZvaWQpOwoK CiAgaW50IG9wZXJhdG9yPT0gKGNvbnN0IEFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9y PFQ+ICYpIGNvbnN0OwogIGludCBvcGVyYXRvciE9IChjb25zdCBBQ0VfVW5ib3VuZGVkX1NldF9D b25zdF9JdGVyYXRvcjxUPiAmKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZhdGU6 CgoKICBBQ0VfTm9kZTxUPiAqY3VycmVudF87CgoKICBjb25zdCBBQ0VfVW5ib3VuZGVkX1NldDxU PiAqc2V0XzsKfTsKIyAxNTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9VbmJvdW5kZWRfU2V0LmgiCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBBQ0VfVW5i b3VuZGVkX1NldAp7CnB1YmxpYzoKICBmcmllbmQgY2xhc3MgQUNFX1VuYm91bmRlZF9TZXRfSXRl cmF0b3I8VD47CiAgZnJpZW5kIGNsYXNzIEFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9y PFQ+OwoKCiAgdHlwZWRlZiBBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPiBJVEVSQVRPUjsK ICB0eXBlZGVmIEFDRV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+IGl0ZXJhdG9yOwogIHR5cGVk ZWYgQUNFX1VuYm91bmRlZF9TZXRfQ29uc3RfSXRlcmF0b3I8VD4gQ09OU1RfSVRFUkFUT1I7CiAg dHlwZWRlZiBBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9JdGVyYXRvcjxUPiBjb25zdF9pdGVyYXRv cjsKCgoKCiAgQUNFX1VuYm91bmRlZF9TZXQgKEFDRV9BbGxvY2F0b3IgKmFsbG9jID0gMCk7CgoK ICBBQ0VfVW5ib3VuZGVkX1NldCAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJik7CgoKICB2 b2lkIG9wZXJhdG9yPSAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJik7CgoKICB+QUNFX1Vu Ym91bmRlZF9TZXQgKHZvaWQpOwoKCgoKICBpbnQgaXNfZW1wdHkgKHZvaWQpIGNvbnN0OwoKCiAg aW50IGlzX2Z1bGwgKHZvaWQpIGNvbnN0OwojIDE5NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuaCIKICBpbnQgaW5zZXJ0IChjb25z dCBUICZuZXdfaXRlbSk7CgoKCgoKCiAgaW50IHJlbW92ZSAoY29uc3QgVCAmaXRlbSk7CgoKCiAg aW50IGZpbmQgKGNvbnN0IFQgJml0ZW0pIGNvbnN0OwoKCiAgc2l6ZV90IHNpemUgKHZvaWQpIGNv bnN0OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHZvaWQgcmVzZXQgKHZvaWQpOwoK CiAgQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD4gYmVnaW4gKHZvaWQpOwogIEFDRV9VbmJv dW5kZWRfU2V0X0l0ZXJhdG9yPFQ+IGVuZCAodm9pZCk7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpw cml2YXRlOgoKCiAgaW50IGluc2VydF90YWlsIChjb25zdCBUICZpdGVtKTsKCgogIHZvaWQgZGVs ZXRlX25vZGVzICh2b2lkKTsKCgogIHZvaWQgY29weV9ub2RlcyAoY29uc3QgQUNFX1VuYm91bmRl ZF9TZXQ8VD4gJik7CgoKICBBQ0VfTm9kZTxUPiAqaGVhZF87CgoKICBzaXplX3QgY3VyX3NpemVf OwoKCiAgQUNFX0FsbG9jYXRvciAqYWxsb2NhdG9yXzsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfU2V0LmlubCIgMQoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGludApBQ0VfVW5ib3VuZGVkX1NldDxUPjo6aXNfZW1w dHkgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICByZXR1cm4gdGhpcy0+aGVhZF8gPT0gdGhpcy0+aGVhZF8tPm5leHRfOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGludApBQ0VfVW5ib3VuZGVkX1NldDxUPjo6aXNfZnVs bCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgcmV0dXJuIDA7Cn0KIyAyNDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfU2V0LmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1NldC5jcHAiIDEKCgoK CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJv dW5kZWRfU2V0LmgiIDEKIyA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvVW5ib3VuZGVkX1NldC5jcHAiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX0Jhc2UuaCIgMQojIDggIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfU2V0LmNwcCIgMgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNn LmgiIDEKIyA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv VW5ib3VuZGVkX1NldC5jcHAiIDIKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuY3BwIgppbmxpbmUgY29uc3QgY2hhciogZ2V0 X3Jjc2lkX2FjZV9VbmJvdW5kZWRfU2V0IChjb25zdCBjaGFyKikgeyByZXR1cm4gIlVuYm91bmRl ZF9TZXQuY3BwLHYgNC4yIDIwMDEvMDMvMjcgMDc6NTA6MTAgZG9jY3ZzIEV4cCIgOyB9IHN0YXRp YyBjb25zdCBjaGFyKiByY3NpZF9hY2VfVW5ib3VuZGVkX1NldCA9IGdldF9yY3NpZF9hY2VfVW5i b3VuZGVkX1NldCAoIHJjc2lkX2FjZV9VbmJvdW5kZWRfU2V0ICkgOwoKCgogIHRlbXBsYXRlIDxj bGFzcyBUPiBzaXplX3QKQUNFX1VuYm91bmRlZF9TZXQ8VD46OnNpemUgKHZvaWQpIGNvbnN0CnsK CiAgcmV0dXJuIHRoaXMtPmN1cl9zaXplXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0Vf VW5ib3VuZGVkX1NldDxUPjo6aW5zZXJ0X3RhaWwgKGNvbnN0IFQgJml0ZW0pCnsKCiAgQUNFX05v ZGU8VD4gKnRlbXA7CgoKICB0aGlzLT5oZWFkXy0+aXRlbV8gPSBpdGVtOwoKCiAgZG8geyB0ZW1w ID0gKEFDRV9Ob2RlPFQ+KikgdGhpcy0+YWxsb2NhdG9yXy0+bWFsbG9jIChzaXplb2YgKEFDRV9O b2RlPFQ+KSk7IGlmICh0ZW1wID09IDApIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyBy ZXR1cm4gLTE7fSBlbHNlIHsgbmV3ICh0ZW1wKSBBQ0VfTm9kZTxUPiAodGhpcy0+aGVhZF8tPm5l eHRfKTsgfSB9IHdoaWxlICgwKTsKCgoKCiAgdGhpcy0+aGVhZF8tPm5leHRfID0gdGVtcDsKCgog IHRoaXMtPmhlYWRfID0gdGVtcDsKCiAgdGhpcy0+Y3VyX3NpemVfKys7CiAgcmV0dXJuIDA7Cn0K CnRlbXBsYXRlIDxjbGFzcyBUPiB2b2lkCkFDRV9VbmJvdW5kZWRfU2V0PFQ+OjpyZXNldCAodm9p ZCkKewogICAgICAgICAgICAgICAgICAgICA7CgogIHRoaXMtPmRlbGV0ZV9ub2RlcyAoKTsKfQoK dGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQKQUNFX1VuYm91bmRlZF9TZXQ8VD46OmR1bXAgKHZvaWQp IGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBk byB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cg KmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9z ZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3Vu ZGVkX1NldC5jcHAiLCA2NiwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcs ICJcbj09PT1cbiglUHwldHwleCkiLCB0aGlzKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBpbnQgX19h Y2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBB Q0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuY3Bw IiwgNjcsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiXG5oZWFkXyA9 ICV1IiwgdGhpcy0+aGVhZF8pOyB9IHdoaWxlICgwKTsKICBkbyB7IGludCBfX2FjZV9lcnJvciA9 IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNn OjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1NldC5jcHAiLCA2OCwgMCwg X19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbmhlYWRfLT5uZXh0XyA9ICV1 IiwgdGhpcy0+aGVhZF8tPm5leHRfKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBpbnQgX19hY2VfZXJy b3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9n X01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuY3BwIiwgNjks IDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiXG5jdXJfc2l6ZV8gPSAl ZFxuIiwgdGhpcy0+Y3VyX3NpemVfKTsgfSB3aGlsZSAoMCk7CgogIFQgKml0ZW0gPSAwOwoKICBz aXplX3QgY291bnQgPSAxOwoKCiAgZm9yIChBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPiBp dGVyICgqKEFDRV9VbmJvdW5kZWRfU2V0PFQ+ICopIHRoaXMpOwogICAgICAgaXRlci5uZXh0IChp dGVtKSAhPSAwOwogICAgICAgaXRlci5hZHZhbmNlICgpKQogICAgZG8geyBpbnQgX19hY2VfZXJy b3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9n X01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuY3BwIiwgNzks IDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiY291bnQgPSAlZFxuIiwg Y291bnQrKyk7IH0gd2hpbGUgKDApOwoKICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6 bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j ZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1NldC5jcHAiLCA4MSwgMCwgX19hY2VfZXJy b3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICI9PT09XG4iKTsgfSB3aGlsZSAoMCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBUPiB2b2lkCkFDRV9VbmJvdW5kZWRfU2V0PFQ+Ojpjb3B5X25vZGVzIChj b25zdCBBQ0VfVW5ib3VuZGVkX1NldDxUPiAmdXMpCnsKICBmb3IgKEFDRV9Ob2RlPFQ+ICpjdXJy ID0gdXMuaGVhZF8tPm5leHRfOwogICAgICAgY3VyciAhPSB1cy5oZWFkXzsKICAgICAgIGN1cnIg PSBjdXJyLT5uZXh0XykKICAgIHRoaXMtPmluc2VydF90YWlsIChjdXJyLT5pdGVtXyk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBUPiB2b2lkCkFDRV9VbmJvdW5kZWRfU2V0PFQ+OjpkZWxldGVfbm9kZXMg KHZvaWQpCnsKICBBQ0VfTm9kZTxUPiAqY3VyciA9IHRoaXMtPmhlYWRfLT5uZXh0XzsKCgoKICB3 aGlsZSAoY3VyciAhPSB0aGlzLT5oZWFkXykKICAgIHsKICAgICAgQUNFX05vZGU8VD4gKnRlbXAg PSBjdXJyOwogICAgICBjdXJyID0gY3Vyci0+bmV4dF87CiAgICAgIGRvIHsgaWYgKHRlbXApIHsg KHRlbXApLT5+QUNFX05vZGUgKCk7IHRoaXMtPmFsbG9jYXRvcl8tPmZyZWUgKHRlbXApOyB9IH0g d2hpbGUgKDApOwoKCgogICAgICB0aGlzLT5jdXJfc2l6ZV8tLTsKICAgIH0KCgogIHRoaXMtPmhl YWRfLT5uZXh0XyA9IHRoaXMtPmhlYWRfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KQUNFX1VuYm91 bmRlZF9TZXQ8VD46On5BQ0VfVW5ib3VuZGVkX1NldCAodm9pZCkKewoKCiAgdGhpcy0+ZGVsZXRl X25vZGVzICgpOwoKCiAgZG8geyBpZiAoaGVhZF8pIHsgKGhlYWRfKS0+fkFDRV9Ob2RlICgpOyB0 aGlzLT5hbGxvY2F0b3JfLT5mcmVlIChoZWFkXyk7IH0gfSB3aGlsZSAoMCk7CgoKCiAgdGhpcy0+ aGVhZF8gPSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KQUNFX1VuYm91bmRlZF9TZXQ8VD46OkFD RV9VbmJvdW5kZWRfU2V0IChBQ0VfQWxsb2NhdG9yICphbGxvYykKICA6IGhlYWRfICgwKSwKICAg IGN1cl9zaXplXyAoMCksCiAgICBhbGxvY2F0b3JfIChhbGxvYykKewoKCiAgaWYgKHRoaXMtPmFs bG9jYXRvcl8gPT0gMCkKICAgIHRoaXMtPmFsbG9jYXRvcl8gPSBBQ0VfQWxsb2NhdG9yOjppbnN0 YW5jZSAoKTsKCiAgZG8geyB0aGlzLT5oZWFkXyA9IChBQ0VfTm9kZTxUPiopIHRoaXMtPmFsbG9j YXRvcl8tPm1hbGxvYyAoc2l6ZW9mIChBQ0VfTm9kZTxUPikpOyBpZiAodGhpcy0+aGVhZF8gPT0g MCkgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjt9IGVsc2UgeyBuZXcgKHRo aXMtPmhlYWRfKSBBQ0VfTm9kZTxUPjsgfSB9IHdoaWxlICgwKTsKCgoKICB0aGlzLT5oZWFkXy0+ bmV4dF8gPSB0aGlzLT5oZWFkXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CkFDRV9VbmJvdW5kZWRf U2V0PFQ+OjpBQ0VfVW5ib3VuZGVkX1NldCAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJnVz KQogIDogaGVhZF8gKDApLAogICAgY3VyX3NpemVfICgwKSwKICAgIGFsbG9jYXRvcl8gKHVzLmFs bG9jYXRvcl8pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgaWYgKHRoaXMtPmFsbG9jYXRvcl8gPT0gMCkKICAgIHRoaXMtPmFsbG9j YXRvcl8gPSBBQ0VfQWxsb2NhdG9yOjppbnN0YW5jZSAoKTsKCiAgZG8geyB0aGlzLT5oZWFkXyA9 IChBQ0VfTm9kZTxUPiopIHRoaXMtPmFsbG9jYXRvcl8tPm1hbGxvYyAoc2l6ZW9mIChBQ0VfTm9k ZTxUPikpOyBpZiAodGhpcy0+aGVhZF8gPT0gMCkgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g MTI7IHJldHVybjt9IGVsc2UgeyBuZXcgKHRoaXMtPmhlYWRfKSBBQ0VfTm9kZTxUPjsgfSB9IHdo aWxlICgwKTsKCgogIHRoaXMtPmhlYWRfLT5uZXh0XyA9IHRoaXMtPmhlYWRfOwogIHRoaXMtPmNv cHlfbm9kZXMgKHVzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQKQUNFX1VuYm91bmRlZF9T ZXQ8VD46Om9wZXJhdG9yPSAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJnVzKQp7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAodGhpcyAh PSAmdXMpCiAgICB7CiAgICAgIHRoaXMtPmRlbGV0ZV9ub2RlcyAoKTsKICAgICAgdGhpcy0+Y29w eV9ub2RlcyAodXMpOwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5k ZWRfU2V0PFQ+OjpmaW5kIChjb25zdCBUICZpdGVtKSBjb25zdAp7CgoKICB0aGlzLT5oZWFkXy0+ aXRlbV8gPSBpdGVtOwoKICBBQ0VfTm9kZTxUPiAqdGVtcCA9IHRoaXMtPmhlYWRfLT5uZXh0XzsK CgogIHdoaWxlICghKHRlbXAtPml0ZW1fID09IGl0ZW0pKQogICAgdGVtcCA9IHRlbXAtPm5leHRf OwoKCgogIHJldHVybiB0ZW1wID09IHRoaXMtPmhlYWRfID8gLTEgOiAwOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5kZWRfU2V0PFQ+OjppbnNlcnQgKGNvbnN0IFQgJml0ZW0p CnsKCiAgaWYgKHRoaXMtPmZpbmQgKGl0ZW0pID09IDApCiAgICByZXR1cm4gMTsKICBlbHNlCiAg ICByZXR1cm4gdGhpcy0+aW5zZXJ0X3RhaWwgKGl0ZW0pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4g aW50CkFDRV9VbmJvdW5kZWRfU2V0PFQ+OjpyZW1vdmUgKGNvbnN0IFQgJml0ZW0pCnsKCgoKICB0 aGlzLT5oZWFkXy0+aXRlbV8gPSBpdGVtOwoKICBBQ0VfTm9kZTxUPiAqY3VyciA9IHRoaXMtPmhl YWRfOwoKICB3aGlsZSAoIShjdXJyLT5uZXh0Xy0+aXRlbV8gPT0gaXRlbSkpCiAgICBjdXJyID0g Y3Vyci0+bmV4dF87CgogIGlmIChjdXJyLT5uZXh0XyA9PSB0aGlzLT5oZWFkXykKICAgIHJldHVy biAtMTsKICBlbHNlCiAgICB7CiAgICAgIEFDRV9Ob2RlPFQ+ICp0ZW1wID0gY3Vyci0+bmV4dF87 CgogICAgICBjdXJyLT5uZXh0XyA9IHRlbXAtPm5leHRfOwogICAgICB0aGlzLT5jdXJfc2l6ZV8t LTsKICAgICAgZG8geyBpZiAodGVtcCkgeyAodGVtcCktPn5BQ0VfTm9kZSAoKTsgdGhpcy0+YWxs b2NhdG9yXy0+ZnJlZSAodGVtcCk7IH0gfSB3aGlsZSAoMCk7CgoKCiAgICAgIHJldHVybiAwOwog ICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD4K QUNFX1VuYm91bmRlZF9TZXQ8VD46OmJlZ2luICh2b2lkKQp7CgogIHJldHVybiBBQ0VfVW5ib3Vu ZGVkX1NldF9JdGVyYXRvcjxUPiAoKnRoaXMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gQUNFX1Vu Ym91bmRlZF9TZXRfSXRlcmF0b3I8VD4KQUNFX1VuYm91bmRlZF9TZXQ8VD46OmVuZCAodm9pZCkK ewoKICByZXR1cm4gQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD4gKCp0aGlzLCAxKTsKfQoK CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdm9pZApBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxU Pjo6ZHVtcCAodm9pZCkgY29uc3QKewoKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CkFDRV9VbmJvdW5k ZWRfU2V0X0l0ZXJhdG9yPFQ+OjpBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvciAoQUNFX1VuYm91 bmRlZF9TZXQ8VD4gJnMsIGludCBlbmQpCiAgOiBjdXJyZW50XyAoZW5kID09IDAgPyBzLmhlYWRf LT5uZXh0XyA6IHMuaGVhZF8gKSwKICAgIHNldF8gKCZzKQp7Cgp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4gaW50CkFDRV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+OjphZHZhbmNlICh2b2lkKQp7Cgog IHRoaXMtPmN1cnJlbnRfID0gdGhpcy0+Y3VycmVudF8tPm5leHRfOwogIHJldHVybiB0aGlzLT5j dXJyZW50XyAhPSB0aGlzLT5zZXRfLT5oZWFkXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApB Q0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPjo6Zmlyc3QgKHZvaWQpCnsKCiAgdGhpcy0+Y3Vy cmVudF8gPSB0aGlzLT5zZXRfLT5oZWFkXy0+bmV4dF87CiAgcmV0dXJuIHRoaXMtPmN1cnJlbnRf ICE9IHRoaXMtPnNldF8tPmhlYWRfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJv dW5kZWRfU2V0X0l0ZXJhdG9yPFQ+Ojpkb25lICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIHRoaXMtPmN1 cnJlbnRfID09IHRoaXMtPnNldF8tPmhlYWRfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW50CkFD RV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+OjpuZXh0IChUIComaXRlbSkKewoKICBpZiAodGhp cy0+Y3VycmVudF8gPT0gdGhpcy0+c2V0Xy0+aGVhZF8pCiAgICByZXR1cm4gMDsKICBlbHNlCiAg ICB7CiAgICAgIGl0ZW0gPSAmdGhpcy0+Y3VycmVudF8tPml0ZW1fOwogICAgICByZXR1cm4gMTsK ICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IEFDRV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+ CkFDRV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+OjpvcGVyYXRvcisrIChpbnQpCnsKCiAgQUNF X1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD4gcmV0diAoKnRoaXMpOwoKCgogIHRoaXMtPmFkdmFu Y2UgKCk7CiAgcmV0dXJuIHJldHY7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBBQ0VfVW5ib3VuZGVk X1NldF9JdGVyYXRvcjxUPiYKQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD46Om9wZXJhdG9y KysgKHZvaWQpCnsKCgoKCiAgdGhpcy0+YWR2YW5jZSAoKTsKICByZXR1cm4gKnRoaXM7Cn0KCnRl bXBsYXRlIDxjbGFzcyBUPiBUJgpBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPjo6b3BlcmF0 b3IqICh2b2lkKQp7CgogIFQgKnJldHYgPSAwOwoKICBpbnQgcmVzdWx0ID0gdGhpcy0+bmV4dCAo cmV0dik7CiAgZG8geyBpZighKHJlc3VsdCAhPSAwKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBBQ0Vf T1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5z dGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuY3BwIiwgMzMzLCAtMSwgX19hY2VfZXJyb3IsIGFj ZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2Fs bGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBs aW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJyZXN1bHQgIT0gMCIsIC0x KTsgfSB9IHdoaWxlICgwKTsKICBkbyB7IH0gd2hpbGUgKCZyZXN1bHQgPT0gMCk7CgogIHJldHVy biAqcmV0djsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1NldF9JdGVy YXRvcjxUPjo6b3BlcmF0b3I9PSAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD4g JnJocykgY29uc3QKewoKICByZXR1cm4gKHRoaXMtPnNldF8gPT0gcmhzLnNldF8gJiYgdGhpcy0+ Y3VycmVudF8gPT0gcmhzLmN1cnJlbnRfKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0Vf VW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPjo6b3BlcmF0b3IhPSAoY29uc3QgQUNFX1VuYm91bmRl ZF9TZXRfSXRlcmF0b3I8VD4gJnJocykgY29uc3QKewoKICByZXR1cm4gKHRoaXMtPnNldF8gIT0g cmhzLnNldF8gfHwgdGhpcy0+Y3VycmVudF8gIT0gcmhzLmN1cnJlbnRfKTsKfQoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gdm9pZApBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9JdGVyYXRvcjxUPjo6ZHVt cCAodm9pZCkgY29uc3QKewoKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CkFDRV9VbmJvdW5kZWRfU2V0 X0NvbnN0X0l0ZXJhdG9yPFQ+OjpBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9JdGVyYXRvciAoY29u c3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJnMsIGludCBlbmQpCiAgOiBjdXJyZW50XyAoZW5kID09 IDAgPyBzLmhlYWRfLT5uZXh0XyA6IHMuaGVhZF8gKSwKICAgIHNldF8gKCZzKQp7Cgp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9yPFQ+Ojph ZHZhbmNlICh2b2lkKQp7CgogIHRoaXMtPmN1cnJlbnRfID0gdGhpcy0+Y3VycmVudF8tPm5leHRf OwogIHJldHVybiB0aGlzLT5jdXJyZW50XyAhPSB0aGlzLT5zZXRfLT5oZWFkXzsKfQoKdGVtcGxh dGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9JdGVyYXRvcjxUPjo6Zmly c3QgKHZvaWQpCnsKCiAgdGhpcy0+Y3VycmVudF8gPSB0aGlzLT5zZXRfLT5oZWFkXy0+bmV4dF87 CiAgcmV0dXJuIHRoaXMtPmN1cnJlbnRfICE9IHRoaXMtPnNldF8tPmhlYWRfOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9yPFQ+Ojpkb25l ICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIHRoaXMtPmN1cnJlbnRfID09IHRoaXMtPnNldF8t PmhlYWRfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0 X0l0ZXJhdG9yPFQ+OjpuZXh0IChUIComaXRlbSkKewoKICBpZiAodGhpcy0+Y3VycmVudF8gPT0g dGhpcy0+c2V0Xy0+aGVhZF8pCiAgICByZXR1cm4gMDsKICBlbHNlCiAgICB7CiAgICAgIGl0ZW0g PSAmdGhpcy0+Y3VycmVudF8tPml0ZW1fOwogICAgICByZXR1cm4gMTsKICAgIH0KfQoKdGVtcGxh dGUgPGNsYXNzIFQ+IEFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9yPFQ+CkFDRV9VbmJv dW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9yPFQ+OjpvcGVyYXRvcisrIChpbnQpCnsKCiAgQUNFX1Vu Ym91bmRlZF9TZXRfQ29uc3RfSXRlcmF0b3I8VD4gcmV0diAoKnRoaXMpOwoKCgogIHRoaXMtPmFk dmFuY2UgKCk7CiAgcmV0dXJuIHJldHY7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBBQ0VfVW5ib3Vu ZGVkX1NldF9Db25zdF9JdGVyYXRvcjxUPiYKQUNFX1VuYm91bmRlZF9TZXRfQ29uc3RfSXRlcmF0 b3I8VD46Om9wZXJhdG9yKysgKHZvaWQpCnsKCgoKCiAgdGhpcy0+YWR2YW5jZSAoKTsKICByZXR1 cm4gKnRoaXM7Cn0KIyAyNTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9VbmJvdW5kZWRfU2V0LmgiIDIKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMjU3ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1NldC5oIiAyCiMgMzEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZW1vcnlfUG9v bC5oIiAyCiMgNDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9NZW1vcnlfUG9vbC5oIgpjbGFzcyBBQ0VfU2Jya19NZW1vcnlfUG9vbF9PcHRpb25zCnsKfTsK CgoKCgoKY2xhc3MgQUNFX1NicmtfTWVtb3J5X1Bvb2wKewpwdWJsaWM6CiAgdHlwZWRlZiBBQ0Vf U2Jya19NZW1vcnlfUG9vbF9PcHRpb25zIE9QVElPTlM7CgoKICBBQ0VfU2Jya19NZW1vcnlfUG9v bCAoY29uc3QgQUNFX1RDSEFSICpiYWNraW5nX3N0b3JlX25hbWUgPSAwLAogICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBPUFRJT05TICpvcHRpb25zID0gMCk7CgogIHZpcnR1YWwgfkFDRV9T YnJrX01lbW9yeV9Qb29sICh2b2lkKTsKCgoKICB2aXJ0dWFsIHZvaWQgKmluaXRfYWNxdWlyZSAo c2l6ZV90IG5ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICZyb3Vu ZGVkX2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJmZpcnN0X3RpbWUp OwoKCgogIHZpcnR1YWwgdm9pZCAqYWNxdWlyZSAoc2l6ZV90IG5ieXRlcywKICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCAmcm91bmRlZF9ieXRlcyk7CgoKICB2aXJ0dWFsIGludCByZWxl YXNlICh2b2lkKTsKCgoKCgoKICB2aXJ0dWFsIGludCBzeW5jIChzc2l6ZV90IGxlbiA9IC0xLCBp bnQgZmxhZ3MgPSA0KTsKCgoKICB2aXJ0dWFsIGludCBzeW5jICh2b2lkICphZGRyLCBzaXplX3Qg bGVuLCBpbnQgZmxhZ3MgPSA0KTsKCgoKCgoKICB2aXJ0dWFsIGludCBwcm90ZWN0IChzc2l6ZV90 IGxlbiA9IC0xLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CgoKCiAgdmlydHVhbCBpbnQgcHJvdGVj dCAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3QgPSAoMHgxfDB4MikpOwoKCiAgdmly dHVhbCB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9OwoKcHJvdGVj dGVkOgoKCiAgdmlydHVhbCBzaXplX3Qgcm91bmRfdXAgKHNpemVfdCBuYnl0ZXMpOwp9OwojIDEy MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Q b29sLmgiCmNsYXNzIEFDRV9TaGFyZWRfTWVtb3J5X1Bvb2xfT3B0aW9ucwp7CnB1YmxpYzoKCiAg QUNFX1NoYXJlZF9NZW1vcnlfUG9vbF9PcHRpb25zIChjb25zdCBjaGFyICpiYXNlX2FkZHIgPSAo KGNoYXIgKikgMHg4MDAwMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgbWF4X3NlZ21lbnRzID0gNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBmaWxlX3Blcm1zID0gMDY0NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9mZl90IG1pbmltdW1fYnl0ZXMgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IHNlZ21lbnRfc2l6ZSA9IDEwMjQgKiAxMjgpOwoKCiAgY29uc3QgY2hhciAq YmFzZV9hZGRyXzsKCgogIHNpemVfdCBtYXhfc2VnbWVudHNfOwoKCiAgb2ZmX3QgbWluaW11bV9i eXRlc187CgoKICBzaXplX3QgZmlsZV9wZXJtc187CgoKICBzaXplX3Qgc2VnbWVudF9zaXplXzsK fTsKIyAxNTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9N ZW1vcnlfUG9vbC5oIgpjbGFzcyBBQ0VfU2hhcmVkX01lbW9yeV9Qb29sIDogcHVibGljIEFDRV9F dmVudF9IYW5kbGVyCnsKcHVibGljOgogIHR5cGVkZWYgQUNFX1NoYXJlZF9NZW1vcnlfUG9vbF9P cHRpb25zIE9QVElPTlM7CgoKICBBQ0VfU2hhcmVkX01lbW9yeV9Qb29sIChjb25zdCBBQ0VfVENI QVIgKmJhY2tpbmdfc3RvcmVfbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgT1BUSU9OUyAqb3B0aW9ucyA9IDApOwoKICB2aXJ0dWFsIH5BQ0VfU2hhcmVkX01lbW9yeV9Q b29sICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCAqaW5pdF9hY3F1aXJlIChzaXplX3QgbmJ5dGVz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgJnJvdW5kZWRfYnl0ZXMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmZmlyc3RfdGltZSk7CgoKCgoKCgogIHZp cnR1YWwgdm9pZCAqYWNxdWlyZSAoc2l6ZV90IG5ieXRlcywKICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCAmcm91bmRlZF9ieXRlcyk7CgoKICB2aXJ0dWFsIGludCByZWxlYXNlICh2b2lk KTsKCgoKICB2aXJ0dWFsIGludCBzeW5jIChzc2l6ZV90IGxlbiA9IC0xLCBpbnQgZmxhZ3MgPSA0 KTsKCgogIHZpcnR1YWwgaW50IHN5bmMgKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBmbGFn cyA9IDQpOwoKCgoKCgogIHZpcnR1YWwgaW50IHByb3RlY3QgKHNzaXplX3QgbGVuID0gLTEsIGlu dCBwcm90ID0gKDB4MXwweDIpKTsKCgoKICB2aXJ0dWFsIGludCBwcm90ZWN0ICh2b2lkICphZGRy LCBzaXplX3QgbGVuLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CgoKICB2aXJ0dWFsIHZvaWQgZHVt cCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6CgoKICB2aXJ0 dWFsIHNpemVfdCByb3VuZF91cCAoc2l6ZV90IG5ieXRlcyk7CgoKCgoKCiAgdmlydHVhbCBpbnQg Y29tbWl0X2JhY2tpbmdfc3RvcmVfbmFtZSAoc2l6ZV90IHJvdW5kZWRfYnl0ZXMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90ICZvZmZzZXQpOwoKCiAgc3RydWN0IFNI TV9UQUJMRQogIHsKICAgIGtleV90IGtleV87CgoKICAgIGludCBzaG1pZF87CgoKICAgIGludCB1 c2VkXzsKCiAgfTsKCgoKCgoKCiAgdm9pZCAqYmFzZV9hZGRyXzsKCgogIHNpemVfdCBmaWxlX3Bl cm1zXzsKCgogIHNpemVfdCBtYXhfc2VnbWVudHNfOwoKCiAgb2ZmX3QgbWluaW11bV9ieXRlc187 CgoKICBzaXplX3Qgc2VnbWVudF9zaXplXzsKCgogIGtleV90IGJhc2Vfc2htX2tleV87CgoKICB2 aXJ0dWFsIGludCBmaW5kX3NlZyAoY29uc3Qgdm9pZCAqY29uc3Qgc2VhcmNoUHRyLAogICAgICAg ICAgICAgICAgICAgICAgICBvZmZfdCAmb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgJmNvdW50ZXIpOwoKCiAgdmlydHVhbCBpbnQgaW5fdXNlIChvZmZfdCAmb2Zmc2V0LAog ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICZjb3VudGVyKTsKCgogIEFDRV9TaWdfSGFuZGxl ciBzaWduYWxfaGFuZGxlcl87CgoKCiAgdmlydHVhbCBpbnQgaGFuZGxlX3NpZ25hbCAoaW50IHNp Z251bSwgc2lnaW5mb190ICosIHVjb250ZXh0X3QgKik7Cn07CiMgMjgwICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIKY2xhc3MgQUNF X0xvY2FsX01lbW9yeV9Qb29sX09wdGlvbnMKewp9OwojIDI5MSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmgiCmNsYXNzIEFDRV9Mb2Nh bF9NZW1vcnlfUG9vbAp7CnB1YmxpYzoKICB0eXBlZGVmIEFDRV9Mb2NhbF9NZW1vcnlfUG9vbF9P cHRpb25zIE9QVElPTlM7CgoKICBBQ0VfTG9jYWxfTWVtb3J5X1Bvb2wgKGNvbnN0IEFDRV9UQ0hB UiAqYmFja2luZ19zdG9yZV9uYW1lID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IE9QVElPTlMgKm9wdGlvbnMgPSAwKTsKCiAgdmlydHVhbCB+QUNFX0xvY2FsX01lbW9yeV9Qb29s ICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCAqaW5pdF9hY3F1aXJlIChzaXplX3QgbmJ5dGVzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgJnJvdW5kZWRfYnl0ZXMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmZmlyc3RfdGltZSk7CgoKCiAgdmlydHVhbCB2 b2lkICphY3F1aXJlIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICZyb3VuZGVkX2J5dGVzKTsKCgogIHZpcnR1YWwgaW50IHJlbGVhc2UgKHZvaWQpOwoKCgoK CgogIHZpcnR1YWwgaW50IHN5bmMgKHNzaXplX3QgbGVuID0gLTEsIGludCBmbGFncyA9IDQpOwoK CgogIHZpcnR1YWwgaW50IHN5bmMgKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBmbGFncyA9 IDQpOwoKCgoKCgogIHZpcnR1YWwgaW50IHByb3RlY3QgKHNzaXplX3QgbGVuID0gLTEsIGludCBw cm90ID0gKDB4MXwweDIpKTsKCgoKICB2aXJ0dWFsIGludCBwcm90ZWN0ICh2b2lkICphZGRyLCBz aXplX3QgbGVuLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CiMgMzUxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIKICB2aXJ0dWFsIGlu dCByZW1hcCAodm9pZCAqYWRkcik7CgoKICB2aXJ0dWFsIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7 CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6CgogIEFDRV9VbmJvdW5kZWRfU2V0PGNo YXIgKj4gYWxsb2NhdGVkX2NodW5rc187CgogIHZpcnR1YWwgc2l6ZV90IHJvdW5kX3VwIChzaXpl X3QgbmJ5dGVzKTsKCgoKfTsKIyAzNzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9NZW1vcnlfUG9vbC5oIgpjbGFzcyBBQ0VfTU1BUF9NZW1vcnlfUG9vbF9P cHRpb25zCnsKcHVibGljOgoKICBBQ0VfTU1BUF9NZW1vcnlfUG9vbF9PcHRpb25zIChjb25zdCB2 b2lkICpiYXNlX2FkZHIgPSAoKGNoYXIgKikgMHg4MDAwMDAwMCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHVzZV9maXhlZF9hZGRyID0gMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgd3JpdGVfZWFjaF9wYWdlID0gMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvZmZfdCBtaW5pbXVtX2J5dGVzID0gMCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1X2ludCBmbGFncyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGd1ZXNzX29uX2ZhdWx0ID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgc2EgPSAwKTsKCgogIGNvbnN0IHZvaWQgKmJhc2VfYWRkcl87CgoKICBpbnQgdXNl X2ZpeGVkX2FkZHJfOwoKCgogIGludCB3cml0ZV9lYWNoX3BhZ2VfOwoKCiAgb2ZmX3QgbWluaW11 bV9ieXRlc187CgoKICB1X2ludCBmbGFnc187CgoKCgoKCiAgaW50IGd1ZXNzX29uX2ZhdWx0XzsK CgogIGludCBzYV87Cgp9OwoKCgoKCgoKY2xhc3MgQUNFX01NQVBfTWVtb3J5X1Bvb2wgOiBwdWJs aWMgQUNFX0V2ZW50X0hhbmRsZXIKewpwdWJsaWM6CiAgdHlwZWRlZiBBQ0VfTU1BUF9NZW1vcnlf UG9vbF9PcHRpb25zIE9QVElPTlM7CgoKCgogIEFDRV9NTUFQX01lbW9yeV9Qb29sIChjb25zdCBB Q0VfVENIQVIgKmJhY2tpbmdfc3RvcmVfbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IE9QVElPTlMgKm9wdGlvbnMgPSAwKTsKCiAgdmlydHVhbCB+QUNFX01NQVBfTWVtb3J5 X1Bvb2wgKHZvaWQpOwoKCiAgdmlydHVhbCB2b2lkICppbml0X2FjcXVpcmUgKHNpemVfdCBuYnl0 ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAmcm91bmRlZF9ieXRlcywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICZmaXJzdF90aW1lKTsKCgoKCgoKCiAg dmlydHVhbCB2b2lkICphY3F1aXJlIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90ICZyb3VuZGVkX2J5dGVzKTsKCgogIHZpcnR1YWwgaW50IHJlbGVhc2UgKHZv aWQpOwoKCgogIHZpcnR1YWwgaW50IHN5bmMgKHNzaXplX3QgbGVuID0gLTEsIGludCBmbGFncyA9 IDQpOwoKCiAgdmlydHVhbCBpbnQgc3luYyAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IGZs YWdzID0gNCk7CgoKCgoKCiAgdmlydHVhbCBpbnQgcHJvdGVjdCAoc3NpemVfdCBsZW4gPSAtMSwg aW50IHByb3QgPSAoMHgxfDB4MikpOwoKCgogIHZpcnR1YWwgaW50IHByb3RlY3QgKHZvaWQgKmFk ZHIsIHNpemVfdCBsZW4sIGludCBwcm90ID0gKDB4MXwweDIpKTsKIyA0OTAgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZW1vcnlfUG9vbC5oIgogIHZpcnR1 YWwgaW50IHJlbWFwICh2b2lkICphZGRyKTsKCgoKICB2aXJ0dWFsIHZvaWQgKmJhc2VfYWRkciAo dm9pZCkgY29uc3Q7CgoKICB2aXJ0dWFsIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1 Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6CgoKCiAgdmlydHVhbCBzaXplX3Qgcm91bmRfdXAgKHNp emVfdCBuYnl0ZXMpOwoKCgogIHZpcnR1YWwgaW50IGNvbW1pdF9iYWNraW5nX3N0b3JlX25hbWUg KHNpemVfdCByb3VuZGVkX2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9mZl90ICZtYXBfc2l6ZSk7CgoKICB2aXJ0dWFsIGludCBtYXBfZmlsZSAob2ZmX3Qg bWFwX3NpemUpOwoKCgogIHZpcnR1YWwgaW50IGhhbmRsZV9zaWduYWwgKGludCBzaWdudW0sIHNp Z2luZm9fdCAqLCB1Y29udGV4dF90ICopOwoKCiAgQUNFX1NpZ19IYW5kbGVyIHNpZ25hbF9oYW5k bGVyXzsKCgogIEFDRV9NZW1fTWFwIG1tYXBfOwoKCgoKCgogIHZvaWQgKmJhc2VfYWRkcl87CgoK ICBpbnQgZmxhZ3NfOwoKCgogIGludCB3cml0ZV9lYWNoX3BhZ2VfOwoKCiAgb2ZmX3QgbWluaW11 bV9ieXRlc187CgoKICBBQ0VfVENIQVIgYmFja2luZ19zdG9yZV9uYW1lX1s0MDk1ICsgMV07CgoK CgoKCiAgaW50IGd1ZXNzX29uX2ZhdWx0XzsKCgogIGludCBzYV87Cgp9OwojIDU3MCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmgiCmNs YXNzIEFDRV9MaXRlX01NQVBfTWVtb3J5X1Bvb2wgOiBwdWJsaWMgQUNFX01NQVBfTWVtb3J5X1Bv b2wKewpwdWJsaWM6CgoKCiAgQUNFX0xpdGVfTU1BUF9NZW1vcnlfUG9vbCAoY29uc3QgQUNFX1RD SEFSICpiYWNraW5nX3N0b3JlX25hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IE9QVElPTlMgKm9wdGlvbnMgPSAwKTsKCiAgdmlydHVhbCB+QUNFX0xpdGVfTU1BUF9N ZW1vcnlfUG9vbCAodm9pZCk7CgoKICB2aXJ0dWFsIGludCBzeW5jIChzc2l6ZV90IGxlbiA9IC0x LCBpbnQgZmxhZ3MgPSA0KTsKCgogIHZpcnR1YWwgaW50IHN5bmMgKHZvaWQgKmFkZHIsIHNpemVf dCBsZW4sIGludCBmbGFncyA9IDQpOwp9OwojIDc0NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmkiIDEKCgoKaW5saW5l CkFDRV9Mb2NhbF9NZW1vcnlfUG9vbDo6fkFDRV9Mb2NhbF9NZW1vcnlfUG9vbCAodm9pZCkKewp9 CgppbmxpbmUgaW50CkFDRV9Mb2NhbF9NZW1vcnlfUG9vbDo6c3luYyAoc3NpemVfdCwgaW50KQp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIDA7 Cn0KCmlubGluZSBpbnQKQUNFX0xvY2FsX01lbW9yeV9Qb29sOjpzeW5jICh2b2lkICosIHNpemVf dCwgaW50KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg cmV0dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX0xvY2FsX01lbW9yeV9Qb29sOjpwcm90ZWN0IChz c2l6ZV90LCBpbnQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTG9jYWxfTWVtb3J5X1Bvb2w6OnBy b3RlY3QgKHZvaWQgKiwgc2l6ZV90LCBpbnQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gMDsKfQoKaW5saW5lCkFDRV9NTUFQX01lbW9y eV9Qb29sOjp+QUNFX01NQVBfTWVtb3J5X1Bvb2wgKHZvaWQpCnsKfQoKaW5saW5lCkFDRV9MaXRl X01NQVBfTWVtb3J5X1Bvb2w6On5BQ0VfTGl0ZV9NTUFQX01lbW9yeV9Qb29sICh2b2lkKQp7Cn0K CmlubGluZSBzaXplX3QKQUNFX01NQVBfTWVtb3J5X1Bvb2w6OnJvdW5kX3VwIChzaXplX3QgbmJ5 dGVzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg cmV0dXJuIEFDRTo6cm91bmRfdG9fcGFnZXNpemUgKG5ieXRlcyk7Cn0KCmlubGluZSB2b2lkICoK QUNFX01NQVBfTWVtb3J5X1Bvb2w6OmJhc2VfYWRkciAodm9pZCkgY29uc3QKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YmFz ZV9hZGRyXzsKfQoKCgppbmxpbmUgdm9pZCAqCkFDRV9Mb2NhbF9NZW1vcnlfUG9vbDo6aW5pdF9h Y3F1aXJlIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90ICZyb3VuZGVkX2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICZmaXJzdF90aW1lKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgZmlyc3RfdGltZSA9IDE7CiAgcmV0dXJuIHRoaXMt PmFjcXVpcmUgKG5ieXRlcywgcm91bmRlZF9ieXRlcyk7Cn0KCgoKaW5saW5lIHNpemVfdApBQ0Vf TG9jYWxfTWVtb3J5X1Bvb2w6OnJvdW5kX3VwIChzaXplX3QgbmJ5dGVzKQp7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBBQ0U6OnJvdW5k X3RvX3BhZ2VzaXplIChuYnl0ZXMpOwp9CgoKCgoKaW5saW5lCkFDRV9TaGFyZWRfTWVtb3J5X1Bv b2w6On5BQ0VfU2hhcmVkX01lbW9yeV9Qb29sICh2b2lkKQp7Cn0KCmlubGluZSBzaXplX3QKQUNF X1NoYXJlZF9NZW1vcnlfUG9vbDo6cm91bmRfdXAgKHNpemVfdCBuYnl0ZXMpCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChuYnl0ZXMgPCB0 aGlzLT5zZWdtZW50X3NpemVfKQogICAgbmJ5dGVzID0gdGhpcy0+c2VnbWVudF9zaXplXzsKCiAg cmV0dXJuIEFDRTo6cm91bmRfdG9fcGFnZXNpemUgKG5ieXRlcyk7Cn0KCmlubGluZSBpbnQKQUNF X1NoYXJlZF9NZW1vcnlfUG9vbDo6c3luYyAoc3NpemVfdCwgaW50KQp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiAwOwp9CgppbmxpbmUgaW50 CkFDRV9TaGFyZWRfTWVtb3J5X1Bvb2w6OnN5bmMgKHZvaWQgKiwgc2l6ZV90LCBpbnQpCnsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIDA7Cn0K CmlubGluZSBpbnQKQUNFX1NoYXJlZF9NZW1vcnlfUG9vbDo6cHJvdGVjdCAoc3NpemVfdCwgaW50 KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJl dHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9TaGFyZWRfTWVtb3J5X1Bvb2w6OnByb3RlY3QgKHZv aWQgKiwgc2l6ZV90LCBpbnQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgcmV0dXJuIDA7Cn0KCgoKCmlubGluZQpBQ0VfU2Jya19NZW1vcnlfUG9v bDo6fkFDRV9TYnJrX01lbW9yeV9Qb29sICh2b2lkKQp7Cn0KCgoKaW5saW5lIHZvaWQgKgpBQ0Vf U2Jya19NZW1vcnlfUG9vbDo6aW5pdF9hY3F1aXJlIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgJnJvdW5kZWRfYnl0ZXMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmZmlyc3RfdGltZSkKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgZmlyc3RfdGlt ZSA9IDE7CiAgcmV0dXJuIHRoaXMtPmFjcXVpcmUgKG5ieXRlcywgcm91bmRlZF9ieXRlcyk7Cn0K CgoKaW5saW5lIHNpemVfdApBQ0VfU2Jya19NZW1vcnlfUG9vbDo6cm91bmRfdXAgKHNpemVfdCBu Ynl0ZXMpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICByZXR1cm4gQUNFOjpyb3VuZF90b19wYWdlc2l6ZSAobmJ5dGVzKTsKfQoKCgppbmxpbmUgaW50 CkFDRV9TYnJrX01lbW9yeV9Qb29sOjpyZWxlYXNlICh2b2lkKQp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApB Q0VfU2Jya19NZW1vcnlfUG9vbDo6c3luYyAoc3NpemVfdCwgaW50KQp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApB Q0VfU2Jya19NZW1vcnlfUG9vbDo6c3luYyAodm9pZCAqLCBzaXplX3QsIGludCkKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIDA7Cn0KCmlubGlu ZSBpbnQKQUNFX1NicmtfTWVtb3J5X1Bvb2w6OnByb3RlY3QgKHNzaXplX3QsIGludCkKewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIDA7Cn0K CmlubGluZSBpbnQKQUNFX1NicmtfTWVtb3J5X1Bvb2w6OnByb3RlY3QgKHZvaWQgKiwgc2l6ZV90 LCBpbnQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IHJldHVybiAwOwp9CiMgNzQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDc1MSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmgiIDIKIyA0MTIgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2MuaCIgMgoKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAx CiMgNDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFs bG9jLmgiIDIKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL01lc3NhZ2VfQmxvY2suaCIgMgoKCmNsYXNzIEFDRV9EYXRhX0Jsb2NrOwpjbGFzcyBBQ0Vf TG9jazsKY2xhc3MgQUNFX1RpbWVfVmFsdWU7CiMgNTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiCmNsYXNzIEFDRV9NZXNzYWdl X0Jsb2NrCnsKcHVibGljOgogIGZyaWVuZCBjbGFzcyBBQ0VfRGF0YV9CbG9jazsKCiAgZW51bQog IHsKCgogICAgTUJfREFUQSA9IDB4MDEsCgogICAgTUJfUFJPVE8gPSAweDAyLAoKCgogICAgTUJf QlJFQUsgPSAweDAzLAoKICAgIE1CX1BBU1NGUCA9IDB4MDQsCgogICAgTUJfRVZFTlQgPSAweDA1 LAoKICAgIE1CX1NJRyA9IDB4MDYsCgogICAgTUJfSU9DVEwgPSAweDA3LAoKICAgIE1CX1NFVE9Q VFMgPSAweDA4LAoKCgogICAgTUJfSU9DQUNLID0gMHg4MSwKCiAgICBNQl9JT0NOQUsgPSAweDgy LAoKICAgIE1CX1BDUFJPVE8gPSAweDgzLAoKICAgIE1CX1BDU0lHID0gMHg4NCwKCiAgICBNQl9S RUFEID0gMHg4NSwKCiAgICBNQl9GTFVTSCA9IDB4ODYsCgogICAgTUJfU1RPUCA9IDB4ODcsCgog ICAgTUJfU1RBUlQgPSAweDg4LAoKICAgIE1CX0hBTkdVUCA9IDB4ODksCgogICAgTUJfRVJST1Ig PSAweDhhLAoKICAgIE1CX1BDRVZFTlQgPSAweDhiLAoKCgogICAgTUJfTk9STUFMID0gMHgwMCwK CiAgICBNQl9QUklPUklUWSA9IDB4ODAsCgogICAgTUJfVVNFUiA9IDB4MjAwCiAgfTsKCiAgdHlw ZWRlZiBpbnQgQUNFX01lc3NhZ2VfVHlwZTsKICB0eXBlZGVmIHVfbG9uZyBNZXNzYWdlX0ZsYWdz OwoKICBlbnVtCiAgewoKICAgIERPTlRfREVMRVRFID0gMDEsCgogICAgVVNFUl9GTEFHUyA9IDB4 MTAwMAogIH07CgoKCiAgQUNFX01lc3NhZ2VfQmxvY2sgKEFDRV9BbGxvY2F0b3IgKm1lc3NhZ2Vf YmxvY2tfYWxsb2NhdG9yID0gMCk7CgoKCgoKCiAgQUNFX01lc3NhZ2VfQmxvY2sgKEFDRV9EYXRh X0Jsb2NrICosCiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VfRmxhZ3MgZmxhZ3MgPSAwLAog ICAgICAgICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yICptZXNzYWdlX2Jsb2NrX2FsbG9jYXRv ciA9IDApOwoKCgoKCgoKICBBQ0VfTWVzc2FnZV9CbG9jayAoY29uc3QgY2hhciAqZGF0YSwKICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSAwLAogICAgICAgICAgICAgICAgICAgICB1 X2xvbmcgcHJpb3JpdHkgPSAwKTsKIyAxNjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiCiAgQUNFX01lc3NhZ2VfQmxvY2sgKHNp emVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICBBQ0VfTWVzc2FnZV9UeXBlIHR5cGUgPSBN Ql9EQVRBLAogICAgICAgICAgICAgICAgICAgICBBQ0VfTWVzc2FnZV9CbG9jayAqY29udCA9IDAs CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGEgPSAwLAogICAgICAgICAgICAg ICAgICAgICBBQ0VfQWxsb2NhdG9yICphbGxvY2F0b3Jfc3RyYXRlZ3kgPSAwLAogICAgICAgICAg ICAgICAgICAgICBBQ0VfTG9jayAqbG9ja2luZ19zdHJhdGVneSA9IDAsCiAgICAgICAgICAgICAg ICAgICAgIHVfbG9uZyBwcmlvcml0eSA9IDAsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFD RV9UaW1lX1ZhbHVlICZleGVjdXRpb25fdGltZSA9IEFDRV9UaW1lX1ZhbHVlOjp6ZXJvLAogICAg ICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZGVhZGxpbmVfdGltZSA9IEFD RV9UaW1lX1ZhbHVlOjptYXhfdGltZSwKICAgICAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRv ciAqZGF0YV9ibG9ja19hbGxvY2F0b3IgPSAwLAogICAgICAgICAgICAgICAgICAgICBBQ0VfQWxs b2NhdG9yICptZXNzYWdlX2Jsb2NrX2FsbG9jYXRvciA9IDApOwoKCgoKCgoKICBpbnQgaW5pdCAo Y29uc3QgY2hhciAqZGF0YSwKICAgICAgICAgICAgc2l6ZV90IHNpemUgPSAwKTsKIyAyMDMgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2Nr LmgiCiAgaW50IGluaXQgKHNpemVfdCBzaXplLAogICAgICAgICAgICBBQ0VfTWVzc2FnZV9UeXBl IHR5cGUgPSBNQl9EQVRBLAogICAgICAgICAgICBBQ0VfTWVzc2FnZV9CbG9jayAqY29udCA9IDAs CiAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGEgPSAwLAogICAgICAgICAgICBBQ0VfQWxsb2Nh dG9yICphbGxvY2F0b3Jfc3RyYXRlZ3kgPSAwLAogICAgICAgICAgICBBQ0VfTG9jayAqbG9ja2lu Z19zdHJhdGVneSA9IDAsCiAgICAgICAgICAgIHVfbG9uZyBwcmlvcml0eSA9IDAsCiAgICAgICAg ICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZleGVjdXRpb25fdGltZSA9IEFDRV9UaW1lX1ZhbHVl Ojp6ZXJvLAogICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZGVhZGxpbmVfdGltZSA9 IEFDRV9UaW1lX1ZhbHVlOjptYXhfdGltZSwKICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqZGF0 YV9ibG9ja19hbGxvY2F0b3IgPSAwLAogICAgICAgICAgICBBQ0VfQWxsb2NhdG9yICptZXNzYWdl X2Jsb2NrX2FsbG9jYXRvciA9IDApOwoKCgoKCgoKICB2aXJ0dWFsIH5BQ0VfTWVzc2FnZV9CbG9j ayAodm9pZCk7CgoKCgogIEFDRV9NZXNzYWdlX1R5cGUgbXNnX3R5cGUgKHZvaWQpIGNvbnN0OwoK CiAgdm9pZCBtc2dfdHlwZSAoQUNFX01lc3NhZ2VfVHlwZSB0eXBlKTsKCgogIGludCBpc19kYXRh X21zZyAodm9pZCkgY29uc3Q7CgoKCiAgQUNFX01lc3NhZ2VfVHlwZSBtc2dfY2xhc3MgKHZvaWQp IGNvbnN0OwoKCgoKICBNZXNzYWdlX0ZsYWdzIHNldF9mbGFncyAoTWVzc2FnZV9GbGFncyBtb3Jl X2ZsYWdzKTsKCgoKICBNZXNzYWdlX0ZsYWdzIGNscl9mbGFncyAoTWVzc2FnZV9GbGFncyBsZXNz X2ZsYWdzKTsKCgogIE1lc3NhZ2VfRmxhZ3MgZmxhZ3MgKHZvaWQpIGNvbnN0OwojIDI1OCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2su aCIKICBNZXNzYWdlX0ZsYWdzIHNldF9zZWxmX2ZsYWdzIChBQ0VfTWVzc2FnZV9CbG9jazo6TWVz c2FnZV9GbGFncyBtb3JlX2ZsYWdzKTsKCgoKICBNZXNzYWdlX0ZsYWdzIGNscl9zZWxmX2ZsYWdz IChBQ0VfTWVzc2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBsZXNzX2ZsYWdzKTsKCgogIE1lc3Nh Z2VfRmxhZ3Mgc2VsZl9mbGFncyAodm9pZCkgY29uc3Q7CgoKICB1X2xvbmcgbXNnX3ByaW9yaXR5 ICh2b2lkKSBjb25zdDsKCgogIHZvaWQgbXNnX3ByaW9yaXR5ICh1X2xvbmcgcHJpb3JpdHkpOwoK CiAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJm1zZ19leGVjdXRpb25fdGltZSAodm9pZCkgY29uc3Q7 CgoKICB2b2lkIG1zZ19leGVjdXRpb25fdGltZSAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJmV0KTsK CgogIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZtc2dfZGVhZGxpbmVfdGltZSAodm9pZCkgY29uc3Q7 CgoKICB2b2lkIG1zZ19kZWFkbGluZV90aW1lIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZHQpOwoK CgoKCiAgdmlydHVhbCBBQ0VfTWVzc2FnZV9CbG9jayAqY2xvbmUgKE1lc3NhZ2VfRmxhZ3MgbWFz ayA9IDApIGNvbnN0OwoKCiAgQUNFX01lc3NhZ2VfQmxvY2sgKmR1cGxpY2F0ZSAodm9pZCkgY29u c3Q7CgoKCgoKCgogIHN0YXRpYyBBQ0VfTWVzc2FnZV9CbG9jayAqZHVwbGljYXRlIChjb25zdCBB Q0VfTWVzc2FnZV9CbG9jayAqbWIpOwojIDMyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIKICBBQ0VfTWVzc2FnZV9CbG9jayAq cmVsZWFzZSAodm9pZCk7CgoKCgoKCgogIHN0YXRpYyBBQ0VfTWVzc2FnZV9CbG9jayAqcmVsZWFz ZSAoQUNFX01lc3NhZ2VfQmxvY2sgKm1iKTsKIyAzNDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiCiAgaW50IGNvcHkgKGNvbnN0 IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pOwojIDM1NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIKICBpbnQgY29weSAoY29uc3QgY2hh ciAqYnVmKTsKCgoKCgogIHZvaWQgY3J1bmNoICh2b2lkKTsKCgoKICB2b2lkIHJlc2V0ICh2b2lk KTsKCgogIGNoYXIgKmJhc2UgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBiYXNlIChjaGFyICpkYXRh LAogICAgICAgICAgICAgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICBNZXNzYWdlX0ZsYWdzID0g RE9OVF9ERUxFVEUpOwoKCiAgY2hhciAqZW5kICh2b2lkKSBjb25zdDsKCgoKCgoKICBjaGFyICpt YXJrICh2b2lkKSBjb25zdDsKCgoKCgoKICBjaGFyICpyZF9wdHIgKHZvaWQpIGNvbnN0OwogIHZv aWQgcmRfcHRyIChjaGFyICpwdHIpOwogIHZvaWQgcmRfcHRyIChzaXplX3Qgbik7CgoKCgoKCgog IGNoYXIgKndyX3B0ciAodm9pZCkgY29uc3Q7CiAgdm9pZCB3cl9wdHIgKGNoYXIgKnB0cik7CiAg dm9pZCB3cl9wdHIgKHNpemVfdCBuKTsKIyA0MTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiCiAgc2l6ZV90IGxlbmd0aCAodm9p ZCkgY29uc3Q7CgoKICB2b2lkIGxlbmd0aCAoc2l6ZV90IG4pOwoKCgogIHNpemVfdCB0b3RhbF9s ZW5ndGggKHZvaWQpIGNvbnN0OwoKCgogIHNpemVfdCB0b3RhbF9zaXplICh2b2lkKSBjb25zdDsK CgoKICBzaXplX3Qgc2l6ZSAodm9pZCkgY29uc3Q7CgoKCgoKCgogIGludCBzaXplIChzaXplX3Qg bGVuZ3RoKTsKCgoKICBzaXplX3QgdG90YWxfY2FwYWNpdHkgKHZvaWQpIGNvbnN0OwoKCiAgc2l6 ZV90IGNhcGFjaXR5ICh2b2lkKSBjb25zdDsKCgoKICBzaXplX3Qgc3BhY2UgKHZvaWQpIGNvbnN0 OwojIDQ1NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01l c3NhZ2VfQmxvY2suaCIKICBBQ0VfRGF0YV9CbG9jayAqZGF0YV9ibG9jayAodm9pZCkgY29uc3Q7 CiMgNDY2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVz c2FnZV9CbG9jay5oIgogIHZvaWQgZGF0YV9ibG9jayAoQUNFX0RhdGFfQmxvY2sgKik7CgoKCiAg QUNFX0RhdGFfQmxvY2sgKnJlcGxhY2VfZGF0YV9ibG9jayAoQUNFX0RhdGFfQmxvY2sqKTsKCgoK CiAgQUNFX01lc3NhZ2VfQmxvY2sgKmNvbnQgKHZvaWQpIGNvbnN0OwogIHZvaWQgY29udCAoQUNF X01lc3NhZ2VfQmxvY2sgKik7CgoKCgogIEFDRV9NZXNzYWdlX0Jsb2NrICpuZXh0ICh2b2lkKSBj b25zdDsKICB2b2lkIG5leHQgKEFDRV9NZXNzYWdlX0Jsb2NrICopOwoKCgoKICBBQ0VfTWVzc2Fn ZV9CbG9jayAqcHJldiAodm9pZCkgY29uc3Q7CiAgdm9pZCBwcmV2IChBQ0VfTWVzc2FnZV9CbG9j ayAqKTsKCgoKCiAgQUNFX0xvY2sgKmxvY2tpbmdfc3RyYXRlZ3kgKHZvaWQpOwogIEFDRV9Mb2Nr ICpsb2NraW5nX3N0cmF0ZWd5IChBQ0VfTG9jayAqKTsKCgogIGludCByZWZlcmVuY2VfY291bnQg KHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0Fj ZSB7fTsKCnByb3RlY3RlZDoKCgogIEFDRV9NZXNzYWdlX0Jsb2NrIChzaXplX3Qgc2l6ZSwKICAg ICAgICAgICAgICAgICAgICAgQUNFX01lc3NhZ2VfVHlwZSB0eXBlLAogICAgICAgICAgICAgICAg ICAgICBBQ0VfTWVzc2FnZV9CbG9jayAqY29udCwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2NhdG9y X3N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICBBQ0VfTG9jayAqbG9ja2luZ19zdHJhdGVn eSwKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZV9GbGFncyBmbGFncywKICAgICAgICAgICAg ICAgICAgICAgdV9sb25nIHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0Vf VGltZV9WYWx1ZSAmZXhlY3V0aW9uX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFD RV9UaW1lX1ZhbHVlICZkZWFkbGluZV90aW1lLAogICAgICAgICAgICAgICAgICAgICBBQ0VfRGF0 YV9CbG9jayAqZGIsCiAgICAgICAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0b3IgKmRhdGFfYmxv Y2tfYWxsb2NhdG9yLAogICAgICAgICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yICptZXNzYWdl X2Jsb2NrX2FsbG9jYXRvcik7CgoKCiAgaW50IHJlbGVhc2VfaSAoQUNFX0xvY2sgKmxvY2spOwoK CiAgaW50IGluaXRfaSAoc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgQUNFX01lc3NhZ2VfVHlw ZSB0eXBlLAogICAgICAgICAgICAgIEFDRV9NZXNzYWdlX0Jsb2NrICpjb250LAogICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKmRhdGEsCiAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2Nh dG9yX3N0cmF0ZWd5LAogICAgICAgICAgICAgIEFDRV9Mb2NrICpsb2NraW5nX3N0cmF0ZWd5LAog ICAgICAgICAgICAgIE1lc3NhZ2VfRmxhZ3MgZmxhZ3MsCiAgICAgICAgICAgICAgdV9sb25nIHBy aW9yaXR5LAogICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZleGVjdXRpb25fdGlt ZSwKICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZGVhZGxpbmVfdGltZSwKICAg ICAgICAgICAgICBBQ0VfRGF0YV9CbG9jayAqZGIsCiAgICAgICAgICAgICAgQUNFX0FsbG9jYXRv ciAqZGF0YV9ibG9ja19hbGxvY2F0b3IsCiAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqbWVz c2FnZV9ibG9ja19hbGxvY2F0b3IpOwoKCiAgc2l6ZV90IHJkX3B0cl87CgoKICBzaXplX3Qgd3Jf cHRyXzsKCgogIHVfbG9uZyBwcmlvcml0eV87CiMgNTYwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5oIgogIEFDRV9NZXNzYWdlX0Js b2NrICpjb250XzsKCgogIEFDRV9NZXNzYWdlX0Jsb2NrICpuZXh0XzsKCgogIEFDRV9NZXNzYWdl X0Jsb2NrICpwcmV2XzsKCgogIEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0ZsYWdzIGZsYWdz XzsKCgoKICBBQ0VfRGF0YV9CbG9jayAqZGF0YV9ibG9ja187CgoKCiAgQUNFX0FsbG9jYXRvciAq bWVzc2FnZV9ibG9ja19hbGxvY2F0b3JfOwoKcHJpdmF0ZToKCiAgQUNFX01lc3NhZ2VfQmxvY2sg Jm9wZXJhdG9yPSAoY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sgJik7CiAgQUNFX01lc3NhZ2VfQmxv Y2sgKGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrICYpOwp9OwojIDU5NyAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIKY2xhc3MgQUNF X0RhdGFfQmxvY2sKewpwdWJsaWM6CgoKICBBQ0VfRGF0YV9CbG9jayAodm9pZCk7CgoKICBBQ0Vf RGF0YV9CbG9jayAoc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgIEFDRV9NZXNzYWdlX0Js b2NrOjpBQ0VfTWVzc2FnZV9UeXBlIG1zZ190eXBlLAogICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICptc2dfZGF0YSwKICAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2NhdG9y X3N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICBBQ0VfTG9jayAqbG9ja2luZ19zdHJhdGVneSwK ICAgICAgICAgICAgICAgICAgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgZmxhZ3Ms CiAgICAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0b3IgKmRhdGFfYmxvY2tfYWxsb2NhdG9yKTsK CgogIHZpcnR1YWwgfkFDRV9EYXRhX0Jsb2NrICh2b2lkKTsKCgogIEFDRV9NZXNzYWdlX0Jsb2Nr OjpBQ0VfTWVzc2FnZV9UeXBlIG1zZ190eXBlICh2b2lkKSBjb25zdDsKCgogIHZvaWQgbXNnX3R5 cGUgKEFDRV9NZXNzYWdlX0Jsb2NrOjpBQ0VfTWVzc2FnZV9UeXBlIHR5cGUpOwoKCiAgY2hhciAq YmFzZSAodm9pZCkgY29uc3Q7CgoKICB2b2lkIGJhc2UgKGNoYXIgKmRhdGEsCiAgICAgICAgICAg ICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgIEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0Zs YWdzIG1mbGFncyA9IEFDRV9NZXNzYWdlX0Jsb2NrOjpET05UX0RFTEVURSk7CgoKICBjaGFyICpl bmQgKHZvaWQpIGNvbnN0OwoKCgoKCgogIGNoYXIgKm1hcmsgKHZvaWQpIGNvbnN0OwoKCgoKCiAg c2l6ZV90IHNpemUgKHZvaWQpIGNvbnN0OwoKCgogIGludCBzaXplIChzaXplX3QgbGVuZ3RoKTsK CgogIHNpemVfdCBjYXBhY2l0eSAodm9pZCkgY29uc3Q7CiMgNjYwICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5oIgogIHZpcnR1YWwg QUNFX0RhdGFfQmxvY2sgKmNsb25lIChBQ0VfTWVzc2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBt YXNrID0gMCkgY29uc3Q7CgoKCgoKCgogIHZpcnR1YWwgQUNFX0RhdGFfQmxvY2sgKmNsb25lX25v Y29weSAoQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgbWFzayA9IDApIGNvbnN0OwoK CiAgQUNFX0RhdGFfQmxvY2sgKmR1cGxpY2F0ZSAodm9pZCk7CgoKCgoKCgogIEFDRV9EYXRhX0Js b2NrICpyZWxlYXNlIChBQ0VfTG9jayAqbG9jayA9IDApOwoKCgoKICBBQ0VfTWVzc2FnZV9CbG9j azo6TWVzc2FnZV9GbGFncyBzZXRfZmxhZ3MgKEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0Zs YWdzIG1vcmVfZmxhZ3MpOwoKCgogIEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0ZsYWdzIGNs cl9mbGFncyAoQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgbGVzc19mbGFncyk7CgoK ICBBQ0VfTWVzc2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBmbGFncyAodm9pZCkgY29uc3Q7CgoK ICBBQ0VfQWxsb2NhdG9yICphbGxvY2F0b3Jfc3RyYXRlZ3kgKHZvaWQpIGNvbnN0OwoKCgoKICBB Q0VfTG9jayAqbG9ja2luZ19zdHJhdGVneSAodm9pZCk7CiAgQUNFX0xvY2sgKmxvY2tpbmdfc3Ry YXRlZ3kgKEFDRV9Mb2NrICopOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIGludCBy ZWZlcmVuY2VfY291bnQgKHZvaWQpIGNvbnN0OwoKCiAgQUNFX0FsbG9jYXRvciAqZGF0YV9ibG9j a19hbGxvY2F0b3IgKHZvaWQpIGNvbnN0OwoKcHJvdGVjdGVkOgoKICBBQ0VfRGF0YV9CbG9jayAq cmVsZWFzZV9pICh2b2lkKTsKIyA3MjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiCiAgZnJpZW5kIGNsYXNzIEFDRV9NZXNzYWdl X0Jsb2NrOwogIEFDRV9EYXRhX0Jsb2NrICpyZWxlYXNlX25vX2RlbGV0ZSAoQUNFX0xvY2sgKmxv Y2spOwoKCiAgQUNFX01lc3NhZ2VfQmxvY2s6OkFDRV9NZXNzYWdlX1R5cGUgdHlwZV87CgoKICBz aXplX3QgY3VyX3NpemVfOwoKCiAgc2l6ZV90IG1heF9zaXplXzsKCgogIEFDRV9NZXNzYWdlX0Js b2NrOjpNZXNzYWdlX0ZsYWdzIGZsYWdzXzsKCgogIGNoYXIgKmJhc2VfOwoKCgoKCgoKICBBQ0Vf QWxsb2NhdG9yICphbGxvY2F0b3Jfc3RyYXRlZ3lfOwoKCgoKCgoKICBBQ0VfTG9jayAqbG9ja2lu Z19zdHJhdGVneV87CgoKCgoKCgogIGludCByZWZlcmVuY2VfY291bnRfOwoKCiAgQUNFX0FsbG9j YXRvciAqZGF0YV9ibG9ja19hbGxvY2F0b3JfOwoKcHJpdmF0ZToKCiAgQUNFX0RhdGFfQmxvY2sg Jm9wZXJhdG9yPSAoY29uc3QgQUNFX0RhdGFfQmxvY2sgJik7CiAgQUNFX0RhdGFfQmxvY2sgKGNv bnN0IEFDRV9EYXRhX0Jsb2NrICYpOwp9OwojIDc5MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIKY2xhc3MgQUNFX0R5bmFtaWNf TWVzc2FnZV9TdHJhdGVneQp7CnB1YmxpYzoKCgoKCgoKICBlbnVtIFByaW9yaXR5X1N0YXR1cwog IHsKCiAgICBQRU5ESU5HID0gMHgwMSwKCiAgICBMQVRFID0gMHgwMiwKCiAgICBCRVlPTkRfTEFU RSA9IDB4MDQsCgogICAgQU5ZX1NUQVRVUyA9IDB4MDcKICB9OwoKCiAgQUNFX0R5bmFtaWNfTWVz c2FnZV9TdHJhdGVneSAodV9sb25nIHN0YXRpY19iaXRfZmllbGRfbWFzaywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1X2xvbmcgc3RhdGljX2JpdF9maWVsZF9zaGlmdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZHluYW1pY19wcmlvcml0eV9tYXgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGR5bmFtaWNfcHJpb3JpdHlfb2Zm c2V0KTsKCgogIHZpcnR1YWwgfkFDRV9EeW5hbWljX01lc3NhZ2VfU3RyYXRlZ3kgKHZvaWQpOwoK CiAgUHJpb3JpdHlfU3RhdHVzIHByaW9yaXR5X3N0YXR1cyAoQUNFX01lc3NhZ2VfQmxvY2sgJm1i LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVl ICZ0dik7CgoKICB1X2xvbmcgc3RhdGljX2JpdF9maWVsZF9tYXNrICh2b2lkKSBjb25zdDsKCgog IHZvaWQgc3RhdGljX2JpdF9maWVsZF9tYXNrICh1X2xvbmcpOwoKCiAgdV9sb25nIHN0YXRpY19i aXRfZmllbGRfc2hpZnQgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBzdGF0aWNfYml0X2ZpZWxkX3No aWZ0ICh1X2xvbmcpOwoKCiAgdV9sb25nIGR5bmFtaWNfcHJpb3JpdHlfbWF4ICh2b2lkKSBjb25z dDsKCgogIHZvaWQgZHluYW1pY19wcmlvcml0eV9tYXggKHVfbG9uZyk7CgoKICB1X2xvbmcgZHlu YW1pY19wcmlvcml0eV9vZmZzZXQgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBkeW5hbWljX3ByaW9y aXR5X29mZnNldCAodV9sb25nKTsKCgogIHZpcnR1YWwgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsK CnByb3RlY3RlZDoKCiAgdmlydHVhbCB2b2lkIGNvbnZlcnRfcHJpb3JpdHkgKEFDRV9UaW1lX1Zh bHVlICZwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF X01lc3NhZ2VfQmxvY2sgJm1iKSA9IDA7CgoKICB1X2xvbmcgc3RhdGljX2JpdF9maWVsZF9tYXNr XzsKCgoKCgoKICB1X2xvbmcgc3RhdGljX2JpdF9maWVsZF9zaGlmdF87CgoKICB1X2xvbmcgZHlu YW1pY19wcmlvcml0eV9tYXhfOwoKCiAgdV9sb25nIGR5bmFtaWNfcHJpb3JpdHlfb2Zmc2V0XzsK CgogIEFDRV9UaW1lX1ZhbHVlIG1heF9sYXRlXzsKCgogIEFDRV9UaW1lX1ZhbHVlIG1pbl9wZW5k aW5nXzsKCgogIEFDRV9UaW1lX1ZhbHVlIHBlbmRpbmdfc2hpZnRfOwp9OwojIDg5OSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIK Y2xhc3MgQUNFX0RlYWRsaW5lX01lc3NhZ2VfU3RyYXRlZ3kgOiBwdWJsaWMgQUNFX0R5bmFtaWNf TWVzc2FnZV9TdHJhdGVneQp7CnB1YmxpYzoKCiAgQUNFX0RlYWRsaW5lX01lc3NhZ2VfU3RyYXRl Z3kgKHVfbG9uZyBzdGF0aWNfYml0X2ZpZWxkX21hc2sgPSAweDNGRlVMLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1X2xvbmcgc3RhdGljX2JpdF9maWVsZF9zaGlmdCA9IDEwLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZHluYW1pY19wcmlvcml0eV9t YXggPSAweDNGRkZGRlVMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcg ZHluYW1pY19wcmlvcml0eV9vZmZzZXQgPSAweDIwMDAwMFVMKTsKCgogIHZpcnR1YWwgfkFDRV9E ZWFkbGluZV9NZXNzYWdlX1N0cmF0ZWd5ICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCBjb252ZXJ0 X3ByaW9yaXR5IChBQ0VfVGltZV9WYWx1ZSAmcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrICZtYik7CgoKICB2aXJ0dWFsIHZv aWQgZHVtcCAodm9pZCkgY29uc3Q7Cn07CiMgOTM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5oIgpjbGFzcyBBQ0VfTGF4aXR5X01l c3NhZ2VfU3RyYXRlZ3kgOiBwdWJsaWMgQUNFX0R5bmFtaWNfTWVzc2FnZV9TdHJhdGVneQp7CnB1 YmxpYzoKCiAgQUNFX0xheGl0eV9NZXNzYWdlX1N0cmF0ZWd5ICh1X2xvbmcgc3RhdGljX2JpdF9m aWVsZF9tYXNrID0gMHgzRkZVTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9u ZyBzdGF0aWNfYml0X2ZpZWxkX3NoaWZ0ID0gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1X2xvbmcgZHluYW1pY19wcmlvcml0eV9tYXggPSAweDNGRkZGRlVMLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGR5bmFtaWNfcHJpb3JpdHlfb2Zmc2V0ID0gMHgy MDAwMDBVTCk7CgoKICB2aXJ0dWFsIH5BQ0VfTGF4aXR5X01lc3NhZ2VfU3RyYXRlZ3kgKHZvaWQp OwoKCiAgdmlydHVhbCB2b2lkIGNvbnZlcnRfcHJpb3JpdHkgKEFDRV9UaW1lX1ZhbHVlICZwcmlv cml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2Vf QmxvY2sgJm1iKTsKCgogIHZpcnR1YWwgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKfTsKCgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Js b2NrLmkiIDEKCgoKCgppbmxpbmUgQUNFX0RhdGFfQmxvY2sgKgpBQ0VfTWVzc2FnZV9CbG9jazo6 ZGF0YV9ibG9jayAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmRhdGFfYmxvY2tfOwp9CgppbmxpbmUgQUNF X01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MKQUNFX01lc3NhZ2VfQmxvY2s6OnNldF9zZWxm X2ZsYWdzIChBQ0VfTWVzc2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBtb3JlX2ZsYWdzKQp7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1 cm4gKHRoaXMtPmZsYWdzXyB8PSAobW9yZV9mbGFncykpOwp9CgppbmxpbmUgQUNFX01lc3NhZ2Vf QmxvY2s6Ok1lc3NhZ2VfRmxhZ3MKQUNFX01lc3NhZ2VfQmxvY2s6OmNscl9zZWxmX2ZsYWdzIChB Q0VfTWVzc2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBsZXNzX2ZsYWdzKQp7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gKHRoaXMt PmZsYWdzXyAmPSB+KGxlc3NfZmxhZ3MpKTsKfQoKaW5saW5lIEFDRV9NZXNzYWdlX0Jsb2NrOjpN ZXNzYWdlX0ZsYWdzCkFDRV9NZXNzYWdlX0Jsb2NrOjpzZWxmX2ZsYWdzICh2b2lkKSBjb25zdAp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4g dGhpcy0+ZmxhZ3NfOwp9CgoKCgppbmxpbmUgaW50CkFDRV9EYXRhX0Jsb2NrOjpyZWZlcmVuY2Vf Y291bnQgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gcmVmZXJlbmNlX2NvdW50XzsKfQoKaW5saW5l IGludApBQ0VfTWVzc2FnZV9CbG9jazo6cmVmZXJlbmNlX2NvdW50ICh2b2lkKSBjb25zdAp7CiAg cmV0dXJuIGRhdGFfYmxvY2sgKCkgPyBkYXRhX2Jsb2NrICgpLT5yZWZlcmVuY2VfY291bnQgKCkg OiAwOwp9CgppbmxpbmUgY2hhciAqCkFDRV9EYXRhX0Jsb2NrOjpiYXNlICh2b2lkKSBjb25zdAp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YmFz ZV87Cn0KCmlubGluZSBzaXplX3QKQUNFX0RhdGFfQmxvY2s6OnNpemUgKHZvaWQpIGNvbnN0CnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5jdXJf c2l6ZV87Cn0KCmlubGluZSBzaXplX3QKQUNFX0RhdGFfQmxvY2s6OmNhcGFjaXR5ICh2b2lkKSBj b25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJu IHRoaXMtPm1heF9zaXplXzsKfQoKaW5saW5lIEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0Zs YWdzCkFDRV9EYXRhX0Jsb2NrOjpzZXRfZmxhZ3MgKEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdl X0ZsYWdzIG1vcmVfZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgoKICByZXR1cm4gKHRoaXMtPmZsYWdzXyB8PSAobW9yZV9mbGFncykpOwp9Cgppbmxp bmUgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MKQUNFX0RhdGFfQmxvY2s6OmNscl9m bGFncyAoQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgbGVzc19mbGFncykKewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiAodGhpcy0+ ZmxhZ3NfICY9IH4obGVzc19mbGFncykpOwp9CgppbmxpbmUgQUNFX01lc3NhZ2VfQmxvY2s6Ok1l c3NhZ2VfRmxhZ3MKQUNFX0RhdGFfQmxvY2s6OmZsYWdzICh2b2lkKSBjb25zdAp7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgIHJldHVybiB0aGlzLT5mbGFnc187Cn0K CmlubGluZSBBQ0VfQWxsb2NhdG9yKgpBQ0VfRGF0YV9CbG9jazo6ZGF0YV9ibG9ja19hbGxvY2F0 b3IgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+ZGF0YV9ibG9ja19hbGxvY2F0b3JfOwp9Cgpp bmxpbmUgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MKQUNFX01lc3NhZ2VfQmxvY2s6 OnNldF9mbGFncyAoQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgbW9yZV9mbGFncykK ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4g dGhpcy0+ZGF0YV9ibG9jayAoKS0+c2V0X2ZsYWdzIChtb3JlX2ZsYWdzKTsKfQoKaW5saW5lIEFD RV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0ZsYWdzCkFDRV9NZXNzYWdlX0Jsb2NrOjpjbHJfZmxh Z3MgKEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0ZsYWdzIGxlc3NfZmxhZ3MpCnsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmRh dGFfYmxvY2sgKCktPmNscl9mbGFncyAobGVzc19mbGFncyk7Cn0KCmlubGluZSBBQ0VfTWVzc2Fn ZV9CbG9jazo6TWVzc2FnZV9GbGFncwpBQ0VfTWVzc2FnZV9CbG9jazo6ZmxhZ3MgKHZvaWQpIGNv bnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgcmV0dXJu IHRoaXMtPmRhdGFfYmxvY2sgKCktPmZsYWdzICgpOwp9CgoKCmlubGluZSBzaXplX3QKQUNFX01l c3NhZ2VfQmxvY2s6Omxlbmd0aCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+d3JfcHRyXyAtIHRoaXMtPnJkX3B0 cl87Cn0KCgoKCmlubGluZSB2b2lkCkFDRV9NZXNzYWdlX0Jsb2NrOjpsZW5ndGggKHNpemVfdCBs ZW4pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+ d3JfcHRyXyA9IHRoaXMtPnJkX3B0cl8gKyBsZW47Cn0KCgoKaW5saW5lIHNpemVfdApBQ0VfTWVz c2FnZV9CbG9jazo6c2l6ZSAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmRhdGFfYmxvY2sgKCktPnNpemUgKCk7Cn0K CmlubGluZSBzaXplX3QKQUNFX01lc3NhZ2VfQmxvY2s6OmNhcGFjaXR5ICh2b2lkKSBjb25zdAp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRo aXMtPmRhdGFfYmxvY2sgKCktPmNhcGFjaXR5ICgpOwp9CgppbmxpbmUgQUNFX01lc3NhZ2VfQmxv Y2s6OkFDRV9NZXNzYWdlX1R5cGUKQUNFX0RhdGFfQmxvY2s6Om1zZ190eXBlICh2b2lkKSBjb25z dAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRo aXMtPnR5cGVfOwp9CgppbmxpbmUgdm9pZApBQ0VfRGF0YV9CbG9jazo6bXNnX3R5cGUgKEFDRV9N ZXNzYWdlX0Jsb2NrOjpBQ0VfTWVzc2FnZV9UeXBlIHQpCnsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT50eXBlXyA9IHQ7Cn0KCmlubGluZSBBQ0VfTWVz c2FnZV9CbG9jazo6QUNFX01lc3NhZ2VfVHlwZQpBQ0VfTWVzc2FnZV9CbG9jazo6bXNnX3R5cGUg KHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICByZXR1cm4gdGhpcy0+ZGF0YV9ibG9jayAoKS0+bXNnX3R5cGUgKCk7Cn0KCmlubGluZSB2 b2lkCkFDRV9NZXNzYWdlX0Jsb2NrOjptc2dfdHlwZSAoQUNFX01lc3NhZ2VfQmxvY2s6OkFDRV9N ZXNzYWdlX1R5cGUgdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogIHRoaXMtPmRhdGFfYmxvY2sgKCktPm1zZ190eXBlICh0KTsKfQoKaW5saW5lIEFDRV9N ZXNzYWdlX0Jsb2NrOjpBQ0VfTWVzc2FnZV9UeXBlCkFDRV9NZXNzYWdlX0Jsb2NrOjptc2dfY2xh c3MgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogIGlmICh0aGlzLT5tc2dfdHlwZSAoKSA8IEFDRV9NZXNzYWdlX0Jsb2NrOjpNQl9Q UklPUklUWSkKICAgIHJldHVybiBBQ0VfTWVzc2FnZV9CbG9jazo6TUJfTk9STUFMOwogIGVsc2Ug aWYgKHRoaXMtPm1zZ190eXBlICgpIDwgQUNFX01lc3NhZ2VfQmxvY2s6Ok1CX1VTRVIpCiAgICBy ZXR1cm4gQUNFX01lc3NhZ2VfQmxvY2s6Ok1CX1BSSU9SSVRZOwogIGVsc2UKICAgIHJldHVybiBB Q0VfTWVzc2FnZV9CbG9jazo6TUJfVVNFUjsKfQoKaW5saW5lIGludApBQ0VfTWVzc2FnZV9CbG9j azo6aXNfZGF0YV9tc2cgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICBBQ0VfTWVzc2FnZV9UeXBlIG10ID0gdGhpcy0+bXNnX3R5 cGUgKCk7CiAgcmV0dXJuCiAgICBtdCA9PSBBQ0VfTWVzc2FnZV9CbG9jazo6TUJfREFUQQogICAg fHwgbXQgPT0gQUNFX01lc3NhZ2VfQmxvY2s6Ok1CX1BST1RPCiAgICB8fCBtdCA9PSBBQ0VfTWVz c2FnZV9CbG9jazo6TUJfUENQUk9UTzsKfQoKaW5saW5lIHVfbG9uZwpBQ0VfTWVzc2FnZV9CbG9j azo6bXNnX3ByaW9yaXR5ICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5wcmlvcml0eV87Cn0KCmlubGlu ZSB2b2lkCkFDRV9NZXNzYWdlX0Jsb2NrOjptc2dfcHJpb3JpdHkgKHVfbG9uZyBwcmkpCnsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+cHJp b3JpdHlfID0gcHJpOwp9CgppbmxpbmUgY29uc3QgQUNFX1RpbWVfVmFsdWUgJgpBQ0VfTWVzc2Fn ZV9CbG9jazo6bXNnX2V4ZWN1dGlvbl90aW1lICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1 cm4gQUNFX1RpbWVfVmFsdWU6Onplcm87Cgp9CgppbmxpbmUgdm9pZApBQ0VfTWVzc2FnZV9CbG9j azo6bXNnX2V4ZWN1dGlvbl90aW1lIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZXQpCnsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCgogIGRvIHsgfSB3aGlsZSAoJmV0ID09IDApOwoKfQoKaW5s aW5lIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICYKQUNFX01lc3NhZ2VfQmxvY2s6Om1zZ19kZWFkbGlu ZV90aW1lICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICByZXR1cm4gQUNFX1RpbWVfVmFsdWU6Om1h eF90aW1lOwoKfQoKaW5saW5lIHZvaWQKQUNFX01lc3NhZ2VfQmxvY2s6Om1zZ19kZWFkbGluZV90 aW1lIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZHQpCnsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKCiAgZG8geyB9IHdoaWxlICgmZHQgPT0gMCk7Cgp9CgppbmxpbmUgY2hhciAqCkFDRV9NZXNz YWdlX0Jsb2NrOjpiYXNlICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+ZGF0YV9ibG9jayAoKS0+YmFzZSAoKTsKfQoK aW5saW5lIHZvaWQKQUNFX01lc3NhZ2VfQmxvY2s6OmJhc2UgKGNoYXIgKm1zZ19kYXRhLAogICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1zZ19sZW5ndGgsCiAgICAgICAgICAgICAgICAg ICAgICAgICBNZXNzYWdlX0ZsYWdzIG1zZ19mbGFncykKewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+cmRfcHRyXyA9IDA7CiAgdGhpcy0+d3JfcHRyXyA9 IDA7CiAgdGhpcy0+ZGF0YV9ibG9jayAoKS0+YmFzZSAobXNnX2RhdGEsIG1zZ19sZW5ndGgsIG1z Z19mbGFncyk7Cn0KCmlubGluZSBjaGFyICoKQUNFX01lc3NhZ2VfQmxvY2s6OnJkX3B0ciAodm9p ZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBy ZXR1cm4gdGhpcy0+YmFzZSAoKSArIHRoaXMtPnJkX3B0cl87Cn0KCmlubGluZSB2b2lkCkFDRV9N ZXNzYWdlX0Jsb2NrOjp3cl9wdHIgKGNoYXIgKm5ld19wdHIpCnsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+d3JfcHRyXyA9IG5ld19wdHIgLSB0aGlz LT5iYXNlICgpOwp9CgoKCmlubGluZSBjaGFyICoKQUNFX0RhdGFfQmxvY2s6Om1hcmsgKHZvaWQp IGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0 aGlzLT5iYXNlXyArIHRoaXMtPmN1cl9zaXplXzsKfQoKaW5saW5lIGNoYXIgKgpBQ0VfTWVzc2Fn ZV9CbG9jazo6bWFyayAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmRhdGFfYmxvY2sgKCktPm1hcmsgKCk7Cn0KCmlu bGluZSBjaGFyICoKQUNFX0RhdGFfQmxvY2s6OmVuZCAodm9pZCkgY29uc3QKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YmFzZV8gKyB0aGlzLT5t YXhfc2l6ZV87Cn0KCmlubGluZSBjaGFyICoKQUNFX01lc3NhZ2VfQmxvY2s6OmVuZCAodm9pZCkg Y29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4g dGhpcy0+ZGF0YV9ibG9jayAoKS0+ZW5kICgpOwp9CgoKaW5saW5lIHZvaWQKQUNFX01lc3NhZ2Vf QmxvY2s6OnJkX3B0ciAoY2hhciAqbmV3X3B0cikKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICB0aGlzLT5yZF9wdHJfID0gbmV3X3B0ciAtIHRoaXMtPmJhc2Ug KCk7Cn0KCmlubGluZSB2b2lkCkFDRV9NZXNzYWdlX0Jsb2NrOjpyZF9wdHIgKHNpemVfdCBuKQp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHRoaXMtPnJkX3B0 cl8gKz0gbjsKfQoKaW5saW5lIGNoYXIgKgpBQ0VfTWVzc2FnZV9CbG9jazo6d3JfcHRyICh2b2lk KSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJl dHVybiB0aGlzLT5iYXNlICgpICsgdGhpcy0+d3JfcHRyXzsKfQoKaW5saW5lIHZvaWQKQUNFX01l c3NhZ2VfQmxvY2s6OndyX3B0ciAoc2l6ZV90IG4pCnsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+d3JfcHRyXyArPSBuOwp9CgppbmxpbmUgdm9pZApB Q0VfTWVzc2FnZV9CbG9jazo6cmVzZXQgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICB0aGlzLT5yZF9wdHJfID0gMDsKICB0aGlzLT53cl9wdHJfID0g MDsKfQoKaW5saW5lIHNpemVfdApBQ0VfTWVzc2FnZV9CbG9jazo6c3BhY2UgKHZvaWQpIGNvbnN0 CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhp cy0+bWFyayAoKSAtIHRoaXMtPndyX3B0ciAoKTsKfQoKaW5saW5lIEFDRV9EYXRhX0Jsb2NrICoK QUNFX01lc3NhZ2VfQmxvY2s6OnJlcGxhY2VfZGF0YV9ibG9jayAoQUNFX0RhdGFfQmxvY2sgKmRi KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogIEFDRV9EYXRhX0Jsb2NrICpvbGQgPSB0aGlzLT5kYXRhX2Jsb2NrXzsKICB0aGlzLT5kYXRh X2Jsb2NrXyA9IGRiOwoKICBpZiAoZGIgIT0gMCkKICAgIHsKCgogICAgICB0aGlzLT5yZF9wdHIg KHRoaXMtPmRhdGFfYmxvY2sgKCktPmJhc2UgKCkpOwogICAgICB0aGlzLT53cl9wdHIgKHRoaXMt PmRhdGFfYmxvY2sgKCktPmJhc2UgKCkpOwogICAgfQoKICByZXR1cm4gb2xkOwp9CgppbmxpbmUg dm9pZApBQ0VfTWVzc2FnZV9CbG9jazo6Y29udCAoQUNFX01lc3NhZ2VfQmxvY2sgKmNvbnRfbXNn KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT5jb250 XyA9IGNvbnRfbXNnOwp9CgppbmxpbmUgQUNFX01lc3NhZ2VfQmxvY2sgKgpBQ0VfTWVzc2FnZV9C bG9jazo6Y29udCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmNvbnRfOwp9CgppbmxpbmUgdm9pZApBQ0VfTWVzc2Fn ZV9CbG9jazo6bmV4dCAoQUNFX01lc3NhZ2VfQmxvY2sgKm5leHRfbXNnKQp7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT5uZXh0XyA9IG5leHRfbXNnOwp9 CgppbmxpbmUgQUNFX01lc3NhZ2VfQmxvY2sgKgpBQ0VfTWVzc2FnZV9CbG9jazo6bmV4dCAodm9p ZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0 dXJuIHRoaXMtPm5leHRfOwp9CgppbmxpbmUgdm9pZApBQ0VfTWVzc2FnZV9CbG9jazo6cHJldiAo QUNFX01lc3NhZ2VfQmxvY2sgKm5leHRfbXNnKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICB0aGlzLT5wcmV2XyA9IG5leHRfbXNnOwp9CgppbmxpbmUgQUNFX01l c3NhZ2VfQmxvY2sgKgpBQ0VfTWVzc2FnZV9CbG9jazo6cHJldiAodm9pZCkgY29uc3QKewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnByZXZf Owp9CgppbmxpbmUgQUNFX0FsbG9jYXRvciAqCkFDRV9EYXRhX0Jsb2NrOjphbGxvY2F0b3Jfc3Ry YXRlZ3kgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmFsbG9jYXRvcl9zdHJhdGVneV87Cn0KCmlu bGluZSBBQ0VfTG9jayAqCkFDRV9EYXRhX0Jsb2NrOjpsb2NraW5nX3N0cmF0ZWd5ICh2b2lkKQp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1 cm4gdGhpcy0+bG9ja2luZ19zdHJhdGVneV87Cn0KCmlubGluZSBBQ0VfTG9jayAqCkFDRV9EYXRh X0Jsb2NrOjpsb2NraW5nX3N0cmF0ZWd5IChBQ0VfTG9jayAqbmxzKQp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBBQ0VfTG9jayAqb2xzID0gdGhp cy0+bG9ja2luZ19zdHJhdGVneV87CgogIHRoaXMtPmxvY2tpbmdfc3RyYXRlZ3lfID0gbmxzOwog IHJldHVybiBvbHM7Cn0KCmlubGluZSBBQ0VfTG9jayAqCkFDRV9NZXNzYWdlX0Jsb2NrOjpsb2Nr aW5nX3N0cmF0ZWd5ICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+ZGF0YV9ibG9jayAoKS0+bG9ja2luZ19z dHJhdGVneSAoKTsKfQoKaW5saW5lIEFDRV9Mb2NrICoKQUNFX01lc3NhZ2VfQmxvY2s6OmxvY2tp bmdfc3RyYXRlZ3kgKEFDRV9Mb2NrICpubHMpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogIEFDRV9Mb2NrICpvbHMgPSB0aGlzLT5kYXRhX2Js b2NrICgpLT5sb2NraW5nX3N0cmF0ZWd5ICgpOwogIHRoaXMtPmRhdGFfYmxvY2sgKCktPmxvY2tp bmdfc3RyYXRlZ3kgKG5scyk7CiAgcmV0dXJuIG9sczsKfQoKCgoKCgppbmxpbmUgdV9sb25nCkFD RV9EeW5hbWljX01lc3NhZ2VfU3RyYXRlZ3k6OnN0YXRpY19iaXRfZmllbGRfbWFzayAodm9pZCkg Y29uc3QKewogIHJldHVybiBzdGF0aWNfYml0X2ZpZWxkX21hc2tfOwp9CgoKaW5saW5lIHZvaWQK QUNFX0R5bmFtaWNfTWVzc2FnZV9TdHJhdGVneTo6c3RhdGljX2JpdF9maWVsZF9tYXNrICh1X2xv bmcgdWwpCnsKICBzdGF0aWNfYml0X2ZpZWxkX21hc2tfID0gdWw7Cn0KCgppbmxpbmUgdV9sb25n CkFDRV9EeW5hbWljX01lc3NhZ2VfU3RyYXRlZ3k6OnN0YXRpY19iaXRfZmllbGRfc2hpZnQgKHZv aWQpIGNvbnN0CnsKICByZXR1cm4gc3RhdGljX2JpdF9maWVsZF9zaGlmdF87Cn0KCgppbmxpbmUg dm9pZApBQ0VfRHluYW1pY19NZXNzYWdlX1N0cmF0ZWd5OjpzdGF0aWNfYml0X2ZpZWxkX3NoaWZ0 ICh1X2xvbmcgdWwpCnsKICBzdGF0aWNfYml0X2ZpZWxkX3NoaWZ0XyA9IHVsOwp9CgoKaW5saW5l IHVfbG9uZwpBQ0VfRHluYW1pY19NZXNzYWdlX1N0cmF0ZWd5OjpkeW5hbWljX3ByaW9yaXR5X21h eCAodm9pZCkgY29uc3QKewogIHJldHVybiBkeW5hbWljX3ByaW9yaXR5X21heF87Cn0KCgppbmxp bmUgdm9pZApBQ0VfRHluYW1pY19NZXNzYWdlX1N0cmF0ZWd5OjpkeW5hbWljX3ByaW9yaXR5X21h eCAodV9sb25nIHVsKQp7CgoKCgogIGR5bmFtaWNfcHJpb3JpdHlfbWF4XyA9IHVsOwogIHBlbmRp bmdfc2hpZnRfID0gQUNFX1RpbWVfVmFsdWUgKDAsIHVsKTsKfQoKCmlubGluZSB1X2xvbmcKQUNF X0R5bmFtaWNfTWVzc2FnZV9TdHJhdGVneTo6ZHluYW1pY19wcmlvcml0eV9vZmZzZXQgKHZvaWQp IGNvbnN0CnsKICByZXR1cm4gZHluYW1pY19wcmlvcml0eV9vZmZzZXRfOwp9CgoKaW5saW5lIHZv aWQKQUNFX0R5bmFtaWNfTWVzc2FnZV9TdHJhdGVneTo6ZHluYW1pY19wcmlvcml0eV9vZmZzZXQg KHVfbG9uZyB1bCkKewoKCgoKCiAgZHluYW1pY19wcmlvcml0eV9vZmZzZXRfID0gdWw7CiAgbWF4 X2xhdGVfID0gQUNFX1RpbWVfVmFsdWUgKDAsIHVsIC0gMSk7CiAgbWluX3BlbmRpbmdfID0gQUNF X1RpbWVfVmFsdWUgKDAsIHVsKTsKfQoKCgppbmxpbmUgQUNFX0R5bmFtaWNfTWVzc2FnZV9TdHJh dGVneTo6UHJpb3JpdHlfU3RhdHVzCkFDRV9EeW5hbWljX01lc3NhZ2VfU3RyYXRlZ3k6OnByaW9y aXR5X3N0YXR1cyAoQUNFX01lc3NhZ2VfQmxvY2sgJiBtYiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmIHR2KQp7Cgog IFByaW9yaXR5X1N0YXR1cyBzdGF0dXMgPSBBQ0VfRHluYW1pY19NZXNzYWdlX1N0cmF0ZWd5OjpQ RU5ESU5HOwoKCgoKICBBQ0VfVGltZV9WYWx1ZSBwcmlvcml0eSAodHYpOwogIGNvbnZlcnRfcHJp b3JpdHkgKHByaW9yaXR5LCBtYik7CgoKICBpZiAocHJpb3JpdHkgPCBBQ0VfVGltZV9WYWx1ZTo6 emVybykKICAgIHsKCgogICAgICBwcmlvcml0eSArPSBwZW5kaW5nX3NoaWZ0XzsKICAgICAgaWYg KHByaW9yaXR5IDwgbWluX3BlbmRpbmdfKQogICAgICAgIHByaW9yaXR5ID0gbWluX3BlbmRpbmdf OwogICAgfQoKCiAgZWxzZSBpZiAocHJpb3JpdHkgPiBtYXhfbGF0ZV8pCiAgICB7CgogICAgICBt Yi5tc2dfcHJpb3JpdHkgKDApOwogICAgICByZXR1cm4gQUNFX0R5bmFtaWNfTWVzc2FnZV9TdHJh dGVneTo6QkVZT05EX0xBVEU7CiAgICB9CgogIGVsc2UKICAgIHN0YXR1cyA9IEFDRV9EeW5hbWlj X01lc3NhZ2VfU3RyYXRlZ3k6OkxBVEU7CgoKCiAgbWIubXNnX3ByaW9yaXR5KChtYi5tc2dfcHJp b3JpdHkoKSAmIHN0YXRpY19iaXRfZmllbGRfbWFza18pIHwKICAgICAgICAgICAgICAgICAgKChw cmlvcml0eS51c2VjICgpICsgMTAwMDAwMEwgKiBwcmlvcml0eS5zZWMgKCkpIDw8CiAgICAgICAg ICAgICAgICAgICBzdGF0aWNfYml0X2ZpZWxkX3NoaWZ0XykpOwoKICByZXR1cm4gc3RhdHVzOwp9 CiMgNjAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVz c2FnZV9CbG9jay5pIgppbmxpbmUgdm9pZApBQ0VfRGVhZGxpbmVfTWVzc2FnZV9TdHJhdGVneTo6 Y29udmVydF9wcmlvcml0eSAoQUNFX1RpbWVfVmFsdWUgJiBwcmlvcml0eSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Js b2NrICYgbWIpCnsKCgogIHByaW9yaXR5IC09IG1iLm1zZ19kZWFkbGluZV90aW1lICgpOwp9CgoK CgoKCgppbmxpbmUgdm9pZApBQ0VfTGF4aXR5X01lc3NhZ2VfU3RyYXRlZ3k6OmNvbnZlcnRfcHJp b3JpdHkgKEFDRV9UaW1lX1ZhbHVlICYgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sgJiBtYikKewoK CiAgcHJpb3JpdHkgKz0gbWIubXNnX2V4ZWN1dGlvbl90aW1lICgpOwogIHByaW9yaXR5IC09IG1i Lm1zZ19kZWFkbGluZV90aW1lICgpOwp9CiMgOTU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5oIiAyCgoKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9ja19ULmgiIDEK IyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3Nh Z2VfQmxvY2tfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9ja19ULmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIgMQojIDEzICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5o IgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0Uu aCIgMQojIDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv TWVzc2FnZV9CbG9jay5oIiAyCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrX1QuaCIgMgojIDM1ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9ja19ULmgiCnRlbXBsYXRl IDxjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX0xvY2tlZF9EYXRhX0Jsb2NrIDogcHVibGljIEFD RV9EYXRhX0Jsb2NrCnsKcHVibGljOgoKCiAgQUNFX0xvY2tlZF9EYXRhX0Jsb2NrICh2b2lkKTsK CgogIEFDRV9Mb2NrZWRfRGF0YV9CbG9jayAoc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgICBBQ0VfTWVzc2FnZV9CbG9jazo6QUNFX01lc3NhZ2VfVHlwZSBtc2dfdHlwZSwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZ19kYXRhLAogICAgICAgICAgICAg ICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2NhdG9yX3N0cmF0ZWd5LAogICAgICAgICAg ICAgICAgICAgICAgICAgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgZmxhZ3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yICpkYXRhX2Jsb2NrX2FsbG9jYXRv cik7CgoKICB2aXJ0dWFsIH5BQ0VfTG9ja2VkX0RhdGFfQmxvY2sgKHZvaWQpOwoKCgoKCgogIHZp cnR1YWwgQUNFX0RhdGFfQmxvY2sgKmNsb25lX25vY29weSAoQUNFX01lc3NhZ2VfQmxvY2s6Ok1l c3NhZ2VfRmxhZ3MgbWFzayA9IDApIGNvbnN0OwoKcHJpdmF0ZToKCiAgQUNFX0xPQ0sgbG9ja187 CgoKICBBQ0VfTG9ja2VkX0RhdGFfQmxvY2s8QUNFX0xPQ0s+ICZvcGVyYXRvcj0gKGNvbnN0IEFD RV9Mb2NrZWRfRGF0YV9CbG9jazxBQ0VfTE9DSz4gJik7CiAgQUNFX0xvY2tlZF9EYXRhX0Jsb2Nr IChjb25zdCBBQ0VfTG9ja2VkX0RhdGFfQmxvY2s8QUNFX0xPQ0s+ICYpOwp9OwoKCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2tf VC5pIiAxCgoKCgoKCnRlbXBsYXRlPGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUKQUNFX0xvY2tlZF9E YXRhX0Jsb2NrPEFDRV9MT0NLPjo6QUNFX0xvY2tlZF9EYXRhX0Jsb2NrICh2b2lkKQp7CiAgdGhp cy0+bG9ja2luZ19zdHJhdGVneV8gPSAmdGhpcy0+bG9ja187Cn0KCnRlbXBsYXRlPGNsYXNzIEFD RV9MT0NLPiBpbmxpbmUKQUNFX0xvY2tlZF9EYXRhX0Jsb2NrPEFDRV9MT0NLPjo6CkFDRV9Mb2Nr ZWRfRGF0YV9CbG9jayAoc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgQUNFX01l c3NhZ2VfQmxvY2s6OkFDRV9NZXNzYWdlX1R5cGUgbXNnX3R5cGUsCiAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqbXNnX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgQUNFX0Fs bG9jYXRvciAqYWxsb2NhdG9yX3N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICAgIEFDRV9N ZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0ZsYWdzIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg IEFDRV9BbGxvY2F0b3IgKmRhdGFfYmxvY2tfYWxsb2NhdG9yKQogIDogQUNFX0RhdGFfQmxvY2sg KHNpemUsCiAgICAgICAgICAgICAgICAgICAgbXNnX3R5cGUsCiAgICAgICAgICAgICAgICAgICAg bXNnX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3N0cmF0ZWd5LAogICAgICAg ICAgICAgICAgICAgICZsb2NrXywKICAgICAgICAgICAgICAgICAgICBmbGFncywKICAgICAgICAg ICAgICAgICAgICBkYXRhX2Jsb2NrX2FsbG9jYXRvcikKewp9CiMgNzIgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrX1QuaCIgMgoKCgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdl X0Jsb2NrX1QuY3BwIiAxCgoKCgoKCmlubGluZSBjb25zdCBjaGFyKiBnZXRfcmNzaWRfYWNlX01l c3NhZ2VfQmxvY2tfVCAoY29uc3QgY2hhciopIHsgcmV0dXJuICJNZXNzYWdlX0Jsb2NrX1QuY3Bw LHYgNC42IDIwMDEvMDMvMDQgMDA6NTU6MjggYnJ1bnNjaCBFeHAiIDsgfSBzdGF0aWMgY29uc3Qg Y2hhciogcmNzaWRfYWNlX01lc3NhZ2VfQmxvY2tfVCA9IGdldF9yY3NpZF9hY2VfTWVzc2FnZV9C bG9ja19UICggcmNzaWRfYWNlX01lc3NhZ2VfQmxvY2tfVCApIDsKCgoKCgp0ZW1wbGF0ZTxjbGFz cyBMPgpBQ0VfTG9ja2VkX0RhdGFfQmxvY2s8TD46On5BQ0VfTG9ja2VkX0RhdGFfQmxvY2sgKHZv aWQpCnsKfQoKdGVtcGxhdGU8Y2xhc3MgQUNFX0xPQ0s+IEFDRV9EYXRhX0Jsb2NrICoKQUNFX0xv Y2tlZF9EYXRhX0Jsb2NrPEFDRV9MT0NLPjo6Y2xvbmVfbm9jb3B5IChBQ0VfTWVzc2FnZV9CbG9j azo6TWVzc2FnZV9GbGFncyBtYXNrKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBjb25zdCBBQ0VfTWVzc2FnZV9CbG9jazo6 TWVzc2FnZV9GbGFncyBhbHdheXNfY2xlYXIgPQogICAgQUNFX01lc3NhZ2VfQmxvY2s6OkRPTlRf REVMRVRFOwoKICBBQ0VfTG9ja2VkX0RhdGFfQmxvY2s8QUNFX0xPQ0s+ICpuYjsKCiAgZG8geyBu YiA9IHN0YXRpY19jYXN0PEFDRV9Mb2NrZWRfRGF0YV9CbG9jazxBQ0VfTE9DSz4qPiAodGhpcy0+ ZGF0YV9ibG9ja19hbGxvY2F0b3IgKCktPm1hbGxvYyAoc2l6ZW9mIChBQ0VfTG9ja2VkX0RhdGFf QmxvY2s8QUNFX0xPQ0s+KSkpOyBpZiAobmIgPT0gMCkgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkp ID0gMTI7IHJldHVybiAwO30gZWxzZSB7IG5ldyAobmIpIEFDRV9Mb2NrZWRfRGF0YV9CbG9jazxB Q0VfTE9DSz4gKHRoaXMtPnNpemUgKCksIHRoaXMtPm1zZ190eXBlICgpLCAwLCB0aGlzLT5hbGxv Y2F0b3Jfc3RyYXRlZ3kgKCksIHRoaXMtPmZsYWdzICgpLCB0aGlzLT5kYXRhX2Jsb2NrX2FsbG9j YXRvciAoKSk7IH0gfSB3aGlsZSAoMCk7CiMgNDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrX1QuY3BwIgogIG5iLT5jbHJfZmxhZ3Mg KG1hc2sgfCBhbHdheXNfY2xlYXIpOwogIHJldHVybiBuYjsKfQojIDc2ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9ja19ULmgiIDIKCgoK CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9z dC5oIiAxCiMgODMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9NZXNzYWdlX0Jsb2NrX1QuaCIgMgojIDk1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIgMgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA5NjAgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiIDIK IyA0MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9C YXNlLmgiIDIKCgoKCgoKCmNsYXNzIEFDRV9DRFIKewpwdWJsaWM6CgoKCgoKICBlbnVtCiAgewoK CgoKICAgIE9DVEVUX1NJWkUgPSAxLAogICAgU0hPUlRfU0laRSA9IDIsCiAgICBMT05HX1NJWkUg PSA0LAogICAgTE9OR0xPTkdfU0laRSA9IDgsCiAgICBMT05HRE9VQkxFX1NJWkUgPSAxNiwKCiAg ICBPQ1RFVF9BTElHTiA9IDEsCiAgICBTSE9SVF9BTElHTiA9IDIsCiAgICBMT05HX0FMSUdOID0g NCwKICAgIExPTkdMT05HX0FMSUdOID0gOCwKCgogICAgTE9OR0RPVUJMRV9BTElHTiA9IDgsCgoK CiAgICBNQVhfQUxJR05NRU5UID0gOCwKCgoKCgoKCiAgICBERUZBVUxUX0JVRlNJWkUgPSA1MTIs CgoKCiAgICBFWFBfR1JPV1RIX01BWCA9IDY1NTM2LAoKCgoKICAgIExJTkVBUl9HUk9XVEhfQ0hV TksgPSA2NTUzNgogIH07CgoKCgoKCgogIHN0YXRpYyB2b2lkIHN3YXBfMiAoY29uc3QgY2hhciAq b3JpZywgY2hhciAqdGFyZ2V0KTsKICBzdGF0aWMgdm9pZCBzd2FwXzQgKGNvbnN0IGNoYXIgKm9y aWcsIGNoYXIgKnRhcmdldCk7CiAgc3RhdGljIHZvaWQgc3dhcF84IChjb25zdCBjaGFyICpvcmln LCBjaGFyICp0YXJnZXQpOwogIHN0YXRpYyB2b2lkIHN3YXBfMTYgKGNvbnN0IGNoYXIgKm9yaWcs IGNoYXIgKnRhcmdldCk7CiAgc3RhdGljIHZvaWQgc3dhcF8yX2FycmF5IChjb25zdCBjaGFyICpv cmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdGFyZ2V0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CiAgc3RhdGljIHZvaWQgc3dhcF80X2Fy cmF5IChjb25zdCBjaGFyICpvcmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq dGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CiAgc3Rh dGljIHZvaWQgc3dhcF84X2FycmF5IChjb25zdCBjaGFyICpvcmlnLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IGxlbmd0aCk7CiAgc3RhdGljIHZvaWQgc3dhcF8xNl9hcnJheSAoY29uc3QgY2hhciAqb3Jp ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0YXJnZXQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CgoKCiAgc3RhdGljIHZvaWQgbWJfYWxp Z24gKEFDRV9NZXNzYWdlX0Jsb2NrICptYik7CiMgMTM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2UuaCIKICBzdGF0aWMgc2l6ZV90IGZpcnN0 X3NpemUgKHNpemVfdCBtaW5zaXplKTsKCgoKICBzdGF0aWMgc2l6ZV90IG5leHRfc2l6ZSAoc2l6 ZV90IG1pbnNpemUpOwoKCgoKCgoKICBzdGF0aWMgaW50IGdyb3cgKEFDRV9NZXNzYWdlX0Jsb2Nr ICptYiwgc2l6ZV90IG1pbnNpemUpOwoKCgogIHN0YXRpYyB2b2lkIGNvbnNvbGlkYXRlIChBQ0Vf TWVzc2FnZV9CbG9jayAqZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9N ZXNzYWdlX0Jsb2NrICpzcmMpOwoKICBzdGF0aWMgc2l6ZV90IHRvdGFsX2xlbmd0aCAoY29uc3Qg QUNFX01lc3NhZ2VfQmxvY2sgKmJlZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBQ0VfTWVzc2FnZV9CbG9jayAqZW5kKTsKIyAxNjUgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DRFJfQmFzZS5oIgogICAgdHlwZWRlZiB1X2NoYXIg Qm9vbGVhbjsKCgogIHR5cGVkZWYgdV9jaGFyIE9jdGV0OwogIHR5cGVkZWYgY2hhciBDaGFyOwog IHR5cGVkZWYgQUNFX09TOjpXQ2hhciBXQ2hhcjsKICB0eXBlZGVmIEFDRV9JTlQxNiBTaG9ydDsK ICB0eXBlZGVmIEFDRV9VSU5UMTYgVVNob3J0OwogIHR5cGVkZWYgQUNFX0lOVDMyIExvbmc7CiAg dHlwZWRlZiBBQ0VfVUlOVDMyIFVMb25nOwogIHR5cGVkZWYgQUNFX1VJTlQ2NCBVTG9uZ0xvbmc7 CiMgMTkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RS X0Jhc2UuaCIKICAgICAgICAgICAgICB0eXBlZGVmIGxvbmcgbG9uZyBMb25nTG9uZzsKIyAyMjAg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DRFJfQmFzZS5o IgogICAgICB0eXBlZGVmIGZsb2F0IEZsb2F0OwojIDI0MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9CYXNlLmgiCiAgICAgIHR5cGVkZWYgZG91Ymxl IERvdWJsZTsKIyAyNjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9DRFJfQmFzZS5oIgogICAgICAgc3RydWN0IExvbmdEb3VibGUKICAgICAgIHsKICAgICAg ICAgY2hhciBsZFsxNl07CiAgICAgICAgIGludCBvcGVyYXRvcj09IChjb25zdCBMb25nRG91Ymxl ICZyaHMpIGNvbnN0OwogICAgICAgICBpbnQgb3BlcmF0b3IhPSAoY29uc3QgTG9uZ0RvdWJsZSAm cmhzKSBjb25zdDsKCiAgICAgICB9OwojIDI4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9CYXNlLmgiCn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2UuaW5sIiAxCiMgNDcgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DRFJfQmFzZS5pbmwiCmlu bGluZSB2b2lkCkFDRV9DRFI6OnN3YXBfMiAoY29uc3QgY2hhciAqb3JpZywgY2hhciogdGFyZ2V0 KQp7CgoKICB1bnNpZ25lZCBzaG9ydCBhID0KICAgICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVu c2lnbmVkIHNob3J0Kj4gKG9yaWcpOwogIGFzbSggInJvbHcgJDgsICUwIiA6ICI9ciIgKGEpIDog IjAiIChhKSApOwogICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4gKHRhcmdldCkg PSBhOwojIDczICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv Q0RSX0Jhc2UuaW5sIgp9CgppbmxpbmUgdm9pZApBQ0VfQ0RSOjpzd2FwXzQgKGNvbnN0IGNoYXIq IG9yaWcsIGNoYXIqIHRhcmdldCkKewoKCiAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGogPQogICAg KnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4gKG9yaWcpOwogIGFzbSAoImJz d2FwICUxIiA6ICI9ciIgKGopIDogIjAiIChqKSk7CiAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu ZWQgaW50Kj4gKHRhcmdldCkgPSBqOwojIDk3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2UuaW5sIgp9CgppbmxpbmUgdm9pZApBQ0VfQ0RSOjpz d2FwXzggKGNvbnN0IGNoYXIqIG9yaWcsIGNoYXIqIHRhcmdldCkKewoKICByZWdpc3RlciB1bnNp Z25lZCBpbnQgaSA9CiAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPiAo b3JpZyk7CiAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGogPQogICAgKnJlaW50ZXJwcmV0X2Nhc3Q8 Y29uc3QgdW5zaWduZWQgaW50Kj4gKG9yaWcgKyA0KTsKICBhc20gKCJic3dhcCAlMSIgOiAiPXIi IChpKSA6ICIwIiAoaSkpOwogIGFzbSAoImJzd2FwICUxIiA6ICI9ciIgKGopIDogIjAiIChqKSk7 CiAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4gKHRhcmdldCArIDQpID0gaTsKICAq cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPiAodGFyZ2V0KSA9IGo7CiMgMTQzICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2UuaW5sIgp9 CgppbmxpbmUgdm9pZApBQ0VfQ0RSOjpzd2FwXzE2IChjb25zdCBjaGFyKiBvcmlnLCBjaGFyKiB0 YXJnZXQpCnsKICBzd2FwXzggKG9yaWcgKyA4LCB0YXJnZXQpOwogIHN3YXBfOCAob3JpZywgdGFy Z2V0ICsgOCk7Cn0KCmlubGluZSB2b2lkCkFDRV9DRFI6Om1iX2FsaWduIChBQ0VfTWVzc2FnZV9C bG9jayAqbWIpCnsKICBjaGFyICpzdGFydCA9ICgoY2hhciAqKSAoKCgocHRyX2FyaXRoX3QpICht Yi0+YmFzZSAoKSkpICsgKChwdHJfYXJpdGhfdCkoKChBQ0VfQ0RSOjpNQVhfQUxJR05NRU5UKSkt MSkpKSAmICh+KChwdHJfYXJpdGhfdCkoKChBQ0VfQ0RSOjpNQVhfQUxJR05NRU5UKSktMSkpKSkp OwoKICBtYi0+cmRfcHRyIChzdGFydCk7CiAgbWItPndyX3B0ciAoc3RhcnQpOwp9CgppbmxpbmUg c2l6ZV90CkFDRV9DRFI6OmZpcnN0X3NpemUgKHNpemVfdCBtaW5zaXplKQp7CiAgaWYgKG1pbnNp emUgPT0gMCkKICAgIHJldHVybiBBQ0VfQ0RSOjpERUZBVUxUX0JVRlNJWkU7CgogIHNpemVfdCBu ZXdzaXplID0gQUNFX0NEUjo6REVGQVVMVF9CVUZTSVpFOwogIHdoaWxlIChuZXdzaXplIDwgbWlu c2l6ZSkKICAgIHsKICAgICAgaWYgKG5ld3NpemUgPCBBQ0VfQ0RSOjpFWFBfR1JPV1RIX01BWCkK ICAgICAgICB7CgoKICAgICAgICAgIG5ld3NpemUgKj0gMjsKICAgICAgICB9CiAgICAgIGVsc2UK ICAgICAgICB7CgoKCiAgICAgICAgICBuZXdzaXplICs9IEFDRV9DRFI6OkxJTkVBUl9HUk9XVEhf Q0hVTks7CiAgICAgICAgfQogICAgfQogIHJldHVybiBuZXdzaXplOwp9CgppbmxpbmUgc2l6ZV90 CkFDRV9DRFI6Om5leHRfc2l6ZSAoc2l6ZV90IG1pbnNpemUpCnsKICBzaXplX3QgbmV3c2l6ZSA9 CiAgICBBQ0VfQ0RSOjpmaXJzdF9zaXplIChtaW5zaXplKTsKCiAgaWYgKG5ld3NpemUgPT0gbWlu c2l6ZSkKICAgIHsKCiAgICAgIGlmIChuZXdzaXplIDwgQUNFX0NEUjo6RVhQX0dST1dUSF9NQVgp CiAgICAgICAgbmV3c2l6ZSAqPSAyOwogICAgICBlbHNlCiAgICAgICAgbmV3c2l6ZSArPSBBQ0Vf Q0RSOjpMSU5FQVJfR1JPV1RIX0NIVU5LOwogICAgfQoKICByZXR1cm4gbmV3c2l6ZTsKfQojIDI4 NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9CYXNl LmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvcG9zdC5oIiAxCiMgMjkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvQ0RSX0Jhc2UuaCIgMgojIDMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhZndkLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdHJ5X21hY3Jvcy5oIiAxCiMg NDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdHJ5 X21hY3Jvcy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9wcmUuaCIgMQojIDQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL3RyeV9tYWNyb3MuaCIgMgojIDUzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL3RyeV9tYWNyb3MuaCIKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL29yYmNvbmYuaCIgMQojIDIx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL29yYmNv bmYuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv cHJlLmgiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9vcmJjb25mLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL09TLmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9vcmJjb25mLmgiIDIKIyA0MDggIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vb3JiY29uZi5oIgplbnVtIE1DQVNU X1NFUlZJQ0VJRAp7CiAgTkFNRVNFUlZJQ0UsCiAgVFJBRElOR1NFUlZJQ0UsCiAgSU1QTFJFUE9T RVJWSUNFLAogIElOVEVSRkFDRVJFUE9TRVJWSUNFCn07CiMgODY1ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL29yYmNvbmYuaCIKZW51bSBUQU9fQ2Fj aGVkX1BvbGljeV9UeXBlCnsKICBUQU9fQ0FDSEVEX1BPTElDWV9VTkNBQ0hFRCA9IC0xLAogIFRB T19DQUNIRURfUE9MSUNZX1BSSU9SSVRZX01PREVMID0gMCwKICBUQU9fQ0FDSEVEX1BPTElDWV9U SFJFQURQT09MLAogIFRBT19DQUNIRURfUE9MSUNZX1JUX1NFUlZFUl9QUk9UT0NPTCwKICBUQU9f Q0FDSEVEX1BPTElDWV9SVF9DTElFTlRfUFJPVE9DT0wsCiAgVEFPX0NBQ0hFRF9QT0xJQ1lfUlRf UFJJVkFURV9DT05ORUNUSU9OLAogIFRBT19DQUNIRURfUE9MSUNZX1JUX1BSSU9SSVRZX0JBTkRF RF9DT05ORUNUSU9OLAoKICBUQU9fQ0FDSEVEX1BPTElDWV9MSUZFU1BBTiwKICBUQU9fQ0FDSEVE X1BPTElDWV9JRF9VTklRVUVORVNTLAogIFRBT19DQUNIRURfUE9MSUNZX0lEX0FTU0lHTk1FTlQs CgoKICBUQU9fQ0FDSEVEX1BPTElDWV9USFJFQUQsCiAgVEFPX0NBQ0hFRF9QT0xJQ1lfSU1QTElD SVRfQUNUSVZBVElPTiwKICBUQU9fQ0FDSEVEX1BPTElDWV9TRVJWQU5UX1JFVEVOVElPTiwKICBU QU9fQ0FDSEVEX1BPTElDWV9SRVFVRVNUX1BST0NFU1NJTkcsCgoKCiAgVEFPX0NBQ0hFRF9QT0xJ Q1lfU1lOQ19TQ09QRSwKCgoKICBUQU9fQ0FDSEVEX1BPTElDWV9SRUxBVElWRV9ST1VORFRSSVBf VElNRU9VVCwKCgoKICBUQU9fQ0FDSEVEX1BPTElDWV9CVUZGRVJJTkdfQ09OU1RSQUlOVCwKCgog IFRBT19DQUNIRURfUE9MSUNZX01BWF9DQUNIRUQKfTsKCgoKZW51bSBUQU9fUG9saWN5X1Njb3Bl CnsKICBUQU9fUE9MSUNZX09CSkVDVF9TQ09QRSA9IDB4MDEsCiAgVEFPX1BPTElDWV9USFJFQURf U0NPUEUgPSAweDAyLAogIFRBT19QT0xJQ1lfT1JCX1NDT1BFID0gMHgwNCwKICBUQU9fUE9MSUNZ X1BPQV9TQ09QRSA9IDB4MDgsCiAgVEFPX1BPTElDWV9DTElFTlRfRVhQT1NFRCA9IDB4MTAKfTsK IyA5NTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v b3JiY29uZi5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9wb3N0LmgiIDEKIyA5NTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vb3JiY29uZi5oIiAyCiMgNTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdHJ5X21hY3Jvcy5oIiAyCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NPUkJBX21hY3Jvcy5oIiAxCiMg MjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DT1JCQV9t YWNyb3MuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvcHJlLmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL0NPUkJBX21hY3Jvcy5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMQojIDMwICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ09SQkFfbWFjcm9zLmgiIDIKIyA0MjcgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DT1JCQV9tYWNyb3MuaCIK IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5o IiAxCiMgNDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv Q09SQkFfbWFjcm9zLmgiIDIKIyA1NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby90cnlfbWFjcm9zLmgiIDIKIyAzNTMgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdHJ5X21hY3Jvcy5oIgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAzNTQg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdHJ5X21h Y3Jvcy5oIiAyCiMgMzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vY29yYmFmd2QuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vdmFyYmFzZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdmFyYmFzZS5oIgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIwICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL3ZhcmJhc2UuaCIg MgojIDMxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L3ZhcmJhc2UuaCIKY2xhc3MgVEFPX0Jhc2VfdmFyCnsKcHVibGljOgogIFRBT19CYXNlX3ZhciAo dm9pZCkge30KfTsKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL3Bvc3QuaCIgMQojIDM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL3ZhcmJhc2UuaCIgMgojIDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhZndkLmgiIDIKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19FeHBvcnQuaCIgMQoj IDEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RB T19FeHBvcnQuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vVEFPX0V4cG9ydC5oIiAyCiMgMzggIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMgojIDYzICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhZndk LmgiCmNsYXNzIFRBT19Db2xsb2NhdGlvbl9TdHJhdGVnaWVzCnsKcHVibGljOgogIGVudW0gewoK ICAgIENTX1JFTU9URV9TVFJBVEVHWSwKCgogICAgQ1NfVEhSVV9QT0FfU1RSQVRFR1ksCgoKCiAg ICBDU19ESVJFQ1RfU1RSQVRFR1ksCgoKCgogICAgQ1NfTEFTVAogIH07Cn07CgoKCmNsYXNzIENP UkJBX0FueTsKY2xhc3MgQ09SQkFfQW55X3ZhcjsKY2xhc3MgQ09SQkFfQW55X291dDsKdHlwZWRl ZiBjbGFzcyBDT1JCQV9BbnkgKkNPUkJBX0FueV9wdHI7CgpjbGFzcyBDT1JCQV9UeXBlQ29kZTsK Y2xhc3MgQ09SQkFfVHlwZUNvZGVfdmFyOwpjbGFzcyBDT1JCQV9UeXBlQ29kZV9vdXQ7CnR5cGVk ZWYgY2xhc3MgQ09SQkFfVHlwZUNvZGUgKkNPUkJBX1R5cGVDb2RlX3B0cjsKCmNsYXNzIENPUkJB X0V4Y2VwdGlvbjsKY2xhc3MgQ09SQkFfVXNlckV4Y2VwdGlvbjsKY2xhc3MgQ09SQkFfU3lzdGVt RXhjZXB0aW9uOwpjbGFzcyBDT1JCQV9Vbmtub3duVXNlckV4Y2VwdGlvbjsKY2xhc3MgQ09SQkFf RXhjZXB0aW9uTGlzdDsKY2xhc3MgQ09SQkFfRXhjZXB0aW9uTGlzdF92YXI7CnR5cGVkZWYgY2xh c3MgQ09SQkFfRXhjZXB0aW9uICpDT1JCQV9FeGNlcHRpb25fcHRyOwojIDE0OCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIgpjbGFz cyBDT1JCQV9VTktOT1dOOyBjbGFzcyBDT1JCQV9CQURfUEFSQU07IGNsYXNzIENPUkJBX05PX01F TU9SWTsgY2xhc3MgQ09SQkFfSU1QX0xJTUlUOyBjbGFzcyBDT1JCQV9DT01NX0ZBSUxVUkU7IGNs YXNzIENPUkJBX0lOVl9PQkpSRUY7IGNsYXNzIENPUkJBX09CSkVDVF9OT1RfRVhJU1Q7IGNsYXNz IENPUkJBX05PX1BFUk1JU1NJT047IGNsYXNzIENPUkJBX0lOVEVSTkFMOyBjbGFzcyBDT1JCQV9N QVJTSEFMOyBjbGFzcyBDT1JCQV9JTklUSUFMSVpFOyBjbGFzcyBDT1JCQV9OT19JTVBMRU1FTlQ7 IGNsYXNzIENPUkJBX0JBRF9UWVBFQ09ERTsgY2xhc3MgQ09SQkFfQkFEX09QRVJBVElPTjsgY2xh c3MgQ09SQkFfTk9fUkVTT1VSQ0VTOyBjbGFzcyBDT1JCQV9OT19SRVNQT05TRTsgY2xhc3MgQ09S QkFfUEVSU0lTVF9TVE9SRTsgY2xhc3MgQ09SQkFfQkFEX0lOVl9PUkRFUjsgY2xhc3MgQ09SQkFf VFJBTlNJRU5UOyBjbGFzcyBDT1JCQV9GUkVFX01FTTsgY2xhc3MgQ09SQkFfSU5WX0lERU5UOyBj bGFzcyBDT1JCQV9JTlZfRkxBRzsgY2xhc3MgQ09SQkFfSU5URl9SRVBPUzsgY2xhc3MgQ09SQkFf QkFEX0NPTlRFWFQ7IGNsYXNzIENPUkJBX09CSl9BREFQVEVSOyBjbGFzcyBDT1JCQV9EQVRBX0NP TlZFUlNJT047IGNsYXNzIENPUkJBX0lOVl9QT0xJQ1k7IGNsYXNzIENPUkJBX1JFQklORDsgY2xh c3MgQ09SQkFfVElNRU9VVDsgY2xhc3MgQ09SQkFfVFJBTlNBQ1RJT05fVU5BVkFJTEFCTEU7IGNs YXNzIENPUkJBX1RSQU5TQUNUSU9OX01PREU7IGNsYXNzIENPUkJBX1RSQU5TQUNUSU9OX1JFUVVJ UkVEOyBjbGFzcyBDT1JCQV9UUkFOU0FDVElPTl9ST0xMRURCQUNLOyBjbGFzcyBDT1JCQV9JTlZB TElEX1RSQU5TQUNUSU9OOyBjbGFzcyBDT1JCQV9DT0RFU0VUX0lOQ09NUEFUSUJMRTsgY2xhc3Mg Q09SQkFfQkFEX1FPUzsKCgoKCmNsYXNzIENPUkJBX1dyb25nVHJhbnNhY3Rpb247CnR5cGVkZWYg Q09SQkFfV3JvbmdUcmFuc2FjdGlvbiAqQ09SQkFfV3JvbmdUcmFuc2FjdGlvbl9wdHI7CgpjbGFz cyBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3k7CmNsYXNzIENPUkJBX0NvbnN0cnVjdGlvblBvbGlj eV92YXI7CmNsYXNzIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9vdXQ7CnR5cGVkZWYgY2xhc3Mg Q09SQkFfQ29uc3RydWN0aW9uUG9saWN5ICpDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyOwoK CgpjbGFzcyBDT1JCQV9SZXF1ZXN0OwpjbGFzcyBDT1JCQV9SZXF1ZXN0X3ZhcjsKY2xhc3MgQ09S QkFfUmVxdWVzdF9vdXQ7CnR5cGVkZWYgY2xhc3MgQ09SQkFfUmVxdWVzdCAqQ09SQkFfUmVxdWVz dF9wdHI7CgpjbGFzcyBDT1JCQV9PUkJfUmVxdWVzdFNlcTsKY2xhc3MgQ09SQkFfT1JCX1JlcXVl c3RTZXFfdmFyOwpjbGFzcyBDT1JCQV9PUkJfUmVxdWVzdFNlcV9vdXQ7CgpjbGFzcyBDT1JCQV9O YW1lZFZhbHVlOwpjbGFzcyBDT1JCQV9OYW1lZFZhbHVlX3ZhcjsKY2xhc3MgQ09SQkFfTmFtZWRW YWx1ZV9vdXQ7CnR5cGVkZWYgY2xhc3MgQ09SQkFfTmFtZWRWYWx1ZSAqQ09SQkFfTmFtZWRWYWx1 ZV9wdHI7CgpjbGFzcyBDT1JCQV9OVkxpc3Q7CmNsYXNzIENPUkJBX05WTGlzdF92YXI7CmNsYXNz IENPUkJBX05WTGlzdF9vdXQ7CnR5cGVkZWYgY2xhc3MgQ09SQkFfTlZMaXN0ICpDT1JCQV9OVkxp c3RfcHRyOwoKY2xhc3MgQ09SQkFfQ29udGV4dDsKY2xhc3MgQ09SQkFfQ29udGV4dF92YXI7CmNs YXNzIENPUkJBX0NvbnRleHRfb3V0Owp0eXBlZGVmIGNsYXNzIENPUkJBX0NvbnRleHQgKkNPUkJB X0NvbnRleHRfcHRyOwoKY2xhc3MgQ09SQkFfQ29udGV4dExpc3Q7CmNsYXNzIENPUkJBX0NvbnRl eHRMaXN0X3ZhcjsKY2xhc3MgQ09SQkFfQ29udGV4dExpc3Rfb3V0Owp0eXBlZGVmIGNsYXNzIENP UkJBX0NvbnRleHRMaXN0ICpDT1JCQV9Db250ZXh0TGlzdF9wdHI7CgpjbGFzcyBDT1JCQV9PUkI7 CmNsYXNzIENPUkJBX09SQl92YXI7CmNsYXNzIENPUkJBX09SQl9vdXQ7CnR5cGVkZWYgY2xhc3Mg Q09SQkFfT1JCICpDT1JCQV9PUkJfcHRyOwoKY2xhc3MgQ09SQkFfT2JqZWN0OwpjbGFzcyBDT1JC QV9PYmplY3RfdmFyOwpjbGFzcyBDT1JCQV9PYmplY3Rfb3V0Owp0eXBlZGVmIGNsYXNzIENPUkJB X09iamVjdCAqQ09SQkFfT2JqZWN0X3B0cjsKCmNsYXNzIENPUkJBX0xvY2FsT2JqZWN0OwpjbGFz cyBDT1JCQV9Mb2NhbE9iamVjdF92YXI7CmNsYXNzIENPUkJBX0xvY2FsT2JqZWN0X291dDsKdHlw ZWRlZiBjbGFzcyBDT1JCQV9Mb2NhbE9iamVjdCAqQ09SQkFfTG9jYWxPYmplY3RfcHRyOwoKY2xh c3MgQ09SQkFfQ3VycmVudDsKY2xhc3MgQ09SQkFfQ3VycmVudF92YXI7CmNsYXNzIENPUkJBX0N1 cnJlbnRfb3V0Owp0eXBlZGVmIGNsYXNzIENPUkJBX0N1cnJlbnQgKkNPUkJBX0N1cnJlbnRfcHRy OwoKY2xhc3MgVEFPX1NlcnZlclJlcXVlc3Q7CmNsYXNzIENPUkJBX1NlcnZlclJlcXVlc3Q7CnR5 cGVkZWYgY2xhc3MgQ09SQkFfU2VydmVyUmVxdWVzdCAqQ09SQkFfU2VydmVyUmVxdWVzdF9wdHI7 CgpjbGFzcyBDT1JCQV9FbnZpcm9ubWVudDsKY2xhc3MgQ09SQkFfRW52aXJvbm1lbnRfdmFyOwpj bGFzcyBDT1JCQV9FbnZpcm9ubWVudF9vdXQ7CnR5cGVkZWYgY2xhc3MgQ09SQkFfRW52aXJvbm1l bnQgKkNPUkJBX0Vudmlyb25tZW50X3B0cjsKCgpzdHJ1Y3QgQ09SQkFfU2VydmljZURldGFpbDsK Y2xhc3MgQ09SQkFfU2VydmljZURldGFpbF92YXI7CmNsYXNzIENPUkJBX1NlcnZpY2VEZXRhaWxf b3V0Owp0eXBlZGVmIENPUkJBX1NlcnZpY2VEZXRhaWwgKiBDT1JCQV9TZXJ2aWNlRGV0YWlsX3B0 cjsKCnN0cnVjdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb247CmNsYXNzIENPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbl92YXI7CmNsYXNzIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQ7CnR5cGVk ZWYgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uICogQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3B0 cjsKCmNsYXNzIENPUkJBX1ByaW5jaXBhbDsKY2xhc3MgQ09SQkFfUHJpbmNpcGFsX3ZhcjsKY2xh c3MgQ09SQkFfUHJpbmNpcGFsX291dDsKdHlwZWRlZiBjbGFzcyBDT1JCQV9QcmluY2lwYWwgKkNP UkJBX1ByaW5jaXBhbF9wdHI7Cgp0eXBlZGVmIGNsYXNzIENPUkJBX0ltcGxlbWVudGF0aW9uRGVm ICpDT1JCQV9JbXBsZW1lbnRhdGlvbkRlZl9wdHI7CgoKY2xhc3MgQ09SQkFfVmFsdWVCYXNlOwpj bGFzcyBDT1JCQV9WYWx1ZUZhY3RvcnlCYXNlOwp0eXBlZGVmIENPUkJBX1ZhbHVlRmFjdG9yeUJh c2UgKkNPUkJBX1ZhbHVlRmFjdG9yeV9wdHI7CmNsYXNzIENPUkJBX0RlZmF1bHRWYWx1ZVJlZkNv dW50QmFzZTsKCgpjbGFzcyBDT1JCQV9TdHJpbmdfdmFyOwpjbGFzcyBDT1JCQV9TdHJpbmdfb3V0 OwpjbGFzcyBDT1JCQV9XU3RyaW5nX3ZhcjsKY2xhc3MgQ09SQkFfV1N0cmluZ19vdXQ7CgpjbGFz cyBDT1JCQV9FeGNlcHRpb25MaXN0OwoKY2xhc3MgQ09SQkFfUG9saWN5RXJyb3I7CnR5cGVkZWYg Q09SQkFfUG9saWN5RXJyb3IgKkNPUkJBX1BvbGljeUVycm9yX3B0cjsKCmNsYXNzIENPUkJBX0lu dmFsaWRQb2xpY2llczsKdHlwZWRlZiBDT1JCQV9JbnZhbGlkUG9saWNpZXMqIENPUkJBX0ludmFs aWRQb2xpY2llc19wdHI7CgpjbGFzcyBDT1JCQV9Qb2xpY3lUeXBlU2VxOwpjbGFzcyBDT1JCQV9Q b2xpY3lUeXBlU2VxX3ZhcjsKY2xhc3MgQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQ7CgpjbGFzcyBD T1JCQV9Qb2xpY3lNYW5hZ2VyOwpjbGFzcyBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3ZhcjsKY2xhc3Mg Q09SQkFfUG9saWN5TWFuYWdlcl9vdXQ7CnR5cGVkZWYgQ09SQkFfUG9saWN5TWFuYWdlciAqQ09S QkFfUG9saWN5TWFuYWdlcl9wdHI7CgpjbGFzcyBDT1JCQV9Qb2xpY3lDdXJyZW50OwpjbGFzcyBD T1JCQV9Qb2xpY3lDdXJyZW50X3ZhcjsKY2xhc3MgQ09SQkFfUG9saWN5Q3VycmVudF9vdXQ7CnR5 cGVkZWYgQ09SQkFfUG9saWN5Q3VycmVudCAqQ09SQkFfUG9saWN5Q3VycmVudF9wdHI7CgpjbGFz cyBDT1JCQV9Qb2xpY3k7CmNsYXNzIENPUkJBX1BvbGljeV92YXI7CmNsYXNzIENPUkJBX1BvbGlj eV9vdXQ7CnR5cGVkZWYgQ09SQkFfUG9saWN5ICpDT1JCQV9Qb2xpY3lfcHRyOwoKY2xhc3MgQ09S QkFfUG9saWN5TGlzdDsKY2xhc3MgQ09SQkFfUG9saWN5TGlzdF92YXI7CmNsYXNzIENPUkJBX1Bv bGljeUxpc3Rfb3V0OwoKY2xhc3MgQ09SQkFfRG9tYWluTWFuYWdlcjsKY2xhc3MgQ09SQkFfRG9t YWluTWFuYWdlcl92YXI7CmNsYXNzIENPUkJBX0RvbWFpbk1hbmFnZXJfb3V0Owp0eXBlZGVmIENP UkJBX0RvbWFpbk1hbmFnZXIgKkNPUkJBX0RvbWFpbk1hbmFnZXJfcHRyOwoKY2xhc3MgQ09SQkFf RG9tYWluTWFuYWdlckxpc3Q7CmNsYXNzIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3ZhcjsKY2xh c3MgQ09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0Owp0eXBlZGVmIENPUkJBX0RvbWFpbk1hbmFn ZXJMaXN0ICpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9wdHI7CgpjbGFzcyBDT1JCQV9Qb2xsYWJs ZVNldDsKY2xhc3MgQ09SQkFfUG9sbGFibGVTZXRfdmFyOwpjbGFzcyBDT1JCQV9Qb2xsYWJsZVNl dF9vdXQ7CnR5cGVkZWYgQ09SQkFfUG9sbGFibGVTZXQgKkNPUkJBX1BvbGxhYmxlU2V0X3B0cjsK CmNsYXNzIENPUkJBX1BvbGxhYmxlOwpjbGFzcyBDT1JCQV9Qb2xsYWJsZV92YXI7CmNsYXNzIENP UkJBX1BvbGxhYmxlX291dDsKdHlwZWRlZiBDT1JCQV9Qb2xsYWJsZSAqQ09SQkFfUG9sbGFibGVf cHRyOwoKY2xhc3MgQ09SQkFfRElJUG9sbGFibGU7CmNsYXNzIENPUkJBX0RJSVBvbGxhYmxlX3Zh cjsKY2xhc3MgQ09SQkFfRElJUG9sbGFibGVfb3V0Owp0eXBlZGVmIENPUkJBX0RJSVBvbGxhYmxl ICpDT1JCQV9ESUlQb2xsYWJsZV9wdHI7CgoKCgoKY2xhc3MgVEFPX0lucHV0Q0RSOwpjbGFzcyBU QU9fT3V0cHV0Q0RSOwpjbGFzcyBUQU9fU3R1YjsKCmNsYXNzIENPUkJBX09SQl9PYmplY3RJZExp c3Q7CmNsYXNzIENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyOwpjbGFzcyBDT1JCQV9PUkJfT2Jq ZWN0SWRMaXN0X291dDsKdHlwZWRlZiBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICpDT1JCQV9PUkJf T2JqZWN0SWRMaXN0X3B0cjsKCgpjbGFzcyBDT1JCQV9JUk9iamVjdDsKY2xhc3MgQ09SQkFfSVJP YmplY3RfdmFyOwpjbGFzcyBDT1JCQV9JUk9iamVjdF9vdXQ7CnR5cGVkZWYgQ09SQkFfSVJPYmpl Y3QgKkNPUkJBX0lST2JqZWN0X3B0cjsKCmNsYXNzIENPUkJBX0NvbnRhaW5lZDsKY2xhc3MgQ09S QkFfQ29udGFpbmVkX3ZhcjsKY2xhc3MgQ09SQkFfQ29udGFpbmVkX291dDsKdHlwZWRlZiBDT1JC QV9Db250YWluZWQgKkNPUkJBX0NvbnRhaW5lZF9wdHI7CgpjbGFzcyBDT1JCQV9Db250YWluZWRT ZXE7CmNsYXNzIENPUkJBX0NvbnRhaW5lZFNlcV92YXI7CmNsYXNzIENPUkJBX0NvbnRhaW5lZFNl cV9vdXQ7CgpjbGFzcyBDT1JCQV9SZXBvc2l0b3J5OwpjbGFzcyBDT1JCQV9SZXBvc2l0b3J5X3Zh cjsKY2xhc3MgQ09SQkFfUmVwb3NpdG9yeV9vdXQ7CnR5cGVkZWYgQ09SQkFfUmVwb3NpdG9yeSAq Q09SQkFfUmVwb3NpdG9yeV9wdHI7CgpjbGFzcyBDT1JCQV9Db250YWluZXI7CmNsYXNzIENPUkJB X0NvbnRhaW5lcl92YXI7CmNsYXNzIENPUkJBX0NvbnRhaW5lcl9vdXQ7CnR5cGVkZWYgQ09SQkFf Q29udGFpbmVyICpDT1JCQV9Db250YWluZXJfcHRyOwoKY2xhc3MgQ09SQkFfTW9kdWxlRGVmOwpj bGFzcyBDT1JCQV9Nb2R1bGVEZWZfdmFyOwpjbGFzcyBDT1JCQV9Nb2R1bGVEZWZfb3V0Owp0eXBl ZGVmIENPUkJBX01vZHVsZURlZiAqQ09SQkFfTW9kdWxlRGVmX3B0cjsKCmNsYXNzIENPUkJBX0Nv bnN0YW50RGVmOwpjbGFzcyBDT1JCQV9Db25zdGFudERlZl92YXI7CmNsYXNzIENPUkJBX0NvbnN0 YW50RGVmX291dDsKdHlwZWRlZiBDT1JCQV9Db25zdGFudERlZiAqQ09SQkFfQ29uc3RhbnREZWZf cHRyOwoKY2xhc3MgQ09SQkFfSURMVHlwZTsKY2xhc3MgQ09SQkFfSURMVHlwZV92YXI7CmNsYXNz IENPUkJBX0lETFR5cGVfb3V0Owp0eXBlZGVmIENPUkJBX0lETFR5cGUgKkNPUkJBX0lETFR5cGVf cHRyOwoKY2xhc3MgQ09SQkFfU3RydWN0RGVmOwpjbGFzcyBDT1JCQV9TdHJ1Y3REZWZfdmFyOwpj bGFzcyBDT1JCQV9TdHJ1Y3REZWZfb3V0Owp0eXBlZGVmIENPUkJBX1N0cnVjdERlZiAqQ09SQkFf U3RydWN0RGVmX3B0cjsKCmNsYXNzIENPUkJBX1VuaW9uRGVmOwpjbGFzcyBDT1JCQV9VbmlvbkRl Zl92YXI7CmNsYXNzIENPUkJBX1VuaW9uRGVmX291dDsKdHlwZWRlZiBDT1JCQV9VbmlvbkRlZiAq Q09SQkFfVW5pb25EZWZfcHRyOwoKY2xhc3MgQ09SQkFfRW51bURlZjsKY2xhc3MgQ09SQkFfRW51 bURlZl92YXI7CmNsYXNzIENPUkJBX0VudW1EZWZfb3V0Owp0eXBlZGVmIENPUkJBX0VudW1EZWYg KkNPUkJBX0VudW1EZWZfcHRyOwoKY2xhc3MgQ09SQkFfQWxpYXNEZWY7CmNsYXNzIENPUkJBX0Fs aWFzRGVmX3ZhcjsKY2xhc3MgQ09SQkFfQWxpYXNEZWZfb3V0Owp0eXBlZGVmIENPUkJBX0FsaWFz RGVmICpDT1JCQV9BbGlhc0RlZl9wdHI7CgpjbGFzcyBDT1JCQV9JbnRlcmZhY2VEZWY7CmNsYXNz IENPUkJBX0ludGVyZmFjZURlZl92YXI7CmNsYXNzIENPUkJBX0ludGVyZmFjZURlZl9vdXQ7CnR5 cGVkZWYgQ09SQkFfSW50ZXJmYWNlRGVmICpDT1JCQV9JbnRlcmZhY2VEZWZfcHRyOwoKY2xhc3Mg Q09SQkFfQWJzdHJhY3RJbnRlcmZhY2VEZWY7CmNsYXNzIENPUkJBX0Fic3RyYWN0SW50ZXJmYWNl RGVmX3ZhcjsKY2xhc3MgQ09SQkFfQWJzdHJhY3RJbnRlcmZhY2VEZWZfb3V0Owp0eXBlZGVmIENP UkJBX0Fic3RyYWN0SW50ZXJmYWNlRGVmICpDT1JCQV9BYnN0cmFjdEludGVyZmFjZURlZl9wdHI7 CgpjbGFzcyBDT1JCQV9Mb2NhbEludGVyZmFjZURlZjsKY2xhc3MgQ09SQkFfTG9jYWxJbnRlcmZh Y2VEZWZfdmFyOwpjbGFzcyBDT1JCQV9Mb2NhbEludGVyZmFjZURlZl9vdXQ7CnR5cGVkZWYgQ09S QkFfTG9jYWxJbnRlcmZhY2VEZWYgKkNPUkJBX0xvY2FsSW50ZXJmYWNlRGVmX3B0cjsKCmNsYXNz IENPUkJBX0V4Y2VwdGlvbkRlZjsKY2xhc3MgQ09SQkFfRXhjZXB0aW9uRGVmX3ZhcjsKY2xhc3Mg Q09SQkFfRXhjZXB0aW9uRGVmX291dDsKdHlwZWRlZiBDT1JCQV9FeGNlcHRpb25EZWYgKkNPUkJB X0V4Y2VwdGlvbkRlZl9wdHI7CgpjbGFzcyBDT1JCQV9OYXRpdmVEZWY7CmNsYXNzIENPUkJBX05h dGl2ZURlZl92YXI7CmNsYXNzIENPUkJBX05hdGl2ZURlZl9vdXQ7CnR5cGVkZWYgQ09SQkFfTmF0 aXZlRGVmICpDT1JCQV9OYXRpdmVEZWZfcHRyOwoKY2xhc3MgQ09SQkFfSW50ZXJmYWNlRGVmU2Vx OwpjbGFzcyBDT1JCQV9JbnRlcmZhY2VEZWZTZXFfdmFyOwpjbGFzcyBDT1JCQV9JbnRlcmZhY2VE ZWZTZXFfb3V0OwoKY2xhc3MgQ09SQkFfQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXE7CmNsYXNzIENP UkJBX0Fic3RyYWN0SW50ZXJmYWNlRGVmU2VxX3ZhcjsKY2xhc3MgQ09SQkFfQWJzdHJhY3RJbnRl cmZhY2VEZWZTZXFfb3V0OwoKY2xhc3MgQ09SQkFfTG9jYWxJbnRlcmZhY2VEZWZTZXE7CmNsYXNz IENPUkJBX0xvY2FsSW50ZXJmYWNlRGVmU2VxX3ZhcjsKY2xhc3MgQ09SQkFfTG9jYWxJbnRlcmZh Y2VEZWZTZXFfb3V0OwoKY2xhc3MgQ09SQkFfVmFsdWVEZWY7CmNsYXNzIENPUkJBX1ZhbHVlRGVm X3ZhcjsKY2xhc3MgQ09SQkFfVmFsdWVEZWZfb3V0Owp0eXBlZGVmIENPUkJBX1ZhbHVlRGVmICpD T1JCQV9WYWx1ZURlZl9wdHI7CgpjbGFzcyBDT1JCQV9WYWx1ZURlZlNlcTsKY2xhc3MgQ09SQkFf VmFsdWVEZWZTZXFfdmFyOwpjbGFzcyBDT1JCQV9WYWx1ZURlZlNlcV9vdXQ7CgpjbGFzcyBDT1JC QV9WYWx1ZUJveERlZjsKY2xhc3MgQ09SQkFfVmFsdWVCb3hEZWZfdmFyOwpjbGFzcyBDT1JCQV9W YWx1ZUJveERlZl9vdXQ7CnR5cGVkZWYgQ09SQkFfVmFsdWVCb3hEZWYgKkNPUkJBX1ZhbHVlQm94 RGVmX3B0cjsKCnN0cnVjdCBDT1JCQV9TdHJ1Y3RNZW1iZXI7CmNsYXNzIENPUkJBX1N0cnVjdE1l bWJlcl92YXI7CmNsYXNzIENPUkJBX1N0cnVjdE1lbWJlcl9vdXQ7CgpjbGFzcyBDT1JCQV9TdHJ1 Y3RNZW1iZXJTZXE7CmNsYXNzIENPUkJBX1N0cnVjdE1lbWJlclNlcV92YXI7CmNsYXNzIENPUkJB X1N0cnVjdE1lbWJlclNlcV9vdXQ7CgpzdHJ1Y3QgQ09SQkFfSW5pdGlhbGl6ZXI7CmNsYXNzIENP UkJBX0luaXRpYWxpemVyX3ZhcjsKY2xhc3MgQ09SQkFfSW5pdGlhbGl6ZXJfb3V0OwoKY2xhc3Mg Q09SQkFfSW5pdGlhbGl6ZXJTZXE7CmNsYXNzIENPUkJBX0luaXRpYWxpemVyU2VxX3ZhcjsKY2xh c3MgQ09SQkFfSW5pdGlhbGl6ZXJTZXFfb3V0OwoKc3RydWN0IENPUkJBX1VuaW9uTWVtYmVyOwpj bGFzcyBDT1JCQV9Vbmlvbk1lbWJlcl92YXI7CmNsYXNzIENPUkJBX1VuaW9uTWVtYmVyX291dDsK CmNsYXNzIENPUkJBX1VuaW9uTWVtYmVyU2VxOwpjbGFzcyBDT1JCQV9Vbmlvbk1lbWJlclNlcV92 YXI7CmNsYXNzIENPUkJBX1VuaW9uTWVtYmVyU2VxX291dDsKCmNsYXNzIENPUkJBX0VudW1NZW1i ZXJTZXE7CmNsYXNzIENPUkJBX0VudW1NZW1iZXJTZXFfdmFyOwpjbGFzcyBDT1JCQV9FbnVtTWVt YmVyU2VxX291dDsKCnN0cnVjdCBDT1JCQV9Nb2R1bGVEZXNjcmlwdGlvbjsKY2xhc3MgQ09SQkFf TW9kdWxlRGVzY3JpcHRpb25fdmFyOwpjbGFzcyBDT1JCQV9Nb2R1bGVEZXNjcmlwdGlvbl9vdXQ7 CgpzdHJ1Y3QgQ09SQkFfQ29uc3RhbnREZXNjcmlwdGlvbjsKY2xhc3MgQ09SQkFfQ29uc3RhbnRE ZXNjcmlwdGlvbl92YXI7CmNsYXNzIENPUkJBX0NvbnN0YW50RGVzY3JpcHRpb25fb3V0OwoKY2xh c3MgQ09SQkFfVHlwZWRlZkRlZjsKY2xhc3MgQ09SQkFfVHlwZWRlZkRlZl92YXI7CmNsYXNzIENP UkJBX1R5cGVkZWZEZWZfb3V0Owp0eXBlZGVmIENPUkJBX1R5cGVkZWZEZWYgKkNPUkJBX1R5cGVk ZWZEZWZfcHRyOwoKc3RydWN0IENPUkJBX1R5cGVEZXNjcmlwdGlvbjsKY2xhc3MgQ09SQkFfVHlw ZURlc2NyaXB0aW9uX3ZhcjsKY2xhc3MgQ09SQkFfVHlwZURlc2NyaXB0aW9uX291dDsKCmNsYXNz IENPUkJBX1ByaW1pdGl2ZURlZjsKY2xhc3MgQ09SQkFfUHJpbWl0aXZlRGVmX3ZhcjsKY2xhc3Mg Q09SQkFfUHJpbWl0aXZlRGVmX291dDsKdHlwZWRlZiBDT1JCQV9QcmltaXRpdmVEZWYgKkNPUkJB X1ByaW1pdGl2ZURlZl9wdHI7CgpjbGFzcyBDT1JCQV9TdHJpbmdEZWY7CmNsYXNzIENPUkJBX1N0 cmluZ0RlZl92YXI7CmNsYXNzIENPUkJBX1N0cmluZ0RlZl9vdXQ7CnR5cGVkZWYgQ09SQkFfU3Ry aW5nRGVmICpDT1JCQV9TdHJpbmdEZWZfcHRyOwoKY2xhc3MgQ09SQkFfV3N0cmluZ0RlZjsKY2xh c3MgQ09SQkFfV3N0cmluZ0RlZl92YXI7CmNsYXNzIENPUkJBX1dzdHJpbmdEZWZfb3V0Owp0eXBl ZGVmIENPUkJBX1dzdHJpbmdEZWYgKkNPUkJBX1dzdHJpbmdEZWZfcHRyOwoKY2xhc3MgQ09SQkFf Rml4ZWREZWY7CmNsYXNzIENPUkJBX0ZpeGVkRGVmX3ZhcjsKY2xhc3MgQ09SQkFfRml4ZWREZWZf b3V0Owp0eXBlZGVmIENPUkJBX0ZpeGVkRGVmICpDT1JCQV9GaXhlZERlZl9wdHI7CgpjbGFzcyBD T1JCQV9TZXF1ZW5jZURlZjsKY2xhc3MgQ09SQkFfU2VxdWVuY2VEZWZfdmFyOwpjbGFzcyBDT1JC QV9TZXF1ZW5jZURlZl9vdXQ7CnR5cGVkZWYgQ09SQkFfU2VxdWVuY2VEZWYgKkNPUkJBX1NlcXVl bmNlRGVmX3B0cjsKCmNsYXNzIENPUkJBX0FycmF5RGVmOwpjbGFzcyBDT1JCQV9BcnJheURlZl92 YXI7CmNsYXNzIENPUkJBX0FycmF5RGVmX291dDsKdHlwZWRlZiBDT1JCQV9BcnJheURlZiAqQ09S QkFfQXJyYXlEZWZfcHRyOwoKc3RydWN0IENPUkJBX0V4Y2VwdGlvbkRlc2NyaXB0aW9uOwpjbGFz cyBDT1JCQV9FeGNlcHRpb25EZXNjcmlwdGlvbl92YXI7CmNsYXNzIENPUkJBX0V4Y2VwdGlvbkRl c2NyaXB0aW9uX291dDsKCmNsYXNzIENPUkJBX0V4Y2VwdGlvbkRlZlNlcTsKY2xhc3MgQ09SQkFf RXhjZXB0aW9uRGVmU2VxX3ZhcjsKY2xhc3MgQ09SQkFfRXhjZXB0aW9uRGVmU2VxX291dDsKCmNs YXNzIENPUkJBX0V4Y0Rlc2NyaXB0aW9uU2VxOwpjbGFzcyBDT1JCQV9FeGNEZXNjcmlwdGlvblNl cV92YXI7CmNsYXNzIENPUkJBX0V4Y0Rlc2NyaXB0aW9uU2VxX291dDsKCmNsYXNzIENPUkJBX0F0 dHJpYnV0ZURlZjsKY2xhc3MgQ09SQkFfQXR0cmlidXRlRGVmX3ZhcjsKY2xhc3MgQ09SQkFfQXR0 cmlidXRlRGVmX291dDsKdHlwZWRlZiBDT1JCQV9BdHRyaWJ1dGVEZWYgKkNPUkJBX0F0dHJpYnV0 ZURlZl9wdHI7CgpzdHJ1Y3QgQ09SQkFfQXR0cmlidXRlRGVzY3JpcHRpb247CmNsYXNzIENPUkJB X0F0dHJpYnV0ZURlc2NyaXB0aW9uX3ZhcjsKY2xhc3MgQ09SQkFfQXR0cmlidXRlRGVzY3JpcHRp b25fb3V0OwoKc3RydWN0IENPUkJBX1BhcmFtZXRlckRlc2NyaXB0aW9uOwpjbGFzcyBDT1JCQV9Q YXJhbWV0ZXJEZXNjcmlwdGlvbl92YXI7CmNsYXNzIENPUkJBX1BhcmFtZXRlckRlc2NyaXB0aW9u X291dDsKCmNsYXNzIENPUkJBX1BhckRlc2NyaXB0aW9uU2VxOwpjbGFzcyBDT1JCQV9QYXJEZXNj cmlwdGlvblNlcV92YXI7CmNsYXNzIENPUkJBX1BhckRlc2NyaXB0aW9uU2VxX291dDsKCmNsYXNz IENPUkJBX0NvbnRleHRJZFNlcTsKY2xhc3MgQ09SQkFfQ29udGV4dElkU2VxX3ZhcjsKY2xhc3Mg Q09SQkFfQ29udGV4dElkU2VxX291dDsKCmNsYXNzIENPUkJBX09wZXJhdGlvbkRlZjsKY2xhc3Mg Q09SQkFfT3BlcmF0aW9uRGVmX3ZhcjsKY2xhc3MgQ09SQkFfT3BlcmF0aW9uRGVmX291dDsKdHlw ZWRlZiBDT1JCQV9PcGVyYXRpb25EZWYgKkNPUkJBX09wZXJhdGlvbkRlZl9wdHI7CgpzdHJ1Y3Qg Q09SQkFfT3BlcmF0aW9uRGVzY3JpcHRpb247CmNsYXNzIENPUkJBX09wZXJhdGlvbkRlc2NyaXB0 aW9uX3ZhcjsKY2xhc3MgQ09SQkFfT3BlcmF0aW9uRGVzY3JpcHRpb25fb3V0OwoKc3RydWN0IENP UkJBX1BhcmFtZXRlckRlc2NyaXB0aW9uOwpjbGFzcyBDT1JCQV9QYXJhbWV0ZXJEZXNjcmlwdGlv bl92YXI7CmNsYXNzIENPUkJBX1BhcmFtZXRlckRlc2NyaXB0aW9uX291dDsKCmNsYXNzIENPUkJB X1JlcG9zaXRvcnlJZFNlcTsKY2xhc3MgQ09SQkFfUmVwb3NpdG9yeUlkU2VxX3ZhcjsKY2xhc3Mg Q09SQkFfUmVwb3NpdG9yeUlkU2VxX291dDsKCmNsYXNzIENPUkJBX09wRGVzY3JpcHRpb25TZXE7 CmNsYXNzIENPUkJBX09wRGVzY3JpcHRpb25TZXFfdmFyOwpjbGFzcyBDT1JCQV9PcERlc2NyaXB0 aW9uU2VxX291dDsKCmNsYXNzIENPUkJBX0F0dHJEZXNjcmlwdGlvblNlcTsKY2xhc3MgQ09SQkFf QXR0ckRlc2NyaXB0aW9uU2VxX3ZhcjsKY2xhc3MgQ09SQkFfQXR0ckRlc2NyaXB0aW9uU2VxX291 dDsKCnN0cnVjdCBDT1JCQV9JbnRlcmZhY2VEZXNjcmlwdGlvbjsKY2xhc3MgQ09SQkFfSW50ZXJm YWNlRGVzY3JpcHRpb25fdmFyOwpjbGFzcyBDT1JCQV9JbnRlcmZhY2VEZXNjcmlwdGlvbl9vdXQ7 CgpzdHJ1Y3QgQ09SQkFfVmFsdWVNZW1iZXI7CmNsYXNzIENPUkJBX1ZhbHVlTWVtYmVyX3ZhcjsK Y2xhc3MgQ09SQkFfVmFsdWVNZW1iZXJfb3V0OwoKY2xhc3MgQ09SQkFfVmFsdWVNZW1iZXJTZXE7 CmNsYXNzIENPUkJBX1ZhbHVlTWVtYmVyU2VxX3ZhcjsKY2xhc3MgQ09SQkFfVmFsdWVNZW1iZXJT ZXFfb3V0OwoKY2xhc3MgQ09SQkFfVmFsdWVNZW1iZXJEZWY7CmNsYXNzIENPUkJBX1ZhbHVlTWVt YmVyRGVmX3ZhcjsKY2xhc3MgQ09SQkFfVmFsdWVNZW1iZXJEZWZfb3V0Owp0eXBlZGVmIENPUkJB X1ZhbHVlTWVtYmVyRGVmICpDT1JCQV9WYWx1ZU1lbWJlckRlZl9wdHI7CgpzdHJ1Y3QgQ09SQkFf VmFsdWVEZXNjcmlwdGlvbjsKY2xhc3MgQ09SQkFfVmFsdWVEZXNjcmlwdGlvbl92YXI7CmNsYXNz IENPUkJBX1ZhbHVlRGVzY3JpcHRpb25fb3V0OwoKY2xhc3MgQ09SQkFfVHlwZUNvZGVGYWN0b3J5 OwpjbGFzcyBDT1JCQV9UeXBlQ29kZUZhY3RvcnlfdmFyOwpjbGFzcyBDT1JCQV9UeXBlQ29kZUZh Y3Rvcnlfb3V0Owp0eXBlZGVmIENPUkJBX1R5cGVDb2RlRmFjdG9yeSAqQ09SQkFfVHlwZUNvZGVG YWN0b3J5X3B0cjsKCgpjbGFzcyBDT1JCQV9TdHJpbmdTZXE7CmNsYXNzIENPUkJBX1N0cmluZ1Nl cV92YXI7CmNsYXNzIENPUkJBX1N0cmluZ1NlcV9vdXQ7CmNsYXNzIENPUkJBX1dTdHJpbmdTZXE7 CmNsYXNzIENPUkJBX1dTdHJpbmdTZXFfdmFyOwpjbGFzcyBDT1JCQV9XU3RyaW5nU2VxX291dDsK CmNsYXNzIENPUkJBX09jdGV0U2VxOwpjbGFzcyBDT1JCQV9PY3RldFNlcV92YXI7CmNsYXNzIENP UkJBX09jdGV0U2VxX291dDsKCmNsYXNzIENPUkJBX0JvdW5kczsKdHlwZWRlZiBDT1JCQV9Cb3Vu ZHMgKkNPUkJBX0JvdW5kc19wdHI7CgoKdHlwZWRlZiB1X2ludCBDT1JCQV9GbGFnczsKCnR5cGVk ZWYgdm9pZCAoKlRBT19Ta2VsZXRvbikoCiAgICBUQU9fU2VydmVyUmVxdWVzdCAmLAogICAgdm9p ZCAqLAogICAgdm9pZCAqLAogICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUKICApOwoKCmNsYXNzIFRBT19VbmJvdW5kZWRfU3RyaW5nX1NlcXVlbmNl OwpjbGFzcyBUQU9fVW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U7CnRlbXBsYXRlIDxjbGFzcyBU PiBjbGFzcyBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlOwp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBU X3Zhcj4gY2xhc3MgVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2U7CgoKCgogICAgICAgICAg IENPUkJBX0Vudmlyb25tZW50JiBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAodm9pZCk7CgplbnVt IFRBT19TRVJWQU5UX0xPQ0FUSU9OCnsKICBUQU9fU0VSVkFOVF9GT1VORCwKICBUQU9fREVGQVVM VF9TRVJWQU5ULAogIFRBT19TRVJWQU5UX01BTkFHRVIsCiAgVEFPX1NFUlZBTlRfTk9UX0ZPVU5E Cn07CgpuYW1lc3BhY2UgQ09SQkEKewoKCgoKCgoKICB0eXBlZGVmIEFDRV9DRFI6OkJvb2xlYW4g Qm9vbGVhbjsKICB0eXBlZGVmIEJvb2xlYW4gJkJvb2xlYW5fb3V0OwoKCgoKCiAgdHlwZWRlZiBB Q0VfQ0RSOjpPY3RldCBPY3RldDsKICB0eXBlZGVmIE9jdGV0ICZPY3RldF9vdXQ7CgogIHR5cGVk ZWYgQUNFX0NEUjo6U2hvcnQgU2hvcnQ7CiAgdHlwZWRlZiBTaG9ydCAmU2hvcnRfb3V0OwoKICB0 eXBlZGVmIEFDRV9DRFI6OlVTaG9ydCBVU2hvcnQ7CiAgdHlwZWRlZiBVU2hvcnQgJlVTaG9ydF9v dXQ7CgogIHR5cGVkZWYgQUNFX0NEUjo6TG9uZyBMb25nOwogIHR5cGVkZWYgTG9uZyAmTG9uZ19v dXQ7CgogIHR5cGVkZWYgQUNFX0NEUjo6VUxvbmcgVUxvbmc7CiAgdHlwZWRlZiBVTG9uZyAmVUxv bmdfb3V0OwoKICB0eXBlZGVmIEFDRV9DRFI6OkxvbmdMb25nIExvbmdMb25nOwogIHR5cGVkZWYg TG9uZ0xvbmcgJkxvbmdMb25nX291dDsKCiAgdHlwZWRlZiBBQ0VfQ0RSOjpVTG9uZ0xvbmcgVUxv bmdMb25nOwogIHR5cGVkZWYgVUxvbmdMb25nICZVTG9uZ0xvbmdfb3V0OwoKICB0eXBlZGVmIEFD RV9DRFI6OkZsb2F0IEZsb2F0OwogIHR5cGVkZWYgRmxvYXQgJkZsb2F0X291dDsKCiAgdHlwZWRl ZiBBQ0VfQ0RSOjpEb3VibGUgRG91YmxlOwogIHR5cGVkZWYgRG91YmxlICZEb3VibGVfb3V0OwoK ICB0eXBlZGVmIEFDRV9DRFI6OkxvbmdEb3VibGUgTG9uZ0RvdWJsZTsKICB0eXBlZGVmIExvbmdE b3VibGUgJkxvbmdEb3VibGVfb3V0OwoKICB0eXBlZGVmIEFDRV9DRFI6OkNoYXIgQ2hhcjsKICB0 eXBlZGVmIENoYXIgJkNoYXJfb3V0OwoKCiAgdHlwZWRlZiBDT1JCQV9UeXBlQ29kZSBUeXBlQ29k ZTsKICB0eXBlZGVmIENPUkJBX1R5cGVDb2RlICpUeXBlQ29kZV9wdHI7CiAgdHlwZWRlZiBDT1JC QV9UeXBlQ29kZV92YXIgVHlwZUNvZGVfdmFyOwogIHR5cGVkZWYgQ09SQkFfVHlwZUNvZGVfb3V0 IFR5cGVDb2RlX291dDsKCgogIGV4dGVybiBjaGFyICpzdHJpbmdfYWxsb2MgKFVMb25nIGxlbik7 CiAgZXh0ZXJuIGNoYXIgKnN0cmluZ19kdXAgKGNvbnN0IGNoYXIgKik7CiAgZXh0ZXJuIHZvaWQg c3RyaW5nX2ZyZWUgKGNoYXIgKik7CgogIHR5cGVkZWYgQ09SQkFfU3RyaW5nX3ZhciBTdHJpbmdf dmFyOwogIHR5cGVkZWYgQ09SQkFfU3RyaW5nX291dCBTdHJpbmdfb3V0OwoKCgogIHR5cGVkZWYg QUNFX0NEUjo6V0NoYXIgV0NoYXI7CiAgdHlwZWRlZiBXQ2hhciAmV0NoYXJfb3V0OwoKCiAgZXh0 ZXJuIFdDaGFyKiB3c3RyaW5nX2FsbG9jIChVTG9uZyBsZW4pOwogIGV4dGVybiBXQ2hhciogd3N0 cmluZ19kdXAgKGNvbnN0IFdDaGFyICpjb25zdCk7CiAgZXh0ZXJuIHZvaWQgd3N0cmluZ19mcmVl IChXQ2hhciAqY29uc3QpOwoKICB0eXBlZGVmIENPUkJBX1dTdHJpbmdfdmFyIFdTdHJpbmdfdmFy OwogIHR5cGVkZWYgQ09SQkFfV1N0cmluZ19vdXQgV1N0cmluZ19vdXQ7CgoKICB0eXBlZGVmIENP UkJBX1N0cmluZ1NlcSBTdHJpbmdTZXE7CiAgdHlwZWRlZiBDT1JCQV9TdHJpbmdTZXFfdmFyIFN0 cmluZ1NlcV92YXI7CiAgdHlwZWRlZiBDT1JCQV9TdHJpbmdTZXFfb3V0IFN0cmluZ1NlcV9vdXQ7 CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfU3RyaW5nU2VxOwoKICB0eXBlZGVmIENPUkJBX1dT dHJpbmdTZXEgV1N0cmluZ1NlcTsKICB0eXBlZGVmIENPUkJBX1dTdHJpbmdTZXFfdmFyIFdTdHJp bmdTZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfV1N0cmluZ1NlcV9vdXQgV1N0cmluZ1NlcV9vdXQ7 CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfV1N0cmluZ1NlcTsKCgogIHR5cGVkZWYgQ09SQkFf T2N0ZXRTZXEgT2N0ZXRTZXE7CiAgdHlwZWRlZiBDT1JCQV9PY3RldFNlcV92YXIgT2N0ZXRTZXFf dmFyOwogIHR5cGVkZWYgQ09SQkFfT2N0ZXRTZXFfb3V0IE9jdGV0U2VxX291dDsKICBleHRlcm4g VHlwZUNvZGVfcHRyIF90Y19PY3RldFNlcTsKCgoKCgoKICB0eXBlZGVmIENPUkJBX0FueSBBbnk7 CiAgdHlwZWRlZiBDT1JCQV9BbnlfdmFyIEFueV92YXI7CiAgdHlwZWRlZiBDT1JCQV9Bbnlfb3V0 IEFueV9vdXQ7CiAgdHlwZWRlZiBBbnkgKkFueV9wdHI7CgogIHR5cGVkZWYgQ09SQkFfRW52aXJv bm1lbnQgRW52aXJvbm1lbnQ7CiAgdHlwZWRlZiBDT1JCQV9FbnZpcm9ubWVudF92YXIgRW52aXJv bm1lbnRfdmFyOwogIHR5cGVkZWYgQ09SQkFfRW52aXJvbm1lbnRfb3V0IEVudmlyb25tZW50X291 dDsKICB0eXBlZGVmIEVudmlyb25tZW50ICpFbnZpcm9ubWVudF9wdHI7CgogIHR5cGVkZWYgQ09S QkFfRXhjZXB0aW9uIEV4Y2VwdGlvbjsKICB0eXBlZGVmIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiBT eXN0ZW1FeGNlcHRpb247CiAgdHlwZWRlZiBDT1JCQV9Vc2VyRXhjZXB0aW9uIFVzZXJFeGNlcHRp b247CgogIHR5cGVkZWYgQ09SQkFfUmVxdWVzdCBSZXF1ZXN0OwogIHR5cGVkZWYgUmVxdWVzdCAq UmVxdWVzdF9wdHI7CiAgdHlwZWRlZiBDT1JCQV9SZXF1ZXN0X3ZhciBSZXF1ZXN0X3ZhcjsKICB0 eXBlZGVmIENPUkJBX1JlcXVlc3Rfb3V0IFJlcXVlc3Rfb3V0OwoKICB0eXBlZGVmIENPUkJBX05h bWVkVmFsdWUgTmFtZWRWYWx1ZTsKICB0eXBlZGVmIE5hbWVkVmFsdWUgKk5hbWVkVmFsdWVfcHRy OwogIHR5cGVkZWYgQ09SQkFfTmFtZWRWYWx1ZV92YXIgTmFtZWRWYWx1ZV92YXI7CiAgdHlwZWRl ZiBDT1JCQV9OYW1lZFZhbHVlX291dCBOYW1lZFZhbHVlX291dDsKCiAgdHlwZWRlZiBDT1JCQV9O Vkxpc3QgTlZMaXN0OwogIHR5cGVkZWYgTlZMaXN0ICpOVkxpc3RfcHRyOwogIHR5cGVkZWYgQ09S QkFfTlZMaXN0X3ZhciBOVkxpc3RfdmFyOwogIHR5cGVkZWYgQ09SQkFfTlZMaXN0X291dCBOVkxp c3Rfb3V0OwoKICB0eXBlZGVmIENPUkJBX0NvbnRleHQgQ29udGV4dDsKICB0eXBlZGVmIENPUkJB X0NvbnRleHQgKkNvbnRleHRfcHRyOwogIHR5cGVkZWYgQ09SQkFfQ29udGV4dF92YXIgQ29udGV4 dF92YXI7CiAgdHlwZWRlZiBDT1JCQV9Db250ZXh0X291dCBDb250ZXh0X291dDsKCiAgdHlwZWRl ZiBDT1JCQV9Db250ZXh0TGlzdCBDb250ZXh0TGlzdDsKICB0eXBlZGVmIENPUkJBX0NvbnRleHRM aXN0ICpDb250ZXh0TGlzdF9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Db250ZXh0TGlzdF92YXIgQ29u dGV4dExpc3RfdmFyOwogIHR5cGVkZWYgQ09SQkFfQ29udGV4dExpc3Rfb3V0IENvbnRleHRMaXN0 X291dDsKCiAgdHlwZWRlZiBDT1JCQV9PYmplY3QgT2JqZWN0OwogIHR5cGVkZWYgQ09SQkFfT2Jq ZWN0ICpPYmplY3RfcHRyOwogIHR5cGVkZWYgQ09SQkFfT2JqZWN0X3ZhciBPYmplY3RfdmFyOwog IHR5cGVkZWYgQ09SQkFfT2JqZWN0X291dCBPYmplY3Rfb3V0OwoKICB0eXBlZGVmIENPUkJBX0xv Y2FsT2JqZWN0IExvY2FsT2JqZWN0OwogIHR5cGVkZWYgQ09SQkFfTG9jYWxPYmplY3QgKkxvY2Fs T2JqZWN0X3B0cjsKICB0eXBlZGVmIENPUkJBX0xvY2FsT2JqZWN0X3ZhciBMb2NhbE9iamVjdF92 YXI7CiAgdHlwZWRlZiBDT1JCQV9Mb2NhbE9iamVjdF9vdXQgTG9jYWxPYmplY3Rfb3V0OwoKICB0 eXBlZGVmIENPUkJBX1ByaW5jaXBhbCBQcmluY2lwYWw7CiAgdHlwZWRlZiBDT1JCQV9QcmluY2lw YWwgKlByaW5jaXBhbF9wdHI7CiAgdHlwZWRlZiBDT1JCQV9QcmluY2lwYWxfdmFyIFByaW5jaXBh bF92YXI7CiAgdHlwZWRlZiBDT1JCQV9QcmluY2lwYWxfb3V0IFByaW5jaXBhbF9vdXQ7CgogIHR5 cGVkZWYgQ09SQkFfT1JCIE9SQjsKICB0eXBlZGVmIENPUkJBX09SQiAqT1JCX3B0cjsKICB0eXBl ZGVmIENPUkJBX09SQl92YXIgT1JCX3ZhcjsKICB0eXBlZGVmIENPUkJBX09SQl9vdXQgT1JCX291 dDsKCiAgdHlwZWRlZiBDT1JCQV9TZXJ2ZXJSZXF1ZXN0IFNlcnZlclJlcXVlc3Q7CiAgdHlwZWRl ZiBTZXJ2ZXJSZXF1ZXN0ICpTZXJ2ZXJSZXF1ZXN0X3B0cjsKCiAgdHlwZWRlZiBDT1JCQV9FeGNl cHRpb25MaXN0IEV4Y2VwdGlvbkxpc3Q7CiAgdHlwZWRlZiBDT1JCQV9FeGNlcHRpb25MaXN0X3Zh ciBFeGNlcHRpb25MaXN0X3ZhcjsKICB0eXBlZGVmIENPUkJBX0V4Y2VwdGlvbkxpc3QgKkV4Y2Vw dGlvbkxpc3RfcHRyOwoKICB0eXBlZGVmIENPUkJBX0ltcGxlbWVudGF0aW9uRGVmICpJbXBsZW1l bnRhdGlvbkRlZl9wdHI7CgogIHR5cGVkZWYgQ09SQkFfQ3VycmVudCBDdXJyZW50OwogIHR5cGVk ZWYgQ09SQkFfQ3VycmVudCAqQ3VycmVudF9wdHI7CiAgdHlwZWRlZiBDT1JCQV9DdXJyZW50X3Zh ciBDdXJyZW50X3ZhcjsKICB0eXBlZGVmIENPUkJBX0N1cnJlbnRfb3V0IEN1cnJlbnRfb3V0OwoK ICB0eXBlZGVmIENPUkJBX1R5cGVDb2RlRmFjdG9yeSBUeXBlQ29kZUZhY3Rvcnk7CiAgdHlwZWRl ZiBDT1JCQV9UeXBlQ29kZUZhY3RvcnkgKlR5cGVDb2RlRmFjdG9yeV9wdHI7CiAgdHlwZWRlZiBD T1JCQV9UeXBlQ29kZUZhY3Rvcnlfb3V0IFR5cGVDb2RlRmFjdG9yeV9vdXQ7CiAgdHlwZWRlZiBD T1JCQV9UeXBlQ29kZUZhY3RvcnlfdmFyIFR5cGVDb2RlRmFjdG9yeV92YXI7CiAgZXh0ZXJuIENP UkJBOjpUeXBlQ29kZV9wdHIgX3RjX1R5cGVDb2RlRmFjdG9yeTsKCiAgdHlwZWRlZiBDT1JCQV9C b3VuZHMgQm91bmRzOwogIHR5cGVkZWYgQ09SQkFfQm91bmRzICpCb3VuZHNfcHRyOwoKICB0eXBl ZGVmIENPUkJBX1ZhbHVlQmFzZSBWYWx1ZUJhc2U7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZUJhc2Ug KlZhbHVlQmFzZV9wdHI7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZUZhY3RvcnlCYXNlIFZhbHVlRmFj dG9yeUJhc2U7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZUZhY3RvcnlCYXNlICpWYWx1ZUZhY3Rvcnk7 CgogIHR5cGVkZWYgQ09SQkFfVmFsdWVGYWN0b3J5QmFzZSAqVmFsdWVGYWN0b3J5X3B0cjsKCiAg dHlwZWRlZiBDT1JCQV9EZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UgRGVmYXVsdFZhbHVlUmVmQ291 bnRCYXNlOwogIGV4dGVybiB2b2lkIGFkZF9yZWYgKFZhbHVlQmFzZSAqKTsKICBleHRlcm4gdm9p ZCByZW1vdmVfcmVmIChWYWx1ZUJhc2UgKik7CgoKCiAgdHlwZWRlZiB1X2ludCBGbGFnczsKCiAg ZW51bSBDb21wbGV0aW9uU3RhdHVzCiAgewoKCiAgICBDT01QTEVURURfWUVTLAogICAgQ09NUExF VEVEX05PLAogICAgQ09NUExFVEVEX01BWUJFCiAgfTsKCiAgZW51bSBleGNlcHRpb25fdHlwZQog IHsKCgogICAgTk9fRVhDRVBUSU9OLAogICAgVVNFUl9FWENFUFRJT04sCiAgICBTWVNURU1fRVhD RVBUSU9OCiAgfTsKCiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfZXhjZXB0aW9uX3R5cGU7CgoK CgogIHR5cGVkZWYgQ09SQkFfVU5LTk9XTiBVTktOT1dOOyB0eXBlZGVmIENPUkJBX0JBRF9QQVJB TSBCQURfUEFSQU07IHR5cGVkZWYgQ09SQkFfTk9fTUVNT1JZIE5PX01FTU9SWTsgdHlwZWRlZiBD T1JCQV9JTVBfTElNSVQgSU1QX0xJTUlUOyB0eXBlZGVmIENPUkJBX0NPTU1fRkFJTFVSRSBDT01N X0ZBSUxVUkU7IHR5cGVkZWYgQ09SQkFfSU5WX09CSlJFRiBJTlZfT0JKUkVGOyB0eXBlZGVmIENP UkJBX09CSkVDVF9OT1RfRVhJU1QgT0JKRUNUX05PVF9FWElTVDsgdHlwZWRlZiBDT1JCQV9OT19Q RVJNSVNTSU9OIE5PX1BFUk1JU1NJT047IHR5cGVkZWYgQ09SQkFfSU5URVJOQUwgSU5URVJOQUw7 IHR5cGVkZWYgQ09SQkFfTUFSU0hBTCBNQVJTSEFMOyB0eXBlZGVmIENPUkJBX0lOSVRJQUxJWkUg SU5JVElBTElaRTsgdHlwZWRlZiBDT1JCQV9OT19JTVBMRU1FTlQgTk9fSU1QTEVNRU5UOyB0eXBl ZGVmIENPUkJBX0JBRF9UWVBFQ09ERSBCQURfVFlQRUNPREU7IHR5cGVkZWYgQ09SQkFfQkFEX09Q RVJBVElPTiBCQURfT1BFUkFUSU9OOyB0eXBlZGVmIENPUkJBX05PX1JFU09VUkNFUyBOT19SRVNP VVJDRVM7IHR5cGVkZWYgQ09SQkFfTk9fUkVTUE9OU0UgTk9fUkVTUE9OU0U7IHR5cGVkZWYgQ09S QkFfUEVSU0lTVF9TVE9SRSBQRVJTSVNUX1NUT1JFOyB0eXBlZGVmIENPUkJBX0JBRF9JTlZfT1JE RVIgQkFEX0lOVl9PUkRFUjsgdHlwZWRlZiBDT1JCQV9UUkFOU0lFTlQgVFJBTlNJRU5UOyB0eXBl ZGVmIENPUkJBX0ZSRUVfTUVNIEZSRUVfTUVNOyB0eXBlZGVmIENPUkJBX0lOVl9JREVOVCBJTlZf SURFTlQ7IHR5cGVkZWYgQ09SQkFfSU5WX0ZMQUcgSU5WX0ZMQUc7IHR5cGVkZWYgQ09SQkFfSU5U Rl9SRVBPUyBJTlRGX1JFUE9TOyB0eXBlZGVmIENPUkJBX0JBRF9DT05URVhUIEJBRF9DT05URVhU OyB0eXBlZGVmIENPUkJBX09CSl9BREFQVEVSIE9CSl9BREFQVEVSOyB0eXBlZGVmIENPUkJBX0RB VEFfQ09OVkVSU0lPTiBEQVRBX0NPTlZFUlNJT047IHR5cGVkZWYgQ09SQkFfSU5WX1BPTElDWSBJ TlZfUE9MSUNZOyB0eXBlZGVmIENPUkJBX1JFQklORCBSRUJJTkQ7IHR5cGVkZWYgQ09SQkFfVElN RU9VVCBUSU1FT1VUOyB0eXBlZGVmIENPUkJBX1RSQU5TQUNUSU9OX1VOQVZBSUxBQkxFIFRSQU5T QUNUSU9OX1VOQVZBSUxBQkxFOyB0eXBlZGVmIENPUkJBX1RSQU5TQUNUSU9OX01PREUgVFJBTlNB Q1RJT05fTU9ERTsgdHlwZWRlZiBDT1JCQV9UUkFOU0FDVElPTl9SRVFVSVJFRCBUUkFOU0FDVElP Tl9SRVFVSVJFRDsgdHlwZWRlZiBDT1JCQV9UUkFOU0FDVElPTl9ST0xMRURCQUNLIFRSQU5TQUNU SU9OX1JPTExFREJBQ0s7IHR5cGVkZWYgQ09SQkFfSU5WQUxJRF9UUkFOU0FDVElPTiBJTlZBTElE X1RSQU5TQUNUSU9OOyB0eXBlZGVmIENPUkJBX0NPREVTRVRfSU5DT01QQVRJQkxFIENPREVTRVRf SU5DT01QQVRJQkxFOyB0eXBlZGVmIENPUkJBX0JBRF9RT1MgQkFEX1FPUzsKCgogIHR5cGVkZWYg Q09SQkFfVW5rbm93blVzZXJFeGNlcHRpb24gVW5rbm93blVzZXJFeGNlcHRpb247CgoKICBleHRl cm4gQm9vbGVhbiBpc19uaWwgKE9iamVjdF9wdHIpOwogIGV4dGVybiBCb29sZWFuIGlzX25pbCAo RW52aXJvbm1lbnRfcHRyKTsKICBleHRlcm4gQm9vbGVhbiBpc19uaWwgKFR5cGVDb2RlX3B0cik7 CiAgZXh0ZXJuIEJvb2xlYW4gaXNfbmlsIChPUkJfcHRyKTsKICBleHRlcm4gQm9vbGVhbiBpc19u aWwgKFByaW5jaXBhbF9wdHIpOwogIGV4dGVybiBCb29sZWFuIGlzX25pbCAoUmVxdWVzdF9wdHIp OwogIGV4dGVybiBCb29sZWFuIGlzX25pbCAoU2VydmVyUmVxdWVzdF9wdHIgcmVxKTsKICBleHRl cm4gQm9vbGVhbiBpc19uaWwgKE5hbWVkVmFsdWVfcHRyKTsKICBleHRlcm4gQm9vbGVhbiBpc19u aWwgKE5WTGlzdF9wdHIpOwogIGV4dGVybiBCb29sZWFuIGlzX25pbCAoQ29udGV4dF9wdHIpOwoK CiAgZXh0ZXJuIHZvaWQgcmVsZWFzZSAoT2JqZWN0X3B0cik7CiAgZXh0ZXJuIHZvaWQgcmVsZWFz ZSAoRW52aXJvbm1lbnRfcHRyKTsKICBleHRlcm4gdm9pZCByZWxlYXNlIChQcmluY2lwYWxfcHRy KTsKICBleHRlcm4gdm9pZCByZWxlYXNlIChUeXBlQ29kZV9wdHIpOwogIGV4dGVybiB2b2lkIHJl bGVhc2UgKE9SQl9wdHIpOwogIGV4dGVybiB2b2lkIHJlbGVhc2UgKFJlcXVlc3RfcHRyKTsKICBl eHRlcm4gdm9pZCByZWxlYXNlIChTZXJ2ZXJSZXF1ZXN0X3B0ciByZXEpOwogIGV4dGVybiB2b2lk IHJlbGVhc2UgKE5hbWVkVmFsdWVfcHRyKTsKICBleHRlcm4gdm9pZCByZWxlYXNlIChOVkxpc3Rf cHRyKTsKICBleHRlcm4gdm9pZCByZWxlYXNlIChDb250ZXh0X3B0cik7CgogIGVudW0gVENLaW5k CiAgewojIDg5MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9jb3JiYWZ3ZC5oIgogICAgdGtfbnVsbCA9IDAsCiAgICB0a192b2lkID0gMSwKICAgIHRr X3Nob3J0ID0gMiwKICAgIHRrX2xvbmcgPSAzLAogICAgdGtfdXNob3J0ID0gNCwKICAgIHRrX3Vs b25nID0gNSwKICAgIHRrX2Zsb2F0ID0gNiwKICAgIHRrX2RvdWJsZSA9IDcsCiAgICB0a19ib29s ZWFuID0gOCwKICAgIHRrX2NoYXIgPSA5LAogICAgdGtfb2N0ZXQgPSAxMCwKICAgIHRrX2FueSA9 IDExLAogICAgdGtfVHlwZUNvZGUgPSAxMiwKICAgIHRrX1ByaW5jaXBhbCA9IDEzLAogICAgdGtf b2JqcmVmID0gMTQsCiAgICB0a19zdHJ1Y3QgPSAxNSwKICAgIHRrX3VuaW9uID0gMTYsCiAgICB0 a19lbnVtID0gMTcsCiAgICB0a19zdHJpbmcgPSAxOCwKICAgIHRrX3NlcXVlbmNlID0gMTksCiAg ICB0a19hcnJheSA9IDIwLAogICAgdGtfYWxpYXMgPSAyMSwKICAgIHRrX2V4Y2VwdCA9IDIyLAoK ICAgIHRrX2xvbmdsb25nID0gMjMsCiAgICB0a191bG9uZ2xvbmcgPSAyNCwKICAgIHRrX2xvbmdk b3VibGUgPSAyNSwKICAgIHRrX3djaGFyID0gMjYsCiAgICB0a193c3RyaW5nID0gMjcsCiAgICB0 a19maXhlZCA9IDI4LAogICAgdGtfdmFsdWUgPSAyOSwKICAgIHRrX3ZhbHVlX2JveCA9IDMwLAog ICAgdGtfbmF0aXZlID0gMzEsCiAgICB0a19hYnN0cmFjdF9pbnRlcmZhY2UgPSAzMiwKICAgIHRr X2xvY2FsX2ludGVyZmFjZSA9IDMzLAogICAgdGtfY29tcG9uZW50ID0gMzQsCiAgICB0a19ob21l ID0gMzUsCgoKCgoKICAgIFRDX0tJTkRfQ09VTlQKICB9OwogIHR5cGVkZWYgVENLaW5kICZUQ0tp bmRfb3V0OwoKCiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfbnVsbDsKICBleHRlcm4gVHlwZUNv ZGVfcHRyIF90Y192b2lkOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3Nob3J0OwogIGV4dGVy biBUeXBlQ29kZV9wdHIgX3RjX2xvbmc7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfdXNob3J0 OwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3Vsb25nOwogIGV4dGVybiBUeXBlQ29kZV9wdHIg X3RjX2Zsb2F0OwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX2RvdWJsZTsKICBleHRlcm4gVHlw ZUNvZGVfcHRyIF90Y19ib29sZWFuOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX2NoYXI7CiAg ZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfb2N0ZXQ7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNf YW55OwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX1R5cGVDb2RlOwogIGV4dGVybiBUeXBlQ29k ZV9wdHIgX3RjX1ByaW5jaXBhbDsKICBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19PYmplY3Q7CiAg ZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfc3RyaW5nOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3Rj X2xvbmdsb25nOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3Vsb25nbG9uZzsKICBleHRlcm4g VHlwZUNvZGVfcHRyIF90Y19sb25nZG91YmxlOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3dj aGFyOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3dzdHJpbmc7CgoKCgogIGV4dGVybiBUeXBl Q29kZV9wdHIgX3RjX1VOS05PV047IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0JBRF9QQVJBTTsg ZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfTk9fTUVNT1JZOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90 Y19JTVBfTElNSVQ7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0NPTU1fRkFJTFVSRTsgZXh0ZXJu IFR5cGVDb2RlX3B0ciBfdGNfSU5WX09CSlJFRjsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfT0JK RUNUX05PVF9FWElTVDsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfTk9fUEVSTUlTU0lPTjsgZXh0 ZXJuIFR5cGVDb2RlX3B0ciBfdGNfSU5URVJOQUw7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX01B UlNIQUw7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0lOSVRJQUxJWkU7IGV4dGVybiBUeXBlQ29k ZV9wdHIgX3RjX05PX0lNUExFTUVOVDsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfQkFEX1RZUEVD T0RFOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19CQURfT1BFUkFUSU9OOyBleHRlcm4gVHlwZUNv ZGVfcHRyIF90Y19OT19SRVNPVVJDRVM7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX05PX1JFU1BP TlNFOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19QRVJTSVNUX1NUT1JFOyBleHRlcm4gVHlwZUNv ZGVfcHRyIF90Y19CQURfSU5WX09SREVSOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19UUkFOU0lF TlQ7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0ZSRUVfTUVNOyBleHRlcm4gVHlwZUNvZGVfcHRy IF90Y19JTlZfSURFTlQ7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0lOVl9GTEFHOyBleHRlcm4g VHlwZUNvZGVfcHRyIF90Y19JTlRGX1JFUE9TOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19CQURf Q09OVEVYVDsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfT0JKX0FEQVBURVI7IGV4dGVybiBUeXBl Q29kZV9wdHIgX3RjX0RBVEFfQ09OVkVSU0lPTjsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfSU5W X1BPTElDWTsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfUkVCSU5EOyBleHRlcm4gVHlwZUNvZGVf cHRyIF90Y19USU1FT1VUOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19UUkFOU0FDVElPTl9VTkFW QUlMQUJMRTsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfVFJBTlNBQ1RJT05fTU9ERTsgZXh0ZXJu IFR5cGVDb2RlX3B0ciBfdGNfVFJBTlNBQ1RJT05fUkVRVUlSRUQ7IGV4dGVybiBUeXBlQ29kZV9w dHIgX3RjX1RSQU5TQUNUSU9OX1JPTExFREJBQ0s7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0lO VkFMSURfVFJBTlNBQ1RJT047IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0NPREVTRVRfSU5DT01Q QVRJQkxFOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19CQURfUU9TOwoKCiAgZXh0ZXJuIFR5cGVD b2RlX3B0ciBfdGNfVW5rbm93blVzZXJFeGNlcHRpb247CgogIGV4dGVybiBDT1JCQTo6VHlwZUNv ZGVfcHRyIF90Y19Cb3VuZHM7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfQ3VycmVudDsKCiAg ZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfTmFtZWRWYWx1ZTsKCiAgZW51bQogIHsKCiAgICBBUkdf SU4gPSAweDAxLAogICAgQVJHX09VVCA9IDB4MDIsCiAgICBBUkdfSU5PVVQgPSAweDA0LAogICAg SU5fQ09QWV9WQUxVRSA9IDB4MDgsCiAgICBPVVRfTElTVF9NRU1PUlkgPSAweDEwLAogICAgREVQ RU5ERU5UX0xJU1QgPSAweDIwLAoKCiAgICBDVFhfUkVTVFJJQ1RfU0NPUEUgPSAweDQwLAogICAg Q1RYX0RFTEVURV9ERVNDRU5ERU5UUyA9IDB4ODAsCgoKICAgIElOVl9OT19SRVNQT05TRSA9IDB4 MTAwLAogICAgSU5WX1RFUk1fT05fRVJSID0gMHgyMDAsCiAgICBSRVNQX05PX1dBSVQgPSAweDQw MAogIH07CgogIHR5cGVkZWYgY2hhciAqT1JCaWQ7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX3Zh ciBPUkJpZF92YXI7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX291dCBPUkJpZF9vdXQ7CiAgZXh0 ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX09SQmlkOwoKCgogIHR5cGVkZWYgQ09SQkE6OlNo b3J0IFBvbGljeUVycm9yQ29kZTsKICB0eXBlZGVmIENPUkJBOjpTaG9ydF9vdXQgUG9saWN5RXJy b3JDb2RlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUG9saWN5RXJyb3JD b2RlOwoKICBleHRlcm4gY29uc3QgUG9saWN5RXJyb3JDb2RlIEJBRF9QT0xJQ1k7CiAgZXh0ZXJu IGNvbnN0IFBvbGljeUVycm9yQ29kZSBVTlNVUFBPUlRFRF9QT0xJQ1k7CiAgZXh0ZXJuIGNvbnN0 IFBvbGljeUVycm9yQ29kZSBCQURfUE9MSUNZX1RZUEU7CiAgZXh0ZXJuIGNvbnN0IFBvbGljeUVy cm9yQ29kZSBCQURfUE9MSUNZX1ZBTFVFOwogIGV4dGVybiBjb25zdCBQb2xpY3lFcnJvckNvZGUg VU5TVVBQT1JURURfUE9MSUNZX1ZBTFVFOwoKICB0eXBlZGVmIENPUkJBX1BvbGljeUVycm9yIFBv bGljeUVycm9yOwogIHR5cGVkZWYgQ09SQkFfUG9saWN5RXJyb3IgKlBvbGljeUVycm9yX3B0cjsK ICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUG9saWN5RXJyb3I7CgogIHR5cGVkZWYg Q09SQkFfSW52YWxpZFBvbGljaWVzIEludmFsaWRQb2xpY2llczsKICB0eXBlZGVmIENPUkJBX0lu dmFsaWRQb2xpY2llcyogSW52YWxpZFBvbGljaWVzX3B0cjsKICBleHRlcm4gQ09SQkE6OlR5cGVD b2RlX3B0ciBfdGNfSW52YWxpZFBvbGljaWVzOwoKICB0eXBlZGVmIENPUkJBOjpVTG9uZyBQb2xp Y3lUeXBlOwogIHR5cGVkZWYgQ09SQkE6OlVMb25nX291dCBQb2xpY3lUeXBlX291dDsKICBleHRl cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUG9saWN5VHlwZTsKCiAgdHlwZWRlZiBDT1JCQV9Q b2xpY3kgUG9saWN5OwogIHR5cGVkZWYgQ09SQkFfUG9saWN5ICpQb2xpY3lfcHRyOwogIHR5cGVk ZWYgQ09SQkFfUG9saWN5X3ZhciBQb2xpY3lfdmFyOwogIHR5cGVkZWYgQ09SQkFfUG9saWN5X291 dCBQb2xpY3lfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Qb2xpY3k7Cgog IHR5cGVkZWYgQ09SQkFfUG9saWN5TGlzdCBQb2xpY3lMaXN0OwogIHR5cGVkZWYgQ09SQkFfUG9s aWN5TGlzdF92YXIgUG9saWN5TGlzdF92YXI7CiAgdHlwZWRlZiBDT1JCQV9Qb2xpY3lMaXN0X291 dCBQb2xpY3lMaXN0X291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUG9saWN5 TGlzdDsKCgogIHR5cGVkZWYgQ09SQkE6OlVTaG9ydCBTZXJ2aWNlVHlwZTsKICB0eXBlZGVmIFNl cnZpY2VUeXBlIENPUkJBX1NlcnZpY2VUeXBlOwogIHR5cGVkZWYgQ09SQkE6OlVTaG9ydF9vdXQg U2VydmljZVR5cGVfb3V0OwogIHR5cGVkZWYgU2VydmljZVR5cGVfb3V0IENPUkJBX1NlcnZpY2VU eXBlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2VydmljZVR5cGU7CiAg ZXh0ZXJuIGNvbnN0IFNlcnZpY2VUeXBlIFNlY3VyaXR5OwoKICB0eXBlZGVmIENPUkJBOjpVTG9u ZyBTZXJ2aWNlT3B0aW9uOwogIHR5cGVkZWYgU2VydmljZU9wdGlvbiBDT1JCQV9TZXJ2aWNlT3B0 aW9uOwogIHR5cGVkZWYgQ09SQkE6OlVMb25nX291dCBTZXJ2aWNlT3B0aW9uX291dDsKICB0eXBl ZGVmIFNlcnZpY2VPcHRpb25fb3V0IENPUkJBX1NlcnZpY2VPcHRpb25fb3V0OwogIGV4dGVybiBD T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TZXJ2aWNlT3B0aW9uOwoKICB0eXBlZGVmIENPUkJBOjpV TG9uZyBTZXJ2aWNlRGV0YWlsVHlwZTsKICB0eXBlZGVmIFNlcnZpY2VEZXRhaWxUeXBlIENPUkJB X1NlcnZpY2VEZXRhaWxUeXBlOwogIHR5cGVkZWYgQ09SQkE6OlVMb25nX291dCBTZXJ2aWNlRGV0 YWlsVHlwZV9vdXQ7CiAgdHlwZWRlZiBTZXJ2aWNlRGV0YWlsVHlwZV9vdXQgQ09SQkFfU2Vydmlj ZURldGFpbFR5cGVfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TZXJ2aWNl RGV0YWlsVHlwZTsKCiAgdHlwZWRlZiBDT1JCQV9TZXJ2aWNlRGV0YWlsIFNlcnZpY2VEZXRhaWw7 CiAgdHlwZWRlZiBDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciBTZXJ2aWNlRGV0YWlsX3ZhcjsKICB0 eXBlZGVmIENPUkJBX1NlcnZpY2VEZXRhaWxfb3V0IFNlcnZpY2VEZXRhaWxfb3V0OwogIHR5cGVk ZWYgQ09SQkFfU2VydmljZURldGFpbCAqU2VydmljZURldGFpbF9wdHI7CiAgZXh0ZXJuIENPUkJB OjpUeXBlQ29kZV9wdHIgX3RjX1NlcnZpY2VEZXRhaWw7CgogIHR5cGVkZWYgQ09SQkFfU2Vydmlj ZUluZm9ybWF0aW9uIFNlcnZpY2VJbmZvcm1hdGlvbjsKICB0eXBlZGVmIENPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbl92YXIgU2VydmljZUluZm9ybWF0aW9uX3ZhcjsKICB0eXBlZGVmIENPUkJBX1Nl cnZpY2VJbmZvcm1hdGlvbl9vdXQgU2VydmljZUluZm9ybWF0aW9uX291dDsKICB0eXBlZGVmIENP UkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqU2VydmljZUluZm9ybWF0aW9uX3B0cjsKICBleHRlcm4g Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2VydmljZUluZm9ybWF0aW9uOwoKICB0eXBlZGVmIENP UkJBX1BvbGljeVR5cGVTZXEgUG9saWN5VHlwZVNlcTsKICB0eXBlZGVmIENPUkJBX1BvbGljeVR5 cGVTZXFfdmFyIFBvbGljeVR5cGVTZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfUG9saWN5VHlwZVNl cV9vdXQgUG9saWN5VHlwZVNlcV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3Rj X1BvbGljeVR5cGVTZXE7CgogIGVudW0gU2V0T3ZlcnJpZGVUeXBlCiAgewogICAgU0VUX09WRVJS SURFLAogICAgQUREX09WRVJSSURFCiAgfTsKICB0eXBlZGVmIFNldE92ZXJyaWRlVHlwZSAmU2V0 T3ZlcnJpZGVUeXBlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2V0T3Zl cnJpZGVUeXBlOwoKICB0eXBlZGVmIENPUkJBX1BvbGljeU1hbmFnZXIgUG9saWN5TWFuYWdlcjsK ICB0eXBlZGVmIENPUkJBX1BvbGljeU1hbmFnZXJfdmFyIFBvbGljeU1hbmFnZXJfdmFyOwogIHR5 cGVkZWYgQ09SQkFfUG9saWN5TWFuYWdlcl9vdXQgUG9saWN5TWFuYWdlcl9vdXQ7CiAgdHlwZWRl ZiBDT1JCQV9Qb2xpY3lNYW5hZ2VyICpQb2xpY3lNYW5hZ2VyX3B0cjsKICBleHRlcm4gQ09SQkE6 OlR5cGVDb2RlX3B0ciBfdGNfUG9saWN5TWFuYWdlcjsKCiAgdHlwZWRlZiBDT1JCQV9Qb2xpY3lD dXJyZW50IFBvbGljeUN1cnJlbnQ7CiAgdHlwZWRlZiBDT1JCQV9Qb2xpY3lDdXJyZW50X3ZhciBQ b2xpY3lDdXJyZW50X3ZhcjsKICB0eXBlZGVmIENPUkJBX1BvbGljeUN1cnJlbnRfb3V0IFBvbGlj eUN1cnJlbnRfb3V0OwogIHR5cGVkZWYgQ09SQkFfUG9saWN5Q3VycmVudCAqUG9saWN5Q3VycmVu dF9wdHI7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1BvbGljeUN1cnJlbnQ7Cgog IHR5cGVkZWYgQ09SQkFfRG9tYWluTWFuYWdlciBEb21haW5NYW5hZ2VyOwogIHR5cGVkZWYgQ09S QkFfRG9tYWluTWFuYWdlciAqRG9tYWluTWFuYWdlcl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Eb21h aW5NYW5hZ2VyX3ZhciBEb21haW5NYW5hZ2VyX3ZhcjsKICB0eXBlZGVmIENPUkJBX0RvbWFpbk1h bmFnZXJfb3V0IERvbWFpbk1hbmFnZXJfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRy IF90Y19Eb21haW5NYW5hZ2VyOwoKICB0eXBlZGVmIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0IERv bWFpbk1hbmFnZXJMaXN0OwogIHR5cGVkZWYgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKkRvbWFp bk1hbmFnZXJMaXN0X3B0cjsKICB0eXBlZGVmIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3ZhciBE b21haW5NYW5hZ2VyTGlzdF92YXI7CiAgdHlwZWRlZiBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9v dXQgRG9tYWluTWFuYWdlckxpc3Rfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90 Y19Eb21haW5NYW5hZ2VyTGlzdDsKCiAgZXh0ZXJuIGNvbnN0IFBvbGljeVR5cGUgU2VjQ29uc3Ry dWN0aW9uOwoKCiAgdHlwZWRlZiBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3kgQ29uc3RydWN0aW9u UG9saWN5OwogIHR5cGVkZWYgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5ICpDb25zdHJ1Y3Rpb25Q b2xpY3lfcHRyOwogIHR5cGVkZWYgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3ZhciBDb25zdHJ1 Y3Rpb25Qb2xpY3lfdmFyOwogIHR5cGVkZWYgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X291dCBD b25zdHJ1Y3Rpb25Qb2xpY3lfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19D b25zdHJ1Y3Rpb25Qb2xpY3k7CgogIHR5cGVkZWYgQ09SQkFfV3JvbmdUcmFuc2FjdGlvbiBXcm9u Z1RyYW5zYWN0aW9uOwogIHR5cGVkZWYgV3JvbmdUcmFuc2FjdGlvbiAqV3JvbmdUcmFuc2FjdGlv bl9wdHI7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1dyb25nVHJhbnNhY3Rpb247 CgoKCgoKICB0eXBlZGVmIENPUkJBX1BvbGxhYmxlU2V0IFBvbGxhYmxlU2V0OwogIHR5cGVkZWYg Q09SQkFfUG9sbGFibGVTZXRfdmFyIFBvbGxhYmxlU2V0X3ZhcjsKICB0eXBlZGVmIENPUkJBX1Bv bGxhYmxlU2V0X291dCBQb2xsYWJsZVNldF9vdXQ7CiAgdHlwZWRlZiBDT1JCQV9Qb2xsYWJsZVNl dF9wdHIgUG9sbGFibGVTZXRfcHRyOwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Q b2xsYWJsZVNldDsKCiAgdHlwZWRlZiBDT1JCQV9Qb2xsYWJsZSBQb2xsYWJsZTsKICB0eXBlZGVm IENPUkJBX1BvbGxhYmxlX3ZhciBQb2xsYWJsZV92YXI7CiAgdHlwZWRlZiBDT1JCQV9Qb2xsYWJs ZV9vdXQgUG9sbGFibGVfb3V0OwogIHR5cGVkZWYgQ09SQkFfUG9sbGFibGVfcHRyIFBvbGxhYmxl X3B0cjsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUG9sbGFibGU7CgogIHR5cGVk ZWYgQ09SQkFfRElJUG9sbGFibGUgRElJUG9sbGFibGU7CiAgdHlwZWRlZiBDT1JCQV9ESUlQb2xs YWJsZV92YXIgRElJUG9sbGFibGVfdmFyOwogIHR5cGVkZWYgQ09SQkFfRElJUG9sbGFibGVfb3V0 IERJSVBvbGxhYmxlX291dDsKICB0eXBlZGVmIENPUkJBX0RJSVBvbGxhYmxlX3B0ciBESUlQb2xs YWJsZV9wdHI7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0RJSVBvbGxhYmxlOwoK CiAgdHlwZWRlZiBjaGFyICpSZXBvc2l0b3J5SWQ7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX3Zh ciBSZXBvc2l0b3J5SWRfdmFyOwogIHR5cGVkZWYgQ09SQkE6OlN0cmluZ19vdXQgUmVwb3NpdG9y eUlkX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUmVwb3NpdG9yeUlkOwoK ICB0eXBlZGVmIGNoYXIgKklkZW50aWZpZXI7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX3ZhciBJ ZGVudGlmaWVyX3ZhcjsKICB0eXBlZGVmIENPUkJBOjpTdHJpbmdfb3V0IElkZW50aWZpZXJfb3V0 OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JZGVudGlmaWVyOwoKICB0eXBlZGVm IGNoYXIgKlNjb3BlZE5hbWU7CiAgdHlwZWRlZiBDT1JCQV9TdHJpbmdfdmFyIFNjb3BlZE5hbWVf dmFyOwogIHR5cGVkZWYgQ09SQkFfU3RyaW5nX291dCBTY29wZWROYW1lX291dDsKICBleHRlcm4g Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2NvcGVkTmFtZTsKCiAgdHlwZWRlZiBjaGFyICpWZXJz aW9uU3BlYzsKICB0eXBlZGVmIENPUkJBX1N0cmluZ192YXIgVmVyc2lvblNwZWNfdmFyOwogIHR5 cGVkZWYgQ09SQkFfU3RyaW5nX291dCBWZXJzaW9uU3BlY19vdXQ7CiAgZXh0ZXJuIENPUkJBOjpU eXBlQ29kZV9wdHIgX3RjX1ZlcnNpb25TcGVjOwoKICB0eXBlZGVmIENPUkJBOjpTaG9ydCBWaXNp YmlsaXR5OwogIHR5cGVkZWYgQ09SQkE6OlNob3J0X291dCBWaXNpYmlsaXR5X291dDsKICBleHRl cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVmlzaWJpbGl0eTsKCiAgZXh0ZXJuIGNvbnN0IENP UkJBOjpTaG9ydCBQUklWQVRFX01FTUJFUjsKICBleHRlcm4gY29uc3QgQ09SQkE6OlNob3J0IFBV QkxJQ19NRU1CRVI7CgogIHR5cGVkZWYgQ09SQkE6OlNob3J0IFZhbHVlTW9kaWZpZXI7CiAgdHlw ZWRlZiBDT1JCQTo6U2hvcnRfb3V0IFZhbHVlTW9kaWZpZXJfb3V0OwogIGV4dGVybiBDT1JCQTo6 VHlwZUNvZGVfcHRyIF90Y19WYWx1ZU1vZGlmaWVyOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlNo b3J0IFZNX05PTkU7CiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpTaG9ydCBWTV9DVVNUT007CiAgZXh0 ZXJuIGNvbnN0IENPUkJBOjpTaG9ydCBWTV9BQlNUUkFDVDsKICBleHRlcm4gY29uc3QgQ09SQkE6 OlNob3J0IFZNX1RSVU5DQVRBQkxFOwoKICB0eXBlZGVmIGNoYXIgKiBDb250ZXh0SWRlbnRpZmll cjsKICB0eXBlZGVmIENPUkJBOjpTdHJpbmdfdmFyIENvbnRleHRJZGVudGlmaWVyX3ZhcjsKICB0 eXBlZGVmIENPUkJBOjpTdHJpbmdfb3V0IENvbnRleHRJZGVudGlmaWVyX291dDsKICBleHRlcm4g Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQ29udGV4dElkZW50aWZpZXI7CgogIHR5cGVkZWYgQ09S QkFfSVJPYmplY3QgSVJPYmplY3Q7CiAgdHlwZWRlZiBDT1JCQV9JUk9iamVjdCAqSVJPYmplY3Rf cHRyOwogIHR5cGVkZWYgQ09SQkFfSVJPYmplY3RfdmFyIElST2JqZWN0X3ZhcjsKICB0eXBlZGVm IENPUkJBX0lST2JqZWN0X291dCBJUk9iamVjdF9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29k ZV9wdHIgX3RjX0lST2JqZWN0OwoKICBlbnVtIERlZmluaXRpb25LaW5kCiAgICB7CiAgICAgICAg ZGtfbm9uZSwKICAgICAgICBka19hbGwsCiAgICAgICAgZGtfQXR0cmlidXRlLAogICAgICAgIGRr X0NvbnN0YW50LAogICAgICAgIGRrX0V4Y2VwdGlvbiwKICAgICAgICBka19JbnRlcmZhY2UsCiAg ICAgICAgZGtfTW9kdWxlLAogICAgICAgIGRrX09wZXJhdGlvbiwKICAgICAgICBka19UeXBlZGVm LAogICAgICAgIGRrX0FsaWFzLAogICAgICAgIGRrX1N0cnVjdCwKICAgICAgICBka19VbmlvbiwK ICAgICAgICBka19FbnVtLAogICAgICAgIGRrX1ByaW1pdGl2ZSwKICAgICAgICBka19TdHJpbmcs CiAgICAgICAgZGtfU2VxdWVuY2UsCiAgICAgICAgZGtfQXJyYXksCiAgICAgICAgZGtfUmVwb3Np dG9yeSwKICAgICAgICBka19Xc3RyaW5nLAogICAgICAgIGRrX0ZpeGVkLAogICAgICAgIGRrX1Zh bHVlLAogICAgICAgIGRrX1ZhbHVlQm94LAogICAgICAgIGRrX1ZhbHVlTWVtYmVyLAogICAgICAg IGRrX05hdGl2ZSwKCgogICAgICAgIGRrX0Fic3RyYWN0SW50ZXJmYWNlLAogICAgICAgIGRrX0xv Y2FsSW50ZXJmYWNlLAojIDEyMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIKICAgICAgICBka19Db21wb25lbnQsCiAgICAgICAg ZGtfSG9tZSwKICAgICAgICBka19GYWN0b3J5LAogICAgICAgIGRrX0ZpbmRlciwKICAgICAgICBk a19QcmltYXJ5S2V5LAogICAgICAgIGRrX0VtaXRzLAogICAgICAgIGRrX1B1Ymxpc2hlcywKICAg ICAgICBka19Db25zdW1lcywKICAgICAgICBka19Qcm92aWRlcywKICAgICAgICBka19Vc2VzCiAg ICB9OwoKICB0eXBlZGVmIERlZmluaXRpb25LaW5kICZEZWZpbml0aW9uS2luZF9vdXQ7CiAgZXh0 ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0RlZmluaXRpb25LaW5kOwoKICB0eXBlZGVmIENP UkJBX0NvbnRhaW5lZCBDb250YWluZWQ7CiAgdHlwZWRlZiBDT1JCQV9Db250YWluZWQgKkNvbnRh aW5lZF9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Db250YWluZWRfdmFyIENvbnRhaW5lZF92YXI7CiAg dHlwZWRlZiBDT1JCQV9Db250YWluZWRfb3V0IENvbnRhaW5lZF9vdXQ7CiAgZXh0ZXJuIENPUkJB OjpUeXBlQ29kZV9wdHIgX3RjX0NvbnRhaW5lZDsKCiAgdHlwZWRlZiBDT1JCQV9Db250YWluZWRT ZXEgQ29udGFpbmVkU2VxOwogIHR5cGVkZWYgQ09SQkFfQ29udGFpbmVkU2VxX3ZhciBDb250YWlu ZWRTZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfQ29udGFpbmVkU2VxX291dCBDb250YWluZWRTZXFf b3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Db250YWluZWRTZXE7CgogIHR5 cGVkZWYgQ09SQkFfUmVwb3NpdG9yeSBSZXBvc2l0b3J5OwogIHR5cGVkZWYgQ09SQkFfUmVwb3Np dG9yeSAqUmVwb3NpdG9yeV9wdHI7CiAgdHlwZWRlZiBDT1JCQV9SZXBvc2l0b3J5X3ZhciBSZXBv c2l0b3J5X3ZhcjsKICB0eXBlZGVmIENPUkJBX1JlcG9zaXRvcnlfb3V0IFJlcG9zaXRvcnlfb3V0 OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19SZXBvc2l0b3J5OwoKICB0eXBlZGVm IENPUkJBX0NvbnRhaW5lciBDb250YWluZXI7CiAgdHlwZWRlZiBDT1JCQV9Db250YWluZXIgKkNv bnRhaW5lcl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Db250YWluZXJfdmFyIENvbnRhaW5lcl92YXI7 CiAgdHlwZWRlZiBDT1JCQV9Db250YWluZXJfb3V0IENvbnRhaW5lcl9vdXQ7CiAgZXh0ZXJuIENP UkJBOjpUeXBlQ29kZV9wdHIgX3RjX0NvbnRhaW5lcjsKCiAgdHlwZWRlZiBDT1JCQV9Nb2R1bGVE ZWYgTW9kdWxlRGVmOwogIHR5cGVkZWYgQ09SQkFfTW9kdWxlRGVmICpNb2R1bGVEZWZfcHRyOwog IHR5cGVkZWYgQ09SQkFfTW9kdWxlRGVmX3ZhciBNb2R1bGVEZWZfdmFyOwogIHR5cGVkZWYgQ09S QkFfTW9kdWxlRGVmX291dCBNb2R1bGVEZWZfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVf cHRyIF90Y19Nb2R1bGVEZWY7CgogIHR5cGVkZWYgQ09SQkFfQ29uc3RhbnREZWYgQ29uc3RhbnRE ZWY7CiAgdHlwZWRlZiBDT1JCQV9Db25zdGFudERlZiAqQ29uc3RhbnREZWZfcHRyOwogIHR5cGVk ZWYgQ09SQkFfQ29uc3RhbnREZWZfdmFyIENvbnN0YW50RGVmX3ZhcjsKICB0eXBlZGVmIENPUkJB X0NvbnN0YW50RGVmX291dCBDb25zdGFudERlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29k ZV9wdHIgX3RjX0NvbnN0YW50RGVmOwoKICB0eXBlZGVmIENPUkJBX0lETFR5cGUgSURMVHlwZTsK ICB0eXBlZGVmIENPUkJBX0lETFR5cGUgKklETFR5cGVfcHRyOwogIHR5cGVkZWYgQ09SQkFfSURM VHlwZV92YXIgSURMVHlwZV92YXI7CiAgdHlwZWRlZiBDT1JCQV9JRExUeXBlX291dCBJRExUeXBl X291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfSURMVHlwZTsKCiAgdHlwZWRl ZiBDT1JCQV9TdHJ1Y3REZWYgU3RydWN0RGVmOwogIHR5cGVkZWYgQ09SQkFfU3RydWN0RGVmICpT dHJ1Y3REZWZfcHRyOwogIHR5cGVkZWYgQ09SQkFfU3RydWN0RGVmX3ZhciBTdHJ1Y3REZWZfdmFy OwogIHR5cGVkZWYgQ09SQkFfU3RydWN0RGVmX291dCBTdHJ1Y3REZWZfb3V0OwogIGV4dGVybiBD T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TdHJ1Y3REZWY7CgogIHR5cGVkZWYgQ09SQkFfVW5pb25E ZWYgVW5pb25EZWY7CiAgdHlwZWRlZiBDT1JCQV9VbmlvbkRlZiAqVW5pb25EZWZfcHRyOwogIHR5 cGVkZWYgQ09SQkFfVW5pb25EZWZfdmFyIFVuaW9uRGVmX3ZhcjsKICB0eXBlZGVmIENPUkJBX1Vu aW9uRGVmX291dCBVbmlvbkRlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3Rj X1VuaW9uRGVmOwoKICB0eXBlZGVmIENPUkJBX0VudW1EZWYgRW51bURlZjsKICB0eXBlZGVmIENP UkJBX0VudW1EZWYgKkVudW1EZWZfcHRyOwogIHR5cGVkZWYgQ09SQkFfRW51bURlZl92YXIgRW51 bURlZl92YXI7CiAgdHlwZWRlZiBDT1JCQV9FbnVtRGVmX291dCBFbnVtRGVmX291dDsKICBleHRl cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRW51bURlZjsKCiAgdHlwZWRlZiBDT1JCQV9BbGlh c0RlZiBBbGlhc0RlZjsKICB0eXBlZGVmIENPUkJBX0FsaWFzRGVmICpBbGlhc0RlZl9wdHI7CiAg dHlwZWRlZiBDT1JCQV9BbGlhc0RlZl92YXIgQWxpYXNEZWZfdmFyOwogIHR5cGVkZWYgQ09SQkFf QWxpYXNEZWZfb3V0IEFsaWFzRGVmX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBf dGNfQWxpYXNEZWY7CgogIHR5cGVkZWYgQ09SQkFfSW50ZXJmYWNlRGVmIEludGVyZmFjZURlZjsK ICB0eXBlZGVmIENPUkJBX0ludGVyZmFjZURlZiAqSW50ZXJmYWNlRGVmX3B0cjsKICB0eXBlZGVm IENPUkJBX0ludGVyZmFjZURlZl92YXIgSW50ZXJmYWNlRGVmX3ZhcjsKICB0eXBlZGVmIENPUkJB X0ludGVyZmFjZURlZl9vdXQgSW50ZXJmYWNlRGVmX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVD b2RlX3B0ciBfdGNfSW50ZXJmYWNlRGVmOwoKICB0eXBlZGVmIENPUkJBX0Fic3RyYWN0SW50ZXJm YWNlRGVmIEFic3RyYWN0SW50ZXJmYWNlRGVmOwogIHR5cGVkZWYgQ09SQkFfQWJzdHJhY3RJbnRl cmZhY2VEZWYgKkFic3RyYWN0SW50ZXJmYWNlRGVmX3B0cjsKICB0eXBlZGVmIENPUkJBX0Fic3Ry YWN0SW50ZXJmYWNlRGVmX3ZhciBBYnN0cmFjdEludGVyZmFjZURlZl92YXI7CiAgdHlwZWRlZiBD T1JCQV9BYnN0cmFjdEludGVyZmFjZURlZl9vdXQgQWJzdHJhY3RJbnRlcmZhY2VEZWZfb3V0Owog IGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19BYnN0cmFjdEludGVyZmFjZURlZjsKCiAg dHlwZWRlZiBDT1JCQV9Mb2NhbEludGVyZmFjZURlZiBMb2NhbEludGVyZmFjZURlZjsKICB0eXBl ZGVmIENPUkJBX0xvY2FsSW50ZXJmYWNlRGVmICpMb2NhbEludGVyZmFjZURlZl9wdHI7CiAgdHlw ZWRlZiBDT1JCQV9Mb2NhbEludGVyZmFjZURlZl92YXIgTG9jYWxJbnRlcmZhY2VEZWZfdmFyOwog IHR5cGVkZWYgQ09SQkFfTG9jYWxJbnRlcmZhY2VEZWZfb3V0IExvY2FsSW50ZXJmYWNlRGVmX291 dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfTG9jYWxJbnRlcmZhY2VEZWY7Cgog IHR5cGVkZWYgQ09SQkFfRXhjZXB0aW9uRGVmIEV4Y2VwdGlvbkRlZjsKICB0eXBlZGVmIENPUkJB X0V4Y2VwdGlvbkRlZiAqRXhjZXB0aW9uRGVmX3B0cjsKICB0eXBlZGVmIENPUkJBX0V4Y2VwdGlv bkRlZl92YXIgRXhjZXB0aW9uRGVmX3ZhcjsKICB0eXBlZGVmIENPUkJBX0V4Y2VwdGlvbkRlZl9v dXQgRXhjZXB0aW9uRGVmX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRXhj ZXB0aW9uRGVmOwoKICB0eXBlZGVmIENPUkJBX05hdGl2ZURlZiBOYXRpdmVEZWY7CiAgdHlwZWRl ZiBDT1JCQV9OYXRpdmVEZWYgKk5hdGl2ZURlZl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9OYXRpdmVE ZWZfdmFyIE5hdGl2ZURlZl92YXI7CiAgdHlwZWRlZiBDT1JCQV9OYXRpdmVEZWZfb3V0IE5hdGl2 ZURlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX05hdGl2ZURlZjsKCiAg dHlwZWRlZiBDT1JCQV9JbnRlcmZhY2VEZWZTZXEgSW50ZXJmYWNlRGVmU2VxOwogIHR5cGVkZWYg Q09SQkFfSW50ZXJmYWNlRGVmU2VxX3ZhciBJbnRlcmZhY2VEZWZTZXFfdmFyOwogIHR5cGVkZWYg Q09SQkFfSW50ZXJmYWNlRGVmU2VxX291dCBJbnRlcmZhY2VEZWZTZXFfb3V0OwogIGV4dGVybiBD T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JbnRlcmZhY2VEZWZTZXE7CgogIHR5cGVkZWYgQ09SQkFf QWJzdHJhY3RJbnRlcmZhY2VEZWZTZXEgQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXE7CiAgdHlwZWRl ZiBDT1JCQV9BYnN0cmFjdEludGVyZmFjZURlZlNlcV92YXIgQWJzdHJhY3RJbnRlcmZhY2VEZWZT ZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXFfb3V0IEFic3Ry YWN0SW50ZXJmYWNlRGVmU2VxX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf QWJzdHJhY3RJbnRlcmZhY2VEZWZTZXE7CgogIHR5cGVkZWYgQ09SQkFfTG9jYWxJbnRlcmZhY2VE ZWZTZXEgTG9jYWxJbnRlcmZhY2VEZWZTZXE7CiAgdHlwZWRlZiBDT1JCQV9Mb2NhbEludGVyZmFj ZURlZlNlcV92YXIgTG9jYWxJbnRlcmZhY2VEZWZTZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfTG9j YWxJbnRlcmZhY2VEZWZTZXFfb3V0IExvY2FsSW50ZXJmYWNlRGVmU2VxX291dDsKICBleHRlcm4g Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfTG9jYWxJbnRlcmZhY2VEZWZTZXE7CgogIHR5cGVkZWYg Q09SQkFfVmFsdWVEZWYgVmFsdWVEZWY7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZURlZiAqVmFsdWVE ZWZfcHRyOwogIHR5cGVkZWYgQ09SQkFfVmFsdWVEZWZfdmFyIFZhbHVlRGVmX3ZhcjsKICB0eXBl ZGVmIENPUkJBX1ZhbHVlRGVmX291dCBWYWx1ZURlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBl Q29kZV9wdHIgX3RjX1ZhbHVlRGVmOwoKICB0eXBlZGVmIENPUkJBX1ZhbHVlRGVmU2VxIFZhbHVl RGVmU2VxOwogIHR5cGVkZWYgQ09SQkFfVmFsdWVEZWZTZXFfdmFyIFZhbHVlRGVmU2VxX3ZhcjsK ICB0eXBlZGVmIENPUkJBX1ZhbHVlRGVmU2VxX291dCBWYWx1ZURlZlNlcV9vdXQ7CiAgZXh0ZXJu IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1ZhbHVlRGVmU2VxOwoKICB0eXBlZGVmIENPUkJBX1Zh bHVlQm94RGVmIFZhbHVlQm94RGVmOwogIHR5cGVkZWYgQ09SQkFfVmFsdWVCb3hEZWYgKlZhbHVl Qm94RGVmX3B0cjsKICB0eXBlZGVmIENPUkJBX1ZhbHVlQm94RGVmX3ZhciBWYWx1ZUJveERlZl92 YXI7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZUJveERlZl9vdXQgVmFsdWVCb3hEZWZfb3V0OwogIGV4 dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19WYWx1ZUJveERlZjsKCiAgdHlwZWRlZiBDT1JC QV9TdHJ1Y3RNZW1iZXIgU3RydWN0TWVtYmVyOwogIHR5cGVkZWYgQ09SQkFfU3RydWN0TWVtYmVy X3ZhciBTdHJ1Y3RNZW1iZXJfdmFyOwogIHR5cGVkZWYgQ09SQkFfU3RydWN0TWVtYmVyX291dCBT dHJ1Y3RNZW1iZXJfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TdHJ1Y3RN ZW1iZXI7CgogIHR5cGVkZWYgQ09SQkFfU3RydWN0TWVtYmVyU2VxIFN0cnVjdE1lbWJlclNlcTsK ICB0eXBlZGVmIENPUkJBX1N0cnVjdE1lbWJlclNlcV92YXIgU3RydWN0TWVtYmVyU2VxX3ZhcjsK ICB0eXBlZGVmIENPUkJBX1N0cnVjdE1lbWJlclNlcV9vdXQgU3RydWN0TWVtYmVyU2VxX291dDsK ICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU3RydWN0TWVtYmVyU2VxOwoKICB0eXBl ZGVmIENPUkJBX0luaXRpYWxpemVyIEluaXRpYWxpemVyOwogIHR5cGVkZWYgQ09SQkFfSW5pdGlh bGl6ZXJfdmFyIEluaXRpYWxpemVyX3ZhcjsKICB0eXBlZGVmIENPUkJBX0luaXRpYWxpemVyX291 dCBJbml0aWFsaXplcl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0luaXRp YWxpemVyOwoKICB0eXBlZGVmIENPUkJBX0luaXRpYWxpemVyU2VxIEluaXRpYWxpemVyU2VxOwog IHR5cGVkZWYgQ09SQkFfSW5pdGlhbGl6ZXJTZXFfdmFyIEluaXRpYWxpemVyU2VxX3ZhcjsKICB0 eXBlZGVmIENPUkJBX0luaXRpYWxpemVyU2VxX291dCBJbml0aWFsaXplclNlcV9vdXQ7CiAgZXh0 ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0luaXRpYWxpemVyU2VxOwoKICB0eXBlZGVmIENP UkJBX1VuaW9uTWVtYmVyIFVuaW9uTWVtYmVyOwogIHR5cGVkZWYgQ09SQkFfVW5pb25NZW1iZXJf dmFyIFVuaW9uTWVtYmVyX3ZhcjsKICB0eXBlZGVmIENPUkJBX1VuaW9uTWVtYmVyX291dCBVbmlv bk1lbWJlcl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1VuaW9uTWVtYmVy OwoKICB0eXBlZGVmIENPUkJBX1VuaW9uTWVtYmVyU2VxIFVuaW9uTWVtYmVyU2VxOwogIHR5cGVk ZWYgQ09SQkFfVW5pb25NZW1iZXJTZXFfdmFyIFVuaW9uTWVtYmVyU2VxX3ZhcjsKICB0eXBlZGVm IENPUkJBX1VuaW9uTWVtYmVyU2VxX291dCBVbmlvbk1lbWJlclNlcV9vdXQ7CiAgZXh0ZXJuIENP UkJBOjpUeXBlQ29kZV9wdHIgX3RjX1VuaW9uTWVtYmVyU2VxOwoKICB0eXBlZGVmIENPUkJBX0Vu dW1NZW1iZXJTZXEgRW51bU1lbWJlclNlcTsKICB0eXBlZGVmIENPUkJBX0VudW1NZW1iZXJTZXFf dmFyIEVudW1NZW1iZXJTZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfRW51bU1lbWJlclNlcV9vdXQg RW51bU1lbWJlclNlcV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0VudW1N ZW1iZXJTZXE7CgogIHR5cGVkZWYgQ09SQkFfTW9kdWxlRGVzY3JpcHRpb24gTW9kdWxlRGVzY3Jp cHRpb247CiAgdHlwZWRlZiBDT1JCQV9Nb2R1bGVEZXNjcmlwdGlvbl92YXIgTW9kdWxlRGVzY3Jp cHRpb25fdmFyOwogIHR5cGVkZWYgQ09SQkFfTW9kdWxlRGVzY3JpcHRpb25fb3V0IE1vZHVsZURl c2NyaXB0aW9uX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfTW9kdWxlRGVz Y3JpcHRpb247CgogIHR5cGVkZWYgQ09SQkFfQ29uc3RhbnREZXNjcmlwdGlvbiBDb25zdGFudERl c2NyaXB0aW9uOwogIHR5cGVkZWYgQ09SQkFfQ29uc3RhbnREZXNjcmlwdGlvbl92YXIgQ29uc3Rh bnREZXNjcmlwdGlvbl92YXI7CiAgdHlwZWRlZiBDT1JCQV9Db25zdGFudERlc2NyaXB0aW9uX291 dCBDb25zdGFudERlc2NyaXB0aW9uX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBf dGNfQ29uc3RhbnREZXNjcmlwdGlvbjsKCiAgdHlwZWRlZiBDT1JCQV9UeXBlZGVmRGVmIFR5cGVk ZWZEZWY7CiAgdHlwZWRlZiBDT1JCQV9UeXBlZGVmRGVmICpUeXBlZGVmRGVmX3B0cjsKICB0eXBl ZGVmIENPUkJBX1R5cGVkZWZEZWZfdmFyIFR5cGVkZWZEZWZfdmFyOwogIHR5cGVkZWYgQ09SQkFf VHlwZWRlZkRlZl9vdXQgVHlwZWRlZkRlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9w dHIgX3RjX1R5cGVkZWZEZWY7CgogIHR5cGVkZWYgQ09SQkFfVHlwZURlc2NyaXB0aW9uIFR5cGVE ZXNjcmlwdGlvbjsKICB0eXBlZGVmIENPUkJBX1R5cGVEZXNjcmlwdGlvbl92YXIgVHlwZURlc2Ny aXB0aW9uX3ZhcjsKICB0eXBlZGVmIENPUkJBX1R5cGVEZXNjcmlwdGlvbl9vdXQgVHlwZURlc2Ny aXB0aW9uX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVHlwZURlc2NyaXB0 aW9uOwoKICB0eXBlZGVmIENPUkJBX1ByaW1pdGl2ZURlZiBQcmltaXRpdmVEZWY7CiAgdHlwZWRl ZiBDT1JCQV9QcmltaXRpdmVEZWYgKlByaW1pdGl2ZURlZl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Q cmltaXRpdmVEZWZfdmFyIFByaW1pdGl2ZURlZl92YXI7CiAgdHlwZWRlZiBDT1JCQV9QcmltaXRp dmVEZWZfb3V0IFByaW1pdGl2ZURlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIg X3RjX1ByaW1pdGl2ZURlZjsKCiAgdHlwZWRlZiBDT1JCQV9TdHJpbmdEZWYgU3RyaW5nRGVmOwog IHR5cGVkZWYgQ09SQkFfU3RyaW5nRGVmICpTdHJpbmdEZWZfcHRyOwogIHR5cGVkZWYgQ09SQkFf U3RyaW5nRGVmX3ZhciBTdHJpbmdEZWZfdmFyOwogIHR5cGVkZWYgQ09SQkFfU3RyaW5nRGVmX291 dCBTdHJpbmdEZWZfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TdHJpbmdE ZWY7CgogIHR5cGVkZWYgQ09SQkFfV3N0cmluZ0RlZiBXc3RyaW5nRGVmOwogIHR5cGVkZWYgQ09S QkFfV3N0cmluZ0RlZiAqV3N0cmluZ0RlZl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Xc3RyaW5nRGVm X3ZhciBXc3RyaW5nRGVmX3ZhcjsKICB0eXBlZGVmIENPUkJBX1dzdHJpbmdEZWZfb3V0IFdzdHJp bmdEZWZfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Xc3RyaW5nRGVmOwoK ICB0eXBlZGVmIENPUkJBX0ZpeGVkRGVmIEZpeGVkRGVmOwogIHR5cGVkZWYgQ09SQkFfRml4ZWRE ZWYgKkZpeGVkRGVmX3B0cjsKICB0eXBlZGVmIENPUkJBX0ZpeGVkRGVmX3ZhciBGaXhlZERlZl92 YXI7CiAgdHlwZWRlZiBDT1JCQV9GaXhlZERlZl9vdXQgRml4ZWREZWZfb3V0OwogIGV4dGVybiBD T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19GaXhlZERlZjsKCiAgdHlwZWRlZiBDT1JCQV9TZXF1ZW5j ZURlZiBTZXF1ZW5jZURlZjsKICB0eXBlZGVmIENPUkJBX1NlcXVlbmNlRGVmICpTZXF1ZW5jZURl Zl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9TZXF1ZW5jZURlZl92YXIgU2VxdWVuY2VEZWZfdmFyOwog IHR5cGVkZWYgQ09SQkFfU2VxdWVuY2VEZWZfb3V0IFNlcXVlbmNlRGVmX291dDsKICBleHRlcm4g Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2VxdWVuY2VEZWY7CgogIHR5cGVkZWYgQ09SQkFfQXJy YXlEZWYgQXJyYXlEZWY7CiAgdHlwZWRlZiBDT1JCQV9BcnJheURlZiAqQXJyYXlEZWZfcHRyOwog IHR5cGVkZWYgQ09SQkFfQXJyYXlEZWZfdmFyIEFycmF5RGVmX3ZhcjsKICB0eXBlZGVmIENPUkJB X0FycmF5RGVmX291dCBBcnJheURlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIg X3RjX0FycmF5RGVmOwoKICB0eXBlZGVmIENPUkJBX0V4Y2VwdGlvbkRlc2NyaXB0aW9uIEV4Y2Vw dGlvbkRlc2NyaXB0aW9uOwogIHR5cGVkZWYgQ09SQkFfRXhjZXB0aW9uRGVzY3JpcHRpb25fdmFy IEV4Y2VwdGlvbkRlc2NyaXB0aW9uX3ZhcjsKICB0eXBlZGVmIENPUkJBX0V4Y2VwdGlvbkRlc2Ny aXB0aW9uX291dCBFeGNlcHRpb25EZXNjcmlwdGlvbl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBl Q29kZV9wdHIgX3RjX0V4Y2VwdGlvbkRlc2NyaXB0aW9uOwoKICB0eXBlZGVmIENPUkJBX0V4Y2Vw dGlvbkRlZlNlcSBFeGNlcHRpb25EZWZTZXE7CiAgdHlwZWRlZiBDT1JCQV9FeGNlcHRpb25EZWZT ZXFfdmFyIEV4Y2VwdGlvbkRlZlNlcV92YXI7CiAgdHlwZWRlZiBDT1JCQV9FeGNlcHRpb25EZWZT ZXFfb3V0IEV4Y2VwdGlvbkRlZlNlcV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIg X3RjX0V4Y2VwdGlvbkRlZlNlcTsKCiAgdHlwZWRlZiBDT1JCQV9FeGNEZXNjcmlwdGlvblNlcSBF eGNEZXNjcmlwdGlvblNlcTsKICB0eXBlZGVmIENPUkJBX0V4Y0Rlc2NyaXB0aW9uU2VxX3ZhciBF eGNEZXNjcmlwdGlvblNlcV92YXI7CiAgdHlwZWRlZiBDT1JCQV9FeGNEZXNjcmlwdGlvblNlcV9v dXQgRXhjRGVzY3JpcHRpb25TZXFfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90 Y19FeGNEZXNjcmlwdGlvblNlcTsKCiAgZW51bSBBdHRyaWJ1dGVNb2RlCiAgewogICAgQVRUUl9O T1JNQUwsCiAgICBBVFRSX1JFQURPTkxZCiAgfTsKCiAgdHlwZWRlZiBBdHRyaWJ1dGVNb2RlICZB dHRyaWJ1dGVNb2RlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQXR0cmli dXRlTW9kZTsKCiAgdHlwZWRlZiBDT1JCQV9BdHRyaWJ1dGVEZWYgQXR0cmlidXRlRGVmOwogIHR5 cGVkZWYgQ09SQkFfQXR0cmlidXRlRGVmICpBdHRyaWJ1dGVEZWZfcHRyOwogIHR5cGVkZWYgQ09S QkFfQXR0cmlidXRlRGVmX3ZhciBBdHRyaWJ1dGVEZWZfdmFyOwogIHR5cGVkZWYgQ09SQkFfQXR0 cmlidXRlRGVmX291dCBBdHRyaWJ1dGVEZWZfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVf cHRyIF90Y19BdHRyaWJ1dGVEZWY7CgogIHR5cGVkZWYgQ09SQkFfQXR0cmlidXRlRGVzY3JpcHRp b24gQXR0cmlidXRlRGVzY3JpcHRpb247CiAgdHlwZWRlZiBDT1JCQV9BdHRyaWJ1dGVEZXNjcmlw dGlvbl92YXIgQXR0cmlidXRlRGVzY3JpcHRpb25fdmFyOwogIHR5cGVkZWYgQ09SQkFfQXR0cmli dXRlRGVzY3JpcHRpb25fb3V0IEF0dHJpYnV0ZURlc2NyaXB0aW9uX291dDsKICBleHRlcm4gQ09S QkE6OlR5cGVDb2RlX3B0ciBfdGNfQXR0cmlidXRlRGVzY3JpcHRpb247CgogIGVudW0gUHJpbWl0 aXZlS2luZAogICAgewogICAgICBwa19udWxsLAogICAgICBwa192b2lkLAogICAgICBwa19zaG9y dCwKICAgICAgcGtfbG9uZywKICAgICAgcGtfdXNob3J0LAogICAgICBwa191bG9uZywKICAgICAg cGtfZmxvYXQsCiAgICAgIHBrX2RvdWJsZSwKICAgICAgcGtfYm9vbGVhbiwKICAgICAgcGtfY2hh ciwKICAgICAgcGtfb2N0ZXQsCiAgICAgIHBrX2FueSwKICAgICAgcGtfVHlwZUNvZGUsCiAgICAg IHBrX1ByaW5jaXBhbCwKICAgICAgcGtfc3RyaW5nLAogICAgICBwa19vYmpyZWYsCiAgICAgIHBr X2xvbmdsb25nLAogICAgICBwa191bG9uZ2xvbmcsCiAgICAgIHBrX2xvbmdkb3VibGUsCiAgICAg IHBrX3djaGFyLAogICAgICBwa193c3RyaW5nLAogICAgICBwa192YWx1ZV9iYXNlCiAgICB9OwoK ICB0eXBlZGVmIFByaW1pdGl2ZUtpbmQgJlByaW1pdGl2ZUtpbmRfb3V0OwogIGV4dGVybiBDT1JC QTo6VHlwZUNvZGVfcHRyIF90Y19QcmltaXRpdmVLaW5kOwoKICBlbnVtIFBhcmFtZXRlck1vZGUK ICAgIHsKICAgICAgUEFSQU1fSU4sCiAgICAgIFBBUkFNX09VVCwKICAgICAgUEFSQU1fSU5PVVQK ICAgIH07CgogIHR5cGVkZWYgUGFyYW1ldGVyTW9kZSAmUGFyYW1ldGVyTW9kZV9vdXQ7CiAgZXh0 ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1BhcmFtZXRlck1vZGU7CgogIHR5cGVkZWYgQ09S QkFfUGFyYW1ldGVyRGVzY3JpcHRpb24gUGFyYW1ldGVyRGVzY3JpcHRpb247CiAgdHlwZWRlZiBD T1JCQV9QYXJhbWV0ZXJEZXNjcmlwdGlvbl92YXIgUGFyYW1ldGVyRGVzY3JpcHRpb25fdmFyOwog IHR5cGVkZWYgQ09SQkFfUGFyYW1ldGVyRGVzY3JpcHRpb25fb3V0IFBhcmFtZXRlckRlc2NyaXB0 aW9uX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUGFyYW1ldGVyRGVzY3Jp cHRpb247CgogIHR5cGVkZWYgQ09SQkFfUGFyRGVzY3JpcHRpb25TZXEgUGFyRGVzY3JpcHRpb25T ZXE7CiAgdHlwZWRlZiBDT1JCQV9QYXJEZXNjcmlwdGlvblNlcV92YXIgUGFyRGVzY3JpcHRpb25T ZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfUGFyRGVzY3JpcHRpb25TZXFfb3V0IFBhckRlc2NyaXB0 aW9uU2VxX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUGFyRGVzY3JpcHRp b25TZXE7CgogIHR5cGVkZWYgQ09SQkFfQ29udGV4dElkU2VxIENvbnRleHRJZFNlcTsKICB0eXBl ZGVmIENPUkJBX0NvbnRleHRJZFNlcV92YXIgQ29udGV4dElkU2VxX3ZhcjsKICB0eXBlZGVmIENP UkJBX0NvbnRleHRJZFNlcV9vdXQgQ29udGV4dElkU2VxX291dDsKICBleHRlcm4gQ09SQkE6OlR5 cGVDb2RlX3B0ciBfdGNfQ29udGV4dElkU2VxOwoKICB0eXBlZGVmIENPUkJBX09wZXJhdGlvbkRl ZiBPcGVyYXRpb25EZWY7CiAgdHlwZWRlZiBDT1JCQV9PcGVyYXRpb25EZWYgKk9wZXJhdGlvbkRl Zl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9PcGVyYXRpb25EZWZfdmFyIE9wZXJhdGlvbkRlZl92YXI7 CiAgdHlwZWRlZiBDT1JCQV9PcGVyYXRpb25EZWZfb3V0IE9wZXJhdGlvbkRlZl9vdXQ7CiAgZXh0 ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX09wZXJhdGlvbkRlZjsKCiAgZW51bSBPcGVyYXRp b25Nb2RlCiAgICB7CiAgICAgIE9QX05PUk1BTCwKICAgICAgT1BfT05FV0FZCiAgICB9OwoKICB0 eXBlZGVmIE9wZXJhdGlvbk1vZGUgJk9wZXJhdGlvbk1vZGVfb3V0OwogIGV4dGVybiBDT1JCQTo6 VHlwZUNvZGVfcHRyIF90Y19PcGVyYXRpb25Nb2RlOwoKICB0eXBlZGVmIENPUkJBX09wZXJhdGlv bkRlc2NyaXB0aW9uIE9wZXJhdGlvbkRlc2NyaXB0aW9uOwogIHR5cGVkZWYgQ09SQkFfT3BlcmF0 aW9uRGVzY3JpcHRpb25fdmFyIE9wZXJhdGlvbkRlc2NyaXB0aW9uX3ZhcjsKICB0eXBlZGVmIENP UkJBX09wZXJhdGlvbkRlc2NyaXB0aW9uX291dCBPcGVyYXRpb25EZXNjcmlwdGlvbl9vdXQ7CiAg ZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX09wZXJhdGlvbkRlc2NyaXB0aW9uOwoKICB0 eXBlZGVmIENPUkJBX1JlcG9zaXRvcnlJZFNlcSBSZXBvc2l0b3J5SWRTZXE7CiAgdHlwZWRlZiBD T1JCQV9SZXBvc2l0b3J5SWRTZXFfdmFyIFJlcG9zaXRvcnlJZFNlcV92YXI7CiAgdHlwZWRlZiBD T1JCQV9SZXBvc2l0b3J5SWRTZXFfb3V0IFJlcG9zaXRvcnlJZFNlcV9vdXQ7CiAgZXh0ZXJuIENP UkJBOjpUeXBlQ29kZV9wdHIgX3RjX1JlcG9zaXRvcnlJZFNlcTsKCiAgdHlwZWRlZiBDT1JCQV9P cERlc2NyaXB0aW9uU2VxIE9wRGVzY3JpcHRpb25TZXE7CiAgdHlwZWRlZiBDT1JCQV9PcERlc2Ny aXB0aW9uU2VxX3ZhciBPcERlc2NyaXB0aW9uU2VxX3ZhcjsKICB0eXBlZGVmIENPUkJBX09wRGVz Y3JpcHRpb25TZXFfb3V0IE9wRGVzY3JpcHRpb25TZXFfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlw ZUNvZGVfcHRyIF90Y19PcERlc2NyaXB0aW9uU2VxOwoKICB0eXBlZGVmIENPUkJBX0F0dHJEZXNj cmlwdGlvblNlcSBBdHRyRGVzY3JpcHRpb25TZXE7CiAgdHlwZWRlZiBDT1JCQV9BdHRyRGVzY3Jp cHRpb25TZXFfdmFyIEF0dHJEZXNjcmlwdGlvblNlcV92YXI7CiAgdHlwZWRlZiBDT1JCQV9BdHRy RGVzY3JpcHRpb25TZXFfb3V0IEF0dHJEZXNjcmlwdGlvblNlcV9vdXQ7CiAgZXh0ZXJuIENPUkJB OjpUeXBlQ29kZV9wdHIgX3RjX0F0dHJEZXNjcmlwdGlvblNlcTsKCiAgdHlwZWRlZiBDT1JCQV9J bnRlcmZhY2VEZXNjcmlwdGlvbiBJbnRlcmZhY2VEZXNjcmlwdGlvbjsKICB0eXBlZGVmIENPUkJB X0ludGVyZmFjZURlc2NyaXB0aW9uX3ZhciBJbnRlcmZhY2VEZXNjcmlwdGlvbl92YXI7CiAgdHlw ZWRlZiBDT1JCQV9JbnRlcmZhY2VEZXNjcmlwdGlvbl9vdXQgSW50ZXJmYWNlRGVzY3JpcHRpb25f b3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JbnRlcmZhY2VEZXNjcmlwdGlv bjsKCiAgdHlwZWRlZiBDT1JCQV9WYWx1ZU1lbWJlciBWYWx1ZU1lbWJlcjsKICB0eXBlZGVmIENP UkJBX1ZhbHVlTWVtYmVyX3ZhciBWYWx1ZU1lbWJlcl92YXI7CiAgdHlwZWRlZiBDT1JCQV9WYWx1 ZU1lbWJlcl9vdXQgVmFsdWVNZW1iZXJfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRy IF90Y19WYWx1ZU1lbWJlcjsKCiAgdHlwZWRlZiBDT1JCQV9WYWx1ZU1lbWJlclNlcSBWYWx1ZU1l bWJlclNlcTsKICB0eXBlZGVmIENPUkJBX1ZhbHVlTWVtYmVyU2VxX3ZhciBWYWx1ZU1lbWJlclNl cV92YXI7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZU1lbWJlclNlcV9vdXQgVmFsdWVNZW1iZXJTZXFf b3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19WYWx1ZU1lbWJlclNlcTsKCiAg dHlwZWRlZiBDT1JCQV9WYWx1ZU1lbWJlckRlZiBWYWx1ZU1lbWJlckRlZjsKICB0eXBlZGVmIENP UkJBX1ZhbHVlTWVtYmVyRGVmICpWYWx1ZU1lbWJlckRlZl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9W YWx1ZU1lbWJlckRlZl92YXIgVmFsdWVNZW1iZXJEZWZfdmFyOwogIHR5cGVkZWYgQ09SQkFfVmFs dWVNZW1iZXJEZWZfb3V0IFZhbHVlTWVtYmVyRGVmX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVD b2RlX3B0ciBfdGNfVmFsdWVNZW1iZXJEZWY7CgogIHR5cGVkZWYgQ09SQkFfVmFsdWVEZXNjcmlw dGlvbiBWYWx1ZURlc2NyaXB0aW9uOwogIHR5cGVkZWYgQ09SQkFfVmFsdWVEZXNjcmlwdGlvbl92 YXIgVmFsdWVEZXNjcmlwdGlvbl92YXI7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZURlc2NyaXB0aW9u X291dCBWYWx1ZURlc2NyaXB0aW9uX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBf dGNfVmFsdWVEZXNjcmlwdGlvbjsKCgoKCgogIGV4dGVybiBPUkJfcHRyIE9SQl9pbml0IChpbnQg JmFyZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKmFyZ3ZbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqb3JiX25hbWUgPSAwKTsKICBleHRlcm4gT1JCX3B0ciBPUkJfaW5pdCAo aW50ICZhcmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICphcmd2W10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKm9yYl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSk7CgoKCgogIGV4dGVybiBDT1JCQV9FbnZpcm9ubWVudCYgZGVmYXVsdF9l bnZpcm9ubWVudCAodm9pZCk7CgoKCgp9CiMgMTc4MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIgp0eXBlZGVmIFRBT19VbmJvdW5k ZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PiBUQU9fb3BhcXVlOwpleHRlcm4gQ09SQkE6OlR5cGVD b2RlX3B0ciBUQ19vcGFxdWU7CgogICAgICAgICAgIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yPDwg KFRBT19PdXRwdXRDRFImLCBjb25zdCBUQU9fb3BhcXVlJik7CgogICAgICAgICAgIENPUkJBOjpC b29sZWFuCm9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiYsIFRBT19vcGFxdWUmKTsKCmNsYXNzIFRB T19PYmplY3RLZXk7CmNsYXNzIFRBT19PYmplY3RLZXlfdmFyOwpjbGFzcyBUQU9fT2JqZWN0S2V5 X291dDsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vY29yYmFmd2QuaSIgMQoKCgppbmxpbmUgY2hhciAqCkNPUkJBOjpzdHJpbmdfYWxsb2Mg KENPUkJBOjpVTG9uZyBsZW4pCnsKCgogIGNoYXIgKnMgPSAwOwogIGRvIHsgdHJ5IHsgcyA9IG5l dyBjaGFyW3NpemVfdCAobGVuICsgMSldOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9f ZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwoKCgogIHJl dHVybiBzOwp9CgppbmxpbmUgdm9pZApDT1JCQTo6c3RyaW5nX2ZyZWUgKGNoYXIgKnN0cikKewog IGRlbGV0ZSBbXSBzdHI7Cn0KCmlubGluZSBDT1JCQTo6V0NoYXIqCkNPUkJBOjp3c3RyaW5nX2Fs bG9jIChDT1JCQTo6VUxvbmcgbGVuKQp7CiAgQ09SQkE6OldDaGFyICpzID0gMDsKICBkbyB7IHRy eSB7IHMgPSBuZXcgQ09SQkE6OldDaGFyIFsoc2l6ZV90KSAobGVuICsgMSldOyB9IGNhdGNoIChz dGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9 IH0gd2hpbGUgKDApOwoKCgogIHJldHVybiBzOwp9CgppbmxpbmUgdm9pZApDT1JCQTo6d3N0cmlu Z19mcmVlIChDT1JCQTo6V0NoYXIgKmNvbnN0IHN0cikKewogIGRlbGV0ZSBbXSBzdHI7Cn0KCmlu bGluZSBDT1JCQV9FbnZpcm9ubWVudCYKQ09SQkE6OmRlZmF1bHRfZW52aXJvbm1lbnQgKCkKewog IHJldHVybiBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKTsKfQojIDE3OTYgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMgoKCgoK CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0 LmgiIDEKIyAxODAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL2NvcmJhZndkLmgiIDIKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZUMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ0RSLmgiIDEKIyA0MyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DRFIuaCIKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyA0NCAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DRFIuaCIg MgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L2NvcmJhZndkLmgiIDEKIyA0NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9DRFIuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9TdHJlYW0uaCIgMQojIDM2ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5oIgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDM3ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5o IiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9D RFJfQmFzZS5oIiAxCiMgMzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9DRFJfU3RyZWFtLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiIDEKIyAxMyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiIDEK IyAxNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3Nh Z2VfQmxvY2suaCIgMgojIDQ1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvQ0RSX1N0cmVhbS5oIiAyCgpjbGFzcyBBQ0VfQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0 b3I7CmNsYXNzIEFDRV9XQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3I7CmNsYXNzIEFDRV9DU3RyaW5n OwoKY2xhc3MgQUNFX0lucHV0Q0RSOwojIDY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5oIgpjbGFzcyBBQ0VfT3V0cHV0Q0RSCnsKcHVi bGljOgoKCgoKCiAgZnJpZW5kIGNsYXNzIEFDRV9DaGFyX0NvZGVzZXRfVHJhbnNsYXRvcjsKICBm cmllbmQgY2xhc3MgQUNFX1dDaGFyX0NvZGVzZXRfVHJhbnNsYXRvcjsKICBmcmllbmQgY2xhc3Mg QUNFX0lucHV0Q0RSOwoKCgogIEFDRV9PdXRwdXRDRFIgKHNpemVfdCBzaXplID0gMCwKICAgICAg ICAgICAgICAgICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAgICAgICAgQUNFX0FsbG9j YXRvciogYnVmZmVyX2FsbG9jYXRvciA9IDAsCiAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRv ciogZGF0YV9ibG9ja19hbGxvY2F0b3IgPSAwLAogICAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0 b3IqIG1lc3NhZ2VfYmxvY2tfYWxsb2NhdG9yID0gMCwKICAgICAgICAgICAgICAgICBzaXplX3Qg bWVtY3B5X3RyYWRlb2ZmID0KICAgICAgICAgICAgICAgICAgIDI1NiwKICAgICAgICAgICAgICAg ICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgIDEsCiAg ICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAg ICAgICAgICAyKTsKCgoKICBBQ0VfT3V0cHV0Q0RSIChjaGFyICpkYXRhLAogICAgICAgICAgICAg ICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVyID0gMSwKICAg ICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yID0gMCwKICAgICAg ICAgICAgICAgICBBQ0VfQWxsb2NhdG9yKiBkYXRhX2Jsb2NrX2FsbG9jYXRvciA9IDAsCiAgICAg ICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogbWVzc2FnZV9ibG9ja19hbGxvY2F0b3IgPSAwLAog ICAgICAgICAgICAgICAgIHNpemVfdCBtZW1jcHlfdHJhZGVvZmY9CiAgICAgICAgICAgICAgICAg ICAyNTYsCiAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgZ2lvcF9tYWpvcl92ZXJzaW9u ID0KICAgICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQg Z2lvcF9taW5vcl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgIDIpOwoKCgogIEFDRV9PdXRw dXRDRFIgKEFDRV9NZXNzYWdlX0Jsb2NrICpkYXRhLAogICAgICAgICAgICAgICAgIGludCBieXRl X29yZGVyID0gMSwKICAgICAgICAgICAgICAgICBzaXplX3QgbWVtY3B5X3RyYWRlb2ZmPQogICAg ICAgICAgICAgICAgICAgMjU2LAogICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0IGdpb3Bf bWFqb3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgIEFD RV9DRFI6Ok9jdGV0IGdpb3BfbWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAgICAgICAyKTsK CgogIH5BQ0VfT3V0cHV0Q0RSICh2b2lkKTsKCgoKCgoKCiAgc3RydWN0IGZyb21fYm9vbGVhbgog IHsKICAgIGZyb21fYm9vbGVhbiAoQUNFX0NEUjo6Qm9vbGVhbiBiKTsKICAgIEFDRV9DRFI6OkJv b2xlYW4gdmFsXzsKICB9OwoKICBzdHJ1Y3QgZnJvbV9vY3RldAogIHsKICAgIGZyb21fb2N0ZXQg KEFDRV9DRFI6Ok9jdGV0IG8pOwogICAgQUNFX0NEUjo6T2N0ZXQgdmFsXzsKICB9OwoKICBzdHJ1 Y3QgZnJvbV9jaGFyCiAgewogICAgZnJvbV9jaGFyIChBQ0VfQ0RSOjpDaGFyIGMpOwogICAgQUNF X0NEUjo6Q2hhciB2YWxfOwogIH07CgogIHN0cnVjdCBmcm9tX3djaGFyCiAgewogICAgZnJvbV93 Y2hhciAoQUNFX0NEUjo6V0NoYXIgd2MpOwogICAgQUNFX0NEUjo6V0NoYXIgdmFsXzsKICB9OwoK ICBzdHJ1Y3QgZnJvbV9zdHJpbmcKICB7CiAgICBmcm9tX3N0cmluZyAoQUNFX0NEUjo6Q2hhciog cywKICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBiLAogICAgICAgICAgICAgICAgIEFD RV9DRFI6OkJvb2xlYW4gbm9jb3B5ID0gMCk7CiAgICBmcm9tX3N0cmluZyAoY29uc3QgQUNFX0NE Ujo6Q2hhciogcywKICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBiLAogICAgICAgICAg ICAgICAgIEFDRV9DRFI6OkJvb2xlYW4gbm9jb3B5ID0gMCk7CiAgICBBQ0VfQ0RSOjpDaGFyICp2 YWxfOwogICAgQUNFX0NEUjo6VUxvbmcgYm91bmRfOwogICAgQUNFX0NEUjo6Qm9vbGVhbiBub2Nv cHlfOwogIH07CgogIHN0cnVjdCBmcm9tX3dzdHJpbmcKICB7CiAgICBmcm9tX3dzdHJpbmcgKEFD RV9DRFI6OldDaGFyKiB3cywKICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgYiwKICAg ICAgICAgICAgICAgICAgQUNFX0NEUjo6Qm9vbGVhbiBub2NvcHkgPSAwKTsKICAgIGZyb21fd3N0 cmluZyAoY29uc3QgQUNFX0NEUjo6V0NoYXIqIHdzLAogICAgICAgICAgICAgICAgICBBQ0VfQ0RS OjpVTG9uZyBiLAogICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpCb29sZWFuIG5vY29weSA9IDAp OwogICAgQUNFX0NEUjo6V0NoYXIgKnZhbF87CiAgICBBQ0VfQ0RSOjpVTG9uZyBib3VuZF87CiAg ICBBQ0VfQ0RSOjpCb29sZWFuIG5vY29weV87CiAgfTsKCgoKCiAgQUNFX0NEUjo6Qm9vbGVhbiB3 cml0ZV9ib29sZWFuIChBQ0VfQ0RSOjpCb29sZWFuIHgpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3Jp dGVfY2hhciAoQUNFX0NEUjo6Q2hhciB4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3djaGFy IChBQ0VfQ0RSOjpXQ2hhciB4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX29jdGV0IChBQ0Vf Q0RSOjpPY3RldCB4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3Nob3J0IChBQ0VfQ0RSOjpT aG9ydCB4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3VzaG9ydCAoQUNFX0NEUjo6VVNob3J0 IHgpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfbG9uZyAoQUNFX0NEUjo6TG9uZyB4KTsKICBB Q0VfQ0RSOjpCb29sZWFuIHdyaXRlX3Vsb25nIChBQ0VfQ0RSOjpVTG9uZyB4KTsKICBBQ0VfQ0RS OjpCb29sZWFuIHdyaXRlX2xvbmdsb25nIChjb25zdCBBQ0VfQ0RSOjpMb25nTG9uZyAmeCk7CiAg QUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV91bG9uZ2xvbmcgKGNvbnN0IEFDRV9DRFI6OlVMb25nTG9u ZyAmeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV9mbG9hdCAoQUNFX0NEUjo6RmxvYXQgeCk7 CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV9kb3VibGUgKGNvbnN0IEFDRV9DRFI6OkRvdWJsZSAm eCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV9sb25nZG91YmxlIChjb25zdCBBQ0VfQ0RSOjpM b25nRG91YmxlICZ4KTsKCgogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfc3RyaW5nIChjb25zdCBB Q0VfQ0RSOjpDaGFyICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3N0cmluZyAoQUNFX0NE Ujo6VUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0Vf Q0RSOjpDaGFyICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3N0cmluZyAoY29uc3QgQUNF X0NTdHJpbmcgJngpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfd3N0cmluZyAoY29uc3QgQUNF X0NEUjo6V0NoYXIgKngpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfd3N0cmluZyAoQUNFX0NE Ujo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QUNFX0NEUjo6V0NoYXIgKngpOwoKCgoKCgogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfYm9vbGVh bl9hcnJheSAoY29uc3QgQUNFX0NEUjo6Qm9vbGVhbiAqeCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCk7CiAgQUNFX0NEUjo6Qm9v bGVhbiB3cml0ZV9jaGFyX2FycmF5IChjb25zdCBBQ0VfQ0RSOjpDaGFyICp4LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0Vf Q0RSOjpCb29sZWFuIHdyaXRlX3djaGFyX2FycmF5IChjb25zdCBBQ0VfQ0RSOjpXQ2hhciogeCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5n dGgpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfb2N0ZXRfYXJyYXkgKGNvbnN0IEFDRV9DRFI6 Ok9jdGV0KiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6 OlVMb25nIGxlbmd0aCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV9zaG9ydF9hcnJheSAoY29u c3QgQUNFX0NEUjo6U2hvcnQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3VzaG9y dF9hcnJheSAoY29uc3QgQUNFX0NEUjo6VVNob3J0ICp4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpOwogIEFDRV9DRFI6OkJvb2xl YW4gd3JpdGVfbG9uZ19hcnJheSAoY29uc3QgQUNFX0NEUjo6TG9uZyAqeCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCk7CiAgQUNFX0NE Ujo6Qm9vbGVhbiB3cml0ZV91bG9uZ19hcnJheSAoY29uc3QgQUNFX0NEUjo6VUxvbmcgKngsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3Ro KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX2xvbmdsb25nX2FycmF5IChjb25zdCBBQ0VfQ0RS OjpMb25nTG9uZyogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Q0VfQ0RSOjpVTG9uZyBsZW5ndGgpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfdWxvbmdsb25n X2FycmF5IChjb25zdCBBQ0VfQ0RSOjpVTG9uZ0xvbmcgKngsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCk7CiAgQUNFX0NEUjo6 Qm9vbGVhbiB3cml0ZV9mbG9hdF9hcnJheSAoY29uc3QgQUNFX0NEUjo6RmxvYXQgKngsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsK ICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX2RvdWJsZV9hcnJheSAoY29uc3QgQUNFX0NEUjo6RG91 YmxlICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpV TG9uZyBsZW5ndGgpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfbG9uZ2RvdWJsZV9hcnJheSAo Y29uc3QgQUNFX0NEUjo6TG9uZ0RvdWJsZSogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCk7CgoKCiAgQUNFX0NEUjo6Qm9v bGVhbiB3cml0ZV9vY3RldF9hcnJheV9tYiAoY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sqIG1iKTsK CgoKCgoKICBBQ0VfQ0RSOjpCb29sZWFuIGFwcGVuZF9ib29sZWFuIChBQ0VfSW5wdXRDRFIgJik7 CiAgQUNFX0NEUjo6Qm9vbGVhbiBhcHBlbmRfY2hhciAoQUNFX0lucHV0Q0RSICYpOwogIEFDRV9D RFI6OkJvb2xlYW4gYXBwZW5kX3djaGFyIChBQ0VfSW5wdXRDRFIgJik7CiAgQUNFX0NEUjo6Qm9v bGVhbiBhcHBlbmRfb2N0ZXQgKEFDRV9JbnB1dENEUiAmKTsKICBBQ0VfQ0RSOjpCb29sZWFuIGFw cGVuZF9zaG9ydCAoQUNFX0lucHV0Q0RSICYpOwogIEFDRV9DRFI6OkJvb2xlYW4gYXBwZW5kX3Vz aG9ydCAoQUNFX0lucHV0Q0RSICYpOwogIEFDRV9DRFI6OkJvb2xlYW4gYXBwZW5kX2xvbmcgKEFD RV9JbnB1dENEUiAmKTsKICBBQ0VfQ0RSOjpCb29sZWFuIGFwcGVuZF91bG9uZyAoQUNFX0lucHV0 Q0RSICYpOwogIEFDRV9DRFI6OkJvb2xlYW4gYXBwZW5kX2xvbmdsb25nIChBQ0VfSW5wdXRDRFIg Jik7CiAgQUNFX0NEUjo6Qm9vbGVhbiBhcHBlbmRfdWxvbmdsb25nIChBQ0VfSW5wdXRDRFIgJik7 CiAgQUNFX0NEUjo6Qm9vbGVhbiBhcHBlbmRfZmxvYXQgKEFDRV9JbnB1dENEUiAmKTsKICBBQ0Vf Q0RSOjpCb29sZWFuIGFwcGVuZF9kb3VibGUgKEFDRV9JbnB1dENEUiAmKTsKICBBQ0VfQ0RSOjpC b29sZWFuIGFwcGVuZF9sb25nZG91YmxlIChBQ0VfSW5wdXRDRFIgJik7CgogIEFDRV9DRFI6OkJv b2xlYW4gYXBwZW5kX3dzdHJpbmcgKEFDRV9JbnB1dENEUiAmKTsKICBBQ0VfQ0RSOjpCb29sZWFu IGFwcGVuZF9zdHJpbmcgKEFDRV9JbnB1dENEUiAmKTsKCgoKCiAgaW50IGdvb2RfYml0ICh2b2lk KSBjb25zdDsKCgogIHZvaWQgcmVzZXQgKHZvaWQpOwoKCiAgc2l6ZV90IHRvdGFsX2xlbmd0aCAo dm9pZCkgY29uc3Q7CgoKCgoKCiAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sgKmJlZ2luICh2b2lk KSBjb25zdDsKCgogIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrICplbmQgKHZvaWQpIGNvbnN0OwoK CiAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sgKmN1cnJlbnQgKHZvaWQpIGNvbnN0OwoKCgoKCgog IGNvbnN0IGNoYXIgKmJ1ZmZlciAodm9pZCkgY29uc3Q7CgoKCgoKCiAgc2l6ZV90IGxlbmd0aCAo dm9pZCkgY29uc3Q7CgoKCgoKCgogIGludCBhbGlnbl93cml0ZV9wdHIgKHNpemVfdCBhbGlnbm1l bnQpOwoKCiAgQUNFX0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yICpjaGFyX3RyYW5zbGF0b3IgKHZv aWQpIGNvbnN0OwogIEFDRV9XQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3IgKndjaGFyX3RyYW5zbGF0 b3IgKHZvaWQpIGNvbnN0OwoKCgoKCgogIHNpemVfdCBjdXJyZW50X2FsaWdubWVudCAodm9pZCkg Y29uc3Q7CgoKCgoKCgogIGludCBhZGp1c3QgKHNpemVfdCBzaXplLAogICAgICAgICAgICAgIGNo YXIgKiZidWYpOwoKCgogIGludCBhZGp1c3QgKHNpemVfdCBzaXplLAogICAgICAgICAgICAgIHNp emVfdCBhbGlnbiwKICAgICAgICAgICAgICBjaGFyIComYnVmKTsKCgoKICBpbnQgZG9fYnl0ZV9z d2FwICh2b2lkKSBjb25zdDsKCgoKCgogIHZvaWQgcmVzZXRfYnl0ZV9vcmRlciAoaW50IGJ5dGVf b3JkZXIpOwoKCiAgaW50IHNldF92ZXJzaW9uIChBQ0VfQ0RSOjpPY3RldCBtYWpvciwgQUNFX0NE Ujo6T2N0ZXQgbWlub3IpOwoKcHJpdmF0ZToKCiAgQUNFX091dHB1dENEUiAoY29uc3QgQUNFX091 dHB1dENEUiYgcmhzKTsKICBBQ0VfT3V0cHV0Q0RSJiBvcGVyYXRvcj0gKGNvbnN0IEFDRV9PdXRw dXRDRFImIHJocyk7CgogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfMSAoY29uc3QgQUNFX0NEUjo6 T2N0ZXQgKngpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfMiAoY29uc3QgQUNFX0NEUjo6VVNo b3J0ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlXzQgKGNvbnN0IEFDRV9DRFI6OlVMb25n ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlXzggKGNvbnN0IEFDRV9DRFI6OlVMb25nTG9u ZyAqeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV8xNiAoY29uc3QgQUNFX0NEUjo6TG9uZ0Rv dWJsZSAqeCk7CiMgMzY4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvQ0RSX1N0cmVhbS5oIgogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfYXJyYXkgKGNvbnN0 IHZvaWQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCk7CgoKCgoKCgogIGludCBn cm93X2FuZF9hZGp1c3QgKHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBhbGlnbiwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyIComYnVmKTsKCnByaXZhdGU6Cgog IEFDRV9NZXNzYWdlX0Jsb2NrIHN0YXJ0XzsKCgogIEFDRV9NZXNzYWdlX0Jsb2NrICpjdXJyZW50 XzsKCgoKCgoKCiAgaW50IGN1cnJlbnRfaXNfd3JpdGFibGVfOwojIDQwNiAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9TdHJlYW0uaCIKICBzaXplX3Qg Y3VycmVudF9hbGlnbm1lbnRfOwojIDQxNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL0NEUl9TdHJlYW0uaCIKICBpbnQgZG9fYnl0ZV9zd2FwXzsKCgogIGlu dCBnb29kX2JpdF87CgoKICBzaXplX3QgbWVtY3B5X3RyYWRlb2ZmXzsKCgogIEFDRV9DRFI6Ok9j dGV0IG1ham9yX3ZlcnNpb25fOwogIEFDRV9DRFI6Ok9jdGV0IG1pbm9yX3ZlcnNpb25fOwoKcHJv dGVjdGVkOgoKICBBQ0VfQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3IgKmNoYXJfdHJhbnNsYXRvcl87 CiAgQUNFX1dDaGFyX0NvZGVzZXRfVHJhbnNsYXRvciAqd2NoYXJfdHJhbnNsYXRvcl87Cn07CiMg NDUyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0 cmVhbS5oIgpjbGFzcyBBQ0VfSW5wdXRDRFIKewpwdWJsaWM6CgoKICBmcmllbmQgY2xhc3MgQUNF X0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yOwogIGZyaWVuZCBjbGFzcyBBQ0VfV0NoYXJfQ29kZXNl dF9UcmFuc2xhdG9yOwoKCgoKCgogIEFDRV9JbnB1dENEUiAoY29uc3QgY2hhciAqYnVmLAogICAg ICAgICAgICAgICAgc2l6ZV90IGJ1ZnNpeiwKICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVy ID0gMSwKICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24gPQogICAg ICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVy c2lvbiA9CiAgICAgICAgICAgICAgICAgIDIpOwoKCgogIEFDRV9JbnB1dENEUiAoc2l6ZV90IGJ1 ZnNpeiwKICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVyID0gMSwKICAgICAgICAgICAgICAg IEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAxLAogICAg ICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAg ICAgIDIpOwoKCiAgQUNFX0lucHV0Q0RSIChjb25zdCBBQ0VfTWVzc2FnZV9CbG9jayAqZGF0YSwK ICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVyID0gMSwKICAgICAgICAgICAgICAgIEFDRV9D RFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAxLAogICAgICAgICAg ICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAgICAgIDIp OwoKCgoKICBBQ0VfSW5wdXRDRFIgKEFDRV9EYXRhX0Jsb2NrICpkYXRhLAogICAgICAgICAgICAg ICAgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgZmxhZyA9IDAsCiAgICAgICAgICAg ICAgICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBt YWpvcl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIEFDRV9D RFI6Ok9jdGV0IG1pbm9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAyKTsKCgoKCgogIEFD RV9JbnB1dENEUiAoQUNFX0RhdGFfQmxvY2sgKmRhdGEsCiAgICAgICAgICAgICAgICBBQ0VfTWVz c2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBmbGFnID0gMCwKICAgICAgICAgICAgICAgIHNpemVf dCByZWFkX3BvaW50ZXJfcG9zaXRpb24gPSAwLAogICAgICAgICAgICAgICAgc2l6ZV90IHdyaXRl X3BvaW50ZXJfcG9zaXRpb24gPSAwLAogICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIgPSAx LAogICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWFqb3JfdmVyc2lvbiA9CiAgICAgICAg ICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtaW5vcl92ZXJzaW9u ID0KICAgICAgICAgICAgICAgICAgMik7CgoKCgoKCiAgQUNFX0lucHV0Q0RSIChjb25zdCBBQ0Vf SW5wdXRDRFImIHJocyk7CgogIEFDRV9JbnB1dENEUiYgb3BlcmF0b3I9IChjb25zdCBBQ0VfSW5w dXRDRFImIHJocyk7CgoKCiAgQUNFX0lucHV0Q0RSIChjb25zdCBBQ0VfSW5wdXRDRFImIHJocywK ICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgQUNFX0NEUjo6TG9u ZyBvZmZzZXQpOwoKCgogIEFDRV9JbnB1dENEUiAoY29uc3QgQUNFX0lucHV0Q0RSJiByaHMsCiAg ICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSk7CgoKICBBQ0VfSW5wdXRDRFIgKGNvbnN0IEFDRV9P dXRwdXRDRFImIHJocywKICAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0b3IqIGJ1ZmZlcl9hbGxv Y2F0b3IgPSAwLAogICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogZGF0YV9ibG9ja19hbGxv Y2F0b3IgPSAwLAogICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogbWVzc2FnZV9ibG9ja19h bGxvY2F0b3IgPSAwKTsKCgoKCiAgc3RydWN0IFRyYW5zZmVyX0NvbnRlbnRzCiAgewogICAgVHJh bnNmZXJfQ29udGVudHMgKEFDRV9JbnB1dENEUiAmcmhzKTsKCiAgICBBQ0VfSW5wdXRDRFIgJnJo c187CiAgfTsKCiAgQUNFX0lucHV0Q0RSIChUcmFuc2Zlcl9Db250ZW50cyByaHMpOwoKCiAgfkFD RV9JbnB1dENEUiAodm9pZCk7CgoKCgoKICBzdHJ1Y3QgdG9fYm9vbGVhbgogIHsKICAgIHRvX2Jv b2xlYW4gKEFDRV9DRFI6OkJvb2xlYW4gJmIpOwogICAgQUNFX0NEUjo6Qm9vbGVhbiAmcmVmXzsK ICB9OwoKICBzdHJ1Y3QgdG9fY2hhcgogIHsKICAgIHRvX2NoYXIgKEFDRV9DRFI6OkNoYXIgJmMp OwogICAgQUNFX0NEUjo6Q2hhciAmcmVmXzsKICB9OwoKICBzdHJ1Y3QgdG9fd2NoYXIKICB7CiAg ICB0b193Y2hhciAoQUNFX0NEUjo6V0NoYXIgJndjKTsKICAgIEFDRV9DRFI6OldDaGFyICZyZWZf OwogIH07CgogIHN0cnVjdCB0b19vY3RldAogIHsKICAgIHRvX29jdGV0IChBQ0VfQ0RSOjpPY3Rl dCAmbyk7CiAgICBBQ0VfQ0RSOjpPY3RldCAmcmVmXzsKICB9OwoKICBzdHJ1Y3QgdG9fc3RyaW5n CiAgewoKCgogICAgdG9fc3RyaW5nIChBQ0VfQ0RSOjpDaGFyIComcywKICAgICAgICAgICAgICAg QUNFX0NEUjo6VUxvbmcgYik7CiAgICB0b19zdHJpbmcgKGNvbnN0IEFDRV9DRFI6OkNoYXIgKiZz LAogICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBiKTsKICAgIGNvbnN0IEFDRV9DRFI6OkNo YXIgKiZ2YWxfOwogICAgQUNFX0NEUjo6VUxvbmcgYm91bmRfOwogIH07CgogIHN0cnVjdCB0b193 c3RyaW5nCiAgewoKCgogICAgdG9fd3N0cmluZyAoQUNFX0NEUjo6V0NoYXIgKiZ3cywKICAgICAg ICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIpOwogICAgdG9fd3N0cmluZyAoY29uc3QgQUNFX0NE Ujo6V0NoYXIgKiZ3cywKICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIpOwogICAgY29u c3QgQUNFX0NEUjo6V0NoYXIgKiZ2YWxfOwogICAgQUNFX0NEUjo6VUxvbmcgYm91bmRfOwogIH07 CgoKCgoKCiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkX2Jvb2xlYW4gKEFDRV9DRFI6OkJvb2xlYW4m IHgpOwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF9jaGFyIChBQ0VfQ0RSOjpDaGFyICZ4KTsKICBB Q0VfQ0RSOjpCb29sZWFuIHJlYWRfd2NoYXIgKEFDRV9DRFI6OldDaGFyJiB4KTsKICBBQ0VfQ0RS OjpCb29sZWFuIHJlYWRfb2N0ZXQgKEFDRV9DRFI6Ok9jdGV0JiB4KTsKICBBQ0VfQ0RSOjpCb29s ZWFuIHJlYWRfc2hvcnQgKEFDRV9DRFI6OlNob3J0ICZ4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJl YWRfdXNob3J0IChBQ0VfQ0RSOjpVU2hvcnQgJngpOwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF9s b25nIChBQ0VfQ0RSOjpMb25nICZ4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfdWxvbmcgKEFD RV9DRFI6OlVMb25nICZ4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfbG9uZ2xvbmcgKEFDRV9D RFI6OkxvbmdMb25nJiB4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfdWxvbmdsb25nIChBQ0Vf Q0RSOjpVTG9uZ0xvbmcmIHgpOwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF9mbG9hdCAoQUNFX0NE Ujo6RmxvYXQgJngpOwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF9kb3VibGUgKEFDRV9DRFI6OkRv dWJsZSAmeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkX2xvbmdkb3VibGUgKEFDRV9DRFI6Okxv bmdEb3VibGUgJngpOwoKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfc3RyaW5nIChBQ0VfQ0RSOjpD aGFyIComeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkX3N0cmluZyAoQUNFX0NTdHJpbmcgJngp OwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF93c3RyaW5nIChBQ0VfQ0RSOjpXQ2hhciomIHgpOwoj IDY0MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9T dHJlYW0uaCIKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfYm9vbGVhbl9hcnJheSAoQUNFX0NEUjo6 Qm9vbGVhbiogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NE Ujo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfY2hhcl9hcnJheSAoQUNF X0NEUjo6Q2hhciAqeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NE Ujo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfd2NoYXJfYXJyYXkgKEFD RV9DRFI6OldDaGFyKiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNF X0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfb2N0ZXRfYXJyYXkg KEFDRV9DRFI6Ok9jdGV0KiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfc2hvcnRfYXJy YXkgKEFDRV9DRFI6OlNob3J0ICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfdXNob3J0 X2FycmF5IChBQ0VfQ0RSOjpVU2hvcnQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRf bG9uZ19hcnJheSAoQUNFX0NEUjo6TG9uZyAqeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRf dWxvbmdfYXJyYXkgKEFDRV9DRFI6OlVMb25nICp4LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJl YWRfbG9uZ2xvbmdfYXJyYXkgKEFDRV9DRFI6OkxvbmdMb25nKiB4LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RS OjpCb29sZWFuIHJlYWRfdWxvbmdsb25nX2FycmF5IChBQ0VfQ0RSOjpVTG9uZ0xvbmcqIHgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVu Z3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfZmxvYXRfYXJyYXkgKEFDRV9DRFI6OkZsb2F0 ICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcg bGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfZG91YmxlX2FycmF5IChBQ0VfQ0RSOjpE b3VibGUgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6 VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfbG9uZ2RvdWJsZV9hcnJheSAo QUNFX0NEUjo6TG9uZ0RvdWJsZSogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKCgoKCgoKICBBQ0VfQ0RSOjpCb29sZWFu IHNraXBfYm9vbGVhbiAodm9pZCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiBza2lwX2NoYXIgKHZvaWQp OwogIEFDRV9DRFI6OkJvb2xlYW4gc2tpcF93Y2hhciAodm9pZCk7CiAgQUNFX0NEUjo6Qm9vbGVh biBza2lwX29jdGV0ICh2b2lkKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHNraXBfc2hvcnQgKHZvaWQp OwogIEFDRV9DRFI6OkJvb2xlYW4gc2tpcF91c2hvcnQgKHZvaWQpOwogIEFDRV9DRFI6OkJvb2xl YW4gc2tpcF9sb25nICh2b2lkKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHNraXBfdWxvbmcgKHZvaWQp OwogIEFDRV9DRFI6OkJvb2xlYW4gc2tpcF9sb25nbG9uZyAodm9pZCk7CiAgQUNFX0NEUjo6Qm9v bGVhbiBza2lwX3Vsb25nbG9uZyAodm9pZCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiBza2lwX2Zsb2F0 ICh2b2lkKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHNraXBfZG91YmxlICh2b2lkKTsKICBBQ0VfQ0RS OjpCb29sZWFuIHNraXBfbG9uZ2RvdWJsZSAodm9pZCk7CgoKCgoKCgogIEFDRV9DRFI6OkJvb2xl YW4gc2tpcF93c3RyaW5nICh2b2lkKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHNraXBfc3RyaW5nICh2 b2lkKTsKCgoKICBBQ0VfQ0RSOjpCb29sZWFuIHNraXBfYnl0ZXMgKHNpemVfdCBuKTsKCgogIGlu dCBnb29kX2JpdCAodm9pZCkgY29uc3Q7CgoKCgoKCiAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sq IHN0YXJ0ICh2b2lkKSBjb25zdDsKIyA3MTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9DRFJfU3RyZWFtLmgiCiAgaW50IGdyb3cgKHNpemVfdCBuZXdzaXpl KTsKCgoKCgoKICB2b2lkIHJlc2V0X2J5dGVfb3JkZXIgKGludCBieXRlX29yZGVyKTsKCgoKICB2 b2lkIHJlc2V0IChjb25zdCBBQ0VfTWVzc2FnZV9CbG9jayAqZGF0YSwKICAgICAgICAgICAgICBp bnQgYnl0ZV9vcmRlcik7CgoKICBBQ0VfTWVzc2FnZV9CbG9jayAqc3RlYWxfY29udGVudHMgKHZv aWQpOwoKCgogIHZvaWQgc3RlYWxfZnJvbSAoQUNFX0lucHV0Q0RSICZjZHIpOwoKCgoKICB2b2lk IGV4Y2hhbmdlX2RhdGFfYmxvY2tzIChBQ0VfSW5wdXRDRFIgJmNkcik7CgoKCgoKICBBQ0VfRGF0 YV9CbG9jayogY2xvbmVfZnJvbSAoQUNFX0lucHV0Q0RSICZjZHIpOwoKCgogIHZvaWQgcmVzZXRf Y29udGVudHMgKHZvaWQpOwoKCiAgY2hhciogcmRfcHRyICh2b2lkKTsKCgogIHNpemVfdCBsZW5n dGggKHZvaWQpIGNvbnN0OwoKCgoKCgoKICBpbnQgYWxpZ25fcmVhZF9wdHIgKHNpemVfdCBhbGln bm1lbnQpOwoKCgogIGludCBkb19ieXRlX3N3YXAgKHZvaWQpIGNvbnN0OwoKCgogIGludCBieXRl X29yZGVyICh2b2lkKSBjb25zdDsKCgogIEFDRV9DaGFyX0NvZGVzZXRfVHJhbnNsYXRvciAqY2hh cl90cmFuc2xhdG9yICh2b2lkKSBjb25zdDsKICBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9y ICp3Y2hhcl90cmFuc2xhdG9yICh2b2lkKSBjb25zdDsKCgoKCgoKCiAgaW50IGFkanVzdCAoc2l6 ZV90IHNpemUsCiAgICAgICAgICAgICAgY2hhciAqJmJ1Zik7CgoKCiAgaW50IGFkanVzdCAoc2l6 ZV90IHNpemUsCiAgICAgICAgICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAgIGNoYXIg KiZidWYpOwoKcHJvdGVjdGVkOgoKCiAgQUNFX01lc3NhZ2VfQmxvY2sgc3RhcnRfOwoKCgogIGlu dCBkb19ieXRlX3N3YXBfOwoKCiAgaW50IGdvb2RfYml0XzsKCgogIEFDRV9DaGFyX0NvZGVzZXRf VHJhbnNsYXRvciAqY2hhcl90cmFuc2xhdG9yXzsKICBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xh dG9yICp3Y2hhcl90cmFuc2xhdG9yXzsKCnByaXZhdGU6CiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFk XzEgKEFDRV9DRFI6Ok9jdGV0ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfMiAoQUNFX0NE Ujo6VVNob3J0ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfNCAoQUNFX0NEUjo6VUxvbmcg KngpOwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF84IChBQ0VfQ0RSOjpVTG9uZ0xvbmcgKngpOwog IEFDRV9DRFI6OkJvb2xlYW4gcmVhZF8xNiAoQUNFX0NEUjo6TG9uZ0RvdWJsZSAqeCk7CiMgODM2 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVh bS5oIgogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF9hcnJheSAodm9pZCogeCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NE Ujo6VUxvbmcgbGVuZ3RoKTsKCgogIHZvaWQgcmRfcHRyIChzaXplX3Qgb2Zmc2V0KTsKCgogIGNo YXIqIGVuZCAodm9pZCk7CgogIEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb25fOwogIEFDRV9D RFI6Ok9jdGV0IG1pbm9yX3ZlcnNpb25fOwp9OwojIDg2MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9TdHJlYW0uaCIKY2xhc3MgQUNFX0NoYXJfQ29k ZXNldF9UcmFuc2xhdG9yCnsKcHVibGljOgoKCiAgdmlydHVhbCBBQ0VfQ0RSOjpCb29sZWFuIHJl YWRfY2hhciAoQUNFX0lucHV0Q0RSJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBQ0VfQ0RSOjpDaGFyJikgPSAwOwoKCgogIHZpcnR1YWwgQUNFX0NEUjo6Qm9vbGVhbiBy ZWFkX3N0cmluZyAoQUNFX0lucHV0Q0RSJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFDRV9DRFI6OkNoYXIgKiYpID0gMDsKCgoKICB2aXJ0dWFsIEFDRV9DRFI6OkJv b2xlYW4gcmVhZF9jaGFyX2FycmF5IChBQ0VfSW5wdXRDRFImLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9DRFI6OkNoYXIqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nKSA9IDA7CgoK CiAgdmlydHVhbCBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX2NoYXIgKEFDRV9PdXRwdXRDRFImLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpDaGFyKSA9IDA7 CgoKCiAgdmlydHVhbCBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3N0cmluZyAoQUNFX091dHB1dENE UiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxv bmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX0NE Ujo6Q2hhciopID0gMDsKCgoKICB2aXJ0dWFsIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfY2hhcl9h cnJheSAoQUNFX091dHB1dENEUiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IEFDRV9DRFI6OkNoYXIqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZykgPSAwOwoKcHJvdGVjdGVkOgoKCiAg QUNFX0NEUjo6Qm9vbGVhbiByZWFkXzEgKEFDRV9JbnB1dENEUiYgaW5wdXQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdy aXRlXzEgKEFDRV9PdXRwdXRDRFImIG91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEFDRV9DRFI6Ok9jdGV0ICp4KTsKCgoKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfYXJy YXkgKEFDRV9JbnB1dENEUiYgaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkKiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWxpZ24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpOwoKCgoKCgoKICBBQ0VfQ0RSOjpC b29sZWFuIHdyaXRlX2FycmF5IChBQ0VfT3V0cHV0Q0RSJiBvdXRwdXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqeCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcg bGVuZ3RoKTsKIyA5MzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9DRFJfU3RyZWFtLmgiCiAgaW50IGFkanVzdCAoQUNFX091dHB1dENEUiYgb3V0LAogICAg ICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgIHNpemVfdCBhbGlnbiwKICAgICAg ICAgICAgICBjaGFyIComYnVmKTsKCgogIHZvaWQgZ29vZF9iaXQgKEFDRV9PdXRwdXRDRFImIG91 dCwgaW50IGJpdCk7Cn07CiMgOTU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5oIgpjbGFzcyBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xh dG9yCnsKcHVibGljOgogIHZpcnR1YWwgQUNFX0NEUjo6Qm9vbGVhbiByZWFkX3djaGFyIChBQ0Vf SW5wdXRDRFImLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RS OjpXQ2hhciYpID0gMDsKICB2aXJ0dWFsIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF93c3RyaW5nIChB Q0VfSW5wdXRDRFImLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD RV9DRFI6OldDaGFyIComKSA9IDA7CiAgdmlydHVhbCBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfd2No YXJfYXJyYXkgKEFDRV9JbnB1dENEUiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFDRV9DRFI6OldDaGFyKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcpID0gMDsKICB2aXJ0dWFsIEFD RV9DRFI6OkJvb2xlYW4gd3JpdGVfd2NoYXIgKEFDRV9PdXRwdXRDRFImLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6V0NoYXIpID0gMDsKICB2aXJ0dWFs IEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfd3N0cmluZyAoQUNFX091dHB1dENEUiYsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfQ0RSOjpXQ2hhciop ID0gMDsKICB2aXJ0dWFsIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfd2NoYXJfYXJyYXkgKEFDRV9P dXRwdXRDRFImLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgQUNFX0NEUjo6V0NoYXIqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcpID0gMDsKCnByb3RlY3RlZDoKCgogIEFDRV9DRFI6 OkJvb2xlYW4gcmVhZF8xIChBQ0VfSW5wdXRDRFImIGlucHV0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBBQ0VfQ0RSOjpPY3RldCAqeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkXzIgKEFD RV9JbnB1dENEUiYgaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVT aG9ydCAqeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkXzQgKEFDRV9JbnB1dENEUiYgaW5wdXQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nICp4KTsKICBBQ0VfQ0RS OjpCb29sZWFuIHdyaXRlXzEgKEFDRV9PdXRwdXRDRFImIG91dHB1dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFDRV9DRFI6Ok9jdGV0ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFu IHdyaXRlXzIgKEFDRV9PdXRwdXRDRFImIG91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IEFDRV9DRFI6OlVTaG9ydCAqeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV80 IChBQ0VfT3V0cHV0Q0RSJiBvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBBQ0VfQ0RSOjpVTG9uZyAqeCk7CgoKCiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkX2FycmF5IChB Q0VfSW5wdXRDRFImIGlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCog eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKCgoKCgoKCiAgQUNFX0NEUjo6Qm9vbGVh biB3cml0ZV9hcnJheSAoQUNFX091dHB1dENEUiYgb3V0cHV0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFs aWduLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0 aCk7CiMgMTAxNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L0NEUl9TdHJlYW0uaCIKICBpbnQgYWRqdXN0IChBQ0VfT3V0cHV0Q0RSJiBvdXQsCiAgICAgICAg ICAgICAgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAg ICAgIGNoYXIgKiZidWYpOwoKCiAgdm9pZCBnb29kX2JpdCAoQUNFX091dHB1dENEUiYgb3V0LCBp bnQgYml0KTsKfTsKCgoKZXh0ZXJuIEFDRV9DRFI6OkJvb2xlYW4gb3BlcmF0b3I8PCAoQUNFX091 dHB1dENEUiAmb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgQUNFX0NTdHJpbmcgJngpOwoKZXh0ZXJuIEFDRV9DRFI6OkJvb2xlYW4gb3BlcmF0 b3I+PiAoQUNFX0lucHV0Q0RSICZpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBQ0VfQ1N0cmluZyAmeCk7CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9TdHJlYW0uaSIgMQoKCgoKCgoKaW5saW5l CkFDRV9PdXRwdXRDRFI6OmZyb21fYm9vbGVhbjo6ZnJvbV9ib29sZWFuIChBQ0VfQ0RSOjpCb29s ZWFuIGIpCiAgOiB2YWxfIChiKQp7Cn0KCmlubGluZQpBQ0VfSW5wdXRDRFI6OnRvX2Jvb2xlYW46 OnRvX2Jvb2xlYW4gKEFDRV9DRFI6OkJvb2xlYW4gJmIpCiAgOiByZWZfIChiKQp7Cn0KCmlubGlu ZQpBQ0VfT3V0cHV0Q0RSOjpmcm9tX29jdGV0Ojpmcm9tX29jdGV0IChBQ0VfQ0RSOjpPY3RldCBv KQogIDogdmFsXyAobykKewp9CgppbmxpbmUKQUNFX0lucHV0Q0RSOjp0b19vY3RldDo6dG9fb2N0 ZXQgKEFDRV9DRFI6Ok9jdGV0ICZvKQogIDogcmVmXyAobykKewp9CgppbmxpbmUKQUNFX091dHB1 dENEUjo6ZnJvbV9jaGFyOjpmcm9tX2NoYXIgKEFDRV9DRFI6OkNoYXIgYykKICA6IHZhbF8gKGMp CnsKfQoKaW5saW5lCkFDRV9JbnB1dENEUjo6dG9fY2hhcjo6dG9fY2hhciAoQUNFX0NEUjo6Q2hh ciAmYykKICA6IHJlZl8gKGMpCnsKfQoKaW5saW5lCkFDRV9PdXRwdXRDRFI6OmZyb21fd2NoYXI6 OmZyb21fd2NoYXIgKEFDRV9DRFI6OldDaGFyIHdjKQogIDogdmFsXyAod2MpCnsKfQoKaW5saW5l CkFDRV9JbnB1dENEUjo6dG9fd2NoYXI6OnRvX3djaGFyIChBQ0VfQ0RSOjpXQ2hhciAmd2MpCiAg OiByZWZfICh3YykKewp9CgppbmxpbmUKQUNFX091dHB1dENEUjo6ZnJvbV9zdHJpbmc6OmZyb21f c3RyaW5nIChBQ0VfQ0RSOjpDaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQUNFX0NEUjo6Qm9vbGVhbiBub2NvcHkpCiAgOiB2YWxfIChzKSwKICAgIGJv dW5kXyAoYiksCiAgICBub2NvcHlfIChub2NvcHkpCnsKfQoKaW5saW5lCkFDRV9PdXRwdXRDRFI6 OmZyb21fc3RyaW5nOjpmcm9tX3N0cmluZyAoY29uc3QgQUNFX0NEUjo6Q2hhciAqcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBiLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkJvb2xlYW4gbm9j b3B5KQogIDogdmFsXyAoY29uc3RfY2FzdDxBQ0VfQ0RSOjpDaGFyICo+IChzKSksCiAgICBib3Vu ZF8gKGIpLAogICAgbm9jb3B5XyAobm9jb3B5KQp7Cn0KCmlubGluZQpBQ0VfSW5wdXRDRFI6OnRv X3N0cmluZzo6dG9fc3RyaW5nIChBQ0VfQ0RSOjpDaGFyIComcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgYikKICA6IHZhbF8gKGNvbnN0X2Nhc3Q8 Y29uc3QgQUNFX0NEUjo6Q2hhciAqJj4gKHMpKSwKICAgIGJvdW5kXyAoYikKewp9CgppbmxpbmUK QUNFX0lucHV0Q0RSOjp0b19zdHJpbmc6OnRvX3N0cmluZyAoY29uc3QgQUNFX0NEUjo6Q2hhciAq JnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIp CiAgOiB2YWxfIChzKSwKICAgIGJvdW5kXyAoYikKewp9CgppbmxpbmUKQUNFX091dHB1dENEUjo6 ZnJvbV93c3RyaW5nOjpmcm9tX3dzdHJpbmcgKEFDRV9DRFI6OldDaGFyICp3cywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpCb29sZWFuIG5v Y29weSkKICA6IHZhbF8gKHdzKSwKICAgIGJvdW5kXyAoYiksCiAgICBub2NvcHlfIChub2NvcHkp CnsKfQoKaW5saW5lCkFDRV9PdXRwdXRDRFI6OmZyb21fd3N0cmluZzo6ZnJvbV93c3RyaW5nIChj b25zdCBBQ0VfQ0RSOjpXQ2hhciAqd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQUNFX0NEUjo6Qm9vbGVhbiBub2NvcHkpCiAgOiB2YWxfIChjb25zdF9j YXN0PEFDRV9DRFI6OldDaGFyICo+ICh3cykpLAogICAgYm91bmRfIChiKSwKICAgIG5vY29weV8g KG5vY29weSkKewp9CgppbmxpbmUKQUNFX0lucHV0Q0RSOjp0b193c3RyaW5nOjp0b193c3RyaW5n IChBQ0VfQ0RSOjpXQ2hhciAqJndzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFDRV9DRFI6OlVMb25nIGIpCiAgOiB2YWxfIChjb25zdF9jYXN0PGNvbnN0IEFDRV9DRFI6 OldDaGFyIComPiAod3MpKSwKICAgIGJvdW5kXyAoYikKewp9CgppbmxpbmUKQUNFX0lucHV0Q0RS Ojp0b193c3RyaW5nOjp0b193c3RyaW5nIChjb25zdCBBQ0VfQ0RSOjpXQ2hhciAqJndzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIpCiAgOiB2 YWxfICh3cyksCiAgICBib3VuZF8gKGIpCnsKfQoKaW5saW5lCkFDRV9JbnB1dENEUjo6VHJhbnNm ZXJfQ29udGVudHM6OlRyYW5zZmVyX0NvbnRlbnRzIChBQ0VfSW5wdXRDRFIgJnJocykKICA6IHJo c18gKHJocykKewp9CgoKCmlubGluZQpBQ0VfT3V0cHV0Q0RSOjp+QUNFX091dHB1dENEUiAodm9p ZCkKewogIGlmICh0aGlzLT5zdGFydF8uY29udCAoKSAhPSAwKQogICAgewogICAgICBBQ0VfTWVz c2FnZV9CbG9jazo6cmVsZWFzZSAodGhpcy0+c3RhcnRfLmNvbnQgKCkpOwogICAgICB0aGlzLT5z dGFydF8uY29udCAoMCk7CiAgICB9CiAgdGhpcy0+Y3VycmVudF8gPSAwOwp9CgppbmxpbmUgdm9p ZApBQ0VfT3V0cHV0Q0RSOjpyZXNldCAodm9pZCkKewogIHRoaXMtPmN1cnJlbnRfID0gJnRoaXMt PnN0YXJ0XzsKICB0aGlzLT5jdXJyZW50X2lzX3dyaXRhYmxlXyA9IDE7CiAgQUNFX0NEUjo6bWJf YWxpZ24gKCZ0aGlzLT5zdGFydF8pOwogIHRoaXMtPmN1cnJlbnRfYWxpZ25tZW50XyA9IDA7CgoK CgogIEFDRV9NZXNzYWdlX0Jsb2NrICpjb250ID0gdGhpcy0+c3RhcnRfLmNvbnQgKCk7CiAgaWYg KGNvbnQgIT0gMCkKICAgIHsKICAgICAgQUNFX01lc3NhZ2VfQmxvY2s6OnJlbGVhc2UgKGNvbnQp OwogICAgICB0aGlzLT5zdGFydF8uY29udCAoMCk7CiAgICB9Cgp9CgoKCmlubGluZSBBQ0VfQ0RS OjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRlX29jdGV0IChBQ0VfQ0RSOjpPY3RldCB4KQp7 CiAgcmV0dXJuIHRoaXMtPndyaXRlXzEgKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQUNFX0NEUjo6 T2N0ZXQqPiAoJngpKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6 d3JpdGVfYm9vbGVhbiAoQUNFX0NEUjo6Qm9vbGVhbiB4KQp7CiAgcmV0dXJuIChBQ0VfQ0RSOjpC b29sZWFuKSB0aGlzLT53cml0ZV9vY3RldCAoeCA/IDEgOiAwKTsKfQoKaW5saW5lIEFDRV9DRFI6 OkJvb2xlYW4KQUNFX091dHB1dENEUjo6d3JpdGVfY2hhciAoQUNFX0NEUjo6Q2hhciB4KQp7CiAg aWYgKHRoaXMtPmNoYXJfdHJhbnNsYXRvcl8gPT0gMCkKICAgIHJldHVybiB0aGlzLT53cml0ZV8x IChyZWludGVycHJldF9jYXN0PGNvbnN0IEFDRV9DRFI6Ok9jdGV0Kj4gKCZ4KSk7CiAgcmV0dXJu IHRoaXMtPmNoYXJfdHJhbnNsYXRvcl8tPndyaXRlX2NoYXIgKCp0aGlzLCB4KTsKfQoKaW5saW5l IEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6d3JpdGVfc2hvcnQgKEFDRV9DRFI6OlNo b3J0IHgpCnsKICByZXR1cm4gdGhpcy0+d3JpdGVfMiAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBB Q0VfQ0RSOjpVU2hvcnQqPiAoJngpKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091 dHB1dENEUjo6d3JpdGVfdXNob3J0IChBQ0VfQ0RSOjpVU2hvcnQgeCkKewogIHJldHVybiB0aGlz LT53cml0ZV8yIChyZWludGVycHJldF9jYXN0PGNvbnN0IEFDRV9DRFI6OlVTaG9ydCo+ICgmeCkp Owp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV9sb25nIChB Q0VfQ0RSOjpMb25nIHgpCnsKICByZXR1cm4gdGhpcy0+d3JpdGVfNCAocmVpbnRlcnByZXRfY2Fz dDxjb25zdCBBQ0VfQ0RSOjpVTG9uZyo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVh bgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV91bG9uZyAoQUNFX0NEUjo6VUxvbmcgeCkKewogIHJldHVy biB0aGlzLT53cml0ZV80IChyZWludGVycHJldF9jYXN0PGNvbnN0IEFDRV9DRFI6OlVMb25nKj4g KCZ4KSk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRlX2xv bmdsb25nIChjb25zdCBBQ0VfQ0RSOjpMb25nTG9uZyAmeCkKewogIHJldHVybiB0aGlzLT53cml0 ZV84IChyZWludGVycHJldF9jYXN0PGNvbnN0IEFDRV9DRFI6OlVMb25nTG9uZyo+ICgmeCkpOwp9 CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV91bG9uZ2xvbmcg KGNvbnN0IEFDRV9DRFI6OlVMb25nTG9uZyAmeCkKewogIHJldHVybiB0aGlzLT53cml0ZV84IChy ZWludGVycHJldF9jYXN0PGNvbnN0IEFDRV9DRFI6OlVMb25nTG9uZyo+ICgmeCkpOwp9Cgppbmxp bmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV9mbG9hdCAoQUNFX0NEUjo6 RmxvYXQgeCkKewogIHJldHVybiB0aGlzLT53cml0ZV80IChyZWludGVycHJldF9jYXN0PGNvbnN0 IEFDRV9DRFI6OlVMb25nKj4gKCZ4KSk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9P dXRwdXRDRFI6OndyaXRlX2RvdWJsZSAoY29uc3QgQUNFX0NEUjo6RG91YmxlICZ4KQp7CiAgcmV0 dXJuIHRoaXMtPndyaXRlXzggKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQUNFX0NEUjo6VUxvbmdM b25nKj4gKCZ4KSk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6Ondy aXRlX2xvbmdkb3VibGUgKGNvbnN0IEFDRV9DRFI6OkxvbmdEb3VibGUgJngpCnsKICByZXR1cm4g dGhpcy0+d3JpdGVfMTYgKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQUNFX0NEUjo6TG9uZ0RvdWJs ZSo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0 ZV9zdHJpbmcgKGNvbnN0IEFDRV9DRFI6OkNoYXIgKngpCnsKICBpZiAoeCAhPSAwKQogICAgcmV0 dXJuIHRoaXMtPndyaXRlX3N0cmluZyAoQUNFX09TOjpzdHJsZW4oeCksIHgpOwogIHJldHVybiB0 aGlzLT53cml0ZV9zdHJpbmcgKDAsIDApOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0Vf T3V0cHV0Q0RSOjp3cml0ZV93c3RyaW5nIChjb25zdCBBQ0VfQ0RSOjpXQ2hhciAqeCkKewogIGlm ICh4ICE9IDApCiAgICByZXR1cm4gdGhpcy0+d3JpdGVfd3N0cmluZyAoQUNFX09TOjp3c2xlbiAo eCksIHgpOwogIHJldHVybiB0aGlzLT53cml0ZV93c3RyaW5nICgwLCAwKTsKfQoKaW5saW5lIEFD RV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6d3JpdGVfY2hhcl9hcnJheSAoY29uc3QgQUNF X0NEUjo6Q2hhciAqeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6 VUxvbmcgbGVuZ3RoKQp7CiAgaWYgKHRoaXMtPmNoYXJfdHJhbnNsYXRvcl8gPT0gMCkKICAgIHJl dHVybiB0aGlzLT53cml0ZV9hcnJheSAoeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QUNFX0NEUjo6T0NURVRfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NE Ujo6T0NURVRfQUxJR04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7CiAg cmV0dXJuIHRoaXMtPmNoYXJfdHJhbnNsYXRvcl8tPndyaXRlX2NoYXJfYXJyYXkgKCp0aGlzLCB4 LCBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0 ZV93Y2hhcl9hcnJheSAoY29uc3QgQUNFX0NEUjo6V0NoYXIqIHgsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpCnsKICBpZiAodGhpcy0+d2No YXJfdHJhbnNsYXRvcl8gPT0gMCkKICAgIHJldHVybiB0aGlzLT53cml0ZV9hcnJheSAoeCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6U0hPUlRfU0laRSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6U0hPUlRfQUxJR04sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxlbmd0aCk7CiAgcmV0dXJuIHRoaXMtPndjaGFyX3RyYW5zbGF0b3Jf LT53cml0ZV93Y2hhcl9hcnJheSAoKnRoaXMsIHgsIGxlbmd0aCk7Cn0KCmlubGluZSBBQ0VfQ0RS OjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRlX29jdGV0X2FycmF5IChjb25zdCBBQ0VfQ0RS OjpPY3RldCogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVM b25nIGxlbmd0aCkKewogIHJldHVybiB0aGlzLT53cml0ZV9hcnJheSAoeCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9DVEVUX1NJWkUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBQ0VfQ0RSOjpPQ1RFVF9BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxlbmd0aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRl X3Nob3J0X2FycmF5IChjb25zdCBBQ0VfQ0RSOjpTaG9ydCAqeCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCkKewogIHJldHVybiB0aGlzLT53 cml0ZV9hcnJheSAoeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlNIT1JU X1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpTSE9SVF9BTElHTiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpC b29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRlX3VzaG9ydF9hcnJheSAoY29uc3QgQUNFX0NEUjo6 VVNob3J0ICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVM b25nIGxlbmd0aCkKewogIHJldHVybiB0aGlzLT53cml0ZV9hcnJheSAoeCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9DRFI6OlNIT1JUX1NJWkUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBQ0VfQ0RSOjpTSE9SVF9BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxlbmd0aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRl X2xvbmdfYXJyYXkgKGNvbnN0IEFDRV9DRFI6OkxvbmcgKngsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCkKewogIHJldHVybiB0aGlzLT53cml0 ZV9hcnJheSAoeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdfU0la RSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdfQUxJR04sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVh bgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV91bG9uZ19hcnJheSAoY29uc3QgQUNFX0NEUjo6VUxvbmcg KngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5n dGgpCnsKICByZXR1cm4gdGhpcy0+d3JpdGVfYXJyYXkgKHgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBQ0VfQ0RSOjpMT05HX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Q0VfQ0RSOjpMT05HX0FMSUdOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsK fQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6d3JpdGVfbG9uZ2xvbmdf YXJyYXkgKGNvbnN0IEFDRV9DRFI6OkxvbmdMb25nICp4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CiAgcmV0dXJuIHRoaXMtPndy aXRlX2FycmF5ICh4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TE9OR0xP TkdfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdMT05HX0FM SUdOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKfQoKaW5saW5lIEFDRV9D RFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6d3JpdGVfdWxvbmdsb25nX2FycmF5IChjb25zdCBB Q0VfQ0RSOjpVTG9uZ0xvbmcgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CiAgcmV0dXJuIHRoaXMtPndyaXRlX2FycmF5ICh4 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TE9OR0xPTkdfU0laRSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdMT05HX0FMSUdOLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4K QUNFX091dHB1dENEUjo6d3JpdGVfZmxvYXRfYXJyYXkgKGNvbnN0IEFDRV9DRFI6OkZsb2F0ICp4 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3Ro KQp7CiAgcmV0dXJuIHRoaXMtPndyaXRlX2FycmF5ICh4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgQUNFX0NEUjo6TE9OR19TSVpFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNF X0NEUjo6TE9OR19BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7Cn0K CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV9kb3VibGVfYXJy YXkgKGNvbnN0IEFDRV9DRFI6OkRvdWJsZSAqeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpCnsKICByZXR1cm4gdGhpcy0+d3JpdGVfYXJy YXkgKHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HTE9OR19TSVpF LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TE9OR0xPTkdfQUxJR04sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9v bGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV9sb25nZG91YmxlX2FycmF5IChjb25zdCBBQ0VfQ0RS OjpMb25nRG91YmxlKiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Q0VfQ0RSOjpVTG9uZyBsZW5ndGgpCnsKICByZXR1cm4gdGhpcy0+d3JpdGVfYXJyYXkgKHgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HRE9VQkxFX1NJWkUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HRE9VQkxFX0FMSUdOLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKfQoKaW5saW5lIGludApBQ0VfT3V0cHV0Q0RS Ojpnb29kX2JpdCAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5nb29kX2JpdF87Cn0KCmlu bGluZSBpbnQKQUNFX091dHB1dENEUjo6YWRqdXN0IChzaXplX3Qgc2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciomIGJ1 ZikKewogIGlmICghdGhpcy0+Y3VycmVudF9pc193cml0YWJsZV8pCiAgICByZXR1cm4gdGhpcy0+ Z3Jvd19hbmRfYWRqdXN0IChzaXplLCBhbGlnbiwgYnVmKTsKCiAgc2l6ZV90IG9mZnNldCA9CiAg ICAoKHRoaXMtPmN1cnJlbnRfYWxpZ25tZW50XyArICgocHRyX2FyaXRoX3QpKChhbGlnbiktMSkp KSAmICh+KChwdHJfYXJpdGhfdCkoKGFsaWduKS0xKSkpKQogICAgLSB0aGlzLT5jdXJyZW50X2Fs aWdubWVudF87CgogIGJ1ZiA9IHRoaXMtPmN1cnJlbnRfLT53cl9wdHIgKCkgKyBvZmZzZXQ7CiAg Y2hhciAqZW5kID0gYnVmICsgc2l6ZTsKCiAgaWYgKGVuZCA8PSB0aGlzLT5jdXJyZW50Xy0+ZW5k ICgpKQogICAgewogICAgICB0aGlzLT5jdXJyZW50X2FsaWdubWVudF8gKz0gb2Zmc2V0ICsgc2l6 ZTsKICAgICAgdGhpcy0+Y3VycmVudF8tPndyX3B0ciAoZW5kKTsKICAgICAgcmV0dXJuIDA7CiAg ICB9CgogIHJldHVybiB0aGlzLT5ncm93X2FuZF9hZGp1c3QgKHNpemUsIGFsaWduLCBidWYpOwp9 CgppbmxpbmUgaW50CkFDRV9PdXRwdXRDRFI6OmFkanVzdCAoc2l6ZV90IHNpemUsIGNoYXIqJiBi dWYpCnsKICByZXR1cm4gdGhpcy0+YWRqdXN0IChzaXplLCBzaXplLCBidWYpOwp9CgppbmxpbmUg aW50CkFDRV9PdXRwdXRDRFI6OnNldF92ZXJzaW9uIChBQ0VfQ0RSOjpPY3RldCBtYWpvciwgQUNF X0NEUjo6T2N0ZXQgbWlub3IpCnsKICB0aGlzLT5tYWpvcl92ZXJzaW9uXyA9IG1ham9yOwogIHRo aXMtPm1pbm9yX3ZlcnNpb25fID0gbWlub3I7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBjb25zdCBB Q0VfTWVzc2FnZV9CbG9jayoKQUNFX091dHB1dENEUjo6YmVnaW4gKHZvaWQpIGNvbnN0CnsKICBy ZXR1cm4gJnRoaXMtPnN0YXJ0XzsKfQoKaW5saW5lIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrKgpB Q0VfT3V0cHV0Q0RSOjplbmQgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y3VycmVudF8t PmNvbnQgKCk7Cn0KCmlubGluZSBjb25zdCBBQ0VfTWVzc2FnZV9CbG9jayoKQUNFX091dHB1dENE Ujo6Y3VycmVudCAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5jdXJyZW50XzsKfQoKaW5s aW5lIHNpemVfdApBQ0VfT3V0cHV0Q0RSOjp0b3RhbF9sZW5ndGggKHZvaWQpIGNvbnN0CnsKICBy ZXR1cm4gQUNFX0NEUjo6dG90YWxfbGVuZ3RoICh0aGlzLT5iZWdpbiAoKSwgdGhpcy0+ZW5kICgp KTsKfQoKaW5saW5lIGNvbnN0IGNoYXIqCkFDRV9PdXRwdXRDRFI6OmJ1ZmZlciAodm9pZCkgY29u c3QKewogIHJldHVybiB0aGlzLT5zdGFydF8ucmRfcHRyICgpOwp9CgppbmxpbmUgc2l6ZV90CkFD RV9PdXRwdXRDRFI6Omxlbmd0aCAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5zdGFydF8u bGVuZ3RoICgpOwp9CgppbmxpbmUgaW50CkFDRV9PdXRwdXRDRFI6OmRvX2J5dGVfc3dhcCAodm9p ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5kb19ieXRlX3N3YXBfOwp9CgppbmxpbmUgdm9pZApB Q0VfT3V0cHV0Q0RSOjpyZXNldF9ieXRlX29yZGVyIChpbnQgYnl0ZV9vcmRlcikKewogIHRoaXMt PmRvX2J5dGVfc3dhcF8gPSAoYnl0ZV9vcmRlciAhPSAxKTsKfQoKaW5saW5lIHNpemVfdApBQ0Vf T3V0cHV0Q0RSOjpjdXJyZW50X2FsaWdubWVudCAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlz LT5jdXJyZW50X2FsaWdubWVudF87Cn0KCmlubGluZSBpbnQKQUNFX091dHB1dENEUjo6YWxpZ25f d3JpdGVfcHRyIChzaXplX3QgYWxpZ25tZW50KQp7CiAgY2hhciAqZHVtbXk7CiAgcmV0dXJuIHRo aXMtPmFkanVzdCAoMCwgYWxpZ25tZW50LCBkdW1teSk7Cn0KCmlubGluZSBBQ0VfQ2hhcl9Db2Rl c2V0X1RyYW5zbGF0b3IgKgpBQ0VfT3V0cHV0Q0RSOjpjaGFyX3RyYW5zbGF0b3IgKHZvaWQpIGNv bnN0CnsKICByZXR1cm4gdGhpcy0+Y2hhcl90cmFuc2xhdG9yXzsKfQoKaW5saW5lIEFDRV9XQ2hh cl9Db2Rlc2V0X1RyYW5zbGF0b3IgKgpBQ0VfT3V0cHV0Q0RSOjp3Y2hhcl90cmFuc2xhdG9yICh2 b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPndjaGFyX3RyYW5zbGF0b3JfOwp9CgoKCmlubGlu ZQpBQ0VfSW5wdXRDRFI6On5BQ0VfSW5wdXRDRFIgKHZvaWQpCnsKfQoKaW5saW5lIEFDRV9DRFI6 OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFkX29jdGV0IChBQ0VfQ0RSOjpPY3RldCYgeCkKewog IHJldHVybiB0aGlzLT5yZWFkXzEgKCZ4KTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNF X0lucHV0Q0RSOjpyZWFkX2Jvb2xlYW4gKEFDRV9DRFI6OkJvb2xlYW4mIHgpCnsKICBBQ0VfQ0RS OjpPY3RldCB0bXA7CiAgdGhpcy0+cmVhZF9vY3RldCAodG1wKTsKICB4ID0gdG1wID8gMSA6IDA7 CiAgcmV0dXJuIChBQ0VfQ0RSOjpCb29sZWFuKSB0aGlzLT5nb29kX2JpdF87Cn0KCmlubGluZSBB Q0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9jaGFyIChBQ0VfQ0RSOjpDaGFyICZ4 KQp7CiAgaWYgKHRoaXMtPmNoYXJfdHJhbnNsYXRvcl8gPT0gMCkKICAgIHJldHVybiB0aGlzLT5y ZWFkXzEgKHJlaW50ZXJwcmV0X2Nhc3Q8QUNFX0NEUjo6T2N0ZXQqPiAoJngpKTsKICByZXR1cm4g dGhpcy0+Y2hhcl90cmFuc2xhdG9yXy0+cmVhZF9jaGFyICgqdGhpcywgeCk7Cn0KCgppbmxpbmUg QUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnJlYWRfc2hvcnQgKEFDRV9DRFI6OlNob3J0 ICZ4KQp7CiAgcmV0dXJuIHRoaXMtPnJlYWRfMiAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpV U2hvcnQqPiAoJngpKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpy ZWFkX3VzaG9ydCAoQUNFX0NEUjo6VVNob3J0ICZ4KQp7CiAgcmV0dXJuIHRoaXMtPnJlYWRfMiAo cmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpVU2hvcnQqPiAoJngpKTsKfQoKCmlubGluZSBBQ0Vf Q0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9sb25nIChBQ0VfQ0RSOjpMb25nICZ4KQp7 CiAgcmV0dXJuIHRoaXMtPnJlYWRfNCAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpVTG9uZyo+ ICgmeCkpOwp9CgoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFkX3Vs b25nIChBQ0VfQ0RSOjpVTG9uZyAmeCkKewogIHJldHVybiB0aGlzLT5yZWFkXzQgKHJlaW50ZXJw cmV0X2Nhc3Q8QUNFX0NEUjo6VUxvbmcqPiAoJngpKTsKfQoKCmlubGluZSBBQ0VfQ0RSOjpCb29s ZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9sb25nbG9uZyAoQUNFX0NEUjo6TG9uZ0xvbmcgJngpCnsK ICByZXR1cm4gdGhpcy0+cmVhZF84IChyZWludGVycHJldF9jYXN0PEFDRV9DRFI6OlVMb25nTG9u Zyo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnJlYWRf dWxvbmdsb25nIChBQ0VfQ0RSOjpVTG9uZ0xvbmcgJngpCnsKICByZXR1cm4gdGhpcy0+cmVhZF84 IChyZWludGVycHJldF9jYXN0PEFDRV9DRFI6OlVMb25nTG9uZyo+ICgmeCkpOwp9CgppbmxpbmUg QUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnJlYWRfZmxvYXQgKEFDRV9DRFI6OkZsb2F0 ICZ4KQp7CiAgcmV0dXJuIHRoaXMtPnJlYWRfNCAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpV TG9uZyo+ICgmeCkpOwp9CgoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpy ZWFkX2RvdWJsZSAoQUNFX0NEUjo6RG91YmxlICZ4KQp7CiAgcmV0dXJuIHRoaXMtPnJlYWRfOCAo cmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpVTG9uZ0xvbmcqPiAoJngpKTsKfQoKaW5saW5lIEFD RV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFkX2xvbmdkb3VibGUgKEFDRV9DRFI6Okxv bmdEb3VibGUgJngpCnsKICByZXR1cm4gdGhpcy0+cmVhZF8xNiAocmVpbnRlcnByZXRfY2FzdDxB Q0VfQ0RSOjpMb25nRG91YmxlKj4gKCZ4KSk7Cn0KCmlubGluZSBzaXplX3QKQUNFX0lucHV0Q0RS OjpsZW5ndGggKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+c3RhcnRfLmxlbmd0aCAoKTsK fQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFkX2NoYXJfYXJyYXkg KEFDRV9DRFI6OkNoYXIqIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RS OjpVTG9uZyBsZW5ndGgpCnsKCgogIGlmIChsZW5ndGggPiB0aGlzLT5sZW5ndGgoKSkKICAgIHJl dHVybiAwOwoKICBpZiAodGhpcy0+Y2hhcl90cmFuc2xhdG9yXyA9PSAwKQogICAgcmV0dXJuIHRo aXMtPnJlYWRfYXJyYXkgKHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6 T0NURVRfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPQ1RFVF9B TElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOwogIHJldHVybiB0aGlz LT5jaGFyX3RyYW5zbGF0b3JfLT5yZWFkX2NoYXJfYXJyYXkgKCp0aGlzLCB4LCBsZW5ndGgpOwp9 CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnJlYWRfd2NoYXJfYXJyYXkg KEFDRV9DRFI6OldDaGFyKiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9D RFI6OlVMb25nIGxlbmd0aCkKewoKCiAgaWYgKGxlbmd0aCA+IHRoaXMtPmxlbmd0aCgpKQogICAg cmV0dXJuIDA7CgogIGlmICh0aGlzLT53Y2hhcl90cmFuc2xhdG9yXyA9PSAwKQogICAgcmV0dXJu IHRoaXMtPnJlYWRfYXJyYXkgKHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NE Ujo6U0hPUlRfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpTSE9S VF9BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOwogIHJldHVybiB0 aGlzLT53Y2hhcl90cmFuc2xhdG9yXy0+cmVhZF93Y2hhcl9hcnJheSAoKnRoaXMsIHgsIGxlbmd0 aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9vY3RldF9h cnJheSAoQUNFX0NEUjo6T2N0ZXQqIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CgoKICBpZiAobGVuZ3RoID4gdGhpcy0+bGVuZ3RoKCkp CiAgICByZXR1cm4gMDsKCiAgcmV0dXJuIHRoaXMtPnJlYWRfYXJyYXkgKHgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9DVEVUX1NJWkUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFDRV9DRFI6Ok9DVEVUX0FMSUdOLAogICAgICAgICAgICAgICAgICAgICAgICAgICBs ZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnJlYWRfc2hv cnRfYXJyYXkgKEFDRV9DRFI6OlNob3J0ICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCkKewoKCiAgaWYgKGxlbmd0aCA+IHRoaXMtPmxlbmd0 aCgpKQogICAgcmV0dXJuIDA7CgogIHJldHVybiB0aGlzLT5yZWFkX2FycmF5ICh4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpTSE9SVF9TSVpFLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBBQ0VfQ0RSOjpTSE9SVF9BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGVuZ3RoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFk X3VzaG9ydF9hcnJheSAoQUNFX0NEUjo6VVNob3J0ICp4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpCnsKCgogIGlmIChsZW5ndGggPiB0aGlz LT5sZW5ndGgoKSkKICAgIHJldHVybiAwOwoKICByZXR1cm4gdGhpcy0+cmVhZF9hcnJheSAoeCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6U0hPUlRfU0laRSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6U0hPUlRfQUxJR04sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxlbmd0aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENE Ujo6cmVhZF9sb25nX2FycmF5IChBQ0VfQ0RSOjpMb25nICp4LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CgoKICBpZiAobGVuZ3RoID4gdGhp cy0+bGVuZ3RoKCkpCiAgICByZXR1cm4gMDsKCiAgcmV0dXJuIHRoaXMtPnJlYWRfYXJyYXkgKHgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdfU0laRSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TE9OR19BTElHTiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGVuZ3RoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RS OjpyZWFkX3Vsb25nX2FycmF5IChBQ0VfQ0RSOjpVTG9uZyAqeCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpCnsKCgogIGlmIChsZW5ndGggPiB0 aGlzLT5sZW5ndGgoKSkKICAgIHJldHVybiAwOwoKICByZXR1cm4gdGhpcy0+cmVhZF9hcnJheSAo eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TE9OR19TSVpFLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HX0FMSUdOLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRD RFI6OnJlYWRfbG9uZ2xvbmdfYXJyYXkgKEFDRV9DRFI6OkxvbmdMb25nICp4LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCkKewoKCiAgaWYg KGxlbmd0aCA+IHRoaXMtPmxlbmd0aCgpKQogICAgcmV0dXJuIDA7CgogIHJldHVybiB0aGlzLT5y ZWFkX2FycmF5ICh4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HTE9O R19TSVpFLAogICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HTE9OR19BTElH TiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKfQoKaW5saW5lIEFDRV9DRFI6 OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFkX3Vsb25nbG9uZ19hcnJheSAoQUNFX0NEUjo6VUxv bmdMb25nICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpV TG9uZyBsZW5ndGgpCnsKCgogIGlmIChsZW5ndGggPiB0aGlzLT5sZW5ndGgoKSkKICAgIHJldHVy biAwOwoKICByZXR1cm4gdGhpcy0+cmVhZF9hcnJheSAoeCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgQUNFX0NEUjo6TE9OR0xPTkdfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg QUNFX0NEUjo6TE9OR0xPTkdfQUxJR04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0 aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9mbG9hdF9h cnJheSAoQUNFX0NEUjo6RmxvYXQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CgoKICBpZiAobGVuZ3RoID4gdGhpcy0+bGVuZ3RoKCkp CiAgICByZXR1cm4gMDsKCiAgcmV0dXJuIHRoaXMtPnJlYWRfYXJyYXkgKHgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdfU0laRSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgQUNFX0NEUjo6TE9OR19BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVu Z3RoKTsKfQoKCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9kb3Vi bGVfYXJyYXkgKEFDRV9DRFI6OkRvdWJsZSAqeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CgoKICBpZiAobGVuZ3RoID4gdGhpcy0+bGVu Z3RoKCkpCiAgICByZXR1cm4gMDsKCiAgcmV0dXJuIHRoaXMtPnJlYWRfYXJyYXkgKHgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdMT05HX1NJWkUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdMT05HX0FMSUdOLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRD RFI6OnJlYWRfbG9uZ2RvdWJsZV9hcnJheSAoQUNFX0NEUjo6TG9uZ0RvdWJsZSogeCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCkKewoK CiAgaWYgKGxlbmd0aCA+IHRoaXMtPmxlbmd0aCgpKQogICAgcmV0dXJuIDA7CgogIHJldHVybiB0 aGlzLT5yZWFkX2FycmF5ICh4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpM T05HRE9VQkxFX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdE T1VCTEVfQUxJR04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7Cn0KCmlubGlu ZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6c2tpcF9jaGFyICh2b2lkKQp7CiAgQUNF X0NEUjo6Q2hhciB4OwogIHJldHVybiB0aGlzLT5yZWFkXzEgKHJlaW50ZXJwcmV0X2Nhc3Q8QUNF X0NEUjo6T2N0ZXQqPiAoJngpKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0 Q0RSOjpza2lwX29jdGV0ICh2b2lkKQp7CiAgQUNFX0NEUjo6T2N0ZXQgeDsKICByZXR1cm4gdGhp cy0+cmVhZF8xICgmeCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6 c2tpcF9ib29sZWFuICh2b2lkKQp7CiAgQUNFX0NEUjo6T2N0ZXQgdG1wOwogIHRoaXMtPnJlYWRf b2N0ZXQgKHRtcCk7CiAgcmV0dXJuIHRoaXMtPmdvb2RfYml0XzsKfQoKaW5saW5lIEFDRV9DRFI6 OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpza2lwX3Nob3J0ICh2b2lkKQp7CiAgQUNFX0NEUjo6U2hv cnQgeDsKICByZXR1cm4gdGhpcy0+cmVhZF8yIChyZWludGVycHJldF9jYXN0PEFDRV9DRFI6OlVT aG9ydCo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnNr aXBfdXNob3J0ICh2b2lkKQp7CiAgQUNFX0NEUjo6VVNob3J0IHg7CiAgcmV0dXJuIHRoaXMtPnJl YWRfMiAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpVU2hvcnQqPiAoJngpKTsKfQoKaW5saW5l IEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpza2lwX2xvbmcgKHZvaWQpCnsKICBBQ0Vf Q0RSOjpMb25nIHg7CiAgcmV0dXJuIHRoaXMtPnJlYWRfNCAocmVpbnRlcnByZXRfY2FzdDxBQ0Vf Q0RSOjpVTG9uZyo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRD RFI6OnNraXBfdWxvbmcgKHZvaWQpCnsKICBBQ0VfQ0RSOjpVTG9uZyB4OwogIHJldHVybiB0aGlz LT5yZWFkXzQgKHJlaW50ZXJwcmV0X2Nhc3Q8QUNFX0NEUjo6VUxvbmcqPiAoJngpKTsKfQoKaW5s aW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpza2lwX2xvbmdsb25nICh2b2lkKQp7 CiAgQUNFX0NEUjo6TG9uZ0xvbmcgeDsKICByZXR1cm4gdGhpcy0+cmVhZF84IChyZWludGVycHJl dF9jYXN0PEFDRV9DRFI6OlVMb25nTG9uZyo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9v bGVhbgpBQ0VfSW5wdXRDRFI6OnNraXBfdWxvbmdsb25nICh2b2lkKQp7CiAgQUNFX0NEUjo6VUxv bmdMb25nIHg7CiAgcmV0dXJuIHRoaXMtPnJlYWRfOCAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RS OjpVTG9uZ0xvbmcqPiAoJngpKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0 Q0RSOjpza2lwX2Zsb2F0ICh2b2lkKQp7CiAgZmxvYXQgeDsKICByZXR1cm4gdGhpcy0+cmVhZF80 IChyZWludGVycHJldF9jYXN0PEFDRV9DRFI6OlVMb25nKj4gKCZ4KSk7Cn0KCmlubGluZSBBQ0Vf Q0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6c2tpcF9kb3VibGUgKHZvaWQpCnsKICBkb3VibGUg eDsKICByZXR1cm4gdGhpcy0+cmVhZF84IChyZWludGVycHJldF9jYXN0PEFDRV9DRFI6OlVMb25n TG9uZyo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnNr aXBfbG9uZ2RvdWJsZSAodm9pZCkKewogIEFDRV9DRFI6OkxvbmdEb3VibGUgeDsKICByZXR1cm4g dGhpcy0+cmVhZF8xNiAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpMb25nRG91YmxlKj4gKCZ4 KSk7Cn0KCmlubGluZSBjaGFyKgpBQ0VfSW5wdXRDRFI6OmVuZCAodm9pZCkKewogIHJldHVybiB0 aGlzLT5zdGFydF8uZW5kICgpOwp9CgppbmxpbmUgdm9pZApBQ0VfSW5wdXRDRFI6OnJkX3B0ciAo c2l6ZV90IG9mZnNldCkKewogIHRoaXMtPnN0YXJ0Xy5yZF9wdHIgKG9mZnNldCk7Cn0KCmlubGlu ZSBjaGFyKgpBQ0VfSW5wdXRDRFI6OnJkX3B0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5zdGFy dF8ucmRfcHRyICgpOwp9CgppbmxpbmUgaW50CkFDRV9JbnB1dENEUjo6YWRqdXN0IChzaXplX3Qg c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhbGlnbiwKICAgICAgICAgICAgICAg ICAgICAgIGNoYXIqJiBidWYpCnsKICBidWYgPSAoKGNoYXIgKikgKCgoKHB0cl9hcml0aF90KSAo dGhpcy0+cmRfcHRyICgpKSkgKyAoKHB0cl9hcml0aF90KSgoKGFsaWduKSktMSkpKSAmICh+KChw dHJfYXJpdGhfdCkoKChhbGlnbikpLTEpKSkpKTsKICBjaGFyICplbmQgPSBidWYgKyBzaXplOwog IGlmIChlbmQgPD0gdGhpcy0+ZW5kICgpKQogICAgewogICAgICB0aGlzLT5zdGFydF8ucmRfcHRy IChlbmQpOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgdGhpcy0+Z29vZF9iaXRfID0gMDsKICBy ZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX0lucHV0Q0RSOjphZGp1c3QgKHNpemVfdCBzaXpl LAogICAgICAgICAgICAgICAgICAgICAgY2hhciomIGJ1ZikKewogIHJldHVybiB0aGlzLT5hZGp1 c3QgKHNpemUsIHNpemUsIGJ1Zik7Cn0KCmlubGluZSBjb25zdCBBQ0VfTWVzc2FnZV9CbG9jayoK QUNFX0lucHV0Q0RSOjpzdGFydCAodm9pZCkgY29uc3QKewogIHJldHVybiAmdGhpcy0+c3RhcnRf Owp9CgppbmxpbmUgaW50CkFDRV9JbnB1dENEUjo6Z29vZF9iaXQgKHZvaWQpIGNvbnN0CnsKICBy ZXR1cm4gdGhpcy0+Z29vZF9iaXRfOwp9CgoKCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJh dG9yPDwgKEFDRV9PdXRwdXRDRFIgJm9zLCBBQ0VfQ0RSOjpDaGFyIHgpCnsKICBvcy53cml0ZV9j aGFyICh4KTsKICByZXR1cm4gb3MuZ29vZF9iaXQgKCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29s ZWFuCm9wZXJhdG9yPDwgKEFDRV9PdXRwdXRDRFIgJm9zLCBBQ0VfQ0RSOjpTaG9ydCB4KQp7CiAg b3Mud3JpdGVfc2hvcnQgKHgpOwogIHJldHVybiBvcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFD RV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8PCAoQUNFX091dHB1dENEUiAmb3MsIEFDRV9DRFI6OlVT aG9ydCB4KQp7CiAgb3Mud3JpdGVfdXNob3J0ICh4KTsKICByZXR1cm4gb3MuZ29vZF9iaXQgKCk7 Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9yPDwgKEFDRV9PdXRwdXRDRFIgJm9z LCBBQ0VfQ0RSOjpMb25nIHgpCnsKICBvcy53cml0ZV9sb25nICh4KTsKICByZXR1cm4gb3MuZ29v ZF9iaXQgKCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9yPDwgKEFDRV9PdXRw dXRDRFIgJm9zLCBBQ0VfQ0RSOjpVTG9uZyB4KQp7CiAgb3Mud3JpdGVfdWxvbmcgKHgpOwogIHJl dHVybiBvcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8 PCAoQUNFX091dHB1dENEUiAmb3MsIEFDRV9DRFI6OkxvbmdMb25nIHgpCnsKICBvcy53cml0ZV9s b25nbG9uZyAoeCk7CiAgcmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6 Qm9vbGVhbgpvcGVyYXRvcjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNFX0NEUjo6VUxvbmdMb25n IHgpCnsKICBvcy53cml0ZV91bG9uZ2xvbmcgKHgpOwogIHJldHVybiBvcy5nb29kX2JpdCAoKTsK fQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8PCAoQUNFX091dHB1dENEUiAmb3Ms IEFDRV9DRFI6OkxvbmdEb3VibGUgeCkKewogIG9zLndyaXRlX2xvbmdkb3VibGUgKHgpOwogIHJl dHVybiBvcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8 PCAoQUNFX091dHB1dENEUiAmb3MsIEFDRV9DRFI6OkZsb2F0IHgpCnsKICBvcy53cml0ZV9mbG9h dCAoeCk7CiAgcmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVh bgpvcGVyYXRvcjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNFX0NEUjo6RG91YmxlIHgpCnsKICBv cy53cml0ZV9kb3VibGUgKHgpOwogIHJldHVybiBvcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFD RV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8PCAoQUNFX091dHB1dENEUiAmb3MsIGNvbnN0IEFDRV9D RFI6OkNoYXIgKngpCnsKICBvcy53cml0ZV9zdHJpbmcgKHgpOwogIHJldHVybiBvcy5nb29kX2Jp dCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8PCAoQUNFX091dHB1dENE UiAmb3MsIGNvbnN0IEFDRV9DRFI6OldDaGFyICp4KQp7CiAgb3Mud3JpdGVfd3N0cmluZyAoeCk7 CiAgcmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9CgoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3Bl cmF0b3I8PCAoQUNFX091dHB1dENEUiAmb3MsIEFDRV9PdXRwdXRDRFI6OmZyb21fYm9vbGVhbiB4 KQp7CiAgb3Mud3JpdGVfYm9vbGVhbiAoeC52YWxfKTsKICByZXR1cm4gb3MuZ29vZF9iaXQgKCk7 Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9yPDwgKEFDRV9PdXRwdXRDRFIgJm9z LCBBQ0VfT3V0cHV0Q0RSOjpmcm9tX2NoYXIgeCkKewogIG9zLndyaXRlX2NoYXIgKHgudmFsXyk7 CiAgcmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVy YXRvcjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNFX091dHB1dENEUjo6ZnJvbV93Y2hhciB4KQp7 CiAgb3Mud3JpdGVfd2NoYXIgKHgudmFsXyk7CiAgcmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9Cgpp bmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRvcjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNF X091dHB1dENEUjo6ZnJvbV9vY3RldCB4KQp7CiAgb3Mud3JpdGVfb2N0ZXQgKHgudmFsXyk7CiAg cmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRv cjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNFX091dHB1dENEUjo6ZnJvbV9zdHJpbmcgeCkKewog IEFDRV9DRFI6OlVMb25nIGxlbiA9IDA7CiAgaWYgKHgudmFsXyAhPSAwKQogICAgbGVuID0gQUNF X09TOjpzdHJsZW4gKHgudmFsXyk7CiAgb3Mud3JpdGVfc3RyaW5nIChsZW4sIHgudmFsXyk7CiAg cmV0dXJuIG9zLmdvb2RfYml0ICgpICYmIChsZW4gPD0geC5ib3VuZF8pOwp9CgppbmxpbmUgQUNF X0NEUjo6Qm9vbGVhbgpvcGVyYXRvcjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNFX091dHB1dENE Ujo6ZnJvbV93c3RyaW5nIHgpCnsKICBBQ0VfQ0RSOjpVTG9uZyBsZW4gPSAwOzsKICBpZiAoeC52 YWxfICE9IDApCiAgICBsZW4gPSBBQ0VfT1M6OndzbGVuICh4LnZhbF8pOwogIG9zLndyaXRlX3dz dHJpbmcgKGxlbiwgeC52YWxfKTsKICByZXR1cm4gb3MuZ29vZF9iaXQgKCkgJiYgKGxlbiA8PSB4 LmJvdW5kXyk7Cn0KCgoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+PiAoQUNFX0lu cHV0Q0RSICZpcywgQUNFX0NEUjo6Q2hhciAmeCkKewogIGlzLnJlYWRfY2hhciAoeCk7CiAgcmV0 dXJuIGlzLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRvcj4+ IChBQ0VfSW5wdXRDRFIgJmlzLCBBQ0VfQ0RSOjpTaG9ydCAmeCkKewogIGlzLnJlYWRfc2hvcnQg KHgpOwogIHJldHVybiBpcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4K b3BlcmF0b3I+PiAoQUNFX0lucHV0Q0RSICZpcywgQUNFX0NEUjo6VVNob3J0ICZ4KQp7CiAgaXMu cmVhZF91c2hvcnQgKHgpOwogIHJldHVybiBpcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9D RFI6OkJvb2xlYW4Kb3BlcmF0b3I+PihBQ0VfSW5wdXRDRFIgJmlzLCBBQ0VfQ0RSOjpMb25nICZ4 KQp7CiAgaXMucmVhZF9sb25nICh4KTsKICByZXR1cm4gaXMuZ29vZF9iaXQgKCk7Cn0KCmlubGlu ZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9yPj4gKEFDRV9JbnB1dENEUiAmaXMsIEFDRV9DRFI6 OlVMb25nICZ4KQp7CiAgaXMucmVhZF91bG9uZyAoeCk7CiAgcmV0dXJuIGlzLmdvb2RfYml0ICgp Owp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRvcj4+IChBQ0VfSW5wdXRDRFImIGlz LCBBQ0VfQ0RSOjpMb25nTG9uZyAmeCkKewogIGlzLnJlYWRfbG9uZ2xvbmcgKHgpOwogIHJldHVy biBpcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+PiAo QUNFX0lucHV0Q0RSJiBpcywgQUNFX0NEUjo6VUxvbmdMb25nICZ4KQp7CiAgaXMucmVhZF91bG9u Z2xvbmcgKHgpOwogIHJldHVybiBpcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJv b2xlYW4Kb3BlcmF0b3I+PiAoQUNFX0lucHV0Q0RSJiBpcywgQUNFX0NEUjo6TG9uZ0RvdWJsZSAm eCkKewogIGlzLnJlYWRfbG9uZ2RvdWJsZSAoeCk7CiAgcmV0dXJuIGlzLmdvb2RfYml0ICgpOwp9 CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRvcj4+IChBQ0VfSW5wdXRDRFIgJmlzLCBB Q0VfQ0RSOjpGbG9hdCAmeCkKewogIGlzLnJlYWRfZmxvYXQgKHgpOwogIHJldHVybiBpcy5nb29k X2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+PiAoQUNFX0lucHV0 Q0RSICZpcywgQUNFX0NEUjo6RG91YmxlICZ4KQp7CiAgaXMucmVhZF9kb3VibGUgKHgpOwogIHJl dHVybiBpcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+ PiAoQUNFX0lucHV0Q0RSICZpcywgQUNFX0NEUjo6Q2hhciAqJngpCnsKICBpcy5yZWFkX3N0cmlu ZyAoeCk7CiAgcmV0dXJuIGlzLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVh bgpvcGVyYXRvcj4+IChBQ0VfSW5wdXRDRFIgJmlzLCBBQ0VfQ0RSOjpXQ2hhciAqJngpCnsKICBp cy5yZWFkX3dzdHJpbmcgKHgpOwogIHJldHVybiBpcy5nb29kX2JpdCAoKTsKfQoKCmlubGluZSBB Q0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9yPj4gKEFDRV9JbnB1dENEUiAmaXMsIEFDRV9JbnB1dENE Ujo6dG9fYm9vbGVhbiB4KQp7CiAgaXMucmVhZF9ib29sZWFuICh4LnJlZl8pOwogIHJldHVybiBp cy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+PiAoQUNF X0lucHV0Q0RSICZpcywgQUNFX0lucHV0Q0RSOjp0b19jaGFyIHgpCnsKICBpcy5yZWFkX2NoYXIg KHgucmVmXyk7CiAgcmV0dXJuIGlzLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9v bGVhbgpvcGVyYXRvcj4+IChBQ0VfSW5wdXRDRFIgJmlzLCBBQ0VfSW5wdXRDRFI6OnRvX3djaGFy IHgpCnsKICBpcy5yZWFkX3djaGFyICh4LnJlZl8pOwogIHJldHVybiBpcy5nb29kX2JpdCAoKTsK fQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+PiAoQUNFX0lucHV0Q0RSICZpcywg QUNFX0lucHV0Q0RSOjp0b19vY3RldCB4KQp7CiAgaXMucmVhZF9vY3RldCAoeC5yZWZfKTsKICBy ZXR1cm4gaXMuZ29vZF9iaXQgKCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9y Pj4gKEFDRV9JbnB1dENEUiAmaXMsIEFDRV9JbnB1dENEUjo6dG9fc3RyaW5nIHgpCnsKICBpcy5y ZWFkX3N0cmluZyAoY29uc3RfY2FzdDxjaGFyIComPiAoeC52YWxfKSk7CgogIHJldHVybiAoaXMu Z29vZF9iaXQgKCkgJiYKICAgICAgICAgIChBQ0VfT1M6OnN0cmxlbiAoeC52YWxfKSA8PSB4LmJv dW5kXykpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRvcj4+IChBQ0VfSW5wdXRD RFIgJmlzLCBBQ0VfSW5wdXRDRFI6OnRvX3dzdHJpbmcgeCkKewogIGlzLnJlYWRfd3N0cmluZyAo Y29uc3RfY2FzdDxBQ0VfQ0RSOjpXQ2hhciAqJj4gKHgudmFsXykpOwoKICByZXR1cm4gKGlzLmdv b2RfYml0ICgpICYmCiAgICAgICAgICAoQUNFX09TOjp3c2xlbiAoeC52YWxfKSA8PSB4LmJvdW5k XykpOwp9CgoKCgoKCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OmFwcGVu ZF9ib29sZWFuIChBQ0VfSW5wdXRDRFIgJnN0cmVhbSkKewogIEFDRV9DRFI6OkJvb2xlYW4geDsK ICByZXR1cm4gKHN0cmVhbS5yZWFkX2Jvb2xlYW4gKHgpID8gdGhpcy0+d3JpdGVfYm9vbGVhbiAo eCkgOiAwKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6YXBwZW5k X2NoYXIgKEFDRV9JbnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6Q2hhciB4OwogIHJldHVy biAoc3RyZWFtLnJlYWRfY2hhciAoeCkgPyB0aGlzLT53cml0ZV9jaGFyICh4KSA6IDApOwp9Cgpp bmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRfd2NoYXIgKEFDRV9J bnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6V0NoYXIgeDsKICByZXR1cm4gKHN0cmVhbS5y ZWFkX3djaGFyICh4KSA/IHRoaXMtPndyaXRlX3djaGFyICh4KSA6IDApOwp9CgppbmxpbmUgQUNF X0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRfb2N0ZXQgKEFDRV9JbnB1dENEUiAm c3RyZWFtKQp7CiAgQUNFX0NEUjo6T2N0ZXQgeDsKICByZXR1cm4gKHN0cmVhbS5yZWFkX29jdGV0 ICh4KSA/IHRoaXMtPndyaXRlX29jdGV0ICh4KSA6IDApOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9v bGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRfc2hvcnQgKEFDRV9JbnB1dENEUiAmc3RyZWFtKQp7 CiAgQUNFX0NEUjo6U2hvcnQgeDsKICByZXR1cm4gKHN0cmVhbS5yZWFkX3Nob3J0ICh4KSA/IHRo aXMtPndyaXRlX3Nob3J0ICh4KSA6IDApOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0Vf T3V0cHV0Q0RSOjphcHBlbmRfdXNob3J0IChBQ0VfSW5wdXRDRFIgJnN0cmVhbSkKewogIEFDRV9D RFI6OlVTaG9ydCB4OwogIHJldHVybiAoc3RyZWFtLnJlYWRfdXNob3J0ICh4KSA/IHRoaXMtPndy aXRlX3VzaG9ydCAoeCkgOiAwKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1 dENEUjo6YXBwZW5kX2xvbmcgKEFDRV9JbnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6TG9u ZyB4OwogIHJldHVybiAoc3RyZWFtLnJlYWRfbG9uZyAoeCkgPyB0aGlzLT53cml0ZV9sb25nICh4 KSA6IDApOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRf dWxvbmcgKEFDRV9JbnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6VUxvbmcgeDsKICByZXR1 cm4gKHN0cmVhbS5yZWFkX3Vsb25nICh4KSA/IHRoaXMtPndyaXRlX3Vsb25nICh4KSA6IDApOwp9 CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRfbG9uZ2xvbmcg KEFDRV9JbnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6TG9uZ0xvbmcgeDsKICByZXR1cm4g KHN0cmVhbS5yZWFkX2xvbmdsb25nICh4KSA/IHRoaXMtPndyaXRlX2xvbmdsb25nICh4KSA6IDAp Owp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRfdWxvbmds b25nIChBQ0VfSW5wdXRDRFIgJnN0cmVhbSkKewogIEFDRV9DRFI6OlVMb25nTG9uZyB4OwogIHJl dHVybiAoc3RyZWFtLnJlYWRfdWxvbmdsb25nICh4KSA/IHRoaXMtPndyaXRlX3Vsb25nbG9uZyAo eCkgOiAwKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6YXBwZW5k X2Zsb2F0IChBQ0VfSW5wdXRDRFIgJnN0cmVhbSkKewogIEFDRV9DRFI6OkZsb2F0IHg7CiAgcmV0 dXJuIChzdHJlYW0ucmVhZF9mbG9hdCAoeCkgPyB0aGlzLT53cml0ZV9mbG9hdCAoeCkgOiAwKTsK fQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6YXBwZW5kX2RvdWJsZSAo QUNFX0lucHV0Q0RSICZzdHJlYW0pCnsKICBBQ0VfQ0RSOjpEb3VibGUgeDsKICByZXR1cm4gKHN0 cmVhbS5yZWFkX2RvdWJsZSAoeCkgPyB0aGlzLT53cml0ZV9kb3VibGUgKHgpIDogMCk7Cn0KCmlu bGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OmFwcGVuZF9sb25nZG91YmxlIChB Q0VfSW5wdXRDRFIgJnN0cmVhbSkKewogIEFDRV9DRFI6OkxvbmdEb3VibGUgeDsKICByZXR1cm4g KHN0cmVhbS5yZWFkX2xvbmdkb3VibGUgKHgpID8gdGhpcy0+d3JpdGVfbG9uZ2RvdWJsZSAoeCkg OiAwKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6YXBwZW5kX3N0 cmluZyAoQUNFX0lucHV0Q0RSICZzdHJlYW0pCnsKICBBQ0VfQ0RSOjpDaGFyICp4OwogIEFDRV9D RFI6OkJvb2xlYW4gZmxhZyA9CiAgICAoc3RyZWFtLnJlYWRfc3RyaW5nICh4KSA/IHRoaXMtPndy aXRlX3N0cmluZyAoeCkgOiAwKTsKICBkZWxldGUgW10geDsKICByZXR1cm4gZmxhZzsKfQoKaW5s aW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6YXBwZW5kX3dzdHJpbmcgKEFDRV9J bnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6V0NoYXIgKng7CiAgQUNFX0NEUjo6Qm9vbGVh biBmbGFnID0KICAgIChzdHJlYW0ucmVhZF93c3RyaW5nICh4KSA/IHRoaXMtPndyaXRlX3dzdHJp bmcgKHgpIDogMCk7CiAgZGVsZXRlIFtdIHg7CiAgcmV0dXJuIGZsYWc7Cn0KCmlubGluZSB2b2lk CkFDRV9JbnB1dENEUjo6cmVzZXRfYnl0ZV9vcmRlciAoaW50IGJ5dGVfb3JkZXIpCnsKICB0aGlz LT5kb19ieXRlX3N3YXBfID0gKGJ5dGVfb3JkZXIgIT0gMSk7Cn0KCmlubGluZSBpbnQKQUNFX0lu cHV0Q0RSOjpkb19ieXRlX3N3YXAgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+ZG9fYnl0 ZV9zd2FwXzsKfQoKaW5saW5lIGludApBQ0VfSW5wdXRDRFI6OmJ5dGVfb3JkZXIgKHZvaWQpIGNv bnN0CnsKICBpZiAodGhpcy0+ZG9fYnl0ZV9zd2FwICgpKQogICAgcmV0dXJuICExOwogIGVsc2UK ICAgIHJldHVybiAxOwp9CgppbmxpbmUgaW50CkFDRV9JbnB1dENEUjo6YWxpZ25fcmVhZF9wdHIg KHNpemVfdCBhbGlnbm1lbnQpCnsKICBjaGFyICpidWYgPSAoKGNoYXIgKikgKCgoKHB0cl9hcml0 aF90KSAodGhpcy0+cmRfcHRyICgpKSkgKyAoKHB0cl9hcml0aF90KSgoKGFsaWdubWVudCkpLTEp KSkgJiAofigocHRyX2FyaXRoX3QpKCgoYWxpZ25tZW50KSktMSkpKSkpOwoKCiAgaWYgKGJ1ZiA8 PSB0aGlzLT5lbmQgKCkpCiAgICB7CiAgICAgIHRoaXMtPnN0YXJ0Xy5yZF9wdHIgKGJ1Zik7CiAg ICAgIHJldHVybiAwOwogICAgfQoKICB0aGlzLT5nb29kX2JpdF8gPSAwOwogIHJldHVybiAtMTsK fQoKaW5saW5lIEFDRV9DaGFyX0NvZGVzZXRfVHJhbnNsYXRvciAqCkFDRV9JbnB1dENEUjo6Y2hh cl90cmFuc2xhdG9yICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmNoYXJfdHJhbnNsYXRv cl87Cn0KCmlubGluZSBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yICoKQUNFX0lucHV0Q0RS Ojp3Y2hhcl90cmFuc2xhdG9yICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPndjaGFyX3Ry YW5zbGF0b3JfOwp9CgoKCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9DaGFyX0NvZGVzZXRf VHJhbnNsYXRvcjo6cmVhZF8xIChBQ0VfSW5wdXRDRFImIGlucHV0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgKngpCnsKICByZXR1cm4gaW5wdXQu cmVhZF8xICh4KTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0NoYXJfQ29kZXNldF9U cmFuc2xhdG9yOjp3cml0ZV8xIChBQ0VfT3V0cHV0Q0RSJiBvdXRwdXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX0NEUjo6T2N0ZXQgKngpCnsKICByZXR1 cm4gb3V0cHV0LndyaXRlXzEgKHgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfQ2hh cl9Db2Rlc2V0X1RyYW5zbGF0b3I6OnJlYWRfYXJyYXkgKEFDRV9JbnB1dENEUiYgaW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogeCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWxpZ24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CiAgcmV0dXJu IGluLnJlYWRfYXJyYXkgKHgsIHNpemUsIGFsaWduLCBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NE Ujo6Qm9vbGVhbgpBQ0VfQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3I6OndyaXRlX2FycmF5IChBQ0Vf T3V0cHV0Q0RSJiBvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHZvaWQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD RV9DRFI6OlVMb25nIGxlbmd0aCkKewogIHJldHVybiBvdXQud3JpdGVfYXJyYXkoeCwgc2l6ZSwg YWxpZ24sIGxlbmd0aCk7Cn0KCmlubGluZSBpbnQKQUNFX0NoYXJfQ29kZXNldF9UcmFuc2xhdG9y OjphZGp1c3QgKEFDRV9PdXRwdXRDRFImIG91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqJmJ1ZikKewogIHJldHVybiBvdXQuYWRqdXN0KHNpemUsIGFsaWduLCBidWYpOwp9Cgppbmxp bmUgdm9pZApBQ0VfQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3I6Omdvb2RfYml0IChBQ0VfT3V0cHV0 Q0RSJiBvdXQsIGludCBiaXQpCnsKICBvdXQuZ29vZF9iaXRfID0gYml0Owp9CgoKCmlubGluZSBB Q0VfQ0RSOjpCb29sZWFuCkFDRV9XQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3I6OnJlYWRfMSAoQUNF X0lucHV0Q0RSJiBpbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Q0VfQ0RSOjpPY3RldCAqeCkKewogIHJldHVybiBpbnB1dC5yZWFkXzEgKHgpOwp9CgppbmxpbmUg QUNFX0NEUjo6Qm9vbGVhbgpBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yOjpyZWFkXzIgKEFD RV9JbnB1dENEUiYgaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QUNFX0NEUjo6VVNob3J0ICp4KQp7CiAgcmV0dXJuIGlucHV0LnJlYWRfMiAoeCk7Cn0KCmlubGlu ZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9XQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3I6OnJlYWRfNCAo QUNFX0lucHV0Q0RSJiBpbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBQ0VfQ0RSOjpVTG9uZyAqeCkKewogIHJldHVybiBpbnB1dC5yZWFkXzQgKHgpOwp9Cgppbmxp bmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yOjp3cml0ZV8x IChBQ0VfT3V0cHV0Q0RSJiBvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IEFDRV9DRFI6Ok9jdGV0ICp4KQp7CiAgcmV0dXJuIG91dHB1dC53cml0ZV8x ICh4KTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX1dDaGFyX0NvZGVzZXRfVHJhbnNs YXRvcjo6d3JpdGVfMiAoQUNFX091dHB1dENEUiYgb3V0cHV0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfQ0RSOjpVU2hvcnQgKngpCnsKICByZXR1cm4g b3V0cHV0LndyaXRlXzIgKHgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfV0NoYXJf Q29kZXNldF9UcmFuc2xhdG9yOjp3cml0ZV80IChBQ0VfT3V0cHV0Q0RSJiBvdXRwdXQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9DRFI6OlVMb25nICp4 KQp7CiAgcmV0dXJuIG91dHB1dC53cml0ZV80ICh4KTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xl YW4KQUNFX1dDaGFyX0NvZGVzZXRfVHJhbnNsYXRvcjo6cmVhZF9hcnJheSAoQUNFX0lucHV0Q0RS JiBpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogeCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhbGlnbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVu Z3RoKQp7CiAgcmV0dXJuIGluLnJlYWRfYXJyYXkgKHgsIHNpemUsIGFsaWduLCBsZW5ndGgpOwp9 CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yOjp3 cml0ZV9hcnJheSAoQUNFX091dHB1dENEUiYgb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqeCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CiAgcmV0dXJuIG91dC53 cml0ZV9hcnJheSh4LCBzaXplLCBhbGlnbiwgbGVuZ3RoKTsKfQoKaW5saW5lIGludApBQ0VfV0No YXJfQ29kZXNldF9UcmFuc2xhdG9yOjphZGp1c3QgKEFDRV9PdXRwdXRDRFImIG91dCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWxpZ24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqJmJ1ZikKewogIHJldHVybiBvdXQuYWRqdXN0KHNp emUsIGFsaWduLCBidWYpOwp9CgppbmxpbmUgdm9pZApBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xh dG9yOjpnb29kX2JpdCAoQUNFX091dHB1dENEUiYgb3V0LCBpbnQgYml0KQp7CiAgb3V0Lmdvb2Rf Yml0XyA9IGJpdDsKfQojIDEwMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9DRFJfU3RyZWFtLmgiIDIKIyAxMTI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5oIgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxMTI4ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5oIiAyCiMg NTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ0RS LmgiIDIKCmNsYXNzIFRBT19PUkJfQ29yZTsKIyA3MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DRFIuaCIKY2xhc3MgVEFPX091dHB1dENEUiA6IHB1 YmxpYyBBQ0VfT3V0cHV0Q0RSCnsKcHVibGljOgoKICBmcmllbmQgY2xhc3MgVEFPX0lucHV0Q0RS OwojIDg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L0NEUi5oIgogIFRBT19PdXRwdXRDRFIgKHNpemVfdCBzaXplID0gMCwKICAgICAgICAgICAgICAg ICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogYnVm ZmVyX2FsbG9jYXRvciA9IDAsCiAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogZGF0YV9i bG9ja19hbGxvY2F0b3IgPSAwLAogICAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0b3IqIG1lc3Nh Z2VfYmxvY2tfYWxsb2NhdG9yID0gMCwKICAgICAgICAgICAgICAgICBzaXplX3QgbWVtY3B5X3Ry YWRlb2ZmID0gMCwKICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJzaW9u ID0KICAgICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQg bWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAgICAgICAyLAogICAgICAgICAgICAgICAgIEFD RV9DaGFyX0NvZGVzZXRfVHJhbnNsYXRvciAqY2hhcl90cmFuc2xhdG9yID0gMCwKICAgICAgICAg ICAgICAgICBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yICp3Y2hhcl90cmFuc2xhdG9yID0g MCk7CgoKCiAgVEFPX091dHB1dENEUiAoY2hhciAqZGF0YSwKICAgICAgICAgICAgICAgICBzaXpl X3Qgc2l6ZSwKICAgICAgICAgICAgICAgICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAg ICAgICAgQUNFX0FsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciA9IDAsCiAgICAgICAgICAgICAg ICAgQUNFX0FsbG9jYXRvciogZGF0YV9ibG9ja19hbGxvY2F0b3IgPSAwLAogICAgICAgICAgICAg ICAgIEFDRV9BbGxvY2F0b3IqIG1lc3NhZ2VfYmxvY2tfYWxsb2NhdG9yID0gMCwKICAgICAgICAg ICAgICAgICBzaXplX3QgbWVtY3B5X3RyYWRlb2ZmID0gMCwKICAgICAgICAgICAgICAgICBBQ0Vf Q0RSOjpPY3RldCBtYWpvcl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgIDEsCiAgICAgICAg ICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAgICAg ICAyLAogICAgICAgICAgICAgICAgIEFDRV9DaGFyX0NvZGVzZXRfVHJhbnNsYXRvciAqY2hhcl90 cmFuc2xhdG9yID0gMCwKICAgICAgICAgICAgICAgICBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xh dG9yICp3Y2hhcl90cmFuc2xhdG9yID0gMCk7CgoKCiAgVEFPX091dHB1dENEUiAoQUNFX01lc3Nh Z2VfQmxvY2sgKmRhdGEsCiAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIgPSAxLAogICAg ICAgICAgICAgICAgIHNpemVfdCBtZW1jcHlfdHJhZGVvZmYgPSAwLAogICAgICAgICAgICAgICAg IEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAgMSwKICAg ICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtaW5vcl92ZXJzaW9uID0KICAgICAgICAgICAg ICAgICAgIDIsCiAgICAgICAgICAgICAgICAgQUNFX0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yICpj aGFyX3RyYW5zbGF0b3IgPSAwLAogICAgICAgICAgICAgICAgIEFDRV9XQ2hhcl9Db2Rlc2V0X1Ry YW5zbGF0b3IgKndjaGFyX3RyYW5zbGF0b3IgPSAwKTsKCgogIH5UQU9fT3V0cHV0Q0RSICh2b2lk KTsKCgoKCgoKcHJpdmF0ZToKCiAgVEFPX091dHB1dENEUiAoY29uc3QgVEFPX091dHB1dENEUiYg cmhzKTsKICBUQU9fT3V0cHV0Q0RSJiBvcGVyYXRvcj0gKGNvbnN0IFRBT19PdXRwdXRDRFImIHJo cyk7Cn07CiMgMTYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL0NEUi5oIgpjbGFzcyBUQU9fSW5wdXRDRFIgOiBwdWJsaWMgQUNFX0lucHV0Q0RSCnsK cHVibGljOgoKCgoKCiAgVEFPX0lucHV0Q0RSIChjb25zdCBjaGFyKiBidWYsCiAgICAgICAgICAg ICAgICBzaXplX3QgYnVmc2l6LAogICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIgPSAxLAog ICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWFqb3JfdmVyc2lvbiA9CiAgICAgICAgICAg ICAgICAgIDEsCiAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtaW5vcl92ZXJzaW9uID0K ICAgICAgICAgICAgICAgICAgMiwKICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSogb3JiX2Nv cmUgPSAwKTsKCgoKICBUQU9fSW5wdXRDRFIgKHNpemVfdCBidWZzaXosCiAgICAgICAgICAgICAg ICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpv cl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIEFDRV9DRFI6 Ok9jdGV0IG1pbm9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAyLAogICAgICAgICAgICAg ICAgVEFPX09SQl9Db3JlKiBvcmJfY29yZSA9IDApOwoKCiAgVEFPX0lucHV0Q0RSIChjb25zdCBB Q0VfTWVzc2FnZV9CbG9jayAqZGF0YSwKICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVyID0g MSwKICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24gPQogICAgICAg ICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lv biA9CiAgICAgICAgICAgICAgICAgIDIsCiAgICAgICAgICAgICAgICBUQU9fT1JCX0NvcmUqIG9y Yl9jb3JlID0gMCk7CgoKICBUQU9fSW5wdXRDRFIgKEFDRV9EYXRhX0Jsb2NrICpkYXRhLAogICAg ICAgICAgICAgICAgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgZmxhZyA9IDAsCiAg ICAgICAgICAgICAgICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAgICAgICBBQ0VfQ0RS OjpPY3RldCBtYWpvcl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAg ICAgIEFDRV9DRFI6Ok9jdGV0IG1pbm9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAyLAog ICAgICAgICAgICAgICAgVEFPX09SQl9Db3JlKiBvcmJfY29yZSA9IDApOwoKCiAgVEFPX0lucHV0 Q0RSIChBQ0VfRGF0YV9CbG9jayAqZGF0YSwKICAgICAgICAgICAgICAgIEFDRV9NZXNzYWdlX0Js b2NrOjpNZXNzYWdlX0ZsYWdzIGZsYWcgPSAwLAogICAgICAgICAgICAgICAgc2l6ZV90IHJlYWRf cG9pbnRlcl9wb3NpdGlvbiA9IDAsCiAgICAgICAgICAgICAgICBzaXplX3Qgd3JpdGVfcG9pbnRl cl9wb3NpdGlvbiA9IDAsCiAgICAgICAgICAgICAgICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAg ICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJzaW9uID0KICAgICAgICAgICAgICAg ICAgMSwKICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0IG1pbm9yX3ZlcnNpb24gPQogICAg ICAgICAgICAgICAgICAyLAogICAgICAgICAgICAgICAgVEFPX09SQl9Db3JlKiBvcmJfY29yZSA9 IDApOwoKCgoKCgogIFRBT19JbnB1dENEUiAoY29uc3QgVEFPX0lucHV0Q0RSJiByaHMpOwoKCgog IFRBT19JbnB1dENEUiAoY29uc3QgVEFPX0lucHV0Q0RSJiByaHMsCiAgICAgICAgICAgICAgICBz aXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgIEFDRV9DRFI6Okxvbmcgb2Zmc2V0KTsKIyAyMzkg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ0RSLmgi CiAgVEFPX0lucHV0Q0RSIChjb25zdCBUQU9fSW5wdXRDRFImIHJocywKICAgICAgICAgICAgICAg IHNpemVfdCBzaXplKTsKCgogIFRBT19JbnB1dENEUiAoY29uc3QgVEFPX091dHB1dENEUiYgcmhz LAogICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciA9IDAsCiAg ICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yKiBkYXRhX2Jsb2NrX2FsbG9jYXRvciA9IDAsCiAg ICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yKiBtZXNzYWdlX2Jsb2NrX2FsbG9jYXRvciA9IDAs CiAgICAgICAgICAgICAgICBUQU9fT1JCX0NvcmUqIG9yYl9jb3JlID0gMCk7CgoKCiAgVEFPX0lu cHV0Q0RSIChBQ0VfSW5wdXRDRFI6OlRyYW5zZmVyX0NvbnRlbnRzIHJocywKICAgICAgICAgICAg ICAgIFRBT19PUkJfQ29yZSogb3JiX2NvcmUgPSAwKTsKCgogIH5UQU9fSW5wdXRDRFIgKHZvaWQp OwoKCgoKICBUQU9fT1JCX0NvcmUgKm9yYl9jb3JlICh2b2lkKSBjb25zdDsKCnByaXZhdGU6CiAg dm9pZCBpbml0X3RyYW5zbGF0b3JzICh2b2lkKTsKCnByaXZhdGU6CgogIFRBT19PUkJfQ29yZSog b3JiX2NvcmVfOwp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9DRFIuaSIgMQoKCgppbmxpbmUKVEFPX091dHB1dENEUjo6flRBT19PdXRw dXRDRFIgKHZvaWQpCnsKfQoKaW5saW5lClRBT19JbnB1dENEUjo6VEFPX0lucHV0Q0RSIChjb25z dCBjaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmc2l6LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJzaW9uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lvbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSogb3JiX2NvcmUpCiAgOiBBQ0VfSW5wdXRDRFIg KGJ1ZiwKICAgICAgICAgICAgICAgICAgYnVmc2l6LAogICAgICAgICAgICAgICAgICBieXRlX29y ZGVyLAogICAgICAgICAgICAgICAgICBtYWpvcl92ZXJzaW9uLAogICAgICAgICAgICAgICAgICBt aW5vcl92ZXJzaW9uKSwKICAgIG9yYl9jb3JlXyAob3JiX2NvcmUpCnsKICB0aGlzLT5pbml0X3Ry YW5zbGF0b3JzICgpOwp9CgppbmxpbmUKVEFPX0lucHV0Q0RSOjpUQU9fSW5wdXRDRFIgKHNpemVf dCBidWZzaXosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZV9vcmRlciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtaW5vcl92ZXJzaW9uLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX09SQl9Db3JlKiBvcmJfY29yZSkKICA6IEFD RV9JbnB1dENEUiAoYnVmc2l6LAogICAgICAgICAgICAgICAgICBieXRlX29yZGVyLAogICAgICAg ICAgICAgICAgICBtYWpvcl92ZXJzaW9uLAogICAgICAgICAgICAgICAgICBtaW5vcl92ZXJzaW9u KSwKICAgIG9yYl9jb3JlXyAob3JiX2NvcmUpCnsKICB0aGlzLT5pbml0X3RyYW5zbGF0b3JzICgp Owp9CgppbmxpbmUKVEFPX0lucHV0Q0RSOjpUQU9fSW5wdXRDRFIgKGNvbnN0IEFDRV9NZXNzYWdl X0Jsb2NrICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJzaW9u LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lv biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSogb3JiX2NvcmUpCiAg OiBBQ0VfSW5wdXRDRFIgKGRhdGEsCiAgICAgICAgICAgICAgICAgIGJ5dGVfb3JkZXIsCiAgICAg ICAgICAgICAgICAgIG1ham9yX3ZlcnNpb24sCiAgICAgICAgICAgICAgICAgIG1pbm9yX3ZlcnNp b24pLAogICAgb3JiX2NvcmVfIChvcmJfY29yZSkKewogIHRoaXMtPmluaXRfdHJhbnNsYXRvcnMg KCk7Cn0KCmlubGluZQpUQU9fSW5wdXRDRFI6OlRBT19JbnB1dENEUiAoQUNFX0RhdGFfQmxvY2sg KmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfTWVzc2FnZV9CbG9jazo6TWVz c2FnZV9GbGFncyBmbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3Jk ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJz aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVy c2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSogb3JiX2NvcmUp CiAgOiBBQ0VfSW5wdXRDRFIgKGRhdGEsCiAgICAgICAgICAgICAgICAgIGZsYWcsCiAgICAgICAg ICAgICAgICAgIGJ5dGVfb3JkZXIsCiAgICAgICAgICAgICAgICAgIG1ham9yX3ZlcnNpb24sCiAg ICAgICAgICAgICAgICAgIG1pbm9yX3ZlcnNpb24pLAogICAgb3JiX2NvcmVfIChvcmJfY29yZSkK ewogIHRoaXMtPmluaXRfdHJhbnNsYXRvcnMgKCk7Cn0KCgppbmxpbmUKVEFPX0lucHV0Q0RSOjpU QU9fSW5wdXRDRFIgKEFDRV9EYXRhX0Jsb2NrICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgZmxhZywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCByZF9wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3Qgd3JfcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3Jk ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJz aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVy c2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSogb3JiX2NvcmUp CiAgOiBBQ0VfSW5wdXRDRFIgKGRhdGEsCiAgICAgICAgICAgICAgICAgIGZsYWcsCiAgICAgICAg ICAgICAgICAgIHJkX3BvcywKICAgICAgICAgICAgICAgICAgd3JfcG9zLAogICAgICAgICAgICAg ICAgICBieXRlX29yZGVyLAogICAgICAgICAgICAgICAgICBtYWpvcl92ZXJzaW9uLAogICAgICAg ICAgICAgICAgICBtaW5vcl92ZXJzaW9uKSwKICAgIG9yYl9jb3JlXyAob3JiX2NvcmUpCnsKICB0 aGlzLT5pbml0X3RyYW5zbGF0b3JzICgpOwp9CgoKaW5saW5lClRBT19JbnB1dENEUjo6VEFPX0lu cHV0Q0RSIChjb25zdCBUQU9fSW5wdXRDRFImIHJocywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TG9u ZyBvZmZzZXQpCiAgOiBBQ0VfSW5wdXRDRFIgKHJocywKICAgICAgICAgICAgICAgICAgc2l6ZSwK ICAgICAgICAgICAgICAgICAgb2Zmc2V0KSwKICAgIG9yYl9jb3JlXyAocmhzLm9yYl9jb3JlXykK ewogIHRoaXMtPmluaXRfdHJhbnNsYXRvcnMgKCk7Cn0KCmlubGluZQpUQU9fSW5wdXRDRFI6OlRB T19JbnB1dENEUiAoY29uc3QgVEFPX0lucHV0Q0RSJiByaHMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgc2l6ZSkKICA6IEFDRV9JbnB1dENEUiAocmhzLAogICAgICAgICAgICAg ICAgICBzaXplKSwKICAgIG9yYl9jb3JlXyAocmhzLm9yYl9jb3JlXykKewogIHRoaXMtPmluaXRf dHJhbnNsYXRvcnMgKCk7Cn0KCmlubGluZQpUQU9fSW5wdXRDRFI6OlRBT19JbnB1dENEUiAoY29u c3QgVEFPX0lucHV0Q0RSJiByaHMpCiAgOiBBQ0VfSW5wdXRDRFIgKHJocyksCiAgICBvcmJfY29y ZV8gKHJocy5vcmJfY29yZV8pCnsKICB0aGlzLT5pbml0X3RyYW5zbGF0b3JzICgpOwp9Cgppbmxp bmUKVEFPX0lucHV0Q0RSOjpUQU9fSW5wdXRDRFIgKEFDRV9JbnB1dENEUjo6VHJhbnNmZXJfQ29u dGVudHMgcmhzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX09SQl9Db3JlKiBvcmJf Y29yZSkKICA6IEFDRV9JbnB1dENEUiAocmhzKSwKICAgIG9yYl9jb3JlXyAob3JiX2NvcmUpCnsK ICB0aGlzLT5pbml0X3RyYW5zbGF0b3JzICgpOwp9CgppbmxpbmUKVEFPX0lucHV0Q0RSOjp+VEFP X0lucHV0Q0RSICh2b2lkKQp7Cn0KCmlubGluZSBUQU9fT1JCX0NvcmUqClRBT19JbnB1dENEUjo6 b3JiX2NvcmUgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+b3JiX2NvcmVfOwp9CgoKCmlu bGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZvcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6U2hvcnQgeCkKewogIHJldHVy biBzdGF0aWNfY2FzdDxBQ0VfT3V0cHV0Q0RSICY+IChvcykgPDwgeDsKfQoKaW5saW5lIENPUkJB OjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJm9zLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVU2hvcnQgeCkKewogIHJldHVybiBzdGF0aWNf Y2FzdDxBQ0VfT3V0cHV0Q0RSICY+IChvcykgPDwgeDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu IG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJm9zLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENPUkJBOjpMb25nIHgpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNFX091 dHB1dENEUiAmPiAob3MpIDw8IHg7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8 IChUQU9fT3V0cHV0Q0RSICZvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDT1JCQTo6VUxvbmcgeCkKewogIHJldHVybiBzdGF0aWNfY2FzdDxBQ0VfT3V0cHV0Q0RSICY+ IChvcykgPDwgeDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRw dXRDRFIgJm9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpM b25nTG9uZyB4KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PEFDRV9PdXRwdXRDRFIgJj4gKG9zKSA8 PCB4Owp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAm b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nTG9u ZyB4KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PEFDRV9PdXRwdXRDRFIgJj4gKG9zKSA8PCB4Owp9 CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiYgb3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmdEb3VibGUgeCkK ewogIHJldHVybiBzdGF0aWNfY2FzdDxBQ0VfT3V0cHV0Q0RSICY+IChvcykgPDwgeDsKfQoKaW5s aW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJm9zLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpGbG9hdCB4KQp7CiAgcmV0dXJu IHN0YXRpY19jYXN0PEFDRV9PdXRwdXRDRFIgJj4gKG9zKSA8PCB4Owp9CgppbmxpbmUgQ09SQkE6 OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmb3MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkRvdWJsZSB4KQp7CiAgcmV0dXJuIHN0YXRpY19j YXN0PEFDRV9PdXRwdXRDRFIgJj4gKG9zKSA8PCB4Owp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4g b3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgQ09SQkE6OkNoYXIqIHgpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8 QUNFX091dHB1dENEUiAmPiAob3MpIDw8IHg7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVy YXRvcjw8IChUQU9fT3V0cHV0Q0RSICZvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBDT1JCQTo6V0NoYXIqIHgpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNF X091dHB1dENEUiAmPiAob3MpIDw8IHg7Cn0KCgoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJh dG9yPj4gKFRBT19JbnB1dENEUiAmaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ09SQkE6OlNob3J0ICZ4KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PEFDRV9JbnB1dENE UiAmPiAoaXMpID4+IHg7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9f SW5wdXRDRFIgJmlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB OjpVU2hvcnQgJngpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNFX0lucHV0Q0RSICY+IChpcykg Pj4geDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAm aXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgJngp CnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNFX0lucHV0Q0RSJj4gKGlzKSA+PiB4Owp9Cgppbmxp bmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZpcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgJngpCnsKICByZXR1cm4g c3RhdGljX2Nhc3Q8QUNFX0lucHV0Q0RSICY+IChpcykgPj4geDsKfQoKaW5saW5lIENPUkJBOjpC b29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmaXMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmdMb25nICZ4KQp7CiAgcmV0dXJuIHN0YXRpY19j YXN0PEFDRV9JbnB1dENEUiAmPiAoaXMpID4+IHg7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBv cGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJmlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENPUkJBOjpVTG9uZ0xvbmcgJngpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNF X0lucHV0Q0RSICY+IChpcykgPj4geDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y Pj4gKFRBT19JbnB1dENEUiAmaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQ09SQkE6OkxvbmdEb3VibGUgJngpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNFX0lucHV0 Q0RSICY+IChpcykgPj4geDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRB T19JbnB1dENEUiAmaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S QkE6OkZsb2F0ICZ4KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PEFDRV9JbnB1dENEUiAmPiAoaXMp ID4+IHg7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIg JmlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpEb3VibGUg JngpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNFX0lucHV0Q0RSICY+IChpcykgPj4geDsKfQoK aW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmaXMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkNoYXIqICZ4KQp7CiAgcmV0 dXJuIHN0YXRpY19jYXN0PEFDRV9JbnB1dENEUiAmPiAoaXMpID4+IHg7Cn0KCmlubGluZSBDT1JC QTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJmlzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpXQ2hhciogJngpCnsKICByZXR1cm4gc3RhdGlj X2Nhc3Q8QUNFX0lucHV0Q0RSICY+IChpcykgPj4geDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu Cm9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IENPUkJBOjpQYXJhbWV0ZXJN b2RlICZfdGFvX2VudW12YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gX3Rhb19lbnVt dmFsOwogIHJldHVybiBzdHJtIDw8IF90YW9fdGVtcDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu Cm9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwgQ09SQkE6OlBhcmFtZXRlck1vZGUgJl90 YW9fZW51bXZhbCkKewogIENPUkJBOjpVTG9uZyBfdGFvX3RlbXAgPSAwOwogIENPUkJBOjpCb29s ZWFuIF90YW9fcmVzdWx0ID0gc3RybSA+PiBfdGFvX3RlbXA7CgogIGlmIChfdGFvX3Jlc3VsdCA9 PSAxKQogICAgewogICAgICBfdGFvX2VudW12YWwgPSBzdGF0aWNfY2FzdDxDT1JCQTo6UGFyYW1l dGVyTW9kZT4gKF90YW9fdGVtcCk7CiAgICB9CgogIHJldHVybiBfdGFvX3Jlc3VsdDsKfQojIDI3 MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DRFIu aCIgMgojIDMyOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9DRFIuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvcG9zdC5oIiAxCiMgMzMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL0NEUi5oIiAyCiMgMjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5oIiAxCiMgMTcgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQW55LmgiCiMgMSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMg MTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQW55 LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9DRFIuaCIgMQojIDIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL0FueS5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Vudmlyb25tZW50LmgiIDEKIyAyMyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FbnZpcm9ubWVudC5oIgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIg MQojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L0Vudmlyb25tZW50LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRW52aXJvbm1lbnQuaCIgMgoKCgoKCmNsYXNz IFRBT19PUkJfQ29yZTsKIyA1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9FbnZpcm9ubWVudC5oIgpjbGFzcyBDT1JCQV9FbnZpcm9ubWVudAp7CnB1 YmxpYzoKCgogIENPUkJBX0Vudmlyb25tZW50ICh2b2lkKTsKCgogIENPUkJBX0Vudmlyb25tZW50 IChjb25zdCBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSk7CgoKICBDT1JCQV9FbnZpcm9ubWVudCAmb3BlcmF0b3I9KGNvbnN0IENPUkJBX0Vudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCgogIH5DT1JCQV9FbnZpcm9u bWVudCAodm9pZCk7CgoKICBzdGF0aWMgQ09SQkFfRW52aXJvbm1lbnQgKiBfZHVwbGljYXRlIChD T1JCQV9FbnZpcm9ubWVudCAqKTsKICBzdGF0aWMgQ09SQkFfRW52aXJvbm1lbnQgKiBfbmlsICh2 b2lkKTsKCgoKICBDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbiAodm9pZCkgY29uc3Q7CgoKICB2 b2lkIGV4Y2VwdGlvbiAoQ09SQkFfRXhjZXB0aW9uICpleCk7CgoKCiAgaW50IGV4Y2VwdGlvbl90 eXBlICh2b2lkKSBjb25zdDsKCgogIGNvbnN0IGNoYXIgKmV4Y2VwdGlvbl9pZCAodm9pZCkgY29u c3Q7CgoKICB2b2lkIGNsZWFyICh2b2lkKTsKCgoKICB2b2lkIHByaW50X2V4Y2VwdGlvbiAoY29u c3QgY2hhciAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqZj1zdGRvdXQpIGNv bnN0OwoKCiAgc3RhdGljIENPUkJBX0Vudmlyb25tZW50ICZkZWZhdWx0X2Vudmlyb25tZW50ICh2 b2lkKTsKCgogIHR5cGVkZWYgQ09SQkFfRW52aXJvbm1lbnRfcHRyIF9wdHJfdHlwZTsKICB0eXBl ZGVmIENPUkJBX0Vudmlyb25tZW50X3ZhciBfdmFyX3R5cGU7CgoKCnByaXZhdGU6CgoKCiAgZnJp ZW5kIGNsYXNzIFRBT19PUkJfQ29yZTsKICBDT1JCQV9FbnZpcm9ubWVudCAoVEFPX09SQl9Db3Jl ICpvcmJfY29yZSk7CgoKICBDT1JCQV9FeGNlcHRpb24gKmV4Y2VwdGlvbl87CgoKICBDT1JCQV9F bnZpcm9ubWVudCAqcHJldmlvdXNfOwp9OwojIDEzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FbnZpcm9ubWVudC5oIgpjbGFzcyBDT1JCQV9FbnZp cm9ubWVudF92YXIKewpwdWJsaWM6CgoKCgoKICBDT1JCQV9FbnZpcm9ubWVudF92YXIgKHZvaWQp OwogIENPUkJBX0Vudmlyb25tZW50X3ZhciAoQ09SQkFfRW52aXJvbm1lbnRfcHRyKTsKICBDT1JC QV9FbnZpcm9ubWVudF92YXIgKGNvbnN0IENPUkJBX0Vudmlyb25tZW50X3ZhciAmKTsKICB+Q09S QkFfRW52aXJvbm1lbnRfdmFyICh2b2lkKTsKCiAgQ09SQkFfRW52aXJvbm1lbnRfdmFyICZvcGVy YXRvcj0gKENPUkJBX0Vudmlyb25tZW50X3B0cik7CiAgQ09SQkFfRW52aXJvbm1lbnRfdmFyICZv cGVyYXRvcj0gKGNvbnN0IENPUkJBX0Vudmlyb25tZW50X3ZhciAmKTsKICBDT1JCQV9FbnZpcm9u bWVudF9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgoKICBvcGVyYXRvciBjb25zdCBDT1JC QV9FbnZpcm9ubWVudF9wdHIgJigpIGNvbnN0OwogIG9wZXJhdG9yIENPUkJBX0Vudmlyb25tZW50 X3B0ciAmKCk7CiAgQ09SQkFfRW52aXJvbm1lbnRfcHRyIGluICh2b2lkKSBjb25zdDsKICBDT1JC QV9FbnZpcm9ubWVudF9wdHIgJmlub3V0ICh2b2lkKTsKICBDT1JCQV9FbnZpcm9ubWVudF9wdHIg Jm91dCAodm9pZCk7CiAgQ09SQkFfRW52aXJvbm1lbnRfcHRyIF9yZXRuICh2b2lkKTsKICBDT1JC QV9FbnZpcm9ubWVudF9wdHIgcHRyICh2b2lkKSBjb25zdDsKCnByaXZhdGU6CiAgQ09SQkFfRW52 aXJvbm1lbnRfcHRyIHB0cl87Cn07CiMgMTY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL0Vudmlyb25tZW50LmgiCmNsYXNzIENPUkJBX0Vudmlyb25t ZW50X291dAp7CnB1YmxpYzoKICBDT1JCQV9FbnZpcm9ubWVudF9vdXQgKENPUkJBX0Vudmlyb25t ZW50X3B0ciAmKTsKICBDT1JCQV9FbnZpcm9ubWVudF9vdXQgKENPUkJBX0Vudmlyb25tZW50X3Zh ciAmKTsKICBDT1JCQV9FbnZpcm9ubWVudF9vdXQgKGNvbnN0IENPUkJBX0Vudmlyb25tZW50X291 dCAmKTsKICBDT1JCQV9FbnZpcm9ubWVudF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfRW52 aXJvbm1lbnRfb3V0ICYpOwogIENPUkJBX0Vudmlyb25tZW50X291dCAmb3BlcmF0b3I9IChDT1JC QV9FbnZpcm9ubWVudF9wdHIpOwogIG9wZXJhdG9yIENPUkJBX0Vudmlyb25tZW50X3B0ciAmKCk7 CiAgQ09SQkFfRW52aXJvbm1lbnRfcHRyICZwdHIgKHZvaWQpOwogIENPUkJBX0Vudmlyb25tZW50 X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAgQ09SQkFfRW52aXJvbm1lbnRfcHRy ICZwdHJfOwoKCiAgQ09SQkFfRW52aXJvbm1lbnRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJB X0Vudmlyb25tZW50X3ZhciAmKTsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRW52aXJvbm1lbnQuaSIgMQoKCgppbmxpbmUgQ09SQkE6 OkJvb2xlYW4KQ09SQkE6OmlzX25pbCAoQ09SQkE6OkVudmlyb25tZW50X3B0ciBlbnYpCnsKICBy ZXR1cm4gZW52ID09IDA7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpyZWxlYXNlIChDT1JCQTo6RW52 aXJvbm1lbnRfcHRyIGVudikKewogIGlmIChlbnYgPT0gMCkKICAgIHJldHVybjsKICBkZWxldGUg ZW52Owp9CgppbmxpbmUgQ09SQkFfRXhjZXB0aW9uKgpDT1JCQV9FbnZpcm9ubWVudDo6ZXhjZXB0 aW9uICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmV4Y2VwdGlvbl87Cn0KCmlubGluZSBD T1JCQV9FbnZpcm9ubWVudCAqCkNPUkJBX0Vudmlyb25tZW50OjpfZHVwbGljYXRlIChDT1JCQV9F bnZpcm9ubWVudCAqeCkKewogIGlmICh4ID09IDApCiAgICByZXR1cm4gMDsKICByZXR1cm4gbmV3 IENPUkJBX0Vudmlyb25tZW50ICgqeCk7Cn0KCmlubGluZSBDT1JCQV9FbnZpcm9ubWVudF9wdHIK Q09SQkFfRW52aXJvbm1lbnQ6Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4gKENPUkJBX0Vudmlyb25t ZW50X3B0cikwOwp9CgoKCmlubGluZQpDT1JCQV9FbnZpcm9ubWVudF92YXI6OkNPUkJBX0Vudmly b25tZW50X3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKQ09SQkFfRW52aXJvbm1l bnRfdmFyOjpDT1JCQV9FbnZpcm9ubWVudF92YXIgKENPUkJBX0Vudmlyb25tZW50X3B0ciBwKQog IDogcHRyXyAocCkKe30KCmlubGluZSBDT1JCQV9FbnZpcm9ubWVudF9wdHIKQ09SQkFfRW52aXJv bm1lbnRfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s aW5lCkNPUkJBX0Vudmlyb25tZW50X3Zhcjo6Q09SQkFfRW52aXJvbm1lbnRfdmFyIChjb25zdCBD T1JCQV9FbnZpcm9ubWVudF92YXIgJnApCiAgOiBwdHJfIChuZXcgQ09SQkFfRW52aXJvbm1lbnQg KCpwLnB0ciAoKSkpCnt9CgppbmxpbmUKQ09SQkFfRW52aXJvbm1lbnRfdmFyOjp+Q09SQkFfRW52 aXJvbm1lbnRfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZQpDT1JC QV9FbnZpcm9ubWVudF92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX0Vudmlyb25tZW50X3B0ciAm KCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfRW52aXJvbm1l bnRfdmFyOjpvcGVyYXRvciBDT1JCQV9FbnZpcm9ubWVudF9wdHIgJigpCnsKICByZXR1cm4gdGhp cy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX0Vudmlyb25tZW50X3B0cgpDT1JCQV9FbnZpcm9ubWVu dF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK aW5saW5lIENPUkJBX0Vudmlyb25tZW50X3B0cgpDT1JCQV9FbnZpcm9ubWVudF92YXI6OmluICh2 b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9FbnZpcm9u bWVudF9wdHIgJgpDT1JCQV9FbnZpcm9ubWVudF92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJu IHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9FbnZpcm9ubWVudF9wdHIgJgpDT1JCQV9FbnZp cm9ubWVudF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0 cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfRW52aXJvbm1lbnRf cHRyCkNPUkJBX0Vudmlyb25tZW50X3Zhcjo6X3JldG4gKHZvaWQpCnsKCiAgQ09SQkFfRW52aXJv bm1lbnRfcHRyIHZhbCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHZh bDsKfQoKCgppbmxpbmUKQ09SQkFfRW52aXJvbm1lbnRfb3V0OjpDT1JCQV9FbnZpcm9ubWVudF9v dXQgKENPUkJBX0Vudmlyb25tZW50X3B0ciAmcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJf ID0gMDsKfQoKaW5saW5lCkNPUkJBX0Vudmlyb25tZW50X291dDo6Q09SQkFfRW52aXJvbm1lbnRf b3V0IChDT1JCQV9FbnZpcm9ubWVudF92YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRl bGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFfRW52aXJv bm1lbnRfb3V0OjpDT1JCQV9FbnZpcm9ubWVudF9vdXQgKGNvbnN0IENPUkJBX0Vudmlyb25tZW50 X291dCAmcCkKICA6IHB0cl8gKHAucHRyXykKe30KCmlubGluZSBDT1JCQV9FbnZpcm9ubWVudF9v dXQgJgpDT1JCQV9FbnZpcm9ubWVudF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgQ09SQkFfRW52aXJv bm1lbnRfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IHAucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0K CmlubGluZSBDT1JCQV9FbnZpcm9ubWVudF9vdXQgJgpDT1JCQV9FbnZpcm9ubWVudF9vdXQ6Om9w ZXJhdG9yPSAoQ09SQkFfRW52aXJvbm1lbnRfcHRyIHApCnsKICB0aGlzLT5wdHJfID0gcDsKICBy ZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9FbnZpcm9ubWVudF9vdXQ6Om9wZXJhdG9yIENP UkJBX0Vudmlyb25tZW50X3B0ciAmKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg Q09SQkFfRW52aXJvbm1lbnRfcHRyICYKQ09SQkFfRW52aXJvbm1lbnRfb3V0OjpwdHIgKHZvaWQp CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX0Vudmlyb25tZW50X3B0cgpD T1JCQV9FbnZpcm9ubWVudF9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQojIDE5MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9FbnZpcm9ubWVudC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMTkzICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Vudmlyb25tZW50LmgiIDIKIyAyNiAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9BbnkuaCIgMgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2Jq ZWN0LmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9PYmplY3QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3QuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhZndkLmgiIDEKIyAyNyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3QuaCIgMgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2Jq ZWN0X1Byb3h5X0Jyb2tlci5oIiAxCiMgMjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0X1Byb3h5X0Jyb2tlci5oIgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIyICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9Qcm94 eV9Ccm9rZXIuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9Qcm94eV9Ccm9rZXIuaCIgMgoKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9Q cm94eV9JbXBsLmgiIDEKIyAyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9PYmplY3RfUHJveHlfSW1wbC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9Qcm94eV9JbXBsLmgi IDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L2NvcmJhZndkLmgiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9PYmplY3RfUHJveHlfSW1wbC5oIiAyCiMgMzEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0X1Byb3h5X0ltcGwuaCIK Y2xhc3MgVEFPX09iamVjdF9Qcm94eV9JbXBsCnsKcHVibGljOgoKICB2aXJ0dWFsIH5UQU9fT2Jq ZWN0X1Byb3h5X0ltcGwgKHZvaWQpOwoKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfYSAo Y29uc3QgQ09SQkE6Ok9iamVjdF9wdHIgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IENPUkJBOjpDaGFyICpsb2dpY2FsX3R5cGVfaWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUpID0gMDsKCgoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3Rl bnQgKGNvbnN0IENPUkJBOjpPYmplY3RfcHRyIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlKSA9IDA7CgogIHZpcnR1YWwgQ09SQkFfSW50ZXJmYWNlRGVmX3B0ciBfZ2V0 X2ludGVyZmFjZSAoCiAgICAgIGNvbnN0IENPUkJBOjpPYmplY3RfcHRyIHRhcmdldCwKICAgICAg Q09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICkg PSAwOwoKCgpwcm90ZWN0ZWQ6CiAgVEFPX09iamVjdF9Qcm94eV9JbXBsICh2b2lkKTsKCn07Cgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0Lmgi IDEKIyA2MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9PYmplY3RfUHJveHlfSW1wbC5oIiAyCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0X1Byb3h5X0Jyb2tlci5oIiAyCgoKCgoKY2xh c3MgVEFPX09iamVjdF9Qcm94eV9Ccm9rZXIKewpwdWJsaWM6CgoKICB2aXJ0dWFsIH5UQU9fT2Jq ZWN0X1Byb3h5X0Jyb2tlciAodm9pZCk7CgogIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9JbXBs ICZzZWxlY3RfcHJveHkgKENPUkJBOjpPYmplY3RfcHRyIG9iamVjdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpID0gMDsKCnByb3RlY3RlZDoKICBUQU9fT2JqZWN0 X1Byb3h5X0Jyb2tlciAodm9pZCk7Cn07CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDQ3ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9Qcm94eV9Ccm9rZXIuaCIgMgoj IDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09i amVjdC5oIiAyCgoKCgoKY2xhc3MgVEFPX1N0dWI7CgpjbGFzcyBUQU9fQWJzdHJhY3RfU2VydmFu dEJhc2U7CgpjbGFzcyBDT1JCQV9PYmplY3QKewpwdWJsaWM6CgogIHZpcnR1YWwgfkNPUkJBX09i amVjdCAodm9pZCk7CgoKICBzdGF0aWMgQ09SQkFfT2JqZWN0X3B0ciBfZHVwbGljYXRlIChDT1JC QV9PYmplY3RfcHRyIG9iaik7CgoKICBzdGF0aWMgQ09SQkFfT2JqZWN0X3B0ciBfbmlsICh2b2lk KTsKCgogIGlubGluZQogIHN0YXRpYyBDT1JCQV9PYmplY3RfcHRyIF9uYXJyb3cgKENPUkJBX09i amVjdF9wdHIgb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKICBz dGF0aWMgQ09SQkFfT2JqZWN0X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoQ09SQkFfT2JqZWN0X3B0 ciBvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB X0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly b25tZW50ICgpKTsKCgogIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsK CgogIHN0YXRpYyBDT1JCQTo6Qm9vbGVhbiBpc19uaWxfaSAoQ09SQkFfT2JqZWN0X3B0ciBvYmop OwojIDcxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L09iamVjdC5oIgogIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gX2lzX2EgKGNvbnN0IGNoYXIgKmxv Z2ljYWxfdHlwZV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKCiAgdmly dHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoK CiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfY29sbG9jYXRlZCAodm9pZCkgY29uc3Q7CgoK ICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19sb2NhbCAodm9pZCkgY29uc3Q7CgogIHZpcnR1 YWwgVEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlKl9zZXJ2YW50ICh2b2lkKSBjb25zdDsKCgoKICB2 aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQgKENPUkJBX0Vudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgogIHZpcnR1 YWwgQ09SQkE6OkltcGxlbWVudGF0aW9uRGVmX3B0ciBfZ2V0X2ltcGxlbWVudGF0aW9uICgKICAg ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwoKCiAgdmlydHVhbCBDT1JC QV9JbnRlcmZhY2VEZWZfcHRyIF9nZXRfaW50ZXJmYWNlICgKICAgICAgQ09SQkFfRW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0 X2Vudmlyb25tZW50ICgpCiAgICApOwoKCgoKCgoKICB2aXJ0dWFsIHZvaWQgX2NyZWF0ZV9yZXF1 ZXN0IChDT1JCQTo6Q29udGV4dF9wdHIgY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDT1JCQTo6TlZMaXN0X3B0ciBhcmdfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDT1JCQTo6TmFtZWRWYWx1ZV9wdHIgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENPUkJBOjpSZXF1ZXN0X3B0ciAmcmVxdWVzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDT1JCQTo6RmxhZ3MgcmVxX2ZsYWdzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpKTsKCiAgdmlydHVhbCB2b2lkIF9jcmVhdGVfcmVxdWVzdCAoQ09SQkE6OkNv bnRleHRfcHRyIGN0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Ok5WTGlz dF9wdHIgYXJnX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Ok5h bWVkVmFsdWVfcHRyIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC QTo6RXhjZXB0aW9uTGlzdF9wdHIgZXhjbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDT1JCQTo6Q29udGV4dExpc3RfcHRyIGN0eHRsaXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENPUkJBOjpSZXF1ZXN0X3B0ciAmcmVxdWVzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDT1JCQTo6RmxhZ3MgcmVxX2ZsYWdzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50 X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0 X2Vudmlyb25tZW50ICgpKTsKCgoKCgoKICB2aXJ0dWFsIENPUkJBOjpSZXF1ZXN0X3B0ciBfcmVx dWVzdCAoY29uc3QgY2hhciAqb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVs dF9lbnZpcm9ubWVudCAoKSk7CgoKCgoKICBDT1JCQTo6UG9saWN5X3B0ciBfZ2V0X3BvbGljeSAo CiAgICAgIENPUkJBOjpQb2xpY3lUeXBlIHR5cGUsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkKICAgICk7CiAgQ09SQkE6OlBvbGljeV9wdHIgX2dldF9jbGllbnRfcG9saWN5 ICgKICAgICAgQ09SQkE6OlBvbGljeVR5cGUgdHlwZSwKICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9l bnZpcm9ubWVudCAoKQogICAgKTsKICBDT1JCQTo6T2JqZWN0X3B0ciBfc2V0X3BvbGljeV9vdmVy cmlkZXMgKAogICAgICBjb25zdCBDT1JCQTo6UG9saWN5TGlzdCAmIHBvbGljaWVzLAogICAgICBD T1JCQTo6U2V0T3ZlcnJpZGVUeXBlIHNldF9hZGQsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkKICAgICk7CiAgQ09SQkE6OlBvbGljeUxpc3QgKiBfZ2V0X3BvbGljeV9vdmVy cmlkZXMgKAogICAgICBjb25zdCBDT1JCQTo6UG9saWN5VHlwZVNlcSAmIHR5cGVzLAogICAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwogIENPUkJBOjpCb29sZWFuIF92 YWxpZGF0ZV9jb25uZWN0aW9uICgKICAgICAgQ09SQkE6OlBvbGljeUxpc3Rfb3V0IGluY29uc2lz dGVudF9wb2xpY2llcywKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg KTsKIyAxODAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vT2JqZWN0LmgiCiAgdmlydHVhbCBDT1JCQTo6VUxvbmcgX2hhc2ggKENPUkJBOjpVTG9uZyBt YXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKCgoKICB2aXJ0dWFsIENP UkJBOjpCb29sZWFuIF9pc19lcXVpdmFsZW50IChDT1JCQTo6T2JqZWN0X3B0ciBvdGhlcl9vYmos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkKICAg IHRocm93ICgpOwoKCgogIHZpcnR1YWwgVEFPX09iamVjdEtleSAqX2tleSAoQ09SQkFfRW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKCgoKCgogIHZpcnR1YWwg Y29uc3QgVEFPX09iamVjdEtleSAmX29iamVjdF9rZXkgKHZvaWQpOwoKCgogIHZpcnR1YWwgdm9p ZCAqIF90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKCiAgdHlwZWRlZiBD T1JCQV9PYmplY3RfcHRyIF9wdHJfdHlwZTsKICB0eXBlZGVmIENPUkJBX09iamVjdF92YXIgX3Zh cl90eXBlOwoKCgoKCiAgdmlydHVhbCB2b2lkIF9hZGRfcmVmICh2b2lkKTsKCgogIHZpcnR1YWwg dm9pZCBfcmVtb3ZlX3JlZiAodm9pZCk7CgoKCiAgQ09SQkFfT2JqZWN0IChUQU9fU3R1YiAqcCA9 IDAsCiAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBjb2xsb2NhdGVkID0gMCwKICAgICAg ICAgICAgICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAqc2VydmFudCA9IDApOwoKCgogIHZp cnR1YWwgVEFPX1N0dWIgKl9zdHVib2JqICh2b2lkKSBjb25zdDsKCgogIHZpcnR1YWwgdm9pZCBf cHJveHlfYnJva2VyIChUQU9fT2JqZWN0X1Byb3h5X0Jyb2tlciAqcHJveHlfYnJva2VyKTsKCgog IHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9Ccm9rZXIgKl9wcm94eV9icm9rZXIgKHZvaWQpOwoK cHJvdGVjdGVkOgoKICBDT1JCQV9PYmplY3QgKGludCBkdW1teSk7CgoKCiAgQ09SQkE6OlVMb25n IF9pbmNyX3JlZmNudCAodm9pZCk7CgoKICBDT1JCQTo6VUxvbmcgX2RlY3JfcmVmY250ICh2b2lk KTsKCgoKICBDT1JCQTo6Qm9vbGVhbiBpc19jb2xsb2NhdGVkXzsKCgogIFRBT19BYnN0cmFjdF9T ZXJ2YW50QmFzZSAqc2VydmFudF87CgoKICBDT1JCQTo6Qm9vbGVhbiBpc19sb2NhbF87CgoKCgoK CiAgVEFPX09iamVjdF9Qcm94eV9Ccm9rZXIgKnByb3h5X2Jyb2tlcl87Cgpwcml2YXRlOgoKCgoK CgogIFRBT19TdHViICpwcm90b2NvbF9wcm94eV87CgoKICBDT1JCQTo6VUxvbmcgcmVmY291bnRf OwoKCgogIEFDRV9NVF9TWU5DSDo6TVVURVggcmVmY291bnRfbG9ja187CgoKICBDT1JCQV9PYmpl Y3QgKGNvbnN0IENPUkJBX09iamVjdCAmKTsKICBDT1JCQV9PYmplY3QgJm9wZXJhdG9yID0gKGNv bnN0IENPUkJBX09iamVjdCAmKTsKfTsKCmNsYXNzIENPUkJBX09iamVjdF92YXIKewpwdWJsaWM6 CiAgQ09SQkFfT2JqZWN0X3ZhciAodm9pZCk7CiAgQ09SQkFfT2JqZWN0X3ZhciAoQ09SQkE6Ok9i amVjdF9wdHIpOwogIENPUkJBX09iamVjdF92YXIgKGNvbnN0IENPUkJBX09iamVjdF92YXIgJik7 CiAgfkNPUkJBX09iamVjdF92YXIgKHZvaWQpOwoKICBDT1JCQV9PYmplY3RfdmFyICZvcGVyYXRv cj0gKENPUkJBOjpPYmplY3RfcHRyKTsKICBDT1JCQV9PYmplY3RfdmFyICZvcGVyYXRvcj0gKGNv bnN0IENPUkJBX09iamVjdF92YXIgJik7CiAgQ09SQkE6Ok9iamVjdF9wdHIgb3BlcmF0b3ItPiAo dm9pZCkgY29uc3Q7CgoKICBvcGVyYXRvciBjb25zdCBDT1JCQTo6T2JqZWN0X3B0ciAmKCkgY29u c3Q7CiAgb3BlcmF0b3IgQ09SQkE6Ok9iamVjdF9wdHIgJigpOwogIENPUkJBOjpPYmplY3RfcHRy IGluICh2b2lkKSBjb25zdDsKICBDT1JCQTo6T2JqZWN0X3B0ciAmaW5vdXQgKHZvaWQpOwogIENP UkJBOjpPYmplY3RfcHRyICZvdXQgKHZvaWQpOwogIENPUkJBOjpPYmplY3RfcHRyIF9yZXRuICh2 b2lkKTsKICBDT1JCQTo6T2JqZWN0X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKICBzdGF0aWMgQ09S QkE6Ok9iamVjdF9wdHIgZHVwbGljYXRlIChDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIHZv aWQgcmVsZWFzZSAoQ09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0X3B0 ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0X3B0ciBuYXJyb3cgKENPUkJBOjpP YmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICog dXBjYXN0ICh2b2lkICopOwoKcHJpdmF0ZToKICBDT1JCQTo6T2JqZWN0X3B0ciBwdHJfOwp9OwoK Y2xhc3MgQ09SQkFfT2JqZWN0X291dAp7CnB1YmxpYzoKICBDT1JCQV9PYmplY3Rfb3V0IChDT1JC QTo6T2JqZWN0X3B0ciAmKTsKICBDT1JCQV9PYmplY3Rfb3V0IChDT1JCQV9PYmplY3RfdmFyICYp OwogIENPUkJBX09iamVjdF9vdXQgKGNvbnN0IENPUkJBX09iamVjdF9vdXQgJik7CiAgQ09SQkFf T2JqZWN0X291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9PYmplY3Rfb3V0ICYpOwogIENPUkJB X09iamVjdF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfT2JqZWN0X3ZhciAmKTsKICBDT1JC QV9PYmplY3Rfb3V0ICZvcGVyYXRvcj0gKENPUkJBOjpPYmplY3RfcHRyKTsKICBvcGVyYXRvciBD T1JCQTo6T2JqZWN0X3B0ciAmKCk7CiAgQ09SQkE6Ok9iamVjdF9wdHIgJnB0ciAodm9pZCk7CiAg Q09SQkE6Ok9iamVjdF9wdHIgb3BlcmF0b3ItPiAodm9pZCk7Cgpwcml2YXRlOgogIENPUkJBOjpP YmplY3RfcHRyICZwdHJfOwp9OwoKCmV4dGVybiBUQU9fT2JqZWN0X1Byb3h5X0Jyb2tlciAqICgq X1RBT19jb2xsb2NhdGlvbl9PYmplY3RfUHJveHlfQnJva2VyX0ZhY3RvcnlfZnVuY3Rpb25fcG9p bnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAgKTsKCgoKCiAgICAgICAgICAgQ09S QkE6OkJvb2xlYW4Kb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiYsIGNvbnN0IENPUkJBX09iamVj dCopOwoKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIm LCBDT1JCQV9PYmplY3QqJik7CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL09iamVjdC5pIiAxCgoKCgppbmxpbmUKQ09SQkFfT2JqZWN0OjpD T1JCQV9PYmplY3QgKGludCkKICA6IGlzX2NvbGxvY2F0ZWRfICgwKSwKICAgIHNlcnZhbnRfICgw KSwKICAgIGlzX2xvY2FsXyAoMSksCiAgICBwcm94eV9icm9rZXJfICgwKSwKICAgIHByb3RvY29s X3Byb3h5XyAoMCksCiAgICByZWZjb3VudF8gKDEpLAogICAgcmVmY291bnRfbG9ja18gKCkKewp9 CgppbmxpbmUgQ09SQkE6OlVMb25nCkNPUkJBX09iamVjdDo6X2luY3JfcmVmY250ICh2b2lkKQp7 CiAgQUNFX0d1YXJkPCBBQ0VfTVRfU1lOQ0g6Ok1VVEVYID4gZ3VhcmQgKHRoaXMtPnJlZmNvdW50 X2xvY2tfKTsgaWYgKGd1YXJkLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gMDs7CiAgcmV0dXJuIHRo aXMtPnJlZmNvdW50XysrOwp9CgppbmxpbmUgQ09SQkE6OlVMb25nCkNPUkJBX09iamVjdDo6X2Rl Y3JfcmVmY250ICh2b2lkKQp7CiAgewogICAgQUNFX0d1YXJkPCBBQ0VfTVRfU1lOQ0g6Ok1VVEVY ID4gbW9uICh0aGlzLT5yZWZjb3VudF9sb2NrXyk7IGlmIChtb24ubG9ja2VkICgpID09IDApIHJl dHVybiAwOzsKICAgIHRoaXMtPnJlZmNvdW50Xy0tOwogICAgaWYgKHRoaXMtPnJlZmNvdW50XyAh PSAwKQogICAgICByZXR1cm4gdGhpcy0+cmVmY291bnRfOwogIH0KCiAgZGVsZXRlIHRoaXM7CiAg cmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQV9PYmplY3RfcHRyCkNPUkJBX09iamVjdDo6X2R1cGxp Y2F0ZSAoQ09SQkFfT2JqZWN0X3B0ciBvYmopCnsKICBpZiAob2JqKQogICAgb2JqLT5fYWRkX3Jl ZiAoKTsKICByZXR1cm4gb2JqOwp9CgoKCgppbmxpbmUgdm9pZApDT1JCQTo6cmVsZWFzZSAoQ09S QkFfT2JqZWN0X3B0ciBvYmopCnsKICBpZiAob2JqKQogICAgb2JqLT5fcmVtb3ZlX3JlZiAoKTsK fQoKaW5saW5lIENPUkJBOjpCb29sZWFuCkNPUkJBOjppc19uaWwgKENPUkJBX09iamVjdF9wdHIg b2JqKQp7CiAgaWYgKG9iaiA9PSAwKQogICAgewogICAgICByZXR1cm4gMTsKICAgIH0KCiAgcmV0 dXJuIENPUkJBX09iamVjdDo6aXNfbmlsX2kgKG9iaik7Cn0KCgoKCgppbmxpbmUgQ09SQkFfT2Jq ZWN0X3B0cgpDT1JCQV9PYmplY3Q6Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5l IENPUkJBX09iamVjdF9wdHIKQ09SQkFfT2JqZWN0OjpfdW5jaGVja2VkX25hcnJvdyAoQ09SQkFf T2JqZWN0X3B0ciBvYmosIENPUkJBOjpFbnZpcm9ubWVudCAmKQp7CiAgaWYgKENPUkJBOjppc19u aWwgKG9iaikpCiAgICByZXR1cm4gQ09SQkE6Ok9iamVjdDo6X25pbCAoKTsKCiAgaWYgKG9iai0+ aXNfbG9jYWxfKQogICAgcmV0dXJuCiAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6Ok9iamVj dF9wdHI+IChvYmotPl90YW9fUXVlcnlJbnRlcmZhY2UgKHJlaW50ZXJwcmV0X2Nhc3Q8cHRyX2Fy aXRoX3Q+ICgmQ09SQkE6Ok9iamVjdDo6X25hcnJvdykpKTsKCgoKICBlbHNlCiAgICByZXR1cm4g Q09SQkE6Ok9iamVjdDo6X2R1cGxpY2F0ZSAob2JqKTsKfQoKaW5saW5lIENPUkJBX09iamVjdF9w dHIKQ09SQkFfT2JqZWN0OjpfbmFycm93IChDT1JCQV9PYmplY3RfcHRyIG9iaiwgQ09SQkE6OkVu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgcmV0dXJuIENP UkJBX09iamVjdDo6X3VuY2hlY2tlZF9uYXJyb3cgKG9iaiwgX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZSk7Cn0KCmlubGluZSBUQU9fU3R1YiAqCkNPUkJBX09iamVjdDo6X3N0dWJvYmog KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHJvdG9jb2xfcHJveHlfOwp9CgoKCgoKaW5s aW5lCkNPUkJBX09iamVjdF92YXI6OkNPUkJBX09iamVjdF92YXIgKHZvaWQpCiAgOiBwdHJfIChD T1JCQV9PYmplY3Q6Ol9uaWwgKCkpCnsKfQoKaW5saW5lCkNPUkJBX09iamVjdF92YXI6OkNPUkJB X09iamVjdF92YXIgKENPUkJBX09iamVjdF9wdHIgcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUK Q09SQkFfT2JqZWN0X3Zhcjo6fkNPUkJBX09iamVjdF92YXIgKHZvaWQpCnsKICBDT1JCQTo6cmVs ZWFzZSAodGhpcy0+cHRyXyk7Cn0KCmlubGluZSBDT1JCQV9PYmplY3RfcHRyCkNPUkJBX09iamVj dF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUK Q09SQkFfT2JqZWN0X3Zhcjo6Q09SQkFfT2JqZWN0X3ZhciAoY29uc3QgQ09SQkFfT2JqZWN0X3Zh ciAmcCkKICAgICAgICA6IHB0cl8gKENPUkJBX09iamVjdDo6X2R1cGxpY2F0ZSAocC5wdHIgKCkp KQp7fQoKaW5saW5lIENPUkJBX09iamVjdF92YXIgJgpDT1JCQV9PYmplY3RfdmFyOjpvcGVyYXRv cj0gKENPUkJBX09iamVjdF9wdHIgcCkKewogIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsK ICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9PYmplY3Rf dmFyICYKQ09SQkFfT2JqZWN0X3Zhcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9PYmplY3RfdmFy ICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgewogICAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0 cl8pOwogICAgdGhpcy0+cHRyXyA9IENPUkJBX09iamVjdDo6X2R1cGxpY2F0ZSAocC5wdHIgKCkp OwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9PYmplY3RfdmFyOjpvcGVyYXRv ciBjb25zdCBDT1JCQV9PYmplY3RfcHRyICYoKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87 Cn0KCmlubGluZQpDT1JCQV9PYmplY3RfdmFyOjpvcGVyYXRvciBDT1JCQV9PYmplY3RfcHRyICYo KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9PYmplY3RfcHRyCkNPUkJB X09iamVjdF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRy XzsKfQoKaW5saW5lIENPUkJBX09iamVjdF9wdHIKQ09SQkFfT2JqZWN0X3Zhcjo6aW4gKHZvaWQp IGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX09iamVjdF9wdHIg JgpDT1JCQV9PYmplY3RfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9 CgppbmxpbmUgQ09SQkFfT2JqZWN0X3B0ciAmCkNPUkJBX09iamVjdF92YXI6Om91dCAodm9pZCkK ewogIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsKICB0aGlzLT5wdHJfID0gQ09SQkFfT2Jq ZWN0OjpfbmlsICgpOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfT2JqZWN0 X3B0cgpDT1JCQV9PYmplY3RfdmFyOjpfcmV0biAodm9pZCkKewoKICBDT1JCQV9PYmplY3RfcHRy IHZhbCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IENPUkJBX09iamVjdDo6X25pbCAoKTsK ICByZXR1cm4gdmFsOwp9CgppbmxpbmUgQ09SQkFfT2JqZWN0X3B0cgpDT1JCQV9PYmplY3RfdmFy OjpkdXBsaWNhdGUgKENPUkJBX09iamVjdF9wdHIgcCkKewogIHJldHVybiBDT1JCQV9PYmplY3Q6 Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZApDT1JCQV9PYmplY3RfdmFyOjpyZWxlYXNl IChDT1JCQV9PYmplY3RfcHRyIHApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBD T1JCQV9PYmplY3RfcHRyCkNPUkJBX09iamVjdF92YXI6Om5pbCAodm9pZCkKewogIHJldHVybiBD T1JCQV9PYmplY3Q6Ol9uaWwgKCk7Cn0KCmlubGluZSBDT1JCQV9PYmplY3RfcHRyCkNPUkJBX09i amVjdF92YXI6Om5hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmly b25tZW50ICYKICApCnsKICByZXR1cm4gQ09SQkFfT2JqZWN0OjpfZHVwbGljYXRlIChwKTsKfQoK aW5saW5lIENPUkJBOjpPYmplY3QgKgpDT1JCQV9PYmplY3RfdmFyOjp1cGNhc3QgKHZvaWQgKnNy YykKewogIENPUkJBX09iamVjdCAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxDT1JCQV9PYmplY3Qg Kio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CgoKCgoKaW5saW5lCkNPUkJBX09iamVjdF9vdXQ6 OkNPUkJBX09iamVjdF9vdXQgKENPUkJBX09iamVjdF9wdHIgJnApCiAgICAgICAgOiBwdHJfIChw KQp7CiAgdGhpcy0+cHRyXyA9IENPUkJBX09iamVjdDo6X25pbCAoKTsKfQoKaW5saW5lCkNPUkJB X09iamVjdF9vdXQ6OkNPUkJBX09iamVjdF9vdXQgKENPUkJBX09iamVjdF92YXIgJnApCiAgICAg ICAgOiBwdHJfIChwLm91dCAoKSkKewogIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsKICB0 aGlzLT5wdHJfID0gQ09SQkFfT2JqZWN0OjpfbmlsICgpOwp9CgppbmxpbmUKQ09SQkFfT2JqZWN0 X291dDo6Q09SQkFfT2JqZWN0X291dCAoY29uc3QgQ09SQkFfT2JqZWN0X291dCAmcCkKICAgICAg ICA6IHB0cl8gKHAucHRyXykKe30KCmlubGluZSBDT1JCQV9PYmplY3Rfb3V0ICYKQ09SQkFfT2Jq ZWN0X291dDo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9PYmplY3Rfb3V0ICZwKQp7CiAgdGhpcy0+ cHRyXyA9IHAucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9PYmplY3Rfb3V0 ICYKQ09SQkFfT2JqZWN0X291dDo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9PYmplY3RfdmFyICZw KQp7CiAgdGhpcy0+cHRyXyA9IENPUkJBX09iamVjdDo6X2R1cGxpY2F0ZSAocC5wdHIgKCkpOwog IHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX09iamVjdF9vdXQgJgpDT1JCQV9PYmplY3Rf b3V0OjpvcGVyYXRvcj0gKENPUkJBX09iamVjdF9wdHIgcCkKewogIHRoaXMtPnB0cl8gPSBwOwog IHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJBX09iamVjdF9vdXQ6Om9wZXJhdG9yIENPUkJB X09iamVjdF9wdHIgJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX09i amVjdF9wdHIgJgpDT1JCQV9PYmplY3Rfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQoKaW5saW5lIENPUkJBX09iamVjdF9wdHIKQ09SQkFfT2JqZWN0X291dDo6b3BlcmF0 b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CiMgMzUyICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdC5oIiAyCgoKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMg MzU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09i amVjdC5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vQW55LmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UeXBlY29kZS5oIgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE5ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgiIDIK CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNo LmgiIDEKIyAyMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9UeXBlY29kZS5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0aW9uLmgiCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjAg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0 aW9uLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0aW9uLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TU3RyaW5nLmgiIDEKIyAxNSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEK IyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJp bmcuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvQUNFLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL1NTdHJpbmcuaCIgMgojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvU1N0cmluZy5oIgp0eXBlZGVmIEFDRV9VU0hPUlQxNiBBQ0VfV1NUUklO R19UWVBFOwoKCgoKCgoKY2xhc3MgQUNFX0FsbG9jYXRvcjsKIyA1NCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIKY2xhc3MgQUNFX0NTdHJp bmcKewpwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBpbnQgbnBvczsKCgogIEFDRV9DU3RyaW5nIChB Q0VfQWxsb2NhdG9yICphbGxvYyA9IDApOwoKCgoKCgoKICBBQ0VfQ1N0cmluZyAoY29uc3QgY2hh ciAqcywKICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2MgPSAwLAogICAgICAgICAg ICAgICBpbnQgcmVsZWFzZSA9IDEpOwoKCgoKCgoKICBBQ0VfQ1N0cmluZyAoY29uc3QgY2hhciAq cywKICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRv ciAqYWxsb2MgPSAwLAogICAgICAgICAgICAgICBpbnQgcmVsZWFzZSA9IDEpOwoKCiAgQUNFX0NT dHJpbmcgKGNvbnN0IEFDRV9DU3RyaW5nICYpOwoKCgogIEFDRV9DU3RyaW5nIChjb25zdCBBQ0Vf V1NUUklOR19UWVBFICpzLAogICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yICphbGxvYyA9IDAp OwoKCiAgQUNFX0NTdHJpbmcgKGNoYXIgYywgQUNFX0FsbG9jYXRvciAqYWxsb2MgPSAwKTsKCgog IH5BQ0VfQ1N0cmluZyAodm9pZCk7CgoKCiAgY29uc3QgY2hhciAmb3BlcmF0b3IgW10gKHNpemVf dCBzbG90KSBjb25zdDsKCgoKICBjaGFyICZvcGVyYXRvciBbXSAoc2l6ZV90IHNsb3QpOwoKCiAg QUNFX0NTdHJpbmcgJm9wZXJhdG9yID0gKGNvbnN0IEFDRV9DU3RyaW5nICYpOwoKCgogIHZvaWQg c2V0IChjb25zdCBjaGFyICpzLCBpbnQgcmVsZWFzZSA9IDEpOwoKCgogIHZvaWQgc2V0IChjb25z dCBjaGFyICpzLAogICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAgICBpbnQgcmVsZWFz ZSk7CgoKCgoKCiAgQUNFX0NTdHJpbmcgc3Vic3RyaW5nIChzaXplX3Qgb2Zmc2V0LCBzc2l6ZV90 IGxlbmd0aCA9IC0xKSBjb25zdDsKCgogIEFDRV9DU3RyaW5nIHN1YnN0ciAoc2l6ZV90IG9mZnNl dCwgc3NpemVfdCBsZW5ndGggPSAtMSkgY29uc3Q7CgoKICBBQ0VfQ1N0cmluZyAmb3BlcmF0b3Ig Kz0gKGNvbnN0IEFDRV9DU3RyaW5nICYpOwoKCiAgdV9sb25nIGhhc2ggKHZvaWQpIGNvbnN0OwoK CiAgc2l6ZV90IGxlbmd0aCAodm9pZCkgY29uc3Q7CgoKICBjaGFyICpyZXAgKHZvaWQpIGNvbnN0 OwoKCgoKCgogIGNvbnN0IGNoYXIgKmZhc3RfcmVwICh2b2lkKSBjb25zdDsKCgogIGNvbnN0IGNo YXIgKmNfc3RyICh2b2lkKSBjb25zdDsKCgoKICBpbnQgc3Ryc3RyIChjb25zdCBBQ0VfQ1N0cmlu ZyAmcykgY29uc3Q7CgoKCiAgaW50IGZpbmQgKGNvbnN0IEFDRV9DU3RyaW5nICZzdHIsIGludCBw b3MgPSAwKSBjb25zdDsKCgoKICBpbnQgZmluZCAoY29uc3QgY2hhciAqcywgaW50IHBvcyA9IDAp IGNvbnN0OwoKCgogIGludCBmaW5kIChjaGFyIGMsIGludCBwb3MgPSAwKSBjb25zdDsKCgoKICBp bnQgcmZpbmQgKGNoYXIgYywgaW50IHBvcyA9IG5wb3MpIGNvbnN0OwoKCiAgaW50IG9wZXJhdG9y ID09IChjb25zdCBBQ0VfQ1N0cmluZyAmcykgY29uc3Q7CgoKICBpbnQgb3BlcmF0b3IgPCAoY29u c3QgQUNFX0NTdHJpbmcgJnMpIGNvbnN0OwoKCiAgaW50IG9wZXJhdG9yID4gKGNvbnN0IEFDRV9D U3RyaW5nICZzKSBjb25zdDsKCgogIGludCBvcGVyYXRvciAhPSAoY29uc3QgQUNFX0NTdHJpbmcg JnMpIGNvbnN0OwoKCiAgaW50IGNvbXBhcmUgKGNvbnN0IEFDRV9DU3RyaW5nICZzKSBjb25zdDsK CgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcml2YXRl OgoKICBBQ0VfQWxsb2NhdG9yICphbGxvY2F0b3JfOwoKCiAgc2l6ZV90IGxlbl87CgoKCiAgc2l6 ZV90IGJ1Zl9sZW5fOwoKCiAgY2hhciAqcmVwXzsKCgogIGludCByZWxlYXNlXzsKCgogIHN0YXRp YyBjaGFyIE5VTExfQ1N0cmluZ187Cn07CgogICAgICAgICAgIGlubGluZSBBQ0VfQ1N0cmluZyBv cGVyYXRvciArIChjb25zdCBBQ0VfQ1N0cmluZyAmLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX0NTdHJpbmcgJik7CgogICAgICAgICAgIG9z dHJlYW0gJm9wZXJhdG9yIDw8IChvc3RyZWFtICYsIGNvbnN0IEFDRV9DU3RyaW5nICYpOwojIDIz MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcu aCIKY2xhc3MgQUNFX1dTdHJpbmcKewpwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBpbnQgbnBvczsK CgogIEFDRV9XU3RyaW5nIChBQ0VfQWxsb2NhdG9yICphbGxvYyA9IDApOwoKCiAgQUNFX1dTdHJp bmcgKGNvbnN0IGNoYXIgKnMsCiAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0b3IgKmFsbG9jID0g MCk7CgoKICBBQ0VfV1N0cmluZyAoY29uc3QgQUNFX1dTVFJJTkdfVFlQRSAqcywKICAgICAgICAg ICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2MgPSAwKTsKIyAyNTcgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TU3RyaW5nLmgiCiAgQUNFX1dTdHJpbmcgKGNv bnN0IEFDRV9XU1RSSU5HX1RZUEUgKnMsCiAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCiAgICAg ICAgICAgICAgIEFDRV9BbGxvY2F0b3IgKmFsbG9jID0gMCk7CgoKCiAgQUNFX1dTdHJpbmcgKHNp emVfdCBsZW4sIEFDRV9BbGxvY2F0b3IgKmFsbG9jID0gMCk7CgoKICBBQ0VfV1N0cmluZyAoY29u c3QgQUNFX1dTdHJpbmcgJnMpOwoKCiAgQUNFX1dTdHJpbmcgKEFDRV9XU1RSSU5HX1RZUEUgYywg QUNFX0FsbG9jYXRvciAqYWxsb2MgPSAwKTsKCgogIH5BQ0VfV1N0cmluZyAodm9pZCk7CgoKCiAg QUNFX1dTVFJJTkdfVFlQRSBvcGVyYXRvciBbXSAoc2l6ZV90IHNsb3QpIGNvbnN0OwoKCgogIEFD RV9XU1RSSU5HX1RZUEUgJm9wZXJhdG9yIFtdIChzaXplX3Qgc2xvdCk7CgoKICBBQ0VfV1N0cmlu ZyAmb3BlcmF0b3IgPSAoY29uc3QgQUNFX1dTdHJpbmcgJik7CgoKICB2b2lkIHNldCAoY29uc3Qg QUNFX1dTVFJJTkdfVFlQRSAqcyk7CgoKICB2b2lkIHNldCAoY29uc3QgQUNFX1dTVFJJTkdfVFlQ RSAqcywKICAgICAgICAgICAgc2l6ZV90IGxlbik7CgoKCgoKCiAgQUNFX1dTdHJpbmcgc3Vic3Ry aW5nIChzaXplX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbmd0aCA9IC0xKSBjb25zdDsKCgogIEFDRV9X U3RyaW5nIHN1YnN0ciAoc2l6ZV90IG9mZnNldCwgc3NpemVfdCBsZW5ndGggPSAtMSkgY29uc3Q7 CgoKICBBQ0VfV1N0cmluZyAmb3BlcmF0b3IgKz0gKGNvbnN0IEFDRV9XU3RyaW5nICYpOwoKCiAg QUNFX1dTdHJpbmcgJm9wZXJhdG9yICs9IChjb25zdCBBQ0VfV1NUUklOR19UWVBFICopOwoKCiAg dV9sb25nIGhhc2ggKHZvaWQpIGNvbnN0OwoKCiAgc2l6ZV90IGxlbmd0aCAodm9pZCkgY29uc3Q7 CgoKICBzaXplX3QgYnVmZmVyX3NpemUodm9pZCkgY29uc3Q7CgoKICBBQ0VfV1NUUklOR19UWVBF ICpyZXAgKHZvaWQpIGNvbnN0OwoKCgogIGNoYXIgKmNoYXJfcmVwICh2b2lkKSBjb25zdDsKCgoK ICBBQ0VfVVNIT1JUMTYgKnVzaG9ydF9yZXAgKHZvaWQpIGNvbnN0OwoKCiAgY29uc3QgQUNFX1dT VFJJTkdfVFlQRSAqZmFzdF9yZXAgKHZvaWQpIGNvbnN0OwoKCiAgY29uc3QgQUNFX1dTVFJJTkdf VFlQRSAqY19zdHIgKHZvaWQpIGNvbnN0OwoKCgogIGludCBzdHJzdHIgKGNvbnN0IEFDRV9XU3Ry aW5nICZzKSBjb25zdDsKCgoKICBpbnQgZmluZCAoY29uc3QgQUNFX1dTdHJpbmcgJnN0ciwgaW50 IHBvcyA9IDApIGNvbnN0OwoKCgogIGludCBmaW5kIChjb25zdCBBQ0VfV1NUUklOR19UWVBFICpz LCBpbnQgcG9zID0gMCkgY29uc3Q7CgoKCiAgaW50IGZpbmQgKEFDRV9XU1RSSU5HX1RZUEUgYywg aW50IHBvcyA9IDApIGNvbnN0OwoKCgogIGludCByZmluZCAoQUNFX1dTVFJJTkdfVFlQRSBjLCBp bnQgcG9zID0gbnBvcykgY29uc3Q7CgoKICBpbnQgb3BlcmF0b3IgPT0gKGNvbnN0IEFDRV9XU3Ry aW5nICZzKSBjb25zdDsKCgogIGludCBvcGVyYXRvciA8IChjb25zdCBBQ0VfV1N0cmluZyAmcykg Y29uc3Q7CgoKICBpbnQgb3BlcmF0b3IgPiAoY29uc3QgQUNFX1dTdHJpbmcgJnMpIGNvbnN0OwoK CiAgaW50IG9wZXJhdG9yICE9IChjb25zdCBBQ0VfV1N0cmluZyAmcykgY29uc3Q7CgoKICBpbnQg Y29tcGFyZSAoY29uc3QgQUNFX1dTdHJpbmcgJnMpIGNvbnN0OwoKCiAgdm9pZCBkdW1wICh2b2lk KSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCgogIHN0YXRpYyBzaXplX3Qgc3RybGVuIChj b25zdCBBQ0VfV1NUUklOR19UWVBFICopOwoKCiAgc3RhdGljIGNvbnN0IEFDRV9XU1RSSU5HX1RZ UEUgKnN0cnN0ciAoY29uc3QgQUNFX1dTVFJJTkdfVFlQRSAqczEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1dTVFJJTkdfVFlQRSAqczIpOwoKCgoK CgoKICB2b2lkIHJlc2l6ZSAoc2l6ZV90IGxlbik7Cgpwcml2YXRlOgoKCgoKCiAgdm9pZCBjaGVj a19hbGxvY2F0ZSAoc2l6ZV90IGxlbik7CgoKICBBQ0VfQWxsb2NhdG9yICphbGxvY2F0b3JfOwoK CiAgc2l6ZV90IGJ1Zl9sZW5fOwoKCiAgc2l6ZV90IGxlbl87CgoKICBBQ0VfV1NUUklOR19UWVBF ICpyZXBfOwoKCiAgc3RhdGljIEFDRV9XU1RSSU5HX1RZUEUgTlVMTF9XU3RyaW5nXzsKfTsKCiAg ICAgICAgICAgaW5saW5lIEFDRV9XU3RyaW5nIG9wZXJhdG9yKyAoY29uc3QgQUNFX1dTdHJpbmcg JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF X1dTdHJpbmcgJik7CgogICAgICAgICAgIG9zdHJlYW0gJm9wZXJhdG9yIDw8IChvc3RyZWFtICYs IGNvbnN0IEFDRV9XU3RyaW5nICYpOwojIDQzOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIKY2xhc3MgQUNFX1NTdHJpbmcKewpwdWJsaWM6 CgogIHN0YXRpYyBjb25zdCBpbnQgbnBvczsKCgogIEFDRV9TU3RyaW5nIChBQ0VfQWxsb2NhdG9y ICphbGxvYyA9IDApOwoKCiAgQUNFX1NTdHJpbmcgKGNvbnN0IGNoYXIgKnMsIEFDRV9BbGxvY2F0 b3IgKmFsbG9jID0gMCk7CgoKCiAgQUNFX1NTdHJpbmcgKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBs ZW4sIEFDRV9BbGxvY2F0b3IgKmFsbG9jID0gMCk7CgoKICBBQ0VfU1N0cmluZyAoY29uc3QgQUNF X1NTdHJpbmcgJik7CgoKICBBQ0VfU1N0cmluZyAoY2hhciBjLCBBQ0VfQWxsb2NhdG9yICphbGxv YyA9IDApOwoKCiAgfkFDRV9TU3RyaW5nICh2b2lkKTsKCgoKICBjaGFyIG9wZXJhdG9yIFtdIChz aXplX3Qgc2xvdCkgY29uc3Q7CgoKCiAgY2hhciAmb3BlcmF0b3IgW10gKHNpemVfdCBzbG90KTsK CgogIEFDRV9TU3RyaW5nICZvcGVyYXRvciA9IChjb25zdCBBQ0VfU1N0cmluZyAmKTsKCgoKCgoK ICBBQ0VfU1N0cmluZyBzdWJzdHJpbmcgKHNpemVfdCBvZmZzZXQsIHNzaXplX3QgbGVuZ3RoID0g LTEpIGNvbnN0OwoKCiAgQUNFX1NTdHJpbmcgc3Vic3RyIChzaXplX3Qgb2Zmc2V0LCBzc2l6ZV90 IGxlbmd0aCA9IC0xKSBjb25zdDsKCgogIHVfbG9uZyBoYXNoICh2b2lkKSBjb25zdDsKCgogIHNp emVfdCBsZW5ndGggKHZvaWQpIGNvbnN0OwoKCgogIHZvaWQgcmVwIChjaGFyICpzKTsKCgogIGNv bnN0IGNoYXIgKnJlcCAodm9pZCkgY29uc3Q7CgoKICBjb25zdCBjaGFyICpmYXN0X3JlcCAodm9p ZCkgY29uc3Q7CgoKICBjb25zdCBjaGFyICpjX3N0ciAodm9pZCkgY29uc3Q7CgoKCiAgaW50IHN0 cnN0ciAoY29uc3QgQUNFX1NTdHJpbmcgJnMpIGNvbnN0OwoKCgogIGludCBmaW5kIChjb25zdCBB Q0VfU1N0cmluZyAmc3RyLCBpbnQgcG9zID0gMCkgY29uc3Q7CgoKCiAgaW50IGZpbmQgKGNvbnN0 IGNoYXIgKnMsIGludCBwb3MgPSAwKSBjb25zdDsKCgoKICBpbnQgZmluZCAoY2hhciBjLCBpbnQg cG9zID0gMCkgY29uc3Q7CgoKCiAgaW50IHJmaW5kIChjaGFyIGMsIGludCBwb3MgPSBucG9zKSBj b25zdDsKCgogIGludCBvcGVyYXRvciA9PSAoY29uc3QgQUNFX1NTdHJpbmcgJnMpIGNvbnN0OwoK CiAgaW50IG9wZXJhdG9yIDwgKGNvbnN0IEFDRV9TU3RyaW5nICZzKSBjb25zdDsKCgogIGludCBv cGVyYXRvciA+IChjb25zdCBBQ0VfU1N0cmluZyAmcykgY29uc3Q7CgoKICBpbnQgb3BlcmF0b3Ig IT0gKGNvbnN0IEFDRV9TU3RyaW5nICZzKSBjb25zdDsKCgogIGludCBjb21wYXJlIChjb25zdCBB Q0VfU1N0cmluZyAmcykgY29uc3Q7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3Ry dWN0IF9fQWNlIHt9OwoKcHJpdmF0ZToKCiAgQUNFX0FsbG9jYXRvciAqYWxsb2NhdG9yXzsKCgog IHNpemVfdCBsZW5fOwoKCiAgY2hhciAqcmVwXzsKfTsKCgogICAgICAgICAgIG9zdHJlYW0gJm9w ZXJhdG9yIDw8IChvc3RyZWFtICYsIGNvbnN0IEFDRV9TU3RyaW5nICYpOwojIDU4MCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIKY2xhc3Mg QUNFX1Rva2VuaXplcgp7CnB1YmxpYzoKCgoKCgoKCiAgQUNFX1Rva2VuaXplciAoQUNFX1RDSEFS ICpidWZmZXIpOwojIDYxMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL1NTdHJpbmcuaCIKICBpbnQgZGVsaW1pdGVyIChBQ0VfVENIQVIgZCk7CiMgNjMxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1N0cmluZy5oIgog IGludCBkZWxpbWl0ZXJfcmVwbGFjZSAoQUNFX1RDSEFSIGQsIEFDRV9UQ0hBUiByZXBsYWNlbWVu dCk7CiMgNjcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv U1N0cmluZy5oIgogIGludCBwcmVzZXJ2ZV9kZXNpZ25hdG9ycyAoQUNFX1RDSEFSIHN0YXJ0LCBB Q0VfVENIQVIgc3RvcCwgaW50IHN0cmlwPTEpOwoKCiAgQUNFX1RDSEFSICpuZXh0ICh2b2lkKTsK CiAgZW51bSB7CiAgICBNQVhfREVMSU1JVEVSUz0xNiwKICAgIE1BWF9QUkVTRVJWRVM9MTYKICB9 OwoKcHJvdGVjdGVkOgoKCiAgaW50IGlzX2RlbGltaXRlciAoQUNFX1RDSEFSIGQsIGludCAmcmVw bGFjZSwgQUNFX1RDSEFSICZyKTsKCgoKCgoKICBpbnQgaXNfcHJlc2VydmVfZGVzaWduYXRvciAo QUNFX1RDSEFSIHN0YXJ0LCBBQ0VfVENIQVIgJnN0b3AsIGludCAmc3RyaXApOwoKcHJpdmF0ZToK ICBBQ0VfVENIQVIgKmJ1ZmZlcl87CiAgaW50IGluZGV4XzsKIyA3MDggIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TU3RyaW5nLmgiCiAgY2xhc3MgUHJlc2Vy dmVfRW50cnkKICB7CiAgcHVibGljOgoKCgoKCiAgICBBQ0VfVENIQVIgc3RhcnRfOwogICAgQUNF X1RDSEFSIHN0b3BfOwogICAgaW50IHN0cmlwXzsKICB9OwoKCiAgUHJlc2VydmVfRW50cnkgcHJl c2VydmVzX1tNQVhfUFJFU0VSVkVTXTsKCgogIGludCBwcmVzZXJ2ZXNfaW5kZXhfOwojIDczNCAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIK ICBjbGFzcyBEZWxpbWl0ZXJfRW50cnkKICB7CiAgcHVibGljOgoKCgoKCgoKICAgIEFDRV9UQ0hB UiBkZWxpbWl0ZXJfOwogICAgQUNFX1RDSEFSIHJlcGxhY2VtZW50XzsKICAgIGludCByZXBsYWNl XzsKICB9OwoKCiAgRGVsaW1pdGVyX0VudHJ5IGRlbGltaXRlcnNfW01BWF9ERUxJTUlURVJTXTsK CgogIGludCBkZWxpbWl0ZXJfaW5kZXhfOwp9OwojIDc2OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIKY2xhc3MgQUNFX0F1dG9fU3RyaW5n X0ZyZWUKewpwdWJsaWM6CiAgZXhwbGljaXQgQUNFX0F1dG9fU3RyaW5nX0ZyZWUgKGNoYXIqIHAg PSAwKTsKICBBQ0VfQXV0b19TdHJpbmdfRnJlZSAoQUNFX0F1dG9fU3RyaW5nX0ZyZWUgJnJocyk7 CiAgQUNFX0F1dG9fU3RyaW5nX0ZyZWUmIG9wZXJhdG9yPSAoQUNFX0F1dG9fU3RyaW5nX0ZyZWUg JnJocyk7CiAgfkFDRV9BdXRvX1N0cmluZ19GcmVlICh2b2lkKTsKCiAgY2hhciogb3BlcmF0b3Iq ICgpIGNvbnN0OwogIGNoYXIgb3BlcmF0b3JbXSAoaW50IGkpIGNvbnN0OwogIGNoYXIqIGdldCAo dm9pZCkgY29uc3Q7CiAgY2hhciogcmVsZWFzZSAodm9pZCk7CiAgdm9pZCByZXNldCAoY2hhciog cCA9IDApOwoKcHJpdmF0ZToKICBjaGFyKiBwXzsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TU3RyaW5nLmkiIDEKCgoKIyAxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX0Jhc2UuaCIgMQoj IDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TU3RyaW5n LmkiIDIKCgoKaW5saW5lCkFDRV9DU3RyaW5nOjpBQ0VfQ1N0cmluZyAoQUNFX0FsbG9jYXRvciAq YWxsb2MpCiAgOiBhbGxvY2F0b3JfIChhbGxvYyA/IGFsbG9jIDogQUNFX0FsbG9jYXRvcjo6aW5z dGFuY2UgKCkpLAogICAgbGVuXyAoMCksCiAgICBidWZfbGVuXyAoMCksCiAgICByZXBfICgmQUNF X0NTdHJpbmc6Ok5VTExfQ1N0cmluZ18pLAogICAgcmVsZWFzZV8gKDApCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKfQoKCgppbmxpbmUKQUNFX0NTdHJpbmc6OkFD RV9DU3RyaW5nIChjb25zdCBjaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9B bGxvY2F0b3IgKmFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWxlYXNlKQog IDogYWxsb2NhdG9yXyAoYWxsb2MgPyBhbGxvYyA6IEFDRV9BbGxvY2F0b3I6Omluc3RhbmNlICgp KSwKICAgIGxlbl8gKDApLAogICAgYnVmX2xlbl8gKDApLAogICAgcmVwXyAoMCksCiAgICByZWxl YXNlXyAoMCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBz aXplX3QgbGVuZ3RoOwogIGlmIChzICE9IDApCiAgICBsZW5ndGggPSBBQ0VfT1M6OnN0cmxlbiAo cyk7CiAgZWxzZQogICAgbGVuZ3RoID0gMDsKCiAgdGhpcy0+c2V0IChzLCBsZW5ndGgsIHJlbGVh c2UpOwp9CgppbmxpbmUKQUNFX0NTdHJpbmc6OkFDRV9DU3RyaW5nIChjaGFyIGMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2MpCiAgOiBhbGxvY2F0b3JfIChh bGxvYyA/IGFsbG9jIDogQUNFX0FsbG9jYXRvcjo6aW5zdGFuY2UgKCkpLAogICAgbGVuXyAoMCks CiAgICBidWZfbGVuXyAoMCksCiAgICByZXBfICgwKSwKICAgIHJlbGVhc2VfICgwKQp7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHRoaXMtPnNldCAoJmMsIDEs IDEpOwp9CgoKCmlubGluZQpBQ0VfQ1N0cmluZzo6QUNFX0NTdHJpbmcgKGNvbnN0IGNoYXIgKnMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICBBQ0VfQWxsb2NhdG9yICphbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgcmVsZWFzZSkKICA6IGFsbG9jYXRvcl8gKGFsbG9jID8gYWxsb2MgOiBBQ0VfQWxsb2NhdG9y OjppbnN0YW5jZSAoKSksCiAgICBsZW5fICgwKSwKICAgIGJ1Zl9sZW5fICgwKSwKICAgIHJlcF8g KDApLAogICAgcmVsZWFzZV8gKDApCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCiAgdGhpcy0+c2V0IChzLCBsZW4sIHJlbGVhc2UpOwp9CgoKCmlubGluZQpBQ0Vf Q1N0cmluZzo6QUNFX0NTdHJpbmcgKGNvbnN0IEFDRV9DU3RyaW5nICZzKQogIDogYWxsb2NhdG9y XyAocy5hbGxvY2F0b3JfID8gcy5hbGxvY2F0b3JfIDogQUNFX0FsbG9jYXRvcjo6aW5zdGFuY2Ug KCkpLAogICAgbGVuXyAoMCksCiAgICBidWZfbGVuXyAoMCksCiAgICByZXBfICgwKSwKICAgIHJl bGVhc2VfICgwKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog IHRoaXMtPnNldCAocy5yZXBfLCBzLmxlbl8sIDEpOwp9CgppbmxpbmUKQUNFX0NTdHJpbmc6On5B Q0VfQ1N0cmluZyAodm9pZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgdGhpcy0+c2V0ICgwLCAwLCAwKTsKfQoKaW5saW5lIHZvaWQKQUNFX0NTdHJpbmc6 OmR1bXAgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9 CgoKCmlubGluZSBBQ0VfQ1N0cmluZyAmCkFDRV9DU3RyaW5nOjpvcGVyYXRvcj0gKGNvbnN0IEFD RV9DU3RyaW5nICZzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CiAgaWYgKHRoaXMgIT0gJnMpCiAgICB0aGlzLT5zZXQgKHMucmVwXywgcy5sZW5fLCAxKTsKCiAg cmV0dXJuICp0aGlzOwp9CgppbmxpbmUgdm9pZApBQ0VfQ1N0cmluZzo6c2V0IChjb25zdCBjaGFy ICpzLCBpbnQgcmVsZWFzZSkKewogIHNpemVfdCBsZW5ndGg7CiAgaWYgKHMgIT0gMCkKICAgIGxl bmd0aCA9IEFDRV9PUzo6c3RybGVuIChzKTsKICBlbHNlCiAgICBsZW5ndGggPSAwOwoKICB0aGlz LT5zZXQgKHMsIGxlbmd0aCwgcmVsZWFzZSk7Cn0KCmlubGluZSBzaXplX3QKQUNFX0NTdHJpbmc6 Omxlbmd0aCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICByZXR1cm4gdGhpcy0+bGVuXzsKfQoKaW5saW5lIEFDRV9DU3RyaW5nCkFDRV9DU3RyaW5n OjpzdWJzdHIgKHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgbGVu Z3RoKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnN1YnN0cmluZyAob2Zmc2V0LCBsZW5ndGgpOwp9 CgoKCmlubGluZSBjb25zdCBjaGFyICYKQUNFX0NTdHJpbmc6Om9wZXJhdG9yW10gKHNpemVfdCBz bG90KSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBy ZXR1cm4gdGhpcy0+cmVwX1tzbG90XTsKfQoKCgppbmxpbmUgY2hhciAmCkFDRV9DU3RyaW5nOjpv cGVyYXRvcltdIChzaXplX3Qgc2xvdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnJlcF9bc2xvdF07Cn0KCgoKaW5saW5lIGNoYXIgKgpB Q0VfQ1N0cmluZzo6cmVwICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICBjaGFyICpuZXdfc3RyaW5nOwogIGRvIHsgdHJ5IHsgbmV3X3N0cmluZyA9IG5l dyBjaGFyW3RoaXMtPmxlbl8gKyAxXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vy cm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKICBBQ0VfT1M6 OnN0cm5jcHkgKG5ld19zdHJpbmcsIHRoaXMtPnJlcF8sIHRoaXMtPmxlbl8pOwogIG5ld19zdHJp bmdbdGhpcy0+bGVuX10gPSAnXDAnOwoKICByZXR1cm4gbmV3X3N0cmluZzsKfQoKaW5saW5lIGNv bnN0IGNoYXIgKgpBQ0VfQ1N0cmluZzo6ZmFzdF9yZXAgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g dGhpcy0+cmVwXzsKfQoKaW5saW5lIGNvbnN0IGNoYXIgKgpBQ0VfQ1N0cmluZzo6Y19zdHIgKHZv aWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cmVwXzsKfQoKCgppbmxpbmUgaW50CkFDRV9DU3Ry aW5nOjpvcGVyYXRvcj09IChjb25zdCBBQ0VfQ1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiB0aGlzLT5sZW5fID09IHMu bGVuXwogICAgJiYgQUNFX09TOjpzdHJuY21wICh0aGlzLT5yZXBfLCBzLnJlcF8sIHRoaXMtPmxl bl8pID09IDA7Cn0KCgoKaW5saW5lIGludApBQ0VfQ1N0cmluZzo6b3BlcmF0b3IgPCAoY29uc3Qg QUNFX0NTdHJpbmcgJnMpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICByZXR1cm4gKHRoaXMtPnJlcF8gJiYgcy5yZXBfKQogICAgPyBBQ0VfT1M6OnN0 cmNtcCAodGhpcy0+cmVwXywgcy5yZXBfKSA8IDAKICAgIDogKChzLnJlcF8pID8gMSA6IDAgKTsK fQoKCgppbmxpbmUgaW50CkFDRV9DU3RyaW5nOjpvcGVyYXRvciA+IChjb25zdCBBQ0VfQ1N0cmlu ZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog IHJldHVybiAodGhpcy0+cmVwXyAmJiBzLnJlcF8pCiAgICA/IEFDRV9PUzo6c3RyY21wICh0aGlz LT5yZXBfLCBzLnJlcF8pID4gMAogICAgOiAoKHRoaXMtPnJlcF8pID8gMSA6IDAgKTsKfQoKCgoK aW5saW5lIGludApBQ0VfQ1N0cmluZzo6b3BlcmF0b3IhPSAoY29uc3QgQUNFX0NTdHJpbmcgJnMp IGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVy biAhKCp0aGlzID09IHMpOwp9CgppbmxpbmUgaW50CkFDRV9DU3RyaW5nOjpjb21wYXJlIChjb25z dCBBQ0VfQ1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgoKCgoKICBpbnQgc21hbGxlcl9sZW5ndGggPSAodGhpcy0+bGVuXyA8IHMubGVuXykg PyB0aGlzLT5sZW5fIDogcy5sZW5fOwogIGludCByZXN1bHQgPSBBQ0VfT1M6OnN0cm5jbXAgKHRo aXMtPnJlcF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5yZXBfLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsZXJfbGVuZ3RoKTsKCiAgaWYgKHJlc3VsdCAh PSAwIHx8IHMubGVuXyA9PSB0aGlzLT5sZW5fKQogICAgcmV0dXJuIHJlc3VsdDsKCiAgZWxzZQoK ICAgIGlmICh0aGlzLT5sZW5fID4gcy5sZW5fKQogICAgICByZXR1cm4gKHRoaXMtPnJlcF9bc21h bGxlcl9sZW5ndGhdIC0gJ1wwJyk7CgogICAgZWxzZQogICAgICByZXR1cm4gKCdcMCcgLSBzLnJl cF9bc21hbGxlcl9sZW5ndGhdKTsKfQoKaW5saW5lIGludApBQ0VfQ1N0cmluZzo6ZmluZCAoY29u c3QgY2hhciAqcywgaW50IHBvcykgY29uc3QKewogIGNoYXIgKnN1YnN0ciA9IHRoaXMtPnJlcF8g KyBwb3M7CiAgc2l6ZV90IGxlbiA9IEFDRV9PUzo6c3RybGVuIChzKTsKICBjaGFyICpwb2ludGVy ID0gQUNFX09TOjpzdHJuc3RyIChzdWJzdHIsIHMsIGxlbik7CiAgaWYgKHBvaW50ZXIgPT0gMCkK ICAgIHJldHVybiBBQ0VfQ1N0cmluZzo6bnBvczsKICBlbHNlCiAgICByZXR1cm4gcG9pbnRlciAt IHRoaXMtPnJlcF87Cn0KCmlubGluZSBpbnQKQUNFX0NTdHJpbmc6OmZpbmQgKGNoYXIgYywgaW50 IHBvcykgY29uc3QKewogIGNoYXIgKnN1YnN0ciA9IHRoaXMtPnJlcF8gKyBwb3M7CiAgY2hhciAq cG9pbnRlciA9IEFDRV9PUzo6c3RybmNociAoc3Vic3RyLCBjLCB0aGlzLT5sZW5fIC0gcG9zKTsK ICBpZiAocG9pbnRlciA9PSAwKQogICAgcmV0dXJuIEFDRV9DU3RyaW5nOjpucG9zOwogIGVsc2UK ICAgIHJldHVybiBwb2ludGVyIC0gdGhpcy0+cmVwXzsKfQoKaW5saW5lIGludApBQ0VfQ1N0cmlu Zzo6ZmluZCAoY29uc3QgQUNFX0NTdHJpbmcgJnN0ciwgaW50IHBvcykgY29uc3QKewogIHJldHVy biB0aGlzLT5maW5kIChzdHIucmVwXywgcG9zKTsKfQoKaW5saW5lIGludApBQ0VfQ1N0cmluZzo6 c3Ryc3RyIChjb25zdCBBQ0VfQ1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIHRoaXMtPmZpbmQgKHMucmVwXyk7Cn0KCmlubGlu ZSBpbnQKQUNFX0NTdHJpbmc6OnJmaW5kIChjaGFyIGMsIGludCBwb3MpIGNvbnN0CnsKICBpZiAo cG9zID09IEFDRV9DU3RyaW5nOjpucG9zKQogICAgcG9zID0gdGhpcy0+bGVuXzsKCiAgZm9yIChp bnQgaSA9IHBvcyAtIDE7IGkgPj0gMDsgaS0tKQogICAgaWYgKHRoaXMtPnJlcF9baV0gPT0gYykK ICAgICAgcmV0dXJuIGk7CgogIHJldHVybiBBQ0VfQ1N0cmluZzo6bnBvczsKfQoKaW5saW5lIHVf bG9uZwpBQ0VfQ1N0cmluZzo6aGFzaCAodm9pZCkgY29uc3QKewogIHJldHVybiBBQ0U6Omhhc2hf cGp3ICh0aGlzLT5yZXBfLCB0aGlzLT5sZW5fKTsKfQoKaW5saW5lIEFDRV9DU3RyaW5nCm9wZXJh dG9yKyAoY29uc3QgQUNFX0NTdHJpbmcgJnMsIGNvbnN0IEFDRV9DU3RyaW5nICZ0KQp7CiAgQUNF X0NTdHJpbmcgdGVtcCAocyk7CiAgdGVtcCArPSB0OwogIHJldHVybiB0ZW1wOwp9CgppbmxpbmUK QUNFX1NTdHJpbmc6On5BQ0VfU1N0cmluZyAodm9pZCkKewp9CgppbmxpbmUgQUNFX1NTdHJpbmcK QUNFX1NTdHJpbmc6OnN1YnN0ciAoc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg c3NpemVfdCBsZW5ndGgpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+c3Vic3RyaW5nIChvZmZzZXQs IGxlbmd0aCk7Cn0KCgoKaW5saW5lIGNoYXIKQUNFX1NTdHJpbmc6Om9wZXJhdG9yW10gKHNpemVf dCBzbG90KSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICByZXR1cm4gdGhpcy0+cmVwX1tzbG90XTsKfQoKCgppbmxpbmUgY2hhciAmCkFDRV9TU3RyaW5n OjpvcGVyYXRvcltdIChzaXplX3Qgc2xvdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnJlcF9bc2xvdF07Cn0KCgoKaW5saW5lIGNvbnN0 IGNoYXIgKgpBQ0VfU1N0cmluZzo6cmVwICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5yZXBfOwp9CgoKCmlubGluZSBjb25zdCBj aGFyICoKQUNFX1NTdHJpbmc6OmZhc3RfcmVwICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnJlcF87Cn0KCgoKaW5saW5l IGNvbnN0IGNoYXIgKgpBQ0VfU1N0cmluZzo6Y19zdHIgKHZvaWQpIGNvbnN0CnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+cmVwXzsKfQoKCgppbmxp bmUgaW50CkFDRV9TU3RyaW5nOjpvcGVyYXRvcj09IChjb25zdCBBQ0VfU1N0cmluZyAmcykgY29u c3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRo aXMtPmxlbl8gPT0gcy5sZW5fCiAgICAmJiBBQ0VfT1M6OnN0cmNtcCAodGhpcy0+cmVwXywgcy5y ZXBfKSA9PSAwOwp9CgoKCmlubGluZSBpbnQKQUNFX1NTdHJpbmc6Om9wZXJhdG9yIDwgKGNvbnN0 IEFDRV9TU3RyaW5nICZzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCiAgcmV0dXJuICh0aGlzLT5yZXBfICYmIHMucmVwXykKICAgID8gQUNFX09TOjpz dHJjbXAgKHRoaXMtPnJlcF8sIHMucmVwXykgPCAwCiAgICA6ICgocy5yZXBfKSA/IDEgOiAwICk7 Cn0KCgoKaW5saW5lIGludApBQ0VfU1N0cmluZzo6b3BlcmF0b3IgPiAoY29uc3QgQUNFX1NTdHJp bmcgJnMpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICByZXR1cm4gKHRoaXMtPnJlcF8gJiYgcy5yZXBfKQogICAgPyBBQ0VfT1M6OnN0cmNtcCAodGhp cy0+cmVwXywgcy5yZXBfKSA+IDAKICAgIDogKCh0aGlzLT5yZXBfKSA/IDEgOiAwICk7Cn0KCgoK aW5saW5lIGludApBQ0VfU1N0cmluZzo6b3BlcmF0b3IhPSAoY29uc3QgQUNFX1NTdHJpbmcgJnMp IGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVy biAhKCp0aGlzID09IHMpOwp9CgppbmxpbmUgaW50CkFDRV9TU3RyaW5nOjpjb21wYXJlIChjb25z dCBBQ0VfU1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6c3RyY21wICh0aGlzLT5yZXBfLCBzLnJlcF8pOwp9Cgpp bmxpbmUgaW50CkFDRV9TU3RyaW5nOjpmaW5kIChjb25zdCBjaGFyICpzLCBpbnQgcG9zKSBjb25z dAp7CiAgY2hhciAqc3Vic3RyID0gdGhpcy0+cmVwXyArIHBvczsKICBjaGFyICpwb2ludGVyID0g QUNFX09TOjpzdHJzdHIgKHN1YnN0ciwgcyk7CiAgaWYgKHBvaW50ZXIgPT0gMCkKICAgIHJldHVy biBBQ0VfU1N0cmluZzo6bnBvczsKICBlbHNlCiAgICByZXR1cm4gcG9pbnRlciAtIHRoaXMtPnJl cF87Cn0KCmlubGluZSBpbnQKQUNFX1NTdHJpbmc6OmZpbmQgKGNoYXIgYywgaW50IHBvcykgY29u c3QKewogIGNoYXIgKnN1YnN0ciA9IHRoaXMtPnJlcF8gKyBwb3M7CiAgY2hhciAqcG9pbnRlciA9 IEFDRV9PUzo6c3RyY2hyIChzdWJzdHIsIGMpOwogIGlmIChwb2ludGVyID09IDApCiAgICByZXR1 cm4gQUNFX1NTdHJpbmc6Om5wb3M7CiAgZWxzZQogICAgcmV0dXJuIHBvaW50ZXIgLSB0aGlzLT5y ZXBfOwp9CgppbmxpbmUgaW50CkFDRV9TU3RyaW5nOjpzdHJzdHIgKGNvbnN0IEFDRV9TU3RyaW5n ICZzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1 cm4gdGhpcy0+ZmluZCAocy5yZXBfKTsKfQoKaW5saW5lIGludApBQ0VfU1N0cmluZzo6ZmluZCAo Y29uc3QgQUNFX1NTdHJpbmcgJnN0ciwgaW50IHBvcykgY29uc3QKewogIHJldHVybiB0aGlzLT5m aW5kIChzdHIucmVwXywgcG9zKTsKfQoKaW5saW5lIGludApBQ0VfU1N0cmluZzo6cmZpbmQgKGNo YXIgYywgaW50IHBvcykgY29uc3QKewogIGlmIChwb3MgPT0gQUNFX1NTdHJpbmc6Om5wb3MpCiAg ICBwb3MgPSB0aGlzLT5sZW5fOwoKICBmb3IgKGludCBpID0gcG9zIC0gMTsgaSA+PSAwOyBpLS0p CiAgICBpZiAodGhpcy0+cmVwX1tpXSA9PSBjKQogICAgICByZXR1cm4gaTsKCiAgcmV0dXJuIEFD RV9TU3RyaW5nOjpucG9zOwp9CgppbmxpbmUgdV9sb25nCkFDRV9TU3RyaW5nOjpoYXNoICh2b2lk KSBjb25zdAp7CiAgcmV0dXJuIEFDRTo6aGFzaF9wancgKHRoaXMtPnJlcF8pOwp9CgppbmxpbmUg c2l6ZV90CkFDRV9TU3RyaW5nOjpsZW5ndGggKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmxlbl87Cn0KCmlubGluZSBzaXpl X3QKQUNFX1dTdHJpbmc6Omxlbmd0aCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bGVuXzsKfQoKaW5saW5lIEFDRV9XU3Ry aW5nCm9wZXJhdG9yKyAoY29uc3QgQUNFX1dTdHJpbmcgJnMsCiAgICAgICAgICAgY29uc3QgQUNF X1dTdHJpbmcgJnQpCnsKICBBQ0VfV1N0cmluZyB0ZW1wIChzLmxlbmd0aCAoKSArIHQubGVuZ3Ro ICgpKTsKICB0ZW1wID0gczsKICB0ZW1wICs9IHQ7CiAgcmV0dXJuIHRlbXA7Cn0KCmlubGluZSBB Q0VfV1N0cmluZwpBQ0VfV1N0cmluZzo6c3Vic3RyIChzaXplX3Qgb2Zmc2V0LAogICAgICAgICAg ICAgICAgICAgICBzc2l6ZV90IGxlbmd0aCkgY29uc3QKewogIHJldHVybiB0aGlzLT5zdWJzdHJp bmcgKG9mZnNldCwgbGVuZ3RoKTsKfQoKCgppbmxpbmUgQUNFX1dTVFJJTkdfVFlQRSAqCkFDRV9X U3RyaW5nOjpyZXAgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgogIEFDRV9XU1RSSU5HX1RZUEUgKnQ7CiAgZG8geyB0cnkgeyB0ID0gbmV3IEFDRV9XU1RS SU5HX1RZUEVbdGhpcy0+bGVuXyArIDFdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9f ZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwoKCiAgQUNF X09TOjptZW1jcHkgKHQsCiAgICAgICAgICAgICAgICAgIHRoaXMtPnJlcF8sCiAgICAgICAgICAg ICAgICAgIHRoaXMtPmxlbl8gKiBzaXplb2YgKEFDRV9XU1RSSU5HX1RZUEUpKTsKCgogIHRbdGhp cy0+bGVuX10gPSAwOwoKICByZXR1cm4gdDsKfQoKCgppbmxpbmUgY29uc3QgQUNFX1dTVFJJTkdf VFlQRSAqCkFDRV9XU3RyaW5nOjpmYXN0X3JlcCAodm9pZCkgY29uc3QKewogIGlmICh0aGlzLT5y ZXBfID09IDApCiAgICByZXR1cm4gJkFDRV9XU3RyaW5nOjpOVUxMX1dTdHJpbmdfOwogIGVsc2UK ICAgIHJldHVybiB0aGlzLT5yZXBfOwp9CgppbmxpbmUgY29uc3QgQUNFX1dTVFJJTkdfVFlQRSAq CkFDRV9XU3RyaW5nOjpjX3N0ciAodm9pZCkgY29uc3QKewogIGlmICh0aGlzLT5yZXBfID09IDAp CiAgICByZXR1cm4gJkFDRV9XU3RyaW5nOjpOVUxMX1dTdHJpbmdfOwogIGVsc2UKICAgIHJldHVy biB0aGlzLT5yZXBfOwp9CgoKCmlubGluZSBpbnQKQUNFX1dTdHJpbmc6Om9wZXJhdG9yPT0gKGNv bnN0IEFDRV9XU3RyaW5nICZzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bGVuXyA9PSBzLmxlbl8KICAgICYmIEFDRV9PUzo6 bWVtY21wICgoY29uc3Qgdm9pZCAqKSB0aGlzLT5yZXBfLAogICAgICAgICAgICAgICAgICAgICAg IChjb25zdCB2b2lkICopIHMucmVwXywKICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5sZW5f ICogc2l6ZW9mIChBQ0VfV1NUUklOR19UWVBFKSkgPT0gMDsKfQoKCgppbmxpbmUgaW50CkFDRV9X U3RyaW5nOjpvcGVyYXRvciA8IChjb25zdCBBQ0VfV1N0cmluZyAmcykgY29uc3QKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmxlbl8gPCBz Lmxlbl8KICAgICAgICAgID8gQUNFX09TOjptZW1jbXAgKChjb25zdCB2b2lkICopIHRoaXMtPnJl cF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSBzLnJlcF8sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5sZW5fICogc2l6ZW9mIChBQ0VfV1NUUklO R19UWVBFKSkgPD0gMAogICAgICAgICAgOiBBQ0VfT1M6Om1lbWNtcCAoKGNvbnN0IHZvaWQgKikg dGhpcy0+cmVwXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHMu cmVwXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMubGVuXyAqIHNpemVvZiAoQUNFX1dT VFJJTkdfVFlQRSkpIDwgMDsKfQoKCgppbmxpbmUgaW50CkFDRV9XU3RyaW5nOjpvcGVyYXRvciA+ IChjb25zdCBBQ0VfV1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmxlbl8gPD0gcy5sZW5fCiAgICAgICAgICA/ IEFDRV9PUzo6bWVtY21wICgoY29uc3Qgdm9pZCAqKSB0aGlzLT5yZXBfLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgcy5yZXBfLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhpcy0+bGVuXyAqIHNpemVvZiAoQUNFX1dTVFJJTkdfVFlQRSkpID4gMAogICAg ICAgICAgOiBBQ0VfT1M6Om1lbWNtcCAoKGNvbnN0IHZvaWQgKikgdGhpcy0+cmVwXywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHMucmVwXywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHMubGVuXyAqIHNpemVvZiAoQUNFX1dTVFJJTkdfVFlQRSkpID49IDA7 Cn0KCgoKaW5saW5lIGludApBQ0VfV1N0cmluZzo6b3BlcmF0b3IhPSAoY29uc3QgQUNFX1dTdHJp bmcgJnMpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IHJldHVybiAhKCp0aGlzID09IHMpOwp9CgppbmxpbmUgaW50CkFDRV9XU3RyaW5nOjpjb21wYXJl IChjb25zdCBBQ0VfV1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogIHJldHVybiBBQ0VfT1M6Om1lbWNtcCAoKGNvbnN0IHZvaWQgKikgdGhp cy0+cmVwXywKICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHMucmVwXywK ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmxlbl8gKiBzaXplb2YgKEFDRV9XU1RSSU5H X1RZUEUpKTsKfQoKCgppbmxpbmUgQUNFX1dTVFJJTkdfVFlQRQpBQ0VfV1N0cmluZzo6b3BlcmF0 b3JbXSAoc2l6ZV90IHNsb3QpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogIHJldHVybiB0aGlzLT5yZXBfW3Nsb3RdOwp9CgoKCmlubGluZSBBQ0VfV1NU UklOR19UWVBFICYKQUNFX1dTdHJpbmc6Om9wZXJhdG9yW10gKHNpemVfdCBzbG90KQp7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+cmVwX1tz bG90XTsKfQoKaW5saW5lIGludApBQ0VfV1N0cmluZzo6ZmluZCAoY29uc3QgQUNFX1dTVFJJTkdf VFlQRSAqcywgaW50IHBvcykgY29uc3QKewogIEFDRV9XU1RSSU5HX1RZUEUgKnN1YnN0ciA9IHRo aXMtPnJlcF8gKyBwb3M7CiAgY29uc3QgQUNFX1dTVFJJTkdfVFlQRSAqcG9pbnRlciA9IEFDRV9X U3RyaW5nOjpzdHJzdHIgKHN1YnN0ciwgcyk7CiAgaWYgKHBvaW50ZXIgPT0gMCkKICAgIHJldHVy biBBQ0VfV1N0cmluZzo6bnBvczsKICBlbHNlCiAgICByZXR1cm4gcG9pbnRlciAtIHRoaXMtPnJl cF87Cn0KCmlubGluZSBpbnQKQUNFX1dTdHJpbmc6OmZpbmQgKEFDRV9XU1RSSU5HX1RZUEUgYywg aW50IHBvcykgY29uc3QKewogIGlmIChwb3MgPT0gQUNFX1dTdHJpbmc6Om5wb3MpCiAgICBwb3Mg PSB0aGlzLT5sZW5fOwoKICBmb3IgKHNpemVfdCBpID0gcG9zOyBpIDwgdGhpcy0+bGVuXzsgaSsr KQogICAgaWYgKHRoaXMtPnJlcF9baV0gPT0gYykKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu dD4gKGkpOwoKICByZXR1cm4gQUNFX1dTdHJpbmc6Om5wb3M7Cn0KCmlubGluZSBpbnQKQUNFX1dT dHJpbmc6OnN0cnN0ciAoY29uc3QgQUNFX1dTdHJpbmcgJnMpIGNvbnN0CnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiB0aGlzLT5maW5kIChzLnJlcF8pOwp9 CgppbmxpbmUgaW50CkFDRV9XU3RyaW5nOjpmaW5kIChjb25zdCBBQ0VfV1N0cmluZyAmc3RyLCBp bnQgcG9zKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmZpbmQgKHN0ci5yZXBfLCBwb3MpOwp9Cgpp bmxpbmUgaW50CkFDRV9XU3RyaW5nOjpyZmluZCAoQUNFX1dTVFJJTkdfVFlQRSBjLCBpbnQgcG9z KSBjb25zdAp7CiAgaWYgKHBvcyA9PSBBQ0VfV1N0cmluZzo6bnBvcykKICAgIHBvcyA9IHRoaXMt Pmxlbl87CgogIGZvciAoaW50IGkgPSBwb3MgLSAxOyBpID49IDA7IGktLSkKICAgIGlmICh0aGlz LT5yZXBfW2ldID09IGMpCiAgICAgIHJldHVybiBpOwoKICByZXR1cm4gQUNFX1dTdHJpbmc6Om5w b3M7Cn0KCmlubGluZSBzaXplX3QKQUNFX1dTdHJpbmc6OmJ1ZmZlcl9zaXplKHZvaWQpIGNvbnN0 CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgIHJldHVybiB0 aGlzLT5idWZfbGVuXzsKfQoKaW5saW5lIHVfbG9uZwpBQ0VfV1N0cmluZzo6aGFzaCAodm9pZCkg Y29uc3QKewogIHJldHVybiBBQ0U6Omhhc2hfcGp3CiAgICAocmVpbnRlcnByZXRfY2FzdDxjaGFy ICo+IChjb25zdF9jYXN0PEFDRV9XU1RSSU5HX1RZUEUgKj4gKHRoaXMtPnJlcF8pKSwKCiAgICAg dGhpcy0+bGVuXyAqIHNpemVvZiAoQUNFX1dTVFJJTkdfVFlQRSkpOwp9CgoKaW5saW5lCkFDRV9B dXRvX1N0cmluZ19GcmVlOjpBQ0VfQXV0b19TdHJpbmdfRnJlZSAoY2hhciogcCkKICA6IHBfIChw KQp7Cn0KCmlubGluZQpBQ0VfQXV0b19TdHJpbmdfRnJlZTo6QUNFX0F1dG9fU3RyaW5nX0ZyZWUg KEFDRV9BdXRvX1N0cmluZ19GcmVlJiByaHMpCiAgOiBwXyAocmhzLnBfKQp7CiAgcmhzLnBfID0g MDsKfQoKaW5saW5lIHZvaWQKQUNFX0F1dG9fU3RyaW5nX0ZyZWU6OnJlc2V0IChjaGFyKiBwKQp7 CiAgaWYgKHRoaXMtPnBfICE9IDApCiAgICBBQ0VfT1M6OmZyZWUgKHRoaXMtPnBfKTsKICB0aGlz LT5wXyA9IHA7Cn0KCmlubGluZSBBQ0VfQXV0b19TdHJpbmdfRnJlZSYKQUNFX0F1dG9fU3RyaW5n X0ZyZWU6Om9wZXJhdG9yPSAoQUNFX0F1dG9fU3RyaW5nX0ZyZWUmIHJocykKewogIGlmICh0aGlz ICE9ICZyaHMpCiAgICB7CiAgICAgIHRoaXMtPnJlc2V0IChyaHMucF8pOwogICAgICByaHMucF8g PSAwOwogICAgfQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkFDRV9BdXRvX1N0cmluZ19GcmVl Ojp+QUNFX0F1dG9fU3RyaW5nX0ZyZWUgKHZvaWQpCnsKICB0aGlzLT5yZXNldCAoMCk7Cn0KCmlu bGluZSBjaGFyKgpBQ0VfQXV0b19TdHJpbmdfRnJlZTo6b3BlcmF0b3IqICh2b2lkKSBjb25zdAp7 CiAgcmV0dXJuIHRoaXMtPnBfOwp9CgppbmxpbmUgY2hhcgpBQ0VfQXV0b19TdHJpbmdfRnJlZTo6 b3BlcmF0b3JbXSAoaW50IGkpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cF9baV07Cn0KCmlubGlu ZSBjaGFyKgpBQ0VfQXV0b19TdHJpbmdfRnJlZTo6Z2V0ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJu IHRoaXMtPnBfOwp9CgppbmxpbmUgY2hhcioKQUNFX0F1dG9fU3RyaW5nX0ZyZWU6OnJlbGVhc2Ug KHZvaWQpCnsKICBjaGFyKiBwID0gdGhpcy0+cF87CiAgdGhpcy0+cF8gPSAwOwogIHJldHVybiBw Owp9CiMgNzg5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv U1N0cmluZy5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvcG9zdC5oIiAxCiMgNzkyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvU1N0cmluZy5oIiAyCiMgMjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0aW9uLmgiIDIKIyAzNiAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FeGNlcHRpb24uaCIKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1N0cmluZy5o IiAxCiMgMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vRXhjZXB0aW9uLmgiIDIKCmNsYXNzIENPUkJBX0FueTsKY2xhc3MgVEFPX091dHB1dENEUjsK Y2xhc3MgVEFPX0lucHV0Q0RSOwojIDUzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5oIgpjbGFzcyBDT1JCQV9FeGNlcHRpb24Kewpw dWJsaWM6CgoKCiAgQ09SQkFfRXhjZXB0aW9uIChjb25zdCBDT1JCQV9FeGNlcHRpb24gJnNyYyk7 CgoKICBDT1JCQV9FeGNlcHRpb24gJm9wZXJhdG9yID0gKGNvbnN0IENPUkJBX0V4Y2VwdGlvbiAm c3JjKTsKCgogIHZpcnR1YWwgfkNPUkJBX0V4Y2VwdGlvbiAodm9pZCk7CgoKICB2aXJ0dWFsIHZv aWQgX3JhaXNlICh2b2lkKSA9IDA7CgoKICBzdGF0aWMgQ09SQkFfRXhjZXB0aW9uICpfZG93bmNh c3QgKENPUkJBX0V4Y2VwdGlvbiAqeCk7CgoKCgogIGNvbnN0IGNoYXIgKl9pZCAodm9pZCkgY29u c3Q7CgoKICB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OwoK CiAgdmlydHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHJlcG9zaXRvcnlfaWQpIGNvbnN0OwoK CiAgQ09SQkFfRXhjZXB0aW9uIChjb25zdCBjaGFyKiByZXBvc2l0b3J5X2lkKTsKCgoKICB2b2lk IF90YW9fcHJpbnRfZXhjZXB0aW9uIChjb25zdCBjaGFyICppbmZvLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZJTEUgKmYgPSBzdGRvdXQpIGNvbnN0OwoKCgogIHZpcnR1YWwgQUNFX0NT dHJpbmcgX2luZm8gKHZvaWQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCB2b2lkIF90YW9fZW5jb2Rl IChUQU9fT3V0cHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6 RW52aXJvbm1lbnQgJikgY29uc3QgPSAwOwogIHZpcnR1YWwgdm9pZCBfdGFvX2RlY29kZSAoVEFP X0lucHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJikgPSAwOwoKCiAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCAq KTsKCgogIENPUkJBOjpVTG9uZyBfaW5jcl9yZWZjbnQgKHZvaWQpOwogIENPUkJBOjpVTG9uZyBf ZGVjcl9yZWZjbnQgKHZvaWQpOwoKcHJvdGVjdGVkOgogIENPUkJBX0V4Y2VwdGlvbiAodm9pZCk7 CgoKcHJpdmF0ZToKCiAgY2hhciAqaWRfOwoKCiAgQ09SQkE6OlVMb25nIHJlZmNvdW50XzsKCgoK CgoKCiAgQUNFX01UX1NZTkNIOjpNVVRFWCByZWZjb3VudF9sb2NrXzsKfTsKCgoKCiAgICAgICAg ICAgb3N0cmVhbSYgb3BlcmF0b3I8PCAob3N0cmVhbSAmb3MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgQ09SQkFfRXhjZXB0aW9uICZlKTsKIyAxNDIgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0aW9uLmgiCmNsYXNz IENPUkJBX1VzZXJFeGNlcHRpb24gOiBwdWJsaWMgQ09SQkFfRXhjZXB0aW9uCnsKcHVibGljOgoK CgogIENPUkJBX1VzZXJFeGNlcHRpb24gKGNvbnN0IENPUkJBX1VzZXJFeGNlcHRpb24gJnNyYyk7 CgoKICB+Q09SQkFfVXNlckV4Y2VwdGlvbiAodm9pZCk7CgoKICBDT1JCQV9Vc2VyRXhjZXB0aW9u ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX1VzZXJFeGNlcHRpb24gJnNyYyk7CgoKICBzdGF0aWMg Q09SQkFfVXNlckV4Y2VwdGlvbiAqX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24gKmV4Y2VwdGlv bik7CgoKCgogIENPUkJBX1VzZXJFeGNlcHRpb24gKGNvbnN0IGNoYXIqIHJlcG9zaXRvcnlfaWQp OwoKICB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciAqaW50ZXJmYWNlX2lkKSBjb25zdDsK CgoKCgogIHZpcnR1YWwgQUNFX0NTdHJpbmcgX2luZm8gKHZvaWQpIGNvbnN0OwoKCgogIENPUkJB X1VzZXJFeGNlcHRpb24gKHZvaWQpOwp9OwojIDE4NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FeGNlcHRpb24uaCIKY2xhc3MgQ09SQkFfU3lzdGVt RXhjZXB0aW9uIDogcHVibGljIENPUkJBX0V4Y2VwdGlvbgp7CnB1YmxpYzoKCgoKICBDT1JCQV9T eXN0ZW1FeGNlcHRpb24gKHZvaWQpOwoKCiAgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIChjb25zdCBD T1JCQV9TeXN0ZW1FeGNlcHRpb24gJnNyYyk7CgoKICB+Q09SQkFfU3lzdGVtRXhjZXB0aW9uICh2 b2lkKTsKCgogIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9T eXN0ZW1FeGNlcHRpb24gJnNyYyk7CgoKICBDT1JCQTo6VUxvbmcgbWlub3IgKHZvaWQpIGNvbnN0 OwoKCiAgdm9pZCBtaW5vciAoQ09SQkE6OlVMb25nIG0pOwoKCiAgQ09SQkE6OkNvbXBsZXRpb25T dGF0dXMgY29tcGxldGVkICh2b2lkKSBjb25zdDsKCgogIHZvaWQgY29tcGxldGVkIChDT1JCQTo6 Q29tcGxldGlvblN0YXR1cyBjKTsKCgogIHN0YXRpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKl9k b3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uICpleGNlcHRpb24pOwoKCgoKICB2aXJ0dWFsIGludCBf aXNfYSAoY29uc3QgY2hhciAqdHlwZV9pZCkgY29uc3Q7CgoKCiAgdm9pZCBfdGFvX3ByaW50X3N5 c3RlbV9leGNlcHRpb24gKEZJTEUgKmYgPSBzdGRvdXQpIGNvbnN0OwoKCgogIHZpcnR1YWwgQUNF X0NTdHJpbmcgX2luZm8gKHZvaWQpIGNvbnN0OwoKICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUg KFRBT19PdXRwdXRDRFIgJmNkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmKSBjb25zdDsKICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKFRBT19JbnB1 dENEUiAmY2RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICYpOwoKCiAgc3RhdGljIENPUkJBOjpVTG9uZyBfdGFvX21pbm9yX2NvZGUgKHVfaW50IGxvY2F0 aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXJybm9fdmFs dWUpOwoKCgogIHN0YXRpYyBDT1JCQTo6VUxvbmcgX3Rhb19lcnJubyAoaW50IGVycm5vX3ZhbHVl KTsKCnByb3RlY3RlZDoKCgogIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoY29uc3QgY2hhciAqcmVw b3NpdG9yeV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBjb2RlLAog ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk KTsKCgoKICBzdGF0aWMgY29uc3QgY2hhciAqX3Rhb19nZXRfb21nX2V4Y2VwdGlvbl9kZXNjcmlw dGlvbiAoCiAgICBjb25zdCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICZleGMsCiAgICBDT1JCQTo6 VUxvbmcgbWlub3JfY29kZSk7Cgpwcml2YXRlOgoKICBDT1JCQTo6VUxvbmcgbWlub3JfOwoKCiAg Q09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkXzsKCn07CiMgMjkwICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5oIgpjbGFz cyBDT1JCQV9VTktOT1dOIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzog Q09SQkFfVU5LTk9XTiAodm9pZCk7IENPUkJBX1VOS05PV04gKENPUkJBOjpVTG9uZyBjb2RlLCBD T1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9u ICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiVU5LTk9XTiIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQp IHsgfSBzdGF0aWMgQ09SQkFfVU5LTk9XTiAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBl eGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7 IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIg X3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lk Kik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfVU5LTk9X TiAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9VTktOT1dOICopOyBD T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JC QV9VTktOT1dOIComKTsKY2xhc3MgQ09SQkFfQkFEX1BBUkFNIDogcHVibGljIENPUkJBX1N5c3Rl bUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfQkFEX1BBUkFNICh2b2lkKTsgQ09SQkFfQkFEX1BB UkFNIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk KSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIkJBRF9QQVJB TSIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfQkFEX1BBUkFNICog X2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50IF9pc19h IChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7 IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2 b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09S QkE6OkFueSAmLCBjb25zdCBDT1JCQV9CQURfUEFSQU0gJik7IHZvaWQgb3BlcmF0b3I8PD0gKENP UkJBOjpBbnkgJiwgQ09SQkFfQkFEX1BBUkFNICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9CQURfUEFSQU0gKiYpOwpjbGFzcyBD T1JCQV9OT19NRU1PUlkgOiBwdWJsaWMgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBD T1JCQV9OT19NRU1PUlkgKHZvaWQpOyBDT1JCQV9OT19NRU1PUlkgKENPUkJBOjpVTG9uZyBjb2Rl LCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0 aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiTk9fTUVNT1JZIiAiOjEuMCIsIGNvZGUsIGNvbXBs ZXRlZCkgeyB9IHN0YXRpYyBDT1JCQV9OT19NRU1PUlkgKiBfZG93bmNhc3QgKENPUkJBX0V4Y2Vw dGlvbiogZXhjZXB0aW9uKTsgdmlydHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVfaWQp IGNvbnN0OyB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlwZUNv ZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3Rv ciAodm9pZCopOyB9OyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJB X05PX01FTU9SWSAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9OT19N RU1PUlkgKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYs IGNvbnN0IENPUkJBX05PX01FTU9SWSAqJik7CmNsYXNzIENPUkJBX0lNUF9MSU1JVCA6IHB1Ymxp YyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX0lNUF9MSU1JVCAodm9pZCk7 IENPUkJBX0lNUF9MSU1JVCAoQ09SQkE6OlVMb25nIGNvZGUsIENPUkJBOjpDb21wbGV0aW9uU3Rh dHVzIGNvbXBsZXRlZCkgOiBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKCJJREw6b21nLm9yZy9DT1JC QS8iICJJTVBfTElNSVQiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJB X0lNUF9MSU1JVCAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0 dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBf cmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNv bnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3Bl cmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfSU1QX0xJTUlUICYpOyB2b2lkIG9w ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX0lNUF9MSU1JVCAqKTsgQ09SQkE6OkJvb2xl YW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfSU1QX0xJTUlU IComKTsKY2xhc3MgQ09SQkFfQ09NTV9GQUlMVVJFIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2Vw dGlvbiB7IHB1YmxpYzogQ09SQkFfQ09NTV9GQUlMVVJFICh2b2lkKTsgQ09SQkFfQ09NTV9GQUlM VVJFIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk KSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIkNPTU1fRkFJ TFVSRSIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfQ09NTV9GQUlM VVJFICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50 IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAo dm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0 YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8 PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9DT01NX0ZBSUxVUkUgJik7IHZvaWQgb3BlcmF0 b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfQ09NTV9GQUlMVVJFICopOyBDT1JCQTo6Qm9vbGVh biBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9DT01NX0ZBSUxV UkUgKiYpOwpjbGFzcyBDT1JCQV9JTlZfT0JKUkVGIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2Vw dGlvbiB7IHB1YmxpYzogQ09SQkFfSU5WX09CSlJFRiAodm9pZCk7IENPUkJBX0lOVl9PQkpSRUYg KENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDog Q09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiSU5WX09CSlJFRiIg IjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfSU5WX09CSlJFRiAqIF9k b3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAo Y29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2 aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9p ZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJB OjpBbnkgJiwgY29uc3QgQ09SQkFfSU5WX09CSlJFRiAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09S QkE6OkFueSAmLCBDT1JCQV9JTlZfT0JKUkVGICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlZfT0JKUkVGIComKTsKY2xhc3Mg Q09SQkFfT0JKRUNUX05PVF9FWElTVCA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBw dWJsaWM6IENPUkJBX09CSkVDVF9OT1RfRVhJU1QgKHZvaWQpOyBDT1JCQV9PQkpFQ1RfTk9UX0VY SVNUIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk KSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIk9CSkVDVF9O T1RfRVhJU1QiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJBX09CSkVD VF9OT1RfRVhJU1QgKiBfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiogZXhjZXB0aW9uKTsgdmly dHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVfaWQpIGNvbnN0OyB2aXJ0dWFsIHZvaWQg X3JhaXNlICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBj b25zdDsgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOyB9OyB2b2lkIG9w ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX09CSkVDVF9OT1RfRVhJU1QgJik7 IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfT0JKRUNUX05PVF9FWElTVCAq KTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3Qg Q09SQkFfT0JKRUNUX05PVF9FWElTVCAqJik7CmNsYXNzIENPUkJBX05PX1BFUk1JU1NJT04gOiBw dWJsaWMgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9OT19QRVJNSVNTSU9O ICh2b2lkKTsgQ09SQkFfTk9fUEVSTUlTU0lPTiAoQ09SQkE6OlVMb25nIGNvZGUsIENPUkJBOjpD b21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCkgOiBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKCJJREw6 b21nLm9yZy9DT1JCQS8iICJOT19QRVJNSVNTSU9OIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkg eyB9IHN0YXRpYyBDT1JCQV9OT19QRVJNSVNTSU9OICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRp b24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBj b25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2Rl X3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3Ig KHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9O T19QRVJNSVNTSU9OICYpOyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX05P X1BFUk1JU1NJT04gKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6 QW55ICYsIGNvbnN0IENPUkJBX05PX1BFUk1JU1NJT04gKiYpOwpjbGFzcyBDT1JCQV9JTlRFUk5B TCA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX0lOVEVSTkFM ICh2b2lkKTsgQ09SQkFfSU5URVJOQUwgKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxl dGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5v cmcvQ09SQkEvIiAiSU5URVJOQUwiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGlj IENPUkJBX0lOVEVSTkFMICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7 IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2 b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9p ZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9p ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlRFUk5BTCAmKTsgdm9p ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9JTlRFUk5BTCAqKTsgQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfSU5URVJO QUwgKiYpOwpjbGFzcyBDT1JCQV9NQVJTSEFMIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlv biB7IHB1YmxpYzogQ09SQkFfTUFSU0hBTCAodm9pZCk7IENPUkJBX01BUlNIQUwgKENPUkJBOjpV TG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lz dGVtRXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiTUFSU0hBTCIgIjoxLjAiLCBjb2Rl LCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfTUFSU0hBTCAqIF9kb3duY2FzdCAoQ09SQkFf RXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlw ZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpU eXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0 cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3Qg Q09SQkFfTUFSU0hBTCAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9N QVJTSEFMICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAm LCBjb25zdCBDT1JCQV9NQVJTSEFMIComKTsKY2xhc3MgQ09SQkFfSU5JVElBTElaRSA6IHB1Ymxp YyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX0lOSVRJQUxJWkUgKHZvaWQp OyBDT1JCQV9JTklUSUFMSVpFIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25T dGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NP UkJBLyIgIklOSVRJQUxJWkUiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENP UkJBX0lOSVRJQUxJWkUgKiBfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiogZXhjZXB0aW9uKTsg dmlydHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVfaWQpIGNvbnN0OyB2aXJ0dWFsIHZv aWQgX3JhaXNlICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lk KSBjb25zdDsgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOyB9OyB2b2lk IG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX0lOSVRJQUxJWkUgJik7IHZv aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfSU5JVElBTElaRSAqKTsgQ09SQkE6 OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfSU5J VElBTElaRSAqJik7CmNsYXNzIENPUkJBX05PX0lNUExFTUVOVCA6IHB1YmxpYyBDT1JCQV9TeXN0 ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX05PX0lNUExFTUVOVCAodm9pZCk7IENPUkJBX05P X0lNUExFTUVOVCAoQ09SQkE6OlVMb25nIGNvZGUsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzIGNv bXBsZXRlZCkgOiBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKCJJREw6b21nLm9yZy9DT1JCQS8iICJO T19JTVBMRU1FTlQiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJBX05P X0lNUExFTUVOVCAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0 dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBf cmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNv bnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3Bl cmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfTk9fSU1QTEVNRU5UICYpOyB2b2lk IG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX05PX0lNUExFTUVOVCAqKTsgQ09SQkE6 OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfTk9f SU1QTEVNRU5UIComKTsKY2xhc3MgQ09SQkFfQkFEX1RZUEVDT0RFIDogcHVibGljIENPUkJBX1N5 c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfQkFEX1RZUEVDT0RFICh2b2lkKTsgQ09SQkFf QkFEX1RZUEVDT0RFIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMg Y29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIg IkJBRF9UWVBFQ09ERSIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFf QkFEX1RZUEVDT0RFICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZp cnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lk IF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkg Y29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBv cGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9CQURfVFlQRUNPREUgJik7IHZv aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfQkFEX1RZUEVDT0RFICopOyBDT1JC QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9C QURfVFlQRUNPREUgKiYpOwpjbGFzcyBDT1JCQV9CQURfT1BFUkFUSU9OIDogcHVibGljIENPUkJB X1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfQkFEX09QRVJBVElPTiAodm9pZCk7IENP UkJBX0JBRF9PUEVSQVRJT04gKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0 YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09S QkEvIiAiQkFEX09QRVJBVElPTiIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMg Q09SQkFfQkFEX09QRVJBVElPTiAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRp b24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1 YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUg KHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07 IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfQkFEX09QRVJBVElP TiAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9CQURfT1BFUkFUSU9O ICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25z dCBDT1JCQV9CQURfT1BFUkFUSU9OIComKTsKY2xhc3MgQ09SQkFfTk9fUkVTT1VSQ0VTIDogcHVi bGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfTk9fUkVTT1VSQ0VTICh2 b2lkKTsgQ09SQkFfTk9fUkVTT1VSQ0VTIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBs ZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcu b3JnL0NPUkJBLyIgIk5PX1JFU09VUkNFUyIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBz dGF0aWMgQ09SQkFfTk9fUkVTT1VSQ0VTICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4 Y2VwdGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsg dmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBf dHlwZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQq KTsgfTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9OT19SRVNP VVJDRVMgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfTk9fUkVTT1VS Q0VTICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBj b25zdCBDT1JCQV9OT19SRVNPVVJDRVMgKiYpOwpjbGFzcyBDT1JCQV9OT19SRVNQT05TRSA6IHB1 YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX05PX1JFU1BPTlNFICh2 b2lkKTsgQ09SQkFfTk9fUkVTUE9OU0UgKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxl dGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5v cmcvQ09SQkEvIiAiTk9fUkVTUE9OU0UiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3Rh dGljIENPUkJBX05PX1JFU1BPTlNFICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2Vw dGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmly dHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlw ZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsg fTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9OT19SRVNQT05T RSAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9OT19SRVNQT05TRSAq KTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3Qg Q09SQkFfTk9fUkVTUE9OU0UgKiYpOwpjbGFzcyBDT1JCQV9QRVJTSVNUX1NUT1JFIDogcHVibGlj IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfUEVSU0lTVF9TVE9SRSAodm9p ZCk7IENPUkJBX1BFUlNJU1RfU1RPUkUgKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxl dGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5v cmcvQ09SQkEvIiAiUEVSU0lTVF9TVE9SRSIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBz dGF0aWMgQ09SQkFfUEVSU0lTVF9TVE9SRSAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBl eGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7 IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIg X3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lk Kik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfUEVSU0lT VF9TVE9SRSAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9QRVJTSVNU X1NUT1JFICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAm LCBjb25zdCBDT1JCQV9QRVJTSVNUX1NUT1JFIComKTsKY2xhc3MgQ09SQkFfQkFEX0lOVl9PUkRF UiA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX0JBRF9JTlZf T1JERVIgKHZvaWQpOyBDT1JCQV9CQURfSU5WX09SREVSIChDT1JCQTo6VUxvbmcgY29kZSwgQ09S QkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAo IklETDpvbWcub3JnL0NPUkJBLyIgIkJBRF9JTlZfT1JERVIiICI6MS4wIiwgY29kZSwgY29tcGxl dGVkKSB7IH0gc3RhdGljIENPUkJBX0JBRF9JTlZfT1JERVIgKiBfZG93bmNhc3QgKENPUkJBX0V4 Y2VwdGlvbiogZXhjZXB0aW9uKTsgdmlydHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVf aWQpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlw ZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1 Y3RvciAodm9pZCopOyB9OyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENP UkJBX0JBRF9JTlZfT1JERVIgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09S QkFfQkFEX0lOVl9PUkRFUiAqKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENP UkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfQkFEX0lOVl9PUkRFUiAqJik7CmNsYXNzIENPUkJBX1RS QU5TSUVOVCA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX1RS QU5TSUVOVCAodm9pZCk7IENPUkJBX1RSQU5TSUVOVCAoQ09SQkE6OlVMb25nIGNvZGUsIENPUkJB OjpDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCkgOiBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKCJJ REw6b21nLm9yZy9DT1JCQS8iICJUUkFOU0lFTlQiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7 IH0gc3RhdGljIENPUkJBX1RSQU5TSUVOVCAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBl eGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7 IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIg X3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lk Kik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfVFJBTlNJ RU5UICYpOyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX1RSQU5TSUVOVCAq KTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3Qg Q09SQkFfVFJBTlNJRU5UIComKTsKY2xhc3MgQ09SQkFfRlJFRV9NRU0gOiBwdWJsaWMgQ09SQkFf U3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9GUkVFX01FTSAodm9pZCk7IENPUkJBX0ZS RUVfTUVNIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxl dGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIkZSRUVf TUVNIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkgeyB9IHN0YXRpYyBDT1JCQV9GUkVFX01FTSAq IF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNf YSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQp OyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMg dm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENP UkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfRlJFRV9NRU0gJik7IHZvaWQgb3BlcmF0b3I8PD0gKENP UkJBOjpBbnkgJiwgQ09SQkFfRlJFRV9NRU0gKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49 IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX0ZSRUVfTUVNIComKTsKY2xhc3MgQ09S QkFfSU5WX0lERU5UIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09S QkFfSU5WX0lERU5UICh2b2lkKTsgQ09SQkFfSU5WX0lERU5UIChDT1JCQTo6VUxvbmcgY29kZSwg Q09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlv biAoIklETDpvbWcub3JnL0NPUkJBLyIgIklOVl9JREVOVCIgIjoxLjAiLCBjb2RlLCBjb21wbGV0 ZWQpIHsgfSBzdGF0aWMgQ09SQkFfSU5WX0lERU5UICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRp b24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBj b25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2Rl X3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3Ig KHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9J TlZfSURFTlQgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfSU5WX0lE RU5UICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBj b25zdCBDT1JCQV9JTlZfSURFTlQgKiYpOwpjbGFzcyBDT1JCQV9JTlZfRkxBRyA6IHB1YmxpYyBD T1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX0lOVl9GTEFHICh2b2lkKTsgQ09S QkFfSU5WX0ZMQUcgKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBj b21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAi SU5WX0ZMQUciICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJBX0lOVl9G TEFHICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50 IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAo dm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0 YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8 PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlZfRkxBRyAmKTsgdm9pZCBvcGVyYXRvcjw8 PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9JTlZfRkxBRyAqKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0 b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfSU5WX0ZMQUcgKiYpOwpjbGFz cyBDT1JCQV9JTlRGX1JFUE9TIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1Ymxp YzogQ09SQkFfSU5URl9SRVBPUyAodm9pZCk7IENPUkJBX0lOVEZfUkVQT1MgKENPUkJBOjpVTG9u ZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVt RXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiSU5URl9SRVBPUyIgIjoxLjAiLCBjb2Rl LCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfSU5URl9SRVBPUyAqIF9kb3duY2FzdCAoQ09S QkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciog dHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJB OjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9k ZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29u c3QgQ09SQkFfSU5URl9SRVBPUyAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBD T1JCQV9JTlRGX1JFUE9TICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S QkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlRGX1JFUE9TIComKTsKY2xhc3MgQ09SQkFfQkFEX0NP TlRFWFQgOiBwdWJsaWMgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9CQURf Q09OVEVYVCAodm9pZCk7IENPUkJBX0JBRF9DT05URVhUIChDT1JCQTo6VUxvbmcgY29kZSwgQ09S QkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAo IklETDpvbWcub3JnL0NPUkJBLyIgIkJBRF9DT05URVhUIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRl ZCkgeyB9IHN0YXRpYyBDT1JCQV9CQURfQ09OVEVYVCAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0 aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkg Y29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29k ZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9y ICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFf QkFEX0NPTlRFWFQgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfQkFE X0NPTlRFWFQgKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55 ICYsIGNvbnN0IENPUkJBX0JBRF9DT05URVhUIComKTsKY2xhc3MgQ09SQkFfT0JKX0FEQVBURVIg OiBwdWJsaWMgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9PQkpfQURBUFRF UiAodm9pZCk7IENPUkJBX09CSl9BREFQVEVSIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNv bXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpv bWcub3JnL0NPUkJBLyIgIk9CSl9BREFQVEVSIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkgeyB9 IHN0YXRpYyBDT1JCQV9PQkpfQURBUFRFUiAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBl eGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7 IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIg X3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lk Kik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfT0JKX0FE QVBURVIgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfT0JKX0FEQVBU RVIgKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNv bnN0IENPUkJBX09CSl9BREFQVEVSIComKTsKY2xhc3MgQ09SQkFfREFUQV9DT05WRVJTSU9OIDog cHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfREFUQV9DT05WRVJT SU9OICh2b2lkKTsgQ09SQkFfREFUQV9DT05WRVJTSU9OIChDT1JCQTo6VUxvbmcgY29kZSwgQ09S QkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAo IklETDpvbWcub3JnL0NPUkJBLyIgIkRBVEFfQ09OVkVSU0lPTiIgIjoxLjAiLCBjb2RlLCBjb21w bGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfREFUQV9DT05WRVJTSU9OICogX2Rvd25jYXN0IChDT1JC QV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0 eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6 OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rl c3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25z dCBDT1JCQV9EQVRBX0NPTlZFUlNJT04gJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkg JiwgQ09SQkFfREFUQV9DT05WRVJTSU9OICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAo Y29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9EQVRBX0NPTlZFUlNJT04gKiYpOwpjbGFz cyBDT1JCQV9JTlZfUE9MSUNZIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1Ymxp YzogQ09SQkFfSU5WX1BPTElDWSAodm9pZCk7IENPUkJBX0lOVl9QT0xJQ1kgKENPUkJBOjpVTG9u ZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVt RXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiSU5WX1BPTElDWSIgIjoxLjAiLCBjb2Rl LCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfSU5WX1BPTElDWSAqIF9kb3duY2FzdCAoQ09S QkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciog dHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJB OjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9k ZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29u c3QgQ09SQkFfSU5WX1BPTElDWSAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBD T1JCQV9JTlZfUE9MSUNZICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S QkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlZfUE9MSUNZIComKTsKY2xhc3MgQ09SQkFfUkVCSU5E IDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfUkVCSU5EICh2 b2lkKTsgQ09SQkFfUkVCSU5EIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25T dGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NP UkJBLyIgIlJFQklORCIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFf UkVCSU5EICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZpcnR1YWwg aW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lkIF9yYWlz ZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7 IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRv cjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9SRUJJTkQgJik7IHZvaWQgb3BlcmF0b3I8 PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfUkVCSU5EICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv cj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9SRUJJTkQgKiYpOwpjbGFzcyBD T1JCQV9USU1FT1VUIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09S QkFfVElNRU9VVCAodm9pZCk7IENPUkJBX1RJTUVPVVQgKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JC QTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgi SURMOm9tZy5vcmcvQ09SQkEvIiAiVElNRU9VVCIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsg fSBzdGF0aWMgQ09SQkFfVElNRU9VVCAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNl cHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZp cnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5 cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7 IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfVElNRU9VVCAm KTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9USU1FT1VUICopOyBDT1JC QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9U SU1FT1VUIComKTsKY2xhc3MgQ09SQkFfVFJBTlNBQ1RJT05fVU5BVkFJTEFCTEUgOiBwdWJsaWMg Q09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9UUkFOU0FDVElPTl9VTkFWQUlM QUJMRSAodm9pZCk7IENPUkJBX1RSQU5TQUNUSU9OX1VOQVZBSUxBQkxFIChDT1JCQTo6VUxvbmcg Y29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4 Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIlRSQU5TQUNUSU9OX1VOQVZBSUxBQkxFIiAi OjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkgeyB9IHN0YXRpYyBDT1JCQV9UUkFOU0FDVElPTl9VTkFW QUlMQUJMRSAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFs IGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFp c2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0 OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0 b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfVFJBTlNBQ1RJT05fVU5BVkFJTEFCTEUg Jik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfVFJBTlNBQ1RJT05fVU5B VkFJTEFCTEUgKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55 ICYsIGNvbnN0IENPUkJBX1RSQU5TQUNUSU9OX1VOQVZBSUxBQkxFIComKTsKY2xhc3MgQ09SQkFf VFJBTlNBQ1RJT05fTU9ERSA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6 IENPUkJBX1RSQU5TQUNUSU9OX01PREUgKHZvaWQpOyBDT1JCQV9UUkFOU0FDVElPTl9NT0RFIChD T1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENP UkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIlRSQU5TQUNUSU9OX01P REUiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJBX1RSQU5TQUNUSU9O X01PREUgKiBfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiogZXhjZXB0aW9uKTsgdmlydHVhbCBp bnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVfaWQpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX3JhaXNl ICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsg c3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOyB9OyB2b2lkIG9wZXJhdG9y PDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX1RSQU5TQUNUSU9OX01PREUgJik7IHZvaWQg b3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfVFJBTlNBQ1RJT05fTU9ERSAqKTsgQ09S QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFf VFJBTlNBQ1RJT05fTU9ERSAqJik7CmNsYXNzIENPUkJBX1RSQU5TQUNUSU9OX1JFUVVJUkVEIDog cHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfVFJBTlNBQ1RJT05f UkVRVUlSRUQgKHZvaWQpOyBDT1JCQV9UUkFOU0FDVElPTl9SRVFVSVJFRCAoQ09SQkE6OlVMb25n IGNvZGUsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCkgOiBDT1JCQV9TeXN0ZW1F eGNlcHRpb24gKCJJREw6b21nLm9yZy9DT1JCQS8iICJUUkFOU0FDVElPTl9SRVFVSVJFRCIgIjox LjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfVFJBTlNBQ1RJT05fUkVRVUlS RUQgKiBfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiogZXhjZXB0aW9uKTsgdmlydHVhbCBpbnQg X2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVfaWQpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2 b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsgc3Rh dGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOyB9OyB2b2lkIG9wZXJhdG9yPDw9 IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX1RSQU5TQUNUSU9OX1JFUVVJUkVEICYpOyB2b2lk IG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX1RSQU5TQUNUSU9OX1JFUVVJUkVEICop OyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBD T1JCQV9UUkFOU0FDVElPTl9SRVFVSVJFRCAqJik7CmNsYXNzIENPUkJBX1RSQU5TQUNUSU9OX1JP TExFREJBQ0sgOiBwdWJsaWMgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9U UkFOU0FDVElPTl9ST0xMRURCQUNLICh2b2lkKTsgQ09SQkFfVFJBTlNBQ1RJT05fUk9MTEVEQkFD SyAoQ09SQkE6OlVMb25nIGNvZGUsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCkg OiBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKCJJREw6b21nLm9yZy9DT1JCQS8iICJUUkFOU0FDVElP Tl9ST0xMRURCQUNLIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkgeyB9IHN0YXRpYyBDT1JCQV9U UkFOU0FDVElPTl9ST0xMRURCQUNLICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2Vw dGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmly dHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlw ZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsg fTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9UUkFOU0FDVElP Tl9ST0xMRURCQUNLICYpOyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX1RS QU5TQUNUSU9OX1JPTExFREJBQ0sgKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25z dCBDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX1RSQU5TQUNUSU9OX1JPTExFREJBQ0sgKiYpOwpj bGFzcyBDT1JCQV9JTlZBTElEX1RSQU5TQUNUSU9OIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2Vw dGlvbiB7IHB1YmxpYzogQ09SQkFfSU5WQUxJRF9UUkFOU0FDVElPTiAodm9pZCk7IENPUkJBX0lO VkFMSURfVFJBTlNBQ1RJT04gKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0 YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09S QkEvIiAiSU5WQUxJRF9UUkFOU0FDVElPTiIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBz dGF0aWMgQ09SQkFfSU5WQUxJRF9UUkFOU0FDVElPTiAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0 aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkg Y29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29k ZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9y ICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFf SU5WQUxJRF9UUkFOU0FDVElPTiAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBD T1JCQV9JTlZBTElEX1RSQU5TQUNUSU9OICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAo Y29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlZBTElEX1RSQU5TQUNUSU9OIComKTsK Y2xhc3MgQ09SQkFfQ09ERVNFVF9JTkNPTVBBVElCTEUgOiBwdWJsaWMgQ09SQkFfU3lzdGVtRXhj ZXB0aW9uIHsgcHVibGljOiBDT1JCQV9DT0RFU0VUX0lOQ09NUEFUSUJMRSAodm9pZCk7IENPUkJB X0NPREVTRVRfSU5DT01QQVRJQkxFIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRp b25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3Jn L0NPUkJBLyIgIkNPREVTRVRfSU5DT01QQVRJQkxFIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkg eyB9IHN0YXRpYyBDT1JCQV9DT0RFU0VUX0lOQ09NUEFUSUJMRSAqIF9kb3duY2FzdCAoQ09SQkFf RXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlw ZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpU eXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0 cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3Qg Q09SQkFfQ09ERVNFVF9JTkNPTVBBVElCTEUgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpB bnkgJiwgQ09SQkFfQ09ERVNFVF9JTkNPTVBBVElCTEUgKik7IENPUkJBOjpCb29sZWFuIG9wZXJh dG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX0NPREVTRVRfSU5DT01QQVRJ QkxFIComKTsKY2xhc3MgQ09SQkFfQkFEX1FPUyA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRp b24geyBwdWJsaWM6IENPUkJBX0JBRF9RT1MgKHZvaWQpOyBDT1JCQV9CQURfUU9TIChDT1JCQTo6 VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5 c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIkJBRF9RT1MiICI6MS4wIiwgY29k ZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJBX0JBRF9RT1MgKiBfZG93bmNhc3QgKENPUkJB X0V4Y2VwdGlvbiogZXhjZXB0aW9uKTsgdmlydHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5 cGVfaWQpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6 VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVz dHJ1Y3RvciAodm9pZCopOyB9OyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0 IENPUkJBX0JBRF9RT1MgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFf QkFEX1FPUyAqKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkg JiwgY29uc3QgQ09SQkFfQkFEX1FPUyAqJik7CiMgMzM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5oIgpjbGFzcyBUQU9fRXhjZXB0 aW9ucwp7CnB1YmxpYzoKCgoKCgogIHN0YXRpYyB2b2lkIG1ha2Vfc3RhbmRhcmRfdHlwZWNvZGUg KENPUkJBOjpUeXBlQ29kZV9wdHIgJnRjcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB X0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgp KTsKCgoKICBzdGF0aWMgdm9pZCBtYWtlX3Vua25vd25fdXNlcl90eXBlY29kZSAoQ09SQkE6OlR5 cGVDb2RlX3B0ciAmdGNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkpOwoKCgogIHN0YXRpYyB2b2lkIGluaXQgKENPUkJBX0Vudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgogIHN0YXRpYyB2b2lkIGZpbmkgKHZvaWQpOwoK CiAgc3RhdGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAqY3JlYXRlX3N5c3RlbV9leGNlcHRpb24g KAogICAgICBjb25zdCBjaGFyICppZCwKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09S QkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50 ICgpCiAgICApOwoKCgoKCgoKICBzdGF0aWMgQUNFX0FsbG9jYXRvciAqZ2xvYmFsX2FsbG9jYXRv cl87Cgpwcml2YXRlOgoKCiAgc3RhdGljIGludCBpbml0aWFsaXplZF87Cn07CiMgNDAwICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5o IgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v RXhjZXB0aW9uLmkiIDEKCgoKaW5saW5lIENPUkJBX0V4Y2VwdGlvbioKQ09SQkFfRXhjZXB0aW9u OjpfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiogeCkKewogIHJldHVybiB4Owp9CgppbmxpbmUK Q09SQkFfVXNlckV4Y2VwdGlvbjo6Q09SQkFfVXNlckV4Y2VwdGlvbiAoY29uc3QgQ09SQkFfVXNl ckV4Y2VwdGlvbiAmc3JjKQogIDogQ09SQkFfRXhjZXB0aW9uIChzcmMpCnsKfQoKaW5saW5lIENP UkJBOjpVTG9uZwpDT1JCQV9TeXN0ZW1FeGNlcHRpb246Om1pbm9yICh2b2lkKSBjb25zdAp7CiAg cmV0dXJuIHRoaXMtPm1pbm9yXzsKfQoKaW5saW5lIHZvaWQKQ09SQkFfU3lzdGVtRXhjZXB0aW9u OjptaW5vciAoQ09SQkE6OlVMb25nIG0pCnsKICB0aGlzLT5taW5vcl8gPSBtOwp9CgppbmxpbmUg Q09SQkE6OkNvbXBsZXRpb25TdGF0dXMKQ09SQkFfU3lzdGVtRXhjZXB0aW9uOjpjb21wbGV0ZWQg KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y29tcGxldGVkXzsKfQoKaW5saW5lIHZvaWQK Q09SQkFfU3lzdGVtRXhjZXB0aW9uOjpjb21wbGV0ZWQgKENPUkJBOjpDb21wbGV0aW9uU3RhdHVz IGMpCnsKICB0aGlzLT5jb21wbGV0ZWRfID0gYzsKfQojIDQwMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FeGNlcHRpb24uaCIgMgoKCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDQw NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FeGNl cHRpb24uaCIgMgojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1R5cGVjb2RlLmgiIDIKCgpjbGFzcyBUQU9fSW5wdXRDRFI7CmNsYXNzIFRBT19P dXRwdXRDRFI7CiMgNDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vVHlwZWNvZGUuaCIKY2xhc3MgVENfUHJpdmF0ZV9TdGF0ZTsKIyA2MCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UeXBlY29kZS5oIgpj bGFzcyBDT1JCQV9UeXBlQ29kZQp7CnB1YmxpYzoKCgoKICBjbGFzcyBCb3VuZHMgOiBwdWJsaWMg Q09SQkFfVXNlckV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBCb3VuZHMgKHZvaWQpOwoKICAg IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29k ZSAoVEFPX091dHB1dENEUiAmY2RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKFRB T19JbnB1dENEUiAmY2RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJik7CgogICAgc3RhdGljIEJvdW5kcyogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRp b24gKmV4KTsKICAgIHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiBpbnRlcmZhY2VfaWQp IGNvbnN0OwogIH07CgogIGNsYXNzIEJhZEtpbmQgOiBwdWJsaWMgQ09SQkFfVXNlckV4Y2VwdGlv bgogIHsKICBwdWJsaWM6CiAgICBCYWRLaW5kICh2b2lkKTsKCiAgICB2aXJ0dWFsIHZvaWQgX3Jh aXNlICh2b2lkKTsKCiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKFRBT19PdXRwdXRDRFIg JmNkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYp IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlIChUQU9fSW5wdXRDRFIgJmNkciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYpOwoKICAg IHN0YXRpYyBCYWRLaW5kKiBfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiAqZXgpOwogICAgdmly dHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIGludGVyZmFjZV9pZCkgY29uc3Q7CiAgfTsKCiAg c3RhdGljIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0JvdW5kczsKICBzdGF0aWMgQ09SQkE6OlR5 cGVDb2RlX3B0ciBfdGNfQmFkS2luZDsKCgogIHN0YXRpYyBDT1JCQTo6VHlwZUNvZGVfcHRyIF9k dXBsaWNhdGUgKENPUkJBOjpUeXBlQ29kZV9wdHIgdGMpOwoKCiAgc3RhdGljIENPUkJBOjpUeXBl Q29kZV9wdHIgX25pbCAodm9pZCk7CgoKICBDT1JCQTo6Qm9vbGVhbiBlcXVhbCAoQ09SQkE6OlR5 cGVDb2RlX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFuIGVx dWl2YWxlbnQgKENPUkJBOjpUeXBlQ29kZV9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkp IGNvbnN0OwoKCiAgQ09SQkE6OlRDS2luZCBraW5kIChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgIFRBT19k ZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBjb25zdCBjaGFyICppZCAoQ09SQkFf RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAg ICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIGNvbnN0IGNo YXIgKm5hbWUgKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBj b25zdDsKCgoKICBDT1JCQTo6VUxvbmcgbWVtYmVyX2NvdW50IChDT1JCQV9FbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoKCiAgY29uc3QgY2hh ciAqbWVtYmVyX25hbWUgKENPUkJBOjpVTG9uZyBzbG90LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkp IGNvbnN0OwoKCgogIENPUkJBOjpUeXBlQ29kZV9wdHIgbWVtYmVyX3R5cGUgKENPUkJBOjpVTG9u ZyBzbG90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgog IENPUkJBOjpBbnlfcHRyIG1lbWJlcl9sYWJlbCAoQ09SQkE6OlVMb25nIG4sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZh dWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpUeXBlQ29kZV9wdHIgZGlzY3Jp bWluYXRvcl90eXBlICgKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgKSBjb25zdDsK CgogIENPUkJBOjpMb25nIGRlZmF1bHRfaW5kZXggKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBDT1JCQTo6VUxvbmcgbGVu Z3RoIChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9 CiAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29u c3Q7CgoKCiAgQ09SQkE6OlR5cGVDb2RlX3B0ciBjb250ZW50X3R5cGUgKENPUkJBX0Vudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CiMg MTc4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5 cGVjb2RlLmgiCiAgQ09SQkFfVHlwZUNvZGUgKENPUkJBOjpUQ0tpbmQga2luZCk7CiMgMTk2ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2Rl LmgiCiAgQ09SQkFfVHlwZUNvZGUgKENPUkJBOjpUQ0tpbmQga2luZCwKICAgICAgICAgICAgICAg ICAgc2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmZmVyLAog ICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcmJfb3duc190YywKICAgICAgICAgICAg ICAgICAgQ09SQkE6OlVMb25nIHNpemUsCiAgICAgICAgICAgICAgICAgIENPUkJBOjpUeXBlQ29k ZV9wdHIgcGFyZW50ID0gMCk7CgoKICB+Q09SQkFfVHlwZUNvZGUgKHZvaWQpOwoKICBlbnVtIHRy YXZlcnNlX3N0YXR1cwogIHsKICAgIFRSQVZFUlNFX1NUT1AsCiAgICBUUkFWRVJTRV9DT05USU5V RQogIH07CgoKCiAgQ09SQkE6OlVMb25nIF9pbmNyX3JlZmNudCAodm9pZCk7CiAgQ09SQkE6OlVM b25nIF9kZWNyX3JlZmNudCAodm9pZCk7CiMgMjI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgiCiAgQ09SQkE6OkFueV9wdHIgcGFy YW1ldGVyIChjb25zdCBDT1JCQTo6TG9uZyBzbG90LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7 CgoKCiAgQ09SQkE6OlVMb25nIHBhcmFtX2NvdW50IChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBzdGF0aWMgdm9pZCBfdGFv X2RlY29kZSAoY29uc3QgQ09SQkFfVHlwZUNvZGUgKnBhcmVudCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgVEFPX0lucHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIENP UkJBX1R5cGVDb2RlIComY2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CiMgMjUwICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgi CiAgc2l6ZV90IGxlbmd0aF87CgoKICBjb25zdCBjaGFyKiBidWZmZXJfOwoKCiAgQ09SQkE6Okxv bmcgYnl0ZV9vcmRlcl87CgoKICBDT1JCQTo6TG9uZyBraW5kXzsKCgoKCgoKICBDT1JCQTo6VHlw ZUNvZGVfcHRyIHBhcmVudF87CgoKCgoKCiAgY29uc3QgY2hhciAqdGNfYmFzZV87CgoKCgoKCiAg Y29uc3QgY2hhciAqcm9vdF90Y19iYXNlXzsKCgoKICBzdGF0aWMgQ09SQkE6OkJvb2xlYW4gc2tp cF90eXBlY29kZSAoVEFPX0lucHV0Q0RSICZzdHJlYW0pOwoKCiAgdHlwZWRlZiBDT1JCQV9UeXBl Q29kZV9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgQ09SQkFfVHlwZUNvZGVfdmFyIF92YXJfdHlw ZTsKCgoKcHJpdmF0ZToKIyAzMDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaCIKICBDT1JCQTo6Qm9vbGVhbiBlcXVfY29tbW9uIChD T1JCQTo6VHlwZUNvZGVfcHRyIHRjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB OjpCb29sZWFuIGVxdWl2X29ubHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFf RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsK CgogIENPUkJBOjpCb29sZWFuIHByaXZhdGVfZXF1YWwgKENPUkJBOjpUeXBlQ29kZV9wdHIgdGMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gZXF1aXZfb25s eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoKCiAgY29uc3QgY2hh ciAqcHJpdmF0ZV9pZCAoQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv bm1lbnQgKCkpIGNvbnN0OwoKCiAgY29uc3QgY2hhciAqcHJpdmF0ZV9uYW1lIChDT1JCQV9FbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBD T1JCQTo6VUxvbmcgcHJpdmF0ZV9tZW1iZXJfY291bnQgKENPUkJBX0Vudmlyb25tZW50ICZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpIGNvbnN0OwoKCgogIENPUkJB OjpUeXBlQ29kZV9wdHIgcHJpdmF0ZV9tZW1iZXJfdHlwZSAoCiAgICAgIENPUkJBOjpVTG9uZyBz bG90LAogICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApIGNvbnN0OwoKCgogIGNvbnN0 IGNoYXIgKnByaXZhdGVfbWVtYmVyX25hbWUgKENPUkJBOjpVTG9uZyBzbG90LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpBbnlfcHRyIHBy aXZhdGVfbWVtYmVyX2xhYmVsIChDT1JCQTo6VUxvbmcgbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBDT1JCQTo6VHlwZUNvZGVfcHRy IHByaXZhdGVfZGlzY3JpbWluYXRvcl90eXBlICgKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAo KQogICAgKSBjb25zdDsKCgoKICBDT1JCQTo6VHlwZUNvZGVfcHRyIHByaXZhdGVfZGlzY3JpbWlu YXRvcl90eXBlX2kgKAogICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApIGNvbnN0OwoK CiAgQ09SQkE6OkxvbmcgcHJpdmF0ZV9kZWZhdWx0X2luZGV4IChDT1JCQV9FbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBD T1JCQTo6TG9uZyBwcml2YXRlX2RlZmF1bHRfaW5kZXhfaSAoQ09SQkFfRW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBD T1JCQTo6TG9uZyBwcml2YXRlX2xlbmd0aCAoQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBDT1JCQTo6VHlwZUNvZGVfcHRy IHByaXZhdGVfY29udGVudF90eXBlICgKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09S QkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg KSBjb25zdDsKCgoKCiAgQ09SQkE6OkJvb2xlYW4gcHJpdmF0ZV9lcXVhbF9vYmpyZWYgKENPUkJB OjpUeXBlQ29kZV9wdHIgdGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENPUkJBOjpCb29sZWFuIGVxdWl2X29ubHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVs dF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBwcml2YXRlX2VxdWFs X3N0cnVjdCAoQ09SQkE6OlR5cGVDb2RlX3B0ciB0YywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gZXF1aXZfb25seSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFu IHByaXZhdGVfZXF1YWxfdW5pb24gKENPUkJBOjpUeXBlQ29kZV9wdHIgdGMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gZXF1aXZfb25seSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoKICBDT1JC QTo6Qm9vbGVhbiBwcml2YXRlX2VxdWFsX2VudW0gKENPUkJBOjpUeXBlQ29kZV9wdHIgdGMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBlcXVpdl9v bmx5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoK ICBDT1JCQTo6Qm9vbGVhbiBwcml2YXRlX2VxdWFsX3N0cmluZyAoQ09SQkE6OlR5cGVDb2RlX3B0 ciB0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xl YW4gZXF1aXZfb25seSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S QkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50 ICgpKSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFuIHByaXZhdGVfZXF1YWxfd3N0cmluZyAoQ09S QkE6OlR5cGVDb2RlX3B0ciB0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENPUkJBOjpCb29sZWFuIGVxdWl2X29ubHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19k ZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFuIHByaXZhdGVf ZXF1YWxfc2VxdWVuY2UgKENPUkJBOjpUeXBlQ29kZV9wdHIgdGMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gZXF1aXZfb25seSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoKICBD T1JCQTo6Qm9vbGVhbiBwcml2YXRlX2VxdWFsX2FycmF5IChDT1JCQTo6VHlwZUNvZGVfcHRyIHRj LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIGVx dWl2X29ubHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpIGNv bnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gcHJpdmF0ZV9lcXVhbF9hbGlhcyAoQ09SQkE6OlR5cGVD b2RlX3B0ciB0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6 Qm9vbGVhbiBlcXVpdl9vbmx5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t ZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFuIHByaXZhdGVfZXF1YWxfZXhjZXB0IChD T1JCQTo6VHlwZUNvZGVfcHRyIHRjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDT1JCQTo6Qm9vbGVhbiBlcXVpdl9vbmx5LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2Rl ZmF1bHRfZW52aXJvbm1lbnQgKCkpIGNvbnN0OwoKCiAgQ09SQkE6OlVMb25nIHJlZmNvdW50XzsK CgoKICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIHJlZmNvdW50X2xvY2tfOwoKCgogIENPUkJBOjpCb29s ZWFuIG9yYl9vd25zXzsKIyA0NjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaCIKICBUQ19Qcml2YXRlX1N0YXRlICpwcml2YXRlX3N0 YXRlXzsKCgoKCiAgQ09SQkFfVHlwZUNvZGUgKGNvbnN0IENPUkJBOjpUeXBlQ29kZSAmc3JjKTsK ICBDT1JCQV9UeXBlQ29kZSAmb3BlcmF0b3IgPSAoY29uc3QgQ09SQkE6OlR5cGVDb2RlICZzcmMp OwoKCgoKCgogIGNoYXIgKm5vbl9hbGlnbmVkX2J1ZmZlcl87Cn07CiMgNDg3ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgiCmNsYXNz IFRDX1ByaXZhdGVfU3RhdGUKewpwdWJsaWM6CgogIFRDX1ByaXZhdGVfU3RhdGUgKENPUkJBOjpU Q0tpbmQga2luZCk7CgoKICB+VENfUHJpdmF0ZV9TdGF0ZSAodm9pZCk7CgogIEFDRV9NVF9TWU5D SDo6TVVURVggbXV0ZXhfOwoKCiAgQ09SQkE6OlRDS2luZCB0Y19raW5kXzsKCgoKICBDT1JCQTo6 Qm9vbGVhbiB0Y19pZF9rbm93bl87CiAgQ09SQkE6OkJvb2xlYW4gdGNfbmFtZV9rbm93bl87CiAg Q09SQkE6OkJvb2xlYW4gdGNfbWVtYmVyX2NvdW50X2tub3duXzsKICBDT1JCQTo6Qm9vbGVhbiB0 Y19tZW1iZXJfdHlwZV9saXN0X2tub3duXzsKICBDT1JCQTo6Qm9vbGVhbiB0Y19tZW1iZXJfbmFt ZV9saXN0X2tub3duXzsKICBDT1JCQTo6Qm9vbGVhbiB0Y19tZW1iZXJfbGFiZWxfbGlzdF9rbm93 bl87CiAgQ09SQkE6OkJvb2xlYW4gdGNfZGlzY3JpbWluYXRvcl90eXBlX2tub3duXzsKICBDT1JC QTo6Qm9vbGVhbiB0Y19kZWZhdWx0X2luZGV4X3VzZWRfa25vd25fOwogIENPUkJBOjpCb29sZWFu IHRjX2xlbmd0aF9rbm93bl87CiAgQ09SQkE6OkJvb2xlYW4gdGNfY29udGVudF90eXBlX2tub3du XzsKICBDT1JCQTo6Qm9vbGVhbiB0Y19kaXNjcmltX3BhZF9zaXplX2tub3duXzsKCgogIGNoYXIg KiB0Y19pZF87CiAgY2hhciAqIHRjX25hbWVfOwogIENPUkJBOjpVTG9uZyB0Y19tZW1iZXJfY291 bnRfOwogIENPUkJBOjpUeXBlQ29kZV9wdHIgKnRjX21lbWJlcl90eXBlX2xpc3RfOwogIGNoYXIg Kip0Y19tZW1iZXJfbmFtZV9saXN0XzsKICBDT1JCQTo6QW55X3B0ciAqdGNfbWVtYmVyX2xhYmVs X2xpc3RfOwogIENPUkJBOjpUeXBlQ29kZV9wdHIgdGNfZGlzY3JpbWluYXRvcl90eXBlXzsKICBD T1JCQTo6TG9uZyB0Y19kZWZhdWx0X2luZGV4X3VzZWRfOwogIENPUkJBOjpVTG9uZyB0Y19sZW5n dGhfOwogIENPUkJBOjpUeXBlQ29kZV9wdHIgdGNfY29udGVudF90eXBlXzsKfTsKIyA1MzUgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVHlwZWNvZGUu aCIKY2xhc3MgQ09SQkFfVHlwZUNvZGVfdmFyCnsKcHVibGljOgogIENPUkJBX1R5cGVDb2RlX3Zh ciAodm9pZCk7CiAgQ09SQkFfVHlwZUNvZGVfdmFyIChDT1JCQV9UeXBlQ29kZV9wdHIpOwogIENP UkJBX1R5cGVDb2RlX3ZhciAoY29uc3QgQ09SQkFfVHlwZUNvZGVfdmFyICYpOwogIH5DT1JCQV9U eXBlQ29kZV92YXIgKHZvaWQpOwoKICBDT1JCQV9UeXBlQ29kZV92YXIgJm9wZXJhdG9yPSAoQ09S QkFfVHlwZUNvZGVfcHRyKTsKICBDT1JCQV9UeXBlQ29kZV92YXIgJm9wZXJhdG9yPSAoY29uc3Qg Q09SQkFfVHlwZUNvZGVfdmFyICYpOwogIENPUkJBX1R5cGVDb2RlX3B0ciBvcGVyYXRvci0+ICh2 b2lkKSBjb25zdDsKCgogIG9wZXJhdG9yIGNvbnN0IENPUkJBX1R5cGVDb2RlX3B0ciAmKCkgY29u c3Q7CiAgb3BlcmF0b3IgQ09SQkFfVHlwZUNvZGVfcHRyICYoKTsKICBDT1JCQV9UeXBlQ29kZV9w dHIgaW4gKHZvaWQpIGNvbnN0OwogIENPUkJBX1R5cGVDb2RlX3B0ciAmaW5vdXQgKHZvaWQpOwog IENPUkJBX1R5cGVDb2RlX3B0ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9UeXBlQ29kZV9wdHIgX3Jl dG4gKHZvaWQpOwogIENPUkJBX1R5cGVDb2RlX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKcHJpdmF0 ZToKICBDT1JCQV9UeXBlQ29kZV9wdHIgcHRyXzsKfTsKIyA1NjcgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaCIKY2xhc3MgQ09SQkFf VHlwZUNvZGVfb3V0CnsKcHVibGljOgogIENPUkJBX1R5cGVDb2RlX291dCAoQ09SQkFfVHlwZUNv ZGVfcHRyICYpOwogIENPUkJBX1R5cGVDb2RlX291dCAoQ09SQkFfVHlwZUNvZGVfdmFyICYpOwog IENPUkJBX1R5cGVDb2RlX291dCAoY29uc3QgQ09SQkFfVHlwZUNvZGVfb3V0ICYpOwogIENPUkJB X1R5cGVDb2RlX291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9UeXBlQ29kZV9vdXQgJik7CiAg Q09SQkFfVHlwZUNvZGVfb3V0ICZvcGVyYXRvcj0gKENPUkJBX1R5cGVDb2RlX3B0cik7CiAgb3Bl cmF0b3IgQ09SQkFfVHlwZUNvZGVfcHRyICYoKTsKICBDT1JCQV9UeXBlQ29kZV9wdHIgJnB0ciAo dm9pZCk7CiAgQ09SQkFfVHlwZUNvZGVfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKcHJpdmF0ZToK ICBDT1JCQV9UeXBlQ29kZV9wdHIgJnB0cl87CgoKICBDT1JCQV9UeXBlQ29kZV9vdXQgJm9wZXJh dG9yPSAoY29uc3QgQ09SQkFfVHlwZUNvZGVfdmFyICYpOwp9OwoKCgoKCgoKY2xhc3MgVEFPX1R5 cGVDb2Rlcwp7CnB1YmxpYzoKCgoKICBzdGF0aWMgdm9pZCBpbml0ICh2b2lkKTsKCgogIHN0YXRp YyB2b2lkIGZpbmkgKHZvaWQpOwoKcHJpdmF0ZToKCgoKICBzdGF0aWMgaW50IGluaXRpYWxpemVk XzsKCn07CgoKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0 Q0RSJiBjZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09S QkE6OlR5cGVDb2RlICp4KTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChU QU9fSW5wdXRDRFImIGNkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD T1JCQTo6VHlwZUNvZGUgKiZ4KTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaSIgMQoKCgppbmxpbmUgQ09SQkE6OlVMb25n CkNPUkJBX1R5cGVDb2RlOjpfaW5jcl9yZWZjbnQgKHZvaWQpCnsKICBBQ0VfR3VhcmQ8IEFDRV9N VF9TWU5DSDo6TVVURVggPiBndWFyZCAodGhpcy0+cmVmY291bnRfbG9ja18pOyBpZiAoZ3VhcmQu bG9ja2VkICgpID09IDApIHJldHVybiAwOzsKICByZXR1cm4gdGhpcy0+cmVmY291bnRfKys7Cn0K CmlubGluZSBDT1JCQTo6VUxvbmcKQ09SQkFfVHlwZUNvZGU6Ol9kZWNyX3JlZmNudCAodm9pZCkK ewogIHsKICAgIEFDRV9HdWFyZDwgQUNFX01UX1NZTkNIOjpNVVRFWCA+IGd1YXJkICh0aGlzLT5y ZWZjb3VudF9sb2NrXyk7IGlmIChndWFyZC5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwogICAg dGhpcy0+cmVmY291bnRfLS07CiAgICBpZiAodGhpcy0+cmVmY291bnRfICE9IDApCiAgICAgIHJl dHVybiB0aGlzLT5yZWZjb3VudF87CiAgfQogIGRlbGV0ZSB0aGlzOwogIHJldHVybiAwOwp9Cgpp bmxpbmUgQ09SQkE6OlR5cGVDb2RlX3B0cgpDT1JCQV9UeXBlQ29kZTo6X2R1cGxpY2F0ZSAoQ09S QkE6OlR5cGVDb2RlX3B0ciB0YykKewogIGlmICh0YykKICAgIHRjLT5faW5jcl9yZWZjbnQgKCk7 CiAgcmV0dXJuIHRjOwp9CgppbmxpbmUgQ09SQkE6OlR5cGVDb2RlX3B0cgpDT1JCQTo6VHlwZUNv ZGU6Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4gKENPUkJBOjpUeXBlQ29kZV9wdHIpMDsKfQoKaW5s aW5lIENPUkJBOjpUQ0tpbmQKQ09SQkFfVHlwZUNvZGU6OmtpbmQgKENPUkJBOjpFbnZpcm9ubWVu dCAmKSBjb25zdAp7CiAgcmV0dXJuIChDT1JCQTo6VENLaW5kKSB0aGlzLT5raW5kXzsKfQoKCmlu bGluZSBDT1JCQTo6Qm9vbGVhbgpDT1JCQV9UeXBlQ29kZTo6ZXF1aXZhbGVudCAoQ09SQkE6OlR5 cGVDb2RlX3B0ciB0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9u bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkgY29uc3QKewogIHJldHVybiB0 aGlzLT5lcXVfY29tbW9uICh0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0K CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KQ09SQkFfVHlwZUNvZGU6OmVxdWFsIChDT1JCQTo6VHlw ZUNvZGVfcHRyIHRjLAogICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkgY29uc3QKewogIHJldHVybiB0aGlzLT5l cXVfY29tbW9uICh0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCgppbmxp bmUgY29uc3QgY2hhciAqCkNPUkJBX1R5cGVDb2RlOjppZCAoQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKSBjb25zdAp7CgogIGlmICh0aGlzLT5wcml2 YXRlX3N0YXRlXy0+dGNfaWRfa25vd25fKQogICAgcmV0dXJuIHRoaXMtPnByaXZhdGVfc3RhdGVf LT50Y19pZF87CiAgZWxzZQogICAgcmV0dXJuIHRoaXMtPnByaXZhdGVfaWQgKF9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgoKaW5saW5lIGNvbnN0IGNoYXIgKgpDT1JCQV9UeXBl Q29kZTo6bmFtZSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlKSBjb25zdAp7CgogIGlmICh0aGlzLT5wcml2YXRlX3N0YXRlXy0+dGNfbmFtZV9rbm93 bl8pCiAgICByZXR1cm4gdGhpcy0+cHJpdmF0ZV9zdGF0ZV8tPnRjX25hbWVfOwogIGVsc2UKICAg IHJldHVybiB0aGlzLT5wcml2YXRlX25hbWUgKF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUpOwp9CgoKCgoKCmlubGluZSBDT1JCQTo6VUxvbmcKQ09SQkFfVHlwZUNvZGU6Om1lbWJlcl9j b3VudCAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl KSBjb25zdAp7CgogIGlmICh0aGlzLT5wcml2YXRlX3N0YXRlXy0+dGNfbWVtYmVyX2NvdW50X2tu b3duXykKICAgIHJldHVybiB0aGlzLT5wcml2YXRlX3N0YXRlXy0+dGNfbWVtYmVyX2NvdW50XzsK ICBlbHNlCiAgICByZXR1cm4gdGhpcy0+cHJpdmF0ZV9tZW1iZXJfY291bnQgKF9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KQ09SQkE6 OmlzX25pbCAoQ09SQkE6OlR5cGVDb2RlX3B0ciBvYmopCnsKICByZXR1cm4gb2JqID09IDA7Cn0K CmlubGluZSB2b2lkCkNPUkJBOjpyZWxlYXNlIChDT1JCQTo6VHlwZUNvZGVfcHRyIG9iaikKewog IGlmIChvYmopCiAgICBvYmotPl9kZWNyX3JlZmNudCAoKTsKfQoKCgppbmxpbmUKQ09SQkFfVHlw ZUNvZGVfdmFyOjpDT1JCQV9UeXBlQ29kZV92YXIgKHZvaWQpCiAgOiBwdHJfIChDT1JCQV9UeXBl Q29kZTo6X25pbCAoKSkKe30KCmlubGluZQpDT1JCQV9UeXBlQ29kZV92YXI6OkNPUkJBX1R5cGVD b2RlX3ZhciAoQ09SQkFfVHlwZUNvZGVfcHRyIHApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lIENP UkJBX1R5cGVDb2RlX3B0cgpDT1JCQV9UeXBlQ29kZV92YXI6OnB0ciAodm9pZCkgY29uc3QKewog IHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfVHlwZUNvZGVfdmFyOjpDT1JCQV9U eXBlQ29kZV92YXIgKGNvbnN0IENPUkJBX1R5cGVDb2RlX3ZhciAmcCkKICA6IHB0cl8gKENPUkJB X1R5cGVDb2RlOjpfZHVwbGljYXRlIChwLnB0ciAoKSkpCnt9CgppbmxpbmUKQ09SQkFfVHlwZUNv ZGVfdmFyOjp+Q09SQkFfVHlwZUNvZGVfdmFyICh2b2lkKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHRo aXMtPnB0cl8pOwp9CgppbmxpbmUgQ09SQkFfVHlwZUNvZGVfdmFyICYKQ09SQkFfVHlwZUNvZGVf dmFyOjpvcGVyYXRvcj0gKENPUkJBX1R5cGVDb2RlX3B0ciBwKQp7CiAgQ09SQkE6OnJlbGVhc2Ug KHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l IENPUkJBX1R5cGVDb2RlX3ZhciAmCkNPUkJBX1R5cGVDb2RlX3Zhcjo6b3BlcmF0b3I9IChjb25z dCBDT1JCQV9UeXBlQ29kZV92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAg Q09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogICAgICB0aGlzLT5wdHJfID0gQ09SQkFfVHlw ZUNvZGU6Ol9kdXBsaWNhdGUgKHAucHRyICgpKTsKICAgIH0KICByZXR1cm4gKnRoaXM7Cn0KCmlu bGluZQpDT1JCQV9UeXBlQ29kZV92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX1R5cGVDb2RlX3B0 ciAmKCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfVHlwZUNv ZGVfdmFyOjpvcGVyYXRvciBDT1JCQV9UeXBlQ29kZV9wdHIgJigpCnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQoKaW5saW5lIENPUkJBX1R5cGVDb2RlX3B0cgpDT1JCQV9UeXBlQ29kZV92YXI6Om9w ZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENP UkJBX1R5cGVDb2RlX3B0cgpDT1JCQV9UeXBlQ29kZV92YXI6OmluICh2b2lkKSBjb25zdAp7CiAg cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9UeXBlQ29kZV9wdHIgJgpDT1JCQV9U eXBlQ29kZV92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGlu ZSBDT1JCQV9UeXBlQ29kZV9wdHIgJgpDT1JCQV9UeXBlQ29kZV92YXI6Om91dCAodm9pZCkKewog IENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsKICB0aGlzLT5wdHJfID0gQ09SQkFfVHlwZUNv ZGU6Ol9uaWwgKCk7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9UeXBlQ29k ZV9wdHIKQ09SQkFfVHlwZUNvZGVfdmFyOjpfcmV0biAodm9pZCkKewoKICBDT1JCQV9UeXBlQ29k ZV9wdHIgdmFsID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gQ09SQkFfVHlwZUNvZGU6Ol9u aWwgKCk7CiAgcmV0dXJuIHZhbDsKfQoKCgoKCmlubGluZQpDT1JCQV9UeXBlQ29kZV9vdXQ6OkNP UkJBX1R5cGVDb2RlX291dCAoQ09SQkFfVHlwZUNvZGVfcHRyICZwKQogIDogcHRyXyAocCkKewog IHRoaXMtPnB0cl8gPSBDT1JCQV9UeXBlQ29kZTo6X25pbCAoKTsKfQoKaW5saW5lCkNPUkJBX1R5 cGVDb2RlX291dDo6Q09SQkFfVHlwZUNvZGVfb3V0IChDT1JCQV9UeXBlQ29kZV92YXIgJnApCiAg OiBwdHJfIChwLm91dCAoKSkKewogIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsKICB0aGlz LT5wdHJfID0gQ09SQkFfVHlwZUNvZGU6Ol9uaWwgKCk7Cn0KCmlubGluZQpDT1JCQV9UeXBlQ29k ZV9vdXQ6OkNPUkJBX1R5cGVDb2RlX291dCAoY29uc3QgQ09SQkFfVHlwZUNvZGVfb3V0ICZwKQog IDogcHRyXyAocC5wdHJfKQp7fQoKaW5saW5lIENPUkJBX1R5cGVDb2RlX291dCAmCkNPUkJBX1R5 cGVDb2RlX291dDo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9UeXBlQ29kZV9vdXQgJnApCnsKICB0 aGlzLT5wdHJfID0gcC5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX1R5cGVD b2RlX291dCAmCkNPUkJBX1R5cGVDb2RlX291dDo6b3BlcmF0b3I9IChDT1JCQV9UeXBlQ29kZV9w dHIgcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJB X1R5cGVDb2RlX291dDo6b3BlcmF0b3IgQ09SQkFfVHlwZUNvZGVfcHRyICYoKQp7CiAgcmV0dXJu IHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9UeXBlQ29kZV9wdHIgJgpDT1JCQV9UeXBlQ29k ZV9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFf VHlwZUNvZGVfcHRyCkNPUkJBX1R5cGVDb2RlX291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJl dHVybiB0aGlzLT5wdHJfOwp9CiMgNjE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA2MjIgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaCIgMgojIDI4 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5o IiAyCiMgNTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vQW55LmgiCmNsYXNzIENPUkJBX0FueQp7CnB1YmxpYzoKCgogIGVudW0KICB7CiAgICBVTklO SVRJQUxJWkVEX3R5cGUgPSAweGYwMDAsCiAgICBWQUxVRV9XSVRIT1VUX1RZUEUsCiAgICBVTlNV UFBPUlRFRF9PUEVSQVRJT04KICB9OwoKCgoKICBDT1JCQV9BbnkgKHZvaWQpOwoKCiAgQ09SQkFf QW55IChDT1JCQTo6VHlwZUNvZGVfcHRyIHR5cGUpOwojIDg0ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5oIgogIENPUkJBX0FueSAoQ09SQkE6 OlR5cGVDb2RlX3B0ciB0eXBlLAogICAgICAgICAgICAgQ09SQkE6OlVTaG9ydCBkdW1teSwKICAg ICAgICAgICAgIGludCBieXRlX29yZGVyLAogICAgICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2Vf QmxvY2sqIG1iKTsKCgogIENPUkJBX0FueSAoY29uc3QgQ09SQkFfQW55ICZhKTsKCgogIH5DT1JC QV9BbnkgKHZvaWQpOwoKCiAgQ09SQkFfQW55ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0FueSAm KTsKCgoKCgoKCiAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OlNob3J0KTsKCgogIHZvaWQgb3Bl cmF0b3I8PD0gKENPUkJBOjpVU2hvcnQpOwoKCiAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6Okxv bmcpOwoKCiAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OlVMb25nKTsKCgogIHZvaWQgb3BlcmF0 b3I8PD0gKENPUkJBOjpMb25nTG9uZyk7CgoKICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6VUxv bmdMb25nKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpGbG9hdCk7CgoKICB2b2lkIG9w ZXJhdG9yPDw9IChDT1JCQTo6RG91YmxlKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpM b25nRG91YmxlKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKGNvbnN0IENPUkJBX0FueSYpOwoKCiAg dm9pZCBvcGVyYXRvcjw8PSAoQ09SQkFfQW55X3B0cik7CgoKICB2b2lkIG9wZXJhdG9yPDw9IChj b25zdCBjaGFyKik7CgoKICB2b2lkIG9wZXJhdG9yPDw9IChjb25zdCBDT1JCQTo6V0NoYXIqKTsK CgogIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpUeXBlQ29kZV9wdHIpOwoKCiAgdm9pZCBvcGVy YXRvcjw8PSAoY29uc3QgQ09SQkE6Ok9iamVjdF9wdHIpOwoKCgogIHZvaWQgb3BlcmF0b3I8PD0g KENPUkJBOjpPYmplY3RfcHRyICopOwoKCgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAo Q09SQkE6OlNob3J0JikgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoQ09S QkE6OlVTaG9ydCYpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKENPUkJB OjpMb25nJikgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoQ09SQkE6OlVM b25nJikgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoQ09SQkE6OkxvbmdM b25nJikgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoQ09SQkE6OlVMb25n TG9uZyYpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKENPUkJBOjpGbG9h dCYpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKENPUkJBOjpEb3VibGUm KSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChDT1JCQTo6TG9uZ0RvdWJs ZSYpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKENPUkJBX0FueSYpIGNv bnN0OwogIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQV9BbnkqJikgY29u c3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoQ09SQkE6OlR5cGVDb2RlX3B0ciYp IGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IGNoYXIqJikgY29u c3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OldDaGFyKiYp IGNvbnN0OwojIDIwMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9BbnkuaCIKICB0eXBlZGVmIEFDRV9PdXRwdXRDRFI6OmZyb21fYm9vbGVhbiBmcm9t X2Jvb2xlYW47CiAgdHlwZWRlZiBBQ0VfT3V0cHV0Q0RSOjpmcm9tX29jdGV0IGZyb21fb2N0ZXQ7 CiAgdHlwZWRlZiBBQ0VfT3V0cHV0Q0RSOjpmcm9tX2NoYXIgZnJvbV9jaGFyOwogIHR5cGVkZWYg QUNFX091dHB1dENEUjo6ZnJvbV93Y2hhciBmcm9tX3djaGFyOwogIHR5cGVkZWYgQUNFX091dHB1 dENEUjo6ZnJvbV9zdHJpbmcgZnJvbV9zdHJpbmc7CiAgdHlwZWRlZiBBQ0VfT3V0cHV0Q0RSOjpm cm9tX3dzdHJpbmcgZnJvbV93c3RyaW5nOwoKCiAgdm9pZCBvcGVyYXRvcjw8PSAoZnJvbV9ib29s ZWFuKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKGZyb21fY2hhcik7CgoKICB2b2lkIG9wZXJhdG9y PDw9IChmcm9tX3djaGFyKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKGZyb21fb2N0ZXQpOwoKCiAg dm9pZCBvcGVyYXRvcjw8PSAoZnJvbV9zdHJpbmcpOwoKCiAgdm9pZCBvcGVyYXRvcjw8PSAoZnJv bV93c3RyaW5nKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKGNvbnN0IENPUkJBX0V4Y2VwdGlvbiAm ZXhjZXB0aW9uKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBX0V4Y2VwdGlvbiAqZXhjZXB0 aW9uKTsKCgoKCgoKICB0eXBlZGVmIEFDRV9JbnB1dENEUjo6dG9fYm9vbGVhbiB0b19ib29sZWFu OwogIHR5cGVkZWYgQUNFX0lucHV0Q0RSOjp0b19jaGFyIHRvX2NoYXI7CiAgdHlwZWRlZiBBQ0Vf SW5wdXRDRFI6OnRvX3djaGFyIHRvX3djaGFyOwogIHR5cGVkZWYgQUNFX0lucHV0Q0RSOjp0b19v Y3RldCB0b19vY3RldDsKICB0eXBlZGVmIEFDRV9JbnB1dENEUjo6dG9fc3RyaW5nIHRvX3N0cmlu ZzsKICB0eXBlZGVmIEFDRV9JbnB1dENEUjo6dG9fd3N0cmluZyB0b193c3RyaW5nOwoKCiAgc3Ry dWN0IHRvX29iamVjdAogIHsKCgogICAgdG9fb2JqZWN0IChDT1JCQV9PYmplY3Rfb3V0IG9iaik7 CiAgICBDT1JCQTo6T2JqZWN0X3B0ciAmcmVmXzsKICB9OwoKCgoKICBDT1JCQTo6Qm9vbGVhbiBv cGVyYXRvcj4+PSAodG9fYm9vbGVhbikgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv cj4+PSAodG9fb2N0ZXQpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKHRv X2NoYXIpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKHRvX3djaGFyKSBj b25zdDsKCgogIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49ICh0b19zdHJpbmcpIGNvbnN0OwoK CiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKHRvX3dzdHJpbmcpIGNvbnN0OwoKCiAgQ09S QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKHRvX29iamVjdCkgY29uc3Q7CgoKCgoKCiAgQ09SQkE6 OlR5cGVDb2RlX3B0ciB0eXBlICh2b2lkKSBjb25zdDsKCgoKICB2b2lkIHR5cGUgKENPUkJBOjpU eXBlQ29kZV9wdHIgdHlwZSwKICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkpOwoKCgoKCgoKICBjb25zdCB2b2lkICp2YWx1ZSAodm9pZCkgY29uc3Q7CiMg MzA1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Fu eS5oIgogIENPUkJBOjpCb29sZWFuIGFueV9vd25zX2RhdGEgKHZvaWQpIGNvbnN0OwoKCgogIEFD RV9NZXNzYWdlX0Jsb2NrKiBfdGFvX2dldF9jZHIgKHZvaWQpIGNvbnN0OwogIGludCBfdGFvX2J5 dGVfb3JkZXIgKHZvaWQpIGNvbnN0OwoKCgogIHR5cGVkZWYgdm9pZCAoKl90YW9fZGVzdHJ1Y3Rv cikodm9pZCopOwoKCiAgdm9pZCBfdGFvX3JlcGxhY2UgKENPUkJBOjpUeXBlQ29kZV9wdHIsCiAg ICAgICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVyLAogICAgICAgICAgICAgICAgICAgICBj b25zdCBBQ0VfTWVzc2FnZV9CbG9jayAqbWIpOwoKCiAgdm9pZCBfdGFvX3JlcGxhY2UgKENPUkJB OjpUeXBlQ29kZV9wdHIgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIs CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrICptYiwKICAgICAg ICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gYW55X293bnNfZGF0YSwKICAgICAgICAgICAg ICAgICAgICAgdm9pZCogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpBbnk6Ol90 YW9fZGVzdHJ1Y3RvciBkZXN0cnVjdG9yKTsKCgogIHZvaWQgX3Rhb19yZXBsYWNlIChDT1JCQTo6 VHlwZUNvZGVfcHRyIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIGFu eV9vd25zX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHZhbHVlLAogICAgICAgICAg ICAgICAgICAgICBDT1JCQTo6QW55OjpfdGFvX2Rlc3RydWN0b3IgZGVzdHJ1Y3Rvcik7CgoKICB2 b2lkIF90YW9fZW5jb2RlIChUQU9fT3V0cHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAg VEFPX09SQl9Db3JlICpvcmJfY29yZSwKICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKCiAgdm9pZCBfdGFvX2Rl Y29kZSAoVEFPX0lucHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCgogIHR5cGVkZWYgQ09S QkFfQW55X3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDT1JCQV9BbnlfdmFyIF92YXJfdHlwZTsK CgoKCiAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwogIHN0YXRpYyB2 b2lkIF90YW9fYW55X3N0cmluZ19kZXN0cnVjdG9yICh2b2lkKik7CiAgc3RhdGljIHZvaWQgX3Rh b19hbnlfd3N0cmluZ19kZXN0cnVjdG9yICh2b2lkKik7CiAgc3RhdGljIHZvaWQgX3Rhb19hbnlf dGNfZGVzdHJ1Y3RvciAodm9pZCopOwoKcHJvdGVjdGVkOgoKICB2b2lkIGZyZWVfdmFsdWUgKHZv aWQpOwoKcHJpdmF0ZToKCiAgQ09SQkE6OlR5cGVDb2RlX3ZhciB0eXBlXzsKCgogIGludCBieXRl X29yZGVyXzsKICBBQ0VfTWVzc2FnZV9CbG9jayAqY2RyXzsKCgogIENPUkJBOjpCb29sZWFuIGFu eV9vd25zX2RhdGFfOwoKCiAgdm9pZCAqdmFsdWVfOwoKCiAgQ09SQkE6OkFueTo6X3Rhb19kZXN0 cnVjdG9yIGRlc3RydWN0b3JfOwoKCiAgdm9pZCBvcGVyYXRvcjw8PSAodW5zaWduZWQgY2hhcik7 CiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKHVuc2lnbmVkIGNoYXImKSBjb25zdDsKCiAg ZnJpZW5kIGNsYXNzIENPUkJBX05WTGlzdDsKICBmcmllbmQgY2xhc3MgVEFPX01hcnNoYWxfQW55 Owp9OwoKCgoKCgoKY2xhc3MgQ09SQkFfQW55X3Zhcgp7CnB1YmxpYzoKCiAgQ09SQkFfQW55X3Zh ciAodm9pZCk7CgoKICBDT1JCQV9BbnlfdmFyIChDT1JCQV9BbnkgKmEpOwoKCiAgQ09SQkFfQW55 X3ZhciAoY29uc3QgQ09SQkFfQW55X3ZhciAmYSk7CgoKICB+Q09SQkFfQW55X3ZhciAodm9pZCk7 CgoKICBDT1JCQV9BbnlfdmFyICZvcGVyYXRvcj0gKENPUkJBX0FueSAqYSk7CgoKCgoKCgogIENP UkJBX0FueV92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfQW55X3ZhciAmYSk7CgoKICBDT1JC QV9BbnkgKm9wZXJhdG9yLT4gKHZvaWQpOwoKCiAgb3BlcmF0b3IgY29uc3QgQ09SQkFfQW55ICoo KSBjb25zdDsKCgogIG9wZXJhdG9yIENPUkJBX0FueSAqJigpOwoKCiAgY29uc3QgQ09SQkFfQW55 ICZpbiAodm9pZCkgY29uc3Q7CgoKICBDT1JCQV9BbnkgJmlub3V0ICh2b2lkKTsKCgogIENPUkJB X0FueSAqJm91dCAodm9pZCk7CgoKICBDT1JCQV9BbnkgKl9yZXRuICh2b2lkKTsKCnByaXZhdGU6 CgogIENPUkJBX0FueSAqcHRyXzsKfTsKIyA0NTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQW55LmgiCmNsYXNzIENPUkJBX0FueV9vdXQKewpwdWJs aWM6CgoKCiAgQ09SQkFfQW55X291dCAoQ09SQkFfQW55IComcCk7CgoKICBDT1JCQV9Bbnlfb3V0 IChDT1JCQV9BbnlfdmFyICZwKTsKCgogIENPUkJBX0FueV9vdXQgKGNvbnN0IENPUkJBX0FueV9v dXQgJnMpOwoKCiAgQ09SQkFfQW55X291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Bbnlfb3V0 ICZzKTsKCgogIENPUkJBX0FueV9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfQW55ICpwKTsKCgogIENP UkJBX0FueV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfQW55ICpwKTsKCgogIG9wZXJhdG9y IENPUkJBX0FueSAqJigpOwoKCiAgQ09SQkFfQW55IComIHB0ciAodm9pZCk7CgogIENPUkJBX0Fu eSAqb3BlcmF0b3ItPiAodm9pZCk7Cgpwcml2YXRlOgoKICBDT1JCQV9BbnkgKiZwdHJfOwoKCiAg dm9pZCBvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0FueV92YXIgJik7Cn07CgoKICAgICAgICAgICBD T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSJiBjZHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OkFueSAmeCk7CiAgICAgICAg ICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSJiBjZHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkFueSAmeCk7CgoKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5pIiAxCgoK CgoKaW5saW5lIENPUkJBOjpCb29sZWFuCkNPUkJBX0FueTo6YW55X293bnNfZGF0YSAodm9pZCkg Y29uc3QKewogIHJldHVybiAodGhpcy0+YW55X293bnNfZGF0YV8gIT0gMCAmJiB0aGlzLT52YWx1 ZV8gIT0gMCk7Cn0KCmlubGluZSBBQ0VfTWVzc2FnZV9CbG9jayoKQ09SQkFfQW55OjpfdGFvX2dl dF9jZHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y2RyXzsKfQoKaW5saW5lIGludApD T1JCQV9Bbnk6Ol90YW9fYnl0ZV9vcmRlciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5i eXRlX29yZGVyXzsKfQoKaW5saW5lCkNPUkJBX0FueTo6dG9fb2JqZWN0Ojp0b19vYmplY3QgKENP UkJBX09iamVjdF9vdXQgb2JqKQogIDogcmVmXyAob2JqLnB0ciAoKSkKewp9CgoKCgoKaW5saW5l CkNPUkJBX0FueV92YXI6OkNPUkJBX0FueV92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7Cn0KCmlu bGluZQpDT1JCQV9BbnlfdmFyOjpDT1JCQV9BbnlfdmFyIChDT1JCQV9BbnkgKnApCiAgOiBwdHJf IChwKQp7Cn0KCmlubGluZQpDT1JCQV9BbnlfdmFyOjpDT1JCQV9BbnlfdmFyIChjb25zdCBDT1JC QV9BbnlfdmFyJiByKQp7CiAgQ09SQkFfQW55X3B0ciBucHRyOwogIGRvIHsgdHJ5IHsgbnB0ciA9 IG5ldyBDT1JCQTo6QW55ICgqci5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpf X2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CgogIHRoaXMt PnB0cl8gPSBucHRyOwp9CgppbmxpbmUKQ09SQkFfQW55X3Zhcjo6fkNPUkJBX0FueV92YXIgKHZv aWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX0FueV92YXI6Om9wZXJh dG9yIENPUkJBX0FueSAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJB X0FueV92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX0FueSAqKCkgY29uc3QKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6OkFueSAqCkNPUkJBX0FueV92YXI6Om9wZXJhdG9y LT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IENPUkJBX0Fu eSAmCkNPUkJBX0FueV92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJf Owp9CgppbmxpbmUgQ09SQkFfQW55ICYKQ09SQkFfQW55X3Zhcjo6aW5vdXQgKHZvaWQpCnsKICBy ZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9BbnkgKiYKQ09SQkFfQW55X3Zhcjo6 b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0 dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9BbnkgKgpDT1JCQV9BbnlfdmFyOjpfcmV0 biAodm9pZCkKewogIENPUkJBX0FueSAqdGVtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9 IDA7CiAgcmV0dXJuIHRlbXA7Cn0KCgoKCgppbmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJB X0FueV92YXIgJmxocywgQ09SQkE6OlNob3J0IHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhz Owp9CgppbmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6 OlVTaG9ydCByaHMpCnsKICBsaHMuaW5vdXQgKCkgPDw9IHJoczsKfQoKaW5saW5lIHZvaWQKb3Bl cmF0b3IgPDw9IChDT1JCQV9BbnlfdmFyICZsaHMsIENPUkJBOjpMb25nIHJocykKewogIGxocy5p bm91dCAoKSA8PD0gcmhzOwp9CgppbmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJBX0FueV92 YXIgJmxocywgQ09SQkE6OlVMb25nIHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhzOwp9Cgpp bmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkxvbmdM b25nIHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhzOwp9CgppbmxpbmUgdm9pZApvcGVyYXRv ciA8PD0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OlVMb25nTG9uZyByaHMpCnsKICBsaHMu aW5vdXQgKCkgPDw9IHJoczsKfQoKaW5saW5lIHZvaWQKb3BlcmF0b3IgPDw9IChDT1JCQV9Bbnlf dmFyICZsaHMsIENPUkJBOjpGbG9hdCByaHMpCnsKICBsaHMuaW5vdXQgKCkgPDw9IHJoczsKfQoK aW5saW5lIHZvaWQKb3BlcmF0b3IgPDw9IChDT1JCQV9BbnlfdmFyICZsaHMsIENPUkJBOjpEb3Vi bGUgcmhzKQp7CiAgbGhzLmlub3V0ICgpIDw8PSByaHM7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9y IDw8PSAoQ09SQkFfQW55X3ZhciAmbGhzLCBjb25zdCBDT1JCQV9BbnkmIHJocykKewogIGxocy5p bm91dCAoKSA8PD0gcmhzOwp9CgppbmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJBX0FueV92 YXIgJmxocywgY29uc3QgY2hhciogcmhzKQp7CiAgbGhzLmlub3V0ICgpIDw8PSByaHM7Cn0KCmlu bGluZSB2b2lkCm9wZXJhdG9yIDw8PSAoQ09SQkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6VHlwZUNv ZGVfcHRyIHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhzOwp9CgppbmxpbmUgdm9pZApvcGVy YXRvciA8PD0gKENPUkJBX0FueV92YXIgJmxocywgY29uc3QgQ09SQkE6Ok9iamVjdF9wdHIgcmhz KQp7CiAgbGhzLmlub3V0ICgpIDw8PSByaHM7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yIDw8PSAo Q09SQkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6QW55Ojpmcm9tX2Jvb2xlYW4gcmhzKQp7CiAgbGhz Lmlub3V0ICgpIDw8PSByaHM7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yIDw8PSAoQ09SQkFfQW55 X3ZhciAmbGhzLCBDT1JCQTo6QW55Ojpmcm9tX2NoYXIgcmhzKQp7CiAgbGhzLmlub3V0ICgpIDw8 PSByaHM7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yIDw8PSAoQ09SQkFfQW55X3ZhciAmbGhzLCBD T1JCQTo6QW55Ojpmcm9tX3djaGFyIHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhzOwp9Cgpp bmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6 ZnJvbV9vY3RldCByaHMpCnsKICBsaHMuaW5vdXQgKCkgPDw9IHJoczsKfQoKaW5saW5lIHZvaWQK b3BlcmF0b3IgPDw9IChDT1JCQV9BbnlfdmFyICZsaHMsIENPUkJBOjpBbnk6OmZyb21fc3RyaW5n IHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhzOwp9CgppbmxpbmUgdm9pZApvcGVyYXRvciA8 PD0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6ZnJvbV93c3RyaW5nIHJocykKewog IGxocy5pbm91dCAoKSA8PD0gcmhzOwp9CgoKCgoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJh dG9yID4+PSAoQ09SQkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6U2hvcnQgJnJocykKewogIHJldHVy biBsaHMuaW5vdXQgKCkgPj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9y ID4+PSAoQ09SQkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6VVNob3J0ICZyaHMpCnsKICByZXR1cm4g bGhzLmlub3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvciA+ Pj0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkxvbmcgJnJocykKewogIHJldHVybiBsaHMu aW5vdXQgKCkgPj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAo Q09SQkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6VUxvbmcgJnJocykKewogIHJldHVybiBsaHMuaW5v dXQgKCkgPj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAoQ09S QkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6TG9uZ0xvbmcgJnJocykKewogIHJldHVybiBsaHMuaW5v dXQgKCkgPj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAoQ09S QkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6VUxvbmdMb25nICZyaHMpCnsKICByZXR1cm4gbGhzLmlu b3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvciA+Pj0gKENP UkJBX0FueV92YXIgJmxocywgQ09SQkE6OkZsb2F0ICZyaHMpCnsKICByZXR1cm4gbGhzLmlub3V0 ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvciA+Pj0gKENPUkJB X0FueV92YXIgJmxocywgQ09SQkE6OkRvdWJsZSAmcmhzKQp7CiAgcmV0dXJuIGxocy5pbm91dCAo KSA+Pj0gcmhzOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3IgPj49IChDT1JCQV9B bnlfdmFyICZsaHMsIENPUkJBX0FueSAmcmhzKQp7CiAgcmV0dXJuIGxocy5pbm91dCAoKSA+Pj0g cmhzOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3IgPj49IChDT1JCQV9BbnlfdmFy ICZsaHMsIENPUkJBOjpUeXBlQ29kZV9wdHIgJnJocykKewogIHJldHVybiBsaHMuaW5vdXQgKCkg Pj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAoQ09SQkFfQW55 X3ZhciAmbGhzLCBjb25zdCBjaGFyIComcmhzKQp7CiAgcmV0dXJuIGxocy5pbm91dCAoKSA+Pj0g cmhzOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3IgPj49IChDT1JCQV9BbnlfdmFy ICZsaHMsIGNvbnN0IENPUkJBOjpXQ2hhciAqJnJocykKewogIHJldHVybiBsaHMuaW5vdXQgKCkg Pj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAoQ09SQkFfQW55 X3ZhciAmbGhzLCBDT1JCQTo6QW55Ojp0b19ib29sZWFuIHJocykKewogIHJldHVybiBsaHMuaW5v dXQgKCkgPj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAoQ09S QkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6QW55Ojp0b19vY3RldCByaHMpCnsKICByZXR1cm4gbGhz Lmlub3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvciA+Pj0g KENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6dG9fY2hhciByaHMpCnsKICByZXR1cm4g bGhzLmlub3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvciA+ Pj0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6dG9fd2NoYXIgcmhzKQp7CiAgcmV0 dXJuIGxocy5pbm91dCAoKSA+Pj0gcmhzOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0 b3IgPj49IChDT1JCQV9BbnlfdmFyICZsaHMsIENPUkJBOjpBbnk6OnRvX3N0cmluZyByaHMpCnsK ICByZXR1cm4gbGhzLmlub3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpv cGVyYXRvciA+Pj0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6dG9fd3N0cmluZyBy aHMpCnsKICByZXR1cm4gbGhzLmlub3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9v bGVhbgpvcGVyYXRvciA+Pj0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6dG9fb2Jq ZWN0IHJocykKewogIHJldHVybiBsaHMuaW5vdXQgKCkgPj49IHJoczsKfQoKCgoKCmlubGluZQpD T1JCQV9Bbnlfb3V0OjpDT1JCQV9Bbnlfb3V0IChDT1JCQV9BbnkgKiZzKQogIDogcHRyXyAocykK ewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFfQW55X291dDo6Q09SQkFfQW55X291 dCAoQ09SQkFfQW55X3ZhciAmcykKICA6IHB0cl8gKHMub3V0ICgpKQp7Cn0KCmlubGluZQpDT1JC QV9Bbnlfb3V0OjpDT1JCQV9Bbnlfb3V0IChjb25zdCBDT1JCQV9Bbnlfb3V0ICZzKQogIDogcHRy XyAocy5wdHJfKQp7Cn0KCmlubGluZSBDT1JCQV9Bbnlfb3V0ICYKQ09SQkFfQW55X291dDo6b3Bl cmF0b3I9IChjb25zdCBDT1JCQV9Bbnlfb3V0ICZzKQp7CiAgdGhpcy0+cHRyXyA9IHMucHRyXzsK ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9Bbnlfb3V0ICYKQ09SQkFfQW55X291dDo6 b3BlcmF0b3I9IChDT1JCQV9BbnkgKnMpCnsKICB0aGlzLT5wdHJfID0gczsKICByZXR1cm4gKnRo aXM7Cn0KCmlubGluZSBDT1JCQV9Bbnlfb3V0ICYKQ09SQkFfQW55X291dDo6b3BlcmF0b3I9IChj b25zdCBDT1JCQV9BbnkgKnMpCnsKICB0aGlzLT5wdHJfID0gbmV3IENPUkJBOjpBbnkgKCpzKTsK ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9Bbnlfb3V0OjpvcGVyYXRvciBDT1JCQV9B bnkgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9BbnkgKiYKQ09S QkFfQW55X291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBD T1JCQV9BbnkgKgpDT1JCQV9Bbnlfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRo aXMtPnB0cl87Cn0KIyA0OTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vQW55LmgiIDIKIyA1ODMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vQW55LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDU4NCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9BbnkuaCIgMgojIDI5ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlQy5oIiAyCgoK CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L1RBT19FeHBvcnQuaCIgMQojIDM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TbWFydFByb3hpZXMvU21hcnRfUHJveGllcy5o IiAxCiMgMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vU21hcnRQcm94aWVzL1NtYXJ0X1Byb3hpZXMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TbWFydFByb3hpZXMvU21hcnRfUHJv eGllcy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vU21hcnRQcm94aWVzL3NtYXJ0cHJveGllc19leHBvcnQuaCIgMQojIDEwICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NtYXJ0UHJveGll cy9zbWFydHByb3hpZXNfZXhwb3J0LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMQojIDExICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NtYXJ0UHJveGllcy9zbWFydHByb3hp ZXNfZXhwb3J0LmgiIDIKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9TbWFydFByb3hpZXMvU21hcnRfUHJveGllcy5oIiAyCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3QuaCIgMQoj IDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Nt YXJ0UHJveGllcy9TbWFydF9Qcm94aWVzLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b24uaCIgMQojIDIxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0 b24uaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv cHJlLmgiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9UQU9fU2luZ2xldG9uLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmgiIDIKIyA0MSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2lu Z2xldG9uLmgiCnRlbXBsYXRlIDxjbGFzcyBUWVBFLCBjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgVEFP X1NpbmdsZXRvbiA6IHB1YmxpYyBBQ0VfQ2xlYW51cAp7CgpwdWJsaWM6CgogIHN0YXRpYyBUWVBF ICppbnN0YW5jZSAodm9pZCk7CgoKCiAgdmlydHVhbCB2b2lkIGNsZWFudXAgKHZvaWQgKnBhcmFt ID0gMCk7CgoKICBzdGF0aWMgdm9pZCBkdW1wICh2b2lkKTsKCnByb3RlY3RlZDoKCiAgVEFPX1Np bmdsZXRvbiAodm9pZCk7CgoKICBUWVBFIGluc3RhbmNlXzsKCgoKCgoKCiAgc3RhdGljIFRBT19T aW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+IComaW5zdGFuY2VfaSAodm9pZCk7Cn07CiMgODMgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVEFPX1Npbmds ZXRvbi5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVFlQRSwgY2xhc3MgQUNFX0xPQ0s+CmNsYXNzIFRBT19U U1NfU2luZ2xldG9uIDogcHVibGljIEFDRV9DbGVhbnVwCnsKCnB1YmxpYzoKCiAgc3RhdGljIFRZ UEUgKmluc3RhbmNlICh2b2lkKTsKCgoKICB2aXJ0dWFsIHZvaWQgY2xlYW51cCAodm9pZCAqcGFy YW0gPSAwKTsKCgogIHN0YXRpYyB2b2lkIGR1bXAgKHZvaWQpOwoKcHJvdGVjdGVkOgoKICBUQU9f VFNTX1NpbmdsZXRvbiAodm9pZCk7CgoKICBBQ0VfVFNTPCBUWVBFID4gaW5zdGFuY2VfOwoKCgoK CgoKICBzdGF0aWMgVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+IComaW5zdGFuY2Vf aSAodm9pZCk7Cn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b24uaW5sIiAxCiMgOSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmlubCIKdGVtcGxh dGUgPGNsYXNzIFRZUEUsIGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUKVEFPX1NpbmdsZXRvbjxUWVBF LCBBQ0VfTE9DSz46OlRBT19TaW5nbGV0b24gKHZvaWQpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFRZ UEUsIGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUKVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xP Q0s+OjpUQU9fVFNTX1NpbmdsZXRvbiAodm9pZCkKewp9CiMgMTE2ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b24uaCIgMgoKCgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVEFP X1NpbmdsZXRvbi5jcHAiIDEKCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmgiIDEKIyA5ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b24uY3Bw IiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvU3luY2hfVC5oIiAxCiMgMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vVEFPX1NpbmdsZXRvbi5jcHAiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT2JqZWN0X01hbmFnZXIuaCIgMQojIDE3ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT2JqZWN0X01hbmFn ZXIuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv cHJlLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09iamVjdF9NYW5hZ2VyLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDEKIyAyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiIDIKCgoKCgoKY2xhc3MgQUNF X09iamVjdF9NYW5hZ2VyX1ByZWFsbG9jYXRpb25zOwpjbGFzcyBBQ0VfU2lnX0FkYXB0ZXI7CmNs YXNzIEFDRV9TaWdfU2V0OwoKICBjbGFzcyBBQ0VfTXV0ZXg7CiAgY2xhc3MgQUNFX051bGxfTXV0 ZXg7CiAgY2xhc3MgQUNFX1RocmVhZF9NdXRleDsKICBjbGFzcyBBQ0VfUmVjdXJzaXZlX1RocmVh ZF9NdXRleDsKICBjbGFzcyBBQ0VfUldfVGhyZWFkX011dGV4OwoKCmNsYXNzIEFDRV9DbGVhbnVw X0luZm9fTm9kZTsKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIEFDRV9DbGVhbnVwX0FkYXB0ZXI7 CiMgMTc3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT2Jq ZWN0X01hbmFnZXIuaCIKY2xhc3MgQUNFX09iamVjdF9NYW5hZ2VyIDogcHVibGljIEFDRV9PYmpl Y3RfTWFuYWdlcl9CYXNlCnsKCnB1YmxpYzoKCgoKCgogIHZpcnR1YWwgaW50IGluaXQgKHZvaWQp OwoKCgoKCgogIHZpcnR1YWwgaW50IGZpbmkgKHZvaWQpOwojIDIwNCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiAgc3RhdGlj IGludCBzdGFydGluZ191cCAodm9pZCk7CiMgMjEzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvT2JqZWN0X01hbmFnZXIuaCIKICBzdGF0aWMgaW50IHNodXR0 aW5nX2Rvd24gKHZvaWQpOwojIDIyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiAgc3RhdGljIGludCBhdF9leGl0IChBQ0Vf Q2xlYW51cCAqb2JqZWN0LCB2b2lkICpwYXJhbSA9IDApOwojIDI0MSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiAgc3RhdGlj IGludCBhdF9leGl0ICh2b2lkICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0xF QU5VUF9GVU5DIGNsZWFudXBfaG9vaywKICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBhcmFt KTsKIyAyNTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P YmplY3RfTWFuYWdlci5oIgogIGVudW0gUHJlYWxsb2NhdGVkX09iamVjdAogICAgewogICAgICBB Q0VfRklMRUNBQ0hFX0xPQ0ssCgogICAgICBBQ0VfU1RBVElDX09CSkVDVF9MT0NLLAoKCiAgICAg IEFDRV9NVF9DT1JCQV9IQU5ETEVSX0xPQ0ssCiAgICAgIEFDRV9EVU1QX0xPQ0ssCiAgICAgIEFD RV9TSUdfSEFORExFUl9MT0NLLAogICAgICBBQ0VfU0lOR0xFVE9OX05VTExfTE9DSywKICAgICAg QUNFX1NJTkdMRVRPTl9SRUNVUlNJVkVfVEhSRUFEX0xPQ0ssCiAgICAgIEFDRV9USFJFQURfRVhJ VF9MT0NLLAoKICAgICAgQUNFX1RPS0VOX01BTkFHRVJfQ1JFQVRJT05fTE9DSywKICAgICAgQUNF X1RPS0VOX0lOVkFSSUFOVFNfQ1JFQVRJT05fTE9DSywKCiAgICAgIEFDRV9QUk9BQ1RPUl9FVkVO VF9MT09QX0xPQ0ssCgoKCgoKICAgICAgQUNFX1BSRUFMTE9DQVRFRF9PQkpFQ1RTCiAgICB9OwoK CgoKICBlbnVtIFByZWFsbG9jYXRlZF9BcnJheQogICAgewoKCgoKICAgICAgQUNFX0VNUFRZX1BS RUFMTE9DQVRFRF9BUlJBWSwKCgoKCiAgICAgIEFDRV9QUkVBTExPQ0FURURfQVJSQVlTCiAgICB9 OwojIDMwNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09i amVjdF9NYW5hZ2VyLmgiCiAgc3RhdGljIEFDRV9TaWdfU2V0ICZkZWZhdWx0X21hc2sgKHZvaWQp OwoKcHJpdmF0ZToKCiAgQUNFX09TX0V4aXRfSW5mbyBleGl0X2luZm9fOwoKCgogIEFDRV9PYmpl Y3RfTWFuYWdlcl9QcmVhbGxvY2F0aW9ucyAqcHJlYWxsb2NhdGlvbnNfOwoKCiAgQUNFX1NpZ19B ZGFwdGVyICphY2Vfc2VydmljZV9jb25maWdfc2lnX2hhbmRsZXJfOwoKCgoKICBpbnQgYXRfZXhp dF9pICh2b2lkICpvYmplY3QsIEFDRV9DTEVBTlVQX0ZVTkMgY2xlYW51cF9ob29rLCB2b2lkICpw YXJhbSk7CgoKcHVibGljOgojIDMzMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiAgc3RhdGljIGludCBnZXRfc2luZ2xldG9u X2xvY2sgKEFDRV9OdWxsX011dGV4IComKTsKCgoKCgoKICBzdGF0aWMgaW50IGdldF9zaW5nbGV0 b25fbG9jayAoQUNFX1RocmVhZF9NdXRleCAqJik7CgoKCgoKCiAgc3RhdGljIGludCBnZXRfc2lu Z2xldG9uX2xvY2sgKEFDRV9NdXRleCAqJik7CgoKCgoKCiAgc3RhdGljIGludCBnZXRfc2luZ2xl dG9uX2xvY2sgKEFDRV9SZWN1cnNpdmVfVGhyZWFkX011dGV4IComKTsKCgoKCgoKICBzdGF0aWMg aW50IGdldF9zaW5nbGV0b25fbG9jayAoQUNFX1JXX1RocmVhZF9NdXRleCAqJik7CgoKcHVibGlj OgoKCgoKCgoKICBzdGF0aWMgQUNFX09iamVjdF9NYW5hZ2VyICppbnN0YW5jZSAodm9pZCk7CgoK ICBzdGF0aWMgdm9pZCAqcHJlYWxsb2NhdGVkX29iamVjdFtBQ0VfUFJFQUxMT0NBVEVEX09CSkVD VFNdOwoKCiAgc3RhdGljIHZvaWQgKnByZWFsbG9jYXRlZF9hcnJheVtBQ0VfUFJFQUxMT0NBVEVE X0FSUkFZU107CgpwdWJsaWM6CgoKCgogIEFDRV9PYmplY3RfTWFuYWdlciAodm9pZCk7CiAgfkFD RV9PYmplY3RfTWFuYWdlciAodm9pZCk7Cgpwcml2YXRlOgoKICBzdGF0aWMgQUNFX09iamVjdF9N YW5hZ2VyICppbnN0YW5jZV87CgoKCiAgQUNFX1JlY3Vyc2l2ZV9UaHJlYWRfTXV0ZXggKmludGVy bmFsX2xvY2tfOwoKCiAgQUNFX0NsZWFudXBfQWRhcHRlcjxBQ0VfTnVsbF9NdXRleD4gKnNpbmds ZXRvbl9udWxsX2xvY2tfOwoKCgogIEFDRV9DbGVhbnVwX0FkYXB0ZXI8QUNFX1JlY3Vyc2l2ZV9U aHJlYWRfTXV0ZXg+ICpzaW5nbGV0b25fcmVjdXJzaXZlX2xvY2tfOwojIDQwOSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiAg ZnJpZW5kIGNsYXNzIEFDRV9PYmplY3RfTWFuYWdlcl9NYW5hZ2VyOwoKCgogIEFDRV9PYmplY3Rf TWFuYWdlciAoY29uc3QgQUNFX09iamVjdF9NYW5hZ2VyICYpOwogIEFDRV9PYmplY3RfTWFuYWdl ciAmb3BlcmF0b3I9IChjb25zdCBBQ0VfT2JqZWN0X01hbmFnZXIgJik7Cn07CgoKCgpjbGFzcyBB Q0VfUmVjdXJzaXZlX1RocmVhZF9NdXRleDsKIyA0MzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PYmplY3RfTWFuYWdlci5oIgpjbGFzcyBBQ0VfU3RhdGlj X09iamVjdF9Mb2NrCnsKcHVibGljOgoKICBzdGF0aWMgQUNFX1JlY3Vyc2l2ZV9UaHJlYWRfTXV0 ZXggKmluc3RhbmNlICh2b2lkKTsKCgoKICBzdGF0aWMgdm9pZCBjbGVhbnVwX2xvY2sgKHZvaWQp Owp9OwoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL09iamVjdF9NYW5hZ2VyLmkiIDEKCgoKaW5saW5lCmludApBQ0VfT2JqZWN0X01hbmFnZXI6 OmF0X2V4aXQgKEFDRV9DbGVhbnVwICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqcGFyYW0pCnsKICByZXR1cm4gQUNFX09iamVjdF9NYW5hZ2VyOjppbnN0YW5jZSAo KS0+YXRfZXhpdF9pICgKICAgIG9iamVjdCwKICAgIChBQ0VfQ0xFQU5VUF9GVU5DKSBhY2VfY2xl YW51cF9kZXN0cm95ZXIsCiAgICBwYXJhbSk7Cn0KCmlubGluZQppbnQKQUNFX09iamVjdF9NYW5h Z2VyOjphdF9leGl0ICh2b2lkICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QUNFX0NMRUFOVVBfRlVOQyBjbGVhbnVwX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqcGFyYW0pCnsKICByZXR1cm4gQUNFX09iamVjdF9NYW5hZ2VyOjppbnN0YW5jZSAo KS0+YXRfZXhpdF9pICgKICAgIG9iamVjdCwKICAgIGNsZWFudXBfaG9vaywKICAgIHBhcmFtKTsK fQoKaW5saW5lCkFDRV9TaWdfU2V0ICYKQUNFX09iamVjdF9NYW5hZ2VyOjpkZWZhdWx0X21hc2sg KHZvaWQpCnsKCgogIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxBQ0VfU2lnX1NldCAqPiAoQUNF X09TX09iamVjdF9NYW5hZ2VyOjpkZWZhdWx0X21hc2sgKCkpOwoKfQojIDQ0OCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiIDIK CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYW5h Z2VkX09iamVjdC5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9NYW5hZ2VkX09iamVjdC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFuYWdlZF9PYmplY3QuaCIgMgoKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMQojIDE5ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFuYWdlZF9PYmpl Y3QuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbmFnZWRfT2JqZWN0LmgiIDIKIyAzOSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbmFnZWRfT2JqZWN0LmgiCnRl bXBsYXRlIDxjbGFzcyBUWVBFPgpjbGFzcyBBQ0VfQ2xlYW51cF9BZGFwdGVyIDogcHVibGljIEFD RV9DbGVhbnVwCnsKcHVibGljOgoKICBBQ0VfQ2xlYW51cF9BZGFwdGVyICh2b2lkKTsKCgogIHZp cnR1YWwgfkFDRV9DbGVhbnVwX0FkYXB0ZXIgKHZvaWQpOwoKCiAgVFlQRSAmb2JqZWN0ICh2b2lk KTsKCnByaXZhdGU6CiAgQUNFX0NsZWFudXBfQWRhcHRlciAoY29uc3QgQUNFX0NsZWFudXBfQWRh cHRlcjxUWVBFPiAmKTsKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQUNFX0NsZWFudXBfQWRhcHRl cjxUWVBFPiAmKTsKCgogIFRZUEUgb2JqZWN0XzsKfTsKIyA5OCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbmFnZWRfT2JqZWN0LmgiCnRlbXBsYXRlIDxj bGFzcyBUWVBFPgpjbGFzcyBBQ0VfTWFuYWdlZF9PYmplY3QKewpwdWJsaWM6CiAgc3RhdGljIFRZ UEUgKmdldF9wcmVhbGxvY2F0ZWRfb2JqZWN0IChBQ0VfT2JqZWN0X01hbmFnZXI6OlByZWFsbG9j YXRlZF9PYmplY3QgaWQpCiAgewoKCgoKCgoKICAgIHJldHVybiAmKChBQ0VfQ2xlYW51cF9BZGFw dGVyPFRZUEU+ICopCiAgICAgICAgICAgICBBQ0VfT2JqZWN0X01hbmFnZXI6OnByZWFsbG9jYXRl ZF9vYmplY3RbaWRdKS0+b2JqZWN0ICgpOwogIH0KCgoKCgoKICBzdGF0aWMgVFlQRSAqZ2V0X3By ZWFsbG9jYXRlZF9hcnJheSAoQUNFX09iamVjdF9NYW5hZ2VyOjpQcmVhbGxvY2F0ZWRfQXJyYXkg aWQpCiAgewoKCgoKCgoKICAgIHJldHVybiAmKChBQ0VfQ2xlYW51cF9BZGFwdGVyPFRZUEU+ICop CiAgICAgICAgICAgICBBQ0VfT2JqZWN0X01hbmFnZXI6OnByZWFsbG9jYXRlZF9hcnJheVtpZF0p LT5vYmplY3QgKCk7CiAgfQoKCgoKCgpwcml2YXRlOgoKICBBQ0VfTWFuYWdlZF9PYmplY3QgKHZv aWQpOwogIEFDRV9NYW5hZ2VkX09iamVjdCAoY29uc3QgQUNFX01hbmFnZWRfT2JqZWN0PFRZUEU+ ICYpOwogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBBQ0VfTWFuYWdlZF9PYmplY3Q8VFlQRT4gJik7 CgogIGZyaWVuZCBjbGFzcyB0aGlzX3ByZXZlbnRzX2NvbXBpbGVyX3dhcm5pbmdfYWJvdXRfb25s eV9wcml2YXRlX2NvbnN0cnVjdG9yczsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYW5hZ2VkX09iamVjdC5pIiAxCgoKCnRlbXBsYXRlIDxj bGFzcyBUWVBFPgppbmxpbmUKQUNFX0NsZWFudXBfQWRhcHRlcjxUWVBFPjo6QUNFX0NsZWFudXBf QWRhcHRlciAodm9pZCkKCgp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUWVBFPgppbmxpbmUKVFlQRSAm CkFDRV9DbGVhbnVwX0FkYXB0ZXI8VFlQRT46Om9iamVjdCAodm9pZCkKewogIHJldHVybiB0aGlz LT5vYmplY3RfOwp9CiMgMTQ5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvTWFuYWdlZF9PYmplY3QuaCIgMgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYW5hZ2VkX09iamVjdC5jcHAiIDEKCgoKCgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYW5hZ2VkX09i amVjdC5oIiAxCiMgNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL01hbmFnZWRfT2JqZWN0LmNwcCIgMgojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvTWFuYWdlZF9PYmplY3QuY3BwIgppbmxpbmUgY29uc3QgY2hh ciogZ2V0X3Jjc2lkX2FjZV9NYW5hZ2VkX09iamVjdCAoY29uc3QgY2hhciopIHsgcmV0dXJuICJN YW5hZ2VkX09iamVjdC5jcHAsdiA0LjEyIDIwMDAvMDQvMTkgMDI6NDk6MzQgYnJ1bnNjaCBFeHAi IDsgfSBzdGF0aWMgY29uc3QgY2hhciogcmNzaWRfYWNlX01hbmFnZWRfT2JqZWN0ID0gZ2V0X3Jj c2lkX2FjZV9NYW5hZ2VkX09iamVjdCAoIHJjc2lkX2FjZV9NYW5hZ2VkX09iamVjdCApIDsKCnRl bXBsYXRlIDxjbGFzcyBUWVBFPgpBQ0VfQ2xlYW51cF9BZGFwdGVyPFRZUEU+Ojp+QUNFX0NsZWFu dXBfQWRhcHRlciAodm9pZCkKewp9CiMgMTUzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvTWFuYWdlZF9PYmplY3QuaCIgMgoKCgoKCgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxNjAgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYW5hZ2VkX09iamVj dC5oIiAyCiMgNDUxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvT2JqZWN0X01hbmFnZXIuaCIgMgoKCgoKCmNsYXNzIEFDRV9TZXJ2aWNlX09iamVjdDsKZXh0 ZXJuICJDIgpBQ0VfU2VydmljZV9PYmplY3QgKgpfbWFrZV9BQ0VfU2VydmljZV9NYW5hZ2VyIChB Q0VfU2VydmljZV9PYmplY3RfRXh0ZXJtaW5hdG9yICopOwojIDQ3OSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDQ4 MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9N YW5hZ2VyLmgiIDIKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmNwcCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmNwcCIg MgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v VEFPX1NpbmdsZXRvbl9NYW5hZ2VyLmgiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uX01hbmFnZXIuaCIKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAy MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9f U2luZ2xldG9uX01hbmFnZXIuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19FeHBvcnQuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b25fTWFuYWdl ci5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9vcmJjb25mLmgiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uX01hbmFnZXIuaCIgMgoKCgoKCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDEKIyAzMiAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2lu Z2xldG9uX01hbmFnZXIuaCIgMgoKCgpleHRlcm4gIkMiCnZvaWQKVEFPX1NpbmdsZXRvbl9NYW5h Z2VyX2NsZWFudXBfZGVzdHJveWVyICh2b2lkICosIHZvaWQgKik7CiMgNTUgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVEFPX1NpbmdsZXRvbl9NYW5h Z2VyLmgiCmNsYXNzIFRBT19TaW5nbGV0b25fTWFuYWdlciA6IHB1YmxpYyBBQ0VfT2JqZWN0X01h bmFnZXJfQmFzZQp7CgogIGZyaWVuZCB2b2lkIFRBT19TaW5nbGV0b25fTWFuYWdlcl9jbGVhbnVw X2Rlc3Ryb3llciAodm9pZCAqLCB2b2lkICopOwoKcHVibGljOgoKICB2aXJ0dWFsIGludCBpbml0 ICh2b2lkKTsKCgoKCgoKICBpbnQgaW5pdCAoaW50IHJlZ2lzdGVyX3dpdGhfb2JqZWN0X21hbmFn ZXIpOwoKCiAgdmlydHVhbCBpbnQgZmluaSAodm9pZCk7CgoKCgoKCiAgc3RhdGljIGludCBzdGFy dGluZ191cCAodm9pZCk7CgoKCiAgc3RhdGljIGludCBzaHV0dGluZ19kb3duICh2b2lkKTsKCiAg ZW51bSBQcmVhbGxvY2F0ZWRfT2JqZWN0CiAgICB7CgoKCiAgICAgIFRBT19FTVBUWV9QUkVBTExP Q0FURURfT0JKRUNULAoKCgoKCgoKICAgICAgVEFPX1BSRUFMTE9DQVRFRF9PQkpFQ1RTCiAgICB9 OwoKCgoKICBzdGF0aWMgc2lnc2V0X3QgKmRlZmF1bHRfbWFzayAodm9pZCk7CgoKICBzdGF0aWMg QUNFX1RocmVhZF9Ib29rICp0aHJlYWRfaG9vayAodm9pZCk7CgoKICBzdGF0aWMgQUNFX1RocmVh ZF9Ib29rICp0aHJlYWRfaG9vayAoQUNFX1RocmVhZF9Ib29rICpuZXdfdGhyZWFkX2hvb2spOwoK CiAgc3RhdGljIFRBT19TaW5nbGV0b25fTWFuYWdlciAqaW5zdGFuY2UgKHZvaWQpOwojIDEyNSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2lu Z2xldG9uX01hbmFnZXIuaCIKICBzdGF0aWMgaW50IGF0X2V4aXQgKEFDRV9DbGVhbnVwICpvYmpl Y3QsIHZvaWQgKnBhcmFtID0gMCk7CiMgMTQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b25fTWFuYWdlci5oIgogIHN0YXRpYyBp bnQgYXRfZXhpdCAodm9pZCAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgQUNFX0NMRUFO VVBfRlVOQyBjbGVhbnVwX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXJhbSk7 Cgpwcml2YXRlOgoKICBUQU9fU2luZ2xldG9uX01hbmFnZXIgKHZvaWQpOwogIH5UQU9fU2luZ2xl dG9uX01hbmFnZXIgKHZvaWQpOwoKCiAgVEFPX1NpbmdsZXRvbl9NYW5hZ2VyIChjb25zdCBUQU9f U2luZ2xldG9uX01hbmFnZXIgJik7CiAgVEFPX1NpbmdsZXRvbl9NYW5hZ2VyICZvcGVyYXRvcj0g KGNvbnN0IFRBT19TaW5nbGV0b25fTWFuYWdlciAmKTsKCgoKICBpbnQgYXRfZXhpdF9pICh2b2lk ICpvYmplY3QsIEFDRV9DTEVBTlVQX0ZVTkMgY2xlYW51cF9ob29rLCB2b2lkICpwYXJhbSk7Cgpw cml2YXRlOgoKCiAgc3RhdGljIFRBT19TaW5nbGV0b25fTWFuYWdlciAqaW5zdGFuY2VfOwoKCiAg c3RhdGljIHZvaWQgKnByZWFsbG9jYXRlZF9vYmplY3RbVEFPX1BSRUFMTE9DQVRFRF9PQkpFQ1RT XTsKCgogIHNpZ3NldF90ICpkZWZhdWx0X21hc2tfOwoKCiAgQUNFX1RocmVhZF9Ib29rICp0aHJl YWRfaG9va187CgoKICBBQ0VfT1NfRXhpdF9JbmZvIGV4aXRfaW5mb187CgoKCiAgaW50IHJlZ2lz dGVyZWRfd2l0aF9vYmplY3RfbWFuYWdlcl87CgoKCiAgQUNFX01UX1NZTkNIOjpSRUNVUlNJVkVf TVVURVggKmludGVybmFsX2xvY2tfOwoKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVEFPX1NpbmdsZXRvbl9NYW5hZ2VyLmlubCIgMQoK CgoKaW5saW5lCmludApUQU9fU2luZ2xldG9uX01hbmFnZXI6OmF0X2V4aXQgKEFDRV9DbGVhbnVw ICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyYW0pCnsKICBy ZXR1cm4gVEFPX1NpbmdsZXRvbl9NYW5hZ2VyOjppbnN0YW5jZSAoKS0+YXRfZXhpdF9pICgKICAg IG9iamVjdCwKICAgIChBQ0VfQ0xFQU5VUF9GVU5DKSBhY2VfY2xlYW51cF9kZXN0cm95ZXIsCiAg ICBwYXJhbSk7Cn0KCmlubGluZQppbnQKVEFPX1NpbmdsZXRvbl9NYW5hZ2VyOjphdF9leGl0ICh2 b2lkICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NMRUFOVVBfRlVO QyBjbGVhbnVwX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyYW0p CnsKICByZXR1cm4gVEFPX1NpbmdsZXRvbl9NYW5hZ2VyOjppbnN0YW5jZSAoKS0+YXRfZXhpdF9p ICgKICAgIG9iamVjdCwKICAgIGNsZWFudXBfaG9vaywKICAgIHBhcmFtKTsKfQojIDE4NyAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xl dG9uX01hbmFnZXIuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE5MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uX01hbmFnZXIuaCIgMgojIDE4ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5n bGV0b24uY3BwIiAyCgoKCgoKaW5saW5lIGNvbnN0IGNoYXIqIGdldF9yY3NpZF90YW9fVEFPX1Np bmdsZXRvbiAoY29uc3QgY2hhciopIHsgcmV0dXJuICJUQU9fU2luZ2xldG9uLmNwcCx2IDEuNSAy MDAxLzA1LzMwIDE5OjI5OjExIG90aG1hbiBFeHAiIDsgfSBzdGF0aWMgY29uc3QgY2hhciogcmNz aWRfdGFvX1RBT19TaW5nbGV0b24gPSBnZXRfcmNzaWRfdGFvX1RBT19TaW5nbGV0b24gKCByY3Np ZF90YW9fVEFPX1NpbmdsZXRvbiApIDsKCgoKdGVtcGxhdGUgPGNsYXNzIFRZUEUsIGNsYXNzIEFD RV9MT0NLPiB2b2lkClRBT19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+OjpkdW1wICh2b2lkKQp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK CgoKfQoKdGVtcGxhdGUgPGNsYXNzIFRZUEUsIGNsYXNzIEFDRV9MT0NLPiBUQU9fU2luZ2xldG9u PFRZUEUsIEFDRV9MT0NLPiAqJgpUQU9fU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPjo6aW5zdGFu Y2VfaSAodm9pZCkKewoKCgogIHN0YXRpYyBUQU9fU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPiAq c2luZ2xldG9uXyA9IDA7CgogIHJldHVybiBzaW5nbGV0b25fOwoKCgp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgVFlQRSwgY2xhc3MgQUNFX0xPQ0s+IFRZUEUgKgpUQU9fU2luZ2xldG9uPFRZUEUsIEFDRV9M T0NLPjo6aW5zdGFuY2UgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgVEFPX1NpbmdsZXRvbjxUWVBFLCBBQ0VfTE9DSz4g KiZzaW5nbGV0b24gPQogICAgVEFPX1NpbmdsZXRvbjxUWVBFLCBBQ0VfTE9DSz46Omluc3RhbmNl X2kgKCk7CgoKICBpZiAoc2luZ2xldG9uID09IDApCiAgICB7CiAgICAgIGlmIChUQU9fU2luZ2xl dG9uX01hbmFnZXI6OnN0YXJ0aW5nX3VwICgpIHx8CiAgICAgICAgICBUQU9fU2luZ2xldG9uX01h bmFnZXI6OnNodXR0aW5nX2Rvd24gKCkpCiAgICAgICAgewoKCgoKCgoKICAgICAgICAgIGRvIHsg dHJ5IHsgc2luZ2xldG9uID0gbmV3IChUQU9fU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPik7IH0g Y2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0 dXJuIDA7IH0gfSB3aGlsZSAoMCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKCgoK ICAgICAgICAgIHN0YXRpYyBBQ0VfTE9DSyAqbG9jayA9IDA7CiAgICAgICAgICBpZiAoQUNFX09i amVjdF9NYW5hZ2VyOjpnZXRfc2luZ2xldG9uX2xvY2sgKGxvY2spICE9IDApCgogICAgICAgICAg ICByZXR1cm4gMDsKCiAgICAgICAgICBBQ0VfR3VhcmQ8IEFDRV9MT0NLID4gYWNlX21vbiAoKmxv Y2spOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwoKICAgICAgICAgIGlm IChzaW5nbGV0b24gPT0gMCkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBkbyB7IHRyeSB7 IHNpbmdsZXRvbiA9IG5ldyAoVEFPX1NpbmdsZXRvbjxUWVBFLCBBQ0VfTE9DSz4pOyB9IGNhdGNo IChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAw OyB9IH0gd2hpbGUgKDApOwoKCiAgICAgICAgICAgICAgVEFPX1NpbmdsZXRvbl9NYW5hZ2VyOjph dF9leGl0IChzaW5nbGV0b24pOwoKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICB9CgogIHJl dHVybiAmc2luZ2xldG9uLT5pbnN0YW5jZV87Cn0KCnRlbXBsYXRlIDxjbGFzcyBUWVBFLCBjbGFz cyBBQ0VfTE9DSz4gdm9pZApUQU9fU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPjo6Y2xlYW51cCAo dm9pZCAqKQp7CiAgZGVsZXRlIHRoaXM7CiAgVEFPX1NpbmdsZXRvbjxUWVBFLCBBQ0VfTE9DSz46 Omluc3RhbmNlX2kgKCkgPSAwOwp9CiMgMTIyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b24uY3BwIgp0ZW1wbGF0ZSA8Y2xhc3Mg VFlQRSwgY2xhc3MgQUNFX0xPQ0s+IHZvaWQKVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xP Q0s+OjpkdW1wICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBUWVBFLCBjbGFzcyBB Q0VfTE9DSz4gVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+IComClRBT19UU1NfU2lu Z2xldG9uPFRZUEUsIEFDRV9MT0NLPjo6aW5zdGFuY2VfaSAodm9pZCkKewoKCgogIHN0YXRpYyBU QU9fVFNTX1NpbmdsZXRvbjxUWVBFLCBBQ0VfTE9DSz4gKnNpbmdsZXRvbl8gPSAwOwoKICByZXR1 cm4gc2luZ2xldG9uXzsKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIFRZUEUsIGNsYXNzIEFDRV9MT0NL PiBUWVBFICoKVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+OjppbnN0YW5jZSAodm9p ZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCiAgVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+IComc2luZ2xldG9u ID0KICAgIFRBT19UU1NfU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPjo6aW5zdGFuY2VfaSAoKTsK CgogIGlmIChzaW5nbGV0b24gPT0gMCkKICAgIHsKICAgICAgaWYgKFRBT19TaW5nbGV0b25fTWFu YWdlcjo6c3RhcnRpbmdfdXAgKCkgfHwKICAgICAgICAgIFRBT19TaW5nbGV0b25fTWFuYWdlcjo6 c2h1dHRpbmdfZG93biAoKSkKICAgICAgICB7CgoKCgoKCgogICAgICAgICAgZG8geyB0cnkgeyBz aW5nbGV0b24gPSBuZXcgKFRBT19UU1NfU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPik7IH0gY2F0 Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJu IDA7IH0gfSB3aGlsZSAoMCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKCgoKICAg ICAgICAgIHN0YXRpYyBBQ0VfTE9DSyAqbG9jayA9IDA7CiAgICAgICAgICBpZiAoQUNFX09iamVj dF9NYW5hZ2VyOjpnZXRfc2luZ2xldG9uX2xvY2sgKGxvY2spICE9IDApCgogICAgICAgICAgICBy ZXR1cm4gMDsKCiAgICAgICAgICBBQ0VfR3VhcmQ8IEFDRV9MT0NLID4gYWNlX21vbiAoKmxvY2sp OyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwoKICAgICAgICAgIGlmIChz aW5nbGV0b24gPT0gMCkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBkbyB7IHRyeSB7IHNp bmdsZXRvbiA9IG5ldyAoVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+KTsgfSBjYXRj aCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4g MDsgfSB9IHdoaWxlICgwKTsKCgoKICAgICAgICAgICAgICBUQU9fU2luZ2xldG9uX01hbmFnZXI6 OmF0X2V4aXQgKHNpbmdsZXRvbik7CgogICAgICAgICAgICB9CgogICAgICAgIH0KICAgIH0KCiAg cmV0dXJuICgoJnNpbmdsZXRvbi0+aW5zdGFuY2VfKS0+b3BlcmF0b3IgVFlQRSAqICgpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIFRZUEUsIGNsYXNzIEFDRV9MT0NLPiB2b2lkClRBT19UU1NfU2luZ2xl dG9uPFRZUEUsIEFDRV9MT0NLPjo6Y2xlYW51cCAodm9pZCAqKQp7CiAgZGVsZXRlIHRoaXM7CiAg VEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+OjppbnN0YW5jZV9pICgpID0gMDsKfQoj IDEyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9U QU9fU2luZ2xldG9uLmgiIDIKCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDEyOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmgiIDIKIyAyOSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TbWFydFByb3hp ZXMvU21hcnRfUHJveGllcy5oIiAyCgoKCgoKY2xhc3MgVEFPX1NtYXJ0X1Byb3h5X0Jhc2UKewoK CgoKCgoKcHVibGljOgogIHZpcnR1YWwgflRBT19TbWFydF9Qcm94eV9CYXNlICh2b2lkKTsKCgpw cm90ZWN0ZWQ6CiAgVEFPX1NtYXJ0X1Byb3h5X0Jhc2UgKHZvaWQpOwogIFRBT19TbWFydF9Qcm94 eV9CYXNlIChDT1JCQTo6T2JqZWN0X3B0ciBwcm94eSk7CgoKICBDT1JCQTo6T2JqZWN0X3ZhciBi YXNlX3Byb3h5XzsKCn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1NtYXJ0UHJveGllcy9TbWFydF9Qcm94aWVzLmlubCIgMQoKCgppbmxp bmUKVEFPX1NtYXJ0X1Byb3h5X0Jhc2U6OlRBT19TbWFydF9Qcm94eV9CYXNlICh2b2lkKQp7Cn0K CmlubGluZQpUQU9fU21hcnRfUHJveHlfQmFzZTo6VEFPX1NtYXJ0X1Byb3h5X0Jhc2UgKENPUkJB OjpPYmplY3RfcHRyIHByb3h5KQogIDogYmFzZV9wcm94eV8ocHJveHkpCnsKfQoKaW5saW5lClRB T19TbWFydF9Qcm94eV9CYXNlOjp+VEFPX1NtYXJ0X1Byb3h5X0Jhc2UgKHZvaWQpCnsKfQojIDU4 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NtYXJ0 UHJveGllcy9TbWFydF9Qcm94aWVzLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA2MSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TbWFydFByb3hpZXMvU21hcnRfUHJveGll cy5oIiAyCiMgMzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vVGltZUJhc2VDLmgiIDIKIyA2MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZUMuaCIKbmFtZXNwYWNlIFRpbWVCYXNlCnsKICB0 eXBlZGVmIENPUkJBOjpVTG9uZ0xvbmcgVGltZVQ7CiAgdHlwZWRlZiBDT1JCQTo6VUxvbmdMb25n X291dCBUaW1lVF9vdXQ7CiAgICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVGltZVQ7 CgogIHR5cGVkZWYgVGltZVQgSW5hY2N1cmFjeVQ7CiAgdHlwZWRlZiBUaW1lVF9vdXQgSW5hY2N1 cmFjeVRfb3V0OwogICAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0luYWNjdXJhY3lU OwoKICB0eXBlZGVmIENPUkJBOjpTaG9ydCBUZGZUOwogIHR5cGVkZWYgQ09SQkE6OlNob3J0X291 dCBUZGZUX291dDsKICAgIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19UZGZUOwoKICBz dHJ1Y3QgVXRjVDsKICBjbGFzcyBVdGNUX3ZhcjsKCiAgc3RydWN0IFV0Y1QKICB7CgoKICAgIHR5 cGVkZWYgVXRjVF92YXIgX3Zhcl90eXBlOwoKCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0 cnVjdG9yICh2b2lkKik7CgogICAgVGltZUJhc2U6OlRpbWVUIHRpbWU7CiAgICBDT1JCQTo6VUxv bmcgaW5hY2NsbzsKICAgIENPUkJBOjpVU2hvcnQgaW5hY2NoaTsKICAgIFRpbWVCYXNlOjpUZGZU IHRkZjsKICB9OwoKICBjbGFzcyBVdGNUX3ZhcgogIHsKICBwdWJsaWM6CiAgICBVdGNUX3ZhciAo dm9pZCk7CiAgICBVdGNUX3ZhciAoVXRjVCAqKTsKICAgIFV0Y1RfdmFyIChjb25zdCBVdGNUX3Zh ciAmKTsKICAgIFV0Y1RfdmFyIChjb25zdCBVdGNUICYpOwogICAgflV0Y1RfdmFyICh2b2lkKTsK CiAgICBVdGNUX3ZhciAmb3BlcmF0b3I9IChVdGNUICopOwogICAgVXRjVF92YXIgJm9wZXJhdG9y PSAoY29uc3QgVXRjVF92YXIgJik7CiAgICBVdGNUX3ZhciAmb3BlcmF0b3I9IChjb25zdCBVdGNU ICYpOwogICAgVXRjVCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBVdGNUICpvcGVyYXRv ci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBVdGNUICYoKSBjb25zdDsKICAg IG9wZXJhdG9yIFV0Y1QgJigpOwogICAgb3BlcmF0b3IgVXRjVCAmKCkgY29uc3Q7CgoKICAgIGNv bnN0IFV0Y1QgJmluICh2b2lkKSBjb25zdDsKICAgIFV0Y1QgJmlub3V0ICh2b2lkKTsKICAgIFV0 Y1QgJm91dCAodm9pZCk7CiAgICBVdGNUIF9yZXRuICh2b2lkKTsKICAgIFV0Y1QgKnB0ciAodm9p ZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBVdGNUICpwdHJfOwogIH07CgogIHR5cGVkZWYgVXRj VCAmVXRjVF9vdXQ7CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19VdGNUOwoKICBz dHJ1Y3QgSW50ZXJ2YWxUOwogIGNsYXNzIEludGVydmFsVF92YXI7CgogIHN0cnVjdCBJbnRlcnZh bFQKICB7CgoKICAgIHR5cGVkZWYgSW50ZXJ2YWxUX3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0YXRp YyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICBUaW1lQmFzZTo6VGltZVQg bG93ZXJfYm91bmQ7CiAgICBUaW1lQmFzZTo6VGltZVQgdXBwZXJfYm91bmQ7CiAgfTsKCiAgY2xh c3MgSW50ZXJ2YWxUX3ZhcgogIHsKICBwdWJsaWM6CiAgICBJbnRlcnZhbFRfdmFyICh2b2lkKTsK ICAgIEludGVydmFsVF92YXIgKEludGVydmFsVCAqKTsKICAgIEludGVydmFsVF92YXIgKGNvbnN0 IEludGVydmFsVF92YXIgJik7CiAgICBJbnRlcnZhbFRfdmFyIChjb25zdCBJbnRlcnZhbFQgJik7 CiAgICB+SW50ZXJ2YWxUX3ZhciAodm9pZCk7CgogICAgSW50ZXJ2YWxUX3ZhciAmb3BlcmF0b3I9 IChJbnRlcnZhbFQgKik7CiAgICBJbnRlcnZhbFRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEludGVy dmFsVF92YXIgJik7CiAgICBJbnRlcnZhbFRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEludGVydmFs VCAmKTsKICAgIEludGVydmFsVCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBJbnRlcnZh bFQgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IEludGVydmFs VCAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBJbnRlcnZhbFQgJigpOwogICAgb3BlcmF0b3IgSW50 ZXJ2YWxUICYoKSBjb25zdDsKCgogICAgY29uc3QgSW50ZXJ2YWxUICZpbiAodm9pZCkgY29uc3Q7 CiAgICBJbnRlcnZhbFQgJmlub3V0ICh2b2lkKTsKICAgIEludGVydmFsVCAmb3V0ICh2b2lkKTsK ICAgIEludGVydmFsVCBfcmV0biAodm9pZCk7CiAgICBJbnRlcnZhbFQgKnB0ciAodm9pZCkgY29u c3Q7CgogIHByaXZhdGU6CiAgICBJbnRlcnZhbFQgKnB0cl87CiAgfTsKCiAgdHlwZWRlZiBJbnRl cnZhbFQgJkludGVydmFsVF9vdXQ7CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19J bnRlcnZhbFQ7CgoKfQoKCgoKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55 ICYsIGNvbnN0IFRpbWVCYXNlOjpVdGNUICYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0g KENPUkJBOjpBbnkgJiwgVGltZUJhc2U6OlV0Y1QqKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVh biBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBUaW1lQmFzZTo6VXRjVCAqJik7CiAg ICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwg Y29uc3QgVGltZUJhc2U6OlV0Y1QgKiYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENP UkJBOjpBbnkgJiwgY29uc3QgVGltZUJhc2U6OkludGVydmFsVCAmKTsKICAgICAgICAgICB2b2lk IG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFRpbWVCYXNlOjpJbnRlcnZhbFQqKTsKICAgICAg ICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBUaW1l QmFzZTo6SW50ZXJ2YWxUIComKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBUaW1lQmFzZTo6SW50ZXJ2YWxUIComKTsKIyAy MDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGlt ZUJhc2VDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9UaW1lQmFzZUMuaSIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlQy5pIgppbmxpbmUKVGltZUJhc2U6OlV0Y1Rf dmFyOjpVdGNUX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKVGltZUJhc2U6OlV0 Y1RfdmFyOjpVdGNUX3ZhciAoVXRjVCAqcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKVGltZUJh c2U6OlV0Y1RfdmFyOjpVdGNUX3ZhciAoY29uc3QgOjpUaW1lQmFzZTo6VXRjVF92YXIgJnApCnsK ICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6VGltZUJhc2U6 OlV0Y1QgKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9j YXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5w dHJfID0gMDsKfQoKCmlubGluZQpUaW1lQmFzZTo6VXRjVF92YXI6OlV0Y1RfdmFyIChjb25zdCA6 OlRpbWVCYXNlOjpVdGNUICZwKQp7CiAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6VGlt ZUJhc2U6OlV0Y1QgKHApOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9j YXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKfQoKaW5saW5lClRpbWVCYXNl OjpVdGNUX3Zhcjo6flV0Y1RfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlu bGluZSBUaW1lQmFzZTo6VXRjVF92YXIgJgpUaW1lQmFzZTo6VXRjVF92YXI6Om9wZXJhdG9yPSAo VXRjVCAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVy biAqdGhpczsKfQoKaW5saW5lIDo6VGltZUJhc2U6OlV0Y1RfdmFyICYKVGltZUJhc2U6OlV0Y1Rf dmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6VGltZUJhc2U6OlV0Y1RfdmFyICZwKQp7CiAgaWYgKHRo aXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAgICAgICAg ICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAgICAgIH0K ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIFV0Y1QgKmRlZXBfY29weSA9CiAgICAgICAg ICAgIG5ldyBVdGNUICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBVdGNUICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAg ICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0g dG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBUaW1lQmFzZTo6VXRjVF92YXIg JgpUaW1lQmFzZTo6VXRjVF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpUaW1lQmFzZTo6VXRjVCAm cCkKewogIGlmICh0aGlzLT5wdHJfICE9ICZwKQogIHsKICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwog ICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6VGltZUJhc2U6OlV0Y1QgKHApOyB9IGNh dGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVy biAqdGhpczsgfSB9IHdoaWxlICgwKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29u c3QgOjpUaW1lQmFzZTo6VXRjVCAqClRpbWVCYXNlOjpVdGNUX3Zhcjo6b3BlcmF0b3ItPiAodm9p ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpUaW1lQmFzZTo6VXRj VCAqClRpbWVCYXNlOjpVdGNUX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlz LT5wdHJfOwp9CgppbmxpbmUKVGltZUJhc2U6OlV0Y1RfdmFyOjpvcGVyYXRvciBjb25zdCA6OlRp bWVCYXNlOjpVdGNUICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUK VGltZUJhc2U6OlV0Y1RfdmFyOjpvcGVyYXRvciA6OlRpbWVCYXNlOjpVdGNUICYoKQp7CiAgcmV0 dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKVGltZUJhc2U6OlV0Y1RfdmFyOjpvcGVyYXRvciA6 OlRpbWVCYXNlOjpVdGNUICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgppbmxp bmUgY29uc3QgOjpUaW1lQmFzZTo6VXRjVCAmClRpbWVCYXNlOjpVdGNUX3Zhcjo6aW4gKHZvaWQp IGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlRpbWVCYXNlOjpVdGNU ICYKVGltZUJhc2U6OlV0Y1RfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRy XzsKfQoKCmlubGluZSA6OlRpbWVCYXNlOjpVdGNUICYKVGltZUJhc2U6OlV0Y1RfdmFyOjpvdXQg KHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlRpbWVCYXNlOjpVdGNU ClRpbWVCYXNlOjpVdGNUX3Zhcjo6X3JldG4gKHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87 Cn0KCmlubGluZSA6OlRpbWVCYXNlOjpVdGNUICoKVGltZUJhc2U6OlV0Y1RfdmFyOjpwdHIgKHZv aWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpUaW1lQmFzZTo6 SW50ZXJ2YWxUX3Zhcjo6SW50ZXJ2YWxUX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9Cgppbmxp bmUKVGltZUJhc2U6OkludGVydmFsVF92YXI6OkludGVydmFsVF92YXIgKEludGVydmFsVCAqcCkK ICA6IHB0cl8gKHApCnt9CgppbmxpbmUKVGltZUJhc2U6OkludGVydmFsVF92YXI6OkludGVydmFs VF92YXIgKGNvbnN0IDo6VGltZUJhc2U6OkludGVydmFsVF92YXIgJnApCnsKICBpZiAocC5wdHJf KQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6VGltZUJhc2U6OkludGVydmFsVCAo KnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAo KSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8gPSAw Owp9CgoKaW5saW5lClRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyOjpJbnRlcnZhbFRfdmFyIChjb25z dCA6OlRpbWVCYXNlOjpJbnRlcnZhbFQgJnApCnsKICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBu ZXcgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsg KCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7Cn0KCmlu bGluZQpUaW1lQmFzZTo6SW50ZXJ2YWxUX3Zhcjo6fkludGVydmFsVF92YXIgKHZvaWQpCnsKICBk ZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyICYKVGlt ZUJhc2U6OkludGVydmFsVF92YXI6Om9wZXJhdG9yPSAoSW50ZXJ2YWxUICpwKQp7CiAgZGVsZXRl IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUg OjpUaW1lQmFzZTo6SW50ZXJ2YWxUX3ZhciAmClRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyOjpvcGVy YXRvcj0gKGNvbnN0IDo6VGltZUJhc2U6OkludGVydmFsVF92YXIgJnApCnsKICBpZiAodGhpcyAh PSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGRl bGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+cHRyXyA9IDA7CiAgICAgICAgfQogICAg ICBlbHNlCiAgICAgICAgewogICAgICAgICAgSW50ZXJ2YWxUICpkZWVwX2NvcHkgPQogICAgICAg ICAgICBuZXcgSW50ZXJ2YWxUICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9 IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBJbnRlcnZhbFQgKnRtcCA9IGRlZXBfY29w eTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwogICAgICAgICAgICAgIHRo aXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRlZXBfY29weTsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9CgoKaW5saW5lIFRpbWVCYXNl OjpJbnRlcnZhbFRfdmFyICYKVGltZUJhc2U6OkludGVydmFsVF92YXI6Om9wZXJhdG9yPSAoY29u c3QgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUICZwKQp7CiAgaWYgKHRoaXMtPnB0cl8gIT0gJnApCiAg ewogICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcg OjpUaW1lQmFzZTo6SW50ZXJ2YWxUIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpf X2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gKnRoaXM7IH0gfSB3aGlsZSAoMCk7CiAg fQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IDo6VGltZUJhc2U6OkludGVydmFsVCAq ClRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0 dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlRpbWVCYXNlOjpJbnRlcnZhbFQgKgpUaW1lQmFz ZTo6SW50ZXJ2YWxUX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJf Owp9CgppbmxpbmUKVGltZUJhc2U6OkludGVydmFsVF92YXI6Om9wZXJhdG9yIGNvbnN0IDo6VGlt ZUJhc2U6OkludGVydmFsVCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5s aW5lClRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyOjpvcGVyYXRvciA6OlRpbWVCYXNlOjpJbnRlcnZh bFQgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpUaW1lQmFzZTo6SW50ZXJ2 YWxUX3Zhcjo6b3BlcmF0b3IgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUICYoKSBjb25zdAp7CiAgcmV0 dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUICYK VGltZUJhc2U6OkludGVydmFsVF92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlz LT5wdHJfOwp9CgppbmxpbmUgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUICYKVGltZUJhc2U6OkludGVy dmFsVF92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5l IDo6VGltZUJhc2U6OkludGVydmFsVCAmClRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyOjpvdXQgKHZv aWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlRpbWVCYXNlOjpJbnRlcnZh bFQKVGltZUJhc2U6OkludGVydmFsVF92YXI6Ol9yZXRuICh2b2lkKQp7CiAgcmV0dXJuICp0aGlz LT5wdHJfOwp9CgppbmxpbmUgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUICoKVGltZUJhc2U6OkludGVy dmFsVF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgppbmxp bmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3Qg VGltZUJhc2U6OlV0Y1QgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPDwgX3Rh b19hZ2dyZWdhdGUudGltZSkgJiYKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLmluYWNjbG8p ICYmCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5pbmFjY2hpKSAmJgogICAgKHN0cm0gPDwg X3Rhb19hZ2dyZWdhdGUudGRmKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAw OwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3Ry bSwgVGltZUJhc2U6OlV0Y1QgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPj4g X3Rhb19hZ2dyZWdhdGUudGltZSkgJiYKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLmluYWNj bG8pICYmCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5pbmFjY2hpKSAmJgogICAgKHN0cm0g Pj4gX3Rhb19hZ2dyZWdhdGUudGRmKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVy biAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIg JnN0cm0sIGNvbnN0IFRpbWVCYXNlOjpJbnRlcnZhbFQgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYg KAogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUubG93ZXJfYm91bmQpICYmCiAgICAoc3RybSA8 PCBfdGFvX2FnZ3JlZ2F0ZS51cHBlcl9ib3VuZCkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAg ICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5w dXRDRFIgJnN0cm0sIFRpbWVCYXNlOjpJbnRlcnZhbFQgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYg KAogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUubG93ZXJfYm91bmQpICYmCiAgICAoc3RybSA+ PiBfdGFvX2FnZ3JlZ2F0ZS51cHBlcl9ib3VuZCkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAg ICByZXR1cm4gMDsKCn0KIyAyMDMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vVGltZUJhc2VDLmgiIDIKIyAyMTMgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VDLmgiCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDIxNCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZUMu aCIgMgojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL1RpbWVCYXNlUy5oIiAyCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZVNfVC5oIiAxCiMgMjUgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VTX1QuaCIKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEK IyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9U aW1lQmFzZVNfVC5oIiAyCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vVGltZUJhc2VTX1QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlU19ULmkiIDEKIyAzNiAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZVNfVC5o IiAyCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vVGltZUJhc2VTX1QuY3BwIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VTX1QuY3BwIgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VTX1QuaCIgMQoj IDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Rp bWVCYXNlU19ULmNwcCIgMgojIDQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlU19ULmgiIDIKIyA1MiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZVNfVC5oIgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA1MyAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFz ZVNfVC5oIiAyCiMgMzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vVGltZUJhc2VTLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VTLmkiIDEKIyAzNyAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZVMuaCIgMgoKCiMg MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIg MQojIDQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L1RpbWVCYXNlUy5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VTLmgiIDIKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVC YXNlQy5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VD LmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL2NvcmJhLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9jb3JiYS5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDEKIyAyOSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAy CgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL2NvcmJhZndkLmgiIDEKIyAzNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UeXBlY29kZS5oIiAxCiMgMzkgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQW55Lmgi IDEKIyA0MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9jb3JiYS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vRW52aXJvbm1lbnQuaCIgMQojIDQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5oIiAxCiMgNDMg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEu aCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL05WTGlzdC5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vTlZMaXN0LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTlZMaXN0LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9vcmJjb25mLmgiIDEKIyAyMCAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9OVkxpc3Qu aCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL1VuYm91bmRlZF9RdWV1ZS5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuaCIKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5oIiAy CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Ob2Rl LmgiIDEKIyAxOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L1VuYm91bmRlZF9RdWV1ZS5oIiAyCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX01lbW9yeS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuaCIgMgoKY2xh c3MgQUNFX0FsbG9jYXRvcjsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBBQ0VfVW5ib3VuZGVk X1F1ZXVlOwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgQUNFX1VuYm91bmRlZF9RdWV1 ZV9JdGVyYXRvcgp7CnB1YmxpYzoKCiAgQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvciAoQUNF X1VuYm91bmRlZF9RdWV1ZTxUPiAmcSwgaW50IGVuZCA9IDApOwoKCgoKCiAgaW50IG5leHQgKFQg KiZuZXh0X2l0ZW0pOwoKCgogIGludCBhZHZhbmNlICh2b2lkKTsKCgoKICBpbnQgZmlyc3QgKHZv aWQpOwoKCiAgaW50IGRvbmUgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25z dDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZhdGU6CgogIEFDRV9Ob2RlPFQ+ICpjdXJyZW50 XzsKCgogIEFDRV9VbmJvdW5kZWRfUXVldWU8VD4gJnF1ZXVlXzsKfTsKIyA4MyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5oIgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgQUNFX1VuYm91bmRlZF9RdWV1ZQp7CnB1YmxpYzoKICBm cmllbmQgY2xhc3MgQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPjsKCgogIHR5cGVkZWYg QUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPiBJVEVSQVRPUjsKCgoKCiAgQUNFX1VuYm91 bmRlZF9RdWV1ZSAoQUNFX0FsbG9jYXRvciAqYWxsb2MgPSAwKTsKCgogIEFDRV9VbmJvdW5kZWRf UXVldWUgKGNvbnN0IEFDRV9VbmJvdW5kZWRfUXVldWU8VD4gJik7CgoKICB2b2lkIG9wZXJhdG9y PSAoY29uc3QgQUNFX1VuYm91bmRlZF9RdWV1ZTxUPiAmKTsKCgogIH5BQ0VfVW5ib3VuZGVkX1F1 ZXVlICh2b2lkKTsKCgoKCiAgaW50IGlzX2VtcHR5ICh2b2lkKSBjb25zdDsKCgogIGludCBpc19m dWxsICh2b2lkKSBjb25zdDsKCgoKCgogIGludCBlbnF1ZXVlX3RhaWwgKGNvbnN0IFQgJm5ld19p dGVtKTsKCgoKICBpbnQgZW5xdWV1ZV9oZWFkIChjb25zdCBUICZuZXdfaXRlbSk7CgoKCiAgaW50 IGRlcXVldWVfaGVhZCAoVCAmaXRlbSk7CgoKCgoKICB2b2lkIHJlc2V0ICh2b2lkKTsKCgoKICBp bnQgZ2V0IChUIComaXRlbSwgc2l6ZV90IHNsb3QgPSAwKSBjb25zdDsKCgoKCgoKCiAgaW50IHNl dCAoY29uc3QgVCAmaXRlbSwgc2l6ZV90IHNsb3QpOwoKCiAgc2l6ZV90IHNpemUgKHZvaWQpIGNv bnN0OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIEFDRV9VbmJvdW5kZWRfUXVldWVf SXRlcmF0b3I8VD4gYmVnaW4gKHZvaWQpOwogIEFDRV9VbmJvdW5kZWRfUXVldWVfSXRlcmF0b3I8 VD4gZW5kICh2b2lkKTsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByb3RlY3RlZDoKCiAgdm9pZCBk ZWxldGVfbm9kZXMgKHZvaWQpOwoKCiAgdm9pZCBjb3B5X25vZGVzIChjb25zdCBBQ0VfVW5ib3Vu ZGVkX1F1ZXVlPFQ+ICYpOwoKCiAgQUNFX05vZGU8VD4gKmhlYWRfOwoKCiAgc2l6ZV90IGN1cl9z aXplXzsKCgogIEFDRV9BbGxvY2F0b3IgKmFsbG9jYXRvcl87Cn07CgoKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1F1ZXVlLmlubCIg MQoKCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgc2l6ZV90CkFDRV9VbmJvdW5kZWRfUXVldWU8 VD46OnNpemUgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y3VyX3NpemVfOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+Ojppc19lbXB0 eSAodm9pZCkgY29uc3QKewoKICByZXR1cm4gdGhpcy0+aGVhZF8gPT0gdGhpcy0+aGVhZF8tPm5l eHRfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGludApBQ0VfVW5ib3VuZGVkX1F1ZXVl PFQ+Ojppc19mdWxsICh2b2lkKSBjb25zdAp7CgogIHJldHVybiAwOwp9CiMgMTc4ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1F1ZXVlLmgi IDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv VW5ib3VuZGVkX1F1ZXVlLmNwcCIgMQoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5oIiAxCiMgNyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5jcHAi IDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFs bG9jX0Jhc2UuaCIgMQojIDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuY3BwIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIgMQojIDkgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuY3BwIiAyCiMg MTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5k ZWRfUXVldWUuY3BwIgppbmxpbmUgY29uc3QgY2hhciogZ2V0X3Jjc2lkX2FjZV9VbmJvdW5kZWRf UXVldWUgKGNvbnN0IGNoYXIqKSB7IHJldHVybiAiVW5ib3VuZGVkX1F1ZXVlLmNwcCx2IDQuMSAy MDAxLzAzLzI2IDIxOjE4OjUxIGNvcnlhbiBFeHAiIDsgfSBzdGF0aWMgY29uc3QgY2hhciogcmNz aWRfYWNlX1VuYm91bmRlZF9RdWV1ZSA9IGdldF9yY3NpZF9hY2VfVW5ib3VuZGVkX1F1ZXVlICgg cmNzaWRfYWNlX1VuYm91bmRlZF9RdWV1ZSApIDsKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CkFDRV9V bmJvdW5kZWRfUXVldWU8VD46OkFDRV9VbmJvdW5kZWRfUXVldWUgKEFDRV9BbGxvY2F0b3IgKmFs bG9jKQogIDogaGVhZF8gKDApLAogICAgY3VyX3NpemVfICgwKSwKICAgIGFsbG9jYXRvcl8gKGFs bG9jKQp7CgoKICBpZiAodGhpcy0+YWxsb2NhdG9yXyA9PSAwKQogICAgdGhpcy0+YWxsb2NhdG9y XyA9IEFDRV9BbGxvY2F0b3I6Omluc3RhbmNlICgpOwoKICBkbyB7IHRoaXMtPmhlYWRfID0gKEFD RV9Ob2RlPFQ+ICopIHRoaXMtPmFsbG9jYXRvcl8tPm1hbGxvYyAoc2l6ZW9mIChBQ0VfTm9kZTxU PikpOyBpZiAodGhpcy0+aGVhZF8gPT0gMCkgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7 IHJldHVybjt9IGVsc2UgeyBuZXcgKHRoaXMtPmhlYWRfKSBBQ0VfTm9kZTxUPjsgfSB9IHdoaWxl ICgwKTsKCgoKICB0aGlzLT5oZWFkXy0+bmV4dF8gPSB0aGlzLT5oZWFkXzsKfQoKdGVtcGxhdGUg PGNsYXNzIFQ+CkFDRV9VbmJvdW5kZWRfUXVldWU8VD46OkFDRV9VbmJvdW5kZWRfUXVldWUgKGNv bnN0IEFDRV9VbmJvdW5kZWRfUXVldWU8VD4gJnVzKQogIDogaGVhZF8gKDApLAogICAgY3VyX3Np emVfICgwKSwKICAgIGFsbG9jYXRvcl8gKHVzLmFsbG9jYXRvcl8pCnsKCgogIGlmICh0aGlzLT5h bGxvY2F0b3JfID09IDApCiAgICB0aGlzLT5hbGxvY2F0b3JfID0gQUNFX0FsbG9jYXRvcjo6aW5z dGFuY2UgKCk7CgogIGRvIHsgdGhpcy0+aGVhZF8gPSAoQUNFX05vZGU8VD4gKikgdGhpcy0+YWxs b2NhdG9yXy0+bWFsbG9jIChzaXplb2YgKEFDRV9Ob2RlPFQ+KSk7IGlmICh0aGlzLT5oZWFkXyA9 PSAwKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuO30gZWxzZSB7IG5ldyAo dGhpcy0+aGVhZF8pIEFDRV9Ob2RlPFQ+OyB9IH0gd2hpbGUgKDApOwoKCiAgdGhpcy0+aGVhZF8t Pm5leHRfID0gdGhpcy0+aGVhZF87CiAgdGhpcy0+Y29weV9ub2RlcyAodXMpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gdm9pZApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+OjpvcGVyYXRvcj0gKGNvbnN0 IEFDRV9VbmJvdW5kZWRfUXVldWU8VD4gJnVzKQp7CgoKICBpZiAodGhpcyAhPSAmdXMpCiAgICB7 CiAgICAgIHRoaXMtPmRlbGV0ZV9ub2RlcyAoKTsKICAgICAgdGhpcy0+Y29weV9ub2RlcyAodXMp OwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRv cjxUPgpBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+OjpiZWdpbiAodm9pZCkKewoKICByZXR1cm4gQUNF X1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPiAoKnRoaXMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4gQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPgpBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+ OjplbmQgKHZvaWQpCnsKCiAgcmV0dXJuIEFDRV9VbmJvdW5kZWRfUXVldWVfSXRlcmF0b3I8VD4g KCp0aGlzLCAxKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQKQUNFX1VuYm91bmRlZF9RdWV1 ZTxUPjo6ZHVtcCAodm9pZCkgY29uc3QKewoKCiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0Vf T1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5z dGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5jcHAiLCA4OSwgMCwgX19h Y2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbj09PT1cbiglUHwldHwleCkiLCB0 aGlzKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3Rf ZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7 IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5jcHAiLCA5MCwgMCwgX19hY2VfZXJyb3Ip OyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbmhlYWRfID0gJXUiLCB0aGlzLT5oZWFkXyk7IH0g d2hpbGUgKDApOwogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgp OyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18t PmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuY3BwIiwgOTEsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19f LT5sb2cgKExNX0RFQlVHLCAiXG5oZWFkXy0+bmV4dF8gPSAldSIsIHRoaXMtPmhlYWRfLT5uZXh0 Xyk7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vy cm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBh Y2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuY3BwIiwgOTIsIDAsIF9fYWNlX2Vycm9yKTsg YWNlX19fLT5sb2cgKExNX0RFQlVHLCAiXG5jdXJfc2l6ZV8gPSAlZFxuIiwgdGhpcy0+Y3VyX3Np emVfKTsgfSB3aGlsZSAoMCk7CgogIFQgKml0ZW0gPSAwOwoKICBzaXplX3QgY291bnQgPSAxOwoK CiAgZm9yIChBQ0VfVW5ib3VuZGVkX1F1ZXVlX0l0ZXJhdG9yPFQ+IGl0ZXIgKCooQUNFX1VuYm91 bmRlZF9RdWV1ZTxUPiAqKSB0aGlzKTsKICAgICAgIGl0ZXIubmV4dCAoaXRlbSkgIT0gMDsKICAg ICAgIGl0ZXIuYWR2YW5jZSAoKSkKICAgIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjps YXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNl ICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuY3BwIiwgMTAyLCAwLCBfX2FjZV9l cnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgImNvdW50ID0gJWRcbiIsIGNvdW50KyspOyB9 IHdoaWxlICgwKTsKCiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3Ig KCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9f Xy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5jcHAiLCAxMDQsIDAsIF9fYWNlX2Vycm9yKTsgYWNl X19fLT5sb2cgKExNX0RFQlVHLCAiPT09PVxuIik7IH0gd2hpbGUgKDApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4gdm9pZApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+Ojpjb3B5X25vZGVzIChjb25zdCBB Q0VfVW5ib3VuZGVkX1F1ZXVlPFQ+ICZ1cykKewogIGZvciAoQUNFX05vZGU8VD4gKmN1cnIgPSB1 cy5oZWFkXy0+bmV4dF87CiAgICAgICBjdXJyICE9IHVzLmhlYWRfOwogICAgICAgY3VyciA9IGN1 cnItPm5leHRfKQogICAgaWYgKHRoaXMtPmVucXVldWVfdGFpbCAoY3Vyci0+aXRlbV8pID09IC0x KQoKICAgICAgdGhpcy0+ZGVsZXRlX25vZGVzICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gdm9p ZApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+OjpkZWxldGVfbm9kZXMgKHZvaWQpCnsKICBmb3IgKEFD RV9Ob2RlPFQ+ICpjdXJyID0gdGhpcy0+aGVhZF8tPm5leHRfOwoKICAgICAgIGN1cnIgIT0gdGhp cy0+aGVhZF87CiAgICAgICApCiAgICB7CiAgICAgIEFDRV9Ob2RlPFQ+ICp0ZW1wID0gY3VycjsK ICAgICAgY3VyciA9IGN1cnItPm5leHRfOwoKICAgICAgZG8geyBpZiAodGVtcCkgeyAodGVtcCkt Pn5BQ0VfTm9kZSAoKTsgdGhpcy0+YWxsb2NhdG9yXy0+ZnJlZSAodGVtcCk7IH0gfSB3aGlsZSAo MCk7CgoKCiAgICAgIHRoaXMtPmN1cl9zaXplXy0tOwoKCgogICAgfQoKCiAgdGhpcy0+aGVhZF8t Pm5leHRfID0gdGhpcy0+aGVhZF87Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpBQ0VfVW5ib3VuZGVk X1F1ZXVlPFQ+Ojp+QUNFX1VuYm91bmRlZF9RdWV1ZSAodm9pZCkKewoKCiAgdGhpcy0+ZGVsZXRl X25vZGVzICgpOwogIGRvIHsgaWYgKGhlYWRfKSB7IChoZWFkXyktPn5BQ0VfTm9kZSAoKTsgdGhp cy0+YWxsb2NhdG9yXy0+ZnJlZSAoaGVhZF8pOyB9IH0gd2hpbGUgKDApOwoKCgogIHRoaXMtPmhl YWRfID0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+ OjplbnF1ZXVlX2hlYWQgKGNvbnN0IFQgJm5ld19pdGVtKQp7CgoKICBBQ0VfTm9kZTxUPiAqdGVt cDsKCgogIGRvIHsgdGVtcCA9IChBQ0VfTm9kZTxUPiAqKSB0aGlzLT5hbGxvY2F0b3JfLT5tYWxs b2MgKHNpemVvZiAoQUNFX05vZGU8VD4pKTsgaWYgKHRlbXAgPT0gMCkgeyAoKl9fZXJybm9fbG9j YXRpb24gKCkpID0gMTI7IHJldHVybiAtMTt9IGVsc2UgeyBuZXcgKHRlbXApIEFDRV9Ob2RlPFQ+ IChuZXdfaXRlbSwgdGhpcy0+aGVhZF8tPm5leHRfKTsgfSB9IHdoaWxlICgwKTsKCgoKCgoKICB0 aGlzLT5oZWFkXy0+bmV4dF8gPSB0ZW1wOwoKICB0aGlzLT5jdXJfc2l6ZV8rKzsKICByZXR1cm4g MDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+OjplbnF1 ZXVlX3RhaWwgKGNvbnN0IFQgJm5ld19pdGVtKQp7CgoKICBBQ0VfTm9kZTxUPiAqdGVtcDsKCgoK CiAgdGhpcy0+aGVhZF8tPml0ZW1fID0gbmV3X2l0ZW07CgoKICBkbyB7IHRlbXAgPSAoQUNFX05v ZGU8VD4gKikgdGhpcy0+YWxsb2NhdG9yXy0+bWFsbG9jIChzaXplb2YgKEFDRV9Ob2RlPFQ+KSk7 IGlmICh0ZW1wID09IDApIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gLTE7 fSBlbHNlIHsgbmV3ICh0ZW1wKSBBQ0VfTm9kZTxUPiAodGhpcy0+aGVhZF8tPm5leHRfKTsgfSB9 IHdoaWxlICgwKTsKCgoKICB0aGlzLT5oZWFkXy0+bmV4dF8gPSB0ZW1wOwoKCiAgdGhpcy0+aGVh ZF8gPSB0ZW1wOwoKICB0aGlzLT5jdXJfc2l6ZV8rKzsKICByZXR1cm4gMDsKfQoKdGVtcGxhdGUg PGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+OjpkZXF1ZXVlX2hlYWQgKFQgJml0 ZW0pCnsKCgoKICBpZiAodGhpcy0+aXNfZW1wdHkgKCkpCiAgICByZXR1cm4gLTE7CgogIEFDRV9O b2RlPFQ+ICp0ZW1wID0gdGhpcy0+aGVhZF8tPm5leHRfOwoKICBpdGVtID0gdGVtcC0+aXRlbV87 CiAgdGhpcy0+aGVhZF8tPm5leHRfID0gdGVtcC0+bmV4dF87CiAgZG8geyBpZiAodGVtcCkgeyAo dGVtcCktPn5BQ0VfTm9kZSAoKTsgdGhpcy0+YWxsb2NhdG9yXy0+ZnJlZSAodGVtcCk7IH0gfSB3 aGlsZSAoMCk7CgoKCiAgLS10aGlzLT5jdXJfc2l6ZV87CiAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRl IDxjbGFzcyBUPiB2b2lkCkFDRV9VbmJvdW5kZWRfUXVldWU8VD46OnJlc2V0ICh2b2lkKQp7CiAg ICAgICAgICAgICAgICAgICAgIDsKCiAgdGhpcy0+ZGVsZXRlX25vZGVzICgpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5kZWRfUXVldWU8VD46OmdldCAoVCAqJml0ZW0sIHNp emVfdCBzbG90KSBjb25zdAp7CgoKICBBQ0VfTm9kZTxUPiAqY3VyciA9IHRoaXMtPmhlYWRfLT5u ZXh0XzsKCiAgc2l6ZV90IGk7CgogIGZvciAoaSA9IDA7IGkgPCB0aGlzLT5jdXJfc2l6ZV87IGkr KykKICAgIHsKICAgICAgaWYgKGkgPT0gc2xvdCkKICAgICAgICBicmVhazsKCiAgICAgIGN1cnIg PSBjdXJyLT5uZXh0XzsKICAgIH0KCiAgaWYgKGkgPCB0aGlzLT5jdXJfc2l6ZV8pCiAgICB7CiAg ICAgIGl0ZW0gPSAmY3Vyci0+aXRlbV87CiAgICAgIHJldHVybiAwOwogICAgfQogIGVsc2UKICAg IHJldHVybiAtMTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVl PFQ+OjpzZXQgKGNvbnN0IFQgJml0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IHNsb3QpCnsKCgogIEFDRV9Ob2RlPFQ+ICpjdXJyID0gdGhpcy0+aGVhZF8tPm5leHRfOwoK ICBzaXplX3QgaTsKCiAgZm9yIChpID0gMDsKICAgICAgIGkgPCBzbG90ICYmIGkgPCB0aGlzLT5j dXJfc2l6ZV87CiAgICAgICBpKyspCiAgICBjdXJyID0gY3Vyci0+bmV4dF87CgogIGlmIChpIDwg dGhpcy0+Y3VyX3NpemVfKQogICAgewoKICAgICAgY3Vyci0+aXRlbV8gPSBpdGVtOwogICAgICBy ZXR1cm4gMDsKICAgIH0KICBlbHNlCiAgICB7CgoKCgogICAgICBpZiAoaSA9PSBzbG90KQogICAg ICAgIHsKCiAgICAgICAgICBpZiAodGhpcy0+ZW5xdWV1ZV90YWlsIChpdGVtKSA9PSAtMSkKICAg ICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gMDsK ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBUIGR1bW15OwoKCiAgICAg ICAgICBmb3IgKDsgaSA8IHNsb3Q7IGkrKykKICAgICAgICAgICAgewoKCgogICAgICAgICAgICAg IGN1cnIgPSB0aGlzLT5oZWFkXzsKCgoKICAgICAgICAgICAgICBpZiAodGhpcy0+ZW5xdWV1ZV90 YWlsIChkdW1teSkgPT0gLTEpCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAg IH0KCiAgICAgICAgICBjdXJyLT5pdGVtXyA9IGl0ZW07CiAgICAgICAgICByZXR1cm4gMDsKICAg ICAgICB9CiAgICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQKQUNFX1VuYm91bmRlZF9R dWV1ZV9JdGVyYXRvcjxUPjo6ZHVtcCAodm9pZCkgY29uc3QKewoKfQoKdGVtcGxhdGUgPGNsYXNz IFQ+CkFDRV9VbmJvdW5kZWRfUXVldWVfSXRlcmF0b3I8VD46OkFDRV9VbmJvdW5kZWRfUXVldWVf SXRlcmF0b3IgKEFDRV9VbmJvdW5kZWRfUXVldWU8VD4gJnEsIGludCBlbmQpCiAgOiBjdXJyZW50 XyAoZW5kID09IDAgPyBxLmhlYWRfLT5uZXh0XyA6IHEuaGVhZF8gKSwKICAgIHF1ZXVlXyAocSkK ewoKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlX0l0ZXJhdG9y PFQ+OjphZHZhbmNlICh2b2lkKQp7CgogIHRoaXMtPmN1cnJlbnRfID0gdGhpcy0+Y3VycmVudF8t Pm5leHRfOwogIHJldHVybiB0aGlzLT5jdXJyZW50XyAhPSB0aGlzLT5xdWV1ZV8uaGVhZF87Cn0K CnRlbXBsYXRlIDxjbGFzcyBUPiBpbnQKQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPjo6 Zmlyc3QgKHZvaWQpCnsKCiAgdGhpcy0+Y3VycmVudF8gPSB0aGlzLT5xdWV1ZV8uaGVhZF8tPm5l eHRfOwogIHJldHVybiB0aGlzLT5jdXJyZW50XyAhPSB0aGlzLT5xdWV1ZV8uaGVhZF87Cn0KCnRl bXBsYXRlIDxjbGFzcyBUPiBpbnQKQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPjo6ZG9u ZSAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgcmV0dXJuIHRoaXMtPmN1cnJlbnRfID09IHRoaXMtPnF1ZXVlXy5o ZWFkXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlX0l0ZXJh dG9yPFQ+OjpuZXh0IChUIComaXRlbSkKewoKICBpZiAodGhpcy0+Y3VycmVudF8gPT0gdGhpcy0+ cXVldWVfLmhlYWRfKQogICAgcmV0dXJuIDA7CiAgZWxzZQogICAgewogICAgICBpdGVtID0gJnRo aXMtPmN1cnJlbnRfLT5pdGVtXzsKICAgICAgcmV0dXJuIDE7CiAgICB9Cn0KIyAxODIgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUu aCIgMgoKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9wb3N0LmgiIDEKIyAxODkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuaCIgMgojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL05WTGlzdC5oIiAyCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9BbnkuaCIgMQojIDI3ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL05WTGlzdC5o IiAyCgpjbGFzcyBUQU9fSW5wdXRDRFI7CiMgNDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTlZMaXN0LmgiCmNsYXNzIENPUkJBX05hbWVkVmFsdWUK ewpwdWJsaWM6CgogIGNvbnN0IGNoYXIgKm5hbWUgKHZvaWQpIGNvbnN0OwoKCiAgQ09SQkE6OkFu eV9wdHIgdmFsdWUgKHZvaWQpIGNvbnN0OwoKCiAgQ09SQkE6OkZsYWdzIGZsYWdzICh2b2lkKSBj b25zdDsKCgogIH5DT1JCQV9OYW1lZFZhbHVlICh2b2lkKTsKCgogIHN0YXRpYyBDT1JCQV9OYW1l ZFZhbHVlKiBfZHVwbGljYXRlIChDT1JCQV9OYW1lZFZhbHVlKik7CiAgc3RhdGljIENPUkJBX05h bWVkVmFsdWUqIF9uaWwgKHZvaWQpOwoKCiAgQ09SQkE6OlVMb25nIF9pbmNyX3JlZmNudCAodm9p ZCk7CiAgQ09SQkE6OlVMb25nIF9kZWNyX3JlZmNudCAodm9pZCk7CgoKCiAgdHlwZWRlZiBDT1JC QV9OYW1lZFZhbHVlX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDT1JCQV9OYW1lZFZhbHVlX3Zh ciBfdmFyX3R5cGU7CgoKcHJpdmF0ZToKCiAgQ09SQkE6OlVMb25nIHJlZmNvdW50XzsKCgogIEFD RV9NVF9TWU5DSDo6TVVURVggcmVmY291bnRfbG9ja187CgoKICBDT1JCQTo6QW55IGFueV87CgoK ICBDT1JCQTo6RmxhZ3MgZmxhZ3NfOwoKCiAgY2hhciAqbmFtZV87CgoKCiAgQ09SQkFfTmFtZWRW YWx1ZSAodm9pZCk7CgogIGZyaWVuZCBjbGFzcyBDT1JCQV9PUkI7CiAgZnJpZW5kIGNsYXNzIENP UkJBX05WTGlzdDsKICBmcmllbmQgY2xhc3MgQ09SQkFfUmVxdWVzdDsKfTsKIyAxMDcgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTlZMaXN0LmgiCmNs YXNzIENPUkJBX05hbWVkVmFsdWVfdmFyCnsKcHVibGljOgogIENPUkJBX05hbWVkVmFsdWVfdmFy ICh2b2lkKTsKICBDT1JCQV9OYW1lZFZhbHVlX3ZhciAoQ09SQkFfTmFtZWRWYWx1ZV9wdHIpOwog IENPUkJBX05hbWVkVmFsdWVfdmFyIChjb25zdCBDT1JCQV9OYW1lZFZhbHVlX3ZhciAmKTsKICB+ Q09SQkFfTmFtZWRWYWx1ZV92YXIgKHZvaWQpOwoKICBDT1JCQV9OYW1lZFZhbHVlX3ZhciAmb3Bl cmF0b3I9IChDT1JCQV9OYW1lZFZhbHVlX3B0cik7CiAgQ09SQkFfTmFtZWRWYWx1ZV92YXIgJm9w ZXJhdG9yPSAoY29uc3QgQ09SQkFfTmFtZWRWYWx1ZV92YXIgJik7CiAgQ09SQkFfTmFtZWRWYWx1 ZV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9O YW1lZFZhbHVlX3B0ciAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfTmFtZWRWYWx1ZV9wdHIg JigpOwogIENPUkJBX05hbWVkVmFsdWVfcHRyIGluICh2b2lkKSBjb25zdDsKICBDT1JCQV9OYW1l ZFZhbHVlX3B0ciAmaW5vdXQgKHZvaWQpOwogIENPUkJBX05hbWVkVmFsdWVfcHRyICZvdXQgKHZv aWQpOwogIENPUkJBX05hbWVkVmFsdWVfcHRyIF9yZXRuICh2b2lkKTsKICBDT1JCQV9OYW1lZFZh bHVlX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKcHJpdmF0ZToKICBDT1JCQV9OYW1lZFZhbHVlX3B0 ciBwdHJfOwp9OwojIDE0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9OVkxpc3QuaCIKY2xhc3MgQ09SQkFfTmFtZWRWYWx1ZV9vdXQKewpwdWJsaWM6 CiAgQ09SQkFfTmFtZWRWYWx1ZV9vdXQgKENPUkJBX05hbWVkVmFsdWVfcHRyICYpOwogIENPUkJB X05hbWVkVmFsdWVfb3V0IChDT1JCQV9OYW1lZFZhbHVlX3ZhciAmKTsKICBDT1JCQV9OYW1lZFZh bHVlX291dCAoQ09SQkFfTmFtZWRWYWx1ZV9vdXQgJik7CiAgQ09SQkFfTmFtZWRWYWx1ZV9vdXQg Jm9wZXJhdG9yPSAoQ09SQkFfTmFtZWRWYWx1ZV9vdXQgJik7CiAgQ09SQkFfTmFtZWRWYWx1ZV9v dXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfTmFtZWRWYWx1ZV92YXIgJik7CiAgQ09SQkFfTmFt ZWRWYWx1ZV9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfTmFtZWRWYWx1ZV9wdHIpOwogIG9wZXJhdG9y IENPUkJBX05hbWVkVmFsdWVfcHRyICYoKTsKICBDT1JCQV9OYW1lZFZhbHVlX3B0ciAmcHRyICh2 b2lkKTsKICBDT1JCQV9OYW1lZFZhbHVlX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6 CiAgQ09SQkFfTmFtZWRWYWx1ZV9wdHIgJnB0cl87Cn07CiMgMTc3ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL05WTGlzdC5oIgpjbGFzcyBDT1JCQV9O Vkxpc3QKewpwdWJsaWM6CgogIH5DT1JCQV9OVkxpc3QgKHZvaWQpOwoKCiAgQ09SQkE6OlVMb25n IGNvdW50IChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkp IGNvbnN0OwoKCiAgQ09SQkFfTmFtZWRWYWx1ZV9wdHIgYWRkIChDT1JCQTo6RmxhZ3MsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2Rl ZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCiAgQ09SQkFfTmFtZWRWYWx1ZV9wdHIgYWRkX2l0ZW0g KGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkZs YWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKICBDT1JCQV9OYW1l ZFZhbHVlX3B0ciBhZGRfdmFsdWUgKGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IENPUkJBOjpBbnkgJiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENPUkJBOjpGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu dCAoKSk7CgoKCiAgQ09SQkFfTmFtZWRWYWx1ZV9wdHIgYWRkX2l0ZW1fY29uc3VtZSAoY2hhciAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpGbGFncywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVu dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgoK ICBDT1JCQV9OYW1lZFZhbHVlX3B0ciBhZGRfdmFsdWVfY29uc3VtZSAoY2hhciAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6QW55X3B0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkZsYWdzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKICBDT1JC QV9OYW1lZFZhbHVlX3B0ciBpdGVtIChDT1JCQTo6VUxvbmcgbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly b25tZW50ICgpKTsKCgoKICB2b2lkIHJlbW92ZSAoQ09SQkE6OlVMb25nIG4sCiAgICAgICAgICAg ICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K ICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgogIHN0YXRp YyBDT1JCQV9OVkxpc3QqIF9kdXBsaWNhdGUgKENPUkJBX05WTGlzdCopOwogIHN0YXRpYyBDT1JC QV9OVkxpc3QqIF9uaWwgKHZvaWQpOwoKCiAgQ09SQkE6OlVMb25nIF9pbmNyX3JlZmNudCAodm9p ZCk7CiAgQ09SQkE6OlVMb25nIF9kZWNyX3JlZmNudCAodm9pZCk7CiMgMjQ3ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL05WTGlzdC5oIgogIHZvaWQg X3Rhb19pbmNvbWluZ19jZHIgKFRBT19JbnB1dENEUiAmY2RyLAogICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBmbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmbGF6eV9ldmFs dWF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CgoKCiAgdm9pZCBfdGFvX2VuY29kZSAoVEFP X091dHB1dENEUiAmY2RyLAogICAgICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSAqb3JiX2Nv cmUsCiAgICAgICAgICAgICAgICAgICAgaW50IGZsYWcsCiAgICAgICAgICAgICAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCiAgdm9pZCBf dGFvX2RlY29kZSAoVEFPX0lucHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgaW50IGZs YWcsCiAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlKTsKCgoKCgoKICBwdHJfYXJpdGhfdCBfdGFvX3RhcmdldF9hbGln bm1lbnQgKHZvaWQpOwoKCgoKCgogIENPUkJBOjpCb29sZWFuIF9sYXp5X2hhc19hcmd1bWVudHMg KHZvaWQpIGNvbnN0OwoKCgogIHR5cGVkZWYgQ09SQkFfTlZMaXN0X3B0ciBfcHRyX3R5cGU7CiAg dHlwZWRlZiBDT1JCQV9OVkxpc3RfdmFyIF92YXJfdHlwZTsKCgpwcml2YXRlOgoKCiAgQ09SQkFf TlZMaXN0ICh2b2lkKTsKCgoKICBDT1JCQV9OYW1lZFZhbHVlX3B0ciBhZGRfZWxlbWVudCAoQ09S QkE6OkZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoK CiAgdm9pZCBldmFsdWF0ZSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlKTsKCnByaXZhdGU6CgogIEFDRV9VbmJvdW5kZWRfUXVldWU8Q09SQkFfTmFt ZWRWYWx1ZV9wdHI+IHZhbHVlc187CgoKICBDT1JCQTo6VUxvbmcgbWF4XzsKCgogIENPUkJBOjpV TG9uZyByZWZjb3VudF87CgoKICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIHJlZmNvdW50X2xvY2tfOwoK CgoKCgogIFRBT19JbnB1dENEUiAqaW5jb21pbmdfOwoKCgogIGludCBpbmNvbWluZ19mbGFnXzsK CiAgZnJpZW5kIGNsYXNzIENPUkJBX09SQjsKICBmcmllbmQgY2xhc3MgQ09SQkFfUmVxdWVzdDsK fTsKIyAzNDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vTlZMaXN0LmgiCmNsYXNzIENPUkJBX05WTGlzdF92YXIKewpwdWJsaWM6CiAgQ09SQkFfTlZM aXN0X3ZhciAodm9pZCk7CiAgQ09SQkFfTlZMaXN0X3ZhciAoQ09SQkFfTlZMaXN0X3B0cik7CiAg Q09SQkFfTlZMaXN0X3ZhciAoY29uc3QgQ09SQkFfTlZMaXN0X3ZhciAmKTsKICB+Q09SQkFfTlZM aXN0X3ZhciAodm9pZCk7CgogIENPUkJBX05WTGlzdF92YXIgJm9wZXJhdG9yPSAoQ09SQkFfTlZM aXN0X3B0cik7CiAgQ09SQkFfTlZMaXN0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9OVkxp c3RfdmFyICYpOwogIENPUkJBX05WTGlzdF9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgoK ICBvcGVyYXRvciBjb25zdCBDT1JCQV9OVkxpc3RfcHRyICYoKSBjb25zdDsKICBvcGVyYXRvciBD T1JCQV9OVkxpc3RfcHRyICYoKTsKICBDT1JCQV9OVkxpc3RfcHRyIGluICh2b2lkKSBjb25zdDsK ICBDT1JCQV9OVkxpc3RfcHRyICZpbm91dCAodm9pZCk7CiAgQ09SQkFfTlZMaXN0X3B0ciAmb3V0 ICh2b2lkKTsKICBDT1JCQV9OVkxpc3RfcHRyIF9yZXRuICh2b2lkKTsKICBDT1JCQV9OVkxpc3Rf cHRyIHB0ciAodm9pZCkgY29uc3Q7Cgpwcml2YXRlOgogIENPUkJBX05WTGlzdF9wdHIgcHRyXzsK fTsKIyAzNzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vTlZMaXN0LmgiCmNsYXNzIENPUkJBX05WTGlzdF9vdXQKewpwdWJsaWM6CiAgQ09SQkFfTlZM aXN0X291dCAoQ09SQkFfTlZMaXN0X3B0ciAmKTsKICBDT1JCQV9OVkxpc3Rfb3V0IChDT1JCQV9O Vkxpc3RfdmFyICYpOwogIENPUkJBX05WTGlzdF9vdXQgKENPUkJBX05WTGlzdF9vdXQgJik7CiAg Q09SQkFfTlZMaXN0X291dCAmb3BlcmF0b3I9IChDT1JCQV9OVkxpc3Rfb3V0ICYpOwogIENPUkJB X05WTGlzdF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfTlZMaXN0X3ZhciAmKTsKICBDT1JC QV9OVkxpc3Rfb3V0ICZvcGVyYXRvcj0gKENPUkJBX05WTGlzdF9wdHIpOwogIG9wZXJhdG9yIENP UkJBX05WTGlzdF9wdHIgJigpOwogIENPUkJBX05WTGlzdF9wdHIgJnB0ciAodm9pZCk7CiAgQ09S QkFfTlZMaXN0X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAgQ09SQkFfTlZMaXN0 X3B0ciAmcHRyXzsKfTsKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9OVkxpc3QuaSIgMQoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KQ09S QkE6OmlzX25pbCAoQ09SQkE6Ok5hbWVkVmFsdWVfcHRyIG52KQp7CiAgcmV0dXJuIG52ID09IDA7 Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpyZWxlYXNlIChDT1JCQTo6TmFtZWRWYWx1ZV9wdHIgbnYp CnsKICBpZiAobnYpCiAgICBudi0+X2RlY3JfcmVmY250ICgpOwp9CgoKaW5saW5lCkNPUkJBX05h bWVkVmFsdWU6OkNPUkJBX05hbWVkVmFsdWUgKHZvaWQpCiAgOiByZWZjb3VudF8gKDEpLAogICAg ZmxhZ3NfICgwKSwKICAgIG5hbWVfICgwKQp7Cn0KCgppbmxpbmUgY29uc3QgY2hhcioKQ09SQkFf TmFtZWRWYWx1ZTo6bmFtZSAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5uYW1lXzsKfQoK CmlubGluZSBDT1JCQTo6QW55X3B0cgpDT1JCQV9OYW1lZFZhbHVlOjp2YWx1ZSAodm9pZCkgY29u c3QKewogIHJldHVybiBjb25zdF9jYXN0PENPUkJBOjpBbnlfcHRyPiAoJnRoaXMtPmFueV8pOwp9 CgoKaW5saW5lIENPUkJBOjpGbGFncwpDT1JCQV9OYW1lZFZhbHVlOjpmbGFncyAodm9pZCkgY29u c3QKewogIHJldHVybiB0aGlzLT5mbGFnc187Cn0KCmlubGluZSBDT1JCQV9OYW1lZFZhbHVlKgpD T1JCQV9OYW1lZFZhbHVlOjpfZHVwbGljYXRlIChDT1JCQV9OYW1lZFZhbHVlICp4KQp7CiAgaWYg KHggIT0gMCkKICAgIHgtPl9pbmNyX3JlZmNudCAoKTsKICByZXR1cm4geDsKfQoKaW5saW5lIENP UkJBX05hbWVkVmFsdWUqCkNPUkJBX05hbWVkVmFsdWU6Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4g MDsKfQoKCgoKCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpDT1JCQTo6aXNfbmlsIChDT1JCQTo6TlZM aXN0X3B0ciBudmwpCnsKICByZXR1cm4gKENPUkJBOjpCb29sZWFuKSAobnZsID09IDApOwp9Cgpp bmxpbmUgdm9pZApDT1JCQTo6cmVsZWFzZSAoQ09SQkE6Ok5WTGlzdF9wdHIgbnZsKQp7CiAgaWYg KG52bCkKICAgIG52bC0+X2RlY3JfcmVmY250ICgpOwp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1 ZV92YXI6OkNPUkJBX05hbWVkVmFsdWVfdmFyICh2b2lkKQogIDogcHRyXyAoQ09SQkFfTmFtZWRW YWx1ZTo6X25pbCAoKSkKewp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1ZV92YXI6OkNPUkJBX05h bWVkVmFsdWVfdmFyIChDT1JCQV9OYW1lZFZhbHVlX3B0ciBwKQogIDogcHRyXyAocCkKe30KCmlu bGluZQpDT1JCQV9OYW1lZFZhbHVlX3Zhcjo6fkNPUkJBX05hbWVkVmFsdWVfdmFyICh2b2lkKQp7 CiAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwp9CgppbmxpbmUgQ09SQkFfTmFtZWRWYWx1 ZV9wdHIKQ09SQkFfTmFtZWRWYWx1ZV92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1ZV92YXI6OkNPUkJBX05hbWVkVmFs dWVfdmFyIChjb25zdCBDT1JCQV9OYW1lZFZhbHVlX3ZhciAmcCkKICA6IHB0cl8gKENPUkJBX05h bWVkVmFsdWU6Ol9kdXBsaWNhdGUgKHAucHRyICgpKSkKe30KCmlubGluZSBDT1JCQV9OYW1lZFZh bHVlX3ZhciAmCkNPUkJBX05hbWVkVmFsdWVfdmFyOjpvcGVyYXRvcj0gKENPUkJBX05hbWVkVmFs dWVfcHRyIHApCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9 IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgQ09SQkFfTmFtZWRWYWx1ZV92YXIgJgpDT1JC QV9OYW1lZFZhbHVlX3Zhcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9OYW1lZFZhbHVlX3ZhciAm cCkKewogIGlmICh0aGlzICE9ICZwKQogIHsKICAgIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJf KTsKICAgIHRoaXMtPnB0cl8gPSBDT1JCQV9OYW1lZFZhbHVlOjpfZHVwbGljYXRlIChwLnB0ciAo KSk7CiAgfQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJBX05hbWVkVmFsdWVfdmFyOjpv cGVyYXRvciBjb25zdCBDT1JCQV9OYW1lZFZhbHVlX3B0ciAmKCkgY29uc3QKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1ZV92YXI6Om9wZXJhdG9yIENPUkJB X05hbWVkVmFsdWVfcHRyICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JC QV9OYW1lZFZhbHVlX3B0cgpDT1JCQV9OYW1lZFZhbHVlX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkg Y29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTmFtZWRWYWx1ZV9w dHIKQ09SQkFfTmFtZWRWYWx1ZV92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMt PnB0cl87Cn0KCmlubGluZSBDT1JCQV9OYW1lZFZhbHVlX3B0ciAmCkNPUkJBX05hbWVkVmFsdWVf dmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFf TmFtZWRWYWx1ZV9wdHIgJgpDT1JCQV9OYW1lZFZhbHVlX3Zhcjo6b3V0ICh2b2lkKQp7CiAgQ09S QkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBDT1JCQV9OYW1lZFZhbHVl OjpfbmlsICgpOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTmFtZWRWYWx1 ZV9wdHIKQ09SQkFfTmFtZWRWYWx1ZV92YXI6Ol9yZXRuICh2b2lkKQp7CgogIENPUkJBX05hbWVk VmFsdWVfcHRyIHZhbCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IENPUkJBX05hbWVkVmFs dWU6Ol9uaWwgKCk7CiAgcmV0dXJuIHZhbDsKfQoKCgoKCmlubGluZQpDT1JCQV9OYW1lZFZhbHVl X291dDo6Q09SQkFfTmFtZWRWYWx1ZV9vdXQgKENPUkJBX05hbWVkVmFsdWVfcHRyICZwKQogICAg ICAgIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSBDT1JCQV9OYW1lZFZhbHVlOjpfbmlsICgp Owp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1ZV9vdXQ6OkNPUkJBX05hbWVkVmFsdWVfb3V0IChD T1JCQV9OYW1lZFZhbHVlX3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgQ09SQkE6OnJl bGVhc2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBDT1JCQV9OYW1lZFZhbHVlOjpfbmls ICgpOwp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1ZV9vdXQ6OkNPUkJBX05hbWVkVmFsdWVfb3V0 IChDT1JCQV9OYW1lZFZhbHVlX291dCAmcCkKICA6IHB0cl8gKHAucHRyXykKe30KCmlubGluZSBD T1JCQV9OYW1lZFZhbHVlX291dCAmCkNPUkJBX05hbWVkVmFsdWVfb3V0OjpvcGVyYXRvcj0gKENP UkJBX05hbWVkVmFsdWVfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IHAucHRyXzsKICByZXR1cm4g KnRoaXM7Cn0KCmlubGluZSBDT1JCQV9OYW1lZFZhbHVlX291dCAmCkNPUkJBX05hbWVkVmFsdWVf b3V0OjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX05hbWVkVmFsdWVfdmFyICZwKQp7CiAgdGhpcy0+ cHRyXyA9IENPUkJBX05hbWVkVmFsdWU6Ol9kdXBsaWNhdGUgKHAucHRyICgpKTsKICByZXR1cm4g KnRoaXM7Cn0KCmlubGluZSBDT1JCQV9OYW1lZFZhbHVlX291dCAmCkNPUkJBX05hbWVkVmFsdWVf b3V0OjpvcGVyYXRvcj0gKENPUkJBX05hbWVkVmFsdWVfcHRyIHApCnsKICB0aGlzLT5wdHJfID0g cDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9OYW1lZFZhbHVlX291dDo6b3BlcmF0 b3IgQ09SQkFfTmFtZWRWYWx1ZV9wdHIgJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s aW5lIENPUkJBX05hbWVkVmFsdWVfcHRyICYKQ09SQkFfTmFtZWRWYWx1ZV9vdXQ6OnB0ciAodm9p ZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTmFtZWRWYWx1ZV9wdHIK Q09SQkFfTmFtZWRWYWx1ZV9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQoKCgoKCgppbmxpbmUKQ09SQkFfTlZMaXN0OjpDT1JCQV9OVkxpc3QgKHZvaWQpCiAg OiBtYXhfICgwKSwKICAgIHJlZmNvdW50XyAoMSksCiAgICBpbmNvbWluZ18gKDApLAogICAgaW5j b21pbmdfZmxhZ18gKDApCnsKfQoKaW5saW5lIENPUkJBOjpVTG9uZwpDT1JCQV9OVkxpc3Q6OmNv dW50IChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkg Y29uc3QKewogIChjb25zdF9jYXN0PENPUkJBX05WTGlzdCo+ICh0aGlzKSktPmV2YWx1YXRlIChf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgIDsK CiAgcmV0dXJuIHRoaXMtPm1heF87Cn0KCmlubGluZSBDT1JCQV9OVkxpc3QqCkNPUkJBX05WTGlz dDo6X2R1cGxpY2F0ZSAoQ09SQkFfTlZMaXN0ICp4KQp7CiAgaWYgKHggIT0gMCkKICAgIHgtPl9p bmNyX3JlZmNudCAoKTsKICByZXR1cm4geDsKfQoKaW5saW5lIENPUkJBX05WTGlzdCoKQ09SQkFf TlZMaXN0OjpfbmlsICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCgoKCgppbmxpbmUKQ09SQkFfTlZM aXN0X3Zhcjo6Q09SQkFfTlZMaXN0X3ZhciAodm9pZCkKICA6IHB0cl8gKENPUkJBX05WTGlzdDo6 X25pbCAoKSkKewp9CgppbmxpbmUKQ09SQkFfTlZMaXN0X3Zhcjo6Q09SQkFfTlZMaXN0X3ZhciAo Q09SQkFfTlZMaXN0X3B0ciBwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpDT1JCQV9OVkxpc3Rf dmFyOjp+Q09SQkFfTlZMaXN0X3ZhciAodm9pZCkKewogIENPUkJBOjpyZWxlYXNlICh0aGlzLT5w dHJfKTsKfQoKaW5saW5lIENPUkJBX05WTGlzdF9wdHIKQ09SQkFfTlZMaXN0X3Zhcjo6cHRyICh2 b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpDT1JCQV9OVkxpc3Rf dmFyOjpDT1JCQV9OVkxpc3RfdmFyIChjb25zdCBDT1JCQV9OVkxpc3RfdmFyICZwKQogIDogcHRy XyAoQ09SQkFfTlZMaXN0OjpfZHVwbGljYXRlIChwLnB0ciAoKSkpCnt9CgppbmxpbmUgQ09SQkFf TlZMaXN0X3ZhciAmCkNPUkJBX05WTGlzdF92YXI6Om9wZXJhdG9yPSAoQ09SQkFfTlZMaXN0X3B0 ciBwKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBwOwog IHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX05WTGlzdF92YXIgJgpDT1JCQV9OVkxpc3Rf dmFyOjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX05WTGlzdF92YXIgJnApCnsKICBpZiAodGhpcyAh PSAmcCkKICB7CiAgICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgICB0aGlzLT5wdHJf ID0gQ09SQkFfTlZMaXN0OjpfZHVwbGljYXRlIChwLnB0ciAoKSk7CiAgfQogIHJldHVybiAqdGhp czsKfQoKaW5saW5lCkNPUkJBX05WTGlzdF92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX05WTGlz dF9wdHIgJigpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX05W TGlzdF92YXI6Om9wZXJhdG9yIENPUkJBX05WTGlzdF9wdHIgJigpCnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQoKaW5saW5lIENPUkJBX05WTGlzdF9wdHIKQ09SQkFfTlZMaXN0X3Zhcjo6b3BlcmF0 b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFf TlZMaXN0X3B0cgpDT1JCQV9OVkxpc3RfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTlZMaXN0X3B0ciAmCkNPUkJBX05WTGlzdF92YXI6 Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9OVkxp c3RfcHRyICYKQ09SQkFfTlZMaXN0X3Zhcjo6b3V0ICh2b2lkKQp7CiAgQ09SQkE6OnJlbGVhc2Ug KHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBDT1JCQV9OVkxpc3Q6Ol9uaWwgKCk7CiAgcmV0 dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9OVkxpc3RfcHRyCkNPUkJBX05WTGlzdF92 YXI6Ol9yZXRuICh2b2lkKQp7CgogIENPUkJBX05WTGlzdF9wdHIgdmFsID0gdGhpcy0+cHRyXzsK ICB0aGlzLT5wdHJfID0gQ09SQkFfTlZMaXN0OjpfbmlsICgpOwogIHJldHVybiB2YWw7Cn0KCgoK CgppbmxpbmUKQ09SQkFfTlZMaXN0X291dDo6Q09SQkFfTlZMaXN0X291dCAoQ09SQkFfTlZMaXN0 X3B0ciAmcCkKICAgICAgICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gQ09SQkFfTlZMaXN0 OjpfbmlsICgpOwp9CgppbmxpbmUKQ09SQkFfTlZMaXN0X291dDo6Q09SQkFfTlZMaXN0X291dCAo Q09SQkFfTlZMaXN0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgQ09SQkE6OnJlbGVh c2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBDT1JCQV9OVkxpc3Q6Ol9uaWwgKCk7Cn0K CmlubGluZQpDT1JCQV9OVkxpc3Rfb3V0OjpDT1JCQV9OVkxpc3Rfb3V0IChDT1JCQV9OVkxpc3Rf b3V0ICZwKQogIDogcHRyXyAocC5wdHJfKQp7fQoKaW5saW5lIENPUkJBX05WTGlzdF9vdXQgJgpD T1JCQV9OVkxpc3Rfb3V0OjpvcGVyYXRvcj0gKENPUkJBX05WTGlzdF9vdXQgJnApCnsKICB0aGlz LT5wdHJfID0gcC5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX05WTGlzdF9v dXQgJgpDT1JCQV9OVkxpc3Rfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX05WTGlzdF92YXIg JnApCnsKICB0aGlzLT5wdHJfID0gQ09SQkFfTlZMaXN0OjpfZHVwbGljYXRlIChwLnB0ciAoKSk7 CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgQ09SQkFfTlZMaXN0X291dCAmCkNPUkJBX05WTGlz dF9vdXQ6Om9wZXJhdG9yPSAoQ09SQkFfTlZMaXN0X3B0ciBwKQp7CiAgdGhpcy0+cHRyXyA9IHA7 CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfTlZMaXN0X291dDo6b3BlcmF0b3IgQ09S QkFfTlZMaXN0X3B0ciAmKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFf TlZMaXN0X3B0ciAmCkNPUkJBX05WTGlzdF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlz LT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTlZMaXN0X3B0cgpDT1JCQV9OVkxpc3Rfb3V0OjpvcGVy YXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KIyAzOTggIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTlZMaXN0LmgiIDIKCgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEK IyA0MDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v TlZMaXN0LmgiIDIKIyA0NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9jb3JiYS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0LmgiIDEKIyA0NyAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5oIiAx CiMgMjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v TG9jYWxPYmplY3QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvcHJlLmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0LmgiIDEKIyAyNiAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5o IiAyCiMgMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vTG9jYWxPYmplY3QuaCIKY2xhc3MgQ09SQkFfTG9jYWxPYmplY3QgOiBwdWJsaWMgdmlydHVh bCBDT1JCQV9PYmplY3QKewpwdWJsaWM6CgoKICB2aXJ0dWFsIH5DT1JCQV9Mb2NhbE9iamVjdCAo dm9pZCk7CgoKICBzdGF0aWMgQ09SQkFfTG9jYWxPYmplY3RfcHRyIF9kdXBsaWNhdGUgKENPUkJB X0xvY2FsT2JqZWN0X3B0ciBvYmopOwoKCiAgc3RhdGljIENPUkJBX0xvY2FsT2JqZWN0X3B0ciBf bmlsICh2b2lkKTsKIyA1NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5oIgogIHN0YXRpYyBDT1JCQV9Mb2NhbE9iamVjdF9wdHIg X25hcnJvdyAoQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKICBzdGF0aWMgQ09SQkFfTG9jYWxPYmplY3RfcHRy IF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwK ICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlID0KICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoK ICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQgKENPUkJBX0Vudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCiAgdmly dHVhbCBDT1JCQTo6SW1wbGVtZW50YXRpb25EZWZfcHRyCiAgICAgIF9nZXRfaW1wbGVtZW50YXRp b24gKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7 CgoKICB2aXJ0dWFsIENPUkJBX0ludGVyZmFjZURlZl9wdHIgX2dldF9pbnRlcmZhY2UgKAogICAg ICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9IFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwoKCiAgdmlydHVhbCB2b2lkIF9jcmVhdGVf cmVxdWVzdCAoQ09SQkE6OkNvbnRleHRfcHRyIGN0eCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBDT1JCQTo6Q2hhciAqb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENPUkJBOjpOVkxpc3RfcHRyIGFyZ19saXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIENPUkJBOjpOYW1lZFZhbHVlX3B0ciByZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlJlcXVlc3RfcHRyICZyZXF1ZXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpGbGFncyByZXFfZmxhZ3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFP X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKICB2aXJ0dWFsIHZvaWQgX2NyZWF0ZV9yZXF1ZXN0 IChDT1JCQTo6Q29udGV4dF9wdHIgY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IENPUkJBOjpDaGFyICpvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ09SQkE6Ok5WTGlzdF9wdHIgYXJnX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ09SQkE6Ok5hbWVkVmFsdWVfcHRyIHJlc3VsdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDT1JCQTo6RXhjZXB0aW9uTGlzdF9wdHIgZXhjbGlzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Q29udGV4dExpc3RfcHRyIGN0eHRsaXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpSZXF1ZXN0X3B0ciAmcmVxdWVz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RmxhZ3MgcmVxX2ZsYWdz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgogIHZpcnR1YWwgQ09SQkE6OlJl cXVlc3RfcHRyIF9yZXF1ZXN0IChjb25zdCBDT1JCQTo6Q2hhciAqb3BlcmF0aW9uLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKCgogIENPUkJBOjpQ b2xpY3lfcHRyIF9nZXRfcG9saWN5ICgKICAgICAgQ09SQkE6OlBvbGljeVR5cGUgdHlwZSwKICAg ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwoKCiAgQ09SQkE6OlBvbGlj eV9wdHIgX2dldF9jbGllbnRfcG9saWN5ICgKICAgICAgQ09SQkE6OlBvbGljeVR5cGUgdHlwZSwK ICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg PQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwoKCiAgQ09SQkE6Ok9i amVjdF9wdHIgX3NldF9wb2xpY3lfb3ZlcnJpZGVzICgKICAgICAgY29uc3QgQ09SQkE6OlBvbGlj eUxpc3QgJiBwb2xpY2llcywKICAgICAgQ09SQkE6OlNldE92ZXJyaWRlVHlwZSBzZXRfYWRkLAog ICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9 CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7CgoKICBDT1JCQTo6UG9s aWN5TGlzdCAqIF9nZXRfcG9saWN5X292ZXJyaWRlcyAoCiAgICAgIGNvbnN0IENPUkJBOjpQb2xp Y3lUeXBlU2VxICYgdHlwZXMsCiAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog ICAgKTsKCgogIENPUkJBOjpCb29sZWFuIF92YWxpZGF0ZV9jb25uZWN0aW9uICgKICAgICAgQ09S QkE6OlBvbGljeUxpc3Rfb3V0IGluY29uc2lzdGVudF9wb2xpY2llcywKICAgICAgQ09SQkFfRW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19k ZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwojIDE1NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5oIgogIHZpcnR1YWwgQ09S QkE6OlVMb25nIF9oYXNoIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly b25tZW50ICgpKTsKCgoKCgoKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfZXF1aXZhbGVu dCAoQ09SQkFfT2JqZWN0X3B0ciBvdGhlcl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkKICAgIHRocm93ICgpOwoKCgogIHZpcnR1YWwgdm9p ZCBfYWRkX3JlZiAodm9pZCk7CgoKICB2aXJ0dWFsIHZvaWQgX3JlbW92ZV9yZWYgKHZvaWQpOwoK CgoKICB2aXJ0dWFsIFRBT19PYmplY3RLZXkgKl9rZXkgKENPUkJBX0Vudmlyb25tZW50ICZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCgoKICB0eXBlZGVmIENPUkJBX0xvY2FsT2Jq ZWN0X3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDT1JCQV9Mb2NhbE9iamVjdF92YXIgX3Zhcl90 eXBlOwoKCnByb3RlY3RlZDoKCgoKCgogIENPUkJBX0xvY2FsT2JqZWN0ICh2b2lkKTsKCnByaXZh dGU6CgoKCgoKICBDT1JCQV9Mb2NhbE9iamVjdCAoY29uc3QgQ09SQkFfTG9jYWxPYmplY3QgJik7 CiAgQ09SQkFfTG9jYWxPYmplY3QgJm9wZXJhdG9yID0gKGNvbnN0IENPUkJBX0xvY2FsT2JqZWN0 ICYpOwoKCn07CgpjbGFzcyBDT1JCQV9Mb2NhbE9iamVjdF92YXIKewpwdWJsaWM6CiAgQ09SQkFf TG9jYWxPYmplY3RfdmFyICh2b2lkKTsKICBDT1JCQV9Mb2NhbE9iamVjdF92YXIgKENPUkJBX0xv Y2FsT2JqZWN0X3B0cik7CiAgQ09SQkFfTG9jYWxPYmplY3RfdmFyIChjb25zdCBDT1JCQV9Mb2Nh bE9iamVjdF92YXIgJik7CiAgfkNPUkJBX0xvY2FsT2JqZWN0X3ZhciAodm9pZCk7CgogIENPUkJB X0xvY2FsT2JqZWN0X3ZhciAmb3BlcmF0b3I9IChDT1JCQV9Mb2NhbE9iamVjdF9wdHIpOwogIENP UkJBX0xvY2FsT2JqZWN0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Mb2NhbE9iamVjdF92 YXIgJik7CiAgQ09SQkFfTG9jYWxPYmplY3RfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoK CiAgb3BlcmF0b3IgY29uc3QgQ09SQkFfTG9jYWxPYmplY3RfcHRyICYoKSBjb25zdDsKICBvcGVy YXRvciBDT1JCQV9Mb2NhbE9iamVjdF9wdHIgJigpOwogIENPUkJBX0xvY2FsT2JqZWN0X3B0ciBp biAodm9pZCkgY29uc3Q7CiAgQ09SQkFfTG9jYWxPYmplY3RfcHRyICZpbm91dCAodm9pZCk7CiAg Q09SQkFfTG9jYWxPYmplY3RfcHRyICZvdXQgKHZvaWQpOwogIENPUkJBX0xvY2FsT2JqZWN0X3B0 ciBfcmV0biAodm9pZCk7CiAgQ09SQkFfTG9jYWxPYmplY3RfcHRyIHB0ciAodm9pZCkgY29uc3Q7 Cgpwcml2YXRlOgogIENPUkJBX0xvY2FsT2JqZWN0X3B0ciBwdHJfOwp9OwoKY2xhc3MgQ09SQkFf TG9jYWxPYmplY3Rfb3V0CnsKcHVibGljOgogIENPUkJBX0xvY2FsT2JqZWN0X291dCAoQ09SQkFf TG9jYWxPYmplY3RfcHRyICYpOwogIENPUkJBX0xvY2FsT2JqZWN0X291dCAoQ09SQkFfTG9jYWxP YmplY3RfdmFyICYpOwogIENPUkJBX0xvY2FsT2JqZWN0X291dCAoY29uc3QgQ09SQkFfTG9jYWxP YmplY3Rfb3V0ICYpOwogIENPUkJBX0xvY2FsT2JqZWN0X291dCAmb3BlcmF0b3I9IChjb25zdCBD T1JCQV9Mb2NhbE9iamVjdF9vdXQgJik7CiAgQ09SQkFfTG9jYWxPYmplY3Rfb3V0ICZvcGVyYXRv cj0gKGNvbnN0IENPUkJBX0xvY2FsT2JqZWN0X3ZhciAmKTsKICBDT1JCQV9Mb2NhbE9iamVjdF9v dXQgJm9wZXJhdG9yPSAoQ09SQkFfTG9jYWxPYmplY3RfcHRyKTsKICBvcGVyYXRvciBDT1JCQV9M b2NhbE9iamVjdF9wdHIgJigpOwogIENPUkJBX0xvY2FsT2JqZWN0X3B0ciAmcHRyICh2b2lkKTsK ICBDT1JCQV9Mb2NhbE9iamVjdF9wdHIgb3BlcmF0b3ItPiAodm9pZCk7Cgpwcml2YXRlOgogIENP UkJBX0xvY2FsT2JqZWN0X3B0ciAmcHRyXzsKfTsKCgoKCgpjbGFzcyBUQU9fTG9jYWxfUmVmQ291 bnRlZF9PYmplY3QgOiBwdWJsaWMgdmlydHVhbCBDT1JCQV9Mb2NhbE9iamVjdAp7CnB1YmxpYzoK CgogIHZpcnR1YWwgdm9pZCBfYWRkX3JlZiAodm9pZCk7CgoKICB2aXJ0dWFsIHZvaWQgX3JlbW92 ZV9yZWYgKHZvaWQpOwoKcHJvdGVjdGVkOgoKCgoKCiAgVEFPX0xvY2FsX1JlZkNvdW50ZWRfT2Jq ZWN0ICh2b2lkKTsKCnByaXZhdGU6CgoKCgoKICBUQU9fTG9jYWxfUmVmQ291bnRlZF9PYmplY3Qg KGNvbnN0IFRBT19Mb2NhbF9SZWZDb3VudGVkX09iamVjdCAmKTsKICBUQU9fTG9jYWxfUmVmQ291 bnRlZF9PYmplY3QgJm9wZXJhdG9yID0gKGNvbnN0IFRBT19Mb2NhbF9SZWZDb3VudGVkX09iamVj dCAmKTsKCgp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5pIiAxCgoKCgoKCmlubGluZSBDT1JCQV9Mb2NhbE9iamVj dF9wdHIKQ09SQkFfTG9jYWxPYmplY3Q6Ol9kdXBsaWNhdGUgKENPUkJBX0xvY2FsT2JqZWN0X3B0 ciBvYmopCnsKICBpZiAob2JqKQogICAgb2JqLT5fYWRkX3JlZiAoKTsKICByZXR1cm4gb2JqOwp9 CgoKCmlubGluZSBDT1JCQV9Mb2NhbE9iamVjdF9wdHIKQ09SQkFfTG9jYWxPYmplY3Q6Ol9uaWwg KHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIENPUkJBX0xvY2FsT2JqZWN0X3B0cgpDT1JC QV9Mb2NhbE9iamVjdDo6X25hcnJvdyAoQ09SQkFfT2JqZWN0X3B0ciBvYmosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmKQp7CiAgaWYgKG9iai0+X2lzX2xv Y2FsICgpICE9IDApCiAgICByZXR1cm4KICAgICAgcmVpbnRlcnByZXRfY2FzdDxDT1JCQV9Mb2Nh bE9iamVjdF9wdHI+IChvYmotPl90YW9fUXVlcnlJbnRlcmZhY2UgKCByZWludGVycHJldF9jYXN0 PHB0cl9hcml0aF90PiAoJkNPUkJBX0xvY2FsT2JqZWN0OjpfbmFycm93KSkpOwoKCgoKCiAgcmV0 dXJuIDA7Cn0KCmlubGluZSBDT1JCQV9Mb2NhbE9iamVjdF9wdHIKQ09SQkFfTG9jYWxPYmplY3Q6 Ol91bmNoZWNrZWRfbmFycm93IChDT1JCQV9PYmplY3RfcHRyIG9iaiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmKQp7CiAgaWYgKG9iai0+ X2lzX2xvY2FsICgpICE9IDApCiAgICByZXR1cm4KICAgICAgcmVpbnRlcnByZXRfY2FzdDxDT1JC QV9Mb2NhbE9iamVjdF9wdHI+IChvYmotPl90YW9fUXVlcnlJbnRlcmZhY2UgKCByZWludGVycHJl dF9jYXN0PHB0cl9hcml0aF90PiAoJkNPUkJBX0xvY2FsT2JqZWN0OjpfbmFycm93KSkpOwoKCgoK CiAgcmV0dXJuIDA7Cn0KCmlubGluZQpDT1JCQV9Mb2NhbE9iamVjdDo6Q09SQkFfTG9jYWxPYmpl Y3QgKHZvaWQpCiAgOiBDT1JCQV9PYmplY3QgKDApCnsKfQoKaW5saW5lClRBT19Mb2NhbF9SZWZD b3VudGVkX09iamVjdDo6VEFPX0xvY2FsX1JlZkNvdW50ZWRfT2JqZWN0ICh2b2lkKQoKewp9CgoK CgoKaW5saW5lCkNPUkJBX0xvY2FsT2JqZWN0X3Zhcjo6Q09SQkFfTG9jYWxPYmplY3RfdmFyICh2 b2lkKQogIDogcHRyXyAoQ09SQkFfTG9jYWxPYmplY3Q6Ol9uaWwgKCkpCnsKfQoKaW5saW5lCkNP UkJBX0xvY2FsT2JqZWN0X3Zhcjo6Q09SQkFfTG9jYWxPYmplY3RfdmFyIChDT1JCQV9Mb2NhbE9i amVjdF9wdHIgcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKQ09SQkFfTG9jYWxPYmplY3RfdmFy Ojp+Q09SQkFfTG9jYWxPYmplY3RfdmFyICh2b2lkKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHRoaXMt PnB0cl8pOwp9CgppbmxpbmUgQ09SQkFfTG9jYWxPYmplY3RfcHRyCkNPUkJBX0xvY2FsT2JqZWN0 X3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpD T1JCQV9Mb2NhbE9iamVjdF92YXI6OkNPUkJBX0xvY2FsT2JqZWN0X3ZhciAoY29uc3QgQ09SQkFf TG9jYWxPYmplY3RfdmFyICZwKQogIDogcHRyXyAoQ09SQkFfTG9jYWxPYmplY3Q6Ol9kdXBsaWNh dGUgKHAucHRyICgpKSkKewp9CgppbmxpbmUgQ09SQkFfTG9jYWxPYmplY3RfdmFyICYKQ09SQkFf TG9jYWxPYmplY3RfdmFyOjpvcGVyYXRvcj0gKENPUkJBX0xvY2FsT2JqZWN0X3B0ciBwKQp7CiAg Q09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAq dGhpczsKfQoKaW5saW5lIENPUkJBX0xvY2FsT2JqZWN0X3ZhciAmCkNPUkJBX0xvY2FsT2JqZWN0 X3Zhcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9Mb2NhbE9iamVjdF92YXIgJnApCnsKICBpZiAo dGhpcyAhPSAmcCkKICAgIHsKICAgICAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogICAg ICB0aGlzLT5wdHJfID0gQ09SQkFfTG9jYWxPYmplY3Q6Ol9kdXBsaWNhdGUgKHAucHRyICgpKTsK ICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfTG9jYWxPYmplY3RfdmFyOjpv cGVyYXRvciBjb25zdCBDT1JCQV9Mb2NhbE9iamVjdF9wdHIgJigpIGNvbnN0CnsKICByZXR1cm4g dGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX0xvY2FsT2JqZWN0X3Zhcjo6b3BlcmF0b3IgQ09S QkFfTG9jYWxPYmplY3RfcHRyICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBD T1JCQV9Mb2NhbE9iamVjdF9wdHIKQ09SQkFfTG9jYWxPYmplY3RfdmFyOjpvcGVyYXRvci0+ICh2 b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9Mb2NhbE9i amVjdF9wdHIKQ09SQkFfTG9jYWxPYmplY3RfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVy biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTG9jYWxPYmplY3RfcHRyICYKQ09SQkFfTG9j YWxPYmplY3RfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgppbmxp bmUgQ09SQkFfTG9jYWxPYmplY3RfcHRyICYKQ09SQkFfTG9jYWxPYmplY3RfdmFyOjpvdXQgKHZv aWQpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IENPUkJB X0xvY2FsT2JqZWN0OjpfbmlsICgpOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09S QkFfTG9jYWxPYmplY3RfcHRyCkNPUkJBX0xvY2FsT2JqZWN0X3Zhcjo6X3JldG4gKHZvaWQpCnsK CiAgQ09SQkFfTG9jYWxPYmplY3RfcHRyIHZhbCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9 IENPUkJBX0xvY2FsT2JqZWN0OjpfbmlsICgpOwogIHJldHVybiB2YWw7Cn0KCgoKCgppbmxpbmUK Q09SQkFfTG9jYWxPYmplY3Rfb3V0OjpDT1JCQV9Mb2NhbE9iamVjdF9vdXQgKENPUkJBX0xvY2Fs T2JqZWN0X3B0ciAmcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gQ09SQkFfTG9jYWxP YmplY3Q6Ol9uaWwgKCk7Cn0KCmlubGluZQpDT1JCQV9Mb2NhbE9iamVjdF9vdXQ6OkNPUkJBX0xv Y2FsT2JqZWN0X291dCAoQ09SQkFfTG9jYWxPYmplY3RfdmFyICZwKQogIDogcHRyXyAocC5vdXQg KCkpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IENPUkJB X0xvY2FsT2JqZWN0OjpfbmlsICgpOwp9CgppbmxpbmUKQ09SQkFfTG9jYWxPYmplY3Rfb3V0OjpD T1JCQV9Mb2NhbE9iamVjdF9vdXQgKGNvbnN0IENPUkJBX0xvY2FsT2JqZWN0X291dCAmcCkKICA6 IHB0cl8gKHAucHRyXykKewp9CgppbmxpbmUgQ09SQkFfTG9jYWxPYmplY3Rfb3V0ICYKQ09SQkFf TG9jYWxPYmplY3Rfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0xvY2FsT2JqZWN0X291dCAm cCkKewogIHRoaXMtPnB0cl8gPSBwLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgQ09S QkFfTG9jYWxPYmplY3Rfb3V0ICYKQ09SQkFfTG9jYWxPYmplY3Rfb3V0OjpvcGVyYXRvcj0gKGNv bnN0IENPUkJBX0xvY2FsT2JqZWN0X3ZhciAmcCkKewogIHRoaXMtPnB0cl8gPSBDT1JCQV9Mb2Nh bE9iamVjdDo6X2R1cGxpY2F0ZSAocC5wdHIgKCkpOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l IENPUkJBX0xvY2FsT2JqZWN0X291dCAmCkNPUkJBX0xvY2FsT2JqZWN0X291dDo6b3BlcmF0b3I9 IChDT1JCQV9Mb2NhbE9iamVjdF9wdHIgcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAq dGhpczsKfQoKaW5saW5lCkNPUkJBX0xvY2FsT2JqZWN0X291dDo6b3BlcmF0b3IgQ09SQkFfTG9j YWxPYmplY3RfcHRyICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9M b2NhbE9iamVjdF9wdHIgJgpDT1JCQV9Mb2NhbE9iamVjdF9vdXQ6OnB0ciAodm9pZCkKewogIHJl dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTG9jYWxPYmplY3RfcHRyCkNPUkJBX0xv Y2FsT2JqZWN0X291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9 CiMgMjg3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L0xvY2FsT2JqZWN0LmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAyOTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTG9jYWxPYmplY3QuaCIgMgojIDQ4ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ByaW5jaXBh bC5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vUHJpbmNpcGFsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vUHJpbmNpcGFsLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjIgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUHJpbmNpcGFs LmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vT2N0ZXRTZXFDLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PY3RldFNlcUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNiAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PY3RldFNlcUMuaCIgMgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFm d2QuaCIgMQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL09jdGV0U2VxQy5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDEKIyAxNiAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5oIgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE3 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVl bmNlLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2UuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NYW5hZ2VkX1R5cGVzLmgiIDEK IyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9N YW5hZ2VkX1R5cGVzLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL3ByZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vTWFuYWdlZF9UeXBlcy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDE5ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01hbmFnZWRf VHlwZXMuaCIgMgojIDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL01hbmFnZWRfVHlwZXMuaCIKY2xhc3MgVEFPX1N0cmluZ19NYW5hZ2VyCnsKcHVi bGljOgoKCiAgVEFPX1N0cmluZ19NYW5hZ2VyICh2b2lkKTsKCgogIFRBT19TdHJpbmdfTWFuYWdl ciAoY29uc3QgVEFPX1N0cmluZ19NYW5hZ2VyICYpOwoKCiAgflRBT19TdHJpbmdfTWFuYWdlciAo dm9pZCk7CgoKICBUQU9fU3RyaW5nX01hbmFnZXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX1N0cmlu Z19NYW5hZ2VyJik7CgoKICBUQU9fU3RyaW5nX01hbmFnZXIgJm9wZXJhdG9yPSAoY29uc3QgQ09S QkE6OlN0cmluZ192YXImKTsKCgogIFRBT19TdHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChjb25z dCBjaGFyICopOwoKCgogIFRBT19TdHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChjaGFyICopOwoK CiAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBjb25zdDsKCgogIGNvbnN0IGNoYXIgKmluICh2b2lk KSBjb25zdDsKCgogIGNoYXIgKiZpbm91dCAodm9pZCk7CgoKICBjaGFyIComb3V0ICh2b2lkKTsK CgogIGNoYXIgKl9yZXRuICh2b2lkKTsKCnByaXZhdGU6CgogIGNoYXIgKnB0cl87Cgp9OwojIDEw OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NYW5h Z2VkX1R5cGVzLmgiCmNsYXNzIFRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyCnsKcHVibGljOgog IGZyaWVuZCBjbGFzcyBUQU9fVW5ib3VuZGVkX1N0cmluZ19TZXF1ZW5jZTsKCgoKCgoKCiAgVEFP X1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgKGNvbnN0IFRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2Vy ICYpOwoKCiAgVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgKGNoYXIgKipidWZmZXIsIENPUkJB OjpCb29sZWFuIHJlbGVhc2UpOwoKCiAgflRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyICh2b2lk KTsKCgogIFRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19T ZXFFbGVtX1N0cmluZ19NYW5hZ2VyJik7CgoKICBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlciAm b3BlcmF0b3I9IChjb25zdCBDT1JCQTo6U3RyaW5nX3ZhciYpOwoKCiAgVEFPX1NlcUVsZW1fU3Ry aW5nX01hbmFnZXIgJm9wZXJhdG9yPSAoY29uc3QgY2hhciAqKTsKCgoKICBUQU9fU2VxRWxlbV9T dHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChjaGFyICopOwoKCiAgb3BlcmF0b3IgY29uc3QgY2hh ciooKSBjb25zdDsKCgogIGNvbnN0IGNoYXIgKmluICh2b2lkKSBjb25zdDsKCgogIGNoYXIgKiZp bm91dCAodm9pZCk7CgoKICBjaGFyIComb3V0ICh2b2lkKTsKCgogIGNoYXIgKl9yZXRuICh2b2lk KTsKCnByaXZhdGU6CgogIGNoYXIgKipwdHJfOwoKCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZV87 CgoKCgoKCiAgVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgKHZvaWQpOwoKfTsKIyAxODcgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWFuYWdlZF9U eXBlcy5oIgpjbGFzcyBUQU9fV1N0cmluZ19NYW5hZ2VyCnsKcHVibGljOgoKCiAgVEFPX1dTdHJp bmdfTWFuYWdlciAodm9pZCk7CgoKICBUQU9fV1N0cmluZ19NYW5hZ2VyIChjb25zdCBUQU9fV1N0 cmluZ19NYW5hZ2VyICYpOwoKCiAgflRBT19XU3RyaW5nX01hbmFnZXIgKHZvaWQpOwoKCiAgVEFP X1dTdHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChjb25zdCBUQU9fV1N0cmluZ19NYW5hZ2VyJik7 CgoKICBUQU9fV1N0cmluZ19NYW5hZ2VyICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBOjpXU3RyaW5n X3ZhciYpOwoKCiAgVEFPX1dTdHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQTo6 V0NoYXIgKik7CgoKCiAgVEFPX1dTdHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChDT1JCQTo6V0No YXIgKik7CgoKICBvcGVyYXRvciBjb25zdCBDT1JCQTo6V0NoYXIqKCkgY29uc3Q7CgoKICBjb25z dCBDT1JCQTo6V0NoYXIgKmluICh2b2lkKSBjb25zdDsKCgogIENPUkJBOjpXQ2hhciAqJmlub3V0 ICh2b2lkKTsKCgogIENPUkJBOjpXQ2hhciAqJm91dCAodm9pZCk7CgoKICBDT1JCQTo6V0NoYXIg Kl9yZXRuICh2b2lkKTsKCnByaXZhdGU6CgogIENPUkJBOjpXQ2hhciAqcHRyXzsKCn07CiMgMjU5 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01hbmFn ZWRfVHlwZXMuaCIKY2xhc3MgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5hZ2VyCnsKcHVibGljOgog IGZyaWVuZCBjbGFzcyBUQU9fVW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U7CgoKCgoKCgogIFRB T19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlciAoQ09SQkE6OldDaGFyICoqYnVmZmVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSk7CgoKICBUQU9f U2VxRWxlbV9XU3RyaW5nX01hbmFnZXIgKGNvbnN0IFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdl ciAmKTsKCgogIH5UQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFnZXIgKHZvaWQpOwoKCiAgVEFPX1Nl cUVsZW1fV1N0cmluZ19NYW5hZ2VyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19TZXFFbGVtX1dTdHJp bmdfTWFuYWdlciYpOwoKCiAgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5hZ2VyICZvcGVyYXRvcj0g KGNvbnN0IENPUkJBOjpXU3RyaW5nX3ZhciYpOwoKCiAgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5h Z2VyICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBOjpXQ2hhciAqKTsKCgoKICBUQU9fU2VxRWxlbV9X U3RyaW5nX01hbmFnZXIgJm9wZXJhdG9yPSAoQ09SQkE6OldDaGFyICopOwoKCiAgb3BlcmF0b3Ig Y29uc3QgQ09SQkE6OldDaGFyKigpIGNvbnN0OwoKCiAgY29uc3QgQ09SQkE6OldDaGFyICppbiAo dm9pZCkgY29uc3Q7CgoKICBDT1JCQTo6V0NoYXIgKiZpbm91dCAodm9pZCk7CgoKICBDT1JCQTo6 V0NoYXIgKiZvdXQgKHZvaWQpOwoKCiAgQ09SQkE6OldDaGFyICpfcmV0biAodm9pZCk7Cgpwcml2 YXRlOgoKICBDT1JCQTo6V0NoYXIgKipwdHJfOwoKCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZV87 CgoKCgoKCiAgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5hZ2VyICh2b2lkKTsKCn07CgoKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01hbmFnZWRf VHlwZXMuaSIgMQojIDIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL01hbmFnZWRfVHlwZXMuaSIKaW5saW5lClRBT19TdHJpbmdfTWFuYWdlcjo6VEFP X1N0cmluZ19NYW5hZ2VyICh2b2lkKQogIDogcHRyXyAoQ09SQkE6OnN0cmluZ19kdXAgKCIiKSkK ewp9CgoKaW5saW5lClRBT19TdHJpbmdfTWFuYWdlcjo6VEFPX1N0cmluZ19NYW5hZ2VyIChjb25z dCBUQU9fU3RyaW5nX01hbmFnZXIgJnJocykKICA6IHB0cl8gKENPUkJBOjpzdHJpbmdfZHVwIChy aHMucHRyXykpCnsKfQoKCmlubGluZQpUQU9fU3RyaW5nX01hbmFnZXI6On5UQU9fU3RyaW5nX01h bmFnZXIgKHZvaWQpCnsKICBDT1JCQTo6c3RyaW5nX2ZyZWUgKHRoaXMtPnB0cl8pOwp9CgoKaW5s aW5lIFRBT19TdHJpbmdfTWFuYWdlciYKVEFPX1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKGNv bnN0IFRBT19TdHJpbmdfTWFuYWdlciAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJl dHVybiAqdGhpczsKCiAgQ09SQkE6OnN0cmluZ19mcmVlICh0aGlzLT5wdHJfKTsKICB0aGlzLT5w dHJfID0gQ09SQkE6OnN0cmluZ19kdXAgKHJocy5wdHJfKTsKICByZXR1cm4gKnRoaXM7Cn0KCgpp bmxpbmUgVEFPX1N0cmluZ19NYW5hZ2VyICYKVEFPX1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0g KGNvbnN0IGNoYXIgKiBwKQp7CiAgQ09SQkE6OnN0cmluZ19mcmVlICh0aGlzLT5wdHJfKTsKICB0 aGlzLT5wdHJfID0gQ09SQkE6OnN0cmluZ19kdXAgKHApOwogIHJldHVybiAqdGhpczsKfQoKCmlu bGluZSBUQU9fU3RyaW5nX01hbmFnZXIgJgpUQU9fU3RyaW5nX01hbmFnZXI6Om9wZXJhdG9yPSAo Y2hhciAqIHApCnsKICBDT1JCQTo6c3RyaW5nX2ZyZWUgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0 cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lClRBT19TdHJpbmdfTWFuYWdlcjo6b3Bl cmF0b3IgY29uc3QgY2hhciogKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK aW5saW5lIGNvbnN0IGNoYXIgKgpUQU9fU3RyaW5nX01hbmFnZXI6OmluICh2b2lkKSBjb25zdAp7 CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBjaGFyIComClRBT19TdHJpbmdfTWFuYWdl cjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNoYXIgKiYK VEFPX1N0cmluZ19NYW5hZ2VyOjpvdXQgKHZvaWQpCnsKICBDT1JCQTo6c3RyaW5nX2ZyZWUgKHRo aXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgppbmxp bmUgY2hhciAqClRBT19TdHJpbmdfTWFuYWdlcjo6X3JldG4gKHZvaWQpCnsKICBjaGFyICp0ZW1w ID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGVtcDsKfQoKCgoKaW5s aW5lClRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyOjoKVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFn ZXIgKGNvbnN0IFRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyICZyaHMpCiAgOiBwdHJfIChyaHMu cHRyXyksCiAgICAgcmVsZWFzZV8gKHJocy5yZWxlYXNlXykKewp9CgppbmxpbmUKVEFPX1NlcUVs ZW1fU3RyaW5nX01hbmFnZXI6OlRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyIChjaGFyICoqYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBwdHJfIChidWZmZXIpLAogICAgIHJlbGVh c2VfIChyZWxlYXNlKQp7Cn0KCmlubGluZQpUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlcjo6flRB T19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyICh2b2lkKQp7Cn0KCgppbmxpbmUgVEFPX1NlcUVsZW1f U3RyaW5nX01hbmFnZXImClRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKGNv bnN0IFRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyICZyaHMpCnsKICBpZiAodGhpcyA9PSAmcmhz KQogICAgcmV0dXJuICp0aGlzOwoKICBpZiAodGhpcy0+cmVsZWFzZV8pCiAgICBDT1JCQTo6c3Ry aW5nX2ZyZWUgKCp0aGlzLT5wdHJfKTsKICAqdGhpcy0+cHRyXyA9IENPUkJBOjpzdHJpbmdfZHVw ICgqcmhzLnB0cl8pOwogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBUQU9fU2VxRWxlbV9TdHJp bmdfTWFuYWdlciAmClRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKGNvbnN0 IGNoYXIgKnApCnsKICBpZiAodGhpcy0+cmVsZWFzZV8pCiAgICBDT1JCQTo6c3RyaW5nX2ZyZWUg KCp0aGlzLT5wdHJfKTsKICAqdGhpcy0+cHRyXyA9IENPUkJBOjpzdHJpbmdfZHVwIChwKTsKICBy ZXR1cm4gKnRoaXM7Cn0KCgppbmxpbmUgVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgJgpUQU9f U2VxRWxlbV9TdHJpbmdfTWFuYWdlcjo6b3BlcmF0b3I9IChjaGFyICpwKQp7CiAgaWYgKHRoaXMt PnJlbGVhc2VfKQogICAgQ09SQkE6OnN0cmluZ19mcmVlICgqdGhpcy0+cHRyXyk7CiAgKnRoaXMt PnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lClRBT19TZXFFbGVtX1N0cmluZ19N YW5hZ2VyOjpvcGVyYXRvciBjb25zdCBjaGFyKiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhp cy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IGNoYXIgKgpUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdl cjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSBjaGFy IComClRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyOjppbm91dCAodm9pZCkKewogIHJldHVybiAq dGhpcy0+cHRyXzsKfQoKaW5saW5lIGNoYXIgKiYKVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXI6 Om91dCAodm9pZCkKewogIENPUkJBOjpzdHJpbmdfZnJlZSAoKnRoaXMtPnB0cl8pOwogICp0aGlz LT5wdHJfID0gMDsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSBjaGFyICoKVEFPX1Nl cUVsZW1fU3RyaW5nX01hbmFnZXI6Ol9yZXRuICh2b2lkKQp7CiAgY2hhciAqdGVtcCA9ICp0aGlz LT5wdHJfOwogICp0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGVtcDsKfQoKCgoKaW5saW5lClRB T19XU3RyaW5nX01hbmFnZXI6OlRBT19XU3RyaW5nX01hbmFnZXIgKHZvaWQpCiAgOiBwdHJfICgw KQp7Cn0KCgppbmxpbmUKVEFPX1dTdHJpbmdfTWFuYWdlcjo6VEFPX1dTdHJpbmdfTWFuYWdlciAo Y29uc3QgVEFPX1dTdHJpbmdfTWFuYWdlciAmcmhzKQogIDogcHRyXyAoQ09SQkE6OndzdHJpbmdf ZHVwIChyaHMucHRyXykpCnsKfQoKCmlubGluZQpUQU9fV1N0cmluZ19NYW5hZ2VyOjp+VEFPX1dT dHJpbmdfTWFuYWdlciAodm9pZCkKewogIENPUkJBOjp3c3RyaW5nX2ZyZWUgKHRoaXMtPnB0cl8p Owp9CgoKaW5saW5lIFRBT19XU3RyaW5nX01hbmFnZXImClRBT19XU3RyaW5nX01hbmFnZXI6Om9w ZXJhdG9yPSAoY29uc3QgVEFPX1dTdHJpbmdfTWFuYWdlciAmcmhzKQp7CiAgaWYgKHRoaXMgPT0g JnJocykKICAgIHJldHVybiAqdGhpczsKCiAgQ09SQkE6OndzdHJpbmdfZnJlZSAodGhpcy0+cHRy Xyk7CiAgdGhpcy0+cHRyXyA9IENPUkJBOjp3c3RyaW5nX2R1cCAocmhzLnB0cl8pOwogIHJldHVy biAqdGhpczsKfQoKCmlubGluZSBUQU9fV1N0cmluZ19NYW5hZ2VyICYKVEFPX1dTdHJpbmdfTWFu YWdlcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQTo6V0NoYXIgKiBwKQp7CiAgQ09SQkE6OndzdHJp bmdfZnJlZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IENPUkJBOjp3c3RyaW5nX2R1cCAo cCk7CiAgcmV0dXJuICp0aGlzOwp9CgoKaW5saW5lIFRBT19XU3RyaW5nX01hbmFnZXIgJgpUQU9f V1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKENPUkJBOjpXQ2hhciAqIHApCnsKICBDT1JCQTo6 d3N0cmluZ19mcmVlICh0aGlzLT5wdHJfKTsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRo aXM7Cn0KCmlubGluZQpUQU9fV1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvciBjb25zdCBDT1JCQTo6 V0NoYXIqICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBjb25z dCBDT1JCQTo6V0NoYXIgKgpUQU9fV1N0cmluZ19NYW5hZ2VyOjppbiAodm9pZCkgY29uc3QKewog IHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6OldDaGFyIComClRBT19XU3RyaW5n X01hbmFnZXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBD T1JCQTo6V0NoYXIgKiYKVEFPX1dTdHJpbmdfTWFuYWdlcjo6b3V0ICh2b2lkKQp7CiAgQ09SQkE6 OndzdHJpbmdfZnJlZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRo aXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6V0NoYXIgKgpUQU9fV1N0cmluZ19NYW5hZ2VyOjpf cmV0biAodm9pZCkKewogIENPUkJBOjpXQ2hhciAqdGVtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+ cHRyXyA9IDA7CiAgcmV0dXJuIHRlbXA7Cn0KCgoKCmlubGluZQpUQU9fU2VxRWxlbV9XU3RyaW5n X01hbmFnZXI6OgpUQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFnZXIgKGNvbnN0IFRBT19TZXFFbGVt X1dTdHJpbmdfTWFuYWdlciAmcmhzKQogIDogcHRyXyAocmhzLnB0cl8pLAogICAgIHJlbGVhc2Vf IChyaHMucmVsZWFzZV8pCnsKfQoKaW5saW5lClRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlcjo6 CiAgICBUQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFnZXIgKENPUkJBOjpXQ2hhciAqKmJ1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkK ICA6IHB0cl8gKGJ1ZmZlciksCiAgICAgcmVsZWFzZV8gKHJlbGVhc2UpCnsKfQoKaW5saW5lClRB T19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlcjo6flRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlciAo dm9pZCkKewp9CgoKaW5saW5lIFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlciYKVEFPX1NlcUVs ZW1fV1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKGNvbnN0IFRBT19TZXFFbGVtX1dTdHJpbmdf TWFuYWdlciAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAqdGhpczsKCiAg aWYgKHRoaXMtPnJlbGVhc2VfKQogICAgQ09SQkE6OndzdHJpbmdfZnJlZSAoKnRoaXMtPnB0cl8p OwogICp0aGlzLT5wdHJfID0gQ09SQkE6OndzdHJpbmdfZHVwICgqcmhzLnB0cl8pOwogIHJldHVy biAqdGhpczsKfQoKCmlubGluZSBUQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFnZXIgJgpUQU9fU2Vx RWxlbV9XU3RyaW5nX01hbmFnZXI6Om9wZXJhdG9yPSAoY29uc3QgQ09SQkE6OldDaGFyICpwKQp7 CiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgQ09SQkE6OndzdHJpbmdfZnJlZSAoKnRoaXMtPnB0 cl8pOwogICp0aGlzLT5wdHJfID0gQ09SQkE6OndzdHJpbmdfZHVwIChwKTsKICByZXR1cm4gKnRo aXM7Cn0KCgppbmxpbmUgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5hZ2VyICYKVEFPX1NlcUVsZW1f V1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKENPUkJBOjpXQ2hhciAqcCkKewogIGlmICh0aGlz LT5yZWxlYXNlXykKICAgIENPUkJBOjp3c3RyaW5nX2ZyZWUgKCp0aGlzLT5wdHJfKTsKICAqdGhp cy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKVEFPX1NlcUVsZW1fV1N0cmlu Z19NYW5hZ2VyOjpvcGVyYXRvciBjb25zdCBDT1JCQTo6V0NoYXIqICh2b2lkKSBjb25zdAp7CiAg cmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgQ09SQkE6OldDaGFyICoKVEFPX1Nl cUVsZW1fV1N0cmluZ19NYW5hZ2VyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+ cHRyXzsKfQoKaW5saW5lIENPUkJBOjpXQ2hhciAqJgpUQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFn ZXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6 OldDaGFyIComClRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlcjo6b3V0ICh2b2lkKQp7CiAgQ09S QkE6OndzdHJpbmdfZnJlZSAoKnRoaXMtPnB0cl8pOwogICp0aGlzLT5wdHJfID0gMDsKICByZXR1 cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6V0NoYXIgKgpUQU9fU2VxRWxlbV9XU3Ry aW5nX01hbmFnZXI6Ol9yZXRuICh2b2lkKQp7CiAgQ09SQkE6OldDaGFyICp0ZW1wID0gKnRoaXMt PnB0cl87CiAgKnRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0ZW1wOwp9CiMgMzI1ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01hbmFnZWRfVHlwZXMu aCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L3Bvc3QuaCIgMQojIDMyOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9NYW5hZ2VkX1R5cGVzLmgiIDIKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5oIiAyCgpjbGFzcyBDT1JCQV9P YmplY3Q7CmNsYXNzIENPUkJBX0Vudmlyb25tZW50OwojIDM4ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCmNsYXNzIFRBT19CYXNl X1NlcXVlbmNlCnsKcHVibGljOgoKCiAgZnJpZW5kIGNsYXNzIFRBT19NYXJzaGFsX1NlcXVlbmNl OwoKCiAgdmlydHVhbCB+VEFPX0Jhc2VfU2VxdWVuY2UgKHZvaWQpOwoKCiAgQ09SQkE6OlVMb25n IG1heGltdW0gKHZvaWQpIGNvbnN0OwojIDU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCiAgdmlydHVhbCB2b2lkIF9hbGxvY2F0 ZV9idWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgdm9pZCBfZGVh bGxvY2F0ZV9idWZmZXIgKHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCB2b2lkIF9zaHJpbmtf YnVmZmVyIChDT1JCQTo6VUxvbmcgbmV3X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENPUkJBOjpVTG9uZyBvbGRfbGVuZ3RoKTsKCgoKICB2aXJ0dWFsIHZvaWQgX2Rvd25j YXN0ICh2b2lkICp0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfT2JqZWN0 ICpzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKCiAgdmlydHVhbCBDT1JCQV9PYmplY3Qg Kl91cGNhc3QgKHZvaWQgKnNyYykgY29uc3Q7Cgpwcm90ZWN0ZWQ6CgogIFRBT19CYXNlX1NlcXVl bmNlICh2b2lkKTsKCgogIFRBT19CYXNlX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSwK ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBy ZWxlYXNlID0gMCk7CgoKICBUQU9fQmFzZV9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIG1heGltdW0s CiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlcik7CgoKCiAgQ09SQkE6OkJvb2xlYW4g cmVsZWFzZSAodm9pZCkgY29uc3Q7CgpwdWJsaWM6CgoKCgogIFRBT19CYXNlX1NlcXVlbmNlIChj b25zdCBUQU9fQmFzZV9TZXF1ZW5jZSAmcmhzKTsKICBUQU9fQmFzZV9TZXF1ZW5jZSAmb3BlcmF0 b3I9IChjb25zdCBUQU9fQmFzZV9TZXF1ZW5jZSAmcmhzKTsKCgoKCnByb3RlY3RlZDoKCgogIENP UkJBOjpVTG9uZyBtYXhpbXVtXzsKCgogIENPUkJBOjpVTG9uZyBsZW5ndGhfOwoKCgogIHZvaWQg KmJ1ZmZlcl87CgoKCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZV87Cn07CiMgMTQyICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCmNs YXNzIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSA6IHB1YmxpYyBUQU9fQmFzZV9TZXF1ZW5j ZQp7CnB1YmxpYzoKIyAxNTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vU2VxdWVuY2UuaCIKICB2b2lkIGxlbmd0aCAoQ09SQkE6OlVMb25nIGxlbmd0 aCk7CgoKCgoKCiAgQ09SQkE6OlVMb25nIGxlbmd0aCAodm9pZCkgY29uc3Q7CgoKICB2aXJ0dWFs IH5UQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHZvaWQpOwoKcHJvdGVjdGVkOgoKICBUQU9f VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHZvaWQpOwoKCiAgVEFPX1VuYm91bmRlZF9CYXNlX1Nl cXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVh biByZWxlYXNlID0gMCk7CgoKICBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKENPUkJBOjpV TG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVy KTsKfTsKIyAxOTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vU2VxdWVuY2UuaCIKY2xhc3MgVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZSA6IHB1Ymxp YyBUQU9fQmFzZV9TZXF1ZW5jZQp7CnB1YmxpYzoKCgogIHZvaWQgbGVuZ3RoIChDT1JCQTo6VUxv bmcgbGVuZ3RoKTsKCgoKCgoKICBDT1JCQTo6VUxvbmcgbGVuZ3RoICh2b2lkKSBjb25zdDsKCgog IHZpcnR1YWwgflRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHZvaWQpOwoKcHJvdGVjdGVkOgoK ICBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlICh2b2lkKTsKCgogIFRBT19Cb3VuZGVkX0Jhc2Vf U2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJl bGVhc2UgPSAwKTsKCgogIFRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBt YXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlcik7Cn07CiMg MjM2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Nl cXVlbmNlLmgiCmNsYXNzIFRBT19VbmJvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIDogcHVibGljIFRB T19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZQp7CgoKCgoKCgpwdWJsaWM6CiMgMjYwICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCiAg VEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgKHZvaWQpOwojIDI3MCAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5oIgogIFRBT19V bmJvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSk7CiMgMjg0ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNl LmgiCiAgVEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVt LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqZGF0YSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0wKTsKIyAzMDAgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2Uu aCIKICBUQU9fVW5ib3VuZGVkX1N0cmluZ19TZXF1ZW5jZShjb25zdCBUQU9fVW5ib3VuZGVkX1N0 cmluZ19TZXF1ZW5jZSYpOwoKCgogIH5UQU9fVW5ib3VuZGVkX1N0cmluZ19TZXF1ZW5jZSAodm9p ZCk7CiMgMzI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL1NlcXVlbmNlLmgiCiAgVEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgJm9wZXJhdG9y PSAoY29uc3QgVEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgJik7CgoKICBUQU9fU2VxRWxl bV9TdHJpbmdfTWFuYWdlciBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkgY29uc3Q7CiMg MzQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Nl cXVlbmNlLmgiCiAgc3RhdGljIGNoYXIqICphbGxvY2J1ZiAoQ09SQkE6OlVMb25nKTsKIyAzNTAg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVu Y2UuaCIKICBzdGF0aWMgdm9pZCBmcmVlYnVmIChjaGFyICoqKTsKCgogIGNoYXIgKipnZXRfYnVm ZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICBjb25zdCBjaGFyICoqZ2V0X2J1ZmZl ciAodm9pZCkgY29uc3Q7CgoKICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6 OlVMb25nIGxlbmd0aCk7CiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7 CiAgdmlydHVhbCB2b2lkIF9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxvbmcgbmV3X2xlbmd0aCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvbGRfbGVuZ3RoKTsK fTsKIyAzNzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vU2VxdWVuY2UuaCIKY2xhc3MgVEFPX1VuYm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlIDogcHVi bGljIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZQp7CgoKCgoKCgpwdWJsaWM6CiMgMzk3ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNl LmgiCiAgVEFPX1VuYm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlICh2b2lkKTsKIyA0MDcgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2UuaCIK ICBUQU9fVW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsK IyA0MjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v U2VxdWVuY2UuaCIKICBUQU9fVW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpVTG9u ZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25n IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpXQ2hhciAq KmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBy ZWxlYXNlPTApOwojIDQzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9TZXF1ZW5jZS5oIgogIFRBT19VbmJvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZSAo Y29uc3QgVEFPX1VuYm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlJik7CgoKCiAgflRBT19VbmJvdW5k ZWRfV1N0cmluZ19TZXF1ZW5jZSAodm9pZCk7CiMgNDYyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCiAgVEFPX1VuYm91bmRlZF9X U3RyaW5nX1NlcXVlbmNlICZvcGVyYXRvcj0gKGNvbnN0IFRBT19VbmJvdW5kZWRfV1N0cmluZ19T ZXF1ZW5jZSAmKTsKCgogIFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlciBvcGVyYXRvcltdIChD T1JCQTo6VUxvbmcgc2xvdCkgY29uc3Q7CiMgNDc4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCiAgc3RhdGljIENPUkJBOjpXQ2hh ciogKmFsbG9jYnVmIChDT1JCQTo6VUxvbmcpOwojIDQ4NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5oIgogIHN0YXRpYyB2b2lkIGZy ZWVidWYgKENPUkJBOjpXQ2hhciAqKik7CgoKICBDT1JCQTo6V0NoYXIgKipnZXRfYnVmZmVyIChD T1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICBjb25zdCBDT1JCQTo6V0NoYXIgKipnZXRfYnVm ZmVyICh2b2lkKSBjb25zdDsKCgogIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JC QTo6VUxvbmcgbGVuZ3RoKTsKICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2b2lk KTsKICB2aXJ0dWFsIHZvaWQgX3Nocmlua19idWZmZXIgKENPUkJBOjpVTG9uZyBuZXdfbGVuZ3Ro LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9sZF9sZW5ndGgp Owp9OwoKCgpjbGFzcyBBQ0VfTWVzc2FnZV9CbG9jazsKdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3Mg VEFPX1VuYm91bmRlZF9TZXF1ZW5jZTsKCgoKCgp0ZW1wbGF0ZTw+CiMgNTIyICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCmNsYXNz IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PiA6IHB1YmxpYyBUQU9fVW5ib3Vu ZGVkX0Jhc2VfU2VxdWVuY2UKewpwdWJsaWM6CgogIGZyaWVuZCBjbGFzcyBUQU9fTWFyc2hhbF9T ZXF1ZW5jZTsKCgogIFRBT19VbmJvdW5kZWRfU2VxdWVuY2UgKHZvaWQpOwogIFRBT19VbmJvdW5k ZWRfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXgpOwogIFRBT19VbmJvdW5kZWRfU2VxdWVuY2Ug KENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25n IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6T2N0ZXQgKmRhdGEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDApOwogIHZp cnR1YWwgflRBT19VbmJvdW5kZWRfU2VxdWVuY2UgKHZvaWQpOwoKCgogIHN0YXRpYyB2b2lkIF90 YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgoKCgoKCiAgVEFPX1VuYm91bmRlZF9TZXF1ZW5j ZSAoY29uc3QgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+ICYpOwogIFRBT19V bmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PiYgb3BlcmF0b3I9IChjb25zdCBUQU9fVW5i b3VuZGVkX1NlcXVlbmNlPENPUkJBOjpPY3RldD4gJik7CgoKCgoKCiAgQ09SQkE6Ok9jdGV0ICZv cGVyYXRvcltdIChDT1JCQTo6VUxvbmcpOwogIGNvbnN0IENPUkJBOjpPY3RldCAmb3BlcmF0b3Jb XSAoQ09SQkE6OlVMb25nKSBjb25zdDsKCgoKCgogIHN0YXRpYyBDT1JCQTo6T2N0ZXQgKmFsbG9j YnVmIChDT1JCQTo6VUxvbmcpOwoKCiAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoQ09SQkE6Ok9jdGV0 ICopOwoKCgogIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVu Z3RoKTsKICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKTsKCgogIENPUkJB OjpPY3RldCAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuID0gMCk7CiAgY29uc3Qg Q09SQkE6Ok9jdGV0ICpnZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKCgoKCiAgdm9pZCByZXBsYWNl IChDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwK ICAgICAgICAgICAgICAgIENPUkJBOjpPY3RldCAqZGF0YSwKICAgICAgICAgICAgICAgIENPUkJB OjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKCgoKCgoKCiAgQUNFX01lc3NhZ2VfQmxvY2sqIG1iICh2 b2lkKSBjb25zdDsKCgoKICBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbGVu Z3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrKiBt Yik7CgoKCiAgdm9pZCByZXBsYWNlIChDT1JCQTo6VUxvbmcgbGVuZ3RoLCBjb25zdCBBQ0VfTWVz c2FnZV9CbG9jayogbWIpOwojIDYxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5oIgpwcml2YXRlOgogIEFDRV9NZXNzYWdlX0Jsb2Nr KiBtYl87Cgp9OwoKCgoKICAgICAgICAgICBpbnQgb3BlcmF0b3I9PSAoY29uc3QgVEFPX1VuYm91 bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+ICZsLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJBOjpPY3RldD4gJnIpOwoKICAgICAg ICAgICBpbnQgb3BlcmF0b3IhPSAoY29uc3QgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6 T2N0ZXQ+ICZsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUQU9fVW5ib3VuZGVk X1NlcXVlbmNlPENPUkJBOjpPY3RldD4gJnIpOwoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmkiIDEKCgoKCgppbmxpbmUK VEFPX0Jhc2VfU2VxdWVuY2U6OlRBT19CYXNlX1NlcXVlbmNlICh2b2lkKQogIDogbWF4aW11bV8g KDApLAogICAgbGVuZ3RoXyAoMCksCiAgICBidWZmZXJfICgwKSwKICAgIHJlbGVhc2VfICgwKQp7 Cn0KCmlubGluZQpUQU9fQmFzZV9TZXF1ZW5jZTo6VEFPX0Jhc2VfU2VxdWVuY2UgKENPUkJBOjpV TG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB OjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpC b29sZWFuIHJlbGVhc2UpCiAgOiBtYXhpbXVtXyAobWF4aW11bSksCiAgICBsZW5ndGhfIChsZW5n dGgpLAogICAgYnVmZmVyXyAoYnVmZmVyKSwKICAgIHJlbGVhc2VfIChyZWxlYXNlKQp7Cn0KCmlu bGluZQpUQU9fQmFzZV9TZXF1ZW5jZTo6VEFPX0Jhc2VfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBt YXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEp CiAgOiBtYXhpbXVtXyAobWF4aW11bSksCiAgICBsZW5ndGhfICgwKSwKICAgIGJ1ZmZlcl8gKGRh dGEpLAogICAgcmVsZWFzZV8gKDEpCnsKfQoKaW5saW5lClRBT19CYXNlX1NlcXVlbmNlOjpUQU9f QmFzZV9TZXF1ZW5jZSAoY29uc3QgVEFPX0Jhc2VfU2VxdWVuY2UgJnJocykKICA6IG1heGltdW1f IChyaHMubWF4aW11bV8pLAogICAgbGVuZ3RoXyAocmhzLmxlbmd0aF8pLAogICAgYnVmZmVyXyAo MCksCiAgICByZWxlYXNlXyAoMSkKewp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KVEFPX0Jhc2Vf U2VxdWVuY2U6OnJlbGVhc2UgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cmVsZWFzZV87 Cn0KCmlubGluZSBUQU9fQmFzZV9TZXF1ZW5jZSAmClRBT19CYXNlX1NlcXVlbmNlOjpvcGVyYXRv cj0gKGNvbnN0IFRBT19CYXNlX1NlcXVlbmNlICZyaHMpCnsKICB0aGlzLT5tYXhpbXVtXyA9IHJo cy5tYXhpbXVtXzsKICB0aGlzLT5sZW5ndGhfID0gcmhzLmxlbmd0aF87CiAgdGhpcy0+cmVsZWFz ZV8gPSAxOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBOjpVTG9uZwpUQU9fQmFzZV9T ZXF1ZW5jZTo6bWF4aW11bSAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5tYXhpbXVtXzsK fQoKCgppbmxpbmUKVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlOjpUQU9fVW5ib3VuZGVkX0Jh c2VfU2VxdWVuY2UgKHZvaWQpCnsKfQoKaW5saW5lClRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5j ZTo6ClRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19CYXNlX1NlcXVlbmNlIChtYXhp bXVtLCBsZW5ndGgsIGJ1ZmZlciwgcmVsZWFzZSkKewp9CgppbmxpbmUKVEFPX1VuYm91bmRlZF9C YXNlX1NlcXVlbmNlOjoKVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcg bWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWZmZXIpCiAgOiBU QU9fQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgYnVmZmVyKQp7Cn0KCmlubGluZSBDT1JCQTo6VUxv bmcKVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlOjpsZW5ndGggKHZvaWQpIGNvbnN0CnsKICBy ZXR1cm4gdGhpcy0+bGVuZ3RoXzsKfQoKaW5saW5lIHZvaWQKVEFPX1VuYm91bmRlZF9CYXNlX1Nl cXVlbmNlOjpsZW5ndGggKENPUkJBOjpVTG9uZyBsZW5ndGgpCnsKICBpZiAobGVuZ3RoID4gdGhp cy0+bWF4aW11bV8pCiAgICB7CiAgICAgIHRoaXMtPl9hbGxvY2F0ZV9idWZmZXIgKGxlbmd0aCk7 CiAgICAgIHRoaXMtPm1heGltdW1fID0gbGVuZ3RoOwogICAgICB0aGlzLT5yZWxlYXNlXyA9IDE7 CiAgICB9CiAgZWxzZSBpZiAobGVuZ3RoIDwgdGhpcy0+bGVuZ3RoXykKICAgIHsKICAgICAgdGhp cy0+X3Nocmlua19idWZmZXIgKGxlbmd0aCwgdGhpcy0+bGVuZ3RoXyk7CiAgICB9CiAgdGhpcy0+ bGVuZ3RoXyA9IGxlbmd0aDsKfQoKCgppbmxpbmUKVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6 VEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZSAodm9pZCkKewp9CgppbmxpbmUKVEFPX0JvdW5kZWRf QmFzZV9TZXF1ZW5jZTo6ClRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBt YXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAog ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fQmFzZV9TZXF1ZW5jZSAo bWF4aW11bSwgbGVuZ3RoLCBidWZmZXIsIHJlbGVhc2UpCnsKfQoKaW5saW5lClRBT19Cb3VuZGVk X0Jhc2VfU2VxdWVuY2U6OgpUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcg bWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYnVmZmVyKQogIDogVEFP X0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGJ1ZmZlcikKewp9CgppbmxpbmUgQ09SQkE6OlVMb25n ClRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2U6Omxlbmd0aCAodm9pZCkgY29uc3QKewogIHJldHVy biB0aGlzLT5sZW5ndGhfOwp9CgppbmxpbmUgdm9pZApUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNl OjpsZW5ndGggKENPUkJBOjpVTG9uZyBsZW5ndGgpCnsKICBpZiAodGhpcy0+YnVmZmVyXyA9PSAw KQogICAgewogICAgICB0aGlzLT5fYWxsb2NhdGVfYnVmZmVyICh0aGlzLT5tYXhpbXVtXyk7CiAg ICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgIH0KCiAgaWYgKGxlbmd0aCA+IHRoaXMtPm1heGlt dW1fKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgZWxzZSBpZiAobGVuZ3RoIDwgdGhpcy0+ bGVuZ3RoXykKICAgIHsKICAgICAgdGhpcy0+X3Nocmlua19idWZmZXIgKGxlbmd0aCwgdGhpcy0+ bGVuZ3RoXyk7CiAgICB9CgogIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7Cn0KCgoKCmlubGluZQpU QU9fVW5ib3VuZGVkX1N0cmluZ19TZXF1ZW5jZTo6VEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVu Y2UgKHZvaWQpCnsKfQoKaW5saW5lClRBT19VbmJvdW5kZWRfU3RyaW5nX1NlcXVlbmNlOjoKVEFP X1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIqICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2Vx dWVuY2UgKG1heGltdW0sIGxlbmd0aCwgdmFsdWUsIHJlbGVhc2UpCnsKfQoKaW5saW5lClRBT19V bmJvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTo6VEFPX1VuYm91bmRlZF9XU3RyaW5nX1NlcXVlbmNl ICh2b2lkKQp7Cn0KCmlubGluZQpUQU9fVW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U6OgpUQU9f VW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENPUkJBOjpXQ2hhciogKnZhbHVlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRf QmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVuZ3RoLCB2YWx1ZSwgcmVsZWFzZSkKewp9CgoKCgpp bmxpbmUgQ09SQkE6Ok9jdGV0ICoKVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+ OjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIHNpemUpCnsKICByZXR1cm4gbmV3IENPUkJBOjpPY3Rl dFtzaXplXTsKfQoKCmlubGluZSB2b2lkClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9j dGV0Pjo6ZnJlZWJ1ZiAoQ09SQkE6Ok9jdGV0ICpidWZmZXIpCnsKICBkZWxldGUgW10gYnVmZmVy Owp9CgoKaW5saW5lClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0Pjo6VEFPX1Vu Ym91bmRlZF9TZXF1ZW5jZSAodm9pZCkKCiAgOiBtYl8gKDApCgp7Cn0KCgppbmxpbmUKVEFPX1Vu Ym91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+OjpUQU9fVW5ib3VuZGVkX1NlcXVlbmNlIChD T1JCQTo6VUxvbmcgbWF4aW11bSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4 aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX1VuYm91bmRlZF9TZXF1 ZW5jZTxDT1JCQTo6T2N0ZXQ+OjphbGxvY2J1ZiAobWF4aW11bSkpCgogICwgbWJfICgwKQoKewp9 CgoKaW5saW5lClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0Pjo6VEFPX1VuYm91 bmRlZF9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpPY3Rl dCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5j ZSAobWF4aW11bSwgbGVuZ3RoLCBkYXRhLCByZWxlYXNlKQoKICAsIG1iXyAoMCkKCnsKfQoKCmlu bGluZSBjb25zdCBDT1JCQTo6T2N0ZXQgKgpUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJBOjpP Y3RldD46OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz dDxjb25zdCBDT1JCQTo6T2N0ZXQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwp9CgoKCgppbmxpbmUgQ09S QkE6Ok9jdGV0ICoKVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+OjpnZXRfYnVm ZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCnsKICBDT1JCQTo6T2N0ZXQgKnJlc3VsdCA9IDA7 CiAgaWYgKG9ycGhhbiA9PSAwKQogICAgewoKCiAgICAgIGlmICh0aGlzLT5idWZmZXJfID09IDAp CiAgICAgICAgewoKICAgICAgICAgIHJlc3VsdCA9IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09S QkE6Ok9jdGV0Pjo6YWxsb2NidWYgKHRoaXMtPmxlbmd0aF8pOwogICAgICAgICAgdGhpcy0+YnVm ZmVyXyA9IHJlc3VsdDsKICAgICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAgICB9CiAg ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICByZXN1bHQgPQogICAgICAgICAgICByZWludGVy cHJldF9jYXN0PENPUkJBOjpPY3RldCo+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICB9CiAgICB9 CgogIGVsc2UgaWYgKHRoaXMtPm1iXyAhPSAwKQogICAgewojIDI5MCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5pIgogICAgICByZXN1 bHQgPSBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJBOjpPY3RldD46OmFsbG9jYnVmICh0aGlz LT5sZW5ndGhfKTsKICAgICAgQUNFX09TOjptZW1jcHkgKHJlc3VsdCwgdGhpcy0+YnVmZmVyXywg dGhpcy0+bGVuZ3RoXyk7CiAgICB9CiAgZWxzZSBpZiAodGhpcy0+cmVsZWFzZV8gIT0gMCkKICAg IHsKCgogICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpPY3RldCo+ICh0aGlz LT5idWZmZXJfKTsKICAgICAgdGhpcy0+bWF4aW11bV8gPSAwOwogICAgICB0aGlzLT5sZW5ndGhf ID0gMDsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICAgIHRoaXMtPnJlbGVhc2VfID0gMDsK ICAgIH0KIyAzMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vU2VxdWVuY2UuaSIKICByZXR1cm4gcmVzdWx0Owp9CgoKaW5saW5lIENPUkJBOjpPY3Rl dCAmClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0Pjo6b3BlcmF0b3JbXSAoQ09S QkE6OlVMb25nIGkpCnsKICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19h Y2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBB Q0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5pIiwgMzI5LCAtMSwgX19h Y2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNl X19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJU OiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwg dGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgQ09SQkE6Ok9jdGV0KiB0bXAg PSByZWludGVycHJldF9jYXN0PENPUkJBOjpPY3RldCo+ICh0aGlzLT5idWZmZXJfKTsKICByZXR1 cm4gdG1wW2ldOwp9CgoKaW5saW5lIGNvbnN0IENPUkJBOjpPY3RldCAmClRBT19VbmJvdW5kZWRf U2VxdWVuY2U8Q09SQkE6Ok9jdGV0Pjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0 CnsKICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBB Q0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6 aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5pIiwgMzM4LCAtMSwgX19hY2VfZXJyb3IsIGFj ZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2Fs bGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBs aW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11 bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgQ09SQkE6Ok9jdGV0ICogY29uc3QgdG1wID0gcmVp bnRlcnByZXRfY2FzdDxDT1JCQTo6T2N0ZXQqPiAodGhpcy0+YnVmZmVyXyk7CiAgcmV0dXJuIHRt cFtpXTsKfQoKCgppbmxpbmUgQUNFX01lc3NhZ2VfQmxvY2sqClRBT19VbmJvdW5kZWRfU2VxdWVu Y2U8Q09SQkE6Ok9jdGV0Pjo6bWIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+bWJfOwp9 CgoKaW5saW5lIHZvaWQKVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+OjpyZXBs YWNlIChDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrKiBtYikKewogIHRoaXMtPl9k ZWFsbG9jYXRlX2J1ZmZlciAoKTsKICB0aGlzLT5tYl8gPSBBQ0VfTWVzc2FnZV9CbG9jazo6ZHVw bGljYXRlIChtYik7CiAgdGhpcy0+YnVmZmVyXyA9IHRoaXMtPm1iXy0+cmRfcHRyICgpOwogIHRo aXMtPm1heGltdW1fID0gbGVuZ3RoOwogIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgdGhpcy0+ cmVsZWFzZV8gPSAwOwp9CgoKCgppbmxpbmUgdm9pZApUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENP UkJBOjpPY3RldD46OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6T2N0ZXQgKmRh dGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6 OkJvb2xlYW4gcmVsZWFzZSkKewogIHRoaXMtPm1heGltdW1fID0gbWF4OwogIHRoaXMtPmxlbmd0 aF8gPSBsZW5ndGg7CgoKICBpZiAodGhpcy0+bWJfICE9IDApCiAgICB7CiAgICAgIEFDRV9NZXNz YWdlX0Jsb2NrOjpyZWxlYXNlICh0aGlzLT5tYl8pOwogICAgICB0aGlzLT5tYl8gPSAwOwogICAg fQogIGVsc2UKCiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQog ICAgewogICAgICBDT1JCQTo6T2N0ZXQqIHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6Ok9j dGV0Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJB OjpPY3RldD46OmZyZWVidWYgKHRtcCk7CiAgICB9CiAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAg dGhpcy0+cmVsZWFzZV8gPSByZWxlYXNlOwp9CiMgNjI5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDIKCgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIiAx CiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v U2VxdWVuY2VfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDEKIyAxOSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgi IDIKIyAyOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9TZXF1ZW5jZV9ULmgiCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBUQU9fVW5ib3VuZGVkX1Nl cXVlbmNlIDogcHVibGljIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZQp7CnB1YmxpYzoKCgoK ICBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlICh2b2lkKTsKCgogIFRBT19VbmJvdW5kZWRfU2VxdWVu Y2UgKENPUkJBOjpVTG9uZyBtYXgpOwoKCgoKCgogIFRBT19VbmJvdW5kZWRfU2VxdWVuY2UgKENP UkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxl bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICBUICpkYXRhLAogICAgICAgICAgICAgICAg ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKCgogIFRBT19VbmJvdW5kZWRf U2VxdWVuY2UgKGNvbnN0IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD4gJik7CgoKICBUQU9fVW5i b3VuZGVkX1NlcXVlbmNlPFQ+ICZvcGVyYXRvcj0gKGNvbnN0IFRBT19VbmJvdW5kZWRfU2VxdWVu Y2U8VD4gJik7CgoKICB+VEFPX1VuYm91bmRlZF9TZXF1ZW5jZSAodm9pZCk7CgoKCgogIFQgJm9w ZXJhdG9yW10gKENPUkJBOjpVTG9uZyk7CgoKICBjb25zdCBUICZvcGVyYXRvcltdIChDT1JCQTo6 VUxvbmcpIGNvbnN0OwoKCgoKICBzdGF0aWMgVCAqYWxsb2NidWYgKENPUkJBOjpVTG9uZyk7CgoK ICBzdGF0aWMgdm9pZCBmcmVlYnVmIChUICopOwoKCiAgdmlydHVhbCB2b2lkIF9hbGxvY2F0ZV9i dWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpOwogIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9i dWZmZXIgKHZvaWQpOwojIDEwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgVCAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xl YW4gb3JwaGFuID0gMCk7CgoKCgoKCgogIGNvbnN0IFQgKmdldF9idWZmZXIgKHZvaWQpIGNvbnN0 OwoKCgoKCgogIHZvaWQgcmVwbGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICAgICAgICAgICAgICAg IENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICBUICpkYXRhLAogICAgICAgICAg ICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDApOwp9OwojIDEzNyAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCnRlbXBs YXRlIDxjbGFzcyBULCBzaXplX3QgTUFYPgpjbGFzcyBUQU9fQm91bmRlZF9TZXF1ZW5jZSA6IHB1 YmxpYyBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlCnsKcHVibGljOgoKCiAgVEFPX0JvdW5kZWRf U2VxdWVuY2UgKHZvaWQpOwoKCiAgVEFPX0JvdW5kZWRfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBs ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIFQgKmRhdGEsCiAgICAgICAgICAgICAgICAg ICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2U9MCk7CgoKICBUQU9fQm91bmRlZF9TZXF1ZW5j ZSAoY29uc3QgVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCxNQVg+ICYpOwoKCiAgVEFPX0JvdW5kZWRf U2VxdWVuY2U8VCxNQVg+ICZvcGVyYXRvcj0gKGNvbnN0IFRBT19Cb3VuZGVkX1NlcXVlbmNlPFQs TUFYPiAmKTsKCgogIH5UQU9fQm91bmRlZF9TZXF1ZW5jZSAodm9pZCk7CgoKCiAgVCAmb3BlcmF0 b3JbXSAoQ09SQkE6OlVMb25nKTsKCgogIGNvbnN0IFQgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9u ZykgY29uc3Q7CgoKCgogIHN0YXRpYyBUICphbGxvY2J1ZiAoQ09SQkE6OlVMb25nKTsKCgogIHN0 YXRpYyB2b2lkIGZyZWVidWYgKFQgKik7CgoKCiAgdmlydHVhbCB2b2lkIF9hbGxvY2F0ZV9idWZm ZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpOwoKCiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1 ZmZlciAodm9pZCk7CiMgMjEyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKICBUICpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVh biBvcnBoYW4gPSAwKTsKCgoKCgoKCiAgY29uc3QgVCAqZ2V0X2J1ZmZlciAodm9pZCkgY29uc3Q7 CgoKCgoKCiAgdm9pZCByZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAg Q09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgIFQgKmRhdGEsCiAgICAgICAgICAg ICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMCk7Cn07CgoKCnRlbXBsYXRlPGNsYXNzIFQs Y2xhc3MgVF92YXI+IGNsYXNzIFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlOwp0ZW1wbGF0 ZTxjbGFzcyBULGNsYXNzIFRfdmFyPiBjbGFzcyBUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5j ZTsKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IGNsYXNzIFRBT19C b3VuZGVkX09iamVjdF9TZXF1ZW5jZTsKdGVtcGxhdGU8c2l6ZV90IE1BWD4gY2xhc3MgVEFPX0Jv dW5kZWRfU3RyaW5nX1NlcXVlbmNlOwojIDI2NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCnRlbXBsYXRlPGNsYXNzIFQsIGNs YXNzIFRfdmFyPgpjbGFzcyBUQU9fT2JqZWN0X01hbmFnZXIKewogIGZyaWVuZCBjbGFzcyBUQU9f VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPjsKcHVibGljOgojIDI4MyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgi CiAgVEFPX09iamVjdF9NYW5hZ2VyIChjb25zdCBUQU9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4g JnJocyk7CgoKCgoKCiAgVEFPX09iamVjdF9NYW5hZ2VyIChUICoqLCBDT1JCQTo6Qm9vbGVhbiBy ZWxlYXNlKTsKCgogIH5UQU9fT2JqZWN0X01hbmFnZXIgKHZvaWQpOwoKCgoKCgoKICBUQU9fT2Jq ZWN0X01hbmFnZXI8VCxUX3Zhcj4gJm9wZXJhdG9yPSAoY29uc3QgVEFPX09iamVjdF9NYW5hZ2Vy PFQsVF92YXI+ICZyaHMpOwoKCiAgVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+ICZvcGVyYXRv cj0gKFQgKik7CgoKICBUQU9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4gJm9wZXJhdG9yPSAoY29u c3QgVF92YXIgJik7CgoKICBUICogb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgoKICBvcGVyYXRv ciBjb25zdCBUICooKSBjb25zdDsKCgogIG9wZXJhdG9yIFQgKiYoKTsKCgoKICBvcGVyYXRvciBj b25zdCBUX3ZhcigpIGNvbnN0OwoKCiAgVCAqaW4gKHZvaWQpIGNvbnN0OwoKCiAgVCAqJmlub3V0 ICh2b2lkKTsKCgogIFQgKiZvdXQgKHZvaWQpOwoKCiAgVCAqX3JldG4gKHZvaWQpOwoKcHJpdmF0 ZToKCgogIFQgKipwdHJfOwoKCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZV87Cn07CgoKCgoKCgp0 ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KY2xhc3MgVEFPX1BzZXVkb19PYmplY3RfTWFu YWdlcgp7CiAgZnJpZW5kIGNsYXNzIFRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92 YXI+OwpwdWJsaWM6CiMgMzY2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2VyIChj b25zdCBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+ICZyaHMpOwoKCgoKCgogIFRB T19Qc2V1ZG9fT2JqZWN0X01hbmFnZXIgKFQgKiosIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpOwoK CiAgflRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXIgKHZvaWQpOwoKCgoKCgoKICBUQU9fUHNldWRv X09iamVjdF9NYW5hZ2VyPFQsVF92YXI+ICZvcGVyYXRvcj0gKGNvbnN0IFRBT19Qc2V1ZG9fT2Jq ZWN0X01hbmFnZXI8VCxUX3Zhcj4gJnJocyk7CgoKICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2Vy PFQsVF92YXI+ICZvcGVyYXRvcj0gKFQgKik7CgoKICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2Vy PFQsVF92YXI+ICZvcGVyYXRvcj0gKGNvbnN0IFRfdmFyICYpOwoKCiAgVCAqIG9wZXJhdG9yLT4g KHZvaWQpIGNvbnN0OwoKCiAgb3BlcmF0b3IgY29uc3QgVCAqKCkgY29uc3Q7CgoKICBvcGVyYXRv ciBUIComKCk7CgoKICBUICppbiAodm9pZCkgY29uc3Q7CgoKICBUIComaW5vdXQgKHZvaWQpOwoK CiAgVCAqJm91dCAodm9pZCk7CgoKICBUICpfcmV0biAodm9pZCk7Cgpwcml2YXRlOgoKCiAgVCAq KnB0cl87CgoKICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlXzsKfTsKIyA0MzMgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgp0ZW1w bGF0ZTxjbGFzcyBULGNsYXNzIFRfdmFyPgpjbGFzcyBUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1 ZW5jZSA6IHB1YmxpYyBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UKewoKCgoKCgoKcHVibGlj OgojIDQ1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9TZXF1ZW5jZV9ULmgiCiAgVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2UgKHZvaWQpOwoj IDQ2OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9T ZXF1ZW5jZV9ULmgiCiAgVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2UgKENPUkJBOjpVTG9u ZyBtYXgpOwojIDQ4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2UgKENP UkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC QTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUKiAqZGF0 YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFz ZT0wKTsKIyA0OTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vU2VxdWVuY2VfVC5oIgogIFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlKGNvbnN0 IFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+ICYpOwoKCgogIH5UQU9fVW5i b3VuZGVkX09iamVjdF9TZXF1ZW5jZSAodm9pZCk7CiMgNTIyICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKICBUQU9fVW5ib3Vu ZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPiAmb3BlcmF0b3I9IChjb25zdCBUQU9fVW5ib3Vu ZGVkX09iamVjdF9TZXF1ZW5jZSA8VCxUX3Zhcj4gJik7CgoKICBUQU9fT2JqZWN0X01hbmFnZXI8 VCxUX3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpIGNvbnN0OwojIDUzOCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9U LmgiCiAgc3RhdGljIFQgKiphbGxvY2J1ZiAoQ09SQkE6OlVMb25nKTsKIyA1NDcgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgog IHN0YXRpYyB2b2lkIGZyZWVidWYgKFQgKiopOwoKCgoKICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRl X2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRl X2J1ZmZlciAodm9pZCk7CiAgdmlydHVhbCB2b2lkIF9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxv bmcgbmV3X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9u ZyBvbGRfbGVuZ3RoKTsKICB2aXJ0dWFsIHZvaWQgX2Rvd25jYXN0ICh2b2lkKiB0YXJnZXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfT2JqZWN0KiBzcmMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKSk7CiAgdmlydHVhbCBDT1JCQV9PYmplY3QqIF91cGNhc3QgKHZvaWQqIHNyYykgY29u c3Q7Cn07CiMgNTcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL1NlcXVlbmNlX1QuaCIKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVf dCBNQVg+CmNsYXNzIFRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSA6IHB1YmxpYyBUQU9fQm91 bmRlZF9CYXNlX1NlcXVlbmNlCnsKcHVibGljOgojIDU4NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgVEFPX0JvdW5kZWRf T2JqZWN0X1NlcXVlbmNlICh2b2lkKTsKCgogIFRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAo Q09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQqICp2 YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVh c2U9MCk7CgoKICBUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2UgKGNvbnN0IFRBT19Cb3VuZGVk X09iamVjdF9TZXF1ZW5jZTxULFRfdmFyLE1BWD4gJik7CgoKICB+VEFPX0JvdW5kZWRfT2JqZWN0 X1NlcXVlbmNlICh2b2lkKTsKCgogIFRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAmb3BlcmF0 b3I9IChjb25zdCBUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxUX3ZhcixNQVg+ICYpOwoK CiAgVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+IG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBz bG90KSBjb25zdDsKCgogIHN0YXRpYyBUICoqYWxsb2NidWYgKENPUkJBOjpVTG9uZyBsZW5ndGgp OwoKCgogIHN0YXRpYyB2b2lkIGZyZWVidWYgKFQgKipidWZmZXIpOwoKCgoKICB2aXJ0dWFsIHZv aWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgdmlydHVhbCB2b2lk IF9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7CiAgdmlydHVhbCB2b2lkIF9zaHJpbmtfYnVmZmVy IChDT1JCQTo6VUxvbmcgbmV3X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENPUkJBOjpVTG9uZyBvbGRfbGVuZ3RoKTsKICB2aXJ0dWFsIHZvaWQgX2Rvd25jYXN0ICh2b2lk KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfT2JqZWN0KiBzcmMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVm YXVsdF9lbnZpcm9ubWVudCAoKSk7CiAgdmlydHVhbCBDT1JCQV9PYmplY3QqIF91cGNhc3QgKHZv aWQqIHNyYykgY29uc3Q7Cn07CiMgNjQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBU X3Zhcj4KY2xhc3MgVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgOiBwdWJsaWMgVEFPX1Vu Ym91bmRlZF9CYXNlX1NlcXVlbmNlCnsKcHVibGljOgoKCgogIFRBT19VbmJvdW5kZWRfUHNldWRv X1NlcXVlbmNlICh2b2lkKTsKCgogIFRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlIChDT1JC QTo6VUxvbmcgbWF4KTsKCgogIFRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlIChDT1JCQTo6 VUxvbmcgbWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVM b25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCogKmRhdGEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2U9MCk7 CgoKICBUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZShjb25zdCBUQU9fVW5ib3VuZGVkX1Bz ZXVkb19TZXF1ZW5jZTxULFRfdmFyPiAmKTsKCgogIH5UQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1 ZW5jZSAodm9pZCk7CgoKCgoKCiAgVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3Zh cj4gJm9wZXJhdG9yPSAoY29uc3QgVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgPFQsVF92 YXI+ICYpOwoKCiAgVEFPX1BzZXVkb19PYmplY3RfTWFuYWdlcjxULFRfdmFyPiBvcGVyYXRvcltd IChDT1JCQTo6VUxvbmcgc2xvdCkgY29uc3Q7CgoKCiAgc3RhdGljIFQgKiphbGxvY2J1ZiAoQ09S QkE6OlVMb25nKTsKCgogIHN0YXRpYyB2b2lkIGZyZWVidWYgKFQgKiopOwoKCiAgdmlydHVhbCB2 b2lkIF9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpOwogIHZpcnR1YWwgdm9p ZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwogIHZpcnR1YWwgdm9pZCBfc2hyaW5rX2J1ZmZl ciAoQ09SQkE6OlVMb25nIG5ld19sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDT1JCQTo6VUxvbmcgb2xkX2xlbmd0aCk7Cn07CiMgNjk3ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKdGVtcGxhdGU8Y2xh c3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+CmNsYXNzIFRBT19Cb3VuZGVkX1BzZXVkb19T ZXF1ZW5jZSA6IHB1YmxpYyBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlCnsKcHVibGljOgoKCgog IFRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZSAodm9pZCk7CgoKICBUQU9fQm91bmRlZF9Qc2V1 ZG9fU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUKiAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6 Qm9vbGVhbiByZWxlYXNlPTApOwoKCiAgVEFPX0JvdW5kZWRfUHNldWRvX1NlcXVlbmNlIChjb25z dCBUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3ZhcixNQVg+ICYpOwoKCiAgflRBT19C b3VuZGVkX1BzZXVkb19TZXF1ZW5jZSAodm9pZCk7CgoKICBUQU9fQm91bmRlZF9Qc2V1ZG9fU2Vx dWVuY2UgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0JvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92 YXIsTUFYPiAmKTsKCgogIFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4gb3BlcmF0 b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpIGNvbnN0OwoKCiAgc3RhdGljIFQgKiphbGxvY2J1ZiAo Q09SQkE6OlVMb25nIGxlbmd0aCk7CgoKCiAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoVCAqKmJ1ZmZl cik7CgoKICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0 aCk7CiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7CiAgdmlydHVhbCB2 b2lkIF9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxvbmcgbmV3X2xlbmd0aCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvbGRfbGVuZ3RoKTsKfTsKIyA3NTEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2Vf VC5oIgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KY2xhc3MgVEFPX1VuYm91bmRlZF9B cnJheV9TZXF1ZW5jZSA6IHB1YmxpYyBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UKewpwdWJs aWM6CgoKCiAgVEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZSAodm9pZCk7CgoKICBUQU9fVW5i b3VuZGVkX0FycmF5X1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4KTsKCgogIFRBT19VbmJvdW5k ZWRfQXJyYXlfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC QTo6Qm9vbGVhbiByZWxlYXNlPTApOwoKCiAgVEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZShj b25zdCBUQU9fVW5ib3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyPiAmKTsKCgogIH5UQU9f VW5ib3VuZGVkX0FycmF5X1NlcXVlbmNlICh2b2lkKTsKCgoKCgoKICBUQU9fVW5ib3VuZGVkX0Fy cmF5X1NlcXVlbmNlPFQsIFRfdmFyPiAmb3BlcmF0b3I9ICgKICAgICAgY29uc3QgVEFPX1VuYm91 bmRlZF9BcnJheV9TZXF1ZW5jZSA8VCwgVF92YXI+ICYKICAgICk7CgoKCiAgVCAmb3BlcmF0b3Jb XSAoQ09SQkE6OlVMb25nKTsKCgogIGNvbnN0IFQgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9uZykg Y29uc3Q7CgoKCiAgc3RhdGljIFQgKmFsbG9jYnVmIChDT1JCQTo6VUxvbmcpOwoKCiAgc3RhdGlj IHZvaWQgZnJlZWJ1ZiAoVCAqKTsKCgoKICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAo Q09SQkE6OlVMb25nIGxlbmd0aCk7CgoKICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVy ICh2b2lkKTsKIyA4MjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vU2VxdWVuY2VfVC5oIgogIFQgKmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFuIG9y cGhhbiA9IDApOwoKCgoKCgoKICBjb25zdCBUICpnZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKCgoK CgoKICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgICBDT1JC QTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgVCAqZGF0YSwKICAgICAgICAgICAgICAg IENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKfTsKIyA4NTggIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgp0ZW1wbGF0ZTxj bGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1BWD4KY2xhc3MgVEFPX0JvdW5kZWRfQXJyYXlf U2VxdWVuY2UgOiBwdWJsaWMgVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZQp7CnB1YmxpYzoKCgoK ICBUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZSAodm9pZCk7CgoKICBUQU9fQm91bmRlZF9BcnJh eV9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVCAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29s ZWFuIHJlbGVhc2U9MCk7CgoKICBUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZSAoY29uc3QgVEFP X0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIsIE1BWD4gJik7CgoKICB+VEFPX0JvdW5k ZWRfQXJyYXlfU2VxdWVuY2UgKHZvaWQpOwoKCiAgVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2Ug Jm9wZXJhdG9yPSAoY29uc3QgVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIsIE1B WD4gJik7CgoKCiAgVCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nKTsKCgogIGNvbnN0IFQgJm9w ZXJhdG9yW10gKENPUkJBOjpVTG9uZykgY29uc3Q7CgoKICBzdGF0aWMgVCAqYWxsb2NidWYgKENP UkJBOjpVTG9uZyBsZW5ndGgpOwoKCgogIHN0YXRpYyB2b2lkIGZyZWVidWYgKFQgKmJ1ZmZlcik7 CgoKCiAgdmlydHVhbCB2b2lkIF9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgp OwoKCiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7CiMgOTI1ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1Qu aCIKICBUICpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKCgoKCgoKCiAg Y29uc3QgVCAqZ2V0X2J1ZmZlciAodm9pZCkgY29uc3Q7CgoKCgoKCiAgdm9pZCByZXBsYWNlIChD T1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAg ICAgICAgICAgICAgIFQgKmRhdGEsCiAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxl YXNlID0gMCk7Cn07CiMgOTU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKdGVtcGxhdGU8c2l6ZV90IE1BWD4KY2xhc3MgVEFP X0JvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIDogcHVibGljIFRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVu Y2UKewpwdWJsaWM6CiMgOTcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKICBUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2Ug KHZvaWQpOwojIDk4NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgVEFPX0JvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIChDT1JC QTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogKnZh bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFz ZSA9IDApOwojIDk5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgVEFPX0JvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIChjb25z dCBUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPiAmKTsKIyAxMDA2ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKICBU QU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0JvdW5kZWRf U3RyaW5nX1NlcXVlbmNlPE1BWD4gJik7CgoKCgoKCiAgflRBT19Cb3VuZGVkX1N0cmluZ19TZXF1 ZW5jZSAodm9pZCk7CgoKICBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlciBvcGVyYXRvcltdIChD T1JCQTo6VUxvbmcgc2xvdCkgY29uc3Q7CiMgMTAzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgc3RhdGljIGNoYXIgKiph bGxvY2J1ZiAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiMgMTA0MCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgc3RhdGljIHZv aWQgZnJlZWJ1ZiAoY2hhciAqKmJ1ZmZlcik7CgoKICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1 ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1 ZmZlciAodm9pZCk7CiAgdmlydHVhbCB2b2lkIF9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxvbmcg bmV3X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBv bGRfbGVuZ3RoKTsKfTsKIyAxMDYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKdGVtcGxhdGU8c2l6ZV90IE1BWD4KY2xhc3Mg VEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZSA6IHB1YmxpYyBUQU9fQm91bmRlZF9CYXNlX1Nl cXVlbmNlCnsKcHVibGljOgojIDEwNzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgogIFRBT19Cb3VuZGVkX1dTdHJpbmdfU2Vx dWVuY2UgKHZvaWQpOwojIDEwODkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgogIFRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVu Y2UgKENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q09SQkE6OldDaGFyKiAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S QkE6OkJvb2xlYW4gcmVsZWFzZSA9IDApOwojIDExMDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgogIFRBT19Cb3VuZGVkX1dT dHJpbmdfU2VxdWVuY2UgKGNvbnN0IFRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8TUFYPiAm KTsKIyAxMTA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL1NlcXVlbmNlX1QuaCIKICBUQU9fQm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlICZvcGVyYXRv cj0gKGNvbnN0IFRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8TUFYPiAmKTsKCgoKCgoKICB+ VEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZSAodm9pZCk7CgoKICBUQU9fU2VxRWxlbV9XU3Ry aW5nX01hbmFnZXIgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpIGNvbnN0OwojIDExMzMg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVu Y2VfVC5oIgogIHN0YXRpYyBDT1JCQTo6V0NoYXIgKiphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIGxl bmd0aCk7CiMgMTE0MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoQ09SQkE6OldDaGFy ICoqYnVmZmVyKTsKCgogIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxv bmcgbGVuZ3RoKTsKICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKTsKICB2 aXJ0dWFsIHZvaWQgX3Nocmlua19idWZmZXIgKENPUkJBOjpVTG9uZyBuZXdfbGVuZ3RoLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9sZF9sZW5ndGgpOwp9OwoK CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L1NlcXVlbmNlX1QuaSIgMQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBUICoKVEFP X1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQp7CiAg cmV0dXJuIG5ldyBUW3NpemVdOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKVEFP X1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6ZnJlZWJ1ZiAoVCAqYnVmZmVyKQp7CiAgZGVsZXRlIFtd IGJ1ZmZlcjsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpUQU9fVW5ib3VuZGVkX1NlcXVl bmNlPFQ+OjpUQU9fVW5ib3VuZGVkX1NlcXVlbmNlICh2b2lkKQp7Cn0KCnRlbXBsYXRlIDxjbGFz cyBUPiBpbmxpbmUKVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6VEFPX1VuYm91bmRlZF9TZXF1 ZW5jZSAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVu Y2UgKG1heGltdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19VbmJvdW5k ZWRfU2VxdWVuY2U8VD46OmFsbG9jYnVmIChtYXhpbXVtKSkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4gaW5saW5lClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD46OlRBT19VbmJvdW5kZWRfU2VxdWVu Y2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICpkYXRhLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxl YXNlKQogIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBsZW5ndGgsIGRh dGEsIHJlbGVhc2UpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBUICoKVEFPX1VuYm91 bmRlZF9TZXF1ZW5jZTxUPjo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQp7CiAg VCAqcmVzdWx0ID0gMDsKICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+ YnVmZmVyXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGlmICh0aGlzLT5sZW5ndGhfID4gMCkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIHJlc3VsdCA9IFRBT19VbmJvdW5kZWRfU2VxdWVu Y2U8VD46OmFsbG9jYnVmICh0aGlzLT5sZW5ndGhfKTsKICAgICAgICAgICAgICB0aGlzLT5idWZm ZXJfID0gcmVzdWx0OwogICAgICAgICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHJlc3VsdCA9CiAg ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+ICh0aGlzLT5idWZmZXJfKTsKCiAgICAgICAg fQogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxUKj4g KHRoaXMtPmJ1ZmZlcl8pOwoKCiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAwKQogICAgICAg IHsKCgogICAgICAgICAgdGhpcy0+bWF4aW11bV8gPSAwOwogICAgICAgICAgdGhpcy0+bGVuZ3Ro XyA9IDA7CiAgICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICAgIHRoaXMtPnJlbGVh c2VfID0gMDsKICAgICAgICB9CiAgICB9CgogIHJldHVybiByZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj bGFzcyBUPiBpbmxpbmUgY29uc3QgVCAqClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD46OmdldF9i dWZmZXIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUICo+ ICh0aGlzLT5idWZmZXJfKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkClRBT19V bmJvdW5kZWRfU2VxdWVuY2U8VD46OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCnsKICB0aGlzLT5tYXhpbXVt XyA9IG1heDsKICB0aGlzLT5sZW5ndGhfID0gbGVuZ3RoOwogIGlmICh0aGlzLT5idWZmZXJfICYm IHRoaXMtPnJlbGVhc2VfID09IDEpCiAgICB7CiAgICAgIFQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nh c3Q8VCo+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6 ZnJlZWJ1ZiAodG1wKTsKICAgIH0KICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICB0aGlzLT5yZWxl YXNlXyA9IHJlbGVhc2U7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6ZV90IE1BWD4gaW5s aW5lIFQgKgpUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+OjphbGxvY2J1ZiAoQ09SQkE6OlVM b25nKQp7CiAgcmV0dXJuIG5ldyBUW01BWF07Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBzaXplX3Qg TUFYPiBpbmxpbmUgdm9pZApUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+OjpmcmVlYnVmIChU ICpidWZmZXIpCnsKICBkZWxldGUgW10gYnVmZmVyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6 ZV90IE1BWD4gaW5saW5lClRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD46OlRBT19Cb3VuZGVk X1NlcXVlbmNlICh2b2lkKQp7CiAgdGhpcy0+bWF4aW11bV8gPSBNQVg7Cn0KCnRlbXBsYXRlIDxj bGFzcyBULCBzaXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFYPjo6 VEFPX0JvdW5kZWRfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICpkYXRhLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4g cmVsZWFzZSkKICA6IFRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKE1BWCwgbGVuZ3RoLCBkYXRh LCByZWxlYXNlKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBzaXplX3QgTUFYPiBpbmxpbmUgVCAq ClRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD46OmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFu IG9ycGhhbikKewogIFQgKnJlc3VsdCA9IDA7CiAgaWYgKG9ycGhhbiA9PSAwKQogICAgewoKCiAg ICAgIGlmICh0aGlzLT5idWZmZXJfID09IDApCiAgICAgICAgewogICAgICAgICAgcmVzdWx0ID0g VEFPX0JvdW5kZWRfU2VxdWVuY2U8VCxNQVg+OjphbGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwog ICAgICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgICAgIHRoaXMtPnJlbGVhc2Vf ID0gMTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICByZXN1bHQgPQog ICAgICAgICAgICByZWludGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAg fQogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVhc2VfICE9IDApCiAgICAg ICAgewoKCiAgICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVm ZmVyXyk7CiAgICAgICAgICB0aGlzLT5tYXhpbXVtXyA9IDA7CiAgICAgICAgICB0aGlzLT5sZW5n dGhfID0gMDsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgICAgdGhpcy0+cmVs ZWFzZV8gPSAwOwogICAgICAgIH0KICAgIH0KICByZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVCwgc2l6ZV90IE1BWD4gaW5saW5lIGNvbnN0IFQgKgpUQU9fQm91bmRlZF9TZXF1ZW5j ZTxULCBNQVg+OjpnZXRfYnVmZmVyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHJlaW50ZXJwcmV0 X2Nhc3Q8Y29uc3QgVCAqPiAodGhpcy0+YnVmZmVyXyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBz aXplX3QgTUFYPiBpbmxpbmUgdm9pZApUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+OjpyZXBs YWNlIChDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD T1JCQTo6Qm9vbGVhbiByZWxlYXNlKQp7CiAgdGhpcy0+bWF4aW11bV8gPSBtYXg7CiAgdGhpcy0+ bGVuZ3RoXyA9IGxlbmd0aDsKICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9 PSAxKQogICAgewogICAgICBUKiB0bXAgPSByZWludGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVm ZmVyXyk7CiAgICAgIFRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD46OmZyZWVidWYgKHRtcCk7 CiAgICB9CiAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAgdGhpcy0+cmVsZWFzZV8gPSByZWxlYXNl Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6ZV90IE1BWD4gaW5saW5lIFQgJgpUQU9fQm91bmRl ZF9TZXF1ZW5jZTxULCBNQVg+OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkKewogIGRvIHsg aWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFz dF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAo KTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1NlcXVlbmNlX1QuaSIsIDE5OCwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJl c3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgp KTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBh c3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEp OyB9IH0gd2hpbGUgKDApOwogIFQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+ICh0aGlzLT5i dWZmZXJfKTsKICByZXR1cm4gdG1wW2ldOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6ZV90IE1B WD4gaW5saW5lIGNvbnN0IFQgJgpUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+OjpvcGVyYXRv cltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3QKewogIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11 bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19N c2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1Qu aSIsIDIwNiwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQgKCksIGFjZV9fXy0+bXNn X29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNlX19fLT5sb2cgKExNX0VS Uk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRpb24gZmFpbGVkIGZvciAn JXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEpOyB9IH0gd2hpbGUgKDApOwogIGNv bnN0IFQqIHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+ICh0aGlzLT5idWZmZXJfKTsK ICByZXR1cm4gdG1wW2ldOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBp bmxpbmUKVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+Ojp+VEFPX09iamVjdF9NYW5hZ2VyICh2 b2lkKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lClRBT19PYmpl Y3RfTWFuYWdlcjxULFRfdmFyPjo6VEFPX09iamVjdF9NYW5hZ2VyIChjb25zdCBUQU9fT2JqZWN0 X01hbmFnZXI8VCxUX3Zhcj4gJnJocykKICA6IHB0cl8gKHJocy5wdHJfKSwKICAgIHJlbGVhc2Vf IChyaHMucmVsZWFzZV8pCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxp bmUKVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+OjpUQU9fT2JqZWN0X01hbmFnZXIoVCoqIGJ1 ZmZlciwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IHB0cl8gKGJ1ZmZlciksCiAgICByZWxl YXNlXyAocmVsZWFzZSkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGlu ZSBUICoKVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+OjpvcGVyYXRvci0+ICh2b2lkKSBjb25z dAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92 YXI+IGlubGluZQpUQU9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46Om9wZXJhdG9yIGNvbnN0IFRf dmFyICgpIGNvbnN0CnsKICByZXR1cm4gVF92YXI6OmR1cGxpY2F0ZSAoKnRoaXMtPnB0cl8pOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZQpUQU9fT2JqZWN0X01hbmFn ZXI8VCxUX3Zhcj46Om9wZXJhdG9yIGNvbnN0IFQqICgpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMt PnB0cl87Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lClRBT19PYmpl Y3RfTWFuYWdlcjxULFRfdmFyPjo6b3BlcmF0b3IgVCogJigpCnsKICByZXR1cm4gKnRoaXMtPnB0 cl87Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lIFQgKgpUQU9fT2Jq ZWN0X01hbmFnZXI8VCxUX3Zhcj46OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w dHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZSBUIComClRBT19P YmplY3RfTWFuYWdlcjxULFRfdmFyPjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0 cl87Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZQpUQU9fUHNl dWRvX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+Ojp+VEFPX1BzZXVkb19PYmplY3RfTWFuYWdlciAo dm9pZCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZQpUQU9fUHNl dWRvX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+OjoKICAgIFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFn ZXIgKGNvbnN0IFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4gJnJocykKICA6IHB0 cl8gKHJocy5wdHJfKSwKICAgIHJlbGVhc2VfIChyaHMucmVsZWFzZV8pCnsKfQoKdGVtcGxhdGUg PGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxpbmUKVEFPX1BzZXVkb19PYmplY3RfTWFuYWdlcjxU LFRfdmFyPjo6CiAgICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2VyKFQqKiBidWZmZXIsIENPUkJB OjpCb29sZWFuIHJlbGVhc2UpCiAgOiBwdHJfIChidWZmZXIpLAogICAgcmVsZWFzZV8gKHJlbGVh c2UpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxpbmUgVCAqClRBT19Q c2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsK ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4g aW5saW5lClRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46Om9wZXJhdG9yIGNvbnN0 IFQqICgpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCnRlbXBsYXRlIDxjbGFzcyBU LCBjbGFzcyBUX3Zhcj4gaW5saW5lClRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46 Om9wZXJhdG9yIFQqICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgVCwgY2xhc3MgVF92YXI+IGlubGluZSBUICoKVEFPX1BzZXVkb19PYmplY3RfTWFuYWdlcjxU LFRfdmFyPjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCnRlbXBs YXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lIFQgKiYKVEFPX1BzZXVkb19PYmplY3Rf TWFuYWdlcjxULFRfdmFyPjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K CnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lIFQgKiYKVEFPX1BzZXVkb19P YmplY3RfTWFuYWdlcjxULFRfdmFyPjo6b3V0ICh2b2lkKQp7CiAgQ09SQkE6OnJlbGVhc2UgKCp0 aGlzLT5wdHJfKTsKICAqdGhpcy0+cHRyXyA9IFQ6Ol9uaWwgKCk7CiAgcmV0dXJuICp0aGlzLT5w dHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZSBUICoKVEFPX1Bz ZXVkb19PYmplY3RfTWFuYWdlcjxULFRfdmFyPjo6X3JldG4gKHZvaWQpCnsKICBUICp0ZW1wID0g KnRoaXMtPnB0cl87CiAgKnRoaXMtPnB0cl8gPSBUOjpfbmlsICgpOwogIHJldHVybiB0ZW1wOwp9 CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lClRBT19VbmJvdW5k ZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+OjpUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5j ZSAodm9pZCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZQpUQU9f VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPjo6ClRBT19VbmJvdW5kZWRfT2JqZWN0 X1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUKiAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVh biByZWxlYXNlKQogIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBsZW5n dGgsIHZhbHVlLCByZWxlYXNlKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4g aW5saW5lIFRBT19PYmplY3RfTWFuYWdlcjxULFRfdmFyPgpUQU9fVW5ib3VuZGVkX09iamVjdF9T ZXF1ZW5jZTxULFRfdmFyPjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpIGNvbnN0CnsK ICBkbyB7IGlmKCEoc2xvdCA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBB Q0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6 aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmkiLCAzNjQsIC0xLCBfX2FjZV9lcnJvciwg YWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19j YWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4s IGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgInNsb3QgPCB0aGlzLT5t YXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICBUICoqIGNvbnN0IHRtcCA9IHJlaW50ZXJw cmV0X2Nhc3Q8VCAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIHJldHVybiBUQU9fT2JqZWN0X01hbmFn ZXI8VCxUX3Zhcj4gKHRtcCArIHNsb3QsIHRoaXMtPnJlbGVhc2VfKTsKfQoKCgoKCnRlbXBsYXRl PGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfT2Jq ZWN0X1NlcXVlbmNlPFQsVF92YXIsTUFYPjo6flRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAo dm9pZCkKewogIHRoaXMtPl9kZWFsbG9jYXRlX2J1ZmZlciAoKTsKfQoKdGVtcGxhdGUgPGNsYXNz IFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfT2JqZWN0X1Nl cXVlbmNlPFQsVF92YXIsTUFYPjo6ClRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAoQ09SQkE6 OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICoqdmFsdWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRB T19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKE1BWCwgbGVuZ3RoLCB2YWx1ZSwgcmVsZWFzZSkKewp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IGlubGluZSBUQU9f T2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4KVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsIFRf dmFyLE1BWD46Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBzbG90KSBjb25zdAp7CiAgZG8geyBp ZighKHNsb3QgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjps YXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNl ICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5pIiwgMzkxLCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+ cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sg KCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVs IGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJzbG90IDwgdGhpcy0+bWF4aW11bV8i LCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgVCAqKmNvbnN0IHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8 VCAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIHJldHVybiBUQU9fT2JqZWN0X01hbmFnZXI8VCxUX3Zh cj4gKHRtcCArIHNsb3QsIHRoaXMtPnJlbGVhc2VfKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg VCwgY2xhc3MgVF92YXI+IGlubGluZQpUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULFRf dmFyPjo6VEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgKHZvaWQpCnsKfQoKdGVtcGxhdGUg PGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxpbmUKVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVu Y2U8VCxUX3Zhcj46OgpUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZSAoQ09SQkE6OlVMb25n IG1heGltdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVu Z3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCogKnZhbHVlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19VbmJv dW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVuZ3RoLCB2YWx1ZSwgcmVsZWFzZSkKewp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZSBUQU9fUHNldWRvX09iamVj dF9NYW5hZ2VyPFQsVF92YXI+ClRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+ OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkgY29uc3QKewogIGRvIHsgaWYoIShzbG90 IDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJv ciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNl X19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL1NlcXVlbmNlX1QuaSIsIDQxOSwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQg KCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNl X19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRp b24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAic2xvdCA8IHRoaXMtPm1heGltdW1fIiwgLTEpOyB9 IH0gd2hpbGUgKDApOwogIFQgKiogY29uc3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxUICoqPiAo dGhpcy0+YnVmZmVyXyk7CiAgcmV0dXJuIFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zh cj4gKHRtcCArIHNsb3QsIHRoaXMtPnJlbGVhc2VfKTsKfQoKCgoKCnRlbXBsYXRlPGNsYXNzIFQs IGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfUHNldWRvX1NlcXVl bmNlPFQsVF92YXIsTUFYPjo6flRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZSAodm9pZCkKewog IHRoaXMtPl9kZWFsbG9jYXRlX2J1ZmZlciAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz IFRfdmFyLCBzaXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQs VF92YXIsTUFYPjo6ClRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIGxl bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICoqdmFsdWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19Cb3VuZGVk X0Jhc2VfU2VxdWVuY2UgKE1BWCwgbGVuZ3RoLCB2YWx1ZSwgcmVsZWFzZSkKewp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IGlubGluZSBUQU9fUHNldWRvX09i amVjdF9NYW5hZ2VyPFQsVF92YXI+ClRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULCBUX3Zh cixNQVg+OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkgY29uc3QKewogIGRvIHsgaWYo IShzbG90IDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFz dF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAo KTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1NlcXVlbmNlX1QuaSIsIDQ0NiwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJl c3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgp KTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBh c3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAic2xvdCA8IHRoaXMtPm1heGltdW1fIiwg LTEpOyB9IH0gd2hpbGUgKDApOwogIFQgKipjb25zdCB0bXAgPSByZWludGVycHJldF9jYXN0PFQg Kio+ICh0aGlzLT5idWZmZXJfKTsKCiAgcmV0dXJuIFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8 VCxUX3Zhcj4gKHRtcCArIHNsb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoaXMtPnJlbGVhc2VfKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFz cyBUX3Zhcj4gaW5saW5lIHZvaWQKVEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zh cj46OmZyZWVidWYgKFQgKmJ1ZmZlcikKewogIGlmIChidWZmZXIgPT0gMCkKICAgIHJldHVybjsK CiAgZGVsZXRlIFtdIGJ1ZmZlcjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4g aW5saW5lClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjpUQU9fVW5ib3Vu ZGVkX0FycmF5X1NlcXVlbmNlICh2b2lkKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBU X3Zhcj4gaW5saW5lClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjoKVEFP X1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgOiBUQU9f VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjphbGxvY2J1 ZiAobWF4aW11bSkpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxpbmUK VEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46OgpUQU9fVW5ib3VuZGVkX0Fy cmF5X1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVCAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFu IHJlbGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0 aCwgdmFsdWUsIHJlbGVhc2UpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBp bmxpbmUgVCAmClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjpvcGVyYXRv cltdIChDT1JCQTo6VUxvbmcgaSkKewogIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7 IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFj ZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaSIsIDQ5 MywgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJl YW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAi QUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVh XG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEpOyB9IH0gd2hpbGUgKDApOwoKCgoKICByZXR1 cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8VCo+ICh0aGlzLT5idWZmZXJfKSlbaV07Cgp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZSBjb25zdCBUICYKVEFPX1VuYm91bmRlZF9B cnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25z dAp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0g QUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6 Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5pIiwgNTA1LCAtMSwgX19hY2VfZXJyb3Is IGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2df Y2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVO LCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4 aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CgoKCgogIHJldHVybiAocmVpbnRlcnByZXRfY2Fz dDxjb25zdCBUKj4gKHRoaXMtPmJ1ZmZlcl8pKVtpXTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBULCBj bGFzcyBUX3Zhcj4gaW5saW5lIFQgKgpUQU9fVW5ib3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRf dmFyPjo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQp7CiAgVCAqcmVzdWx0ID0g MDsKICBpZiAob3JwaGFuID09IDApCiAgICB7CgoKICAgICAgaWYgKHRoaXMtPmJ1ZmZlcl8gPT0g MCkKICAgICAgICB7CiAgICAgICAgICBpZiAodGhpcy0+bGVuZ3RoXyA+IDApCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICByZXN1bHQgPQogICAgICAgICAgICAgICAgVEFPX1VuYm91bmRlZF9B cnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46OmFsbG9jYnVmICgKICAgICAgICAgICAgICAgICAgICB0 aGlzLT5sZW5ndGhfCiAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgdGhpcy0+YnVm ZmVyXyA9IHJlc3VsdDsKICAgICAgICAgICAgICB0aGlzLT5yZWxlYXNlXyA9IDE7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICByZXN1bHQgPQog ICAgICAgICAgICByZWludGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVmZmVyXyk7CgogICAgICAg IH0KICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAwKQogICAg ICAgIHsKCgogICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxUKj4gKHRoaXMtPmJ1 ZmZlcl8pOwoKICAgICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAgICAgIHRoaXMtPmxl bmd0aF8gPSAwOwogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICAgICAgICB0aGlzLT5y ZWxlYXNlXyA9IDA7CiAgICAgICAgfQogICAgfQogIHJldHVybiByZXN1bHQ7Cn0KCnRlbXBsYXRl IDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lIGNvbnN0IFQgKgpUQU9fVW5ib3VuZGVkX0Fy cmF5X1NlcXVlbmNlPFQsIFRfdmFyPjo6Z2V0X2J1ZmZlciAodm9pZCkgY29uc3QKewogIHJldHVy biByZWludGVycHJldF9jYXN0PGNvbnN0IFQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKfQoKdGVtcGxh dGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxpbmUgdm9pZApUQU9fVW5ib3VuZGVkX0FycmF5 X1NlcXVlbmNlPFQsIFRfdmFyPjo6cmVwbGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxl bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKewogIHRoaXMtPm1heGltdW1fID0gbWF4OwogIHRo aXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgaWYgKHRoaXMtPmJ1ZmZlcl8gJiYgdGhpcy0+cmVsZWFz ZV8gPT0gMSkKICAgIHsKICAgICAgVCAqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxUKj4gKHRoaXMt PmJ1ZmZlcl8pOwoKICAgICAgVEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46 OmZyZWVidWYgKHRtcCk7CiAgICB9CiAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAgdGhpcy0+cmVs ZWFzZV8gPSByZWxlYXNlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBz aXplX3QgTUFYPiBpbmxpbmUgdm9pZApUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zh ciwgTUFYPjo6ZnJlZWJ1ZiAoVCAqYnVmZmVyKQp7CiAgaWYgKGJ1ZmZlciA9PSAwKQogICAgcmV0 dXJuOwoKICBkZWxldGUgW10gYnVmZmVyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92 YXIsIHNpemVfdCBNQVg+IGlubGluZQpUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zh ciwgTUFYPjo6ClRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlICh2b2lkKQogIDogVEFPX0JvdW5k ZWRfQmFzZV9TZXF1ZW5jZSAoTUFYLCAwLCBhbGxvY2J1ZiAoTUFYKSwgMSkKewp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IGlubGluZQpUQU9fQm91bmRlZF9B cnJheV9TZXF1ZW5jZTxULCBUX3ZhciwgTUFYPjo6ClRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNl IChDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqZGF0 YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAg OiBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlIChNQVgsIGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkK ewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IGlubGluZSBU ICYKVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIsIE1BWD46Om9wZXJhdG9yW10g KENPUkJBOjpVTG9uZyBpKQp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50 IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5pIiwgNjE1LCAt MSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAo KSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0Vf QVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIs ICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CgoKCgogIHJldHVybiAo cmVpbnRlcnByZXRfY2FzdDxUKj4gKHRoaXMtPmJ1ZmZlcl8pKVtpXTsKCn0KCnRlbXBsYXRlIDxj bGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1BWD4gaW5saW5lIGNvbnN0IFQgJgpUQU9fQm91 bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3ZhciwgTUFYPjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVM b25nIGkpIGNvbnN0CnsKICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19h Y2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBB Q0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmkiLCA2MjcsIC0xLCBf X2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBh Y2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NF UlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkg PCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKCgoKCiAgcmV0dXJuIChyZWlu dGVycHJldF9jYXN0PGNvbnN0IFQqPiAodGhpcy0+YnVmZmVyXykpW2ldOwoKfQoKdGVtcGxhdGUg PGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiBpbmxpbmUgVCAqClRBT19Cb3VuZGVk X0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+OjpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVh biBvcnBoYW4pCnsKICBUICpyZXN1bHQgPSAwOwogIGlmIChvcnBoYW4gPT0gMCkKICAgIHsKCgog ICAgICBpZiAodGhpcy0+YnVmZmVyXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHJlc3VsdCA9 CiAgICAgICAgICAgIFRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+Ojph bGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3Vs dDsKICAgICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAgICB9CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICByZXN1bHQgPQogICAgICAgICAgICByZWludGVycHJldF9jYXN0PFQq PiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgfQogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYg KHRoaXMtPnJlbGVhc2VfICE9IDApCiAgICAgICAgewoKCiAgICAgICAgICByZXN1bHQgPSByZWlu dGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgICB0aGlzLT5tYXhpbXVt XyA9IDA7CiAgICAgICAgICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICAgIHRoaXMtPmJ1ZmZl cl8gPSAwOwogICAgICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgICAgIH0KICAgIH0KICBy ZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBN QVg+IGlubGluZSBjb25zdCBUICoKVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIs IE1BWD46OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz dDxjb25zdCBUICo+ICh0aGlzLT5idWZmZXJfKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFz cyBUX3Zhciwgc2l6ZV90IE1BWD4gaW5saW5lIHZvaWQKVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVu Y2U8VCwgVF92YXIsIE1BWD46OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBs ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFQgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCnsKICB0aGlzLT5tYXhpbXVtXyA9IG1h eDsKICB0aGlzLT5sZW5ndGhfID0gbGVuZ3RoOwogIGlmICh0aGlzLT5idWZmZXJfICYmIHRoaXMt PnJlbGVhc2VfID09IDEpCiAgICB7CiAgICAgIFQqIHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+ ICh0aGlzLT5idWZmZXJfKTsKCiAgICAgIFRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRf dmFyLCBNQVg+OjpmcmVlYnVmICh0bXApOwogICAgfQogIHRoaXMtPmJ1ZmZlcl8gPSBkYXRhOwog IHRoaXMtPnJlbGVhc2VfID0gcmVsZWFzZTsKfQoKCgoKCnRlbXBsYXRlPHNpemVfdCBNQVg+IGlu bGluZQpUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPjo6flRBT19Cb3VuZGVkX1N0cmlu Z19TZXF1ZW5jZSAodm9pZCkKewogIHRoaXMtPl9kZWFsbG9jYXRlX2J1ZmZlciAoKTsKfQoKdGVt cGxhdGU8c2l6ZV90IE1BWD4gaW5saW5lClRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+ OjoKVEFPX0JvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip2YWx1ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKQogIDogVEFPX0JvdW5kZWRfQmFzZV9T ZXF1ZW5jZSAoTUFYLCBsZW5ndGgsIHZhbHVlLCByZWxlYXNlKQp7Cn0KCgoKCgp0ZW1wbGF0ZTxz aXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTxNQVg+Ojp+VEFP X0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZSAodm9pZCkKewogIHRoaXMtPl9kZWFsbG9jYXRlX2J1 ZmZlciAoKTsKfQoKdGVtcGxhdGU8c2l6ZV90IE1BWD4gaW5saW5lClRBT19Cb3VuZGVkX1dTdHJp bmdfU2VxdWVuY2U8TUFYPjo6ClRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpV TG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpXQ2hhciAq KnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxl YXNlKQogIDogVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZSAoTUFYLCBsZW5ndGgsIHZhbHVlLCBy ZWxlYXNlKQp7Cn0KIyAxMTU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIgMgojIDExNjQgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5jcHAi IDEKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vU2VxdWVuY2VfVC5oIiAxCiMgNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmNwcCIgMgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRW52aXJvbm1lbnQuaCIgMQojIDgg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVu Y2VfVC5jcHAiIDIKCgoKCgppbmxpbmUgY29uc3QgY2hhciogZ2V0X3Jjc2lkX3Rhb19TZXF1ZW5j ZV9UIChjb25zdCBjaGFyKikgeyByZXR1cm4gIlNlcXVlbmNlX1QuY3BwLHYgMS40NSAyMDAxLzA0 LzI0IDEzOjQ0OjQzIHBhcnNvbnMgRXhwIiA7IH0gc3RhdGljIGNvbnN0IGNoYXIqIHJjc2lkX3Rh b19TZXF1ZW5jZV9UID0gZ2V0X3Jjc2lkX3Rhb19TZXF1ZW5jZV9UICggcmNzaWRfdGFvX1NlcXVl bmNlX1QgKSA7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6 ClRBT19VbmJvdW5kZWRfU2VxdWVuY2UgKGNvbnN0IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD4g JnJocykKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAocmhzKQp7CiAgaWYgKHJocy5i dWZmZXJfICE9IDApCiAgICB7CiAgICAgIFQgKnRtcDEgPSBUQU9fVW5ib3VuZGVkX1NlcXVlbmNl PFQ+OjphbGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAgICBUICogY29uc3QgdG1wMiA9CiAg ICAgICAgcmVpbnRlcnByZXRfY2FzdDxUICo+IChyaHMuYnVmZmVyXyk7CgogICAgICBmb3IgKENP UkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgICB7CiAgICAg ICAgICB0bXAxW2ldID0gdG1wMltpXTsKICAgICAgICB9CgogICAgICB0aGlzLT5idWZmZXJfID0g dG1wMTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgfQp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxUPiAmClRBT19VbmJv dW5kZWRfU2VxdWVuY2U8VD46Om9wZXJhdG9yPSAoY29uc3QgVEFPX1VuYm91bmRlZF9TZXF1ZW5j ZTxUPiAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAqdGhpczsKCiAgaWYg KHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4 aW11bV8pCiAgICAgICAgewoKICAgICAgICAgIFQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAq PiAodGhpcy0+YnVmZmVyXyk7CgogICAgICAgICAgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6 ZnJlZWJ1ZiAodG1wKTsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQogICAgICAgICAgICBUQU9f VW5ib3VuZGVkX1NlcXVlbmNlPFQ+OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKICAgICAgICB9 CiAgICB9CiAgZWxzZQogICAgewogICAgICBpZiAocmhzLm1heGltdW1fID09IDApCiAgICAgICAg ewogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgewogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9CiAgICAgICAgICAgIFRBT19VbmJvdW5kZWRf U2VxdWVuY2U8VD46OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgICAgIH0KICAgIH0KCiAg VEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlOjpvcGVyYXRvcj0gKHJocyk7CgogIFQgKnRtcDEg PSByZWludGVycHJldF9jYXN0PFQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIFQgKiBjb25zdCB0bXAy ID0gcmVpbnRlcnByZXRfY2FzdDxUICo+IChyaHMuYnVmZmVyXyk7CgogIGZvciAoQ09SQkE6OlVM b25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgdG1wMVtpXSA9IHRtcDJbaV07 CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4KVEFPX1VuYm91bmRlZF9TZXF1 ZW5jZTxUPjo6flRBT19VbmJvdW5kZWRfU2VxdWVuY2UgKHZvaWQpCnsKICB0aGlzLT5fZGVhbGxv Y2F0ZV9idWZmZXIgKCk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQKVEFPX1VuYm91bmRlZF9T ZXF1ZW5jZTxUPjo6X2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCkKewogIFQq IHRtcCA9IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD46OmFsbG9jYnVmIChsZW5ndGgpOwoKICBp ZiAodGhpcy0+YnVmZmVyXyAhPSAwKQogICAgewogICAgICBUICpvbGQgPSByZWludGVycHJldF9j YXN0PFQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAw OyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICAgIHRtcFtpXSA9IG9sZFtpXTsKCiAgICAg IGlmICh0aGlzLT5yZWxlYXNlXykKICAgICAgICBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPFQ+Ojpm cmVlYnVmIChvbGQpOwogICAgfQoKICB0aGlzLT5idWZmZXJfID0gdG1wOwp9Cgp0ZW1wbGF0ZTxj bGFzcyBUPiB2b2lkClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD46Ol9kZWFsbG9jYXRlX2J1ZmZl ciAodm9pZCkKewogIGlmICh0aGlzLT5yZWxlYXNlXyA9PSAwKQogICAgcmV0dXJuOwoKICBUICp0 bXAgPSByZWludGVycHJldF9jYXN0PFQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKCiAgVEFPX1VuYm91 bmRlZF9TZXF1ZW5jZTxUPjo6ZnJlZWJ1ZiAodG1wKTsKICB0aGlzLT5idWZmZXJfID0gMDsKfQoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gVCAmClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD46Om9wZXJh dG9yW10gKENPUkJBOjpVTG9uZyBpKQp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykp IHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAq YWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5jcHAi LCAxMjUsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19v c3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJP UiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVz Jy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICBUKiB0 bXAgPSByZWludGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVmZmVyXyk7CiAgcmV0dXJuIHRtcFtp XTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3QgVCAmClRBT19VbmJvdW5kZWRfU2VxdWVu Y2U8VD46Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25zdAp7CiAgZG8geyBpZighKGkg PCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9y ICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2Vf X18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vU2VxdWVuY2VfVC5jcHAiLCAxMzUsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0 ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFj ZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0 aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9 IHdoaWxlICgwKTsKICBUICogY29uc3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxUKj4gKHRoaXMt PmJ1ZmZlcl8pOwogIHJldHVybiB0bXBbaV07Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6 ZV90IE1BWD4KVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFYPjo6ClRBT19Cb3VuZGVkX1NlcXVl bmNlIChjb25zdCBUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+ICZyaHMpCiAgOiBUQU9fQm91 bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsKICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsK ICAgICAgVCAqdG1wMSA9IFRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD46OmFsbG9jYnVmIChN QVgpOwoKICAgICAgVCAqIGNvbnN0IHRtcDIgPQogICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VCAq PiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlz LT5sZW5ndGhfOyArK2kpCiAgICAgICAgewogICAgICAgICAgdG1wMVtpXSA9IHRtcDJbaV07CiAg ICAgICAgfQoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgZWxzZQogICAgewog ICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQsIHNpemVf dCBNQVg+IFRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD4gJgpUQU9fQm91bmRlZF9TZXF1ZW5j ZTxULCBNQVg+OjoKb3BlcmF0b3I9IChjb25zdCBUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+ ICZyaHMpCnsKICBpZiAodGhpcyA9PSAmcmhzKQogICAgcmV0dXJuICp0aGlzOwoKICBpZiAodGhp cy0+cmVsZWFzZV8pCiAgICB7CgoKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGlmIChyaHMubWF4 aW11bV8gPT0gMCkKICAgICAgICB7CiAgICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAg ICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICB0aGlzLT5idWZmZXJfID0KICAgICAg ICAgICAgVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFYPjo6YWxsb2NidWYgKHJocy5tYXhpbXVt Xyk7CiAgICAgICAgfQogICAgfQoKICBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlOjpvcGVyYXRv cj0gKHJocyk7CgogIFQqIHRtcDEgPSByZWludGVycHJldF9jYXN0PFQgKj4gKHRoaXMtPmJ1ZmZl cl8pOwogIFQqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PFQgKj4gKHJocy5idWZmZXJf KTsKCiAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAg ICB0bXAxW2ldID0gdG1wMltpXTsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBU LCBzaXplX3QgTUFYPgpUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+Ojp+VEFPX0JvdW5kZWRf U2VxdWVuY2UgKHZvaWQpCnsKICB0aGlzLT5fZGVhbGxvY2F0ZV9idWZmZXIgKCk7Cn0KCnRlbXBs YXRlPGNsYXNzIFQsIHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFY Pjo6X2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nKQp7CgoKICB0aGlzLT5idWZmZXJfID0g VEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFYPjo6YWxsb2NidWYgKE1BWCk7Cn0KCnRlbXBsYXRl PGNsYXNzIFQsIHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFYPjo6 X2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKQp7CiAgaWYgKHRoaXMtPnJlbGVhc2VfID09IDApCiAg ICByZXR1cm47CgogIFQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPiAodGhpcy0+YnVmZmVy Xyk7CgogIFRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD46OmZyZWVidWYgKHRtcCk7CiAgdGhp cy0+YnVmZmVyXyA9IDA7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IFRB T19PYmplY3RfTWFuYWdlcjxULFRfdmFyPiYKVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+OjoK ICAgIG9wZXJhdG9yPSAoY29uc3QgVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+ICZyaHMpCnsK ICBpZiAodGhpcyA9PSAmcmhzKQogICAgcmV0dXJuICp0aGlzOwoKICBpZiAodGhpcy0+cmVsZWFz ZV8pCiAgICB7CiAgICAgIFRfdmFyOjpyZWxlYXNlICgqdGhpcy0+cHRyXyk7CiAgICAgICp0aGlz LT5wdHJfID0gVF92YXI6OmR1cGxpY2F0ZSAoKnJocy5wdHJfKTsKICAgIH0KICBlbHNlCiAgICAq dGhpcy0+cHRyXyA9ICpyaHMucHRyXzsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgVCwgY2xhc3MgVF92YXI+VEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+ICYKVEFPX09iamVj dF9NYW5hZ2VyPFQsVF92YXI+OjpvcGVyYXRvcj0oVCogcCkKewogIGlmICh0aGlzLT5yZWxlYXNl XykKICAgIHsKCgoKCiAgICAgIFRfdmFyOjpyZWxlYXNlICgqdGhpcy0+cHRyXyk7CiAgICAgICp0 aGlzLT5wdHJfID0gcDsKICAgIH0KICBlbHNlCiAgICAqdGhpcy0+cHRyXyA9IHA7CgogIHJldHVy biAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPlRBT19PYmplY3RfTWFu YWdlcjxULFRfdmFyPiAmClRBT19PYmplY3RfTWFuYWdlcjxULFRfdmFyPjo6b3BlcmF0b3I9KGNv bnN0IFRfdmFyICZwKQp7CiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewoKCgoKICAgICAgVF92 YXI6OnJlbGVhc2UgKCp0aGlzLT5wdHJfKTsKICAgICAgKnRoaXMtPnB0cl8gPSBUX3Zhcjo6ZHVw bGljYXRlIChwLmluICgpKTsKICAgIH0KICBlbHNlCiAgICAqdGhpcy0+cHRyXyA9IHAuaW4gKCk7 CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBUICom ClRBT19PYmplY3RfTWFuYWdlcjxULFRfdmFyPjo6b3V0ICh2b2lkKQp7CiAgVF92YXI6OnJlbGVh c2UgKCp0aGlzLT5wdHJfKTsKICAqdGhpcy0+cHRyXyA9IFRfdmFyOjpuaWwgKCk7CiAgcmV0dXJu ICp0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IFQgKgpUQU9f T2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46Ol9yZXRuICh2b2lkKQp7CiAgVCAqdGVtcCA9ICp0aGlz LT5wdHJfOwogICp0aGlzLT5wdHJfID0gVF92YXI6Om5pbCAoKTsKICByZXR1cm4gdGVtcDsKfQoK CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gVEFPX1BzZXVkb19PYmplY3RfTWFu YWdlcjxULFRfdmFyPiYKVEFPX1BzZXVkb19PYmplY3RfTWFuYWdlcjxULFRfdmFyPjo6CiAgICBv cGVyYXRvcj0gKGNvbnN0IFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4gJnJocykK ewogIGlmICh0aGlzID09ICZyaHMpCiAgICByZXR1cm4gKnRoaXM7CgogIGlmICh0aGlzLT5yZWxl YXNlXykKICAgIHsKICAgICAgQ09SQkE6OnJlbGVhc2UgKCp0aGlzLT5wdHJfKTsKICAgICAgKnRo aXMtPnB0cl8gPSBUOjpfZHVwbGljYXRlICgqcmhzLnB0cl8pOwogICAgfQogIGVsc2UKICAgICp0 aGlzLT5wdHJfID0gKnJocy5wdHJfOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFz cyBULCBjbGFzcyBUX3Zhcj4gVEFPX1BzZXVkb19PYmplY3RfTWFuYWdlcjxULFRfdmFyPiAmClRB T19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46Om9wZXJhdG9yPShUKiBwKQp7CiAgaWYg KHRoaXMtPnJlbGVhc2VfKQogICAgewoKCgoKICAgICAgQ09SQkE6OnJlbGVhc2UgKCp0aGlzLT5w dHJfKTsKICAgICAgKnRoaXMtPnB0cl8gPSBwOwogICAgfQogIGVsc2UKICAgICp0aGlzLT5wdHJf ID0gcDsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+ IFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4gJgpUQU9fUHNldWRvX09iamVjdF9N YW5hZ2VyPFQsVF92YXI+OjpvcGVyYXRvcj0oY29uc3QgVF92YXIgJnApCnsKICBpZiAodGhpcy0+ cmVsZWFzZV8pCiAgICB7CgoKCgogICAgICBDT1JCQTo6cmVsZWFzZSAoKnRoaXMtPnB0cl8pOwog ICAgICAqdGhpcy0+cHRyXyA9IFQ6Ol9kdXBsaWNhdGUgKHAuaW4gKCkpOwogICAgfQogIGVsc2UK ICAgICp0aGlzLT5wdHJfID0gcC5pbiAoKTsKCiAgcmV0dXJuICp0aGlzOwp9CgoKCgoKCnRlbXBs YXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2U8 VCxUX3Zhcj46OgpUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIG1h eGltdW0pCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQs VF92YXI+OjphbGxvY2J1ZiAobWF4aW11bSkpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz IFRfdmFyPgpUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPjo6ClRBT19VbmJv dW5kZWRfT2JqZWN0X1NlcXVlbmNlIChjb25zdCBUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5j ZTxULFRfdmFyPiAmcmhzKQogIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsK ICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAgVCAqKnRtcDEgPQogICAgICAgIFRB T19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+OjphbGxvY2J1ZiAodGhpcy0+bWF4 aW11bV8pOwogICAgICBUICoqIGNvbnN0IHRtcDIgPQogICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8 VCAqKj4gKHJocy5idWZmZXJfKTsKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwg cmhzLmxlbmd0aF87ICsraSkKICAgICAgICB7CiAgICAgICAgICB0bXAxW2ldID0gVF92YXI6OmR1 cGxpY2F0ZSAodG1wMltpXSk7CiAgICAgICAgfQoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7 CiAgICB9CiAgZWxzZQogICAgewogICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgIH0KfQoKdGVt cGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXI+ClRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNl PFQsVF92YXI+Ojp+VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2UgKHZvaWQpCnsKICB0aGlz LT5fZGVhbGxvY2F0ZV9idWZmZXIgKCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92 YXI+VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxUX3Zhcj4mClRBT19VbmJvdW5kZWRf T2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+OjoKb3BlcmF0b3I9IChjb25zdCBUQU9fVW5ib3VuZGVk X09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPiAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAg IHJldHVybiAqdGhpczsKCiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBUICoqdG1w ID0gcmVpbnRlcnByZXRfY2FzdDxUICoqPiAodGhpcy0+YnVmZmVyXyk7CgoKICAgICAgZm9yIChD T1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgewogICAg ICAgICAgVF92YXI6OnJlbGVhc2UgKHRtcFtpXSk7CiAgICAgICAgICB0bXBbaV0gPSBUX3Zhcjo6 bmlsICgpOwogICAgICAgIH0KICAgICAgaWYgKHRoaXMtPm1heGltdW1fIDwgcmhzLm1heGltdW1f KQogICAgICAgIHsKICAgICAgICAgIFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92 YXI+OjpmcmVlYnVmICh0bXApOwogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9CiAgICAgICAgICAg IFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+OjphbGxvY2J1ZiAocmhzLm1h eGltdW1fKTsKICAgICAgICB9CiAgICB9CiAgZWxzZQogICAgewogICAgICBpZiAocmhzLm1heGlt dW1fID09IDApCiAgICAgICAgewogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9CiAgICAgICAg ICAgIFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+OjphbGxvY2J1ZiAocmhz Lm1heGltdW1fKTsKICAgICAgICB9CiAgICB9CgogIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5j ZTo6b3BlcmF0b3I9IChyaHMpOwoKICBUICoqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqKj4g KHRoaXMtPmJ1ZmZlcl8pOwogIFQgKiogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAq Kj4gKHJocy5idWZmZXJfKTsKCiAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCByaHMubGVu Z3RoXzsgKytpKQogICAgdG1wMVtpXSA9IFRfdmFyOjpkdXBsaWNhdGUgKHRtcDJbaV0pOwoKICBy ZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gVCAqKgpUQU9f VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPjo6YWxsb2NidWYgKENPUkJBOjpVTG9u ZyBuZWxlbXMpCnsKICBUICoqYnVmID0gMDsKCiAgZG8geyB0cnkgeyBidWYgPSBuZXcgVCpbbmVs ZW1zXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9 IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKCiAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7 IGkgPCBuZWxlbXM7IGkrKykKICAgIGJ1ZltpXSA9IFRfdmFyOjpuaWwgKCk7CgogIHJldHVybiBi dWY7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gdm9pZApUQU9fVW5ib3VuZGVk X09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPjo6ZnJlZWJ1ZiAoVCAqKmJ1ZmZlcikKewogIGlmIChi dWZmZXIgPT0gMCkKICAgIHJldHVybjsKIyA0ODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5jcHAiCiAgZGVsZXRlW10gYnVmZmVy Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gdm9pZApUQU9fVW5ib3VuZGVkX09i amVjdF9TZXF1ZW5jZTxULFRfdmFyPjo6X2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxl bmd0aCkKewogIFQgKip0bXAgPSBUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFy Pjo6YWxsb2NidWYgKGxlbmd0aCk7CgogIGlmICh0aGlzLT5idWZmZXJfICE9IDApCiAgICB7CiAg ICAgIFQgKipvbGQgPSByZWludGVycHJldF9jYXN0PFQqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAg ICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKCgoKCgog ICAgICAgIGlmICghdGhpcy0+cmVsZWFzZV8pCiAgICAgICAgICB0bXBbaV0gPSBUX3Zhcjo6ZHVw bGljYXRlIChvbGRbaV0pOwogICAgICAgIGVsc2UKICAgICAgICAgIHRtcFtpXSA9IG9sZFtpXTsK CiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXykKICAgICAgICBkZWxldGVbXSBvbGQ7CiAgICB9CiAg dGhpcy0+YnVmZmVyXyA9IHRtcDsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IHZv aWQKVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxUX3Zhcj46Ol9kZWFsbG9jYXRlX2J1 ZmZlciAodm9pZCkKewogIGlmICh0aGlzLT5idWZmZXJfID09IDAgfHwgdGhpcy0+cmVsZWFzZV8g PT0gMCkKICAgIHJldHVybjsKICBUICoqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxUKio+ICh0aGlz LT5idWZmZXJfKTsKICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87 ICsraSkKICAgIHsKICAgICAgVF92YXI6OnJlbGVhc2UgKHRtcFtpXSk7CiAgICAgIHRtcFtpXSA9 IFRfdmFyOjpuaWwgKCk7CiAgICB9CiAgVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxU X3Zhcj46OmZyZWVidWYgKHRtcCk7CiAgdGhpcy0+YnVmZmVyXyA9IDA7Cn0KCnRlbXBsYXRlPGNs YXNzIFQsIGNsYXNzIFRfdmFyPiB2b2lkClRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQs VF92YXI+Ojpfc2hyaW5rX2J1ZmZlciAoQ09SQkE6OlVMb25nIG5sLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvbCkKewogIFQg Kip0bXAgPSBzdGF0aWNfY2FzdDxUKio+ICh0aGlzLT5idWZmZXJfKTsKCiAgZm9yIChDT1JCQTo6 VUxvbmcgaSA9IG5sOyBpIDwgb2w7ICsraSkKICAgIHsKICAgICAgVF92YXI6OnJlbGVhc2UgKHRt cFtpXSk7CiAgICAgIHRtcFtpXSA9IFRfdmFyOjpuaWwgKCk7CiAgICB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBULCBjbGFzcyBUX3Zhcj4gdm9pZApUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxU LFRfdmFyPjo6X2Rvd25jYXN0ICh2b2lkKiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX09iamVjdCogc3JjLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVu dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkKewogIFQgKip0bXAgPSBzdGF0aWNf Y2FzdDxUKio+ICh0YXJnZXQpOwoKICAqdG1wID0gVF92YXI6Om5hcnJvdyAoc3JjLCBfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCiAgICAgICAgICAgOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgVCwgY2xhc3MgVF92YXI+IENPUkJBX09iamVjdCoKVEFPX1VuYm91bmRlZF9PYmplY3RfU2Vx dWVuY2U8VCxUX3Zhcj46Ol91cGNhc3QgKHZvaWQqIHNyYykgY29uc3QKewogIHJldHVybiBUX3Zh cjo6dXBjYXN0IChzcmMpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBz aXplX3QgTUFYPgpUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6ClRB T19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAodm9pZCkKICA6IFRBT19Cb3VuZGVkX0Jhc2VfU2Vx dWVuY2UgKE1BWCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fQm91bmRlZF9P YmplY3RfU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6YWxsb2NidWYgKE1BWCkpCnsKfQoKdGVtcGxh dGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPgpUQU9fQm91bmRlZF9PYmplY3Rf U2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6ClRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAoY29u c3QgVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsIFRfdmFyLE1BWD4gJnJocykKICA6IFRB T19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJocykKewogIGlmIChyaHMuYnVmZmVyXyAhPSAwKQog ICAgewogICAgICBUICoqdG1wMSA9CiAgICAgICAgVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNl PFQsIFRfdmFyLE1BWD46OmFsbG9jYnVmIChNQVgpOwoKICAgICAgVCAqKiBjb25zdCB0bXAyID0K ICAgICAgICByZWludGVycHJldF9jYXN0PFQqKj4gKHJocy5idWZmZXJfKTsKCiAgICAgIGZvciAo Q09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87IGkrKykKICAgICAgICB7CiAgICAg ICAgICB0bXAxW2ldID0gVF92YXI6OmR1cGxpY2F0ZSAodG1wMltpXSk7CiAgICAgICAgfQoKICAg ICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgZWxzZQogICAgewogICAgICB0aGlzLT5i dWZmZXJfID0gMDsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXpl X3QgTUFYPiBUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCwgVF92YXIsTUFYPiYKVEFPX0Jv dW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsIFRfdmFyLE1BWD46Om9wZXJhdG9yPQooY29uc3QgVEFP X0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXIsIE1BWD4gJnJocykKewogIGlmICh0aGlz ID09ICZyaHMpCiAgICByZXR1cm4gKnRoaXM7CgogIGlmICh0aGlzLT5yZWxlYXNlXykKICAgIHsK ICAgICAgVCAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwoK ICAgICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAg ICAgICAgewogICAgICAgICAgVF92YXI6OnJlbGVhc2UgKHRtcFtpXSk7CiAgICAgICAgICB0bXBb aV0gPSBUX3Zhcjo6bmlsICgpOwogICAgICAgIH0KCgogICAgfQogIGVsc2UKICAgIHsKICAgICAg aWYgKHJocy5tYXhpbXVtXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8g PSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZl cl8gPQogICAgICAgICAgICBUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxUX3ZhcixNQVg+ OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKICAgICAgICB9CiAgICB9CgogIFRBT19Cb3VuZGVk X0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgVCAqKnRtcDEgPSByZWludGVycHJl dF9jYXN0PFQgKio+ICh0aGlzLT5idWZmZXJfKTsKICBUICoqIGNvbnN0IHRtcDIgPSByZWludGVy cHJldF9jYXN0PFQgKio+IChyaHMuYnVmZmVyXyk7CgogIGZvciAoQ09SQkE6OlVMb25nIGk9MDsg aSA8IHJocy5sZW5ndGhfOyArK2kpCiAgICB7CiAgICAgIHRtcDFbaV0gPSBUX3Zhcjo6ZHVwbGlj YXRlICh0bXAyW2ldKTsKICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IFQgKioKVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVl bmNlPFQsIFRfdmFyLE1BWD46OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcpCnsKICBUICoqYnVmID0g MDsKCiAgZG8geyB0cnkgeyBidWYgPSBuZXcgVCpbTUFYXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxs b2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgw KTsKCiAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBNQVg7IGkrKykKICAgIHsKICAgICAg YnVmW2ldID0gVF92YXI6Om5pbCAoKTsKICAgIH0KCiAgcmV0dXJuIGJ1ZjsKfQoKdGVtcGxhdGUg PGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiB2b2lkClRBT19Cb3VuZGVkX09iamVj dF9TZXF1ZW5jZTxULCBUX3ZhcixNQVg+OjpmcmVlYnVmIChUICoqYnVmZmVyKQp7CgoKCiAgZm9y IChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBNQVg7ICsraSkKICAgIHsKICAgICAgaWYgKGJ1ZmZl cltpXSAhPSBUX3Zhcjo6bmlsICgpKQogICAgICAgIHsKICAgICAgICAgIFRfdmFyOjpyZWxlYXNl IChidWZmZXJbaV0pOwogICAgICAgICAgYnVmZmVyW2ldID0gVF92YXI6Om5pbCAoKTsKICAgICAg ICB9CiAgICB9CgogIGRlbGV0ZVtdIGJ1ZmZlcjsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3Mg VF92YXIsIHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsIFRf dmFyLE1BWD46Ol9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpCnsKCgogIHRo aXMtPmJ1ZmZlcl8gPQogICAgVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsIFRfdmFyLE1B WD46OmFsbG9jYnVmIChsZW5ndGgpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhciwg c2l6ZV90IE1BWD4gdm9pZApUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxUX3ZhcixNQVg+ OjpfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpCnsKICBpZiAodGhpcy0+cmVsZWFzZV8gPT0gMCkK ICAgIHsKICAgICAgcmV0dXJuOwogICAgfQoKICBUICoqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxU ICoqPiAodGhpcy0+YnVmZmVyXyk7CiAgVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92 YXIsTUFYPjo6ZnJlZWJ1ZiAodG1wKTsKICB0aGlzLT5idWZmZXJfID0gMDsKfQoKdGVtcGxhdGU8 Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfT2JqZWN0 X1NlcXVlbmNlPFQsVF92YXIsIE1BWD46Ol9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxvbmcgbmws CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQ09SQkE6OlVMb25nIG9sKQp7CiAgVCAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqKj4g KHRoaXMtPmJ1ZmZlcl8pOwoKICBmb3IgKENPUkJBOjpVTG9uZyBpID0gbmw7IGkgPCBvbDsgKytp KQogICAgewogICAgICBUX3Zhcjo6cmVsZWFzZSAodG1wW2ldKTsKICAgICAgdG1wW2ldID0gVF92 YXI6Om5pbCAoKTsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXpl X3QgTUFYPiB2b2lkClRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULCBUX3ZhcixNQVg+Ojpf ZG93bmNhc3QgKHZvaWQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ09SQkFfT2JqZWN0KiBzcmMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgVCAqKnRtcCA9IHN0YXRpY19jYXN0 PFQqKj4gKHRhcmdldCk7CgogICp0bXAgPSBUX3Zhcjo6bmFycm93IChzcmMsIF9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUpOwoKICAgICAgICAgICA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBU LCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1BWD4gQ09SQkFfT2JqZWN0KgpUQU9fQm91bmRlZF9PYmpl Y3RfU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6X3VwY2FzdCAodm9pZCogc3JjKSBjb25zdAp7CiAg cmV0dXJuIFRfdmFyOjp1cGNhc3QgKHNyYyk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNs YXNzIFRfdmFyPgpUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULFRfdmFyPjo6ClRBT19V bmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSkKICA6IFRBT19V bmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3Zhcj46OmFsbG9jYnVm IChtYXhpbXVtKSkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+ClRBT19VbmJv dW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+OjoKVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2Vx dWVuY2UgKGNvbnN0IFRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+ICZyaHMp CiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJocykKewogIGlmIChyaHMuYnVmZmVy XyAhPSAwKQogICAgewogICAgICBUICoqdG1wMSA9CiAgICAgICAgVEFPX1VuYm91bmRlZF9Qc2V1 ZG9fU2VxdWVuY2U8VCxUX3Zhcj46OmFsbG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CgogICAgICBU ICoqIGNvbnN0IHRtcDIgPQogICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqKj4gKHJocy5idWZm ZXJfKTsKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87ICsr aSkKICAgICAgICB7CiAgICAgICAgICB0bXAxW2ldID0gVDo6X2R1cGxpY2F0ZSAodG1wMltpXSk7 CiAgICAgICAgfQoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgZWxzZQogICAg ewogICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgIH0KfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xh c3MgVF92YXI+ClRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+Ojp+VEFPX1Vu Ym91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgKHZvaWQpCnsKICB0aGlzLT5fZGVhbGxvY2F0ZV9idWZm ZXIgKCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IFRBT19VbmJvdW5kZWRf UHNldWRvX1NlcXVlbmNlPFQsVF92YXI+JgpUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxU LFRfdmFyPjo6Cm9wZXJhdG9yPSAoY29uc3QgVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8 VCxUX3Zhcj4gJnJocykKewogIGlmICh0aGlzID09ICZyaHMpCiAgICByZXR1cm4gKnRoaXM7Cgog IGlmICh0aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAgVCAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nh c3Q8VCAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAw OyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICAgIHsKICAgICAgICAgIENPUkJBOjpyZWxl YXNlICh0bXBbaV0pOwogICAgICAgICAgdG1wW2ldID0gVDo6X25pbCAoKTsKICAgICAgICB9CiAg ICAgIGlmICh0aGlzLT5tYXhpbXVtXyA8IHJocy5tYXhpbXVtXykKICAgICAgICB7CiAgICAgICAg ICBUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULFRfdmFyPjo6ZnJlZWJ1ZiAodG1wKTsK ICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQogICAgICAgICAgICBUQU9fVW5ib3VuZGVkX1BzZXVk b19TZXF1ZW5jZTxULFRfdmFyPjo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgICAgfQog ICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKHJocy5tYXhpbXVtXyA9PSAwKQogICAgICAgIHsK ICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg IHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQogICAgICAgICAgICBUQU9fVW5ib3VuZGVkX1Bz ZXVkb19TZXF1ZW5jZTxULFRfdmFyPjo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgICAg fQogICAgfQoKICBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsK CiAgVCAqKnRtcDEgPSByZWludGVycHJldF9jYXN0PFQgKio+ICh0aGlzLT5idWZmZXJfKTsKICBU ICoqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PFQgKio+IChyaHMuYnVmZmVyXyk7Cgog IGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87ICsraSkKICAgIHRtcDFb aV0gPSBUOjpfZHVwbGljYXRlICh0bXAyW2ldKTsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IFQgKioKVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVu Y2U8VCxUX3Zhcj46OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgbmVsZW1zKQp7CiAgVCAqKmJ1ZiA9 IDA7CgogIGRvIHsgdHJ5IHsgYnVmID0gbmV3IFQqW25lbGVtc107IH0gY2F0Y2ggKHN0ZDo6YmFk X2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGls ZSAoMCk7CgogIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCiAgICBi dWZbaV0gPSBUOjpfbmlsICgpOwoKICByZXR1cm4gYnVmOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwg Y2xhc3MgVF92YXI+IHZvaWQKVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3Zhcj46 OmZyZWVidWYgKFQgKipidWZmZXIpCnsKICBpZiAoYnVmZmVyID09IDApCiAgICByZXR1cm47CiMg ODU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Nl cXVlbmNlX1QuY3BwIgogIGRlbGV0ZSBbXSBidWZmZXI7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNs YXNzIFRfdmFyPiB2b2lkClRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+Ojpf YWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKQp7CiAgVCAqKnRtcCA9IFRBT19V bmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+OjphbGxvY2J1ZiAobGVuZ3RoKTsKCiAg aWYgKHRoaXMtPmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAgVCAqKm9sZCA9IHJlaW50ZXJwcmV0 X2Nhc3Q8VCoqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAw OyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQoKCgoKCiAgICAgICAgaWYgKCF0aGlzLT5yZWxlYXNl XykKICAgICAgICAgIHRtcFtpXSA9IFQ6Ol9kdXBsaWNhdGUgKG9sZFtpXSk7CiAgICAgICAgZWxz ZQogICAgICAgICAgdG1wW2ldID0gb2xkW2ldOwoKICAgICAgaWYgKHRoaXMtPnJlbGVhc2VfKQog ICAgICAgIGRlbGV0ZVtdIG9sZDsKICAgIH0KICB0aGlzLT5idWZmZXJfID0gdG1wOwp9Cgp0ZW1w bGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gdm9pZApUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1 ZW5jZTxULFRfdmFyPjo6X2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKQp7CiAgaWYgKHRoaXMtPmJ1 ZmZlcl8gPT0gMCB8fCB0aGlzLT5yZWxlYXNlXyA9PSAwKQogICAgcmV0dXJuOwogIFQgKip0bXAg PSByZWludGVycHJldF9jYXN0PFQqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIGZvciAoQ09SQkE6OlVM b25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgewogICAgICBDT1JCQTo6cmVs ZWFzZSAodG1wW2ldKTsKICAgICAgdG1wW2ldID0gVDo6X25pbCAoKTsKICAgIH0KICBUQU9fVW5i b3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULFRfdmFyPjo6ZnJlZWJ1ZiAodG1wKTsKICB0aGlzLT5i dWZmZXJfID0gMDsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IHZvaWQKVEFPX1Vu Ym91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3Zhcj46Ol9zaHJpbmtfYnVmZmVyIChDT1JCQTo6 VUxvbmcgbmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ09SQkE6OlVMb25nIG9sKQp7CiAgVCAqKnRtcCA9IHN0YXRpY19jYXN0PFQqKj4g KHRoaXMtPmJ1ZmZlcl8pOwoKICBmb3IgKENPUkJBOjpVTG9uZyBpID0gbmw7IGkgPCBvbDsgKytp KQogICAgewogICAgICBDT1JCQTo6cmVsZWFzZSAodG1wW2ldKTsKICAgICAgdG1wW2ldID0gVDo6 X25pbCAoKTsKICAgIH0KfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6 ZV90IE1BWD4KVEFPX0JvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsIFRfdmFyLE1BWD46OgpUQU9f Qm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgKHZvaWQpCiAgOiBUQU9fQm91bmRlZF9CYXNlX1NlcXVl bmNlIChNQVgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX0JvdW5kZWRfUHNl dWRvX1NlcXVlbmNlPFQsIFRfdmFyLE1BWD46OmFsbG9jYnVmIChNQVgpKQp7Cn0KCnRlbXBsYXRl IDxjbGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1BWD4KVEFPX0JvdW5kZWRfUHNldWRvX1Nl cXVlbmNlPFQsIFRfdmFyLE1BWD46OgpUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgKGNvbnN0 IFRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULCBUX3ZhcixNQVg+ICZyaHMpCiAgOiBUQU9f Qm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsKICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAg IHsKICAgICAgVCAqKnRtcDEgPQogICAgICAgIFRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxU LCBUX3ZhcixNQVg+OjphbGxvY2J1ZiAoTUFYKTsKCiAgICAgIFQgKiogY29uc3QgdG1wMiA9CiAg ICAgICByZWludGVycHJldF9jYXN0PFQqKj4gKHJocy5idWZmZXJfKTsKCiAgICAgIGZvciAoQ09S QkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87IGkrKykKICAgICAgICB7CiAgICAgICAg ICB0bXAxW2ldID0gVDo6X2R1cGxpY2F0ZSAodG1wMltpXSk7CiAgICAgICAgfQoKICAgICAgdGhp cy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgZWxzZQogICAgewogICAgICB0aGlzLT5idWZmZXJf ID0gMDsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFY PiBUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCwgVF92YXIsTUFYPiYKVEFPX0JvdW5kZWRf UHNldWRvX1NlcXVlbmNlPFQsIFRfdmFyLE1BWD46Om9wZXJhdG9yPQooY29uc3QgVEFPX0JvdW5k ZWRfUHNldWRvX1NlcXVlbmNlPFQsIFRfdmFyLE1BWD4gJnJocykKewogIGlmICh0aGlzID09ICZy aHMpCiAgICByZXR1cm4gKnRoaXM7CgogIGlmICh0aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAg VCAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKICAgICAg Zm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAg ewogICAgICAgICAgQ09SQkE6OnJlbGVhc2UgKHRtcFtpXSk7CiAgICAgICAgICB0bXBbaV0gPSBU OjpfbmlsICgpOwogICAgICAgIH0KCgogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKHJocy5t YXhpbXVtXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQogICAg ICAgICAgICBUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3ZhcixNQVg+OjphbGxvY2J1 ZiAocmhzLm1heGltdW1fKTsKICAgICAgICB9CiAgICB9CgogIFRBT19Cb3VuZGVkX0Jhc2VfU2Vx dWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgVCAqKnRtcDEgPSByZWludGVycHJldF9jYXN0PFQg Kio+ICh0aGlzLT5idWZmZXJfKTsKICBUICoqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0 PFQgKio+IChyaHMuYnVmZmVyXyk7CiAgZm9yIChDT1JCQTo6VUxvbmcgaT0wOyBpIDwgcmhzLmxl bmd0aF87ICsraSkKICAgIHRtcDFbaV0gPSBUOjpfZHVwbGljYXRlICh0bXAyW2ldKTsKICByZXR1 cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1BWD4g VCAqKgpUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6YWxsb2NidWYg KENPUkJBOjpVTG9uZykKewogIFQgKipidWYgPSAwOwoKICBkbyB7IHRyeSB7IGJ1ZiA9IG5ldyBU KltNQVhdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkp ID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwoKICBmb3IgKENPUkJBOjpVTG9uZyBpID0g MDsgaSA8IE1BWDsgaSsrKQogICAgYnVmW2ldID0gVDo6X25pbCAoKTsKCiAgcmV0dXJuIGJ1ZjsK fQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiB2b2lkClRBT19C b3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULCBUX3ZhcixNQVg+OjpmcmVlYnVmIChUICoqYnVmZmVy KQp7CgoKCiAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBNQVg7ICsraSkKICAgIGlmIChi dWZmZXJbaV0gIT0gVDo6X25pbCAoKSkKICAgICAgewogICAgICAgIENPUkJBOjpyZWxlYXNlIChi dWZmZXJbaV0pOwogICAgICAgIGJ1ZmZlcltpXSA9IFQ6Ol9uaWwgKCk7CiAgICAgIH0KCiAgZGVs ZXRlW10gYnVmZmVyOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1B WD4gdm9pZApUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6X2FsbG9j YXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCkKewoKCiAgdGhpcy0+YnVmZmVyXyA9CiAg ICBUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6YWxsb2NidWYgKGxl bmd0aCk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiB2b2lk ClRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULCBUX3ZhcixNQVg+OjpfZGVhbGxvY2F0ZV9i dWZmZXIgKHZvaWQpCnsKICBpZiAodGhpcy0+cmVsZWFzZV8gPT0gMCkKICAgIHJldHVybjsKICBU ICoqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxUICoqPiAodGhpcy0+YnVmZmVyXyk7CiAgVEFPX0Jv dW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+OjpmcmVlYnVmICh0bXApOwogIHRo aXMtPmJ1ZmZlcl8gPSAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90 IE1BWD4gdm9pZApUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6X3No cmlua19idWZmZXIgKENPUkJBOjpVTG9uZyBubCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgb2wpCnsKICBUICoq dG1wID0gcmVpbnRlcnByZXRfY2FzdDxUICoqPiAodGhpcy0+YnVmZmVyXyk7CgogIGZvciAoQ09S QkE6OlVMb25nIGkgPSBubDsgaSA8IG9sOyArK2kpCiAgICB7CiAgICAgIENPUkJBOjpyZWxlYXNl ICh0bXBbaV0pOwogICAgICB0bXBbaV0gPSBUOjpfbmlsICgpOwogICAgfQp9CgoKCgoKdGVtcGxh dGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBUICoKVEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5j ZTxULCBUX3Zhcj46OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgbmVsZW1zKQp7CiAgVCAqYnVmID0g MDsKCiAgZG8geyB0cnkgeyBidWYgPSBuZXcgVFtuZWxlbXNdOyB9IGNhdGNoIChzdGQ6OmJhZF9h bGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUg KDApOwoKCgogIHJldHVybiBidWY7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4K VEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46OgpUQU9fVW5ib3VuZGVkX0Fy cmF5X1NlcXVlbmNlIChjb25zdCBUQU9fVW5ib3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFy PiAmcmhzKQogIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsKICBpZiAocmhz LmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAgVCAqdG1wMSA9CiAgICAgICAgVEFPX1VuYm91bmRl ZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46OmFsbG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CgoK CgogICAgICBjb25zdCBUICp0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUICo+IChyaHMu YnVmZmVyXyk7CgoKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0 aF87ICsraSkKICAgICAgICB7CiAgICAgICAgICBUX3Zhcjo6Y29weSAodG1wMVtpXSwgdG1wMltp XSk7CiAgICAgICAgfQoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgZWxzZQog ICAgewogICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgIH0KfQoKdGVtcGxhdGU8Y2xhc3MgVCwg Y2xhc3MgVF92YXI+ClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+Ojp+VEFP X1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZSAodm9pZCkKewogIHRoaXMtPl9kZWFsbG9jYXRlX2J1 ZmZlciAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gVEFPX1VuYm91bmRl ZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zhcj4mClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8 VCwgVF92YXI+OjoKb3BlcmF0b3I9IChjb25zdCBUQU9fVW5ib3VuZGVkX0FycmF5X1NlcXVlbmNl PFQsIFRfdmFyPiAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAqdGhpczsK CiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCBy aHMubWF4aW11bV8pCiAgICAgICAgewoKCgoKICAgICAgICAgIFQgKnRtcCA9IHJlaW50ZXJwcmV0 X2Nhc3Q8VCAqPiAodGhpcy0+YnVmZmVyXyk7CgoKCiAgICAgICAgICBUQU9fVW5ib3VuZGVkX0Fy cmF5X1NlcXVlbmNlPFQsIFRfdmFyPjo6ZnJlZWJ1ZiAodG1wKTsKCiAgICAgICAgICBpZiAocmhz Lm1heGltdW1fID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0aGlzLT5idWZmZXJf ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgdGhpcy0+YnVmZmVyXyA9CiAgICAgICAgICAgICAgICBUQU9fVW5ib3VuZGVkX0FycmF5 X1NlcXVlbmNlPFQsIFRfdmFyPjo6YWxsb2NidWYgKAogICAgICAgICAgICAgICAgICAgIHJocy5t YXhpbXVtXwogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg fQogIGVsc2UKICAgIHsKICAgICAgaWYgKHJocy5tYXhpbXVtXyA9PSAwKQogICAgICAgIHsKICAg ICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQogICAgICAgICAgICBUQU9fVW5ib3VuZGVkX0FycmF5 X1NlcXVlbmNlPFQsVF92YXI+OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKICAgICAgICB9CiAg ICB9CgogIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICBm b3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHJocy5sZW5ndGhfOyArK2kpCiAgICB7CgoKCgog ICAgICBUX3Zhcjo6Y29weSAocmVpbnRlcnByZXRfY2FzdDxUICo+ICh0aGlzLT5idWZmZXJfKVtp XSwKCiAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IFQgKj4gKHJocy5i dWZmZXJfKVtpXSk7CgoKICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBU LCBjbGFzcyBUX3Zhcj4gdm9pZApUQU9fVW5ib3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFy Pjo6X2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCkKewogIFQgKnRtcCA9IFRB T19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjphbGxvY2J1ZiAobGVuZ3RoKTsK CiAgaWYgKHRoaXMtPmJ1ZmZlcl8gIT0gMCkKICAgIHsKCgoKICAgICAgVCAqb2xkID0gcmVpbnRl cnByZXRfY2FzdDxUICo+ICh0aGlzLT5idWZmZXJfKTsKCgoKICAgICAgZm9yIChDT1JCQTo6VUxv bmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgewogICAgICAgICAgVF92 YXI6OmNvcHkgKHRtcFtpXSwgb2xkW2ldKTsKICAgICAgICB9CgogICAgICBpZiAodGhpcy0+cmVs ZWFzZV8pCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIG9sZDsKICAgICAgICB9CiAgICB9 CgogIHRoaXMtPmJ1ZmZlcl8gPSB0bXA7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfdmFy PiB2b2lkClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjpfZGVhbGxvY2F0 ZV9idWZmZXIgKHZvaWQpCnsKICBpZiAodGhpcy0+YnVmZmVyXyA9PSAwIHx8IHRoaXMtPnJlbGVh c2VfID09IDApCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KCgoKCiAgVCAqdG1wID0gcmVpbnRl cnByZXRfY2FzdDxUICo+ICh0aGlzLT5idWZmZXJfKTsKCgoKICBUQU9fVW5ib3VuZGVkX0FycmF5 X1NlcXVlbmNlPFQsIFRfdmFyPjo6ZnJlZWJ1ZiAodG1wKTsKCiAgdGhpcy0+YnVmZmVyXyA9IDA7 Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IFQgKgpU QU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3ZhciwgTUFYPjo6YWxsb2NidWYgKENPUkJB OjpVTG9uZykKewogIFQgKmJ1ZiA9IDA7CgogIGRvIHsgdHJ5IHsgYnVmID0gbmV3IFRbTUFYXTsg fSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyBy ZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKCgoKICByZXR1cm4gYnVmOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+ClRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNl PFQsIFRfdmFyLCBNQVg+OjoKVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2UgKGNvbnN0IFRBT19C b3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+ICZyaHMpCiAgOiBUQU9fQm91bmRl ZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsKICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAg ICAgVCAqdG1wMSA9CiAgICAgICAgVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIs IE1BWD46OmFsbG9jYnVmIChNQVgpOwoKCgoKICAgICAgY29uc3QgVCAqdG1wMiA9IHJlaW50ZXJw cmV0X2Nhc3Q8Y29uc3QgVCAqPiAocmhzLmJ1ZmZlcl8pOwoKCgogICAgICBmb3IgKENPUkJBOjpV TG9uZyBpID0gMDsgaSA8IHJocy5sZW5ndGhfOyBpKyspCiAgICAgICAgewogICAgICAgICAgVF92 YXI6OmNvcHkgKHRtcDFbaV0sIHRtcDJbaV0pOwogICAgICAgIH0KCiAgICAgIHRoaXMtPmJ1ZmZl cl8gPSB0bXAxOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAg ICB9Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPgpUQU9fQm91 bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3ZhciwgTUFYPjo6flRBT19Cb3VuZGVkX0FycmF5X1Nl cXVlbmNlICh2b2lkKQp7CiAgdGhpcy0+X2RlYWxsb2NhdGVfYnVmZmVyICgpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IFRBT19Cb3VuZGVkX0FycmF5X1Nl cXVlbmNlPFQsIFRfdmFyLCBNQVg+JgpUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zh ciwgTUFYPjo6b3BlcmF0b3I9Cihjb25zdCBUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBU X3ZhciwgTUFYPiAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAqdGhpczsK CiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewoKCiAgICB9CiAgZWxzZQogICAgewogICAgICBp ZiAocmhzLm1heGltdW1fID09IDApCiAgICAgICAgewogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9 IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdGhpcy0+YnVmZmVy XyA9CiAgICAgICAgICAgIFRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsVF92YXIsTUFYPjo6 YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgICAgfQogICAgfQoKICBUQU9fQm91bmRlZF9C YXNlX1NlcXVlbmNlOjpvcGVyYXRvcj0gKHJocyk7CgogIGZvciAoQ09SQkE6OlVMb25nIGkgPSAw OyBpIDwgcmhzLmxlbmd0aF87ICsraSkKICAgIHsKCgoKCiAgICAgIFRfdmFyOjpjb3B5IChyZWlu dGVycHJldF9jYXN0PFQgKj4gKHRoaXMtPmJ1ZmZlcl8pW2ldLAoKICAgICAgICAgICAgICAgICAg IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCAqPiAocmhzLmJ1ZmZlcl8pW2ldKTsKCgogICAgfQoK ICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3Qg TUFYPiB2b2lkClRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+OjpfYWxs b2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKQp7CgoKICB0aGlzLT5idWZmZXJfID0K ICAgIFRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+OjphbGxvY2J1ZiAo bGVuZ3RoKTsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IHZv aWQKVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIsIE1BWD46Ol9kZWFsbG9jYXRl X2J1ZmZlciAodm9pZCkKewogIGlmICh0aGlzLT5idWZmZXJfID09IDAgfHwgdGhpcy0+cmVsZWFz ZV8gPT0gMCkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQoKCgoKICBUICp0bXAgPSByZWludGVy cHJldF9jYXN0PFQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKCgogIFRBT19Cb3VuZGVkX0FycmF5X1Nl cXVlbmNlPFQsIFRfdmFyLCBNQVg+OjpmcmVlYnVmICh0bXApOwoKICB0aGlzLT5idWZmZXJfID0g MDsKfQoKCgoKCnRlbXBsYXRlPHNpemVfdCBNQVg+ClRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5j ZTxNQVg+OjoKVEFPX0JvdW5kZWRfU3RyaW5nX1NlcXVlbmNlICh2b2lkKQogIDogVEFPX0JvdW5k ZWRfQmFzZV9TZXF1ZW5jZSAoTUFYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRB T19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+OjphbGxvY2J1ZihNQVgpKQp7Cn0KCnRlbXBs YXRlPHNpemVfdCBNQVg+ClRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+OjoKVEFPX0Jv dW5kZWRfU3RyaW5nX1NlcXVlbmNlIChjb25zdCBUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8 TUFYPiAmcmhzKQogIDogVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZSAocmhzKQp7CiAgaWYgKHJo cy5idWZmZXJfICE9IDApCiAgICB7CiAgICAgIGNoYXIgKip0bXAxID0KICAgICAgICBUQU9fQm91 bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPjo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1fKTsKCiAg ICAgIGNoYXIgKiogY29uc3QgdG1wMiA9CiAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyICoq PiAocmhzLmJ1ZmZlcl8pOwoKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGk9MDsgaSA8IHJocy5s ZW5ndGhfOyBpKyspCiAgICAgICAgewogICAgICAgICAgdG1wMVtpXSA9IENPUkJBOjpzdHJpbmdf ZHVwICh0bXAyW2ldKTsKICAgICAgICB9CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAg IH0KICBlbHNlCiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgfQp9Cgp0ZW1wbGF0 ZTxzaXplX3QgTUFYPiBUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPiYKVEFPX0JvdW5k ZWRfU3RyaW5nX1NlcXVlbmNlPE1BWD46Om9wZXJhdG9yPQooY29uc3QgVEFPX0JvdW5kZWRfU3Ry aW5nX1NlcXVlbmNlPE1BWD4gJnJocykKewogIGlmICh0aGlzID09ICZyaHMpCiAgICByZXR1cm4g KnRoaXM7CgogIGlmICh0aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAgY2hhciAqKnRtcCA9IHJl aW50ZXJwcmV0X2Nhc3Q8Y2hhciAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKICAgICAgZm9yIChDT1JC QTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgewogICAgICAg ICAgQ09SQkE6OnN0cmluZ19mcmVlICh0bXBbaV0pOwogICAgICAgICAgdG1wW2ldID0gMDsKICAg ICAgICB9CgoKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGlmIChyaHMubWF4aW11bV8gPT0gMCkK ICAgICAgICB7CiAgICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB9CiAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICB0aGlzLT5idWZmZXJfID0KICAgICAgICAgICAgVEFPX0Jv dW5kZWRfU3RyaW5nX1NlcXVlbmNlPE1BWD46OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAg ICAgIH0KICAgIH0KCiAgVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMp OwoKICBjaGFyICoqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqKj4gKHRoaXMtPmJ1ZmZl cl8pOwogIGNoYXIgKiogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqKj4gKHJo cy5idWZmZXJfKTsKCgogIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87 IGkrKykKICAgIHRtcDFbaV0gPSBDT1JCQTo6c3RyaW5nX2R1cCAodG1wMltpXSk7CiAgcmV0dXJu ICp0aGlzOwp9Cgp0ZW1wbGF0ZTxzaXplX3QgTUFYPiBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdl cgpUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVM b25nIHNsb3QpIGNvbnN0CnsKICBkbyB7IGlmKCEoc2xvdCA8IHRoaXMtPm1heGltdW1fKSkgeyBp bnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2Vf X18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmNwcCIsIDE0 MjYsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3Ry ZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwg IkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4l YVxuIiwgInNsb3QgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICBjaGFy ICoqY29uc3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyICoqPiAodGhpcy0+YnVmZmVyXyk7 CgogIHJldHVybiBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlciAodG1wICsgc2xvdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnJlbGVhc2VfKTsKfQoKdGVtcGxh dGU8c2l6ZV90IE1BWD4gY2hhciAqKgpUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPjo6 YWxsb2NidWYgKENPUkJBOjpVTG9uZykKewogIGNoYXIgKipidWYgPSAwOwoKICBkbyB7IHRyeSB7 IGJ1ZiA9IG5ldyBjaGFyICpbTUFYXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vy cm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKCiAgZm9yIChD T1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBNQVg7IGkrKykKICAgIGJ1ZltpXSA9IDA7CgogIHJldHVy biBidWY7Cn0KCnRlbXBsYXRlPHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfU3RyaW5nX1Nl cXVlbmNlPE1BWD46OmZyZWVidWYgKGNoYXIqICpidWZmZXIpCnsKCgoKCiAgZm9yIChDT1JCQTo6 VUxvbmcgaSA9IDA7IGkgPCBNQVg7ICsraSkKICAgIHsKICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAw KQogICAgICAgIHsKICAgICAgICAgIENPUkJBOjpzdHJpbmdfZnJlZSAoYnVmZmVyW2ldKTsKICAg ICAgICAgIGJ1ZmZlcltpXSA9IDA7CiAgICAgICAgfQogICAgfQoKICBkZWxldGUgW10gYnVmZmVy Owp9Cgp0ZW1wbGF0ZTxzaXplX3QgTUFYPiB2b2lkClRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5j ZTxNQVg+OjpfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgKQp7CgoKICB0aGlzLT5idWZm ZXJfID0KICAgIFRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+OjphbGxvY2J1ZiAoTUFY KTsKfQoKdGVtcGxhdGU8c2l6ZV90IE1BWD4gdm9pZApUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVu Y2U8TUFYPjo6X2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKQp7CiAgaWYgKHRoaXMtPnJlbGVhc2Vf ID09IDApCiAgICByZXR1cm47CiAgY2hhciAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAq Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogIFRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+Ojpm cmVlYnVmICh0bXApOwogIHRoaXMtPmJ1ZmZlcl8gPSAwOwp9Cgp0ZW1wbGF0ZTxzaXplX3QgTUFY PiB2b2lkClRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+Ojpfc2hyaW5rX2J1ZmZlciAo Q09SQkE6OlVMb25nIG5sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENPUkJBOjpVTG9uZyBvbCkKewogIGNoYXIgKip0bXAgPSByZWludGVycHJldF9j YXN0PGNoYXIgKio+ICh0aGlzLT5idWZmZXJfKTsKCgogIGZvciAoQ09SQkE6OlVMb25nIGkgPSBu bDsgaSA8IG9sOyArK2kpCiAgICB7CiAgICAgIENPUkJBOjpzdHJpbmdfZnJlZSAodG1wW2ldKTsK ICAgICAgdG1wW2ldID0gMDsKICAgIH0KfQoKCgoKCnRlbXBsYXRlPHNpemVfdCBNQVg+ClRBT19C b3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8TUFYPjo6ClRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVu Y2UgKHZvaWQpCiAgOiBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlIChNQVgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTxNQVg+Ojph bGxvY2J1ZihNQVgpKQp7Cn0KCnRlbXBsYXRlPHNpemVfdCBNQVg+ClRBT19Cb3VuZGVkX1dTdHJp bmdfU2VxdWVuY2U8TUFYPjo6ClRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2UgKGNvbnN0IFRB T19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8TUFYPiAmcmhzKQogIDogVEFPX0JvdW5kZWRfQmFz ZV9TZXF1ZW5jZSAocmhzKQp7CiAgaWYgKHJocy5idWZmZXJfICE9IDApCiAgICB7CiAgICAgIENP UkJBOjpXQ2hhciAqKnRtcDEgPQogICAgICAgIFRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8 TUFYPjo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1fKTsKCiAgICAgIENPUkJBOjpXQ2hhciAqKiBj b25zdCB0bXAyID0KICAgICAgICByZWludGVycHJldF9jYXN0PENPUkJBOjpXQ2hhciAqKj4gKHJo cy5idWZmZXJfKTsKCgogICAgICBmb3IgKENPUkJBOjpVTG9uZyBpPTA7IGkgPCByaHMubGVuZ3Ro XzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHRtcDFbaV0gPSBDT1JCQTo6d3N0cmluZ19kdXAg KHRtcDJbaV0pOwogICAgICAgIH0KCiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSB0bXAxOwogICAgfQog IGVsc2UKICAgIHsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9Cn0KCnRlbXBsYXRlPHNp emVfdCBNQVg+IFRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8TUFYPiYKVEFPX0JvdW5kZWRf V1N0cmluZ19TZXF1ZW5jZTxNQVg+OjpvcGVyYXRvcj0KKGNvbnN0IFRBT19Cb3VuZGVkX1dTdHJp bmdfU2VxdWVuY2U8TUFYPiAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAq dGhpczsKCiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBDT1JCQTo6V0NoYXIgKip0 bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpXQ2hhciAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwoK CiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQog ICAgICAgIHsKICAgICAgICAgIENPUkJBOjp3c3RyaW5nX2ZyZWUgKHRtcFtpXSk7CiAgICAgICAg ICB0bXBbaV0gPSAwOwogICAgICAgIH0KCgogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKHJo cy5tYXhpbXVtXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwog ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQog ICAgICAgICAgICBUQU9fQm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlPE1BWD46OmFsbG9jYnVmIChy aHMubWF4aW11bV8pOwogICAgICAgIH0KICAgIH0KCiAgVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5j ZTo6b3BlcmF0b3I9IChyaHMpOwoKICBDT1JCQTo6V0NoYXIgKip0bXAxID0gcmVpbnRlcnByZXRf Y2FzdDxDT1JCQTo6V0NoYXIgKio+ICh0aGlzLT5idWZmZXJfKTsKCiAgQ09SQkE6OldDaGFyICoq IGNvbnN0IHRtcDIgPQogICAgcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6V0NoYXIgKio+IChyaHMu YnVmZmVyXyk7CgoKICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHJocy5sZW5ndGhfOyBp KyspCiAgICB0bXAxW2ldID0gQ09SQkE6OndzdHJpbmdfZHVwICh0bXAyW2ldKTsKICByZXR1cm4g KnRoaXM7Cn0KCnRlbXBsYXRlPHNpemVfdCBNQVg+IFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdl cgpUQU9fQm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlPE1BWD46Om9wZXJhdG9yW10gKENPUkJBOjpV TG9uZyBzbG90KSBjb25zdAp7CiAgZG8geyBpZighKHNsb3QgPCB0aGlzLT5tYXhpbXVtXykpIHsg aW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNl X19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5jcHAiLCAx NTg2LCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0 cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1Is ICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycu JWFcbiIsICJzbG90IDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgQ09S QkE6OldDaGFyICoqY29uc3QgdG1wID0KICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OldDaGFy ICoqPiAodGhpcy0+YnVmZmVyXyk7CgogIHJldHVybiBUQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFn ZXIgKHRtcCArIHNsb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp cy0+cmVsZWFzZV8pOwp9Cgp0ZW1wbGF0ZTxzaXplX3QgTUFYPiBDT1JCQTo6V0NoYXIgKioKVEFP X0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTxNQVg+OjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nKQp7 CiAgQ09SQkE6OldDaGFyICoqYnVmID0gMDsKCiAgZG8geyB0cnkgeyBidWYgPSBuZXcgQ09SQkE6 OldDaGFyICpbTUFYXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKCiAgZm9yIChDT1JCQTo6VUxv bmcgaSA9IDA7IGkgPCBNQVg7IGkrKykKICAgIGJ1ZltpXSA9IDA7CgogIHJldHVybiBidWY7Cn0K CnRlbXBsYXRlPHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTxN QVg+OjpmcmVlYnVmIChDT1JCQTo6V0NoYXIqICpidWZmZXIpCnsKCgoKCiAgZm9yIChDT1JCQTo6 VUxvbmcgaSA9IDA7IGkgPCBNQVg7ICsraSkKICAgIHsKICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAw KQogICAgICAgIHsKICAgICAgICAgIENPUkJBOjp3c3RyaW5nX2ZyZWUgKGJ1ZmZlcltpXSk7CiAg ICAgICAgICBidWZmZXJbaV0gPSAwOwogICAgICAgIH0KICAgIH0KCiAgZGVsZXRlIFtdIGJ1ZmZl cjsKfQoKdGVtcGxhdGU8c2l6ZV90IE1BWD4gdm9pZApUQU9fQm91bmRlZF9XU3RyaW5nX1NlcXVl bmNlPE1BWD46Ol9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9uZyApCnsKCgogIHRoaXMtPmJ1 ZmZlcl8gPQogICAgVEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTxNQVg+OjphbGxvY2J1ZiAo TUFYKTsKfQoKdGVtcGxhdGU8c2l6ZV90IE1BWD4gdm9pZApUQU9fQm91bmRlZF9XU3RyaW5nX1Nl cXVlbmNlPE1BWD46Ol9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCkKewogIGlmICh0aGlzLT5yZWxl YXNlXyA9PSAwKQogICAgcmV0dXJuOwogIENPUkJBOjpXQ2hhciAqKnRtcCA9IHJlaW50ZXJwcmV0 X2Nhc3Q8Q09SQkE6OldDaGFyICoqPiAodGhpcy0+YnVmZmVyXyk7CgogIFRBT19Cb3VuZGVkX1dT dHJpbmdfU2VxdWVuY2U8TUFYPjo6ZnJlZWJ1ZiAodG1wKTsKICB0aGlzLT5idWZmZXJfID0gMDsK fQoKdGVtcGxhdGU8c2l6ZV90IE1BWD4gdm9pZApUQU9fQm91bmRlZF9XU3RyaW5nX1NlcXVlbmNl PE1BWD46Ol9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxvbmcgbmwsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvbCkKewogIENP UkJBOjpXQ2hhciAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OldDaGFyICoqPiAodGhp cy0+YnVmZmVyXyk7CgoKICBmb3IgKENPUkJBOjpVTG9uZyBpID0gbmw7IGkgPCBvbDsgKytpKQog ICAgewogICAgICBDT1JCQTo6d3N0cmluZ19mcmVlICh0bXBbaV0pOwogICAgICB0bXBbaV0gPSAw OwogICAgfQp9CiMgMTE2NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiIDIKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMTE3MiAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiIDIKIyA2 MzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2Vx dWVuY2UuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvcG9zdC5oIiAxCiMgNjM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDIKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PY3RldFNlcUMuaCIgMgojIDYwICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09jdGV0U2VxQy5oIgog IGNsYXNzIENPUkJBX09jdGV0U2VxOwogIGNsYXNzIENPUkJBX09jdGV0U2VxX3ZhcjsKCgoKCgog IGNsYXNzIENPUkJBX09jdGV0U2VxIDogcHVibGljCgogICAgVEFPX1VuYm91bmRlZF9TZXF1ZW5j ZTxDT1JCQTo6T2N0ZXQ+CgoKCiAgewogIHB1YmxpYzoKICAgIENPUkJBX09jdGV0U2VxICh2b2lk KTsKICAgIENPUkJBX09jdGV0U2VxIChDT1JCQTo6VUxvbmcgbWF4KTsKICAgIENPUkJBX09jdGV0 U2VxICgKICAgICAgQ09SQkE6OlVMb25nIG1heCwKICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwK ICAgICAgQ09SQkE6Ok9jdGV0ICpidWZmZXIsCiAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2Ug PSAwCiAgICApOwogICAgQ09SQkFfT2N0ZXRTZXEgKGNvbnN0IENPUkJBX09jdGV0U2VxICYpOwog ICAgfkNPUkJBX09jdGV0U2VxICh2b2lkKTsKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3Ry dWN0b3IgKHZvaWQqKTsKCgogICAgdHlwZWRlZiBDT1JCQV9PY3RldFNlcV92YXIgX3Zhcl90eXBl OwoKCgoKICAgIENPUkJBX09jdGV0U2VxICgKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAog ICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrKiBtYgogICAgICApCiAgICAgIDogVEFPX1Vu Ym91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+IChsZW5ndGgsIG1iKSB7fQoKCiAgfTsKIyAx MTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2N0 ZXRTZXFDLmgiCiAgY2xhc3MgQ09SQkFfT2N0ZXRTZXFfdmFyCiAgewogIHB1YmxpYzoKICAgIENP UkJBX09jdGV0U2VxX3ZhciAodm9pZCk7CiAgICBDT1JCQV9PY3RldFNlcV92YXIgKENPUkJBX09j dGV0U2VxICopOwogICAgQ09SQkFfT2N0ZXRTZXFfdmFyIChjb25zdCBDT1JCQV9PY3RldFNlcV92 YXIgJik7CiAgICBDT1JCQV9PY3RldFNlcV92YXIgKGNvbnN0IENPUkJBX09jdGV0U2VxICYpOwog ICAgfkNPUkJBX09jdGV0U2VxX3ZhciAodm9pZCk7CgogICAgQ09SQkFfT2N0ZXRTZXFfdmFyICZv cGVyYXRvcj0gKENPUkJBX09jdGV0U2VxICopOwogICAgQ09SQkFfT2N0ZXRTZXFfdmFyICZvcGVy YXRvcj0gKGNvbnN0IENPUkJBX09jdGV0U2VxX3ZhciAmKTsKICAgIENPUkJBX09jdGV0U2VxX3Zh ciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9PY3RldFNlcSAmKTsKICAgIENPUkJBX09jdGV0U2Vx ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IENPUkJBX09jdGV0U2VxICpvcGVyYXRvci0+ ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBDT1JCQV9PY3RldFNlcSAmKCkgY29u c3Q7CiAgICBvcGVyYXRvciBDT1JCQV9PY3RldFNlcSAmKCk7CiAgICBvcGVyYXRvciBDT1JCQV9P Y3RldFNlcSAmKCkgY29uc3Q7CgogICAgQ09SQkE6Ok9jdGV0ICYgb3BlcmF0b3JbXSAoQ09SQkE6 OlVMb25nIGluZGV4KTsKICAgIGNvbnN0IENPUkJBOjpPY3RldCAmIG9wZXJhdG9yW10gKENPUkJB OjpVTG9uZyBpbmRleCkgY29uc3Q7CgoKICAgIGNvbnN0IENPUkJBX09jdGV0U2VxICZpbiAodm9p ZCkgY29uc3Q7CiAgICBDT1JCQV9PY3RldFNlcSAmaW5vdXQgKHZvaWQpOwogICAgQ09SQkFfT2N0 ZXRTZXEgKiZvdXQgKHZvaWQpOwogICAgQ09SQkFfT2N0ZXRTZXEgKl9yZXRuICh2b2lkKTsKICAg IENPUkJBX09jdGV0U2VxICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgQ09SQkFf T2N0ZXRTZXEgKnB0cl87CiAgfTsKIyAxNTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vT2N0ZXRTZXFDLmgiCiAgY2xhc3MgQ09SQkFfT2N0ZXRTZXFf b3V0CiAgewogIHB1YmxpYzoKICAgIENPUkJBX09jdGV0U2VxX291dCAoQ09SQkFfT2N0ZXRTZXEg KiYpOwogICAgQ09SQkFfT2N0ZXRTZXFfb3V0IChDT1JCQV9PY3RldFNlcV92YXIgJik7CiAgICBD T1JCQV9PY3RldFNlcV9vdXQgKGNvbnN0IENPUkJBX09jdGV0U2VxX291dCAmKTsKICAgIENPUkJB X09jdGV0U2VxX291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9PY3RldFNlcV9vdXQgJik7CiAg ICBDT1JCQV9PY3RldFNlcV9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfT2N0ZXRTZXEgKik7CiAgICBv cGVyYXRvciBDT1JCQV9PY3RldFNlcSAqJigpOwogICAgQ09SQkFfT2N0ZXRTZXEgKiZwdHIgKHZv aWQpOwogICAgQ09SQkFfT2N0ZXRTZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgQ09SQkE6Ok9j dGV0ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCiAgcHJpdmF0ZToKICAgIENP UkJBX09jdGV0U2VxIComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFfT2N0 ZXRTZXFfdmFyICYpOwogIH07CgoKCgoKCiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09S QkE6OkFueSAmLCBjb25zdCBDT1JCQV9PY3RldFNlcSAmKTsKICAgICAgICAgICB2b2lkIG9wZXJh dG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX09jdGV0U2VxKik7CiAgICAgICAgICAgQ09SQkE6 OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgQ09SQkFfT2N0ZXRTZXEg KiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6 QW55ICYsIGNvbnN0IENPUkJBX09jdGV0U2VxIComKTsKIyAyMDMgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2N0ZXRTZXFDLmgiCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PY3RldFNlcUMuaSIg MQojIDMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L09jdGV0U2VxQy5pIgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFfdmFyOjpDT1JCQV9PY3RldFNlcV92 YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX09jdGV0U2VxX3Zhcjo6Q09S QkFfT2N0ZXRTZXFfdmFyIChDT1JCQV9PY3RldFNlcSAqcCkKICA6IHB0cl8gKHApCnt9Cgppbmxp bmUKQ09SQkFfT2N0ZXRTZXFfdmFyOjpDT1JCQV9PY3RldFNlcV92YXIgKGNvbnN0IDo6Q09SQkFf T2N0ZXRTZXFfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRy XyA9IG5ldyA6OkNPUkJBX09jdGV0U2VxICgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxs b2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7 CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0KCgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFfdmFy OjpDT1JCQV9PY3RldFNlcV92YXIgKGNvbnN0IDo6Q09SQkFfT2N0ZXRTZXEgJnApCnsKICBkbyB7 IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpDT1JCQV9PY3RldFNlcSAocCk7IH0gY2F0Y2ggKHN0 ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0g d2hpbGUgKDApOwp9CgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFfdmFyOjp+Q09SQkFfT2N0ZXRTZXFf dmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9PY3RldFNl cV92YXIgJgpDT1JCQV9PY3RldFNlcV92YXI6Om9wZXJhdG9yPSAoQ09SQkFfT2N0ZXRTZXEgKnAp CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7 Cn0KCmlubGluZSA6OkNPUkJBX09jdGV0U2VxX3ZhciAmCkNPUkJBX09jdGV0U2VxX3Zhcjo6b3Bl cmF0b3I9IChjb25zdCA6OkNPUkJBX09jdGV0U2VxX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZw KQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRl IHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICBDT1JCQV9PY3RldFNlcSAqZGVlcF9jb3B5ID0KICAgICAg ICAgICAgbmV3IENPUkJBX09jdGV0U2VxICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9j b3B5ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBDT1JCQV9PY3RldFNlcSAqdG1w ID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAg ICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCgppbmxp bmUgOjpDT1JCQV9PY3RldFNlcV92YXIgJgpDT1JCQV9PY3RldFNlcV92YXI6Om9wZXJhdG9yPSAo Y29uc3QgOjpDT1JCQV9PY3RldFNlcSAmcCkKewogIGlmICh0aGlzLT5wdHJfICE9ICZwKQogIHsK ICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6 Q09SQkFfT2N0ZXRTZXEgKHApOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9f bG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAqdGhpczsgfSB9IHdoaWxlICgwKTsKICB9CiAgcmV0 dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3QgOjpDT1JCQV9PY3RldFNlcSAqCkNPUkJBX09jdGV0 U2VxX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9 CgppbmxpbmUgOjpDT1JCQV9PY3RldFNlcSAqCkNPUkJBX09jdGV0U2VxX3Zhcjo6b3BlcmF0b3It PiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFf dmFyOjpvcGVyYXRvciBjb25zdCA6OkNPUkJBX09jdGV0U2VxICYoKSBjb25zdAp7CiAgcmV0dXJu ICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFfdmFyOjpvcGVyYXRvciA6OkNP UkJBX09jdGV0U2VxICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFf T2N0ZXRTZXFfdmFyOjpvcGVyYXRvciA6OkNPUkJBX09jdGV0U2VxICYoKSBjb25zdAp7CiAgcmV0 dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6Ok9jdGV0ICYKQ09SQkFfT2N0ZXRTZXFf dmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRy Xy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3QgQ09SQkE6Ok9jdGV0ICYKQ09S QkFfT2N0ZXRTZXFfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpIGNvbnN0CnsK ICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBDT1JCQTo6T2N0ZXQgJj4gKHRoaXMtPnB0cl8tPm9w ZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGluZSBjb25zdCA6OkNPUkJBX09jdGV0U2VxICYKQ09S QkFfT2N0ZXRTZXFfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsK fQoKaW5saW5lIDo6Q09SQkFfT2N0ZXRTZXEgJgpDT1JCQV9PY3RldFNlcV92YXI6Omlub3V0ICh2 b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6Q09SQkFfT2N0ZXRTZXEg KiYKQ09SQkFfT2N0ZXRTZXFfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsK ICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6Q09SQkFf T2N0ZXRTZXEgKgpDT1JCQV9PY3RldFNlcV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpDT1JCQV9P Y3RldFNlcSAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdG1w Owp9CgppbmxpbmUgOjpDT1JCQV9PY3RldFNlcSAqCkNPUkJBX09jdGV0U2VxX3Zhcjo6cHRyICh2 b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKQ09SQkFfT2N0 ZXRTZXFfb3V0OjpDT1JCQV9PY3RldFNlcV9vdXQgKENPUkJBX09jdGV0U2VxIComcCkKICA6IHB0 cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX09jdGV0U2VxX291dDo6 Q09SQkFfT2N0ZXRTZXFfb3V0IChDT1JCQV9PY3RldFNlcV92YXIgJnApCiAgOiBwdHJfIChwLm91 dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUK Q09SQkFfT2N0ZXRTZXFfb3V0OjpDT1JCQV9PY3RldFNlcV9vdXQgKGNvbnN0IDo6Q09SQkFfT2N0 ZXRTZXFfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxDT1JCQV9PY3RldFNlcV9vdXQmPiAo cCkucHRyXykKe30KCmlubGluZSA6OkNPUkJBX09jdGV0U2VxX291dCAmCkNPUkJBX09jdGV0U2Vx X291dDo6b3BlcmF0b3I9IChjb25zdCA6OkNPUkJBX09jdGV0U2VxX291dCAmcCkKewogIHRoaXMt PnB0cl8gPSBjb25zdF9jYXN0PENPUkJBX09jdGV0U2VxX291dCY+IChwKS5wdHJfOwogIHJldHVy biAqdGhpczsKfQoKaW5saW5lIDo6Q09SQkFfT2N0ZXRTZXFfb3V0ICYKQ09SQkFfT2N0ZXRTZXFf b3V0OjpvcGVyYXRvcj0gKENPUkJBX09jdGV0U2VxICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAg cmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFfb3V0OjpvcGVyYXRvciA6OkNP UkJBX09jdGV0U2VxIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JC QV9PY3RldFNlcSAqJgpDT1JCQV9PY3RldFNlcV9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9PY3RldFNlcSAqCkNPUkJBX09jdGV0U2VxX291 dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09S QkE6Ok9jdGV0ICYKQ09SQkFfT2N0ZXRTZXFfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcg aW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CiMgMjU2 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09jdGV0 U2VxQy5pIgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwK ICAgIGNvbnN0IENPUkJBX09jdGV0U2VxICYKICApOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgQ09SQkFfT2N0ZXRTZXEgJgogICk7CiMgMjA0ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09jdGV0U2Vx Qy5oIiAyCiMgMjE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL09jdGV0U2VxQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAyMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2N0ZXRTZXFDLmgiIDIKIyAyOCAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9QcmluY2lwYWwuaCIgMgojIDM3 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ByaW5j aXBhbC5oIgpjbGFzcyBDT1JCQV9QcmluY2lwYWwKewpwdWJsaWM6CgoKCiAgQ09SQkE6Ok9jdGV0 U2VxIGlkOwoKCgoKICBzdGF0aWMgQ09SQkFfUHJpbmNpcGFsKiBfZHVwbGljYXRlIChDT1JCQV9Q cmluY2lwYWwqKTsKICBzdGF0aWMgQ09SQkFfUHJpbmNpcGFsKiBfbmlsICh2b2lkKTsKCgogIENP UkJBOjpVTG9uZyBfaW5jcl9yZWZjbnQgKHZvaWQpOwogIENPUkJBOjpVTG9uZyBfZGVjcl9yZWZj bnQgKHZvaWQpOwoKICBDT1JCQV9QcmluY2lwYWwgKHZvaWQpOwoKCiAgdHlwZWRlZiBDT1JCQV9Q cmluY2lwYWxfcHRyIF9wdHJfdHlwZTsKICB0eXBlZGVmIENPUkJBX1ByaW5jaXBhbF92YXIgX3Zh cl90eXBlOwoKCgpwcml2YXRlOgogIH5DT1JCQV9QcmluY2lwYWwgKHZvaWQpOwoKCiAgQ09SQkFf UHJpbmNpcGFsICZvcGVyYXRvciA9IChjb25zdCBDT1JCQTo6UHJpbmNpcGFsX3B0ciAmKTsKICBD T1JCQV9QcmluY2lwYWwgKGNvbnN0IENPUkJBOjpQcmluY2lwYWxfcHRyICYpOwoKcHJpdmF0ZToK CiAgQ09SQkE6OlVMb25nIHJlZmNvdW50XzsKCgoKICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIHJlZmNv dW50X211dGV4XzsKCgoKCiAgZnJpZW5kIGNsYXNzIGV2ZXJ5b25lX25lZWRzX2FfZnJpZW5kOwoK fTsKIyA5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9QcmluY2lwYWwuaCIKY2xhc3MgQ09SQkFfUHJpbmNpcGFsX3Zhcgp7CnB1YmxpYzoKICBDT1JC QV9QcmluY2lwYWxfdmFyICh2b2lkKTsKICBDT1JCQV9QcmluY2lwYWxfdmFyIChDT1JCQV9Qcmlu Y2lwYWxfcHRyKTsKICBDT1JCQV9QcmluY2lwYWxfdmFyIChjb25zdCBDT1JCQV9QcmluY2lwYWxf dmFyICYpOwogIH5DT1JCQV9QcmluY2lwYWxfdmFyICh2b2lkKTsKCiAgQ09SQkFfUHJpbmNpcGFs X3ZhciAmb3BlcmF0b3I9IChDT1JCQV9QcmluY2lwYWxfcHRyKTsKICBDT1JCQV9QcmluY2lwYWxf dmFyICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX1ByaW5jaXBhbF92YXIgJik7CiAgQ09SQkFfUHJp bmNpcGFsX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCgogIG9wZXJhdG9yIGNvbnN0IENP UkJBX1ByaW5jaXBhbF9wdHIgJigpIGNvbnN0OwogIG9wZXJhdG9yIENPUkJBX1ByaW5jaXBhbF9w dHIgJigpOwogIENPUkJBX1ByaW5jaXBhbF9wdHIgaW4gKHZvaWQpIGNvbnN0OwogIENPUkJBX1By aW5jaXBhbF9wdHIgJmlub3V0ICh2b2lkKTsKICBDT1JCQV9QcmluY2lwYWxfcHRyICZvdXQgKHZv aWQpOwogIENPUkJBX1ByaW5jaXBhbF9wdHIgX3JldG4gKHZvaWQpOwogIENPUkJBX1ByaW5jaXBh bF9wdHIgcHRyICh2b2lkKSBjb25zdDsKCnByaXZhdGU6CiAgQ09SQkFfUHJpbmNpcGFsX3B0ciBw dHJfOwp9OwojIDEzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9QcmluY2lwYWwuaCIKY2xhc3MgQ09SQkFfUHJpbmNpcGFsX291dAp7CnB1YmxpYzoK ICBDT1JCQV9QcmluY2lwYWxfb3V0IChDT1JCQV9QcmluY2lwYWxfcHRyICYpOwogIENPUkJBX1By aW5jaXBhbF9vdXQgKENPUkJBX1ByaW5jaXBhbF92YXIgJik7CiAgQ09SQkFfUHJpbmNpcGFsX291 dCAoQ09SQkFfUHJpbmNpcGFsX291dCAmKTsKICBDT1JCQV9QcmluY2lwYWxfb3V0ICZvcGVyYXRv cj0gKENPUkJBX1ByaW5jaXBhbF9vdXQgJik7CiAgQ09SQkFfUHJpbmNpcGFsX291dCAmb3BlcmF0 b3I9IChjb25zdCBDT1JCQV9QcmluY2lwYWxfdmFyICYpOwogIENPUkJBX1ByaW5jaXBhbF9vdXQg Jm9wZXJhdG9yPSAoQ09SQkFfUHJpbmNpcGFsX3B0cik7CiAgb3BlcmF0b3IgQ09SQkFfUHJpbmNp cGFsX3B0ciAmKCk7CiAgQ09SQkFfUHJpbmNpcGFsX3B0ciAmcHRyICh2b2lkKTsKICBDT1JCQV9Q cmluY2lwYWxfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKcHJpdmF0ZToKICBDT1JCQV9QcmluY2lw YWxfcHRyICZwdHJfOwp9OwoKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvcjw8IChU QU9fT3V0cHV0Q0RSJiwgQ09SQkFfUHJpbmNpcGFsKik7CgogICAgICAgICAgIENPUkJBOjpCb29s ZWFuCm9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiYsIENPUkJBX1ByaW5jaXBhbComKTsKCgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUHJpbmNp cGFsLmkiIDEKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KQ09SQkE6OmlzX25pbCAoQ09SQkE6OlBy aW5jaXBhbF9wdHIgcHJpbmNpcGFsKQp7CiAgcmV0dXJuIChDT1JCQTo6Qm9vbGVhbikgKHByaW5j aXBhbCA9PSAwKTsKfQoKaW5saW5lIENPUkJBOjpVTG9uZwpDT1JCQV9QcmluY2lwYWw6Ol9kZWNy X3JlZmNudCAodm9pZCkKewogIHsKICAgIHRoaXMtPnJlZmNvdW50Xy0tOwogICAgaWYgKHRoaXMt PnJlZmNvdW50XyAhPSAwKQogICAgICByZXR1cm4gdGhpcy0+cmVmY291bnRfOwogIH0KCiAgZGVs ZXRlIHRoaXM7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpyZWxlYXNlIChDT1JC QTo6UHJpbmNpcGFsX3B0ciBwcmluY2lwYWwpCnsKICBpZiAocHJpbmNpcGFsKQogICAgcHJpbmNp cGFsLT5fZGVjcl9yZWZjbnQgKCk7Cn0KCmlubGluZSBDT1JCQTo6VUxvbmcKQ09SQkFfUHJpbmNp cGFsOjpfaW5jcl9yZWZjbnQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cmVmY291bnRfKys7Cn0K CgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsKgpDT1JCQV9QcmluY2lwYWw6Ol9kdXBsaWNhdGUgKENP UkJBX1ByaW5jaXBhbCogeCkKewogIGlmICh4ICE9IDApCiAgICB4LT5faW5jcl9yZWZjbnQgKCk7 CiAgcmV0dXJuIHg7Cn0KCgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsKgpDT1JCQV9QcmluY2lwYWw6 Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKCgoKCmlubGluZQpDT1JCQV9QcmluY2lwYWxf dmFyOjpDT1JCQV9QcmluY2lwYWxfdmFyICh2b2lkKQogIDogcHRyXyAoQ09SQkFfUHJpbmNpcGFs OjpfbmlsICgpKQp7Cn0KCmlubGluZQpDT1JCQV9QcmluY2lwYWxfdmFyOjpDT1JCQV9QcmluY2lw YWxfdmFyIChDT1JCQV9QcmluY2lwYWxfcHRyIHApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCkNP UkJBX1ByaW5jaXBhbF92YXI6On5DT1JCQV9QcmluY2lwYWxfdmFyICh2b2lkKQp7CiAgQ09SQkE6 OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwp9CgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsX3B0cgpDT1JC QV9QcmluY2lwYWxfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsK fQoKaW5saW5lCkNPUkJBX1ByaW5jaXBhbF92YXI6OkNPUkJBX1ByaW5jaXBhbF92YXIgKGNvbnN0 IENPUkJBX1ByaW5jaXBhbF92YXIgJnApCiAgOiBwdHJfIChDT1JCQV9QcmluY2lwYWw6Ol9kdXBs aWNhdGUgKHAucHRyICgpKSkKe30KCmlubGluZSBDT1JCQV9QcmluY2lwYWxfdmFyICYKQ09SQkFf UHJpbmNpcGFsX3Zhcjo6b3BlcmF0b3I9IChDT1JCQV9QcmluY2lwYWxfcHRyIHApCnsKICBDT1JC QTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlz Owp9CgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsX3ZhciAmCkNPUkJBX1ByaW5jaXBhbF92YXI6Om9w ZXJhdG9yPSAoY29uc3QgQ09SQkFfUHJpbmNpcGFsX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZw KQogIHsKICAgIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsKICAgIHRoaXMtPnB0cl8gPSBD T1JCQV9QcmluY2lwYWw6Ol9kdXBsaWNhdGUgKHAucHRyICgpKTsKICB9CiAgcmV0dXJuICp0aGlz Owp9CgppbmxpbmUKQ09SQkFfUHJpbmNpcGFsX3Zhcjo6b3BlcmF0b3IgY29uc3QgQ09SQkFfUHJp bmNpcGFsX3B0ciAmKCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09S QkFfUHJpbmNpcGFsX3Zhcjo6b3BlcmF0b3IgQ09SQkFfUHJpbmNpcGFsX3B0ciAmKCkKewogIHJl dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsX3B0cgpDT1JCQV9Qcmlu Y2lwYWxfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87 Cn0KCmlubGluZSBDT1JCQV9QcmluY2lwYWxfcHRyCkNPUkJBX1ByaW5jaXBhbF92YXI6OmluICh2 b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9QcmluY2lw YWxfcHRyICYKQ09SQkFfUHJpbmNpcGFsX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gdGhp cy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1ByaW5jaXBhbF9wdHIgJgpDT1JCQV9QcmluY2lwYWxf dmFyOjpvdXQgKHZvaWQpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+ cHRyXyA9IENPUkJBX1ByaW5jaXBhbDo6X25pbCAoKTsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK aW5saW5lIENPUkJBX1ByaW5jaXBhbF9wdHIKQ09SQkFfUHJpbmNpcGFsX3Zhcjo6X3JldG4gKHZv aWQpCnsKCiAgQ09SQkFfUHJpbmNpcGFsX3B0ciB2YWwgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0 cl8gPSBDT1JCQV9QcmluY2lwYWw6Ol9uaWwgKCk7CiAgcmV0dXJuIHZhbDsKfQoKCgoKCmlubGlu ZQpDT1JCQV9QcmluY2lwYWxfb3V0OjpDT1JCQV9QcmluY2lwYWxfb3V0IChDT1JCQV9QcmluY2lw YWxfcHRyICZwKQogICAgICAgIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSBDT1JCQV9Qcmlu Y2lwYWw6Ol9uaWwgKCk7Cn0KCmlubGluZQpDT1JCQV9QcmluY2lwYWxfb3V0OjpDT1JCQV9Qcmlu Y2lwYWxfb3V0IChDT1JCQV9QcmluY2lwYWxfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsK ICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IENPUkJBX1ByaW5j aXBhbDo6X25pbCAoKTsKfQoKaW5saW5lCkNPUkJBX1ByaW5jaXBhbF9vdXQ6OkNPUkJBX1ByaW5j aXBhbF9vdXQgKENPUkJBX1ByaW5jaXBhbF9vdXQgJnApCiAgOiBwdHJfIChwLnB0cl8pCnt9Cgpp bmxpbmUgQ09SQkFfUHJpbmNpcGFsX291dCAmCkNPUkJBX1ByaW5jaXBhbF9vdXQ6Om9wZXJhdG9y PSAoQ09SQkFfUHJpbmNpcGFsX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBwLnB0cl87CiAgcmV0 dXJuICp0aGlzOwp9CgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsX291dCAmCkNPUkJBX1ByaW5jaXBh bF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUHJpbmNpcGFsX3ZhciAmcCkKewogIHRoaXMt PnB0cl8gPSBDT1JCQV9QcmluY2lwYWw6Ol9kdXBsaWNhdGUgKHAucHRyICgpKTsKICByZXR1cm4g KnRoaXM7Cn0KCmlubGluZSBDT1JCQV9QcmluY2lwYWxfb3V0ICYKQ09SQkFfUHJpbmNpcGFsX291 dDo6b3BlcmF0b3I9IChDT1JCQV9QcmluY2lwYWxfcHRyIHApCnsKICB0aGlzLT5wdHJfID0gcDsK ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9QcmluY2lwYWxfb3V0OjpvcGVyYXRvciBD T1JCQV9QcmluY2lwYWxfcHRyICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBD T1JCQV9QcmluY2lwYWxfcHRyICYKQ09SQkFfUHJpbmNpcGFsX291dDo6cHRyICh2b2lkKQp7CiAg cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9QcmluY2lwYWxfcHRyCkNPUkJBX1By aW5jaXBhbF9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoj IDE1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q cmluY2lwYWwuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE2MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9QcmluY2lwYWwuaCIgMgojIDQ5ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKIyAxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09SQi5oIiAxCiMgMTkg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgi CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5o IiAxCiMgMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vT1JCLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0aW9uLmgiIDEKIyAyOCAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PUkIuaCIg MgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v U2VydmljZXMuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1NlcnZpY2VzLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VydmljZXMuaCIgMgoKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDEKIyAy MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXJ2 aWNlcy5oIiAyCiMgMzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vU2VydmljZXMuaCIKc3RydWN0IENPUkJBX1NlcnZpY2VEZXRhaWwKewogIHN0YXRp YyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgQ09SQkE6OlNlcnZpY2VEZXRh aWxUeXBlIHNlcnZpY2VfZGV0YWlsX3R5cGU7CiMgNDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VydmljZXMuaCIKICBjbGFzcyBfdGFvX3NlcV9P Y3RldCA6IHB1YmxpYyBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJBOjpPY3RldD4KICB7CiAg ICBwdWJsaWM6CiAgICAgIF90YW9fc2VxX09jdGV0ICh2b2lkKTsKICAgICAgX3Rhb19zZXFfT2N0 ZXQgKENPUkJBOjpVTG9uZyBtYXgpOwogICAgICBfdGFvX3NlcV9PY3RldCAoCiAgICAgICAgICAg ICAgICAgICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAgQ09SQkE6 OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpPY3RldCAqYnVmZmVy LAogICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0wCiAgICAgICAg ICAgICAgICAgICAgICApOwogICAgICBfdGFvX3NlcV9PY3RldCAoY29uc3QgX3Rhb19zZXFfT2N0 ZXQgJik7CiAgICAgIH5fdGFvX3NlcV9PY3RldCAodm9pZCk7CgoKICAgICAgX3Rhb19zZXFfT2N0 ZXQgKAogICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrKiBtYgogICAgICAgICAgICAgICAg ICAgICAgKQogICAgICAgIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+IChs ZW5ndGgsIG1iKSB7fQoKICAgIH07CgogIHN0YXRpYyBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19f dGFvX3NlcV9PY3RldDsKIyA3OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9TZXJ2aWNlcy5oIgogIGNsYXNzIF90YW9fc2VxX09jdGV0X3ZhcgogICAg ewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9PY3RldF92YXIgKHZvaWQpOwogICAgICBfdGFv X3NlcV9PY3RldF92YXIgKF90YW9fc2VxX09jdGV0ICopOwogICAgICBfdGFvX3NlcV9PY3RldF92 YXIgKGNvbnN0IF90YW9fc2VxX09jdGV0X3ZhciAmKTsKICAgICAgfl90YW9fc2VxX09jdGV0X3Zh ciAodm9pZCk7CgogICAgICBfdGFvX3NlcV9PY3RldF92YXIgJm9wZXJhdG9yPSAoX3Rhb19zZXFf T2N0ZXQgKik7CiAgICAgIF90YW9fc2VxX09jdGV0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBfdGFv X3NlcV9PY3RldF92YXIgJik7CiAgICAgIF90YW9fc2VxX09jdGV0ICpvcGVyYXRvci0+ICh2b2lk KTsKICAgICAgY29uc3QgX3Rhb19zZXFfT2N0ZXQgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoK ICAgICAgb3BlcmF0b3IgY29uc3QgX3Rhb19zZXFfT2N0ZXQgJigpIGNvbnN0OwogICAgICBvcGVy YXRvciBfdGFvX3NlcV9PY3RldCAmKCk7CiAgICAgIG9wZXJhdG9yIF90YW9fc2VxX09jdGV0ICYo KSBjb25zdDsKICAgICAgQ09SQkE6Ok9jdGV0ICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xv dCk7CgogICAgICBjb25zdCBfdGFvX3NlcV9PY3RldCAmaW4gKHZvaWQpIGNvbnN0OwogICAgICBf dGFvX3NlcV9PY3RldCAmaW5vdXQgKHZvaWQpOwogICAgICBfdGFvX3NlcV9PY3RldCAqJm91dCAo dm9pZCk7CiAgICAgIF90YW9fc2VxX09jdGV0ICpfcmV0biAodm9pZCk7CiAgICAgIF90YW9fc2Vx X09jdGV0ICpwdHIgKHZvaWQpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIF90YW9fc2VxX09j dGV0ICpwdHJfOwogICAgfTsKCgoKCgoKCiAgICBjbGFzcyBfdGFvX3NlcV9PY3RldF9vdXQKICAg IHsKICAgIHB1YmxpYzoKICAgICAgX3Rhb19zZXFfT2N0ZXRfb3V0IChfdGFvX3NlcV9PY3RldCAq Jik7CiAgICAgIF90YW9fc2VxX09jdGV0X291dCAoX3Rhb19zZXFfT2N0ZXRfdmFyICYpOwogICAg ICBfdGFvX3NlcV9PY3RldF9vdXQgKGNvbnN0IF90YW9fc2VxX09jdGV0X291dCAmKTsKICAgICAg X3Rhb19zZXFfT2N0ZXRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IF90YW9fc2VxX09jdGV0X291dCAm KTsKICAgICAgX3Rhb19zZXFfT2N0ZXRfb3V0ICZvcGVyYXRvcj0gKF90YW9fc2VxX09jdGV0ICop OwogICAgICBvcGVyYXRvciBfdGFvX3NlcV9PY3RldCAqJigpOwogICAgICBfdGFvX3NlcV9PY3Rl dCAqJnB0ciAodm9pZCk7CiAgICAgIF90YW9fc2VxX09jdGV0ICpvcGVyYXRvci0+ICh2b2lkKTsK ICAgICAgQ09SQkE6Ok9jdGV0ICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCk7CgogICAg cHJpdmF0ZToKICAgICAgX3Rhb19zZXFfT2N0ZXQgKiZwdHJfOwoKICAgICAgdm9pZCBvcGVyYXRv cj0gKGNvbnN0IF90YW9fc2VxX09jdGV0X3ZhciAmKTsKICAgIH07CgoKCgogICAgX3Rhb19zZXFf T2N0ZXQgc2VydmljZV9kZXRhaWw7Cn07CgpjbGFzcyBDT1JCQV9TZXJ2aWNlRGV0YWlsX3Zhcgp7 CiBwdWJsaWM6CiAgQ09SQkFfU2VydmljZURldGFpbF92YXIgKHZvaWQpOwogIENPUkJBX1NlcnZp Y2VEZXRhaWxfdmFyIChDT1JCQV9TZXJ2aWNlRGV0YWlsICopOwogIENPUkJBX1NlcnZpY2VEZXRh aWxfdmFyIChjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAmKTsKICB+Q09SQkFfU2Vydmlj ZURldGFpbF92YXIgKHZvaWQpOwoKICBDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAmb3BlcmF0b3I9 IChDT1JCQV9TZXJ2aWNlRGV0YWlsICopOwogIENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICZvcGVy YXRvcj0gKGNvbnN0IENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICYpOwogIENPUkJBX1NlcnZpY2VE ZXRhaWwgKm9wZXJhdG9yLT4gKHZvaWQpOwogIGNvbnN0IENPUkJBX1NlcnZpY2VEZXRhaWwgKm9w ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKCiAgb3BlcmF0b3IgY29uc3QgQ09SQkFfU2VydmljZURl dGFpbCAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfU2VydmljZURldGFpbCAmKCk7CiAgb3Bl cmF0b3IgQ09SQkFfU2VydmljZURldGFpbCAmKCkgY29uc3Q7CiAgY29uc3QgQ09SQkFfU2Vydmlj ZURldGFpbCAmaW4gKHZvaWQpIGNvbnN0OwogIENPUkJBX1NlcnZpY2VEZXRhaWwgJmlub3V0ICh2 b2lkKTsKICBDT1JCQV9TZXJ2aWNlRGV0YWlsIComb3V0ICh2b2lkKTsKICBDT1JCQV9TZXJ2aWNl RGV0YWlsICpfcmV0biAodm9pZCk7CiAgQ09SQkFfU2VydmljZURldGFpbCAqcHRyICh2b2lkKSBj b25zdDsKCiBwcml2YXRlOgogIENPUkJBX1NlcnZpY2VEZXRhaWwgKnB0cl87Cn07CgpjbGFzcyBD T1JCQV9TZXJ2aWNlRGV0YWlsX291dAp7CiBwdWJsaWM6CiAgQ09SQkFfU2VydmljZURldGFpbF9v dXQgKENPUkJBX1NlcnZpY2VEZXRhaWwgKiYpOwogIENPUkJBX1NlcnZpY2VEZXRhaWxfb3V0IChD T1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAmKTsKICBDT1JCQV9TZXJ2aWNlRGV0YWlsX291dCAoY29u c3QgQ09SQkFfU2VydmljZURldGFpbF9vdXQgJik7CiAgQ09SQkFfU2VydmljZURldGFpbF9vdXQg Jm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfU2VydmljZURldGFpbF9vdXQgJik7CiAgQ09SQkFfU2Vy dmljZURldGFpbF9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfU2VydmljZURldGFpbCAqKTsKICBvcGVy YXRvciBDT1JCQV9TZXJ2aWNlRGV0YWlsIComKCk7CiAgQ09SQkFfU2VydmljZURldGFpbCAqJnB0 ciAodm9pZCk7CiAgQ09SQkFfU2VydmljZURldGFpbCAqb3BlcmF0b3ItPiAodm9pZCk7CgogcHJp dmF0ZToKCiAgQ09SQkFfU2VydmljZURldGFpbCAqJnB0cl87CiAgdm9pZCBvcGVyYXRvcj0gKGNv bnN0IENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICYpOwp9OwoKc3RydWN0IENPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbgp7CiAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoK CgoKCgogIGNsYXNzIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1h dGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uIDogcHVibGljIFRBT19VbmJvdW5kZWRfQmFzZV9T ZXF1ZW5jZQogICAgewogICAgcHVibGljOgoKCiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICh2b2lkKTsK ICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190 YW9fc2VxX1NlcnZpY2VPcHRpb24gKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsKICAgICAgX1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZp Y2VPcHRpb24gKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S QkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyAqZGF0 YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKICAg ICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9f c2VxX1NlcnZpY2VPcHRpb24gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1Nl cnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICYgcmhzKTsKICAgICAgX1RB T19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1Nl cnZpY2VPcHRpb24gJm9wZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09S QkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb24gJnJocyk7CiAgICAg IHZpcnR1YWwgfl9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlv bl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICh2b2lkKTsKCgogICAgICBDT1JCQTo6VUxvbmcgJm9w ZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKTsKICAgICAgY29uc3QgQ09SQkE6OlVMb25nICZvcGVy YXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3Q7CgogICAgICBzdGF0aWMgQ09SQkE6OlVMb25n ICphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIHNpemUpOwogICAgICBzdGF0aWMgdm9pZCBmcmVlYnVm IChDT1JCQTo6VUxvbmcgKmJ1ZmZlcik7CiAgICAgIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVm ZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKTsKICAgICAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRl X2J1ZmZlciAodm9pZCk7CgoKICAgICAgQ09SQkE6OlVMb25nICpnZXRfYnVmZmVyIChDT1JCQTo6 Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICAgICAgY29uc3QgQ09SQkE6OlVMb25nICpnZXRfYnVmZmVy ICh2b2lkKSBjb25zdDsKICAgICAgdm9pZCByZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LAogICAg ICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAg Q09SQkE6OlVMb25nICpkYXRhLAogICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJl bGVhc2UpOwogICAgfTsKIyAyMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vU2VydmljZXMuaCIKICBjbGFzcyBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9u IDogcHVibGljCgogIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1h dGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uCgoKCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIF90 YW9fc2VxX1NlcnZpY2VPcHRpb24gKHZvaWQpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9u IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbiAoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENPUkJBOjpVTG9uZyAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbiAoY29uc3QgX3Rhb19zZXFfU2Vydmlj ZU9wdGlvbiAmKTsKICAgICAgfl90YW9fc2VxX1NlcnZpY2VPcHRpb24gKHZvaWQpOwogICAgfTsK ICB0eXBlZGVmIF90YW9fc2VxX1NlcnZpY2VPcHRpb24gKl90YW9fc2VxX1NlcnZpY2VPcHRpb25f cHRyOwogIHN0YXRpYyBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19fdGFvX3NlcV9TZXJ2aWNlT3B0 aW9uOwojIDI3MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9TZXJ2aWNlcy5oIgogIGNsYXNzIF90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyCiAgICB7 CiAgICBwdWJsaWM6CiAgICAgIF90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICh2b2lkKTsKICAg ICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXIgKF90YW9fc2VxX1NlcnZpY2VPcHRpb24gKik7 CiAgICAgIF90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyIChjb25zdCBfdGFvX3NlcV9TZXJ2aWNl T3B0aW9uX3ZhciAmKTsKICAgICAgfl90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICh2b2lkKTsK ICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXIgJm9wZXJhdG9yPSAoX3Rhb19zZXFfU2Vy dmljZU9wdGlvbiAqKTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXIgJm9wZXJhdG9y PSAoY29uc3QgX3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXIgJik7CiAgICAgIF90YW9fc2VxX1Nl cnZpY2VPcHRpb24gKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgICBjb25zdCBfdGFvX3NlcV9TZXJ2 aWNlT3B0aW9uICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICAgIG9wZXJhdG9yIGNvbnN0 IF90YW9fc2VxX1NlcnZpY2VPcHRpb24gJigpIGNvbnN0OwogICAgICBvcGVyYXRvciBfdGFvX3Nl cV9TZXJ2aWNlT3B0aW9uICYoKTsKICAgICAgb3BlcmF0b3IgX3Rhb19zZXFfU2VydmljZU9wdGlv biAmKCkgY29uc3Q7CiAgICAgIENPUkJBOjpTZXJ2aWNlT3B0aW9uICZvcGVyYXRvcltdIChDT1JC QTo6VUxvbmcgc2xvdCk7CgogICAgICBjb25zdCBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICZpbiAo dm9pZCkgY29uc3Q7CiAgICAgIF90YW9fc2VxX1NlcnZpY2VPcHRpb24gJmlub3V0ICh2b2lkKTsK ICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbiAqJm91dCAodm9pZCk7CiAgICAgIF90YW9fc2Vx X1NlcnZpY2VPcHRpb24gKl9yZXRuICh2b2lkKTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlv biAqcHRyICh2b2lkKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBfdGFvX3NlcV9TZXJ2aWNl T3B0aW9uICpwdHJfOwogICAgfTsKIyAzMDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vU2VydmljZXMuaCIKICBjbGFzcyBfdGFvX3NlcV9TZXJ2aWNl T3B0aW9uX291dAogICAgewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9u X291dCAoX3Rhb19zZXFfU2VydmljZU9wdGlvbiAqJik7CiAgICAgIF90YW9fc2VxX1NlcnZpY2VP cHRpb25fb3V0IChfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX3ZhciAmKTsKICAgICAgX3Rhb19zZXFf U2VydmljZU9wdGlvbl9vdXQgKGNvbnN0IF90YW9fc2VxX1NlcnZpY2VPcHRpb25fb3V0ICYpOwog ICAgICBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX291dCAmb3BlcmF0b3I9IChjb25zdCBfdGFvX3Nl cV9TZXJ2aWNlT3B0aW9uX291dCAmKTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbl9vdXQg Jm9wZXJhdG9yPSAoX3Rhb19zZXFfU2VydmljZU9wdGlvbiAqKTsKICAgICAgb3BlcmF0b3IgX3Rh b19zZXFfU2VydmljZU9wdGlvbiAqJigpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICom cHRyICh2b2lkKTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbiAqb3BlcmF0b3ItPiAodm9p ZCk7CiAgICAgIENPUkJBOjpTZXJ2aWNlT3B0aW9uICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcg c2xvdCk7CiAgICBwcml2YXRlOgogICAgICBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uIComcHRyXzsK CiAgICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX3ZhciAm KTsKICAgIH07CgoKCgogIF90YW9fc2VxX1NlcnZpY2VPcHRpb24gc2VydmljZV9vcHRpb25zOwoK CgoKCgogIGNsYXNzIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1h dGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIDogcHVibGljIFRBT19VbmJvdW5kZWRfQmFzZV9T ZXF1ZW5jZQogICAgewogICAgcHVibGljOgoKCiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICh2b2lkKTsK ICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190 YW9fc2VxX1NlcnZpY2VEZXRhaWwgKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsKICAgICAgX1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZp Y2VEZXRhaWwgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S QkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX1NlcnZpY2VEZXRh aWwgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0g MCk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlv bl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9D T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbCAmIHJocyk7CiAg ICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFv X3NlcV9TZXJ2aWNlRGV0YWlsICZvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVl bmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICZyaHMp OwogICAgICB2aXJ0dWFsIH5fVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5m b3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbCAodm9pZCk7CgogICAgICBDT1JCQV9TZXJ2 aWNlRGV0YWlsICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSk7CiAgICAgIGNvbnN0IENPUkJB X1NlcnZpY2VEZXRhaWwgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25zdDsKCiAgICAg IHN0YXRpYyBDT1JCQV9TZXJ2aWNlRGV0YWlsICphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIHNpemUp OwogICAgICBzdGF0aWMgdm9pZCBmcmVlYnVmIChDT1JCQV9TZXJ2aWNlRGV0YWlsICpidWZmZXIp OwogICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0 aCk7CiAgICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwoKCiAgICAg IENPUkJBX1NlcnZpY2VEZXRhaWwgKmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFuIG9ycGhhbiA9 IDApOwogICAgICBjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsICpnZXRfYnVmZmVyICh2b2lkKSBj b25zdDsKICAgICAgdm9pZCByZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAg ICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgQ09SQkFfU2Vy dmljZURldGFpbCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxl YXNlKTsKICAgIH07CiMgMzc1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1NlcnZpY2VzLmgiCiAgY2xhc3MgX3Rhb19zZXFfU2VydmljZURldGFpbCA6 IHB1YmxpYwoKICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRp b25fX3Rhb19zZXFfU2VydmljZURldGFpbAoKCgogICAgewogICAgcHVibGljOgogICAgICBfdGFv X3NlcV9TZXJ2aWNlRGV0YWlsICh2b2lkKTsKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbCAo Q09SQkE6OlVMb25nIG1heCk7CiAgICAgIF90YW9fc2VxX1NlcnZpY2VEZXRhaWwgKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDT1JCQV9TZXJ2aWNlRGV0YWlsICpidWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2U9MAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIChjb25zdCBfdGFvX3NlcV9T ZXJ2aWNlRGV0YWlsICYpOwogICAgICB+X3Rhb19zZXFfU2VydmljZURldGFpbCAodm9pZCk7CiAg ICB9OwogIHR5cGVkZWYgX3Rhb19zZXFfU2VydmljZURldGFpbCAqX3Rhb19zZXFfU2VydmljZURl dGFpbF9wdHI7CiAgc3RhdGljIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX190YW9fc2VxX1NlcnZp Y2VEZXRhaWw7CiMgNDA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1NlcnZpY2VzLmgiCiAgY2xhc3MgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIK ICAgIHsKICAgIHB1YmxpYzoKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgKHZvaWQp OwogICAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX3ZhciAoX3Rhb19zZXFfU2VydmljZURldGFp bCAqKTsKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgKGNvbnN0IF90YW9fc2VxX1Nl cnZpY2VEZXRhaWxfdmFyICYpOwogICAgICB+X3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgKHZv aWQpOwoKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgJm9wZXJhdG9yPSAoX3Rhb19z ZXFfU2VydmljZURldGFpbCAqKTsKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgJm9w ZXJhdG9yPSAoY29uc3QgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgJik7CiAgICAgIF90YW9f c2VxX1NlcnZpY2VEZXRhaWwgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgICBjb25zdCBfdGFvX3Nl cV9TZXJ2aWNlRGV0YWlsICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICAgIG9wZXJhdG9y IGNvbnN0IF90YW9fc2VxX1NlcnZpY2VEZXRhaWwgJigpIGNvbnN0OwogICAgICBvcGVyYXRvciBf dGFvX3NlcV9TZXJ2aWNlRGV0YWlsICYoKTsKICAgICAgb3BlcmF0b3IgX3Rhb19zZXFfU2Vydmlj ZURldGFpbCAmKCkgY29uc3Q7CiAgICAgIENPUkJBX1NlcnZpY2VEZXRhaWwgJm9wZXJhdG9yW10g KENPUkJBOjpVTG9uZyBzbG90KTsKCiAgICAgIGNvbnN0IF90YW9fc2VxX1NlcnZpY2VEZXRhaWwg JmluICh2b2lkKSBjb25zdDsKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbCAmaW5vdXQgKHZv aWQpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIComb3V0ICh2b2lkKTsKICAgICAgX3Rh b19zZXFfU2VydmljZURldGFpbCAqX3JldG4gKHZvaWQpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNl RGV0YWlsICpwdHIgKHZvaWQpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIF90YW9fc2VxX1Nl cnZpY2VEZXRhaWwgKnB0cl87CiAgICB9OwojIDQ0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXJ2aWNlcy5oIgogIGNsYXNzIF90YW9fc2VxX1Nl cnZpY2VEZXRhaWxfb3V0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIF90YW9fc2VxX1NlcnZpY2VE ZXRhaWxfb3V0IChfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIComKTsKICAgICAgX3Rhb19zZXFfU2Vy dmljZURldGFpbF9vdXQgKF90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyICYpOwogICAgICBfdGFv X3NlcV9TZXJ2aWNlRGV0YWlsX291dCAoY29uc3QgX3Rhb19zZXFfU2VydmljZURldGFpbF9vdXQg Jik7CiAgICAgIF90YW9fc2VxX1NlcnZpY2VEZXRhaWxfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IF90 YW9fc2VxX1NlcnZpY2VEZXRhaWxfb3V0ICYpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWls X291dCAmb3BlcmF0b3I9IChfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICopOwogICAgICBvcGVyYXRv ciBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIComKCk7CiAgICAgIF90YW9fc2VxX1NlcnZpY2VEZXRh aWwgKiZwdHIgKHZvaWQpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICpvcGVyYXRvci0+ ICh2b2lkKTsKICAgICAgQ09SQkFfU2VydmljZURldGFpbCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVM b25nIHNsb3QpOwoKICAgIHByaXZhdGU6CiAgICAgIF90YW9fc2VxX1NlcnZpY2VEZXRhaWwgKiZw dHJfOwoKICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF90YW9fc2VxX1NlcnZpY2VEZXRhaWxf dmFyICYpOwogICAgfTsKCgoKCiAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIHNlcnZpY2VfZGV0 YWlsczsKfTsKCgpjbGFzcyBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fdmFyCnsKIHB1YmxpYzoK ICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fdmFyICh2b2lkKTsKICBDT1JCQV9TZXJ2aWNlSW5m b3JtYXRpb25fdmFyIChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKik7CiAgQ09SQkFfU2Vydmlj ZUluZm9ybWF0aW9uX3ZhciAoY29uc3QgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3ZhciAmKTsK ICB+Q09SQkFfU2VydmljZUluZm9ybWF0aW9uX3ZhciAodm9pZCk7CgogIENPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbl92YXIgJm9wZXJhdG9yPSAoQ09SQkFfU2VydmljZUluZm9ybWF0aW9uICopOwog IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfU2Vy dmljZUluZm9ybWF0aW9uX3ZhciAmKTsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKm9wZXJh dG9yLT4gKHZvaWQpOwogIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqb3BlcmF0b3It PiAodm9pZCkgY29uc3Q7CgoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRp b24gJigpIGNvbnN0OwogIG9wZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAmKCk7CiAg b3BlcmF0b3IgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uICYoKSBjb25zdDsKICBjb25zdCBDT1JC QV9TZXJ2aWNlSW5mb3JtYXRpb24gJmluICh2b2lkKSBjb25zdDsKICBDT1JCQV9TZXJ2aWNlSW5m b3JtYXRpb24gJmlub3V0ICh2b2lkKTsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKiZvdXQg KHZvaWQpOwogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqX3JldG4gKHZvaWQpOwogIENPUkJB X1NlcnZpY2VJbmZvcm1hdGlvbiAqcHRyICh2b2lkKSBjb25zdDsKCiBwcml2YXRlOgogIENPUkJB X1NlcnZpY2VJbmZvcm1hdGlvbiAqcHRyXzsKfTsKCmNsYXNzIENPUkJBX1NlcnZpY2VJbmZvcm1h dGlvbl9vdXQKewogcHVibGljOgogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQgKENPUkJB X1NlcnZpY2VJbmZvcm1hdGlvbiAqJik7CiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX291dCAo Q09SQkFfU2VydmljZUluZm9ybWF0aW9uX3ZhciAmKTsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRp b25fb3V0IChjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0ICYpOwogIENPUkJBX1Nl cnZpY2VJbmZvcm1hdGlvbl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfU2VydmljZUluZm9y bWF0aW9uX291dCAmKTsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0ICZvcGVyYXRvcj0g KENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqKTsKCiAgb3BlcmF0b3IgQ09SQkFfU2VydmljZUlu Zm9ybWF0aW9uIComKCk7CiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uIComcHRyICh2b2lkKTsK ICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKm9wZXJhdG9yLT4gKHZvaWQpOwoKIHByaXZhdGU6 CgogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqJnB0cl87CiAgdm9pZCBvcGVyYXRvcj0gKGNv bnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXIgJik7Cn07CgoKdm9pZCBvcGVyYXRvcjw8 PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQTo6U2VydmljZURldGFpbCAmKTsKdm9pZCBvcGVy YXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQTo6U2VydmljZURldGFpbCopOwpDT1JCQTo6Qm9v bGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBDT1JCQTo6U2VydmljZURldGFp bCAqJik7CnZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfU2Vydmlj ZUluZm9ybWF0aW9uICYpOwp2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX1Nl cnZpY2VJbmZvcm1hdGlvbiopOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S QkE6OkFueSAmLCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKiYpOwoKQ09SQkE6OkJvb2xlYW4g b3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmLCBjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsICYp OwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJiwgQ09SQkFfU2Vydmlj ZURldGFpbCAmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmLCBj b25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldCAmKTsKQ09SQkE6OkJvb2xl YW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICYsIENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9f c2VxX09jdGV0ICYpOwoKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAm LCBjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gJik7CkNPUkJBOjpCb29sZWFuIG9wZXJh dG9yPj4gKFRBT19JbnB1dENEUiAmLCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gJik7CkNPUkJB OjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJiwgY29uc3QgQ09SQkFfU2Vydmlj ZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICYpOwpDT1JCQTo6Qm9vbGVhbiBv cGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJiwgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFv X3NlcV9TZXJ2aWNlT3B0aW9uICYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0 cHV0Q0RSICYsIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vydmlj ZURldGFpbCAmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICYsIENP UkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAmKTsKCgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2Vydmlj ZXMuaSIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL1NlcnZpY2VzLmkiCmlubGluZQpDT1JCQV9TZXJ2aWNlRGV0YWlsX3Zhcjo6Q09SQkFf U2VydmljZURldGFpbF92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX1Nl cnZpY2VEZXRhaWxfdmFyOjpDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAoIENPUkJBX1NlcnZpY2VE ZXRhaWwgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCiBDT1JCQV9TZXJ2aWNlRGV0YWlsX3Zh cjo6Q09SQkFfU2VydmljZURldGFpbF92YXIgKGNvbnN0IENPUkJBX1NlcnZpY2VEZXRhaWxfdmFy ICZwKQp7CiAgaWYgKHAucHRyXykKICAgIHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfU2VydmljZURl dGFpbCgqcC5wdHJfKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCiBDT1JC QV9TZXJ2aWNlRGV0YWlsX3Zhcjo6fkNPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICh2b2lkKQp7CiAg ZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAmCiBD T1JCQV9TZXJ2aWNlRGV0YWlsX3Zhcjo6b3BlcmF0b3I9ICggQ09SQkFfU2VydmljZURldGFpbCAq cCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhp czsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICYKIENPUkJBX1NlcnZpY2VEZXRh aWxfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICZwKQp7CiAg aWYgKHRoaXMgIT0gJnApCiAgewogICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICB0aGlzLT5wdHJf ID0gbmV3IENPUkJBX1NlcnZpY2VEZXRhaWwgKCpwLnB0cl8pOwogIH0KICByZXR1cm4gKnRoaXM7 Cn0KCmlubGluZSBjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsICoKIENPUkJBX1NlcnZpY2VEZXRh aWxfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0K CmlubGluZSBDT1JCQV9TZXJ2aWNlRGV0YWlsICoKIENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyOjpv cGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQogQ09SQkFf U2VydmljZURldGFpbF92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX1NlcnZpY2VEZXRhaWwgJigp IGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQogQ09SQkFfU2VydmljZURl dGFpbF92YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VEZXRhaWwgJigpCnsKICByZXR1cm4gKnRo aXMtPnB0cl87Cn0KCmlubGluZQogQ09SQkFfU2VydmljZURldGFpbF92YXI6Om9wZXJhdG9yIENP UkJBX1NlcnZpY2VEZXRhaWwgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlu bGluZSBjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsICYKIENPUkJBX1NlcnZpY2VEZXRhaWxfdmFy OjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJB X1NlcnZpY2VEZXRhaWwgJgogQ09SQkFfU2VydmljZURldGFpbF92YXI6Omlub3V0ICh2b2lkKQp7 CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgKiYK IENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRy XzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJB X1NlcnZpY2VEZXRhaWwgKgogQ09SQkFfU2VydmljZURldGFpbF92YXI6Ol9yZXRuICh2b2lkKQp7 CiAgIENPUkJBX1NlcnZpY2VEZXRhaWwgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9 IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgKgogQ09SQkFf U2VydmljZURldGFpbF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJf Owp9CgoKCgoKaW5saW5lCiBDT1JCQV9TZXJ2aWNlRGV0YWlsX291dDo6Q09SQkFfU2VydmljZURl dGFpbF9vdXQgKCBDT1JCQV9TZXJ2aWNlRGV0YWlsIComcCkKICA6IHB0cl8gKHApCnsKICB0aGlz LT5wdHJfID0gMDsKfQoKaW5saW5lCiBDT1JCQV9TZXJ2aWNlRGV0YWlsX291dDo6Q09SQkFfU2Vy dmljZURldGFpbF9vdXQgKCBDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAmcCkKICA6IHB0cl8gKHAu b3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGlu ZQogQ09SQkFfU2VydmljZURldGFpbF9vdXQ6OkNPUkJBX1NlcnZpY2VEZXRhaWxfb3V0IChjb25z dCBDT1JCQV9TZXJ2aWNlRGV0YWlsX291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8Q09SQkFf U2VydmljZURldGFpbF9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSBDT1JCQV9TZXJ2aWNlRGV0 YWlsX291dCAmCiBDT1JCQV9TZXJ2aWNlRGV0YWlsX291dDo6b3BlcmF0b3I9IChjb25zdCBDT1JC QV9TZXJ2aWNlRGV0YWlsX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PENPUkJB X1NlcnZpY2VEZXRhaWxfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUg Q09SQkFfU2VydmljZURldGFpbF9vdXQgJgpDT1JCQV9TZXJ2aWNlRGV0YWlsX291dDo6b3BlcmF0 b3I9IChDT1JCQV9TZXJ2aWNlRGV0YWlsICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJu ICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfU2VydmljZURldGFpbF9vdXQ6Om9wZXJhdG9yIENPUkJB X1NlcnZpY2VEZXRhaWwgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JC QV9TZXJ2aWNlRGV0YWlsIComCkNPUkJBX1NlcnZpY2VEZXRhaWxfb3V0OjpwdHIgKHZvaWQpCnsK ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgKgpDT1JC QV9TZXJ2aWNlRGV0YWlsX291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5w dHJfOwp9CiMgMTg4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL1NlcnZpY2VzLmkiCmlubGluZQpDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9P Y3RldF92YXI6Ol90YW9fc2VxX09jdGV0X3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9Cgppbmxp bmUKQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfdmFyOjpfdGFvX3NlcV9PY3Rl dF92YXIgKENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0ICpwKQogIDogcHRyXyAo cCkKe30KCmlubGluZQpDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF92YXI6Ol90 YW9fc2VxX09jdGV0X3ZhciAoY29uc3QgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0 ZXRfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfU2Vy dmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQoKnAucHRyXyk7CiAgZWxzZQogICAgdGhpcy0+cHRy XyA9IDA7Cn0KCmlubGluZQpDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF92YXI6 On5fdGFvX3NlcV9PY3RldF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5s aW5lIENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X3ZhciAmCkNPUkJBX1NlcnZp Y2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X3Zhcjo6b3BlcmF0b3I9IChDT1JCQV9TZXJ2aWNlRGV0 YWlsOjpfdGFvX3NlcV9PY3RldCAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0 cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90 YW9fc2VxX09jdGV0X3ZhciAmCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X3Zh cjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF92 YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICB7CiAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAg IHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQgKCpw LnB0cl8pOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCBDT1JCQV9TZXJ2aWNl RGV0YWlsOjpfdGFvX3NlcV9PY3RldCAqCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09j dGV0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9 CgppbmxpbmUgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQgKgpDT1JCQV9TZXJ2 aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1 cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09j dGV0X3Zhcjo6b3BlcmF0b3IgY29uc3QgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0 ZXQgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpDT1JCQV9TZXJ2 aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF92YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VEZXRh aWw6Ol90YW9fc2VxX09jdGV0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUK Q09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfdmFyOjpvcGVyYXRvciBDT1JCQV9T ZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+ cHRyXzsKfQoKaW5saW5lIENPUkJBOjpPY3RldCAmCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9f c2VxX09jdGV0X3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpCnsKICByZXR1cm4g dGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoc2xvdCk7Cn0KCmlubGluZSBjb25zdCBDT1JCQV9TZXJ2 aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldCAmCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2Vx X09jdGV0X3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlu bGluZSBDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldCAmCkNPUkJBX1NlcnZpY2VE ZXRhaWw6Ol90YW9fc2VxX09jdGV0X3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMt PnB0cl87Cn0KCgppbmxpbmUgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQgKiYK Q09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfdmFyOjpvdXQgKHZvaWQpCnsKICBk ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsK fQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0ICoKQ09SQkFfU2Vy dmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfdmFyOjpfcmV0biAodm9pZCkKewogIENPUkJBX1Nl cnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0 cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFv X3NlcV9PY3RldCAqCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X3Zhcjo6cHRy ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKQ09SQkFf U2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfb3V0OjpfdGFvX3NlcV9PY3RldF9vdXQgKENP UkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0IComcCkKICA6IHB0cl8gKHApCnsKICB0 aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09j dGV0X291dDo6X3Rhb19zZXFfT2N0ZXRfb3V0IChDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3Nl cV9PY3RldF92YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJf OwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19z ZXFfT2N0ZXRfb3V0OjpfdGFvX3NlcV9PY3RldF9vdXQgKGNvbnN0IENPUkJBX1NlcnZpY2VEZXRh aWw6Ol90YW9fc2VxX09jdGV0X291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8Q09SQkFfU2Vy dmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgQ09S QkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfb3V0ICYKQ09SQkFfU2VydmljZURldGFp bDo6X3Rhb19zZXFfT2N0ZXRfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX1NlcnZpY2VEZXRh aWw6Ol90YW9fc2VxX09jdGV0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PENP UkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X291dCY+IChwKS5wdHJfOwogIHJldHVy biAqdGhpczsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X291 dCAmCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X291dDo6b3BlcmF0b3I9IChD T1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldCAqcCkKewogIHRoaXMtPnB0cl8gPSBw OwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2Vx X09jdGV0X291dDo6b3BlcmF0b3IgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQg KiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlRGV0YWls OjpfdGFvX3NlcV9PY3RldCAqJgpDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF9v dXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfU2Vy dmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQgKgpDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3Nl cV9PY3RldF9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK aW5saW5lIENPUkJBOjpPY3RldCAmCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0 X291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpCnsKICByZXR1cm4gdGhpcy0+cHRy Xy0+b3BlcmF0b3JbXSAoc2xvdCk7Cn0KIyAzNzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VydmljZXMuaSIKaW5saW5lCkNPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbl92YXI6OkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXIgKHZvaWQpCiAgOiBw dHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6OkNPUkJBX1Nl cnZpY2VJbmZvcm1hdGlvbl92YXIgKENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqcCkKICA6IHB0 cl8gKHApCnt9CgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3Zhcjo6Q09SQkFfU2Vy dmljZUluZm9ybWF0aW9uX3ZhciAoY29uc3QgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3ZhciAm cCkKewogIGlmIChwLnB0cl8pCiAgICB0aGlzLT5wdHJfID0gbmV3IENPUkJBX1NlcnZpY2VJbmZv cm1hdGlvbigqcC5wdHJfKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNP UkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6On5DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fdmFy ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5m b3JtYXRpb25fdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3Zhcjo6b3BlcmF0b3I9IChD T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlz LT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3Jt YXRpb25fdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3Zhcjo6b3BlcmF0b3I9IChjb25z dCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAg ewogICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICB0aGlzLT5wdHJfID0gbmV3IENPUkJBX1NlcnZp Y2VJbmZvcm1hdGlvbiAoKnAucHRyXyk7CiAgfQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNv bnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92 YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s aW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92 YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNP UkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbiAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNP UkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1h dGlvbiAmKCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbl92YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAmKCkgY29u c3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IENPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbiAmCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6OmluICh2b2lkKSBjb25z dAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfU2VydmljZUluZm9ybWF0 aW9uICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1 cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uIComCkNP UkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5w dHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09S QkFfU2VydmljZUluZm9ybWF0aW9uICoKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3Zhcjo6X3Jl dG4gKHZvaWQpCnsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKnRtcCA9IHRoaXMtPnB0cl87 CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6OnB0ciAodm9pZCkgY29u c3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZv cm1hdGlvbl9vdXQ6OkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQgKENPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbiAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGlu ZQpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0OjpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25f b3V0IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkp CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJB X1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQ6OkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQgKGNv bnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0 PENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSBDT1JC QV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0ICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX291dDo6 b3BlcmF0b3I9IChjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0ICZwKQp7CiAgdGhp cy0+cHRyXyA9IGNvbnN0X2Nhc3Q8Q09SQkFfU2VydmljZUluZm9ybWF0aW9uX291dCY+IChwKS5w dHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9v dXQgJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0OjpvcGVyYXRvcj0gKENPUkJBX1NlcnZp Y2VJbmZvcm1hdGlvbiAqcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoK aW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQ6Om9wZXJhdG9yIENPUkJBX1NlcnZp Y2VJbmZvcm1hdGlvbiAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJB X1NlcnZpY2VJbmZvcm1hdGlvbiAqJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0OjpwdHIg KHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZv cm1hdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQp CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQojIDU0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXJ2aWNlcy5pIgogIGlubGluZSBDT1JCQTo6VUxv bmcgKgogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf Q09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb246OmFsbG9jYnVm IChDT1JCQTo6VUxvbmcgc2l6ZSkKCiAgewogICAgcmV0dXJuIG5ldyBDT1JCQTo6VUxvbmdbc2l6 ZV07CiAgfQoKICBpbmxpbmUgdm9pZCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5i b3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNl T3B0aW9uOjpmcmVlYnVmIChDT1JCQTo6VUxvbmcgKmJ1ZmZlcikKCiAgewogICAgZGVsZXRlIFtd IGJ1ZmZlcjsKICB9CgogIGlubGluZQogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZp Y2VPcHRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlv bl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICh2b2lkKQogIHsKICB9CgogIGlubGluZQogIENPUkJB X1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2Vydmlj ZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVl bmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uIChDT1JC QTo6VUxvbmcgbWF4aW11bSkKICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhp bXVtLCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NP UkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uOjphbGxvY2J1ZiAo bWF4aW11bSkpCiAgewogIH0KCiAgaW5saW5lCiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpf VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFf U2VydmljZU9wdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9y bWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb24gKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAg Q09SQkE6OlVMb25nIGxlbmd0aCwKICAgIENPUkJBOjpVTG9uZyAqZGF0YSwKICAgIENPUkJBOjpC b29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0s IGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkKICB7CiAgfQoKICBpbmxpbmUKICBDT1JCQV9TZXJ2aWNl SW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1h dGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JC QV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZU9wdGlvbiAoY29uc3QgQ09SQkE6 OlNlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2Vydmlj ZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb24gJnJocykKCiAgICA6IFRBT19VbmJv dW5kZWRfQmFzZV9TZXF1ZW5jZSAocmhzKQogIHsKICAgIENPUkJBOjpVTG9uZyAqdG1wMSA9IENP UkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2Vy dmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb246OmFsbG9jYnVmICh0aGlzLT5t YXhpbXVtXyk7CiAgICBDT1JCQTo6VUxvbmcgKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2Fz dDxDT1JCQTo6VUxvbmcgKj4gKHJocy5idWZmZXJfKTsKCiAgICBmb3IgKENPUkJBOjpVTG9uZyBp ID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgdG1wMVtpXSA9IHRtcDJbaV07Cgog ICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgfQoKICBpbmxpbmUgQ09SQkFfU2VydmljZUluZm9y bWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25f X3Rhb19zZXFfU2VydmljZU9wdGlvbiAmCiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2Vy dmljZU9wdGlvbjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQTo6U2VydmljZUluZm9ybWF0aW9uOjpf VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFf U2VydmljZU9wdGlvbiAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1 cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+ bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgQ09SQkE6OlVMb25nICp0 bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVTG9uZyAqPiAodGhpcy0+YnVmZmVyXyk7CiAg ICAgICAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9D T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZU9wdGlvbjo6ZnJlZWJ1ZiAo dG1wKTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpf VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFf U2VydmljZU9wdGlvbjo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgIH0KICAgIH0KICAg IGVsc2UKICAgICAgdGhpcy0+YnVmZmVyXyA9IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RB T19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1Nl cnZpY2VPcHRpb246OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICAgIFRBT19VbmJvdW5kZWRf QmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICAgIENPUkJBOjpVTG9uZyAqdG1wMSA9 IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVMb25nICo+ICh0aGlzLT5idWZmZXJfKTsKICAgIENP UkJBOjpVTG9uZyAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVTG9uZyAq PiAocmhzLmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+ bGVuZ3RoXzsgKytpKQogICAgICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7 CiAgfQoKCiAgaW5saW5lIENPUkJBOjpVTG9uZyAmCiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9u OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19z ZXFfU2VydmljZU9wdGlvbjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpCgogIHsKICAgIGRv IHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6 bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j ZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1NlcnZpY2VzLmkiLCA2MjcsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5y ZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAo KSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwg YXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0x KTsgfSB9IHdoaWxlICgwKTsKICAgIENPUkJBOjpVTG9uZyogdG1wID0gcmVpbnRlcnByZXRfY2Fz dDxDT1JCQTo6VUxvbmcqPiAodGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0K CiAgaW5saW5lIGNvbnN0IENPUkJBOjpVTG9uZyAmCiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9u OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19z ZXFfU2VydmljZU9wdGlvbjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0CgogIHsK ICAgIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFD RV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjpp bnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1NlcnZpY2VzLmkiLCA2MzYsIC0xLCBfX2FjZV9lcnJvciwgYWNl X19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxs YmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxp bmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVt XyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIENPUkJBOjpVTG9uZyAqIGNvbnN0IHRtcCA9IHJl aW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVMb25nKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgcmV0dXJu IHRtcFtpXTsKICB9CgoKCiAgaW5saW5lIENPUkJBOjpVTG9uZyAqCiAgQ09SQkFfU2VydmljZUlu Zm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRp b25fX3Rhb19zZXFfU2VydmljZU9wdGlvbjo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3Jw aGFuKQogIHsKICAgIENPUkJBOjpVTG9uZyAqcmVzdWx0ID0gMDsKICAgIGlmIChvcnBoYW4gPT0g MCkKICAgIHsKCiAgICAgIGlmICh0aGlzLT5idWZmZXJfID09IDApCiAgICAgIHsKICAgICAgICBy ZXN1bHQgPSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uOjphbGxvY2J1 ZiAodGhpcy0+bGVuZ3RoXyk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAg ICB0aGlzLT5yZWxlYXNlXyA9IDE7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAg cmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6VUxvbmcqPiAodGhpcy0+YnVmZmVyXyk7 CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVhc2VfICE9 IDApCiAgICAgIHsKCgogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVM b25nKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAg ICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0 aGlzLT5yZWxlYXNlXyA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoK ICBpbmxpbmUgY29uc3QgQ09SQkE6OlVMb25nICoKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246 Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3Nl cV9TZXJ2aWNlT3B0aW9uOjpnZXRfYnVmZmVyICh2b2lkKSBjb25zdAogIHsKICAgIHJldHVybiBy ZWludGVycHJldF9jYXN0PGNvbnN0IENPUkJBOjpVTG9uZyAqPiAodGhpcy0+YnVmZmVyXyk7CiAg fQoKICBpbmxpbmUgdm9pZAogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRp b246OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICBD T1JCQTo6VUxvbmcgKmRhdGEsCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICB7CiAgICB0aGlz LT5tYXhpbXVtXyA9IG1heDsKICAgIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgICBpZiAodGhp cy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQogICAgewogICAgICBDT1JCQTo6VUxv bmcgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVMb25nKj4gKHRoaXMtPmJ1ZmZlcl8p OwogICAgICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uOjpmcmVlYnVm ICh0bXApOwogICAgfQogICAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAgICB0aGlzLT5yZWxlYXNl XyA9IHJlbGVhc2U7CiAgfQojIDcxMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9TZXJ2aWNlcy5pIgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9ybWF0 aW9uOjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX3Zhcjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92 YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlv bjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXI6Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFy IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb24gKnApCiAg OiBwdHJfIChwKQp7fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFf U2VydmljZU9wdGlvbl92YXI6Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyIChjb25zdCBDT1JC QV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICZwKQp7CiAg aWYgKHAucHRyXykKICAgIHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfU2VydmljZUluZm9ybWF0aW9u OjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uKCpwLnB0cl8pOwogIGVsc2UKICAgIHRoaXMtPnB0cl8g PSAwOwp9CgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNl T3B0aW9uX3Zhcjo6fl90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICh2b2lkKQp7CiAgZGVsZXRl IHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2Vx X1NlcnZpY2VPcHRpb25fdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9T ZXJ2aWNlT3B0aW9uX3Zhcjo6b3BlcmF0b3I9IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90 YW9fc2VxX1NlcnZpY2VPcHRpb24gKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5w dHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRp b246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9u OjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX3Zhcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9TZXJ2 aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICZwKQp7CiAgaWYgKHRo aXMgIT0gJnApCiAgewogICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICB0aGlzLT5wdHJfID0gbmV3 IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAoKnAucHRy Xyk7CiAgfQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZv cm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlv bjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsK ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6 X3Rhb19zZXFfU2VydmljZU9wdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19z ZXFfU2VydmljZU9wdGlvbl92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vydmlj ZU9wdGlvbl92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rh b19zZXFfU2VydmljZU9wdGlvbiAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoK aW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92 YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9w dGlvbiAmKCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXI6Om9wZXJhdG9yIENPUkJBX1Nl cnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAmKCkgY29uc3QKewogIHJl dHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBOjpTZXJ2aWNlT3B0aW9uICYKQ09SQkFf U2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX3Zhcjo6b3BlcmF0b3Jb XSAoQ09SQkE6OlVMb25nIHNsb3QpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAo c2xvdCk7Cn0KCmlubGluZSBjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2Vx X1NlcnZpY2VPcHRpb24gJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZp Y2VPcHRpb25fdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoK aW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAm CkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXI6Omlu b3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIENPUkJBX1NlcnZp Y2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAqJgpDT1JCQV9TZXJ2aWNlSW5m b3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxl dGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK aW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAq CkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXI6Ol9y ZXRuICh2b2lkKQp7CiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNl T3B0aW9uICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7 Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRp b24gKgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFy OjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpD T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fb3V0OjpfdGFv X3NlcV9TZXJ2aWNlT3B0aW9uX291dCAoQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3Nl cV9TZXJ2aWNlT3B0aW9uIComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoK aW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl9v dXQ6Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fb3V0IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246 Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBk ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX1NlcnZp Y2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl9vdXQ6Ol90YW9fc2VxX1NlcnZp Y2VPcHRpb25fb3V0IChjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1Nl cnZpY2VPcHRpb25fb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxDT1JCQV9TZXJ2aWNlSW5m b3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fb3V0Jj4gKHApLnB0cl8pCnt9Cgppbmxp bmUgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX291dCAm CkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl9vdXQ6Om9w ZXJhdG9yPSAoY29uc3QgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNl T3B0aW9uX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PENPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl9vdXQmPiAocCkucHRyXzsKICByZXR1 cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1Nl cnZpY2VPcHRpb25fb3V0ICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2 aWNlT3B0aW9uX291dDo6b3BlcmF0b3I9IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9f c2VxX1NlcnZpY2VPcHRpb24gKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7 Cn0KCmlubGluZQpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRp b25fb3V0OjpvcGVyYXRvciBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZp Y2VPcHRpb24gKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2 aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb24gKiYKQ09SQkFfU2VydmljZUlu Zm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX291dDo6cHRyICh2b2lkKQp7CiAgcmV0 dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9f c2VxX1NlcnZpY2VPcHRpb24gKgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1Nl cnZpY2VPcHRpb25fb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87 Cn0KCmlubGluZSBDT1JCQTo6U2VydmljZU9wdGlvbiAmCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlv bjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBz bG90KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKHNsb3QpOwp9CiMgODk5ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcnZpY2Vz LmkiCiAgaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgKgogIENPUkJBOjpTZXJ2aWNlSW5mb3Jt YXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9f dGFvX3NlcV9TZXJ2aWNlRGV0YWlsOjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIHNpemUpCgogIHsK ICAgIHJldHVybiBuZXcgQ09SQkFfU2VydmljZURldGFpbFtzaXplXTsKICB9CgogIGlubGluZSB2 b2lkIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09S QkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VEZXRhaWw6OmZyZWVidWYgKENP UkJBOjpTZXJ2aWNlRGV0YWlsICpidWZmZXIpCgogIHsKICAgIGRlbGV0ZSBbXSBidWZmZXI7CiAg fQoKICBpbmxpbmUKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1Nl cXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsOjpf VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFf U2VydmljZURldGFpbCAodm9pZCkKICB7CiAgfQoKICBpbmxpbmUKICBDT1JCQV9TZXJ2aWNlSW5m b3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlv bl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9T ZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbCAoQ09SQkE6OlVMb25nIG1h eGltdW0pCiAgICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgQ09SQkFf U2VydmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNl SW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6YWxsb2NidWYgKG1heGltdW0pKQog IHsKICB9CgogIGlubGluZQogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VEZXRh aWw6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFv X3NlcV9TZXJ2aWNlRGV0YWlsIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgIENPUkJBOjpVTG9u ZyBsZW5ndGgsCiAgICBDT1JCQV9TZXJ2aWNlRGV0YWlsICpkYXRhLAogICAgQ09SQkE6OkJvb2xl YW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVu Z3RoLCBkYXRhLCByZWxlYXNlKQogIHsKICB9CgogIGlubGluZQogIENPUkJBX1NlcnZpY2VJbmZv cm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9u X190YW9fc2VxX1NlcnZpY2VEZXRhaWw6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1Nl cnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIChjb25zdCBDT1JCQTo6U2Vy dmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5m b3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbCAmcmhzKQoKICAgIDogVEFPX1VuYm91bmRl ZF9CYXNlX1NlcXVlbmNlIChyaHMpCiAgewogICAgQ09SQkFfU2VydmljZURldGFpbCAqdG1wMSA9 IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFf U2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VEZXRhaWw6OmFsbG9jYnVmICh0aGlz LT5tYXhpbXVtXyk7CiAgICBDT1JCQV9TZXJ2aWNlRGV0YWlsICogY29uc3QgdG1wMiA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Q09SQkFfU2VydmljZURldGFpbCAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgIGZv ciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICB0bXAx W2ldID0gdG1wMltpXTsKCiAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICB9CgogIGlubGluZSBD T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1Nl cnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICYKICBDT1JCQV9TZXJ2aWNl SW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1h dGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsOjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBOjpTZXJ2 aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZv cm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICZyaHMpCgogIHsKICAgIGlmICh0aGlzID09 ICZyaHMpCiAgICAgIHJldHVybiAqdGhpczsKCiAgICBpZiAodGhpcy0+cmVsZWFzZV8pCiAgICB7 CiAgICAgIGlmICh0aGlzLT5tYXhpbXVtXyA8IHJocy5tYXhpbXVtXykKICAgICAgewoKICAgICAg ICBDT1JCQV9TZXJ2aWNlRGV0YWlsICp0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBX1NlcnZp Y2VEZXRhaWwgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIENPUkJBX1NlcnZpY2VJbmZvcm1h dGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190 YW9fc2VxX1NlcnZpY2VEZXRhaWw6OmZyZWVidWYgKHRtcCk7CiAgICAgICAgdGhpcy0+YnVmZmVy XyA9IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09S QkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VEZXRhaWw6OmFsbG9jYnVmIChy aHMubWF4aW11bV8pOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICAgIHRoaXMtPmJ1ZmZlcl8g PSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJB X1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsOjphbGxvY2J1ZiAocmhz Lm1heGltdW1fKTsKCiAgICBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAo cmhzKTsKCiAgICBDT1JCQV9TZXJ2aWNlRGV0YWlsICp0bXAxID0gcmVpbnRlcnByZXRfY2FzdDxD T1JCQV9TZXJ2aWNlRGV0YWlsICo+ICh0aGlzLT5idWZmZXJfKTsKICAgIENPUkJBX1NlcnZpY2VE ZXRhaWwgKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQV9TZXJ2aWNlRGV0YWls ICo+IChyaHMuYnVmZmVyXyk7CgogICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlz LT5sZW5ndGhfOyArK2kpCiAgICAgIHRtcDFbaV0gPSB0bXAyW2ldOwoKICAgIHJldHVybiAqdGhp czsKICB9CgoKICBpbmxpbmUgQ09SQkFfU2VydmljZURldGFpbCAmCiAgQ09SQkFfU2VydmljZUlu Zm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRp b25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpCgog IHsKICAgIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9 IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNn OjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcnZpY2VzLmkiLCA5ODIsIC0xLCBfX2FjZV9lcnJvciwg YWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19j YWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4s IGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhp bXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIENPUkJBX1NlcnZpY2VEZXRhaWwqIHRtcCA9 IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkFfU2VydmljZURldGFpbCo+ICh0aGlzLT5idWZmZXJfKTsK ICAgIHJldHVybiB0bXBbaV07CiAgfQoKICBpbmxpbmUgY29uc3QgQ09SQkFfU2VydmljZURldGFp bCAmCiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9D T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6b3BlcmF0b3Jb XSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0CgogIHsKICAgIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4 aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xv Z19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcnZpY2Vz LmkiLCA5OTEsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1z Z19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9F UlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3Ig JyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAg IENPUkJBX1NlcnZpY2VEZXRhaWwgKiBjb25zdCB0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJB X1NlcnZpY2VEZXRhaWwqPiAodGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0K CgoKICBpbmxpbmUgQ09SQkFfU2VydmljZURldGFpbCAqCiAgQ09SQkFfU2VydmljZUluZm9ybWF0 aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rh b19zZXFfU2VydmljZURldGFpbDo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQog IHsKICAgIENPUkJBX1NlcnZpY2VEZXRhaWwgKnJlc3VsdCA9IDA7CiAgICBpZiAob3JwaGFuID09 IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+YnVmZmVyXyA9PSAwKQogICAgICB7CiAgICAgICAg cmVzdWx0ID0gQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5j ZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6YWxsb2Ni dWYgKHRoaXMtPmxlbmd0aF8pOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7CiAgICAg ICAgdGhpcy0+cmVsZWFzZV8gPSAxOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAg IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkFfU2VydmljZURldGFpbCo+ICh0aGlzLT5i dWZmZXJfKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICBpZiAodGhpcy0+cmVs ZWFzZV8gIT0gMCkKICAgICAgewoKCiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxD T1JCQV9TZXJ2aWNlRGV0YWlsKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGlt dW1fID0gMDsKICAgICAgICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJf ID0gMDsKICAgICAgICB0aGlzLT5yZWxlYXNlXyA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVy biByZXN1bHQ7CiAgfQoKICBpbmxpbmUgY29uc3QgQ09SQkFfU2VydmljZURldGFpbCAqCiAgQ09S QkFfU2VydmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2 aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6Z2V0X2J1ZmZlciAodm9pZCkg Y29uc3QKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDT1JCQV9TZXJ2aWNl RGV0YWlsICo+ICh0aGlzLT5idWZmZXJfKTsKICB9CgogIGlubGluZSB2b2lkCiAgQ09SQkFfU2Vy dmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5m b3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6cmVwbGFjZSAoQ09SQkE6OlVMb25nIG1h eCwKICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogIENPUkJBX1NlcnZpY2VEZXRhaWwgKmRhdGEsCiAg Q09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAg IHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5y ZWxlYXNlXyA9PSAxKQogICAgewogICAgICBDT1JCQV9TZXJ2aWNlRGV0YWlsICp0bXAgPSByZWlu dGVycHJldF9jYXN0PENPUkJBX1NlcnZpY2VEZXRhaWwqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAg IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFf U2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VEZXRhaWw6OmZyZWVidWYgKHRtcCk7 CiAgICB9CiAgICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVs ZWFzZTsKICB9CiMgMTA2NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9TZXJ2aWNlcy5pIgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpf dGFvX3NlcV9TZXJ2aWNlRGV0YWlsX3Zhcjo6X3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgKHZv aWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rh b19zZXFfU2VydmljZURldGFpbF92YXI6Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyIChDT1JC QV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWwgKnApCiAgOiBwdHJf IChwKQp7fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vydmlj ZURldGFpbF92YXI6Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyIChjb25zdCBDT1JCQV9TZXJ2 aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyICZwKQp7CiAgaWYgKHAu cHRyXykKICAgIHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFv X3NlcV9TZXJ2aWNlRGV0YWlsKCpwLnB0cl8pOwogIGVsc2UKICAgIHRoaXMtPnB0cl8gPSAwOwp9 CgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWls X3Zhcjo6fl90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMt PnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZp Y2VEZXRhaWxfdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNl RGV0YWlsX3Zhcjo6b3BlcmF0b3I9IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2Vx X1NlcnZpY2VEZXRhaWwgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0g cDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90 YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFv X3NlcV9TZXJ2aWNlRGV0YWlsX3Zhcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9TZXJ2aWNlSW5m b3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0g JnApCiAgewogICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICB0aGlzLT5wdHJfID0gbmV3IENPUkJB X1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAoKnAucHRyXyk7CiAg fQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlv bjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rh b19zZXFfU2VydmljZURldGFpbF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1 cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19z ZXFfU2VydmljZURldGFpbCAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vy dmljZURldGFpbF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsK fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFp bF92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFf U2VydmljZURldGFpbCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5l CkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbF92YXI6Om9w ZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAm KCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1h dGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbF92YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VJ bmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAmKCkgY29uc3QKewogIHJldHVybiAq dGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgJgpDT1JCQV9TZXJ2aWNl SW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyOjpvcGVyYXRvcltdIChDT1JC QTo6VUxvbmcgc2xvdCkKewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChzbG90KTsK fQoKaW5saW5lIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vydmlj ZURldGFpbCAmCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFp bF92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUg Q09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICYKQ09SQkFf U2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX3Zhcjo6aW5vdXQgKHZv aWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgQ09SQkFfU2VydmljZUluZm9y bWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIComCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlv bjo6X3Rhb19zZXFfU2VydmljZURldGFpbF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlz LT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg Q09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICoKQ09SQkFf U2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX3Zhcjo6X3JldG4gKHZv aWQpCnsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWwg KnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5s aW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAqCkNP UkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbF92YXI6OnB0ciAo dm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lCkNPUkJBX1Nl cnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbF9vdXQ6Ol90YW9fc2VxX1Nl cnZpY2VEZXRhaWxfb3V0IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZp Y2VEZXRhaWwgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUK Q09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX291dDo6X3Rh b19zZXFfU2VydmljZURldGFpbF9vdXQgKENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19z ZXFfU2VydmljZURldGFpbF92YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRlbGV0ZSB0 aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9y bWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX291dDo6X3Rhb19zZXFfU2VydmljZURldGFp bF9vdXQgKGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURl dGFpbF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PENPUkJBX1NlcnZpY2VJbmZvcm1hdGlv bjo6X3Rhb19zZXFfU2VydmljZURldGFpbF9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSBDT1JC QV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfb3V0ICYKQ09SQkFf U2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX291dDo6b3BlcmF0b3I9 IChjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxf b3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNvbnN0X2Nhc3Q8Q09SQkFfU2VydmljZUluZm9ybWF0 aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhp czsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURl dGFpbF9vdXQgJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRh aWxfb3V0OjpvcGVyYXRvcj0gKENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vy dmljZURldGFpbCAqcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5s aW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbF9vdXQ6 Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFp bCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZv cm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAqJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRp b246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4gdGhp cy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vy dmljZURldGFpbCAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURl dGFpbF9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s aW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9f c2VxX1NlcnZpY2VEZXRhaWxfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkKewog IHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChzbG90KTsKfQojIDUzNiAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXJ2aWNlcy5oIiAyCgoK CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bv c3QuaCIgMQojIDU0MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9TZXJ2aWNlcy5oIiAyCiMgMjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0NPUkJBX1N0cmluZy5oIiAxCiMgMjEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ09SQkFfU3RyaW5n LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3By ZS5oIiAxCiMgMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vQ09SQkFfU3RyaW5nLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjQgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ09SQkFfU3RyaW5nLmgiIDIKIyA0 MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DT1JC QV9TdHJpbmcuaCIKY2xhc3MgQ09SQkFfU3RyaW5nX3Zhcgp7CnB1YmxpYzoKCiAgQ09SQkFfU3Ry aW5nX3ZhciAodm9pZCk7CgoKICBDT1JCQV9TdHJpbmdfdmFyIChjaGFyICpwKTsKCgogIENPUkJB X1N0cmluZ192YXIgKGNvbnN0IGNoYXIgKnApOwoKCiAgQ09SQkFfU3RyaW5nX3ZhciAoY29uc3Qg Q09SQkFfU3RyaW5nX3ZhciAmcyk7CgoKICB+Q09SQkFfU3RyaW5nX3ZhciAodm9pZCk7CgoKICBD T1JCQV9TdHJpbmdfdmFyICZvcGVyYXRvcj0gKGNoYXIgKnApOwoKCiAgQ09SQkFfU3RyaW5nX3Zh ciAmb3BlcmF0b3I9IChjb25zdCBjaGFyICpwKTsKCgogIENPUkJBX1N0cmluZ192YXIgJm9wZXJh dG9yPSAoY29uc3QgQ09SQkFfU3RyaW5nX3ZhciAmcyk7CgoKICBvcGVyYXRvciBjaGFyICooKTsK CgogIG9wZXJhdG9yIGNvbnN0IGNoYXIgKigpIGNvbnN0OwoKCiAgY2hhciAmb3BlcmF0b3JbXSAo Q09SQkE6OlVMb25nIHNsb3QpOwoKCiAgY2hhciBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xv dCkgY29uc3Q7CgoKCgoKICBjb25zdCBjaGFyICppbiAodm9pZCkgY29uc3Q7CgoKICBjaGFyICom aW5vdXQgKHZvaWQpOwoKCiAgY2hhciAqJm91dCAodm9pZCk7CgoKICBjaGFyICpfcmV0biAodm9p ZCk7Cgpwcml2YXRlOgoKICBjaGFyICpwdHJfOwp9OwojIDEwOSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DT1JCQV9TdHJpbmcuaCIKY2xhc3MgQ09S QkFfU3RyaW5nX291dAp7CnB1YmxpYzoKCgoKICBDT1JCQV9TdHJpbmdfb3V0IChjaGFyIComcCk7 CgoKICBDT1JCQV9TdHJpbmdfb3V0IChDT1JCQV9TdHJpbmdfdmFyICZwKTsKCgogIENPUkJBX1N0 cmluZ19vdXQgKGNvbnN0IENPUkJBX1N0cmluZ19vdXQgJnMpOwoKCiAgQ09SQkFfU3RyaW5nX291 dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9TdHJpbmdfb3V0ICZzKTsKCgogIENPUkJBX1N0cmlu Z19vdXQgJm9wZXJhdG9yPSAoY2hhciAqcCk7CgoKICBDT1JCQV9TdHJpbmdfb3V0JiBvcGVyYXRv cj0gKGNvbnN0IGNoYXIqIHApOwoKCiAgb3BlcmF0b3IgY2hhciAqJigpOwoKCiAgY2hhciAqJnB0 ciAodm9pZCk7Cgpwcml2YXRlOgoKICBjaGFyIComcHRyXzsKCgogIHZvaWQgb3BlcmF0b3I9IChj b25zdCBDT1JCQV9TdHJpbmdfdmFyICYpOwp9OwojIDE1NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DT1JCQV9TdHJpbmcuaCIKY2xhc3MgQ09SQkFf V1N0cmluZ192YXIKewpwdWJsaWM6CgogIENPUkJBX1dTdHJpbmdfdmFyICh2b2lkKTsKCgogIENP UkJBX1dTdHJpbmdfdmFyIChDT1JCQTo6V0NoYXIgKnApOwoKCiAgQ09SQkFfV1N0cmluZ192YXIg KGNvbnN0IENPUkJBOjpXQ2hhciAqcCk7CgoKICBDT1JCQV9XU3RyaW5nX3ZhciAoY29uc3QgQ09S QkFfV1N0cmluZ192YXIgJnMpOwoKCiAgfkNPUkJBX1dTdHJpbmdfdmFyICh2b2lkKTsKCgogIENP UkJBX1dTdHJpbmdfdmFyICZvcGVyYXRvcj0gKENPUkJBOjpXQ2hhciAqcCk7CgoKICBDT1JCQV9X U3RyaW5nX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQTo6V0NoYXIgKnApOwoKCiAgQ09SQkFf V1N0cmluZ192YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfV1N0cmluZ192YXIgJnMpOwoKCiAg b3BlcmF0b3IgQ09SQkE6OldDaGFyICooKTsKCgogIG9wZXJhdG9yIGNvbnN0IENPUkJBOjpXQ2hh ciAqKCkgY29uc3Q7CgoKICBDT1JCQTo6V0NoYXIgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBz bG90KTsKCgogIENPUkJBOjpXQ2hhciBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkgY29u c3Q7CgoKCgoKICBjb25zdCBDT1JCQTo6V0NoYXIgKmluICh2b2lkKSBjb25zdDsKCgogIENPUkJB OjpXQ2hhciAqJmlub3V0ICh2b2lkKTsKCgogIENPUkJBOjpXQ2hhciAqJm91dCAodm9pZCk7CgoK ICBDT1JCQTo6V0NoYXIgKl9yZXRuICh2b2lkKTsKCnByaXZhdGU6CgogIENPUkJBOjpXQ2hhciAq cHRyXzsKfTsKIyAyMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vQ09SQkFfU3RyaW5nLmgiCmNsYXNzIENPUkJBX1dTdHJpbmdfb3V0CnsKcHVibGlj OgoKCgogIENPUkJBX1dTdHJpbmdfb3V0IChDT1JCQTo6V0NoYXIgKiZwKTsKCgogIENPUkJBX1dT dHJpbmdfb3V0IChDT1JCQV9XU3RyaW5nX3ZhciAmcCk7CgoKICBDT1JCQV9XU3RyaW5nX291dCAo Y29uc3QgQ09SQkFfV1N0cmluZ19vdXQgJnMpOwoKCiAgQ09SQkFfV1N0cmluZ19vdXQgJm9wZXJh dG9yPSAoY29uc3QgQ09SQkFfV1N0cmluZ19vdXQgJnMpOwoKCiAgQ09SQkFfV1N0cmluZ19vdXQg Jm9wZXJhdG9yPSAoQ09SQkE6OldDaGFyICpwKTsKCgogIG9wZXJhdG9yIENPUkJBOjpXQ2hhciAq JigpOwoKCiAgQ09SQkE6OldDaGFyIComcHRyICh2b2lkKTsKCnByaXZhdGU6CgogIENPUkJBOjpX Q2hhciAqJnB0cl87CgoKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFfV1N0cmluZ192YXIg Jik7Cn07CgoKCiAgICAgICAgICAgb3N0cmVhbSAmCm9wZXJhdG9yPDwgKG9zdHJlYW0gJiwgY29u c3QgQ09SQkE6OlN0cmluZ192YXIgJik7CiAgICAgICAgICAgaXN0cmVhbSAmCm9wZXJhdG9yPj4g KGlzdHJlYW0gJiwgQ09SQkE6OlN0cmluZ192YXIgJik7CiAgICAgICAgICAgb3N0cmVhbSAmCm9w ZXJhdG9yPDwgKG9zdHJlYW0gJiwgQ09SQkE6OlN0cmluZ19vdXQgJik7CiAgICAgICAgICAgaXN0 cmVhbSAmCm9wZXJhdG9yPj4gKGlzdHJlYW0gJiwgQ09SQkE6OlN0cmluZ19vdXQgJik7CiAgICAg ICAgICAgb3N0cmVhbSAmCm9wZXJhdG9yPDwgKG9zdHJlYW0gJiwgY29uc3QgQ09SQkE6OldTdHJp bmdfdmFyICYpOwogICAgICAgICAgIGlzdHJlYW0gJgpvcGVyYXRvcj4+IChpc3RyZWFtICYsIENP UkJBOjpXU3RyaW5nX3ZhciAmKTsKICAgICAgICAgICBvc3RyZWFtICYKb3BlcmF0b3I8PCAob3N0 cmVhbSAmLCBDT1JCQTo6V1N0cmluZ19vdXQgJik7CiAgICAgICAgICAgaXN0cmVhbSAmCm9wZXJh dG9yPj4gKGlzdHJlYW0gJiwgQ09SQkE6OldTdHJpbmdfb3V0ICYpOwoKCgoKIyAxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0NPUkJBX1N0cmluZy5p bmwiIDEKIyA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL0NPUkJBX1N0cmluZy5pbmwiCmlubGluZQpDT1JCQV9TdHJpbmdfdmFyOjpDT1JCQV9TdHJp bmdfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKewp9CgppbmxpbmUKQ09SQkFfU3RyaW5nX3Zhcjo6 Q09SQkFfU3RyaW5nX3ZhciAoY29uc3QgY2hhciAqcCkKICA6IHB0cl8gKENPUkJBOjpzdHJpbmdf ZHVwIChwKSkKewp9CgppbmxpbmUgQ09SQkE6OkNoYXIgJgpDT1JCQV9TdHJpbmdfdmFyOjpvcGVy YXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkKewoKICByZXR1cm4gdGhpcy0+cHRyX1tzbG90XTsK fQoKaW5saW5lIENPUkJBOjpDaGFyCkNPUkJBX1N0cmluZ192YXI6Om9wZXJhdG9yW10gKENPUkJB OjpVTG9uZyBzbG90KSBjb25zdAp7CgogIHJldHVybiB0aGlzLT5wdHJfW3Nsb3RdOwp9Cgppbmxp bmUKQ09SQkFfU3RyaW5nX3Zhcjo6b3BlcmF0b3IgY2hhciAqKCkKewogIHJldHVybiB0aGlzLT5w dHJfOwp9CgppbmxpbmUKQ09SQkFfU3RyaW5nX3Zhcjo6b3BlcmF0b3IgY29uc3QgY2hhciAqKCkg Y29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgY2hhciAqCkNPUkJB X1N0cmluZ192YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlu bGluZSBjaGFyIComCkNPUkJBX1N0cmluZ192YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuIHRo aXMtPnB0cl87Cn0KCmlubGluZSBjaGFyIComCkNPUkJBX1N0cmluZ192YXI6Om91dCAodm9pZCkK ewogIENPUkJBOjpzdHJpbmdfZnJlZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IDA7CiAg cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBjaGFyICoKQ09SQkFfU3RyaW5nX3Zhcjo6X3Jl dG4gKHZvaWQpCnsKICBjaGFyICp0ZW1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsK ICByZXR1cm4gdGVtcDsKfQoKCgoKCmlubGluZQpDT1JCQV9TdHJpbmdfb3V0OjpDT1JCQV9TdHJp bmdfb3V0IChjaGFyIComcykKICA6IHB0cl8gKHMpCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5s aW5lCkNPUkJBX1N0cmluZ19vdXQ6OkNPUkJBX1N0cmluZ19vdXQgKENPUkJBX1N0cmluZ192YXIg JnMpCiAgOiBwdHJfIChzLm91dCAoKSkKewp9CgppbmxpbmUKQ09SQkFfU3RyaW5nX291dDo6Q09S QkFfU3RyaW5nX291dCAoY29uc3QgQ09SQkFfU3RyaW5nX291dCAmcykKICA6IHB0cl8gKHMucHRy XykKewp9CgppbmxpbmUgQ09SQkFfU3RyaW5nX291dCAmCkNPUkJBX1N0cmluZ19vdXQ6Om9wZXJh dG9yPSAoY29uc3QgQ09SQkFfU3RyaW5nX291dCAmcykKewogIHRoaXMtPnB0cl8gPSBzLnB0cl87 CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgQ09SQkFfU3RyaW5nX291dCAmCkNPUkJBX1N0cmlu Z19vdXQ6Om9wZXJhdG9yPSAoY2hhciAqcykKewogIHRoaXMtPnB0cl8gPSBzOwogIHJldHVybiAq dGhpczsKfQoKaW5saW5lIENPUkJBX1N0cmluZ19vdXQgJgpDT1JCQV9TdHJpbmdfb3V0OjpvcGVy YXRvcj0gKGNvbnN0IGNoYXIgKnMpCnsKICB0aGlzLT5wdHJfID0gQ09SQkE6OnN0cmluZ19kdXAg KHMpOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJBX1N0cmluZ19vdXQ6Om9wZXJhdG9y IGNoYXIgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBjaGFyIComCkNPUkJB X1N0cmluZ19vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKCgpp bmxpbmUKQ09SQkFfV1N0cmluZ192YXI6OkNPUkJBX1dTdHJpbmdfdmFyICh2b2lkKQogIDogcHRy XyAoMCkKewp9CgppbmxpbmUKQ09SQkFfV1N0cmluZ192YXI6OkNPUkJBX1dTdHJpbmdfdmFyIChj b25zdCBDT1JCQTo6V0NoYXIgKnApCiAgOiBwdHJfIChDT1JCQTo6d3N0cmluZ19kdXAgKHApKQp7 Cn0KCmlubGluZSBDT1JCQTo6V0NoYXIgJgpDT1JCQV9XU3RyaW5nX3Zhcjo6b3BlcmF0b3JbXSAo Q09SQkE6OlVMb25nIHNsb3QpCnsKCiAgcmV0dXJuIHRoaXMtPnB0cl9bc2xvdF07Cn0KCmlubGlu ZSBDT1JCQTo6V0NoYXIKQ09SQkFfV1N0cmluZ192YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9u ZyBzbG90KSBjb25zdAp7CgogIHJldHVybiB0aGlzLT5wdHJfW3Nsb3RdOwp9CgppbmxpbmUKQ09S QkFfV1N0cmluZ192YXI6Om9wZXJhdG9yIENPUkJBOjpXQ2hhciAqKCkKewogIHJldHVybiB0aGlz LT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfV1N0cmluZ192YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJB OjpXQ2hhciAqKCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3Qg Q09SQkE6OldDaGFyICoKQ09SQkFfV1N0cmluZ192YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0 dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6V0NoYXIgKiYKQ09SQkFfV1N0cmluZ192 YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6 V0NoYXIgKiYKQ09SQkFfV1N0cmluZ192YXI6Om91dCAodm9pZCkKewogIENPUkJBOjp3c3RyaW5n X2ZyZWUgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJf Owp9CgppbmxpbmUgQ09SQkE6OldDaGFyICoKQ09SQkFfV1N0cmluZ192YXI6Ol9yZXRuICh2b2lk KQp7CiAgQ09SQkE6OldDaGFyICp0ZW1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsK ICByZXR1cm4gdGVtcDsKfQoKCgoKCmlubGluZQpDT1JCQV9XU3RyaW5nX291dDo6Q09SQkFfV1N0 cmluZ19vdXQgKENPUkJBOjpXQ2hhciAqJnMpCiAgOiBwdHJfIChzKQp7CiAgdGhpcy0+cHRyXyA9 IDA7Cn0KCmlubGluZQpDT1JCQV9XU3RyaW5nX291dDo6Q09SQkFfV1N0cmluZ19vdXQgKENPUkJB X1dTdHJpbmdfdmFyICZzKQogIDogcHRyXyAocy5vdXQgKCkpCnsKfQoKaW5saW5lCkNPUkJBX1dT dHJpbmdfb3V0OjpDT1JCQV9XU3RyaW5nX291dCAoY29uc3QgQ09SQkFfV1N0cmluZ19vdXQgJnMp CiAgOiBwdHJfIChzLnB0cl8pCnsKfQoKaW5saW5lIENPUkJBX1dTdHJpbmdfb3V0ICYKQ09SQkFf V1N0cmluZ19vdXQ6Om9wZXJhdG9yPSAoY29uc3QgQ09SQkFfV1N0cmluZ19vdXQgJnMpCnsKICB0 aGlzLT5wdHJfID0gcy5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX1dTdHJp bmdfb3V0ICYKQ09SQkFfV1N0cmluZ19vdXQ6Om9wZXJhdG9yPSAoQ09SQkE6OldDaGFyICpzKQp7 CiAgdGhpcy0+cHRyXyA9IHM7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfV1N0cmlu Z19vdXQ6Om9wZXJhdG9yIENPUkJBOjpXQ2hhciAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsK fQoKaW5saW5lIENPUkJBOjpXQ2hhciAqJgpDT1JCQV9XU3RyaW5nX291dDo6cHRyICh2b2lkKQp7 CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KIyAyNzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ09SQkFfU3RyaW5nLmgiIDIKCgoKIyAxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMjgzICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0NPUkJBX1N0 cmluZy5oIiAyCiMgMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vT1JCLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIgMgoK IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RB T19FeHBvcnQuaCIgMQojIDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1BvbGljeUMuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FbmNvZGFibGUuaCIgMQojIDIwICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0VuY29kYWJsZS5oIgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIg MQojIDIxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L0VuY29kYWJsZS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRW5jb2RhYmxlLmgiIDIKIyAzNiAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FbmNvZGFibGUuaCIKY2xh c3MgVEFPX0VuY29kYWJsZQp7CnB1YmxpYzoKCiAgdmlydHVhbCB+VEFPX0VuY29kYWJsZSAodm9p ZCk7CgoKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfdGFvX2VuY29kZSAoVEFPX091dHB1dENE UiAmb3V0X2NkcikgPSAwOwoKCgogIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gX3Rhb19kZWNvZGUg KFRBT19JbnB1dENEUiAmaW5fY2RyKSA9IDA7Cn07CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA1MiAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FbmNvZGFibGUuaCIgMgojIDM0ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMu aCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vRXhjZXB0aW9uLmgiIDEKIyAzNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Vudmlyb25tZW50LmgiIDEKIyAzNiAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDIK IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Nl cXVlbmNlLmgiIDEKIyAzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL0NEUi5oIiAxCiMgMzggIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIiAyCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9SZW1vdGVfT2JqZWN0X1By b3h5X0ltcGwuaCIgMQojIDIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1JlbW90ZV9PYmplY3RfUHJveHlfSW1wbC5oIgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1JlbW90ZV9PYmplY3Rf UHJveHlfSW1wbC5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUmVtb3RlX09iamVjdF9Qcm94eV9JbXBsLmgiIDIK CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9P YmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vUmVtb3RlX09iamVjdF9Qcm94eV9JbXBsLmgiIDIKIyAzMiAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9SZW1vdGVf T2JqZWN0X1Byb3h5X0ltcGwuaCIKY2xhc3MgVEFPX1JlbW90ZV9PYmplY3RfUHJveHlfSW1wbCA6 IHB1YmxpYyB2aXJ0dWFsIFRBT19PYmplY3RfUHJveHlfSW1wbAp7CnB1YmxpYzoKCiAgVEFPX1Jl bW90ZV9PYmplY3RfUHJveHlfSW1wbCAodm9pZCk7CgogIHZpcnR1YWwgflRBT19SZW1vdGVfT2Jq ZWN0X1Byb3h5X0ltcGwgKHZvaWQpOwoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hIChj b25zdCBDT1JCQTo6T2JqZWN0X3B0ciB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQ09SQkE6OkNoYXIgKmxvZ2ljYWxfdHlwZV9pZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZSk7CgoKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfbm9uX2V4aXN0ZW50IChj b25zdCBDT1JCQTo6T2JqZWN0X3B0ciB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZSk7CgogIHZpcnR1YWwgQ09SQkFfSW50ZXJmYWNlRGVmX3B0ciBfZ2V0X2ludGVyZmFj ZSAoCiAgICAgIGNvbnN0IENPUkJBOjpPYmplY3RfcHRyIHRhcmdldCwKICAgICAgQ09SQkFfRW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7CgoKCn07Cgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0Lmgi IDEKIyA1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwuaCIgMgojIDM5ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIgMgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaCIgMQoj IDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0N1 cnJlbnRDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vQ3VycmVudEMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0LmgiIDEKIyAyNyAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DdXJyZW50Qy5oIiAyCgoKCgoKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJh ZndkLmgiIDEKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9DdXJyZW50Qy5oIiAyCiMgNjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaCIKY2xhc3MgQ09SQkFfQ3VycmVudDsKdHlw ZWRlZiBDT1JCQV9DdXJyZW50ICpDT1JCQV9DdXJyZW50X3B0cjsKCgoKCgoKCmNsYXNzIENPUkJB X0N1cnJlbnRfdmFyIDogcHVibGljIFRBT19CYXNlX3Zhcgp7CnB1YmxpYzoKICBDT1JCQV9DdXJy ZW50X3ZhciAodm9pZCk7CiAgQ09SQkFfQ3VycmVudF92YXIgKENPUkJBX0N1cnJlbnRfcHRyIHAp IDogcHRyXyAocCkge30KICBDT1JCQV9DdXJyZW50X3ZhciAoY29uc3QgQ09SQkFfQ3VycmVudF92 YXIgJik7CiAgfkNPUkJBX0N1cnJlbnRfdmFyICh2b2lkKTsKCiAgQ09SQkFfQ3VycmVudF92YXIg Jm9wZXJhdG9yPSAoQ09SQkFfQ3VycmVudF9wdHIpOwogIENPUkJBX0N1cnJlbnRfdmFyICZvcGVy YXRvcj0gKGNvbnN0IENPUkJBX0N1cnJlbnRfdmFyICYpOwogIENPUkJBX0N1cnJlbnRfcHRyIG9w ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9DdXJyZW50X3B0 ciAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfQ3VycmVudF9wdHIgJigpOwoKICBDT1JCQV9D dXJyZW50X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgQ09SQkFfQ3VycmVudF9wdHIgJmlub3V0ICh2 b2lkKTsKICBDT1JCQV9DdXJyZW50X3B0ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9DdXJyZW50X3B0 ciBfcmV0biAodm9pZCk7CiAgQ09SQkFfQ3VycmVudF9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoK ICBzdGF0aWMgQ09SQkFfQ3VycmVudF9wdHIgZHVwbGljYXRlIChDT1JCQV9DdXJyZW50X3B0cik7 CiAgc3RhdGljIHZvaWQgcmVsZWFzZSAoQ09SQkFfQ3VycmVudF9wdHIpOwogIHN0YXRpYyBDT1JC QV9DdXJyZW50X3B0ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBDT1JCQV9DdXJyZW50X3B0ciBuYXJy b3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogIHN0YXRpYyBDT1JC QTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKcHJpdmF0ZToKICBDT1JCQV9DdXJyZW50X3B0 ciBwdHJfOwoKICBDT1JCQV9DdXJyZW50X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwog IENPUkJBX0N1cnJlbnRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsK fTsKIyAxMTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vQ3VycmVudEMuaCIKY2xhc3MgQ09SQkFfQ3VycmVudF9vdXQKewpwdWJsaWM6CiAgQ09SQkFf Q3VycmVudF9vdXQgKENPUkJBX0N1cnJlbnRfcHRyICYpOwogIENPUkJBX0N1cnJlbnRfb3V0IChD T1JCQV9DdXJyZW50X3ZhciAmKTsKICBDT1JCQV9DdXJyZW50X291dCAoY29uc3QgQ09SQkFfQ3Vy cmVudF9vdXQgJik7CiAgQ09SQkFfQ3VycmVudF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFf Q3VycmVudF9vdXQgJik7CiAgQ09SQkFfQ3VycmVudF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09S QkFfQ3VycmVudF92YXIgJik7CiAgQ09SQkFfQ3VycmVudF9vdXQgJm9wZXJhdG9yPSAoQ09SQkFf Q3VycmVudF9wdHIpOwogIG9wZXJhdG9yIENPUkJBX0N1cnJlbnRfcHRyICYoKTsKICBDT1JCQV9D dXJyZW50X3B0ciAmcHRyICh2b2lkKTsKICBDT1JCQV9DdXJyZW50X3B0ciBvcGVyYXRvci0+ICh2 b2lkKTsKCnByaXZhdGU6CiAgQ09SQkFfQ3VycmVudF9wdHIgJnB0cl87Cn07CiMgMTM3ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0N1cnJlbnRDLmgi CmNsYXNzIENPUkJBX0N1cnJlbnQgOiBwdWJsaWMgdmlydHVhbCBDT1JCQV9PYmplY3QKewpwdWJs aWM6CgogIHR5cGVkZWYgQ09SQkFfQ3VycmVudF9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgQ09S QkFfQ3VycmVudF92YXIgX3Zhcl90eXBlOwoKCgogIHN0YXRpYyBDT1JCQV9DdXJyZW50X3B0ciBf ZHVwbGljYXRlIChDT1JCQV9DdXJyZW50X3B0ciBvYmopOwogIHN0YXRpYyBDT1JCQV9DdXJyZW50 X3B0ciBfbmFycm93ICgKICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICBDT1JCQTo6 RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwogIHN0YXRpYyBDT1JCQV9DdXJyZW50X3B0 ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgKTsKICBzdGF0aWMgQ09SQkFfQ3Vy cmVudF9wdHIgX25pbCAodm9pZCkKICAgIHsKICAgICAgcmV0dXJuIChDT1JCQV9DdXJyZW50X3B0 cikwOwogICAgfQoKICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0 aF90IHR5cGUpOwoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9p ZCAodm9pZCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgQ09SQkFfQ3VycmVudCAodm9pZCk7CgogIHZp cnR1YWwgfkNPUkJBX0N1cnJlbnQgKHZvaWQpOwpwcml2YXRlOgogIENPUkJBX0N1cnJlbnQgKGNv bnN0IENPUkJBX0N1cnJlbnQgJik7CiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0N1cnJl bnQgJik7Cn07CiMgMTg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL0N1cnJlbnRDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9DdXJyZW50Qy5pIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaSIKaW5saW5lIENPUkJB X0N1cnJlbnRfcHRyCnRhb19DT1JCQV9DdXJyZW50X2R1cGxpY2F0ZSAoCiAgICBDT1JCQV9DdXJy ZW50X3B0ciBwCiAgKQp7CiAgcmV0dXJuIENPUkJBX0N1cnJlbnQ6Ol9kdXBsaWNhdGUgKHApOwp9 CgppbmxpbmUgdm9pZAp0YW9fQ09SQkFfQ3VycmVudF9yZWxlYXNlICgKICAgIENPUkJBX0N1cnJl bnRfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBDT1JCQV9DdXJy ZW50X3B0cgp0YW9fQ09SQkFfQ3VycmVudF9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBD T1JCQV9DdXJyZW50OjpfbmlsICgpOwp9CgppbmxpbmUgQ09SQkFfQ3VycmVudF9wdHIKdGFvX0NP UkJBX0N1cnJlbnRfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4g Q09SQkFfQ3VycmVudDo6X25hcnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX0NPUkJBX0N1cnJlbnRfdXBjYXN0ICgK ICAgIHZvaWQgKnNyYwogICkKewogIENPUkJBX0N1cnJlbnQgKip0bXAgPQogICAgc3RhdGljX2Nh c3Q8Q09SQkFfQ3VycmVudCAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxODcgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaCIg MgojIDE5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9DdXJyZW50Qy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9wb3N0LmgiIDEKIyAxOTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaCIgMgojIDQwICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIgMgojIDY3ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIKY2xh c3MgQ09SQkFfUG9saWN5RXJyb3IgOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24KewpwdWJs aWM6CiAgICBDT1JCQTo6UG9saWN5RXJyb3JDb2RlIHJlYXNvbjsKCiAgICBDT1JCQV9Qb2xpY3lF cnJvciAodm9pZCk7CgoKICAgIENPUkJBX1BvbGljeUVycm9yIChjb25zdCBDT1JCQV9Qb2xpY3lF cnJvciAmKTsKCgogICAgfkNPUkJBX1BvbGljeUVycm9yICh2b2lkKTsKCgogICAgc3RhdGljIHZv aWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIENPUkJBX1BvbGljeUVycm9yICZv cGVyYXRvcj0gKGNvbnN0IENPUkJBX1BvbGljeUVycm9yICYpOwoKICAgIHZpcnR1YWwgdm9pZCBf cmFpc2UgKHZvaWQpOwoKICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgVEFP X091dHB1dENEUiAmLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICkgY29uc3Q7 CgogICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICBUQU9fSW5wdXRDRFIgJiwK ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICApOwoKICAgIHN0YXRpYyBDT1JCQV9Q b2xpY3lFcnJvciAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKICAgIENPUkJBX1Bv bGljeUVycm9yICgKICAgICAgICBDT1JCQTo6UG9saWN5RXJyb3JDb2RlIF90YW9fcmVhc29uCiAg ICAgICk7CgoKICAgIHN0YXRpYyBDT1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwogICAg dmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsKICB9OwojIDEx NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xp Y3lDLmgiCiAgY2xhc3MgQ09SQkFfSW52YWxpZFBvbGljaWVzIDogcHVibGljIENPUkJBOjpVc2Vy RXhjZXB0aW9uCiAgewogIHB1YmxpYzoKCgoKCgoKICAgICAgY2xhc3MgX1RBT19VbmJvdW5kZWRf U2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydCA6IHB1YmxpYyBU QU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UKICAgICAgewogICAgICBwdWJsaWM6CgoKICAgICAg ICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFf VVNob3J0ICh2b2lkKTsKICAgICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZh bGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0IChDT1JCQTo6VUxvbmcgbWF4aW11bSk7CiAgICAg ICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2Vx X1VTaG9ydCAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVu Z3RoLAogICAgICAgICAgQ09SQkE6OlVTaG9ydCAqZGF0YSwKICAgICAgICAgIENPUkJBOjpCb29s ZWFuIHJlbGVhc2UgPSAwKTsKICAgICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9J bnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1 ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0ICZyaHMpOwogICAgICAg IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9V U2hvcnQgJm9wZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52 YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydCAmcmhzKTsKICAgICAgICB2aXJ0dWFsIH5fVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0 ICh2b2lkKTsKCiAgICAgICAgQ09SQkE6OlVTaG9ydCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25n IGkpOwogICAgICAgIGNvbnN0IENPUkJBOjpVU2hvcnQgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9u ZyBpKSBjb25zdDsKCiAgICAgICAgc3RhdGljIENPUkJBOjpVU2hvcnQgKmFsbG9jYnVmIChDT1JC QTo6VUxvbmcgc2l6ZSk7CiAgICAgICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoQ09SQkE6OlVTaG9y dCAqYnVmZmVyKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6 OlVMb25nIGxlbmd0aCk7CiAgICAgICAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1ZmZlciAo dm9pZCk7CgoKICAgICAgICBDT1JCQTo6VVNob3J0ICpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVh biBvcnBoYW4gPSAwKTsKICAgICAgICBjb25zdCBDT1JCQTo6VVNob3J0ICpnZXRfYnVmZmVyICh2 b2lkKSBjb25zdDsKICAgICAgICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAg ICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgQ09SQkE6OlVTaG9ydCAqZGF0YSwK ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpOwogICAgICB9OwojIDE2NCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCiAg ICBjbGFzcyBfdGFvX3NlcV9VU2hvcnQ7CiAgICBjbGFzcyBfdGFvX3NlcV9VU2hvcnRfdmFyOwoK CgoKCiAgICBjbGFzcyBfdGFvX3NlcV9VU2hvcnQgOiBwdWJsaWMKCiAgICAgIF9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQKCgoKICAg IHsKICAgIHB1YmxpYzoKICAgICAgX3Rhb19zZXFfVVNob3J0ICh2b2lkKTsKICAgICAgX3Rhb19z ZXFfVVNob3J0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfVVNob3J0ICgKICAg ICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAg ICAgQ09SQkE6OlVTaG9ydCAqYnVmZmVyLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2Ug PSAwCiAgICAgICk7CiAgICAgIF90YW9fc2VxX1VTaG9ydCAoY29uc3QgX3Rhb19zZXFfVVNob3J0 ICYpOwogICAgICB+X3Rhb19zZXFfVVNob3J0ICh2b2lkKTsKICAgICAgc3RhdGljIHZvaWQgX3Rh b19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgICAgIHR5cGVkZWYgX3Rhb19zZXFfVVNob3J0 X3ZhciBfdmFyX3R5cGU7CgoKICAgIH07CgoKCgogICAgdHlwZWRlZiBfdGFvX3NlcV9VU2hvcnQg X2luZGljZXNfc2VxOwoKCiAgICAgICAgICBfdGFvX3NlcV9VU2hvcnQgaW5kaWNlczsKCiAgICBD T1JCQV9JbnZhbGlkUG9saWNpZXMgKHZvaWQpOwoKCiAgICBDT1JCQV9JbnZhbGlkUG9saWNpZXMg KGNvbnN0IENPUkJBX0ludmFsaWRQb2xpY2llcyAmKTsKCgogICAgfkNPUkJBX0ludmFsaWRQb2xp Y2llcyAodm9pZCk7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQq KTsKCiAgICBDT1JCQV9JbnZhbGlkUG9saWNpZXMgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfSW52 YWxpZFBvbGljaWVzICYpOwoKICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgIHZp cnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAg IENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIF90 YW9fZGVjb2RlICgKICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJgogICAgICApOwoKICAgIHN0YXRpYyBDT1JCQV9JbnZhbGlkUG9saWNpZXMgKl9kb3du Y2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCiAgICBDT1JCQV9JbnZhbGlkUG9saWNpZXMgKAog ICAgICAgIGNvbnN0IF90YW9fc2VxX1VTaG9ydCAmIF90YW9faW5kaWNlcwogICAgICApOwoKCiAg ICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIHZpcnR1YWwgQ09S QkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7CiAgfTsKCgoKCgoKCiAgY2xhc3Mg Q09SQkFfUG9saWN5X3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAg Q09SQkFfUG9saWN5X3ZhciAodm9pZCk7CiAgICBDT1JCQV9Qb2xpY3lfdmFyIChDT1JCQV9Qb2xp Y3lfcHRyIHApIDogcHRyXyAocCkge30KICAgIENPUkJBX1BvbGljeV92YXIgKGNvbnN0IENPUkJB X1BvbGljeV92YXIgJik7CiAgICB+Q09SQkFfUG9saWN5X3ZhciAodm9pZCk7CgogICAgQ09SQkFf UG9saWN5X3ZhciAmb3BlcmF0b3I9IChDT1JCQV9Qb2xpY3lfcHRyKTsKICAgIENPUkJBX1BvbGlj eV92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9saWN5X3ZhciAmKTsKICAgIENPUkJBX1Bv bGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgQ09S QkFfUG9saWN5X3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBDT1JCQV9Qb2xpY3lfcHRyICYo KTsKCiAgICBDT1JCQV9Qb2xpY3lfcHRyIGluICh2b2lkKSBjb25zdDsKICAgIENPUkJBX1BvbGlj eV9wdHIgJmlub3V0ICh2b2lkKTsKICAgIENPUkJBX1BvbGljeV9wdHIgJm91dCAodm9pZCk7CiAg ICBDT1JCQV9Qb2xpY3lfcHRyIF9yZXRuICh2b2lkKTsKICAgIENPUkJBX1BvbGljeV9wdHIgcHRy ICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBDT1JCQV9Qb2xpY3lfcHRyIGR1cGxpY2F0ZSAo Q09SQkFfUG9saWN5X3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChDT1JCQV9Qb2xpY3lf cHRyKTsKICAgIHN0YXRpYyBDT1JCQV9Qb2xpY3lfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMg Q09SQkFfUG9saWN5X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25t ZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHBy aXZhdGU6CiAgICBDT1JCQV9Qb2xpY3lfcHRyIHB0cl87CgogICAgQ09SQkFfUG9saWN5X3ZhciAo Y29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgQ09SQkFfUG9saWN5X3ZhciAmb3BlcmF0b3I9 IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyAyOTAgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIgogIGNsYXNzIENPUkJB X1BvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgQ09SQkFfUG9saWN5X291dCAoQ09SQkFfUG9s aWN5X3B0ciAmKTsKICAgIENPUkJBX1BvbGljeV9vdXQgKENPUkJBX1BvbGljeV92YXIgJik7CiAg ICBDT1JCQV9Qb2xpY3lfb3V0IChjb25zdCBDT1JCQV9Qb2xpY3lfb3V0ICYpOwogICAgQ09SQkFf UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3lfb3V0ICYpOwogICAgQ09S QkFfUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3lfdmFyICYpOwogICAg Q09SQkFfUG9saWN5X291dCAmb3BlcmF0b3I9IChDT1JCQV9Qb2xpY3lfcHRyKTsKICAgIG9wZXJh dG9yIENPUkJBX1BvbGljeV9wdHIgJigpOwogICAgQ09SQkFfUG9saWN5X3B0ciAmcHRyICh2b2lk KTsKICAgIENPUkJBX1BvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAg ICBDT1JCQV9Qb2xpY3lfcHRyICZwdHJfOwogIH07CiMgMzE1ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIKICBjbGFzcyBDT1JCQV9U QU9fUG9saWN5X1Byb3h5X0ltcGw7CiAgY2xhc3MgQ09SQkFfVEFPX1BvbGljeV9SZW1vdGVfUHJv eHlfSW1wbDsKICBjbGFzcyBDT1JCQV9UQU9fUG9saWN5X1Byb3h5X0Jyb2tlcjsKICBjbGFzcyBD T1JCQV9UQU9fUG9saWN5X1JlbW90ZV9Qcm94eV9Ccm9rZXI7CgpjbGFzcyBDT1JCQV9Qb2xpY3kK ICA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdCwKICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19F bmNvZGFibGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgQ09SQkFfUG9saWN5X3B0ciBfcHRy X3R5cGU7CiAgICB0eXBlZGVmIENPUkJBX1BvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3Rh dGljIENPUkJBX1BvbGljeV9wdHIgX2R1cGxpY2F0ZSAoQ09SQkFfUG9saWN5X3B0ciBvYmopOwog ICAgc3RhdGljIENPUkJBX1BvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVj dF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg ICApOwogICAgc3RhdGljIENPUkJBX1BvbGljeV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAg ICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBDT1JCQV9Qb2xpY3lfcHRyIF9uaWwgKHZv aWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKENPUkJBX1BvbGljeV9wdHIpMDsKICAgICAgfQoK ICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICB2aXJ0dWFs IENPUkJBOjpQb2xpY3lUeXBlIHBvbGljeV90eXBlICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24gKTsKCgoKICAgIHZpcnR1YWwgQ09SQkE6OlBvbGljeV9wdHIgY29weSAoCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD T1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSAoCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhy b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29s ZWFuIF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6Q2hhciAqdHlwZV9pZCwKICAgICAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg ICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHZpcnR1YWwgdm9p ZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBj b25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICAgIHZp cnR1YWwgQ09SQkE6OkJvb2xlYW4gX3Rhb19lbmNvZGUgKFRBT19PdXRwdXRDRFIgJik7CiAgICB2 aXJ0dWFsIENPUkJBOjpCb29sZWFuIF90YW9fZGVjb2RlIChUQU9fSW5wdXRDRFIgJik7CgoKICAg IHZpcnR1YWwgVEFPX0NhY2hlZF9Qb2xpY3lfVHlwZSBfdGFvX2NhY2hlZF90eXBlICh2b2lkKSBj b25zdDsKCgogICAgdmlydHVhbCBUQU9fUG9saWN5X1Njb3BlIF90YW9fc2NvcGUgKHZvaWQpIGNv bnN0OwoKICBwcml2YXRlOgogICAgQ09SQkFfVEFPX1BvbGljeV9Qcm94eV9Ccm9rZXIgKnRoZV9D T1JCQV9UQU9fUG9saWN5X1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIENPUkJBX1Bv bGljeSAoaW50IGNvbGxvY2F0ZWQgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgdmlydHVh bCB2b2lkIENPUkJBX1BvbGljeV9zZXR1cF9jb2xsb2NhdGlvbiAoaW50IGNvbGxvY2F0ZWQpOwoK ICAgICAgQ09SQkFfUG9saWN5ICgKICAgICAgICBUQU9fU3R1YiAqb2JqcmVmLAogICAgICAgIENP UkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAgVEFPX0Fic3RyYWN0X1Nl cnZhbnRCYXNlICpzZXJ2YW50ID0gMAogICAgICAgICk7CgogICAgICBmcmllbmQgY2xhc3MgQ09S QkFfVEFPX1BvbGljeV9SZW1vdGVfUHJveHlfSW1wbDsKICAgICAgZnJpZW5kIGNsYXNzIENPUkJB X1RBT19Qb2xpY3lfVGhydVBPQV9Qcm94eV9JbXBsOwogICAgICBmcmllbmQgY2xhc3MgQ09SQkFf VEFPX1BvbGljeV9EaXJlY3RfUHJveHlfSW1wbDsKCiAgICB2aXJ0dWFsIH5DT1JCQV9Qb2xpY3kg KHZvaWQpOwogIHByaXZhdGU6CiAgICBDT1JCQV9Qb2xpY3kgKGNvbnN0IENPUkJBX1BvbGljeSAm KTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3kgJik7CiAgfTsKIyA0Mjgg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5 Qy5oIgogIGNsYXNzIENPUkJBX1RBT19Qb2xpY3lfUHJveHlfSW1wbCA6IHB1YmxpYyB2aXJ0dWFs IFRBT19PYmplY3RfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5DT1JCQV9U QU9fUG9saWN5X1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICAgICAgICB2aXJ0dWFsIENPUkJBOjpQ b2xpY3lUeXBlIHBvbGljeV90eXBlICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBfY29sbG9j YXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F eGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpQb2xpY3lfcHRyIGNvcHkgKAog ICAgICAgIENPUkJBOjpPYmplY3RfcHRyIF9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAg IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAg ICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZp cnR1YWwgdm9pZCBkZXN0cm95ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBfY29sbG9jYXRl ZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24gKSA9IDA7CgoKCnByb3RlY3RlZDoKICAgIENPUkJBX1RBT19Qb2xpY3lfUHJveHlfSW1w bCAodm9pZCk7CgogIH07CiMgNDcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIKY2xhc3MgQ09SQkFfVEFPX1BvbGljeV9SZW1vdGVf UHJveHlfSW1wbCA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkFfVEFPX1BvbGljeV9Qcm94eV9JbXBs LAogIHB1YmxpYyB2aXJ0dWFsIFRBT19SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwKewpwdWJsaWM6 CiAgQ09SQkFfVEFPX1BvbGljeV9SZW1vdGVfUHJveHlfSW1wbCAodm9pZCk7CgogIHZpcnR1YWwg fkNPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICB2aXJ0dWFs IENPUkJBOjpQb2xpY3lUeXBlIHBvbGljeV90eXBlICgKICAgICAgQ09SQkE6Ok9iamVjdF9wdHIg X2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgKQogICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVt RXhjZXB0aW9uICk7CgoKCnZpcnR1YWwgQ09SQkE6OlBvbGljeV9wdHIgY29weSAoCiAgICAgIENP UkJBOjpPYmplY3RfcHRyIF9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICkKICAgIHRocm93 ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgp2aXJ0dWFsIHZvaWQgZGVzdHJveSAoCiAg ICAgIENPUkJBOjpPYmplY3RfcHRyIF9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICkKICAg IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgp9OwojIDUyMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCmNsYXNz IENPUkJBX1RBT19Qb2xpY3lfUHJveHlfQnJva2VyCnsKcHVibGljOgogIHZpcnR1YWwgfkNPUkJB X1RBT19Qb2xpY3lfUHJveHlfQnJva2VyICh2b2lkKTsKICB2aXJ0dWFsIENPUkJBX1RBT19Qb2xp Y3lfUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgIENPUkJBX1BvbGljeSAqb2JqZWN0LAog ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAp ID0gMDsKCnByb3RlY3RlZDoKICBDT1JCQV9UQU9fUG9saWN5X1Byb3h5X0Jyb2tlciAodm9pZCk7 Cgp9OwojIDU0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9Qb2xpY3lDLmgiCmNsYXNzIENPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1Byb3h5X0Jyb2tl ciA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX1RBT19Qb2xpY3lfUHJveHlfQnJva2VyCnsKcHVibGlj OgogIENPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogIHZpcnR1 YWwgfkNPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogIHZpcnR1 YWwgQ09SQkFfVEFPX1BvbGljeV9Qcm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgQ09SQkFf UG9saWN5ICpvYmplY3QsCiAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZQogICk7Cgpwcml2YXRlOgogIENPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1By b3h5X0ltcGwgcmVtb3RlX3Byb3h5X2ltcGxfOwoKCgoKcHVibGljOgogIHN0YXRpYyBDT1JCQV9U QU9fUG9saWN5X1JlbW90ZV9Qcm94eV9Ccm9rZXIgKnRoZV9DT1JCQV9UQU9fUG9saWN5X1JlbW90 ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwp9OwojIDU4MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCiAgY2xhc3MgX1RBT19VbmJvdW5k ZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgOiBwdWJsaWMgVEFPX1VuYm91bmRl ZF9CYXNlX1NlcXVlbmNlCiAgewogIHB1YmxpYzoKCgogICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0 X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgKHZvaWQpOwogICAgX1RBT19VbmJvdW5kZWRfT2Jq ZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsKICAg IF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0IChDT1JCQTo6 VUxvbmcgbWF4aW11bSwKICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgQ09SQkFfUG9s aWN5KiAqdmFsdWUsCiAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKICAgIF9UQU9f VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0KGNvbnN0IF9UQU9fVW5i b3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0ICZyaHMpOwogICAgdmlydHVh bCB+X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgKHZvaWQp OwogICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgJm9w ZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGlj eUxpc3QgJnJocyk7CiAgICBUQU9fT2JqZWN0X01hbmFnZXI8Q09SQkE6OlBvbGljeSxDT1JCQTo6 UG9saWN5X3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdDsKICAgIHN0 YXRpYyBDT1JCQV9Qb2xpY3kgKiphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIG5lbGVtcyk7CiAgICBz dGF0aWMgdm9pZCBmcmVlYnVmIChDT1JCQV9Qb2xpY3kgKipidWZmZXIpOwoKICAgIHZpcnR1YWwg dm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKTsKICAgIHZpcnR1YWwg dm9pZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwogICAgQ09SQkFfUG9saWN5KiAqZ2V0X2J1 ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuID0gMCk7CiAgICBjb25zdCBDT1JCQV9Qb2xpY3kq ICpnZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBfc2hyaW5rX2J1ZmZl ciAoQ09SQkE6OlVMb25nIG5sLCBDT1JCQTo6VUxvbmcgb2wpOwogICAgdmlydHVhbCB2b2lkIF9k b3duY2FzdCAoCiAgICAgICAgdm9pZCogdGFyZ2V0LAogICAgICAgIENPUkJBX09iamVjdCAqc3Jj LAogICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICB2 aXJ0dWFsIENPUkJBX09iamVjdCogX3VwY2FzdCAodm9pZCAqc3JjKSBjb25zdDsKCiAgfTsKIyA2 MjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9s aWN5Qy5oIgpjbGFzcyBDT1JCQV9Qb2xpY3lMaXN0IDogcHVibGljCgogIF9UQU9fVW5ib3VuZGVk X09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0CgoKCnsKcHVibGljOgogIENPUkJBX1Bv bGljeUxpc3QgKHZvaWQpOwogIENPUkJBX1BvbGljeUxpc3QgKENPUkJBOjpVTG9uZyBtYXgpOwog IENPUkJBX1BvbGljeUxpc3QgKAogICAgQ09SQkE6OlVMb25nIG1heCwKICAgIENPUkJBOjpVTG9u ZyBsZW5ndGgsCiAgICBDT1JCQV9Qb2xpY3lfcHRyICpidWZmZXIsCiAgICBDT1JCQTo6Qm9vbGVh biByZWxlYXNlID0gMAogICk7CiAgQ09SQkFfUG9saWN5TGlzdCAoY29uc3QgQ09SQkFfUG9saWN5 TGlzdCAmKTsKICB+Q09SQkFfUG9saWN5TGlzdCAodm9pZCk7CiAgc3RhdGljIHZvaWQgX3Rhb19h bnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgdHlwZWRlZiBDT1JCQV9Qb2xpY3lMaXN0X3ZhciBf dmFyX3R5cGU7CgoKfTsKIyA2NjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIgpjbGFzcyBDT1JCQV9Qb2xpY3lMaXN0X3Zhcgp7CnB1 YmxpYzoKICBDT1JCQV9Qb2xpY3lMaXN0X3ZhciAodm9pZCk7CiAgQ09SQkFfUG9saWN5TGlzdF92 YXIgKENPUkJBX1BvbGljeUxpc3QgKik7CiAgQ09SQkFfUG9saWN5TGlzdF92YXIgKGNvbnN0IENP UkJBX1BvbGljeUxpc3RfdmFyICYpOwogIH5DT1JCQV9Qb2xpY3lMaXN0X3ZhciAodm9pZCk7Cgog IENPUkJBX1BvbGljeUxpc3RfdmFyICZvcGVyYXRvcj0gKENPUkJBX1BvbGljeUxpc3QgKik7CiAg Q09SQkFfUG9saWN5TGlzdF92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9saWN5TGlzdF92 YXIgJik7CiAgQ09SQkFfUG9saWN5TGlzdCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgY29uc3QgQ09S QkFfUG9saWN5TGlzdCAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogIG9wZXJhdG9yIGNvbnN0 IENPUkJBX1BvbGljeUxpc3QgJigpIGNvbnN0OwogIG9wZXJhdG9yIENPUkJBX1BvbGljeUxpc3Qg JigpOwogIG9wZXJhdG9yIENPUkJBX1BvbGljeUxpc3QgJigpIGNvbnN0OwogIG9wZXJhdG9yIENP UkJBX1BvbGljeUxpc3QgKiYoKTsKCiAgVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBX1BvbGljeSwg Q09SQkFfUG9saWN5X3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCgogIGNv bnN0IENPUkJBX1BvbGljeUxpc3QgJmluICh2b2lkKSBjb25zdDsKICBDT1JCQV9Qb2xpY3lMaXN0 ICZpbm91dCAodm9pZCk7CiAgQ09SQkFfUG9saWN5TGlzdCAqJm91dCAodm9pZCk7CiAgQ09SQkFf UG9saWN5TGlzdCAqX3JldG4gKHZvaWQpOwogIENPUkJBX1BvbGljeUxpc3QgKnB0ciAodm9pZCkg Y29uc3Q7Cgpwcml2YXRlOgogIENPUkJBX1BvbGljeUxpc3QgKnB0cl87Cn07CiMgNjk5ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIK Y2xhc3MgQ09SQkFfUG9saWN5TGlzdF9vdXQKewpwdWJsaWM6CiAgQ09SQkFfUG9saWN5TGlzdF9v dXQgKENPUkJBX1BvbGljeUxpc3QgKiYpOwogIENPUkJBX1BvbGljeUxpc3Rfb3V0IChDT1JCQV9Q b2xpY3lMaXN0X3ZhciAmKTsKICBDT1JCQV9Qb2xpY3lMaXN0X291dCAoY29uc3QgQ09SQkFfUG9s aWN5TGlzdF9vdXQgJik7CiAgQ09SQkFfUG9saWN5TGlzdF9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg Q09SQkFfUG9saWN5TGlzdF9vdXQgJik7CiAgQ09SQkFfUG9saWN5TGlzdF9vdXQgJm9wZXJhdG9y PSAoQ09SQkFfUG9saWN5TGlzdCAqKTsKICBvcGVyYXRvciBDT1JCQV9Qb2xpY3lMaXN0IComKCk7 CiAgQ09SQkFfUG9saWN5TGlzdCAqJnB0ciAodm9pZCk7CiAgQ09SQkFfUG9saWN5TGlzdCAqb3Bl cmF0b3ItPiAodm9pZCk7CiAgVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBX1BvbGljeSwgQ09SQkFf UG9saWN5X3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCnByaXZhdGU6CiAg Q09SQkFfUG9saWN5TGlzdCAqJnB0cl87CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Q b2xpY3lMaXN0X3ZhciAmKTsKfTsKIyA3MjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIgogIGNsYXNzIF9UQU9fVW5ib3VuZGVkX1Nl cXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXEgOiBwdWJsaWMgVEFPX1VuYm91bmRlZF9CYXNlX1Nl cXVlbmNlCiAgewogIHB1YmxpYzoKCgogICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFf UG9saWN5VHlwZVNlcSAodm9pZCk7CiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Q b2xpY3lUeXBlU2VxIChDT1JCQTo6VUxvbmcgbWF4aW11bSk7CiAgICBfVEFPX1VuYm91bmRlZF9T ZXF1ZW5jZV9DT1JCQV9Qb2xpY3lUeXBlU2VxIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAg Q09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgQ09SQkE6OlVMb25nICpkYXRhLAogICAgICBDT1JC QTo6Qm9vbGVhbiByZWxlYXNlID0gMCk7CiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JC QV9Qb2xpY3lUeXBlU2VxIChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Qb2xp Y3lUeXBlU2VxICZyaHMpOwogICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5 VHlwZVNlcSAmb3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Q b2xpY3lUeXBlU2VxICZyaHMpOwogICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf Q09SQkFfUG9saWN5VHlwZVNlcSAodm9pZCk7CgogICAgQ09SQkE6OlVMb25nICZvcGVyYXRvcltd IChDT1JCQTo6VUxvbmcgaSk7CiAgICBjb25zdCBDT1JCQTo6VUxvbmcgJm9wZXJhdG9yW10gKENP UkJBOjpVTG9uZyBpKSBjb25zdDsKCiAgICBzdGF0aWMgQ09SQkE6OlVMb25nICphbGxvY2J1ZiAo Q09SQkE6OlVMb25nIHNpemUpOwogICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoQ09SQkE6OlVMb25n ICpidWZmZXIpOwogICAgdmlydHVhbCB2b2lkIF9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9u ZyBsZW5ndGgpOwogICAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7CgoK ICAgIENPUkJBOjpVTG9uZyAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuID0gMCk7 CiAgICBjb25zdCBDT1JCQTo6VUxvbmcgKmdldF9idWZmZXIgKHZvaWQpIGNvbnN0OwogICAgdm9p ZCByZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAog ICAgICBDT1JCQTo6VUxvbmcgKmRhdGEsCiAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpOwog IH07CiMgNzY3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL1BvbGljeUMuaCIKY2xhc3MgQ09SQkFfUG9saWN5VHlwZVNlcTsKY2xhc3MgQ09SQkFfUG9s aWN5VHlwZVNlcV92YXI7CgoKCgoKY2xhc3MgQ09SQkFfUG9saWN5VHlwZVNlcSA6IHB1YmxpYwoK ICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lUeXBlU2VxCgoKCnsKcHVibGlj OgogIENPUkJBX1BvbGljeVR5cGVTZXEgKHZvaWQpOwogIENPUkJBX1BvbGljeVR5cGVTZXEgKENP UkJBOjpVTG9uZyBtYXgpOwogIENPUkJBX1BvbGljeVR5cGVTZXEgKAogICAgQ09SQkE6OlVMb25n IG1heCwKICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICBDT1JCQTo6VUxvbmcgKmJ1ZmZlciwK ICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwCiAgKTsKICBDT1JCQV9Qb2xpY3lUeXBlU2Vx IChjb25zdCBDT1JCQV9Qb2xpY3lUeXBlU2VxICYpOwogIH5DT1JCQV9Qb2xpY3lUeXBlU2VxICh2 b2lkKTsKICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgoKICB0eXBl ZGVmIENPUkJBX1BvbGljeVR5cGVTZXFfdmFyIF92YXJfdHlwZTsKCgp9OwojIDgxMCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCmNs YXNzIENPUkJBX1BvbGljeVR5cGVTZXFfdmFyCnsKcHVibGljOgogIENPUkJBX1BvbGljeVR5cGVT ZXFfdmFyICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAoQ09SQkFfUG9saWN5VHlw ZVNlcSAqKTsKICBDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAoY29uc3QgQ09SQkFfUG9saWN5VHlw ZVNlcV92YXIgJik7CiAgQ09SQkFfUG9saWN5VHlwZVNlcV92YXIgKGNvbnN0IENPUkJBX1BvbGlj eVR5cGVTZXEgJik7CiAgfkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyICh2b2lkKTsKCiAgQ09SQkFf UG9saWN5VHlwZVNlcV92YXIgJm9wZXJhdG9yPSAoQ09SQkFfUG9saWN5VHlwZVNlcSAqKTsKICBD T1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3lUeXBl U2VxX3ZhciAmKTsKICBDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAmb3BlcmF0b3I9IChjb25zdCBD T1JCQV9Qb2xpY3lUeXBlU2VxICYpOwogIENPUkJBX1BvbGljeVR5cGVTZXEgKm9wZXJhdG9yLT4g KHZvaWQpOwogIGNvbnN0IENPUkJBX1BvbGljeVR5cGVTZXEgKm9wZXJhdG9yLT4gKHZvaWQpIGNv bnN0OwoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9Qb2xpY3lUeXBlU2VxICYoKSBjb25zdDsKICBv cGVyYXRvciBDT1JCQV9Qb2xpY3lUeXBlU2VxICYoKTsKICBvcGVyYXRvciBDT1JCQV9Qb2xpY3lU eXBlU2VxICYoKSBjb25zdDsKCiAgQ09SQkE6OlBvbGljeVR5cGUgJiBvcGVyYXRvcltdIChDT1JC QTo6VUxvbmcgaW5kZXgpOwogIGNvbnN0IENPUkJBOjpQb2xpY3lUeXBlICYgb3BlcmF0b3JbXSAo Q09SQkE6OlVMb25nIGluZGV4KSBjb25zdDsKCgogIGNvbnN0IENPUkJBX1BvbGljeVR5cGVTZXEg JmluICh2b2lkKSBjb25zdDsKICBDT1JCQV9Qb2xpY3lUeXBlU2VxICZpbm91dCAodm9pZCk7CiAg Q09SQkFfUG9saWN5VHlwZVNlcSAqJm91dCAodm9pZCk7CiAgQ09SQkFfUG9saWN5VHlwZVNlcSAq X3JldG4gKHZvaWQpOwogIENPUkJBX1BvbGljeVR5cGVTZXEgKnB0ciAodm9pZCkgY29uc3Q7Cgpw cml2YXRlOgogIENPUkJBX1BvbGljeVR5cGVTZXEgKnB0cl87Cn07CiMgODUwICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIKY2xhc3Mg Q09SQkFfUG9saWN5VHlwZVNlcV9vdXQKewpwdWJsaWM6CiAgQ09SQkFfUG9saWN5VHlwZVNlcV9v dXQgKENPUkJBX1BvbGljeVR5cGVTZXEgKiYpOwogIENPUkJBX1BvbGljeVR5cGVTZXFfb3V0IChD T1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAmKTsKICBDT1JCQV9Qb2xpY3lUeXBlU2VxX291dCAoY29u c3QgQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQgJik7CiAgQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQg Jm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQgJik7CiAgQ09SQkFfUG9s aWN5VHlwZVNlcV9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfUG9saWN5VHlwZVNlcSAqKTsKICBvcGVy YXRvciBDT1JCQV9Qb2xpY3lUeXBlU2VxIComKCk7CiAgQ09SQkFfUG9saWN5VHlwZVNlcSAqJnB0 ciAodm9pZCk7CiAgQ09SQkFfUG9saWN5VHlwZVNlcSAqb3BlcmF0b3ItPiAodm9pZCk7CiAgQ09S QkE6OlBvbGljeVR5cGUgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpOwoKcHJpdmF0 ZToKICBDT1JCQV9Qb2xpY3lUeXBlU2VxIComcHRyXzsKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0 IENPUkJBX1BvbGljeVR5cGVTZXFfdmFyICYpOwp9OwojIDg3NiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCmNsYXNzIENPUkJBX1Bv bGljeU1hbmFnZXJfdmFyIDogcHVibGljIFRBT19CYXNlX3Zhcgp7CnB1YmxpYzoKICBDT1JCQV9Q b2xpY3lNYW5hZ2VyX3ZhciAodm9pZCk7CiAgQ09SQkFfUG9saWN5TWFuYWdlcl92YXIgKENPUkJB X1BvbGljeU1hbmFnZXJfcHRyIHApIDogcHRyXyAocCkge30KICBDT1JCQV9Qb2xpY3lNYW5hZ2Vy X3ZhciAoY29uc3QgQ09SQkFfUG9saWN5TWFuYWdlcl92YXIgJik7CiAgfkNPUkJBX1BvbGljeU1h bmFnZXJfdmFyICh2b2lkKTsKCiAgQ09SQkFfUG9saWN5TWFuYWdlcl92YXIgJm9wZXJhdG9yPSAo Q09SQkFfUG9saWN5TWFuYWdlcl9wdHIpOwogIENPUkJBX1BvbGljeU1hbmFnZXJfdmFyICZvcGVy YXRvcj0gKGNvbnN0IENPUkJBX1BvbGljeU1hbmFnZXJfdmFyICYpOwogIENPUkJBX1BvbGljeU1h bmFnZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICBvcGVyYXRvciBjb25zdCBDT1JC QV9Qb2xpY3lNYW5hZ2VyX3B0ciAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfUG9saWN5TWFu YWdlcl9wdHIgJigpOwoKICBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBpbiAodm9pZCkgY29uc3Q7 CiAgQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIgJmlub3V0ICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lN YW5hZ2VyX3B0ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBfcmV0biAo dm9pZCk7CiAgQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICBz dGF0aWMgQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIgZHVwbGljYXRlIChDT1JCQV9Qb2xpY3lNYW5h Z2VyX3B0cik7CiAgc3RhdGljIHZvaWQgcmVsZWFzZSAoQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIp OwogIHN0YXRpYyBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBD T1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVu dmlyb25tZW50ICYpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoK cHJpdmF0ZToKICBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBwdHJfOwoKICBDT1JCQV9Qb2xpY3lN YW5hZ2VyX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIENPUkJBX1BvbGljeU1hbmFn ZXJfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKfTsKIyA5MTkgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5o IgpjbGFzcyBDT1JCQV9Qb2xpY3lNYW5hZ2VyX291dAp7CnB1YmxpYzoKICBDT1JCQV9Qb2xpY3lN YW5hZ2VyX291dCAoQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIgJik7CiAgQ09SQkFfUG9saWN5TWFu YWdlcl9vdXQgKENPUkJBX1BvbGljeU1hbmFnZXJfdmFyICYpOwogIENPUkJBX1BvbGljeU1hbmFn ZXJfb3V0IChjb25zdCBDT1JCQV9Qb2xpY3lNYW5hZ2VyX291dCAmKTsKICBDT1JCQV9Qb2xpY3lN YW5hZ2VyX291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3lNYW5hZ2VyX291dCAmKTsK ICBDT1JCQV9Qb2xpY3lNYW5hZ2VyX291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3lN YW5hZ2VyX3ZhciAmKTsKICBDT1JCQV9Qb2xpY3lNYW5hZ2VyX291dCAmb3BlcmF0b3I9IChDT1JC QV9Qb2xpY3lNYW5hZ2VyX3B0cik7CiAgb3BlcmF0b3IgQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIg JigpOwogIENPUkJBX1BvbGljeU1hbmFnZXJfcHRyICZwdHIgKHZvaWQpOwogIENPUkJBX1BvbGlj eU1hbmFnZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKcHJpdmF0ZToKICBDT1JCQV9Qb2xpY3lN YW5hZ2VyX3B0ciAmcHRyXzsKfTsKIyA5NDMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIgpjbGFzcyBDT1JCQV9Qb2xpY3lNYW5hZ2Vy IDogcHVibGljIHZpcnR1YWwgQ09SQkE6Ok9iamVjdAp7CnB1YmxpYzoKCiAgdHlwZWRlZiBDT1JC QV9Qb2xpY3lNYW5hZ2VyX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDT1JCQV9Qb2xpY3lNYW5h Z2VyX3ZhciBfdmFyX3R5cGU7CgoKCiAgc3RhdGljIENPUkJBX1BvbGljeU1hbmFnZXJfcHRyIF9k dXBsaWNhdGUgKENPUkJBX1BvbGljeU1hbmFnZXJfcHRyIG9iaik7CiAgc3RhdGljIENPUkJBX1Bv bGljeU1hbmFnZXJfcHRyIF9uYXJyb3cgKAogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAg ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9 CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7CiAgc3RhdGljIENPUkJB X1BvbGljeU1hbmFnZXJfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgQ09SQkE6Ok9iamVj dF9wdHIgb2JqLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwog IHN0YXRpYyBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBfbmlsICh2b2lkKQogICAgewogICAgICBy ZXR1cm4gKENPUkJBX1BvbGljeU1hbmFnZXJfcHRyKTA7CiAgICB9CgogIHZpcnR1YWwgQ09SQkE6 OlBvbGljeUxpc3QgKiBnZXRfcG9saWN5X292ZXJyaWRlcyAoCiAgICAgIGNvbnN0IENPUkJBOjpQ b2xpY3lUeXBlU2VxICYgdHMsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9F bnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK ICAgICkKICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICB2aXJ0 dWFsIHZvaWQgc2V0X3BvbGljeV9vdmVycmlkZXMgKAogICAgICBjb25zdCBDT1JCQTo6UG9saWN5 TGlzdCAmIHBvbGljaWVzLAogICAgICBDT1JCQTo6U2V0T3ZlcnJpZGVUeXBlIHNldF9hZGQsCiAg ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9 CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkKICAgIHRocm93ICggQ09S QkE6OlN5c3RlbUV4Y2VwdGlvbiwgQ09SQkE6OkludmFsaWRQb2xpY2llcyApID0gMDsKCgoKCiAg dmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAg dmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0 OwoKcHJvdGVjdGVkOgogIENPUkJBX1BvbGljeU1hbmFnZXIgKCk7CgogIHZpcnR1YWwgfkNPUkJB X1BvbGljeU1hbmFnZXIgKHZvaWQpOwpwcml2YXRlOgogIENPUkJBX1BvbGljeU1hbmFnZXIgKGNv bnN0IENPUkJBX1BvbGljeU1hbmFnZXIgJik7CiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IENPUkJB X1BvbGljeU1hbmFnZXIgJik7Cn07CiMgMTAwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCmNsYXNzIENPUkJBX1BvbGljeUN1cnJl bnRfdmFyIDogcHVibGljIFRBT19CYXNlX3Zhcgp7CnB1YmxpYzoKICBDT1JCQV9Qb2xpY3lDdXJy ZW50X3ZhciAodm9pZCk7CiAgQ09SQkFfUG9saWN5Q3VycmVudF92YXIgKENPUkJBX1BvbGljeUN1 cnJlbnRfcHRyIHApIDogcHRyXyAocCkge30KICBDT1JCQV9Qb2xpY3lDdXJyZW50X3ZhciAoY29u c3QgQ09SQkFfUG9saWN5Q3VycmVudF92YXIgJik7CiAgfkNPUkJBX1BvbGljeUN1cnJlbnRfdmFy ICh2b2lkKTsKCiAgQ09SQkFfUG9saWN5Q3VycmVudF92YXIgJm9wZXJhdG9yPSAoQ09SQkFfUG9s aWN5Q3VycmVudF9wdHIpOwogIENPUkJBX1BvbGljeUN1cnJlbnRfdmFyICZvcGVyYXRvcj0gKGNv bnN0IENPUkJBX1BvbGljeUN1cnJlbnRfdmFyICYpOwogIENPUkJBX1BvbGljeUN1cnJlbnRfcHRy IG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9Qb2xpY3lD dXJyZW50X3B0ciAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfUG9saWN5Q3VycmVudF9wdHIg JigpOwoKICBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgQ09SQkFf UG9saWN5Q3VycmVudF9wdHIgJmlub3V0ICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0 ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBfcmV0biAodm9pZCk7CiAg Q09SQkFfUG9saWN5Q3VycmVudF9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICBzdGF0aWMgQ09S QkFfUG9saWN5Q3VycmVudF9wdHIgZHVwbGljYXRlIChDT1JCQV9Qb2xpY3lDdXJyZW50X3B0cik7 CiAgc3RhdGljIHZvaWQgcmVsZWFzZSAoQ09SQkFfUG9saWN5Q3VycmVudF9wdHIpOwogIHN0YXRp YyBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBDT1JCQV9Qb2xp Y3lDdXJyZW50X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50 ICYpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKcHJpdmF0ZToK ICBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBwdHJfOwoKICBDT1JCQV9Qb2xpY3lDdXJyZW50X3Zh ciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIENPUkJBX1BvbGljeUN1cnJlbnRfdmFyICZv cGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKfTsKIyAxMDUxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIKY2xhc3Mg Q09SQkFfUG9saWN5Q3VycmVudF9vdXQKewpwdWJsaWM6CiAgQ09SQkFfUG9saWN5Q3VycmVudF9v dXQgKENPUkJBX1BvbGljeUN1cnJlbnRfcHRyICYpOwogIENPUkJBX1BvbGljeUN1cnJlbnRfb3V0 IChDT1JCQV9Qb2xpY3lDdXJyZW50X3ZhciAmKTsKICBDT1JCQV9Qb2xpY3lDdXJyZW50X291dCAo Y29uc3QgQ09SQkFfUG9saWN5Q3VycmVudF9vdXQgJik7CiAgQ09SQkFfUG9saWN5Q3VycmVudF9v dXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9saWN5Q3VycmVudF9vdXQgJik7CiAgQ09SQkFf UG9saWN5Q3VycmVudF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9saWN5Q3VycmVudF92 YXIgJik7CiAgQ09SQkFfUG9saWN5Q3VycmVudF9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfUG9saWN5 Q3VycmVudF9wdHIpOwogIG9wZXJhdG9yIENPUkJBX1BvbGljeUN1cnJlbnRfcHRyICYoKTsKICBD T1JCQV9Qb2xpY3lDdXJyZW50X3B0ciAmcHRyICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lDdXJyZW50 X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAgQ09SQkFfUG9saWN5Q3VycmVudF9w dHIgJnB0cl87Cn07CiMgMTA3NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCmNsYXNzIENPUkJBX1BvbGljeUN1cnJlbnQ6IHB1Ymxp YyB2aXJ0dWFsIENPUkJBX1BvbGljeU1hbmFnZXIsIHB1YmxpYyB2aXJ0dWFsIENPUkJBX0N1cnJl bnQKewpwdWJsaWM6CgogIHR5cGVkZWYgQ09SQkFfUG9saWN5Q3VycmVudF9wdHIgX3B0cl90eXBl OwogIHR5cGVkZWYgQ09SQkFfUG9saWN5Q3VycmVudF92YXIgX3Zhcl90eXBlOwoKCgogIHN0YXRp YyBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBfZHVwbGljYXRlIChDT1JCQV9Qb2xpY3lDdXJyZW50 X3B0ciBvYmopOwogIHN0YXRpYyBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBfbmFycm93ICgKICAg ICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t ZW50ICgpCiAgICApOwogIHN0YXRpYyBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBfdW5jaGVja2Vk X25hcnJvdyAoCiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgQ09SQkE6OkVudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVm YXVsdF9lbnZpcm9ubWVudCAoKQogICAgKTsKICBzdGF0aWMgQ09SQkFfUG9saWN5Q3VycmVudF9w dHIgX25pbCAodm9pZCkKICAgIHsKICAgICAgcmV0dXJuIChDT1JCQV9Qb2xpY3lDdXJyZW50X3B0 cikwOwogICAgfQoKICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0 aF90IHR5cGUpOwoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9p ZCAodm9pZCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgQ09SQkFfUG9saWN5Q3VycmVudCAoKTsKCiAg dmlydHVhbCB+Q09SQkFfUG9saWN5Q3VycmVudCAodm9pZCk7CnByaXZhdGU6CiAgQ09SQkFfUG9s aWN5Q3VycmVudCAoY29uc3QgQ09SQkFfUG9saWN5Q3VycmVudCAmKTsKICB2b2lkIG9wZXJhdG9y PSAoY29uc3QgQ09SQkFfUG9saWN5Q3VycmVudCAmKTsKfTsKCgoKCgoKCmV4dGVybgpDT1JCQV9U QU9fUG9saWN5X1Byb3h5X0Jyb2tlciAqCigqQ09SQkFfQ09SQkFfVEFPX1BvbGljeV9Qcm94eV9C cm9rZXJfRmFjdG9yeV9mdW5jdGlvbl9wb2ludGVyKSAoCiAgICBDT1JCQTo6T2JqZWN0X3B0ciBv YmoKICApOwoKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0 IENPUkJBOjpQb2xpY3lFcnJvciAmKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JC QTo6QW55ICYsIENPUkJBOjpQb2xpY3lFcnJvciopOwogICAgICAgICAgIENPUkJBOjpCb29sZWFu IG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIENPUkJBOjpQb2xpY3lFcnJvciAqJik7 CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkg JiwgY29uc3QgQ09SQkE6OlBvbGljeUVycm9yIComKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9y PDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBOjpJbnZhbGlkUG9saWNpZXMgJik7CiAgICAg ICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQTo6SW52YWxpZFBvbGlj aWVzKik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJB OjpBbnkgJiwgQ09SQkE6OkludmFsaWRQb2xpY2llcyAqJik7CiAgICAgICAgICAgQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkE6OkludmFs aWRQb2xpY2llcyAqJik7CgogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkg JiwgQ09SQkE6OlBvbGljeV9wdHIpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y Pj49IChjb25zdCBDT1JCQTo6QW55ICYsIENPUkJBOjpQb2xpY3kgKiYpOwogICAgICAgICAgIHZv aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkE6OlBvbGljeUxpc3QgJik7 CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQTo6UG9saWN5 TGlzdCopOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JC QTo6QW55ICYsIENPUkJBOjpQb2xpY3lMaXN0IComKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVh biBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQTo6UG9saWN5TGlz dCAqJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBD T1JCQTo6UG9saWN5VHlwZVNlcSAmKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JC QTo6QW55ICYsIENPUkJBOjpQb2xpY3lUeXBlU2VxKik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xl YW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgQ09SQkE6OlBvbGljeVR5cGVTZXEg KiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6 QW55ICYsIGNvbnN0IENPUkJBOjpQb2xpY3lUeXBlU2VxIComKTsKICAgICAgICAgICB2b2lkIG9w ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBOjpTZXRPdmVycmlkZVR5cGUpOwogICAgICAg ICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIENPUkJB OjpTZXRPdmVycmlkZVR5cGUgJik7CiMgMTIwOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmkiIDEKIyAzNyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmkiCiAg aW5saW5lIENPUkJBOjpVU2hvcnQgKgogIENPUkJBOjpJbnZhbGlkUG9saWNpZXM6Ol9UQU9fVW5i b3VuZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQ6OmFs bG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSkKCiAgewogICAgQ09SQkE6OlVTaG9ydCAqcmV0dmFs ID0gMDsKICAgIGRvIHsgdHJ5IHsgcmV0dmFsID0gbmV3IENPUkJBOjpVU2hvcnRbc2l6ZV07IH0g Y2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0 dXJuIDA7IH0gfSB3aGlsZSAoMCk7CiAgICByZXR1cm4gcmV0dmFsOwogIH0KCiAgaW5saW5lIHZv aWQgQ09SQkE6OkludmFsaWRQb2xpY2llczo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFf SW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6ZnJlZWJ1ZiAoQ09SQkE6OlVTaG9ydCAq YnVmZmVyKQoKICB7CiAgICBkZWxldGUgW10gYnVmZmVyOwogIH0KCiAgaW5saW5lCiAgQ09SQkE6 OkludmFsaWRQb2xpY2llczo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBv bGljaWVzX190YW9fc2VxX1VTaG9ydDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52 YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydCAodm9pZCkKICB7CiAgfQoKICBpbmxpbmUKICBD T1JCQTo6SW52YWxpZFBvbGljaWVzOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZh bGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JC QV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0IChDT1JCQTo6VUxvbmcgbWF4aW11bSkK ICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBfVEFPX1VuYm91bmRl ZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0OjphbGxvY2J1 ZiAobWF4aW11bSkpCiAgewogIH0KCiAgaW5saW5lCiAgQ09SQkE6OkludmFsaWRQb2xpY2llczo6 X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VT aG9ydDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9f c2VxX1VTaG9ydCAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro LAogICAgQ09SQkE6OlVTaG9ydCAqZGF0YSwKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAg OiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgZGF0YSwgcmVs ZWFzZSkKICB7CiAgfQoKICBpbmxpbmUKICBDT1JCQTo6SW52YWxpZFBvbGljaWVzOjpfVEFPX1Vu Ym91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0Ojpf VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNo b3J0IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNf X3Rhb19zZXFfVVNob3J0ICZyaHMpCgogICAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2Ug KHJocykKICB7CiAgICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAgQ09SQkE6OlVT aG9ydCAqdG1wMSA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2ll c19fdGFvX3NlcV9VU2hvcnQ6OmFsbG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CiAgICAgIENPUkJB OjpVU2hvcnQgKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6VVNob3J0ICo+ IChyaHMuYnVmZmVyXyk7CgogICAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMt Pmxlbmd0aF87ICsraSkKICAgICAgICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICAgIHRoaXMtPmJ1 ZmZlcl8gPSB0bXAxOwogICAgfQogICAgZWxzZQogICAgewogICAgICB0aGlzLT5idWZmZXJfID0g MDsKICAgIH0KICB9CgogIGlubGluZSBDT1JCQTo6SW52YWxpZFBvbGljaWVzOjpfVEFPX1VuYm91 bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0ICYKICBD T1JCQTo6SW52YWxpZFBvbGljaWVzOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZh bGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0OjpvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQgJnJocykK CiAgewogICAgaWYgKHRoaXMgPT0gJnJocykKICAgICAgcmV0dXJuICp0aGlzOwoKICAgIGlmICh0 aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAgaWYgKHRoaXMtPm1heGltdW1fIDwgcmhzLm1heGlt dW1fKQogICAgICB7CgogICAgICAgIENPUkJBOjpVU2hvcnQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nh c3Q8Q09SQkE6OlVTaG9ydCAqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6ZnJlZWJ1 ZiAodG1wKTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf Q09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6YWxsb2NidWYgKHJocy5tYXhp bXVtXyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9f VW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQ6 OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICAgIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5j ZTo6b3BlcmF0b3I9IChyaHMpOwoKICAgIENPUkJBOjpVU2hvcnQgKnRtcDEgPSByZWludGVycHJl dF9jYXN0PENPUkJBOjpVU2hvcnQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgQ09SQkE6OlVTaG9y dCAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVU2hvcnQgKj4gKHJocy5i dWZmZXJfKTsKCiAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87 ICsraSkKICAgICAgdG1wMVtpXSA9IHRtcDJbaV07CgogICAgcmV0dXJuICp0aGlzOwogIH0KCgog IGlubGluZSBDT1JCQTo6VVNob3J0ICYKICBDT1JCQTo6SW52YWxpZFBvbGljaWVzOjpfVEFPX1Vu Ym91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0Ojpv cGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkKCiAgewogICAgZG8geyBpZighKGkgPCB0aGlzLT5t YXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0Vf TG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAo Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5 Qy5pIiwgMTI5LCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5t c2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1f RVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9y ICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAg ICBDT1JCQTo6VVNob3J0KiB0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVU2hvcnQqPiAo dGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0KCiAgaW5saW5lIGNvbnN0IENP UkJBOjpVU2hvcnQgJgogIENPUkJBOjpJbnZhbGlkUG9saWNpZXM6Ol9UQU9fVW5ib3VuZGVkX1Nl cXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQ6Om9wZXJhdG9yW10g KENPUkJBOjpVTG9uZyBpKSBjb25zdAoKICB7CiAgICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGlt dW1fKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2df TXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmki LCAxMzgsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19v c3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJP UiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVz Jy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIENP UkJBOjpVU2hvcnQgKiBjb25zdCB0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVU2hvcnQq PiAodGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0KCgoKICBpbmxpbmUgQ09S QkE6OlVTaG9ydCAqCiAgQ09SQkE6OkludmFsaWRQb2xpY2llczo6X1RBT19VbmJvdW5kZWRfU2Vx dWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6Z2V0X2J1ZmZlciAo Q09SQkE6OkJvb2xlYW4gb3JwaGFuKQogIHsKICAgIENPUkJBOjpVU2hvcnQgKnJlc3VsdCA9IDA7 CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+YnVmZmVyXyA9PSAw KQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFf SW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6YWxsb2NidWYgKHRoaXMtPmxlbmd0aF8p OwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7CiAgICAgICAgdGhpcy0+cmVsZWFzZV8g PSAxOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJw cmV0X2Nhc3Q8Q09SQkE6OlVTaG9ydCo+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgfQogICAgfQog ICAgZWxzZQogICAgewogICAgICBpZiAodGhpcy0+cmVsZWFzZV8gIT0gMCkKICAgICAgewoKCiAg ICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6VVNob3J0Kj4gKHRoaXMtPmJ1 ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAgICB0aGlzLT5sZW5ndGhf ID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0aGlzLT5yZWxlYXNlXyA9 IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbmxpbmUgY29uc3Qg Q09SQkE6OlVTaG9ydCAqCiAgQ09SQkE6OkludmFsaWRQb2xpY2llczo6X1RBT19VbmJvdW5kZWRf U2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6Z2V0X2J1ZmZl ciAodm9pZCkgY29uc3QKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDT1JC QTo6VVNob3J0ICo+ICh0aGlzLT5idWZmZXJfKTsKICB9CgogIGlubGluZSB2b2lkCiAgQ09SQkE6 OkludmFsaWRQb2xpY2llczo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBv bGljaWVzX190YW9fc2VxX1VTaG9ydDo6cmVwbGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICBDT1JC QTo6VUxvbmcgbGVuZ3RoLAogIENPUkJBOjpVU2hvcnQgKmRhdGEsCiAgQ09SQkE6OkJvb2xlYW4g cmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAgIHRoaXMtPmxlbmd0aF8g PSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQog ICAgewogICAgICBDT1JCQTo6VVNob3J0ICp0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpV U2hvcnQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NP UkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQ6OmZyZWVidWYgKHRtcCk7CiAgICB9 CiAgICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVsZWFzZTsK ICB9CiMgMjEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL1BvbGljeUMuaSIKaW5saW5lCkNPUkJBX1BvbGljeTo6Q09SQkFfUG9saWN5ICgKICAgIFRB T19TdHViICpvYmpyZWYsCiAgICBDT1JCQTo6Qm9vbGVhbiBfdGFvX2NvbGxvY2F0ZWQsCiAgICBU QU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZhbnQKICApCiAgOiBDT1JCQV9PYmplY3QgKG9i anJlZiwgX3Rhb19jb2xsb2NhdGVkLCBzZXJ2YW50KQp7CiAgdGhpcy0+Q09SQkFfUG9saWN5X3Nl dHVwX2NvbGxvY2F0aW9uIChfdGFvX2NvbGxvY2F0ZWQpOwp9CiMgMjMwICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaSIKICBpbmxpbmUg Q09SQkE6OlBvbGljeSAqKgogIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Q b2xpY3lMaXN0OjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIG5lbGVtcykKICB7CiAgICBDT1JCQTo6 UG9saWN5ICoqYnVmID0gMDsKCiAgICBkbyB7IHRyeSB7IGJ1ZiA9IG5ldyBDT1JCQTo6UG9saWN5 KltuZWxlbXNdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24g KCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwoKICAgIGZvciAoQ09SQkE6OlVMb25n IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCiAgICAgIHsKICAgICAgICBidWZbaV0gPSBDT1JCQTo6 UG9saWN5OjpfbmlsICgpOwogICAgICB9CgogICAgcmV0dXJuIGJ1ZjsKICB9CgogIGlubGluZSB2 b2lkCiAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6OmZy ZWVidWYgKENPUkJBOjpQb2xpY3kgKipidWZmZXIpCiAgewogICAgaWYgKGJ1ZmZlciA9PSAwKQog ICAgICByZXR1cm47CiAgICBkZWxldGVbXSBidWZmZXI7CiAgfQoKICBpbmxpbmUKICBfVEFPX1Vu Ym91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5TGlzdDo6X1RBT19VbmJvdW5kZWRf T2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgKHZvaWQpCiAgewogIH0KCiAgaW5saW5l CiAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6Ol9UQU9f VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0IChDT1JCQTo6VUxvbmcg bWF4aW11bSkKICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBfVEFP X1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5TGlzdDo6YWxsb2NidWYgKG1h eGltdW0pKQogIHsKICB9CgogIGlubGluZQogIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5j ZV9DT1JCQV9Qb2xpY3lMaXN0OjpfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFf UG9saWN5TGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro LAogICAgQ09SQkE6OlBvbGljeSogKnZhbHVlLAogICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkK ICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVuZ3RoLCB2YWx1ZSwg cmVsZWFzZSkKICB7CiAgfQoKICBpbmxpbmUKICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVu Y2VfQ09SQkFfUG9saWN5TGlzdDo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJB X1BvbGljeUxpc3QoY29uc3QgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1Bv bGljeUxpc3QgJnJocykKICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCiAg ewogICAgaWYgKHJocy5idWZmZXJfICE9IDApCiAgICB7CiAgICAgIENPUkJBOjpQb2xpY3kgKip0 bXAxID0gX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6OmFs bG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CiAgICAgIENPUkJBOjpQb2xpY3kgKiogY29uc3QgdG1w MiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlBvbGljeSAqKj4gKHJocy5idWZmZXJfKTsKCiAg ICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87ICsraSkKICAgICAg ICB7CiAgICAgICAgICB0bXAxW2ldID0gQ09SQkE6OlBvbGljeTo6X2R1cGxpY2F0ZSAodG1wMltp XSk7CiAgICAgICAgfQoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgICBlbHNl CiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgfQogIH0KCiAgaW5saW5lIF9UQU9f VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0ICYKICBfVEFPX1VuYm91 bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5TGlzdDo6b3BlcmF0b3I9IChjb25zdCBf VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5TGlzdCAmcmhzKQogIHsK ICAgIGlmICh0aGlzID09ICZyaHMpCiAgICAgIHJldHVybiAqdGhpczsKCiAgICBpZiAodGhpcy0+ cmVsZWFzZV8pCiAgICB7CiAgICAgIENPUkJBOjpQb2xpY3kgKip0bXAgPSByZWludGVycHJldF9j YXN0PENPUkJBOjpQb2xpY3kgKio+ICh0aGlzLT5idWZmZXJfKTsKCiAgICAgIGZvciAoQ09SQkE6 OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICB7CiAgICAgICAgQ09S QkE6OnJlbGVhc2UgKHRtcFtpXSk7CiAgICAgICAgdG1wW2ldID0gQ09SQkE6OlBvbGljeTo6X25p bCAoKTsKICAgICAgfQogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAg ICAgIHsKICAgICAgICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5 TGlzdDo6ZnJlZWJ1ZiAodG1wKTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5k ZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6OmFsbG9jYnVmIChyaHMubWF4aW11 bV8pOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1Vu Ym91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5TGlzdDo6YWxsb2NidWYgKHJocy5t YXhpbXVtXyk7CgogICAgVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlOjpvcGVyYXRvcj0gKHJo cyk7CgogICAgQ09SQkE6OlBvbGljeSAqKnRtcDEgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpQ b2xpY3kgKio+ICh0aGlzLT5idWZmZXJfKTsKICAgIENPUkJBOjpQb2xpY3kgKiogY29uc3QgdG1w MiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlBvbGljeSAqKj4gKHJocy5idWZmZXJfKTsKCiAg ICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHJocy5sZW5ndGhfOyArK2kpCiAgICAgIHsK ICAgICAgICB0bXAxW2ldID0gQ09SQkE6OlBvbGljeTo6X2R1cGxpY2F0ZSAodG1wMltpXSk7CiAg ICAgIH0KCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVEFPX09iamVjdF9NYW5hZ2Vy PENPUkJBOjpQb2xpY3ksQ09SQkE6OlBvbGljeV92YXI+CiAgX1RBT19VbmJvdW5kZWRfT2JqZWN0 X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRl eCkgY29uc3QKCiAgewogICAgZG8geyBpZighKGluZGV4IDwgdGhpcy0+bWF4aW11bV8pKSB7IGlu dCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9f XyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaSIsIDMzNiwgLTEs IF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCks IGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FT U0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAi aW5kZXggPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIENPUkJBOjpQ b2xpY3kgKiogY29uc3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6UG9saWN5ICoqPiAo dGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBOjpQb2xp Y3ksQ09SQkE6OlBvbGljeV92YXI+ICh0bXAgKyBpbmRleCwgdGhpcy0+cmVsZWFzZV8pOwogIH0K CiAgaW5saW5lIENPUkJBOjpQb2xpY3kqICoKICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVu Y2VfQ09SQkFfUG9saWN5TGlzdDo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQog IHsKICAgIENPUkJBOjpQb2xpY3kgKipyZXN1bHQgPSAwOwogICAgaWYgKG9ycGhhbiA9PSAwKQog ICAgewoKICAgICAgaWYgKHRoaXMtPmJ1ZmZlcl8gPT0gMCkKICAgICAgewogICAgICAgIHJlc3Vs dCA9IF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0OjphbGxv Y2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7CiAg ICAgICAgdGhpcy0+cmVsZWFzZV8gPSAxOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAg ICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlBvbGljeSoqPiAodGhpcy0+YnVm ZmVyXyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVh c2VfICE9IDApCiAgICAgIHsKCgogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09S QkE6OlBvbGljeSoqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgdGhpcy0+bWF4aW11bV8gPSAw OwogICAgICAgIHRoaXMtPmxlbmd0aF8gPSAwOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwog ICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3Vs dDsKICB9CgogIGlubGluZSBjb25zdCBDT1JCQTo6UG9saWN5KiAqCiAgX1RBT19VbmJvdW5kZWRf T2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0 CiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ09SQkE6OlBvbGljeSAqKj4g KHRoaXMtPmJ1ZmZlcl8pOwogIH0KIyAzOTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5pIgppbmxpbmUKQ09SQkFfUG9saWN5TGlzdF92 YXI6OkNPUkJBX1BvbGljeUxpc3RfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30KCmlubGluZQpD T1JCQV9Qb2xpY3lMaXN0X3Zhcjo6Q09SQkFfUG9saWN5TGlzdF92YXIgKENPUkJBX1BvbGljeUxp c3QgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCkNPUkJBX1BvbGljeUxpc3RfdmFyOjpDT1JC QV9Qb2xpY3lMaXN0X3ZhciAoY29uc3QgOjpDT1JCQV9Qb2xpY3lMaXN0X3ZhciAmcCkKewogIGlm IChwLnB0cl8pCiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpDT1JCQV9Qb2xpY3lM aXN0ICgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRy XyA9IDA7Cn0KCmlubGluZQpDT1JCQV9Qb2xpY3lMaXN0X3Zhcjo6fkNPUkJBX1BvbGljeUxpc3Rf dmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9Qb2xpY3lM aXN0X3ZhciAmCkNPUkJBX1BvbGljeUxpc3RfdmFyOjpvcGVyYXRvcj0gKENPUkJBX1BvbGljeUxp c3QgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4g KnRoaXM7Cn0KCmlubGluZSA6OkNPUkJBX1BvbGljeUxpc3RfdmFyICYKQ09SQkFfUG9saWN5TGlz dF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpDT1JCQV9Qb2xpY3lMaXN0X3ZhciAmcCkKewogIGlm ICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAg ICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAg ICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBDT1JCQV9Qb2xpY3lMaXN0ICpkZWVw X2NvcHkgPQogICAgICAgICAgICBuZXcgQ09SQkFfUG9saWN5TGlzdCAoKnAucHRyXyk7CgogICAg ICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgQ09S QkFfUG9saWN5TGlzdCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9 IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAg ICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1 cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OkNPUkJBX1BvbGljeUxpc3QgKgpDT1JCQV9Qb2xp Y3lMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJf Owp9CgppbmxpbmUgOjpDT1JCQV9Qb2xpY3lMaXN0ICoKQ09SQkFfUG9saWN5TGlzdF92YXI6Om9w ZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1Bv bGljeUxpc3RfdmFyOjpvcGVyYXRvciBjb25zdCA6OkNPUkJBX1BvbGljeUxpc3QgJigpIGNvbnN0 CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpDT1JCQV9Qb2xpY3lMaXN0X3Zhcjo6 b3BlcmF0b3IgOjpDT1JCQV9Qb2xpY3lMaXN0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9 CgppbmxpbmUKQ09SQkFfUG9saWN5TGlzdF92YXI6Om9wZXJhdG9yIDo6Q09SQkFfUG9saWN5TGlz dCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpDT1JCQV9Qb2xp Y3lMaXN0X3Zhcjo6b3BlcmF0b3IgOjpDT1JCQV9Qb2xpY3lMaXN0IComKCkKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBOjpQb2xpY3ksIENP UkJBOjpQb2xpY3lfdmFyPgpDT1JCQV9Qb2xpY3lMaXN0X3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6 OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsK fQoKaW5saW5lIGNvbnN0IDo6Q09SQkFfUG9saWN5TGlzdCAmCkNPUkJBX1BvbGljeUxpc3RfdmFy OjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6Q09S QkFfUG9saWN5TGlzdCAmCkNPUkJBX1BvbGljeUxpc3RfdmFyOjppbm91dCAodm9pZCkKewogIHJl dHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OkNPUkJBX1BvbGljeUxpc3QgKiYKQ09SQkFf UG9saWN5TGlzdF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMt PnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9Qb2xpY3lM aXN0ICoKQ09SQkFfUG9saWN5TGlzdF92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpDT1JCQV9Qb2xp Y3lMaXN0ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7 Cn0KCmlubGluZSA6OkNPUkJBX1BvbGljeUxpc3QgKgpDT1JCQV9Qb2xpY3lMaXN0X3Zhcjo6cHRy ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKQ09SQkFf UG9saWN5TGlzdF9vdXQ6OkNPUkJBX1BvbGljeUxpc3Rfb3V0IChDT1JCQV9Qb2xpY3lMaXN0ICom cCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX1BvbGlj eUxpc3Rfb3V0OjpDT1JCQV9Qb2xpY3lMaXN0X291dCAoQ09SQkFfUG9saWN5TGlzdF92YXIgJnAp CiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8g PSAwOwp9CgppbmxpbmUKQ09SQkFfUG9saWN5TGlzdF9vdXQ6OkNPUkJBX1BvbGljeUxpc3Rfb3V0 IChjb25zdCA6OkNPUkJBX1BvbGljeUxpc3Rfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxD T1JCQV9Qb2xpY3lMaXN0X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIDo6Q09SQkFfUG9saWN5 TGlzdF9vdXQgJgpDT1JCQV9Qb2xpY3lMaXN0X291dDo6b3BlcmF0b3I9IChjb25zdCA6OkNPUkJB X1BvbGljeUxpc3Rfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNvbnN0X2Nhc3Q8Q09SQkFfUG9s aWN5TGlzdF9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OkNPUkJB X1BvbGljeUxpc3Rfb3V0ICYKQ09SQkFfUG9saWN5TGlzdF9vdXQ6Om9wZXJhdG9yPSAoQ09SQkFf UG9saWN5TGlzdCAqcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5s aW5lCkNPUkJBX1BvbGljeUxpc3Rfb3V0OjpvcGVyYXRvciA6OkNPUkJBX1BvbGljeUxpc3QgKiYo KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkNPUkJBX1BvbGljeUxpc3QgKiYK Q09SQkFfUG9saWN5TGlzdF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9 CgppbmxpbmUgOjpDT1JCQV9Qb2xpY3lMaXN0ICoKQ09SQkFfUG9saWN5TGlzdF9vdXQ6Om9wZXJh dG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRBT19PYmplY3Rf TWFuYWdlcjxDT1JCQTo6UG9saWN5LCBDT1JCQTo6UG9saWN5X3Zhcj4KQ09SQkFfUG9saWN5TGlz dF9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVybiB0aGlzLT5w dHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KIyA2MDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5pIgogIGlubGluZSBDT1JCQTo6VUxv bmcgKgogIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXE6OmFsbG9j YnVmIChDT1JCQTo6VUxvbmcgc2l6ZSkKCiAgewogICAgQ09SQkE6OlVMb25nICpyZXR2YWwgPSAw OwogICAgZG8geyB0cnkgeyByZXR2YWwgPSBuZXcgQ09SQkE6OlVMb25nW3NpemVdOyB9IGNhdGNo IChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAw OyB9IH0gd2hpbGUgKDApOwogICAgcmV0dXJuIHJldHZhbDsKICB9CgogIGlubGluZSB2b2lkIF9U QU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXE6OmZyZWVidWYgKENPUkJB OjpVTG9uZyAqYnVmZmVyKQoKICB7CiAgICBkZWxldGUgW10gYnVmZmVyOwogIH0KCiAgaW5saW5l CiAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcTo6X1RBT19VbmJv dW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcSAodm9pZCkKICB7CiAgfQoKICBpbmxp bmUKICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lUeXBlU2VxOjpfVEFPX1Vu Ym91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lUeXBlU2VxIChDT1JCQTo6VUxvbmcgbWF4aW11 bSkKICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBfVEFPX1VuYm91 bmRlZF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lUeXBlU2VxOjphbGxvY2J1ZiAobWF4aW11bSkpCiAg ewogIH0KCiAgaW5saW5lCiAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlw ZVNlcTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcSAoQ09SQkE6 OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgQ09SQkE6OlVMb25n ICpkYXRhLAogICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfQmFz ZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVuZ3RoLCBkYXRhLCByZWxlYXNlKQogIHsKICB9CgogIGlu bGluZQogIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXE6Ol9UQU9f VW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXEgKGNvbnN0IF9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXEgJnJocykKCiAgICA6IFRBT19VbmJvdW5k ZWRfQmFzZV9TZXF1ZW5jZSAocmhzKQogIHsKICAgIGlmIChyaHMuYnVmZmVyXyAhPSAwKQogICAg ewogICAgICBDT1JCQTo6VUxvbmcgKnRtcDEgPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JC QV9Qb2xpY3lUeXBlU2VxOjphbGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAgICBDT1JCQTo6 VUxvbmcgKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6VUxvbmcgKj4gKHJo cy5idWZmZXJfKTsKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVu Z3RoXzsgKytpKQogICAgICAgIHRtcDFbaV0gPSB0bXAyW2ldOwoKICAgICAgdGhpcy0+YnVmZmVy XyA9IHRtcDE7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwog ICAgfQogIH0KCiAgaW5saW5lIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5 cGVTZXEgJgogIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXE6Om9w ZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNl cSAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1cm4gKnRoaXM7Cgog ICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCBy aHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgQ09SQkE6OlVMb25nICp0bXAgPSByZWludGVy cHJldF9jYXN0PENPUkJBOjpVTG9uZyAqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgX1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcTo6ZnJlZWJ1ZiAodG1wKTsKICAg ICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5 VHlwZVNlcTo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UK ICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGlj eVR5cGVTZXE6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICAgIFRBT19VbmJvdW5kZWRfQmFz ZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICAgIENPUkJBOjpVTG9uZyAqdG1wMSA9IHJl aW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVMb25nICo+ICh0aGlzLT5idWZmZXJfKTsKICAgIENPUkJB OjpVTG9uZyAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVTG9uZyAqPiAo cmhzLmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVu Z3RoXzsgKytpKQogICAgICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAg fQoKCiAgaW5saW5lIENPUkJBOjpVTG9uZyAmCiAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09S QkFfUG9saWN5VHlwZVNlcTo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpCgogIHsKICAgIGRv IHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6 bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j ZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1BvbGljeUMuaSIsIDY5NywgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJl c3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgp KTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBh c3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEp OyB9IH0gd2hpbGUgKDApOwogICAgQ09SQkE6OlVMb25nKiB0bXAgPSByZWludGVycHJldF9jYXN0 PENPUkJBOjpVTG9uZyo+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVybiB0bXBbaV07CiAgfQoK ICBpbmxpbmUgY29uc3QgQ09SQkE6OlVMb25nICYKICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9D T1JCQV9Qb2xpY3lUeXBlU2VxOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3QKCiAg ewogICAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0g QUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6 Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5pIiwgNzA2LCAtMSwgX19hY2VfZXJyb3IsIGFj ZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2Fs bGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBs aW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11 bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgICBDT1JCQTo6VUxvbmcgKiBjb25zdCB0bXAgPSBy ZWludGVycHJldF9jYXN0PENPUkJBOjpVTG9uZyo+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVy biB0bXBbaV07CiAgfQoKCgogIGlubGluZSBDT1JCQTo6VUxvbmcgKgogIF9UQU9fVW5ib3VuZGVk X1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXE6OmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFu IG9ycGhhbikKICB7CiAgICBDT1JCQTo6VUxvbmcgKnJlc3VsdCA9IDA7CiAgICBpZiAob3JwaGFu ID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+YnVmZmVyXyA9PSAwKQogICAgICB7CiAgICAg ICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcTo6 YWxsb2NidWYgKHRoaXMtPmxlbmd0aF8pOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7 CiAgICAgICAgdGhpcy0+cmVsZWFzZV8gPSAxOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewog ICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVMb25nKj4gKHRoaXMtPmJ1 ZmZlcl8pOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGlmICh0aGlzLT5yZWxl YXNlXyAhPSAwKQogICAgICB7CgoKICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PENP UkJBOjpVTG9uZyo+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICB0aGlzLT5tYXhpbXVtXyA9IDA7 CiAgICAgICAgdGhpcy0+bGVuZ3RoXyA9IDA7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAg ICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0 OwogIH0KCiAgaW5saW5lIGNvbnN0IENPUkJBOjpVTG9uZyAqCiAgX1RBT19VbmJvdW5kZWRfU2Vx dWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcTo6Z2V0X2J1ZmZlciAodm9pZCkgY29uc3QKICB7CiAg ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDT1JCQTo6VUxvbmcgKj4gKHRoaXMtPmJ1 ZmZlcl8pOwogIH0KCiAgaW5saW5lIHZvaWQKICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JC QV9Qb2xpY3lUeXBlU2VxOjpyZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LAogIENPUkJBOjpVTG9u ZyBsZW5ndGgsCiAgQ09SQkE6OlVMb25nICpkYXRhLAogIENPUkJBOjpCb29sZWFuIHJlbGVhc2Up CiAgewogICAgdGhpcy0+bWF4aW11bV8gPSBtYXg7CiAgICB0aGlzLT5sZW5ndGhfID0gbGVuZ3Ro OwogICAgaWYgKHRoaXMtPmJ1ZmZlcl8gJiYgdGhpcy0+cmVsZWFzZV8gPT0gMSkKICAgIHsKICAg ICAgQ09SQkE6OlVMb25nICp0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVTG9uZyo+ICh0 aGlzLT5idWZmZXJfKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5 VHlwZVNlcTo6ZnJlZWJ1ZiAodG1wKTsKICAgIH0KICAgIHRoaXMtPmJ1ZmZlcl8gPSBkYXRhOwog ICAgdGhpcy0+cmVsZWFzZV8gPSByZWxlYXNlOwogIH0KIyA3ODIgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5pIgppbmxpbmUKQ09SQkFf UG9saWN5VHlwZVNlcV92YXI6OkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyICh2b2lkKQogIDogcHRy XyAoMCkKe30KCmlubGluZQpDT1JCQV9Qb2xpY3lUeXBlU2VxX3Zhcjo6Q09SQkFfUG9saWN5VHlw ZVNlcV92YXIgKENPUkJBX1BvbGljeVR5cGVTZXEgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5l CkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyOjpDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAoY29uc3Qg Q09SQkFfUG9saWN5VHlwZVNlcV92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkg eyB0aGlzLT5wdHJfID0gbmV3IENPUkJBX1BvbGljeVR5cGVTZXEgKCpwLnB0cl8pOyB9IGNhdGNo IChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsg fSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKCmlubGluZQpDT1JC QV9Qb2xpY3lUeXBlU2VxX3Zhcjo6Q09SQkFfUG9saWN5VHlwZVNlcV92YXIgKGNvbnN0IENPUkJB X1BvbGljeVR5cGVTZXEgJnApCnsKICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpDT1JC QV9Qb2xpY3lUeXBlU2VxIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5v X2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7Cn0KCmlubGluZQpDT1JC QV9Qb2xpY3lUeXBlU2VxX3Zhcjo6fkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyICh2b2lkKQp7CiAg ZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAmCkNP UkJBX1BvbGljeVR5cGVTZXFfdmFyOjpvcGVyYXRvcj0gKENPUkJBX1BvbGljeVR5cGVTZXEgKnAp CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7 Cn0KCmlubGluZSA6OkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyICYKQ09SQkFfUG9saWN5VHlwZVNl cV92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAmcCkKewog IGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewog ICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAg ICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBDT1JCQV9Qb2xpY3lUeXBlU2Vx ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgQ09SQkFfUG9saWN5VHlwZVNlcSAoKnAucHRy Xyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgQ09SQkFfUG9saWN5VHlwZVNlcSAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAg IGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsK ICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCgppbmxpbmUgOjpDT1JCQV9Qb2xpY3lUeXBlU2VxX3Zh ciAmCkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6Q09SQkE6OlBv bGljeVR5cGVTZXEgJnApCnsKICBpZiAodGhpcy0+cHRyXyAhPSAmcCkKICB7CiAgICBkZWxldGUg dGhpcy0+cHRyXzsKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkNPUkJBOjpQb2xp Y3lUeXBlU2VxIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSA9IDEyOyByZXR1cm4gKnRoaXM7IH0gfSB3aGlsZSAoMCk7CiAgfQogIHJldHVybiAq dGhpczsKfQoKaW5saW5lIGNvbnN0IDo6Q09SQkE6OlBvbGljeVR5cGVTZXEgKgpDT1JCQV9Qb2xp Y3lUeXBlU2VxX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5w dHJfOwp9CgppbmxpbmUgOjpDT1JCQTo6UG9saWN5VHlwZVNlcSAqCkNPUkJBX1BvbGljeVR5cGVT ZXFfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGlu ZQpDT1JCQV9Qb2xpY3lUeXBlU2VxX3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpDT1JCQTo6UG9saWN5 VHlwZVNlcSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJB X1BvbGljeVR5cGVTZXFfdmFyOjpvcGVyYXRvciA6OkNPUkJBOjpQb2xpY3lUeXBlU2VxICYoKQp7 CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfUG9saWN5VHlwZVNlcV92YXI6 Om9wZXJhdG9yIDo6Q09SQkE6OlBvbGljeVR5cGVTZXEgJigpIGNvbnN0CnsKICByZXR1cm4gKnRo aXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6UG9saWN5VHlwZSAmCkNPUkJBX1BvbGljeVR5cGVT ZXFfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+ cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3QgQ09SQkE6OlBvbGljeVR5 cGUgJgpDT1JCQV9Qb2xpY3lUeXBlU2VxX3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGlu ZGV4KSBjb25zdAp7CiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgQ09SQkE6OlBvbGljeVR5cGUg Jj4gKHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGluZSBjb25zdCA6OkNP UkJBOjpQb2xpY3lUeXBlU2VxICYKQ09SQkFfUG9saWN5VHlwZVNlcV92YXI6OmluICh2b2lkKSBj b25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQTo6UG9saWN5VHlw ZVNlcSAmCkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiAq dGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OkNPUkJBOjpQb2xpY3lUeXBlU2VxIComCkNPUkJBX1Bv bGljeVR5cGVTZXFfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlz LT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6Q09SQkE6OlBvbGlj eVR5cGVTZXEgKgpDT1JCQV9Qb2xpY3lUeXBlU2VxX3Zhcjo6X3JldG4gKHZvaWQpCnsKICA6OkNP UkJBOjpQb2xpY3lUeXBlU2VxICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwog IHJldHVybiB0bXA7Cn0KCmlubGluZSA6OkNPUkJBOjpQb2xpY3lUeXBlU2VxICoKQ09SQkFfUG9s aWN5VHlwZVNlcV92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9 CgoKCgoKaW5saW5lCkNPUkJBX1BvbGljeVR5cGVTZXFfb3V0OjpDT1JCQV9Qb2xpY3lUeXBlU2Vx X291dCAoQ09SQkFfUG9saWN5VHlwZVNlcSAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRy XyA9IDA7Cn0KCmlubGluZQpDT1JCQV9Qb2xpY3lUeXBlU2VxX291dDo6Q09SQkFfUG9saWN5VHlw ZVNlcV9vdXQgKENPUkJBX1BvbGljeVR5cGVTZXFfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkp CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJB X1BvbGljeVR5cGVTZXFfb3V0OjpDT1JCQV9Qb2xpY3lUeXBlU2VxX291dCAoY29uc3QgOjpDT1JC QV9Qb2xpY3lUeXBlU2VxX291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8Q09SQkFfUG9saWN5 VHlwZVNlcV9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSA6OkNPUkJBX1BvbGljeVR5cGVTZXFf b3V0ICYKQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpDT1JCQV9Q b2xpY3lUeXBlU2VxX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PENPUkJBX1Bv bGljeVR5cGVTZXFfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpD T1JCQV9Qb2xpY3lUeXBlU2VxX291dCAmCkNPUkJBX1BvbGljeVR5cGVTZXFfb3V0OjpvcGVyYXRv cj0gKENPUkJBX1BvbGljeVR5cGVTZXEgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4g KnRoaXM7Cn0KCmlubGluZQpDT1JCQV9Qb2xpY3lUeXBlU2VxX291dDo6b3BlcmF0b3IgOjpDT1JC QTo6UG9saWN5VHlwZVNlcSAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6 Q09SQkE6OlBvbGljeVR5cGVTZXEgKiYKQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQ6OnB0ciAodm9p ZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQTo6UG9saWN5VHlwZVNl cSAqCkNPUkJBX1BvbGljeVR5cGVTZXFfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJu IHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6UG9saWN5VHlwZSAmCkNPUkJBX1BvbGljeVR5 cGVTZXFfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhp cy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CiMgMTAyNSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmkiCmlubGluZSBDT1JCQTo6 Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBDT1JCQTo6UG9s aWN5RXJyb3IgJl90YW9fYWdncmVnYXRlKQp7CgogIGlmIChzdHJtIDw8IF90YW9fYWdncmVnYXRl Ll9pZCAoKSkKICB7CgogICAgaWYgKAogICAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5yZWFz b24pCiAgICApCiAgICAgIHJldHVybiAxOwogICAgZWxzZQogICAgICByZXR1cm4gMDsKICB9CiAg ZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChU QU9fSW5wdXRDRFIgJnN0cm0sQ09SQkE6OlBvbGljeUVycm9yICZfdGFvX2FnZ3JlZ2F0ZSkKewoK ICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5yZWFzb24pCiAgKQogICAgcmV0dXJu IDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8 ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IENPUkJBOjpJbnZhbGlkUG9saWNpZXM6 Ol90YW9fc2VxX1VTaG9ydCAmCiAgKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBU QU9fSW5wdXRDRFIgJiwKICAgIENPUkJBOjpJbnZhbGlkUG9saWNpZXM6Ol90YW9fc2VxX1VTaG9y dCAmCiAgKTsKCgoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRD RFIgJnN0cm0sIGNvbnN0IENPUkJBOjpJbnZhbGlkUG9saWNpZXMgJl90YW9fYWdncmVnYXRlKQp7 CgogIGlmIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLl9pZCAoKSkKICB7CgogICAgaWYgKAogICAg ICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5pbmRpY2VzKQogICAgKQogICAgICByZXR1cm4gMTsK ICAgIGVsc2UKICAgICAgcmV0dXJuIDA7CiAgfQogIGVsc2UKICAgIHJldHVybiAwOwp9Cgppbmxp bmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLENPUkJBOjpJ bnZhbGlkUG9saWNpZXMgJl90YW9fYWdncmVnYXRlKQp7CgogIGlmICgKICAgIChzdHJtID4+IF90 YW9fYWdncmVnYXRlLmluZGljZXMpCiAgKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJu IDA7Cn0KCiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0 cHV0Q0RSICYsCiAgICBjb25zdCBDT1JCQTo6UG9saWN5X3B0cgogICk7CgogICAgICAgICAgIENP UkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAgICBDT1JCQTo6 UG9saWN5X3B0ciAmCiAgKTsKCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRB T19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IENPUkJBX1BvbGljeUxpc3QgJgogICk7CkNPUkJBOjpC b29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAgICBDT1JCQV9Qb2xpY3lM aXN0ICYKICApOwoKCgoKCgoKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0 cHV0Q0RSICYsCiAgICBjb25zdCBDT1JCQTo6UG9saWN5VHlwZVNlcSAmCiAgKTsKQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwKICAgIENPUkJBOjpQb2xpY3lU eXBlU2VxICYKICApOwoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091 dHB1dENEUiAmc3RybSwgY29uc3QgQ09SQkE6OlNldE92ZXJyaWRlVHlwZSAmX3Rhb19lbnVtdmFs KQp7CiAgQ09SQkE6OlVMb25nIF90YW9fdGVtcCA9IF90YW9fZW51bXZhbDsKICByZXR1cm4gc3Ry bSA8PCBfdGFvX3RlbXA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9f SW5wdXRDRFIgJnN0cm0sIENPUkJBOjpTZXRPdmVycmlkZVR5cGUgJl90YW9fZW51bXZhbCkKewog IENPUkJBOjpVTG9uZyBfdGFvX3RlbXAgPSAwOwogIENPUkJBOjpCb29sZWFuIF90YW9fcmVzdWx0 ID0gc3RybSA+PiBfdGFvX3RlbXA7CgogIGlmIChfdGFvX3Jlc3VsdCA9PSAxKQogICAgewogICAg ICBfdGFvX2VudW12YWwgPSBzdGF0aWNfY2FzdDxDT1JCQTo6U2V0T3ZlcnJpZGVUeXBlPiAoX3Rh b190ZW1wKTsKICAgIH0KCiAgcmV0dXJuIF90YW9fcmVzdWx0Owp9CiMgMTIxMCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDIKIyAx MjIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv bGljeUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvcG9zdC5oIiAxCiMgMTIyMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDIKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PUkIuaCIgMgoKdHlwZWRlZiBlbnVtCnsKICBUQU9f U0VSVklDRUlEX05BTUVTRVJWSUNFLAogIFRBT19TRVJWSUNFSURfVFJBRElOR1NFUlZJQ0UsCiAg VEFPX1NFUlZJQ0VJRF9JTVBMUkVQT1NFUlZJQ0UsCiAgVEFPX1NFUlZJQ0VJRF9JTlRFUkZBQ0VS RVBPU0VSVklDRQp9IFRBT19TZXJ2aWNlX0lEOwoKCmNsYXNzIFRBT19NUHJvZmlsZTsKc3RydWN0 IFRBT19EaXNwYXRjaF9Db250ZXh0OwpjbGFzcyBUQU9fQ2xpZW50X1N0cmF0ZWd5X0ZhY3Rvcnk7 CmNsYXNzIFRBT19TZXJ2ZXJfU3RyYXRlZ3lfRmFjdG9yeTsKY2xhc3MgVEFPX0lucHV0Q0RSOwpj bGFzcyBUQU9fT3V0cHV0Q0RSOwpjbGFzcyBUQU9fU3R1YjsKCmNsYXNzIFRBT19BY2NlcHRvcl9G aWx0ZXI7CgoKY2xhc3MgVEFPX1ZhbHVlRmFjdG9yeV9NYXA7CiMgNzEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiCmNsYXNzIENPUkJBX09S Qgp7CnB1YmxpYzoKCgogIGZyaWVuZCBjbGFzcyBUQU9fT1JCX0NvcmU7CiAgZnJpZW5kIFRBT19P UkJfQ29yZSAqVEFPX09SQl9Db3JlX2luc3RhbmNlICh2b2lkKTsKCiAgY2xhc3MgSW52YWxpZE5h bWUgOiBwdWJsaWMgQ09SQkFfVXNlckV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBJbnZhbGlk TmFtZSAodm9pZCk7CiAgICBJbnZhbGlkTmFtZSAoY29uc3QgSW52YWxpZE5hbWUgJik7CiAgICB+ SW52YWxpZE5hbWUgKHZvaWQpOwogICAgSW52YWxpZE5hbWUgJm9wZXJhdG9yPSAoY29uc3QgSW52 YWxpZE5hbWUgJik7CgogICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgdmlydHVh bCB2b2lkIF90YW9fZW5jb2RlIChUQU9fT3V0cHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmKSBjb25zdDsKICAgIHZpcnR1YWwgdm9p ZCBfdGFvX2RlY29kZSAoVEFPX0lucHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKCgogICAgc3RhdGljIEludmFsaWROYW1lKiBf ZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiAqZXgpOwogICAgc3RhdGljIENPUkJBOjpFeGNlcHRp b24gKl9hbGxvYyAodm9pZCk7CiAgfTsKICBzdGF0aWMgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf SW52YWxpZE5hbWU7CgogIHR5cGVkZWYgY2hhciAqT2JqZWN0SWQ7CiAgdHlwZWRlZiBDT1JCQTo6 U3RyaW5nX3ZhciBPYmplY3RJZF92YXI7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX291dCBPYmpl Y3RJZF9vdXQ7CiAgc3RhdGljIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX09iamVjdElkOwoKICB0 eXBlZGVmIENPUkJBX09SQl9PYmplY3RJZExpc3QgT2JqZWN0SWRMaXN0OwogIHR5cGVkZWYgQ09S QkFfT1JCX09iamVjdElkTGlzdF92YXIgT2JqZWN0SWRMaXN0X3ZhcjsKICB0eXBlZGVmIENPUkJB X09SQl9PYmplY3RJZExpc3Rfb3V0IE9iamVjdElkTGlzdF9vdXQ7CiAgdHlwZWRlZiBDT1JCQV9P UkJfT2JqZWN0SWRMaXN0ICpPYmplY3RJZExpc3RfcHRyOwogIHN0YXRpYyBDT1JCQTo6VHlwZUNv ZGVfcHRyIF90Y19PYmplY3RJZExpc3Q7CgoKCiAgc3RhdGljIENPUkJBOjpPUkJfcHRyIF9kdXBs aWNhdGUgKENPUkJBOjpPUkJfcHRyIG9yYik7CgoKCiAgc3RhdGljIENPUkJBOjpPUkJfcHRyIF9u aWwgKHZvaWQpOwoKCgoKCgogIENPUkJBOjpPYmplY3RfcHRyIHN0cmluZ190b19vYmplY3QgKGNv bnN0IGNoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC QV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50 ICgpKTsKIyAxMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vT1JCLmgiCiAgY2hhciAqIG9iamVjdF90b19zdHJpbmcgKENPUkJBOjpPYmplY3RfcHRy IG9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKICBDT1JCQTo6VmFsdWVGYWN0b3J5 X3B0ciByZWdpc3Rlcl92YWx1ZV9mYWN0b3J5ICgKICAgICAgICAgY29uc3QgY2hhciAqcmVwb3Np dG9yeV9pZCwKICAgICAgICAgQ09SQkE6OlZhbHVlRmFjdG9yeV9wdHIgZmFjdG9yeSwKICAgICAg ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkgKTsKICB2b2lkIHVucmVnaXN0 ZXJfdmFsdWVfZmFjdG9yeSAoY29uc3QgY2hhciAqIHJlcG9zaXRvcnlfaWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpICk7CiAgQ09SQkE6OlZhbHVlRmFjdG9yeV9wdHIgbG9v a3VwX3ZhbHVlX2ZhY3RvcnkgKAogICAgICAgICBjb25zdCBjaGFyICpyZXBvc2l0b3J5X2lkLAog ICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSA9CiAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSApOwoKCgoKCgoKICB0 eXBlZGVmIENPUkJBX09SQl9SZXF1ZXN0U2VxIFJlcXVlc3RTZXE7CiAgdHlwZWRlZiBDT1JCQV9P UkJfUmVxdWVzdFNlcV92YXIgUmVxdWVzdFNlcV92YXI7CiAgdHlwZWRlZiBDT1JCQV9PUkJfUmVx dWVzdFNlcV9vdXQgUmVxdWVzdFNlcV9vdXQ7CgogIHZvaWQgY3JlYXRlX2xpc3QgKENPUkJBOjpM b25nIGNvdW50LAogICAgICAgICAgICAgICAgICAgIENPUkJBOjpOVkxpc3RfcHRyICZuZXdfbGlz dCwKICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpKTsKCiAgdm9pZCBjcmVhdGVfbmFtZWRfdmFsdWUgKENPUkJBOjpOYW1lZFZh bHVlX3B0ciAmbm12YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCiAgdm9pZCBjcmVhdGVf ZXhjZXB0aW9uX2xpc3QgKENPUkJBOjpFeGNlcHRpb25MaXN0X3B0ciAmZXhjbGlzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFP X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKICB2b2lkIGNyZWF0ZV9lbnZpcm9ubWVudCAoQ09S QkE6OkVudmlyb25tZW50X3B0ciAmbmV3X2VudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg Q09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg ICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKCgog IHZvaWQgY3JlYXRlX2NvbnRleHRfbGlzdCAoQ09SQkE6OkNvbnRleHRMaXN0X3B0ciAmY3R4dGxp c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBU QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgogIHZvaWQgZ2V0X2RlZmF1bHRfY29udGV4dCAo Q09SQkE6OkNvbnRleHRfcHRyICZjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC QV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgogIENPUkJB OjpCb29sZWFuIGdldF9zZXJ2aWNlX2luZm9ybWF0aW9uIChDT1JCQTo6U2VydmljZVR5cGUgc2Vy dmljZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC QTo6U2VydmljZUluZm9ybWF0aW9uX291dCBzZXJ2aWNlX2luZm9ybWF0aW9uLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgogIHZvaWQgc2VuZF9t dWx0aXBsZV9yZXF1ZXN0c19vbmV3YXkgKGNvbnN0IENPUkJBX09SQl9SZXF1ZXN0U2VxICZyZXEg LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgogIHZvaWQgc2Vu ZF9tdWx0aXBsZV9yZXF1ZXN0c19kZWZlcnJlZCAoY29uc3QgQ09SQkFfT1JCX1JlcXVlc3RTZXEg JnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCiAg dm9pZCBnZXRfbmV4dF9yZXNwb25zZSAoQ09SQkFfUmVxdWVzdF9wdHIgJnJlcSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv bm1lbnQgKCkpOwoKICBDT1JCQTo6Qm9vbGVhbiBwb2xsX25leHRfcmVzcG9uc2UgKENPUkJBX0Vu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgoK ICBDT1JCQTo6VHlwZUNvZGVfcHRyIGNyZWF0ZV9zdHJ1Y3RfdGMgKAogICAgICBjb25zdCBjaGFy ICppZCwKICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgY29uc3QgQ09SQkE6OlN0cnVjdE1l bWJlclNlcSAmbWVtYmVycywKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog ICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwoKICBDT1JCQTo6VHlwZUNv ZGVfcHRyIGNyZWF0ZV91bmlvbl90YyAoCiAgICAgIGNvbnN0IGNoYXIgKmlkLAogICAgICBjb25z dCBjaGFyICpuYW1lLAogICAgICBDT1JCQTo6VHlwZUNvZGVfcHRyIGRpc2NyaW1pbmF0b3JfdHlw ZSwKICAgICAgY29uc3QgQ09SQkE6OlVuaW9uTWVtYmVyU2VxICZtZW1iZXJzLAogICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoQ09SQkE6OlN5c3Rl bUV4Y2VwdGlvbik7CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgY3JlYXRlX2VudW1fdGMgKAogICAg ICBjb25zdCBjaGFyICppZCwKICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgY29uc3QgQ09S QkE6OkVudW1NZW1iZXJTZXEgJm1lbWJlcnMsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv bm1lbnQgKCkKICAgICkKICAgIHRocm93IChDT1JCQTo6U3lzdGVtRXhjZXB0aW9uKTsKCiAgQ09S QkE6OlR5cGVDb2RlX3B0ciBjcmVhdGVfYWxpYXNfdGMgKAogICAgICBjb25zdCBjaGFyICppZCwK ICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgQ09SQkE6OlR5cGVDb2RlX3B0ciBvcmlnaW5h bF90eXBlLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApCiAgICB0 aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgY3Jl YXRlX2V4Y2VwdGlvbl90YyAoCiAgICAgIGNvbnN0IGNoYXIgKmlkLAogICAgICBjb25zdCBjaGFy ICpuYW1lLAogICAgICBjb25zdCBDT1JCQTo6U3RydWN0TWVtYmVyU2VxICZtZW1iZXJzLAogICAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoQ09SQkE6 OlN5c3RlbUV4Y2VwdGlvbik7CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgY3JlYXRlX2ludGVyZmFj ZV90YyAoCiAgICAgIGNvbnN0IGNoYXIgKmlkLAogICAgICBjb25zdCBjaGFyICpuYW1lLAogICAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoQ09SQkE6 OlN5c3RlbUV4Y2VwdGlvbik7CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgY3JlYXRlX3N0cmluZ190 YyAoCiAgICAgIENPUkJBOjpVTG9uZyBib3VuZCwKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZp cm9ubWVudCAoKQogICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwoKICBD T1JCQTo6VHlwZUNvZGVfcHRyIGNyZWF0ZV93c3RyaW5nX3RjICgKICAgICAgQ09SQkE6OlVMb25n IGJvdW5kLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApCiAgICB0 aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgY3Jl YXRlX2ZpeGVkX3RjICgKICAgICAgQ09SQkE6OlVTaG9ydCBkaWdpdHMsCiAgICAgIENPUkJBOjpV U2hvcnQgc2NhbGUsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkK ICAgIHRocm93IChDT1JCQTo6U3lzdGVtRXhjZXB0aW9uKTsKCiAgQ09SQkE6OlR5cGVDb2RlX3B0 ciBjcmVhdGVfc2VxdWVuY2VfdGMgKAogICAgICBDT1JCQTo6VUxvbmcgYm91bmQsCiAgICAgIENP UkJBOjpUeXBlQ29kZV9wdHIgZWxlbWVudF90eXBlLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7Cgog IENPUkJBOjpUeXBlQ29kZV9wdHIgY3JlYXRlX2FycmF5X3RjICgKICAgICAgQ09SQkE6OlVMb25n IGxlbmd0aCwKICAgICAgQ09SQkE6OlR5cGVDb2RlX3B0ciBlbGVtZW50X3R5cGUsCiAgICAgIENP UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAg ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkKICAgIHRocm93IChDT1JCQTo6U3lz dGVtRXhjZXB0aW9uKTsKCiAgQ09SQkE6OlR5cGVDb2RlX3B0ciBjcmVhdGVfdmFsdWVfdGMgKAog ICAgICBjb25zdCBjaGFyICppZCwKICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgQ09SQkE6 OlZhbHVlTW9kaWZpZXIgdHlwZV9tb2RpZmllciwKICAgICAgQ09SQkE6OlR5cGVDb2RlX3B0ciBj b25jcmV0ZV9iYXNlLAogICAgICBjb25zdCBDT1JCQTo6VmFsdWVNZW1iZXJTZXEgJm1lbWJlcnMs CiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkKICAgIHRocm93IChD T1JCQTo6U3lzdGVtRXhjZXB0aW9uKTsKCiAgQ09SQkE6OlR5cGVDb2RlX3B0ciBjcmVhdGVfdmFs dWVfYm94X3RjICgKICAgICAgY29uc3QgY2hhciAqaWQsCiAgICAgIGNvbnN0IGNoYXIgKm5hbWUs CiAgICAgIENPUkJBOjpUeXBlQ29kZV9wdHIgYm94ZWRfdHlwZSwKICAgICAgQ09SQkE6OkVudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVm YXVsdF9lbnZpcm9ubWVudCAoKQogICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRp b24pOwoKICBDT1JCQTo6VHlwZUNvZGVfcHRyIGNyZWF0ZV9uYXRpdmVfdGMgKAogICAgICBjb25z dCBjaGFyICppZCwKICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgQ09SQkE6OkVudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVs dF9lbnZpcm9ubWVudCAoKQogICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24p OwoKICBDT1JCQTo6VHlwZUNvZGVfcHRyIGNyZWF0ZV9yZWN1cnNpdmVfdGMgKAogICAgICBjb25z dCBjaGFyICppZCwKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgKQog ICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwoKICBDT1JCQTo6VHlwZUNvZGVfcHRy IGNyZWF0ZV9hYnN0cmFjdF9pbnRlcmZhY2VfdGMgKAogICAgICBjb25zdCBjaGFyICppZCwKICAg ICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB X0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAo KQogICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwoKCiAgQ09SQkE6OlR5 cGVDb2RlX3B0ciBjcmVhdGVfbG9jYWxfaW50ZXJmYWNlX3RjICgKICAgICAgY29uc3QgY2hhciAq aWQsCiAgICAgIGNvbnN0IGNoYXIgKmFtZSwKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKQogICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwojIDM2OSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PUkIuaCIK ICB2b2lkIHJ1biAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlID0gVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKCgoKICB2b2lkIHJ1biAo QUNFX1RpbWVfVmFsdWUgJnR2LAogICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7 CgoKCgoKCgogIHZvaWQgcnVuIChBQ0VfVGltZV9WYWx1ZSAqdHYsCiAgICAgICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9IFRBT19kZWZh dWx0X2Vudmlyb25tZW50ICgpKTsKCgoKICBDT1JCQTo6Qm9vbGVhbiB3b3JrX3BlbmRpbmcgKENP UkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgoK CiAgQ09SQkE6OkJvb2xlYW4gd29ya19wZW5kaW5nIChBQ0VfVGltZV9WYWx1ZSAmdHYsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9F bnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKCgoKCgogIHZvaWQgcGVyZm9ybV93b3JrIChDT1JC QV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg ICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKICB2b2lkIHBlcmZvcm1f d29yayAoQUNFX1RpbWVfVmFsdWUgJiwKICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAg ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CiAgdm9pZCBwZXJmb3JtX3dvcmsgKEFD RV9UaW1lX1ZhbHVlICosCiAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgVEFP X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwojIDQyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PUkIuaCIKICB2b2lkIHNodXRkb3duIChDT1JCQTo6 Qm9vbGVhbiB3YWl0X2Zvcl9jb21wbGV0aW9uID0gMCwKICAgICAgICAgICAgICAgICBDT1JCQTo6 RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVs dF9lbnZpcm9ubWVudCAoKSk7CiMgNDM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL09SQi5oIgogIHZvaWQgZGVzdHJveSAoQ09SQkFfRW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKSk7CgogIENPUkJBX09iamVjdF9wdHIgcmVzb2x2ZV9pbml0aWFsX3JlZmVyZW5jZXMg KGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19k ZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKIyA0NTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiCiAgQ09SQkFfT2JqZWN0X3B0ciByZXNvbHZl X2luaXRpYWxfcmVmZXJlbmNlcyAoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9u bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkp OwoKCgogIENPUkJBX09SQl9PYmplY3RJZExpc3RfcHRyIGxpc3RfaW5pdGlhbF9zZXJ2aWNlcyAo CiAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgogIENPUkJBOjpQb2xpY3lf cHRyIGNyZWF0ZV9wb2xpY3kgKENPUkJBOjpQb2xpY3lUeXBlIHR5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OkFueSYgdmFsLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKCgogIENPUkJBX09iamVjdF9wdHIgcmVz b2x2ZV9yb290X3BvYSAoQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUpOwoKCiAgVEFPX1N0dWIgKmNyZWF0ZV9zdHViX29iamVjdCAoY29uc3QgVEFPX09i amVjdEtleSAma2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KnR5cGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlBvbGljeUxp c3QgKnBvbGljeV9saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19BY2Nl cHRvcl9GaWx0ZXIgKmFjY2VwdG9yX2ZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7 CgoKCiAgc3RhdGljIHZvaWQgaW5pdF9vcmJfZ2xvYmFscyAoQ09SQkFfRW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKCiAgc3RhdGljIHZvaWQg X3Rhb191bmV4cGVjdGVkX2V4Y2VwdGlvbiAodm9pZCk7CgoKICBDT1JCQTo6VUxvbmcgX2luY3Jf cmVmY250ICh2b2lkKTsKICBDT1JCQTo6VUxvbmcgX2RlY3JfcmVmY250ICh2b2lkKTsKCgoKICB2 b2lkIF91c2Vfb21nX2lvcl9mb3JtYXQgKENPUkJBOjpCb29sZWFuIGlvcik7CiAgQ09SQkE6OkJv b2xlYW4gX3VzZV9vbWdfaW9yX2Zvcm1hdCAodm9pZCk7CgoKCiAgdm9pZCBfb3B0aW1pemVfY29s bG9jYXRpb25fb2JqZWN0cyAoQ09SQkE6OkJvb2xlYW4gb3B0KTsKICBDT1JCQTo6Qm9vbGVhbiBf b3B0aW1pemVfY29sbG9jYXRpb25fb2JqZWN0cyAodm9pZCkgY29uc3Q7CgoKICBUQU9fT1JCX0Nv cmUgKm9yYl9jb3JlICh2b2lkKSBjb25zdDsKCgoKCgoKCiAgY29uc3QgQUNFX0NTdHJpbmcgJl90 YW9fZnRfY2xpZW50X2lkICh2b2lkKTsKICB2b2lkIF90YW9fZnRfY2xpZW50X2lkIChjb25zdCBj aGFyICppZCk7CgoKICB0eXBlZGVmIENPUkJBX09SQl9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYg Q09SQkFfT1JCX3ZhciBfdmFyX3R5cGU7CgoKCnByb3RlY3RlZDoKCiAgQ09SQkFfT1JCIChUQU9f T1JCX0NvcmUgKm9yYl9jb3JlKTsKICB+Q09SQkFfT1JCICh2b2lkKTsKCgogIENPUkJBX09iamVj dF9wdHIgcmVzb2x2ZV9wb2FfY3VycmVudCAoQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUpOwoKCiAgQ09SQkFfT2JqZWN0X3B0ciByZXNvbHZlX3BvbGlj eV9tYW5hZ2VyIChDT1JCQTo6RW52aXJvbm1lbnQmKTsKCgogIENPUkJBX09iamVjdF9wdHIgcmVz b2x2ZV9wb2xpY3lfY3VycmVudCAoQ09SQkE6OkVudmlyb25tZW50Jik7Cgpwcml2YXRlOgoKCiAg Q09SQkFfT2JqZWN0X3B0ciByZXNvbHZlX3NlcnZpY2UgKE1DQVNUX1NFUlZJQ0VJRCBzZXJ2aWNl X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVGltZV9WYWx1ZSAq dGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmly b25tZW50JiBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCiAgaW50IG11bHRpY2Fz dF9xdWVyeSAoY2hhciogJmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpz ZXJ2aWNlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgdV9zaG9ydCBwb3J0LAogICAgICAg ICAgICAgICAgICAgICAgIEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0KTsKCgoKCgogIENPUkJBX09i amVjdF9wdHIgbXVsdGljYXN0X3RvX3NlcnZpY2UgKGNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X3Nob3J0IHBvcnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1RpbWVfVmFsdWUgKnRp bWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVu dmlyb25tZW50JiBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCgogIENPUkJBOjpP YmplY3RfcHRyIGlvcl9zdHJpbmdfdG9fb2JqZWN0IChjb25zdCBjaGFyKiBpb3IsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CgoKICBDT1JCQTo6T2JqZWN0X3B0ciB1cmxf aW9yX3N0cmluZ190b19vYmplY3QgKGNvbnN0IGNoYXIqIGlvciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CgoKICB2b2lkIGNoZWNrX3NodXRkb3duIChDT1JCQTo6 RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKcHJpdmF0ZToK CiAgQUNFX01UX1NZTkNIOjpNVVRFWCBsb2NrXzsKCgoKICB1X2ludCByZWZjb3VudF87CgoKICBz dGF0aWMgaW50IG9yYl9pbml0X2NvdW50XzsKCgoKICBUQU9fT1JCX0NvcmUgKm9yYl9jb3JlXzsK CgoKICBUQU9fVmFsdWVGYWN0b3J5X01hcCAqdmFsdWV0eXBlX2ZhY3RvcnlfbWFwXzsKCgoKICBD T1JCQTo6Qm9vbGVhbiB1c2Vfb21nX2lvcl9mb3JtYXRfOwoKCiAgQ09SQkFfT1JCIChjb25zdCBD T1JCQV9PUkIgJik7CiAgQ09SQkFfT1JCICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX09SQiAmKTsK fTsKCmNsYXNzIENPUkJBX09SQl92YXIKewpwdWJsaWM6CiAgQ09SQkFfT1JCX3ZhciAodm9pZCk7 CiAgQ09SQkFfT1JCX3ZhciAoQ09SQkE6Ok9SQl9wdHIpOwogIENPUkJBX09SQl92YXIgKGNvbnN0 IENPUkJBX09SQl92YXIgJik7CiAgfkNPUkJBX09SQl92YXIgKHZvaWQpOwoKICBDT1JCQV9PUkJf dmFyICZvcGVyYXRvcj0gKENPUkJBOjpPUkJfcHRyKTsKICBDT1JCQV9PUkJfdmFyICZvcGVyYXRv cj0gKGNvbnN0IENPUkJBX09SQl92YXIgJik7CiAgQ09SQkE6Ok9SQl9wdHIgb3BlcmF0b3ItPiAo dm9pZCkgY29uc3Q7CgoKICBvcGVyYXRvciBjb25zdCBDT1JCQTo6T1JCX3B0ciAmKCkgY29uc3Q7 CiAgb3BlcmF0b3IgQ09SQkE6Ok9SQl9wdHIgJigpOwogIENPUkJBOjpPUkJfcHRyIGluICh2b2lk KSBjb25zdDsKICBDT1JCQTo6T1JCX3B0ciAmaW5vdXQgKHZvaWQpOwogIENPUkJBOjpPUkJfcHRy ICZvdXQgKHZvaWQpOwogIENPUkJBOjpPUkJfcHRyIF9yZXRuICh2b2lkKTsKICBDT1JCQTo6T1JC X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKcHJpdmF0ZToKICBDT1JCQTo6T1JCX3B0ciBwdHJfOwp9 OwoKY2xhc3MgQ09SQkFfT1JCX291dAp7CnB1YmxpYzoKICBDT1JCQV9PUkJfb3V0IChDT1JCQTo6 T1JCX3B0ciAmKTsKICBDT1JCQV9PUkJfb3V0IChDT1JCQV9PUkJfdmFyICYpOwogIENPUkJBX09S Ql9vdXQgKGNvbnN0IENPUkJBX09SQl9vdXQgJik7CiAgQ09SQkFfT1JCX291dCAmb3BlcmF0b3I9 IChDT1JCQV9PUkJfb3V0ICYpOwogIENPUkJBX09SQl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09S QkFfT1JCX3ZhciAmKTsKICBDT1JCQV9PUkJfb3V0ICZvcGVyYXRvcj0gKENPUkJBOjpPUkJfcHRy KTsKICBvcGVyYXRvciBDT1JCQTo6T1JCX3B0ciAmKCk7CiAgQ09SQkE6Ok9SQl9wdHIgJnB0ciAo dm9pZCk7CiAgQ09SQkE6Ok9SQl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7Cgpwcml2YXRlOgogIENP UkJBOjpPUkJfcHRyICZwdHJfOwp9OwoKICAgICAgICAgICB2b2lkCm9wZXJhdG9yPDw9IChDT1JC QTo6QW55ICYsIGNvbnN0IENPUkJBOjpPUkI6OkludmFsaWROYW1lICYpOwogICAgICAgICAgIHZv aWQKb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkE6Ok9SQjo6SW52YWxpZE5hbWUqKTsK ICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAm LCBDT1JCQTo6T1JCOjpJbnZhbGlkTmFtZSAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4K b3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmLCBjb25zdCBDT1JCQTo6T1JCOjpJbnZhbGlkTmFt ZSAmKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIg JiwgQ09SQkE6Ok9SQjo6SW52YWxpZE5hbWUgJik7CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PUkIuaSIgMQojIDEwICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09SQi5pIgppbmxpbmUgQ09S QkE6OlVMb25nCkNPUkJBX09SQjo6X2luY3JfcmVmY250ICh2b2lkKQp7CiAgQUNFX0d1YXJkPCBB Q0VfTVRfU1lOQ0g6Ok1VVEVYID4gZ3VhcmQgKGxvY2tfKTsgaWYgKGd1YXJkLmxvY2tlZCAoKSA9 PSAwKSByZXR1cm4gMDs7CiAgcmV0dXJuICsrdGhpcy0+cmVmY291bnRfOwp9CgppbmxpbmUgQ09S QkE6OlVMb25nCkNPUkJBX09SQjo6X2RlY3JfcmVmY250ICh2b2lkKQp7CiAgewogICAgQUNFX0d1 YXJkPCBBQ0VfTVRfU1lOQ0g6Ok1VVEVYID4gbW9uICh0aGlzLT5sb2NrXyk7IGlmIChtb24ubG9j a2VkICgpID09IDApIHJldHVybiAwOzsKICAgIHRoaXMtPnJlZmNvdW50Xy0tOwogICAgaWYgKHRo aXMtPnJlZmNvdW50XyAhPSAwKQogICAgICByZXR1cm4gdGhpcy0+cmVmY291bnRfOwogIH0KCiAg ZGVsZXRlIHRoaXM7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6T1JCX3B0cgpDT1JCQV9P UkI6Ol9kdXBsaWNhdGUgKENPUkJBOjpPUkJfcHRyIG9iaikKewogIGlmIChvYmopCiAgICBvYmot Pl9pbmNyX3JlZmNudCAoKTsKICByZXR1cm4gb2JqOwp9CgoKCmlubGluZSBDT1JCQTo6T1JCX3B0 cgpDT1JCQV9PUkI6Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIHZvaWQKQ09S QkFfT1JCOjpfdXNlX29tZ19pb3JfZm9ybWF0IChDT1JCQTo6Qm9vbGVhbiBpb3IpCnsKICB0aGlz LT51c2Vfb21nX2lvcl9mb3JtYXRfID0gaW9yOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KQ09S QkFfT1JCOjpfdXNlX29tZ19pb3JfZm9ybWF0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnVzZV9v bWdfaW9yX2Zvcm1hdF87Cn0KCmlubGluZSBUQU9fT1JCX0NvcmUgKgpDT1JCQV9PUkI6Om9yYl9j b3JlICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPm9yYl9jb3JlXzsKfQoKCgoKCmlubGlu ZSBDT1JCQTo6Qm9vbGVhbgpDT1JCQTo6aXNfbmlsIChDT1JCQTo6T1JCX3B0ciBvYmopCnsKICBy ZXR1cm4gb2JqID09IENPUkJBX09SQjo6X25pbCAoKTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OnJl bGVhc2UgKENPUkJBOjpPUkJfcHRyIG9iaikKewogIGlmICghQ09SQkE6OmlzX25pbCAob2JqKSkK ICAgIG9iai0+X2RlY3JfcmVmY250ICgpOwp9CgoKCgoKaW5saW5lCkNPUkJBX09SQl92YXI6OkNP UkJBX09SQl92YXIgKHZvaWQpCiAgOiBwdHJfIChDT1JCQV9PUkI6Ol9uaWwgKCkpCnsKfQoKaW5s aW5lCkNPUkJBX09SQl92YXI6OkNPUkJBX09SQl92YXIgKENPUkJBOjpPUkJfcHRyIHApCiAgOiBw dHJfIChwKQp7Cn0KCmlubGluZSBDT1JCQTo6T1JCX3B0cgpDT1JCQV9PUkJfdmFyOjpwdHIgKHZv aWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX09SQl92YXI6 OkNPUkJBX09SQl92YXIgKGNvbnN0IENPUkJBX09SQl92YXIgJnApCiAgOiBwdHJfIChDT1JCQV9P UkI6Ol9kdXBsaWNhdGUgKHAucHRyICgpKSkKewp9CgppbmxpbmUKQ09SQkFfT1JCX3Zhcjo6fkNP UkJBX09SQl92YXIgKHZvaWQpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7Cn0KCmlu bGluZSBDT1JCQV9PUkJfdmFyICYKQ09SQkFfT1JCX3Zhcjo6b3BlcmF0b3I9IChDT1JCQTo6T1JC X3B0ciBwKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBw OwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX09SQl92YXIgJgpDT1JCQV9PUkJfdmFy OjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX09SQl92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkK ICAgIHsKICAgICAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogICAgICB0aGlzLT5wdHJf ID0gQ09SQkFfT1JCOjpfZHVwbGljYXRlIChwLnB0ciAoKSk7CiAgICB9CiAgcmV0dXJuICp0aGlz Owp9CgppbmxpbmUKQ09SQkFfT1JCX3Zhcjo6b3BlcmF0b3IgY29uc3QgQ09SQkE6Ok9SQl9wdHIg JigpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX09SQl92YXI6 Om9wZXJhdG9yIENPUkJBOjpPUkJfcHRyICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlu bGluZSBDT1JCQTo6T1JCX3B0cgpDT1JCQV9PUkJfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25z dAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6T1JCX3B0cgpDT1JCQV9P UkJfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg Q09SQkE6Ok9SQl9wdHIgJgpDT1JCQV9PUkJfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6Ok9SQl9wdHIgJgpDT1JCQV9PUkJfdmFyOjpvdXQg KHZvaWQpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IENP UkJBX09SQjo6X25pbCAoKTsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBOjpP UkJfcHRyCkNPUkJBX09SQl92YXI6Ol9yZXRuICh2b2lkKQp7CgogIENPUkJBOjpPUkJfcHRyIHZh bCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IENPUkJBX09SQjo6X25pbCAoKTsKICByZXR1 cm4gdmFsOwp9CgoKCgoKaW5saW5lCkNPUkJBX09SQl9vdXQ6OkNPUkJBX09SQl9vdXQgKENPUkJB OjpPUkJfcHRyICZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSBDT1JCQV9PUkI6Ol9u aWwgKCk7Cn0KCmlubGluZQpDT1JCQV9PUkJfb3V0OjpDT1JCQV9PUkJfb3V0IChDT1JCQV9PUkJf dmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRy Xyk7CiAgdGhpcy0+cHRyXyA9IENPUkJBX09SQjo6X25pbCAoKTsKfQoKaW5saW5lCkNPUkJBX09S Ql9vdXQ6OkNPUkJBX09SQl9vdXQgKGNvbnN0IENPUkJBX09SQl9vdXQgJnApCiAgOiBwdHJfIChw LnB0cl8pCnt9CgppbmxpbmUgQ09SQkFfT1JCX291dCAmCkNPUkJBX09SQl9vdXQ6Om9wZXJhdG9y PSAoQ09SQkFfT1JCX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBwLnB0cl87CiAgcmV0dXJuICp0 aGlzOwp9CgppbmxpbmUgQ09SQkFfT1JCX291dCAmCkNPUkJBX09SQl9vdXQ6Om9wZXJhdG9yPSAo Y29uc3QgQ09SQkFfT1JCX3ZhciAmcCkKewogIHRoaXMtPnB0cl8gPSBDT1JCQV9PUkI6Ol9kdXBs aWNhdGUgKHAucHRyICgpKTsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9PUkJfb3V0 ICYKQ09SQkFfT1JCX291dDo6b3BlcmF0b3I9IChDT1JCQTo6T1JCX3B0ciBwKQp7CiAgdGhpcy0+ cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfT1JCX291dDo6b3BlcmF0 b3IgQ09SQkE6Ok9SQl9wdHIgJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENP UkJBOjpPUkJfcHRyICYKQ09SQkFfT1JCX291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMt PnB0cl87Cn0KCmlubGluZSBDT1JCQTo6T1JCX3B0cgpDT1JCQV9PUkJfb3V0OjpvcGVyYXRvci0+ ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KIyA2NTggIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiIDIKCgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA2NjEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiIDIK IyA1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9j b3JiYS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vQ3VycmVudEMuaCIgMQojIDUyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0JvdW5kc0MuaCIgMQojIDEyICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0JvdW5kc0MuaCIKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEK IyAxMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9C b3VuZHNDLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQm91bmRzQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FeGNlcHRpb24uaCIgMQojIDE2ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0JvdW5kc0Mu aCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vQ0RSLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9Cb3VuZHNDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQm91bmRzQy5oIiAyCiMgNDQgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQm91bmRzQy5oIgogIGNs YXNzIENPUkJBX0JvdW5kcyA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogIHsKICBwdWJs aWM6CgogICAgQ09SQkFfQm91bmRzICh2b2lkKTsKICAgIENPUkJBX0JvdW5kcyAoY29uc3QgQ09S QkFfQm91bmRzICYpOwogICAgfkNPUkJBX0JvdW5kcyAodm9pZCk7CiAgICBDT1JCQV9Cb3VuZHMg Jm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfQm91bmRzICYpOwoKCiAgICB2aXJ0dWFsIHZvaWQgX3Jh aXNlICh2b2lkKTsKCiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKFRBT19PdXRwdXRDRFIg JmNkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYp IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlIChUQU9fSW5wdXRDRFIgJmNkciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYpOwoKICAg IHN0YXRpYyBDT1JCQV9Cb3VuZHMgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKICAg IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgc3RhdGljIENP UkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICB2aXJ0dWFsIENPUkJBOjpUeXBlQ29k ZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OwogIH07CgoKCgp2b2lkIG9wZXJhdG9yPDw9IChDT1JC QTo6QW55ICYsIGNvbnN0IENPUkJBOjpCb3VuZHMgJik7CnZvaWQgb3BlcmF0b3I8PD0gKENPUkJB OjpBbnkgJiwgQ09SQkE6OkJvdW5kcyopOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29u c3QgQ09SQkE6OkFueSAmLCBDT1JCQTo6Qm91bmRzIComKTsKIyA4NSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Cb3VuZHNDLmgiCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Cb3VuZHNDLmkiIDEK IyAxNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9C b3VuZHNDLmkiCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RS ICZzdHJtLCBjb25zdCBDT1JCQTo6Qm91bmRzICZfdGFvX2FnZ3JlZ2F0ZSkKewoKICBpZiAoc3Ry bSA8PCBfdGFvX2FnZ3JlZ2F0ZS5faWQgKCkpCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1 cm4gMDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAm LCBDT1JCQTo6Qm91bmRzICYpCnsKICByZXR1cm4gMTsKfQojIDg2ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0JvdW5kc0MuaCIgMgoKCgoKCgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEK IyA5MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9C b3VuZHNDLmgiIDIKIyA1MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9WYWx1ZUJhc2UuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlQmFzZS5oIgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlQmFz ZS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9PUy5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vVmFsdWVCYXNlLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDI1ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlQmFzZS5oIiAyCiMg MzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFs dWVCYXNlLmgiCmNsYXNzIENPUkJBX1ZhbHVlQmFzZQp7CgpwdWJsaWM6CgoKICB2aXJ0dWFsIHZv aWQgX2FkZF9yZWYgKHZvaWQpID0gMDsKICB2aXJ0dWFsIHZvaWQgX3JlbW92ZV9yZWYgKHZvaWQp ID0gMDsKICB2aXJ0dWFsIENPUkJBOjpVTG9uZyBfcmVmY291bnRfdmFsdWUgKHZvaWQpID0gMDsK CgogIHN0YXRpYyBDT1JCQTo6VmFsdWVCYXNlKiBfZG93bmNhc3QgKENPUkJBOjpWYWx1ZUJhc2Uq KTsKCgogIHZpcnR1YWwgY29uc3QgY2hhciogX3Rhb19vYnZfcmVwb3NpdG9yeV9pZCAoKSBjb25z dCA9IDA7CgoKCgoKICBzdGF0aWMgQ09SQkE6OkJvb2xlYW4gX3Rhb19tYXJzaGFsIChUQU9fT3V0 cHV0Q0RSICZzdHJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB X1ZhbHVlQmFzZSAqX3RoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJfYXJp dGhfdCBmb3JtYWxfdHlwZV9pZCA9IDApOwoKCiAgc3RhdGljIENPUkJBOjpCb29sZWFuIF90YW9f dW5tYXJzaGFsIChUQU9fSW5wdXRDRFIgJnN0cm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDT1JCQV9WYWx1ZUJhc2UgKiZfdGhpcyk7CgoKCgoKCgogIHN0YXRpYyBD T1JCQTo6Qm9vbGVhbiBfdGFvX3VubWFyc2hhbF9wcmUgKFRBT19JbnB1dENEUiAmc3RybSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9WYWx1ZUZhY3Rv cnlfcHRyICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S QkFfVmFsdWVCYXNlIComLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKiBjb25zdCByZXBvX2lkKTsKICBDT1JCQTo6Qm9vbGVhbiBfdGFvX3Vu bWFyc2hhbF9wb3N0IChUQU9fSW5wdXRDRFIgJnN0cm0pOwoKCnB1YmxpYzoKICB2aXJ0dWFsIHZv aWQgKl90YW9fb2J2X25hcnJvdyAocHRyX2FyaXRoX3QpID0gMDsKCgogIHZpcnR1YWwgQ09SQkE6 OkJvb2xlYW4gX3Rhb19tYXJzaGFsX3YgKFRBT19PdXRwdXRDRFIgJikgPSAwOwoKCiAgdmlydHVh bCBDT1JCQTo6Qm9vbGVhbiBfdGFvX3VubWFyc2hhbF92IChUQU9fSW5wdXRDRFIgJikgPSAwOwoK cHJvdGVjdGVkOgogIENPUkJBX1ZhbHVlQmFzZSAodm9pZCk7CiAgQ09SQkFfVmFsdWVCYXNlIChj b25zdCBDT1JCQV9WYWx1ZUJhc2UmKTsKICB2aXJ0dWFsIH5DT1JCQV9WYWx1ZUJhc2UgKCk7Cgpw cml2YXRlOgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDT1JCQV9WYWx1ZUJhc2UgJik7Cn07CiMg MTAyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Zh bHVlQmFzZS5oIgpjbGFzcyBDT1JCQV9EZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UgOiBwdWJsaWMg dmlydHVhbCBDT1JCQV9WYWx1ZUJhc2UKewoKcHVibGljOgogIHZpcnR1YWwgdm9pZCBfYWRkX3Jl ZiAodm9pZCk7CiAgdmlydHVhbCB2b2lkIF9yZW1vdmVfcmVmICh2b2lkKTsKICB2aXJ0dWFsIENP UkJBOjpVTG9uZyBfcmVmY291bnRfdmFsdWUgKHZvaWQpOwoKCgogIHZvaWQgX3Rhb19hZGRfcmVm ICh2b2lkKTsKICB2b2lkIF90YW9fcmVtb3ZlX3JlZiAodm9pZCk7CiAgQ09SQkE6OlVMb25nIF90 YW9fcmVmY291bnRfdmFsdWUgKHZvaWQpOwoKcHJvdGVjdGVkOgogIENPUkJBX0RlZmF1bHRWYWx1 ZVJlZkNvdW50QmFzZSAodm9pZCk7CiAgQ09SQkFfRGVmYXVsdFZhbHVlUmVmQ291bnRCYXNlIChj b25zdCBDT1JCQV9EZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UmKTsKICB2aXJ0dWFsIH5DT1JCQV9E ZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UgKCk7Cgpwcml2YXRlOgogIHZvaWQgb3BlcmF0b3I9IChj b25zdCBDT1JCQV9EZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UgJik7Cgpwcml2YXRlOgogIENPUkJB OjpVTG9uZyBfdGFvX3JlZmVyZW5jZV9jb3VudF87CiAgQUNFX01UX1NZTkNIOjpNVVRFWCBfdGFv X3JlZmVyZW5jZV9jb3VudF9sb2NrXzsKfTsKIyAxMzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVCYXNlLmgiCmNsYXNzIFRBT19PQlZfR0lP UF9GbGFncwp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgQ09SQkE6OlVMb25nIFZhbHVlX3RhZ19i YXNlOwogIHN0YXRpYyBjb25zdCBDT1JCQTo6VUxvbmcgVmFsdWVfdGFnX3NpZ2JpdHM7CiAgc3Rh dGljIGNvbnN0IENPUkJBOjpVTG9uZyBDb2RlYmFzZV91cmw7CiAgc3RhdGljIGNvbnN0IENPUkJB OjpVTG9uZyBUeXBlX2luZm9fc2lnYml0czsKICBzdGF0aWMgY29uc3QgQ09SQkE6OlVMb25nIFR5 cGVfaW5mb19ub25lOwogIHN0YXRpYyBjb25zdCBDT1JCQTo6VUxvbmcgVHlwZV9pbmZvX3Npbmds ZTsKICBzdGF0aWMgY29uc3QgQ09SQkE6OlVMb25nIFR5cGVfaW5mb19saXN0OwoKICBzdGF0aWMg Q09SQkE6OkJvb2xlYW4gaXNfbnVsbF9yZWYgKENPUkJBOjpVTG9uZyk7CiAgc3RhdGljIENPUkJB OjpCb29sZWFuIGlzX3ZhbHVlX3RhZyAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJv b2xlYW4gaGFzX2NvZGViYXNlX3VybCAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJv b2xlYW4gaGFzX25vX3R5cGVfaW5mbyAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJv b2xlYW4gaGFzX3NpbmdsZV90eXBlX2luZm8gKENPUkJBOjpVTG9uZyk7CiAgc3RhdGljIENPUkJB OjpCb29sZWFuIGhhc19saXN0X3R5cGVfaW5mbyAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09S QkE6OkJvb2xlYW4gaXNfY2h1bmtlZCAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJv b2xlYW4gaXNfaW5kaXJlY3Rpb25fdGFnIChDT1JCQTo6VUxvbmcpOwogIHN0YXRpYyBDT1JCQTo6 Qm9vbGVhbiBpc19pbmRpcmVjdGlvbiAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJv b2xlYW4gaXNfYmxvY2tfc2l6ZSAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJvb2xl YW4gaXNfZW5kX3RhZyAoQ09SQkE6OlVMb25nKTsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVCYXNlLmkiIDEKCgoKCgppbmxp bmUgdm9pZApDT1JCQTo6YWRkX3JlZiAoQ09SQkE6OlZhbHVlQmFzZSAqdmFsKQp7CiAgaWYgKHZh bCkKICAgIHZhbC0+X2FkZF9yZWYgKCk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpyZW1vdmVfcmVm IChDT1JCQTo6VmFsdWVCYXNlICp2YWwpCnsKICBpZiAodmFsKQogICAgdmFsLT5fcmVtb3ZlX3Jl ZiAoKTsKfQoKCgoKaW5saW5lCkNPUkJBX1ZhbHVlQmFzZTo6Q09SQkFfVmFsdWVCYXNlICh2b2lk KQp7Cn0KCgoKCgppbmxpbmUKQ09SQkFfRGVmYXVsdFZhbHVlUmVmQ291bnRCYXNlOjpDT1JCQV9E ZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UgKHZvaWQpCiAgICA6IF90YW9fcmVmZXJlbmNlX2NvdW50 XyAoMSkKewp9CgoKaW5saW5lIHZvaWQKQ09SQkFfRGVmYXVsdFZhbHVlUmVmQ291bnRCYXNlOjpf dGFvX2FkZF9yZWYgKHZvaWQpCnsKICBBQ0VfR3VhcmQ8IEFDRV9NVF9TWU5DSDo6TVVURVggPiBn dWFyZCAodGhpcy0+X3Rhb19yZWZlcmVuY2VfY291bnRfbG9ja18pOyBpZiAoZ3VhcmQubG9ja2Vk ICgpID09IDApIHJldHVybjs7CiAgKytfdGFvX3JlZmVyZW5jZV9jb3VudF87Cn0KCmlubGluZSB2 b2lkCkNPUkJBX0RlZmF1bHRWYWx1ZVJlZkNvdW50QmFzZTo6X3Rhb19yZW1vdmVfcmVmICh2b2lk KQp7CiAgewogICAgQUNFX0d1YXJkPCBBQ0VfTVRfU1lOQ0g6Ok1VVEVYID4gZ3VhcmQgKHRoaXMt Pl90YW9fcmVmZXJlbmNlX2NvdW50X2xvY2tfKTsgaWYgKGd1YXJkLmxvY2tlZCAoKSA9PSAwKSBy ZXR1cm47OwogICAgLS0gdGhpcy0+X3Rhb19yZWZlcmVuY2VfY291bnRfOwogICAgaWYgKHRoaXMt Pl90YW9fcmVmZXJlbmNlX2NvdW50XyAhPSAwKQogICAgICByZXR1cm47CiAgfQoKCgogIGRlbGV0 ZSB0aGlzOwp9CgppbmxpbmUgQ09SQkE6OlVMb25nCkNPUkJBX0RlZmF1bHRWYWx1ZVJlZkNvdW50 QmFzZTo6X3Rhb19yZWZjb3VudF92YWx1ZSAodm9pZCkKewogIEFDRV9HdWFyZDwgQUNFX01UX1NZ TkNIOjpNVVRFWCA+IGd1YXJkICh0aGlzLT5fdGFvX3JlZmVyZW5jZV9jb3VudF9sb2NrXyk7IGlm IChndWFyZC5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwogIHJldHVybiBfdGFvX3JlZmVyZW5j ZV9jb3VudF87Cn0KCgoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KVEFPX09CVl9HSU9QX0ZsYWdz Ojppc19udWxsX3JlZiAoQ09SQkE6OlVMb25nIHRhZykKewogIHJldHVybiAodGFnID09IDApOwp9 CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KVEFPX09CVl9HSU9QX0ZsYWdzOjppc192YWx1ZV90YWcg KENPUkJBOjpVTG9uZyB0YWcpCnsKICByZXR1cm4gKCh0YWcgJiBWYWx1ZV90YWdfc2lnYml0cykg PT0gMHg3RkZGRkYwMEwpOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KVEFPX09CVl9HSU9QX0Zs YWdzOjogaGFzX2NvZGViYXNlX3VybChDT1JCQTo6VUxvbmcgdGFnKQp7CiAgcmV0dXJuIChDT1JC QTo6Qm9vbGVhbikgKHRhZyAmIENvZGViYXNlX3VybCk7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVh bgpUQU9fT0JWX0dJT1BfRmxhZ3M6Omhhc19ub190eXBlX2luZm8gKENPUkJBOjpVTG9uZyB0YWcp CnsKICByZXR1cm4gKCh0YWcgJiBUeXBlX2luZm9fc2lnYml0cykgPT0gVHlwZV9pbmZvX25vbmUp Owp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KVEFPX09CVl9HSU9QX0ZsYWdzOjpoYXNfc2luZ2xl X3R5cGVfaW5mbyAoQ09SQkE6OlVMb25nIHRhZykKewogIHJldHVybiAoKHRhZyAmIFR5cGVfaW5m b19zaWdiaXRzKSA9PSBUeXBlX2luZm9fc2luZ2xlKTsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu ClRBT19PQlZfR0lPUF9GbGFnczo6aGFzX2xpc3RfdHlwZV9pbmZvIChDT1JCQTo6VUxvbmcgdGFn KQp7CiAgcmV0dXJuICgodGFnICYgVHlwZV9pbmZvX3NpZ2JpdHMpID09IFR5cGVfaW5mb19saXN0 KTsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuClRBT19PQlZfR0lPUF9GbGFnczo6IGlzX2NodW5r ZWQgKENPUkJBOjpVTG9uZyB0YWcpCnsKICByZXR1cm4gKENPUkJBOjpCb29sZWFuKSAodGFnICYg OCk7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpUQU9fT0JWX0dJT1BfRmxhZ3M6OmlzX2luZGly ZWN0aW9uX3RhZyAoQ09SQkE6OlVMb25nIHRhZykKewogIHJldHVybiAodGFnID09IDB4RkZGRkZG RkZMKTsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuClRBT19PQlZfR0lPUF9GbGFnczo6aXNfaW5k aXJlY3Rpb24gKENPUkJBOjpVTG9uZyB2YWx1ZSkKewogIHJldHVybiAoMHg4MDAwMDAwMEwgPCB2 YWx1ZSAmJiB2YWx1ZSA8PSAoMHhGRkZGRkZGRkwgLSA0KSk7Cn0KCmlubGluZSBDT1JCQTo6Qm9v bGVhbgpUQU9fT0JWX0dJT1BfRmxhZ3M6OmlzX2Jsb2NrX3NpemUgKENPUkJBOjpVTG9uZyB2YWx1 ZSkKewogIHJldHVybiAoIDAgPCB2YWx1ZSAmJiB2YWx1ZSA8IDB4N2ZmZmZmMDBMKTsKfQoKaW5s aW5lIENPUkJBOjpCb29sZWFuClRBT19PQlZfR0lPUF9GbGFnczo6aXNfZW5kX3RhZyAoQ09SQkE6 OlVMb25nIHRhZykKewogIHJldHVybiAoMHg4MDAwMDAwMEwgPCB0YWcgJiYgdGFnIDw9IDB4RkZG RkZGRkZMKTsKfQojIDE2NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9WYWx1ZUJhc2UuaCIgMgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxNjggIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVCYXNlLmgiIDIKIyA1NCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAy CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9W YWx1ZUZhY3RvcnkuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1ZhbHVlRmFjdG9yeS5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlRmFjdG9yeS5oIiAyCgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFm d2QuaCIgMQojIDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL1ZhbHVlRmFjdG9yeS5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVGYWN0b3J5LmgiCmNsYXNzIENPUkJBX1ZhbHVl RmFjdG9yeUJhc2UKewoKCgoKCnB1YmxpYzoKICBDT1JCQV9WYWx1ZUZhY3RvcnlCYXNlICgpOwog IHZpcnR1YWwgfkNPUkJBX1ZhbHVlRmFjdG9yeUJhc2UgKCk7CgoKICB2aXJ0dWFsIGNvbnN0IGNo YXIqIHRhb19yZXBvc2l0b3J5X2lkICgpID0gMDsKCgogIHZvaWQgX2FkZF9yZWYgKHZvaWQpOwog IHZvaWQgX3JlbW92ZV9yZWYgKHZvaWQpOwoKCgoKICB2aXJ0dWFsIENPUkJBX1ZhbHVlQmFzZSog Y3JlYXRlX2Zvcl91bm1hcnNoYWwgKHZvaWQpID0gMDsKCnByaXZhdGU6CiAgQ09SQkE6OlVMb25n IF90YW9fcmVmZXJlbmNlX2NvdW50XzsKICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIF90YW9fcmVmZXJl bmNlX2NvdW50X2xvY2tfOwp9OwojIDkyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlRmFjdG9yeS5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVGYWN0b3J5LmkiIDEKCgppbmxp bmUKQ09SQkFfVmFsdWVGYWN0b3J5QmFzZTo6Q09SQkFfVmFsdWVGYWN0b3J5QmFzZSAoKQogIDog X3Rhb19yZWZlcmVuY2VfY291bnRfICgxKQp7Cn0KCmlubGluZSB2b2lkCkNPUkJBX1ZhbHVlRmFj dG9yeUJhc2U6Ol9hZGRfcmVmICh2b2lkKQp7CiAgQUNFX0d1YXJkPCBBQ0VfTVRfU1lOQ0g6Ok1V VEVYID4gZ3VhcmQgKHRoaXMtPl90YW9fcmVmZXJlbmNlX2NvdW50X2xvY2tfKTsgaWYgKGd1YXJk LmxvY2tlZCAoKSA9PSAwKSByZXR1cm47OwogICsrX3Rhb19yZWZlcmVuY2VfY291bnRfOwp9Cgpp bmxpbmUgdm9pZApDT1JCQV9WYWx1ZUZhY3RvcnlCYXNlOjpfcmVtb3ZlX3JlZiAodm9pZCkKewog IHsKICAgIEFDRV9HdWFyZDwgQUNFX01UX1NZTkNIOjpNVVRFWCA+IGd1YXJkICh0aGlzLT5fdGFv X3JlZmVyZW5jZV9jb3VudF9sb2NrXyk7IGlmIChndWFyZC5sb2NrZWQgKCkgPT0gMCkgcmV0dXJu OzsKICAgIC0tIHRoaXMtPl90YW9fcmVmZXJlbmNlX2NvdW50XzsKICAgIGlmICh0aGlzLT5fdGFv X3JlZmVyZW5jZV9jb3VudF8gIT0gMCkKICAgICAgcmV0dXJuOwogIH0KICBkZWxldGUgdGhpczsK fQojIDkzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L1ZhbHVlRmFjdG9yeS5oIiAyCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDk3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlRmFjdG9yeS5oIiAyCiMgNTUgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5 Qy5oIiAxCiMgNTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vY29yYmEuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vU2VydmljZXMuaCIgMQojIDU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaCIgMQojIDI1ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMu aCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJl LmgiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9Eb21haW5DLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjggIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5oIiAyCgoKCgoKCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgi IDEKIyAzNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9Eb21haW5DLmgiIDIKIyA2MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9Eb21haW5DLmgiCiAgY2xhc3MgQ09SQkFfRG9tYWluTWFuYWdlcjsKICB0 eXBlZGVmIENPUkJBX0RvbWFpbk1hbmFnZXIgKkNPUkJBX0RvbWFpbk1hbmFnZXJfcHRyOwoKCgoK CgoKICBjbGFzcyBDT1JCQV9Eb21haW5NYW5hZ2VyX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIK ICB7CiAgcHVibGljOgogICAgQ09SQkFfRG9tYWluTWFuYWdlcl92YXIgKHZvaWQpOwogICAgQ09S QkFfRG9tYWluTWFuYWdlcl92YXIgKENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyIHApIDogcHRyXyAo cCkge30KICAgIENPUkJBX0RvbWFpbk1hbmFnZXJfdmFyIChjb25zdCBDT1JCQV9Eb21haW5NYW5h Z2VyX3ZhciAmKTsKICAgIH5DT1JCQV9Eb21haW5NYW5hZ2VyX3ZhciAodm9pZCk7CgogICAgQ09S QkFfRG9tYWluTWFuYWdlcl92YXIgJm9wZXJhdG9yPSAoQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIp OwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfRG9t YWluTWFuYWdlcl92YXIgJik7CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0ciBvcGVyYXRvci0+ ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0 ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0ciAmKCk7Cgog ICAgQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgQ09SQkFfRG9t YWluTWFuYWdlcl9wdHIgJmlub3V0ICh2b2lkKTsKICAgIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRy ICZvdXQgKHZvaWQpOwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIgX3JldG4gKHZvaWQpOwog ICAgQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRp YyBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0ciBkdXBsaWNhdGUgKENPUkJBX0RvbWFpbk1hbmFnZXJf cHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyKTsK ICAgIHN0YXRpYyBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGlj IENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6 RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAq KTsKCiAgcHJpdmF0ZToKICAgIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyIHB0cl87CgogICAgQ09S QkFfRG9tYWluTWFuYWdlcl92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIENPUkJB X0RvbWFpbk1hbmFnZXJfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsK ICB9OwojIDExNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9Eb21haW5DLmgiCiAgY2xhc3MgQ09SQkFfRG9tYWluTWFuYWdlcl9vdXQKICB7CiAgcHVi bGljOgogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9vdXQgKENPUkJBX0RvbWFpbk1hbmFnZXJfcHRy ICYpOwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9vdXQgKENPUkJBX0RvbWFpbk1hbmFnZXJfdmFy ICYpOwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9vdXQgKGNvbnN0IENPUkJBX0RvbWFpbk1hbmFn ZXJfb3V0ICYpOwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg Q09SQkFfRG9tYWluTWFuYWdlcl9vdXQgJik7CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyX291dCAm b3BlcmF0b3I9IChjb25zdCBDT1JCQV9Eb21haW5NYW5hZ2VyX3ZhciAmKTsKICAgIENPUkJBX0Rv bWFpbk1hbmFnZXJfb3V0ICZvcGVyYXRvcj0gKENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyKTsKICAg IG9wZXJhdG9yIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyICYoKTsKICAgIENPUkJBX0RvbWFpbk1h bmFnZXJfcHRyICZwdHIgKHZvaWQpOwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIgb3BlcmF0 b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0ciAmcHRy XzsKICB9OwojIDE0MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9Eb21haW5DLmgiCiAgY2xhc3MgX1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1Byb3h5 X0ltcGw7CiAgY2xhc3MgX1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1JlbW90ZV9Qcm94eV9JbXBs OwogIGNsYXNzIF9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9Qcm94eV9Ccm9rZXI7CiAgY2xhc3Mg X1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1JlbW90ZV9Qcm94eV9Ccm9rZXI7CgogIGNsYXNzIENP UkJBX0RvbWFpbk1hbmFnZXIgOiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6T2JqZWN0CiAgewogIHB1 YmxpYzoKCiAgICB0eXBlZGVmIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyIF9wdHJfdHlwZTsKICAg IHR5cGVkZWYgQ09SQkFfRG9tYWluTWFuYWdlcl92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGlj IENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyIF9kdXBsaWNhdGUgKENPUkJBX0RvbWFpbk1hbmFnZXJf cHRyIG9iaik7CiAgICBzdGF0aWMgQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIgX25hcnJvdyAoCiAg ICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9l bnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRy IF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K ICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMg Q09SQkFfRG9tYWluTWFuYWdlcl9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVy biAoQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIpMDsKICAgICAgfQoKICAgIHN0YXRpYyB2b2lkIF90 YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICB2aXJ0dWFsIENPUkJBOjpQb2xpY3lfcHRy IGdldF9kb21haW5fcG9saWN5ICgKICAgICAgICBDT1JCQTo6UG9saWN5VHlwZSBwb2xpY3lfdHlw ZSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAg ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgQ09SQkE6 OkJvb2xlYW4gX2lzX2EgKAogICAgICAgIGNvbnN0IENPUkJBOjpDaGFyICp0eXBlX2lkLAogICAg ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9 CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgdmlydHVh bCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0 dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7Cgog IHByaXZhdGU6CiAgICBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJveHlfQnJva2VyICp0aGVf VEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJveHlfQnJva2VyXzsKCiAgcHJvdGVjdGVkOgogICAg Q09SQkFfRG9tYWluTWFuYWdlciAoaW50IGNvbGxvY2F0ZWQgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6 CgoKICAgICAgdmlydHVhbCB2b2lkIENPUkJBX0RvbWFpbk1hbmFnZXJfc2V0dXBfY29sbG9jYXRp b24gKGludCBjb2xsb2NhdGVkKTsKCiAgICAgIENPUkJBX0RvbWFpbk1hbmFnZXIgKAogICAgICAg IFRBT19TdHViICpvYmpyZWYsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gX3Rhb19jb2xsb2NhdGVk ID0gMCwKICAgICAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZhbnQgPSAwCiAgICAg ICAgKTsKCiAgICAgIGZyaWVuZCBjbGFzcyBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUmVtb3Rl X1Byb3h5X0ltcGw7CiAgICAgIGZyaWVuZCBjbGFzcyBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJf VGhydVBPQV9Qcm94eV9JbXBsOwogICAgICBmcmllbmQgY2xhc3MgX1RBT19DT1JCQV9Eb21haW5N YW5hZ2VyX0RpcmVjdF9Qcm94eV9JbXBsOwoKICAgIHZpcnR1YWwgfkNPUkJBX0RvbWFpbk1hbmFn ZXIgKHZvaWQpOwogIHByaXZhdGU6CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyIChjb25zdCBDT1JC QV9Eb21haW5NYW5hZ2VyICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0RvbWFp bk1hbmFnZXIgJik7CiAgfTsKIyAyMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5oIgogIGNsYXNzIF9UQU9fQ09SQkFfRG9tYWluTWFu YWdlcl9Qcm94eV9JbXBsIDogcHVibGljIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9JbXBsCiAg ewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9Qcm94eV9J bXBsICh2b2lkKSB7IH0KCiAgICAgICAgdmlydHVhbCBDT1JCQTo6UG9saWN5X3B0ciBnZXRfZG9t YWluX3BvbGljeSAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgX2NvbGxvY2F0ZWRfdGFvX3Rh cmdldF8sCiAgICAgICAgQ09SQkE6OlBvbGljeVR5cGUgcG9saWN5X3R5cGUsCiAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkK ICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgpwcm90ZWN0ZWQ6 CiAgICBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJveHlfSW1wbCAodm9pZCk7CgogIH07CiMg MjU0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Rv bWFpbkMuaCIKY2xhc3MgX1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1JlbW90ZV9Qcm94eV9JbXBs IDoKICBwdWJsaWMgdmlydHVhbCBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJveHlfSW1wbCwK ICBwdWJsaWMgdmlydHVhbCBUQU9fUmVtb3RlX09iamVjdF9Qcm94eV9JbXBsCnsKcHVibGljOgog IF9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9SZW1vdGVfUHJveHlfSW1wbCAodm9pZCk7CgogIHZp cnR1YWwgfl9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9SZW1vdGVfUHJveHlfSW1wbCAodm9pZCkg eyB9CgogIHZpcnR1YWwgQ09SQkE6OlBvbGljeV9wdHIgZ2V0X2RvbWFpbl9wb2xpY3kgKAogICAg ICBDT1JCQTo6T2JqZWN0X3B0ciBfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgQ09SQkE6 OlBvbGljeVR5cGUgcG9saWN5X3R5cGUsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgKQogICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVt RXhjZXB0aW9uICk7CgoKCn07CiMgMjkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaCIKY2xhc3MgX1RBT19DT1JCQV9Eb21haW5NYW5h Z2VyX1Byb3h5X0Jyb2tlcgp7CnB1YmxpYzoKICB2aXJ0dWFsIH5fVEFPX0NPUkJBX0RvbWFpbk1h bmFnZXJfUHJveHlfQnJva2VyICh2b2lkKTsKICB2aXJ0dWFsIF9UQU9fQ09SQkFfRG9tYWluTWFu YWdlcl9Qcm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgQ09SQkFfRG9tYWluTWFuYWdlciAq b2JqZWN0LAogICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICkgPSAwOwoKcHJvdGVjdGVkOgog IF9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKfTsKIyAzMTMg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWlu Qy5oIgpjbGFzcyBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciA6 IHB1YmxpYyB2aXJ0dWFsIF9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9Qcm94eV9Ccm9rZXIKewpw dWJsaWM6CiAgX1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZv aWQpOwoKICB2aXJ0dWFsIH5fVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUmVtb3RlX1Byb3h5X0Jy b2tlciAodm9pZCk7CgogIHZpcnR1YWwgX1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1Byb3h5X0lt cGwgJnNlbGVjdF9wcm94eSAoCiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyICpvYmplY3QsCiAgICBD T1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICk7Cgpw cml2YXRlOgogIF9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9SZW1vdGVfUHJveHlfSW1wbCByZW1v dGVfcHJveHlfaW1wbF87CgoKCgpwdWJsaWM6CiAgc3RhdGljIF9UQU9fQ09SQkFfRG9tYWluTWFu YWdlcl9SZW1vdGVfUHJveHlfQnJva2VyICp0aGVfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUmVt b3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7Cn07CiMgMzQzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaCIKZXh0ZXJuIENPUkJBOjpUeXBl Q29kZV9wdHIgX3RjX0NPUkJBX0RvbWFpbk1hbmFnZXI7CgoKCgoKY2xhc3MgQ09SQkFfQ29uc3Ry dWN0aW9uUG9saWN5Owp0eXBlZGVmIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeSAqQ09SQkFfQ29u c3RydWN0aW9uUG9saWN5X3B0cjsKCgoKCgoKCmNsYXNzIENPUkJBX0NvbnN0cnVjdGlvblBvbGlj eV92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCnsKcHVibGljOgogIENPUkJBX0NvbnN0cnVjdGlv blBvbGljeV92YXIgKHZvaWQpOwogIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV92YXIgKENPUkJB X0NvbnN0cnVjdGlvblBvbGljeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogIENPUkJBX0NvbnN0cnVj dGlvblBvbGljeV92YXIgKGNvbnN0IENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV92YXIgJik7CiAg fkNPUkJBX0NvbnN0cnVjdGlvblBvbGljeV92YXIgKHZvaWQpOwoKICBDT1JCQV9Db25zdHJ1Y3Rp b25Qb2xpY3lfdmFyICZvcGVyYXRvcj0gKENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIpOwog IENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfQ29u c3RydWN0aW9uUG9saWN5X3ZhciAmKTsKICBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyIG9w ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9Db25zdHJ1Y3Rp b25Qb2xpY3lfcHRyICYoKSBjb25zdDsKICBvcGVyYXRvciBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xp Y3lfcHRyICYoKTsKCiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3B0ciBpbiAodm9pZCkgY29u c3Q7CiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3B0ciAmaW5vdXQgKHZvaWQpOwogIENPUkJB X0NvbnN0cnVjdGlvblBvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgQ09SQkFfQ29uc3RydWN0aW9u UG9saWN5X3B0ciBfcmV0biAodm9pZCk7CiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3B0ciBw dHIgKHZvaWQpIGNvbnN0OwoKCgogIHN0YXRpYyBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRy IGR1cGxpY2F0ZSAoQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3B0cik7CiAgc3RhdGljIHZvaWQg cmVsZWFzZSAoQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3B0cik7CiAgc3RhdGljIENPUkJBX0Nv bnN0cnVjdGlvblBvbGljeV9wdHIgbmlsICh2b2lkKTsKICBzdGF0aWMgQ09SQkFfQ29uc3RydWN0 aW9uUG9saWN5X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50 ICYpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKcHJpdmF0ZToK ICBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyIHB0cl87CgogIENPUkJBX0NvbnN0cnVjdGlv blBvbGljeV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICBDT1JCQV9Db25zdHJ1Y3Rp b25Qb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKfTsKIyA0 MDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9t YWluQy5oIgpjbGFzcyBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfb3V0CnsKcHVibGljOgogIENP UkJBX0NvbnN0cnVjdGlvblBvbGljeV9vdXQgKENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIg Jik7CiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X291dCAoQ09SQkFfQ29uc3RydWN0aW9uUG9s aWN5X3ZhciAmKTsKICBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfb3V0IChjb25zdCBDT1JCQV9D b25zdHJ1Y3Rpb25Qb2xpY3lfb3V0ICYpOwogIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9vdXQg Jm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X291dCAmKTsKICBDT1JC QV9Db25zdHJ1Y3Rpb25Qb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0NvbnN0cnVj dGlvblBvbGljeV92YXIgJik7CiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X291dCAmb3BlcmF0 b3I9IChDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyKTsKICBvcGVyYXRvciBDT1JCQV9Db25z dHJ1Y3Rpb25Qb2xpY3lfcHRyICYoKTsKICBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyICZw dHIgKHZvaWQpOwogIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9p ZCk7Cgpwcml2YXRlOgogIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIgJnB0cl87Cn07CiMg NDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Rv bWFpbkMuaCIKY2xhc3MgX1RBT19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUHJveHlfSW1wbDsK Y2xhc3MgX1RBT19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUmVtb3RlX1Byb3h5X0ltcGw7CmNs YXNzIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0Jyb2tlcjsKY2xhc3MgX1RB T19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUmVtb3RlX1Byb3h5X0Jyb2tlcjsKCmNsYXNzIENP UkJBX0NvbnN0cnVjdGlvblBvbGljeTogcHVibGljIHZpcnR1YWwgQ09SQkFfUG9saWN5CnsKcHVi bGljOgoKICB0eXBlZGVmIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIgX3B0cl90eXBlOwog IHR5cGVkZWYgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3ZhciBfdmFyX3R5cGU7CgoKCiAgc3Rh dGljIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIgX2R1cGxpY2F0ZSAoQ09SQkFfQ29uc3Ry dWN0aW9uUG9saWN5X3B0ciBvYmopOwogIHN0YXRpYyBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lf cHRyIF9uYXJyb3cgKAogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFP X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7CiAgc3RhdGljIENPUkJBX0NvbnN0cnVjdGlv blBvbGljeV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBv YmosCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7CiAgc3RhdGlj IENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIgX25pbCAodm9pZCkKICAgIHsKICAgICAgcmV0 dXJuIChDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyKTA7CiAgICB9CgogIHN0YXRpYyB2b2lk IF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgdmlydHVhbCB2b2lkIG1ha2VfZG9tYWlu X21hbmFnZXIgKAogICAgICBDT1JCQV9JbnRlcmZhY2VEZWZfcHRyIG9iamVjdF90eXBlLAogICAg ICBDT1JCQTo6Qm9vbGVhbiBjb25zdHJfcG9saWN5LAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsK CgoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgY29uc3QgQ09SQkE6OkNo YXIgKnR5cGVfaWQsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7 CiAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsK CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNv bnN0OwoKcHJpdmF0ZToKICBfVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9Qcm94eV9Ccm9r ZXIgKnRoZV9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0Jyb2tlcl87Cgpwcm90 ZWN0ZWQ6CiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5IChpbnQgY29sbG9jYXRlZCA9IDApOwoK ICBwcm90ZWN0ZWQ6CgoKICAgIHZpcnR1YWwgdm9pZCBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lf c2V0dXBfY29sbG9jYXRpb24gKGludCBjb2xsb2NhdGVkKTsKCiAgICBDT1JCQV9Db25zdHJ1Y3Rp b25Qb2xpY3kgKAogICAgICBUQU9fU3R1YiAqb2JqcmVmLAogICAgICBDT1JCQTo6Qm9vbGVhbiBf dGFvX2NvbGxvY2F0ZWQgPSAwLAogICAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZh bnQgPSAwCiAgICAgICk7CgogICAgZnJpZW5kIGNsYXNzIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9u UG9saWN5X1JlbW90ZV9Qcm94eV9JbXBsOwogICAgZnJpZW5kIGNsYXNzIF9UQU9fQ09SQkFfQ29u c3RydWN0aW9uUG9saWN5X1RocnVQT0FfUHJveHlfSW1wbDsKICAgIGZyaWVuZCBjbGFzcyBfVEFP X0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9EaXJlY3RfUHJveHlfSW1wbDsKCiAgdmlydHVhbCB+ Q09SQkFfQ29uc3RydWN0aW9uUG9saWN5ICh2b2lkKTsKcHJpdmF0ZToKICBDT1JCQV9Db25zdHJ1 Y3Rpb25Qb2xpY3kgKGNvbnN0IENPUkJBX0NvbnN0cnVjdGlvblBvbGljeSAmKTsKICB2b2lkIG9w ZXJhdG9yPSAoY29uc3QgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5ICYpOwp9OwojIDUxNCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Eb21haW5DLmgi CmNsYXNzIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0ltcGwgOgogIHB1Ymxp YyB2aXJ0dWFsIENPUkJBX1RBT19Qb2xpY3lfUHJveHlfSW1wbAp7CnB1YmxpYzoKICB2aXJ0dWFs IH5fVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9Qcm94eV9JbXBsICh2b2lkKSB7IH0KCiAg ICB2aXJ0dWFsIHZvaWQgbWFrZV9kb21haW5fbWFuYWdlciAoCiAgICAgIENPUkJBOjpPYmplY3Rf cHRyIF9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICBDT1JCQV9JbnRlcmZhY2VEZWZfcHRy IG9iamVjdF90eXBlLAogICAgICBDT1JCQTo6Qm9vbGVhbiBjb25zdHJfcG9saWN5LAogICAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICkK ICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKcHJvdGVjdGVkOgog IF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0ltcGwgKHZvaWQpOwoKfTsKIyA1 NDMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9t YWluQy5oIgpjbGFzcyBfVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9SZW1vdGVfUHJveHlf SW1wbCA6CiAgcHVibGljIHZpcnR1YWwgX1RBT19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUHJv eHlfSW1wbCwKICBwdWJsaWMgdmlydHVhbCBUQU9fUmVtb3RlX09iamVjdF9Qcm94eV9JbXBsLAog IHB1YmxpYyB2aXJ0dWFsIENPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1Byb3h5X0ltcGwKCnsKcHVi bGljOgogIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1JlbW90ZV9Qcm94eV9JbXBsICh2 b2lkKTsKCiAgdmlydHVhbCB+X1RBT19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUmVtb3RlX1By b3h5X0ltcGwgKHZvaWQpIHsgfQoKICB2aXJ0dWFsIHZvaWQgbWFrZV9kb21haW5fbWFuYWdlciAo CiAgICAgIENPUkJBOjpPYmplY3RfcHRyIF9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICBD T1JCQV9JbnRlcmZhY2VEZWZfcHRyIG9iamVjdF90eXBlLAogICAgICBDT1JCQTo6Qm9vbGVhbiBj b25zdHJfcG9saWN5LAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUKICAgICkKICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiAp OwoKCgp9OwojIDU4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9Eb21haW5DLmgiCmNsYXNzIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1By b3h5X0Jyb2tlcgp7CnB1YmxpYzoKICB2aXJ0dWFsIH5fVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBv bGljeV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogIHZpcnR1YWwgX1RBT19DT1JCQV9Db25zdHJ1Y3Rp b25Qb2xpY3lfUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgIENPUkJBX0NvbnN0cnVjdGlv blBvbGljeSAqb2JqZWN0LAogICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICkgPSAwOwoKcHJv dGVjdGVkOgogIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0Jyb2tlciAodm9p ZCk7Cgp9OwojIDYwNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9Eb21haW5DLmgiCmNsYXNzIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Jl bW90ZV9Qcm94eV9Ccm9rZXIgOiBwdWJsaWMgdmlydHVhbCBfVEFPX0NPUkJBX0NvbnN0cnVjdGlv blBvbGljeV9Qcm94eV9Ccm9rZXIKewpwdWJsaWM6CiAgX1RBT19DT1JCQV9Db25zdHJ1Y3Rpb25Q b2xpY3lfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogIHZpcnR1YWwgfl9UQU9fQ09SQkFf Q29uc3RydWN0aW9uUG9saWN5X1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICB2aXJ0dWFs IF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAo CiAgICBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3kgKm9iamVjdCwKICAgIENPUkJBX0Vudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKTsKCnByaXZhdGU6CiAgX1RB T19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUmVtb3RlX1Byb3h5X0ltcGwgcmVtb3RlX3Byb3h5 X2ltcGxfOwoKCgoKcHVibGljOgogIHN0YXRpYyBfVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGlj eV9SZW1vdGVfUHJveHlfQnJva2VyICp0aGVfVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9S ZW1vdGVfUHJveHlfQnJva2VyICh2b2lkKTsKfTsKIyA2MzUgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5oIgpleHRlcm4gQ09SQkE6OlR5 cGVDb2RlX3B0ciBfdGNfQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5OwoKCgoKCgoKICBjbGFzcyBf VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgOiBw dWJsaWMgVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlCiAgewogIHB1YmxpYzoKCgogICAgX1RB T19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICh2b2lk KTsKICAgIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Eb21haW5NYW5hZ2Vy TGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0pOwogICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1Nl cXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAg ICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgQ09SQkFfRG9tYWluTWFuYWdlciogKnZhbHVl LAogICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMCk7CiAgICBfVEFPX1VuYm91bmRlZF9P YmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3QoY29uc3QgX1RBT19VbmJvdW5k ZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICZyaHMpOwogICAgdmly dHVhbCB+X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJM aXN0ICh2b2lkKTsKICAgIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Eb21h aW5NYW5hZ2VyTGlzdCAmb3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2Vx dWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgJnJocyk7CiAgICBUQU9fT2JqZWN0X01hbmFn ZXI8Q09SQkFfRG9tYWluTWFuYWdlcixDT1JCQV9Eb21haW5NYW5hZ2VyX3Zhcj4gb3BlcmF0b3Jb XSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdDsKICAgIHN0YXRpYyBDT1JCQV9Eb21haW5NYW5h Z2VyICoqYWxsb2NidWYgKENPUkJBOjpVTG9uZyBuZWxlbXMpOwogICAgc3RhdGljIHZvaWQgZnJl ZWJ1ZiAoQ09SQkFfRG9tYWluTWFuYWdlciAqKmJ1ZmZlcik7CgogICAgdmlydHVhbCB2b2lkIF9h bGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpOwogICAgdmlydHVhbCB2b2lkIF9k ZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyKiAqZ2V0X2J1 ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuID0gMCk7CiAgICBjb25zdCBDT1JCQV9Eb21haW5N YW5hZ2VyKiAqZ2V0X2J1ZmZlciAodm9pZCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgX3Nocmlu a19idWZmZXIgKENPUkJBOjpVTG9uZyBubCwgQ09SQkE6OlVMb25nIG9sKTsKICAgIHZpcnR1YWwg dm9pZCBfZG93bmNhc3QgKAogICAgICAgIHZvaWQqIHRhcmdldCwKICAgICAgICBDT1JCQV9PYmpl Y3QgKnNyYywKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAp OwogICAgdmlydHVhbCBDT1JCQV9PYmplY3QqIF91cGNhc3QgKHZvaWQgKnNyYykgY29uc3Q7Cgog IH07CiMgNjg0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL0RvbWFpbkMuaCIKY2xhc3MgQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q7CmNsYXNzIENPUkJB X0RvbWFpbk1hbmFnZXJMaXN0X3ZhcjsKCgoKCgpjbGFzcyBDT1JCQV9Eb21haW5NYW5hZ2VyTGlz dCA6IHB1YmxpYwoKICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWlu TWFuYWdlckxpc3QKCgoKewpwdWJsaWM6CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKHZvaWQp OwogIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0IChDT1JCQTo6VUxvbmcgbWF4KTsKICBDT1JCQV9E b21haW5NYW5hZ2VyTGlzdCAoCiAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgQ09SQkE6OlVMb25n IGxlbmd0aCwKICAgIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyICpidWZmZXIsCiAgICBDT1JCQTo6 Qm9vbGVhbiByZWxlYXNlID0gMAogICk7CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKGNvbnN0 IENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICYpOwogIH5DT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAo dm9pZCk7CiAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgdHlw ZWRlZiBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXIgX3Zhcl90eXBlOwoKCn07CiMgNzI3ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMu aCIKY2xhc3MgQ09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyCnsKcHVibGljOgogIENPUkJBX0Rv bWFpbk1hbmFnZXJMaXN0X3ZhciAodm9pZCk7CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFy IChDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqKTsKICBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92 YXIgKGNvbnN0IENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3ZhciAmKTsKICB+Q09SQkFfRG9tYWlu TWFuYWdlckxpc3RfdmFyICh2b2lkKTsKCiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyICZv cGVyYXRvcj0gKENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICopOwogIENPUkJBX0RvbWFpbk1hbmFn ZXJMaXN0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXIg Jik7CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKm9wZXJhdG9yLT4gKHZvaWQpOwogIGNvbnN0 IENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgb3Bl cmF0b3IgY29uc3QgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgJigpIGNvbnN0OwogIG9wZXJhdG9y IENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICYoKTsKICBvcGVyYXRvciBDT1JCQV9Eb21haW5NYW5h Z2VyTGlzdCAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKiYo KTsKCiAgVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBX0RvbWFpbk1hbmFnZXIsIENPUkJBX0RvbWFp bk1hbmFnZXJfdmFyPiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpOwoKCiAgY29uc3Qg Q09SQkFfRG9tYWluTWFuYWdlckxpc3QgJmluICh2b2lkKSBjb25zdDsKICBDT1JCQV9Eb21haW5N YW5hZ2VyTGlzdCAmaW5vdXQgKHZvaWQpOwogIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0IComb3V0 ICh2b2lkKTsKICBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqX3JldG4gKHZvaWQpOwogIENPUkJB X0RvbWFpbk1hbmFnZXJMaXN0ICpwdHIgKHZvaWQpIGNvbnN0OwoKcHJpdmF0ZToKICBDT1JCQV9E b21haW5NYW5hZ2VyTGlzdCAqcHRyXzsKfTsKIyA3NjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5oIgpjbGFzcyBDT1JCQV9Eb21haW5N YW5hZ2VyTGlzdF9vdXQKewpwdWJsaWM6CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0IChD T1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqJik7CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0 IChDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXIgJik7CiAgQ09SQkFfRG9tYWluTWFuYWdlckxp c3Rfb3V0IChjb25zdCBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9vdXQgJik7CiAgQ09SQkFfRG9t YWluTWFuYWdlckxpc3Rfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0RvbWFpbk1hbmFnZXJM aXN0X291dCAmKTsKICBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9vdXQgJm9wZXJhdG9yPSAoQ09S QkFfRG9tYWluTWFuYWdlckxpc3QgKik7CiAgb3BlcmF0b3IgQ09SQkFfRG9tYWluTWFuYWdlckxp c3QgKiYoKTsKICBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqJnB0ciAodm9pZCk7CiAgQ09SQkFf RG9tYWluTWFuYWdlckxpc3QgKm9wZXJhdG9yLT4gKHZvaWQpOwogIFRBT19PYmplY3RfTWFuYWdl cjxDT1JCQV9Eb21haW5NYW5hZ2VyLCBDT1JCQV9Eb21haW5NYW5hZ2VyX3Zhcj4gb3BlcmF0b3Jb XSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCnByaXZhdGU6CiAgQ09SQkFfRG9tYWluTWFuYWdlckxp c3QgKiZwdHJfOwoKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFfRG9tYWluTWFuYWdlckxp c3RfdmFyICYpOwp9OwoKCgoKZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0NPUkJBX0Rv bWFpbk1hbmFnZXJMaXN0OwoKCgoKCmV4dGVybgpfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJv eHlfQnJva2VyICoKKCpDT1JCQV9fVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJveHlfQnJva2Vy X0ZhY3RvcnlfZnVuY3Rpb25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAg KTsKCmV4dGVybgpfVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9Qcm94eV9Ccm9rZXIgKgoo KkNPUkJBX19UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0Jyb2tlcl9GYWN0b3J5 X2Z1bmN0aW9uX3BvaW50ZXIpICgKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iagogICk7CgoKICAg ICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX0RvbWFpbk1hbmFn ZXJfcHRyKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S QkE6OkFueSAmLCBDT1JCQV9Eb21haW5NYW5hZ2VyIComKTsKCiAgICAgICAgICAgdm9pZCBvcGVy YXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyKTsKICAg ICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBD T1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3kgKiYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0g KENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgJik7CiAgICAgICAg ICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9Eb21haW5NYW5hZ2VyTGlz dCopOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6 QW55ICYsIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0IComKTsKICAgICAgICAgICBDT1JCQTo6Qm9v bGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9Eb21haW5N YW5hZ2VyTGlzdCAqJik7CiMgODQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaSIgMQojIDI2ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaSIKaW5saW5lCkNP UkJBX0RvbWFpbk1hbmFnZXI6OkNPUkJBX0RvbWFpbk1hbmFnZXIgKAogICAgVEFPX1N0dWIgKm9i anJlZiwKICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCwKICAgIFRBT19BYnN0cmFj dF9TZXJ2YW50QmFzZSAqc2VydmFudAogICkKICA6IENPUkJBX09iamVjdCAob2JqcmVmLCBfdGFv X2NvbGxvY2F0ZWQsIHNlcnZhbnQpCnsKICB0aGlzLT5DT1JCQV9Eb21haW5NYW5hZ2VyX3NldHVw X2NvbGxvY2F0aW9uIChfdGFvX2NvbGxvY2F0ZWQpOwp9CiMgNDQgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5pIgppbmxpbmUKQ09SQkFf Q29uc3RydWN0aW9uUG9saWN5OjpDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3kgKAogICAgVEFPX1N0 dWIgKm9ianJlZiwKICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCwKICAgIFRBT19B YnN0cmFjdF9TZXJ2YW50QmFzZSAqc2VydmFudAogICkKICA6IENPUkJBX09iamVjdCAob2JqcmVm LCBfdGFvX2NvbGxvY2F0ZWQsIHNlcnZhbnQpCnsKICB0aGlzLT5DT1JCQV9Db25zdHJ1Y3Rpb25Q b2xpY3lfc2V0dXBfY29sbG9jYXRpb24gKF90YW9fY29sbG9jYXRlZCk7Cn0KIyA2NCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Eb21haW5DLmkiCiAg aW5saW5lIENPUkJBX0RvbWFpbk1hbmFnZXIgKioKICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2Vx dWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgbmVs ZW1zKQogIHsKICAgIENPUkJBX0RvbWFpbk1hbmFnZXIgKipidWYgPSAwOwoKICAgIGRvIHsgdHJ5 IHsgYnVmID0gbmV3IENPUkJBX0RvbWFpbk1hbmFnZXIqW25lbGVtc107IH0gY2F0Y2ggKHN0ZDo6 YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3 aGlsZSAoMCk7CgogICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBuZWxlbXM7IGkrKykK ICAgICAgewogICAgICAgIGJ1ZltpXSA9IENPUkJBX0RvbWFpbk1hbmFnZXI6Ol9uaWwgKCk7CiAg ICAgIH0KCiAgICByZXR1cm4gYnVmOwogIH0KCiAgaW5saW5lIHZvaWQKICBfVEFPX1VuYm91bmRl ZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6OmZyZWVidWYgKENPUkJB X0RvbWFpbk1hbmFnZXIgKipidWZmZXIpCiAgewogICAgaWYgKGJ1ZmZlciA9PSAwKQogICAgICBy ZXR1cm47CiAgICBkZWxldGVbXSBidWZmZXI7CiAgfQoKICBpbmxpbmUKICBfVEFPX1VuYm91bmRl ZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6Ol9UQU9fVW5ib3VuZGVk X09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAodm9pZCkKICB7CiAgfQoK ICBpbmxpbmUKICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFu YWdlckxpc3Q6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Eb21haW5NYW5h Z2VyTGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgICA6IFRBT19VbmJvdW5kZWRfQmFzZV9T ZXF1ZW5jZSAobWF4aW11bSwgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0Rv bWFpbk1hbmFnZXJMaXN0OjphbGxvY2J1ZiAobWF4aW11bSkpCiAgewogIH0KCiAgaW5saW5lCiAg X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0Ojpf VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKENP UkJBOjpVTG9uZyBtYXhpbXVtLAogICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgIENPUkJBX0Rv bWFpbk1hbmFnZXIqICp2YWx1ZSwKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9f VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgdmFsdWUsIHJlbGVhc2Up CiAgewogIH0KCiAgaW5saW5lCiAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJB X0RvbWFpbk1hbmFnZXJMaXN0OjpfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFf RG9tYWluTWFuYWdlckxpc3QoY29uc3QgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NP UkJBX0RvbWFpbk1hbmFnZXJMaXN0ICZyaHMpCiAgICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1 ZW5jZSAocmhzKQogIHsKICAgIGlmIChyaHMuYnVmZmVyXyAhPSAwKQogICAgewogICAgICBDT1JC QV9Eb21haW5NYW5hZ2VyICoqdG1wMSA9IF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9D T1JCQV9Eb21haW5NYW5hZ2VyTGlzdDo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1fKTsKICAgICAg Q09SQkFfRG9tYWluTWFuYWdlciAqKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JC QV9Eb21haW5NYW5hZ2VyICoqPiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9yIChDT1JCQTo6VUxv bmcgaSA9IDA7IGkgPCByaHMubGVuZ3RoXzsgKytpKQogICAgICAgIHsKICAgICAgICAgIHRtcDFb aV0gPSBDT1JCQV9Eb21haW5NYW5hZ2VyOjpfZHVwbGljYXRlICh0bXAyW2ldKTsKICAgICAgICB9 CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAg dGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxpbmUgX1RBT19VbmJvdW5kZWRfT2Jq ZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICYKICBfVEFPX1VuYm91bmRlZF9P YmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6Om9wZXJhdG9yPSAoY29uc3Qg X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICZy aHMpCiAgewogICAgaWYgKHRoaXMgPT0gJnJocykKICAgICAgcmV0dXJuICp0aGlzOwoKICAgIGlm ICh0aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAgQ09SQkFfRG9tYWluTWFuYWdlciAqKnRtcCA9 IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkFfRG9tYWluTWFuYWdlciAqKj4gKHRoaXMtPmJ1ZmZlcl8p OwoKICAgICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kp CiAgICAgIHsKICAgICAgICBDT1JCQTo6cmVsZWFzZSAodG1wW2ldKTsKICAgICAgICB0bXBbaV0g PSBDT1JCQV9Eb21haW5NYW5hZ2VyOjpfbmlsICgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLT5t YXhpbXVtXyA8IHJocy5tYXhpbXVtXykKICAgICAgewogICAgICAgIF9UQU9fVW5ib3VuZGVkX09i amVjdF9TZXF1ZW5jZV9DT1JCQV9Eb21haW5NYW5hZ2VyTGlzdDo6ZnJlZWJ1ZiAodG1wKTsKICAg ICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJB X0RvbWFpbk1hbmFnZXJMaXN0OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKICAgICAgfQogICAg fQogICAgZWxzZQogICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfT2JqZWN0X1Nl cXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsK CiAgICBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgICBD T1JCQV9Eb21haW5NYW5hZ2VyICoqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkFfRG9tYWlu TWFuYWdlciAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgQ09SQkFfRG9tYWluTWFuYWdlciAqKiBj b25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQV9Eb21haW5NYW5hZ2VyICoqPiAocmhz LmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87 ICsraSkKICAgICAgewogICAgICAgIHRtcDFbaV0gPSBDT1JCQV9Eb21haW5NYW5hZ2VyOjpfZHVw bGljYXRlICh0bXAyW2ldKTsKICAgICAgfQoKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGlu ZSBUQU9fT2JqZWN0X01hbmFnZXI8Q09SQkFfRG9tYWluTWFuYWdlcixDT1JCQV9Eb21haW5NYW5h Z2VyX3Zhcj4KICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFu YWdlckxpc3Q6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkgY29uc3QKCiAgewogICAg ZG8geyBpZighKGluZGV4IDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFD RV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjpp bnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaSIsIDE3MCwgLTEsIF9fYWNlX2Vycm9yLCBhY2Vf X18tPnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxi YWNrICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGlu ZSAlbCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaW5kZXggPCB0aGlzLT5tYXhp bXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIENPUkJBX0RvbWFpbk1hbmFnZXIgKiogY29u c3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQV9Eb21haW5NYW5hZ2VyICoqPiAodGhpcy0+ YnVmZmVyXyk7CiAgICByZXR1cm4gVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBX0RvbWFpbk1hbmFn ZXIsQ09SQkFfRG9tYWluTWFuYWdlcl92YXI+ICh0bXAgKyBpbmRleCwgdGhpcy0+cmVsZWFzZV8p OwogIH0KCiAgaW5saW5lIENPUkJBX0RvbWFpbk1hbmFnZXIqICoKICBfVEFPX1VuYm91bmRlZF9P YmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6OmdldF9idWZmZXIgKENPUkJB OjpCb29sZWFuIG9ycGhhbikKICB7CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyICoqcmVzdWx0ID0g MDsKICAgIGlmIChvcnBoYW4gPT0gMCkKICAgIHsKCiAgICAgIGlmICh0aGlzLT5idWZmZXJfID09 IDApCiAgICAgIHsKICAgICAgICByZXN1bHQgPSBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVu Y2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6OmFsbG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CiAg ICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgICB0aGlzLT5yZWxlYXNlXyA9IDE7 CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRf Y2FzdDxDT1JCQV9Eb21haW5NYW5hZ2VyKio+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgfQogICAg fQogICAgZWxzZQogICAgewogICAgICBpZiAodGhpcy0+cmVsZWFzZV8gIT0gMCkKICAgICAgewoK CiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQV9Eb21haW5NYW5hZ2VyKio+ ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICB0aGlzLT5tYXhpbXVtXyA9IDA7CiAgICAgICAgdGhp cy0+bGVuZ3RoXyA9IDA7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICAgICAgdGhpcy0+ cmVsZWFzZV8gPSAwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgaW5s aW5lIGNvbnN0IENPUkJBX0RvbWFpbk1hbmFnZXIqICoKICBfVEFPX1VuYm91bmRlZF9PYmplY3Rf U2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0 CiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ09SQkFfRG9tYWluTWFuYWdl ciAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIH0KIyAyMjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5pIgppbmxpbmUKQ09SQkFfRG9tYWlu TWFuYWdlckxpc3RfdmFyOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXIgKHZvaWQpCiAgOiBw dHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3Zhcjo6Q09SQkFfRG9t YWluTWFuYWdlckxpc3RfdmFyIChDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqcCkKICA6IHB0cl8g KHApCnt9CgppbmxpbmUKQ09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyOjpDT1JCQV9Eb21haW5N YW5hZ2VyTGlzdF92YXIgKGNvbnN0IDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyICZwKQp7 CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkNPUkJBX0Rv bWFpbk1hbmFnZXJMaXN0ICgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpf X2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQog ICAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXI6 On5DT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRy XzsKfQoKaW5saW5lIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3ZhciAmCkNPUkJBX0RvbWFpbk1h bmFnZXJMaXN0X3Zhcjo6b3BlcmF0b3I9IChDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqcCkKewog IGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoK aW5saW5lIDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyICYKQ09SQkFfRG9tYWluTWFuYWdl ckxpc3RfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFy ICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAg ICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8g PSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIENPUkJBX0RvbWFp bk1hbmFnZXJMaXN0ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgQ09SQkFfRG9tYWluTWFu YWdlckxpc3QgKCpwLnB0cl8pOwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICp0bXAgPSBkZWVw X2NvcHk7CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAg ICB0aGlzLT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0 IDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3QgKgpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXI6 Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5l IDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3QgKgpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXI6 Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJB X0RvbWFpbk1hbmFnZXJMaXN0X3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpDT1JCQV9Eb21haW5NYW5h Z2VyTGlzdCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJB X0RvbWFpbk1hbmFnZXJMaXN0X3Zhcjo6b3BlcmF0b3IgOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlz dCAmKCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX0RvbWFpbk1hbmFn ZXJMaXN0X3Zhcjo6b3BlcmF0b3IgOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAmKCkgY29uc3QK ewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpDT1JCQV9Eb21haW5NYW5hZ2VyTGlz dF92YXI6Om9wZXJhdG9yIDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3QgKiYoKQp7CiAgcmV0dXJu IHRoaXMtPnB0cl87Cn0KCmlubGluZSBUQU9fT2JqZWN0X01hbmFnZXI8Q09SQkFfRG9tYWluTWFu YWdlciwgQ09SQkFfRG9tYWluTWFuYWdlcl92YXI+CkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3Zh cjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8t Pm9wZXJhdG9yW10gKGluZGV4KTsKfQoKaW5saW5lIGNvbnN0IDo6Q09SQkFfRG9tYWluTWFuYWdl ckxpc3QgJgpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXI6OmluICh2b2lkKSBjb25zdAp7CiAg cmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAm CkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRo aXMtPnB0cl87Cn0KCgppbmxpbmUgOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqJgpDT1JCQV9E b21haW5NYW5hZ2VyTGlzdF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwog IHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9E b21haW5NYW5hZ2VyTGlzdCAqCkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3Zhcjo6X3JldG4gKHZv aWQpCnsKICA6OkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRo aXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSA6OkNPUkJBX0RvbWFpbk1hbmFn ZXJMaXN0ICoKQ09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsK ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpDT1JCQV9Eb21haW5NYW5hZ2VyTGlz dF9vdXQ6OkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X291dCAoQ09SQkFfRG9tYWluTWFuYWdlckxp c3QgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFf RG9tYWluTWFuYWdlckxpc3Rfb3V0OjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9vdXQgKENPUkJB X0RvbWFpbk1hbmFnZXJMaXN0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRl IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpDT1JCQV9Eb21haW5NYW5h Z2VyTGlzdF9vdXQ6OkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X291dCAoY29uc3QgOjpDT1JCQV9E b21haW5NYW5hZ2VyTGlzdF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PENPUkJBX0RvbWFp bk1hbmFnZXJMaXN0X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIDo6Q09SQkFfRG9tYWluTWFu YWdlckxpc3Rfb3V0ICYKQ09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0OjpvcGVyYXRvcj0gKGNv bnN0IDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNv bnN0X2Nhc3Q8Q09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJu ICp0aGlzOwp9CgppbmxpbmUgOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9vdXQgJgpDT1JCQV9E b21haW5NYW5hZ2VyTGlzdF9vdXQ6Om9wZXJhdG9yPSAoQ09SQkFfRG9tYWluTWFuYWdlckxpc3Qg KnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9E b21haW5NYW5hZ2VyTGlzdF9vdXQ6Om9wZXJhdG9yIDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3Qg KiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkNPUkJBX0RvbWFpbk1hbmFn ZXJMaXN0IComCkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X291dDo6cHRyICh2b2lkKQp7CiAgcmV0 dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICoKQ09S QkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRo aXMtPnB0cl87Cn0KCmlubGluZSBUQU9fT2JqZWN0X01hbmFnZXI8Q09SQkFfRG9tYWluTWFuYWdl ciwgQ09SQkFfRG9tYWluTWFuYWdlcl92YXI+CkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X291dDo6 b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9w ZXJhdG9yW10gKGluZGV4KTsKfQoKCgoKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv cjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IENPUkJBX0RvbWFpbk1hbmFnZXJf cHRyCiAgKTsKCiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9f SW5wdXRDRFIgJiwKICAgIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyICYKICApOwoKICAgICAgICAg ICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNv bnN0IENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIKICApOwoKICAgICAgICAgICBDT1JCQTo6 Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgQ09SQkFfQ29uc3Ry dWN0aW9uUG9saWN5X3B0ciAmCiAgKTsKCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgK ICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICYK ICApOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAg Q09SQkFfRG9tYWluTWFuYWdlckxpc3QgJgogICk7CiMgODQzICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaCIgMgojIDg1MyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Eb21haW5DLmgiCiMg MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIg MQojIDg1NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9Eb21haW5DLmgiIDIKIyA1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Xcm9uZ1RyYW5zYWN0aW9uQy5oIiAxCiMgMjIgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vV3JvbmdUcmFuc2Fj dGlvbkMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvcHJlLmgiIDEKIyAyMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9Xcm9uZ1RyYW5zYWN0aW9uQy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vb3JiY29uZi5oIiAxCiMgMjUgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vV3JvbmdUcmFuc2Fj dGlvbkMuaCIgMgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDI5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1dyb25nVHJhbnNhY3Rpb25DLmgiIDIKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5o IiAxCiMgMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vV3JvbmdUcmFuc2FjdGlvbkMuaCIgMgojIDU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1dyb25nVHJhbnNhY3Rpb25DLmgiCmNsYXNzIENPUkJB X1dyb25nVHJhbnNhY3Rpb24gOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24KewpwdWJsaWM6 CgogIENPUkJBX1dyb25nVHJhbnNhY3Rpb24gKHZvaWQpOwogIENPUkJBX1dyb25nVHJhbnNhY3Rp b24gKGNvbnN0IENPUkJBX1dyb25nVHJhbnNhY3Rpb24gJik7CiAgfkNPUkJBX1dyb25nVHJhbnNh Y3Rpb24gKHZvaWQpOwogIENPUkJBX1dyb25nVHJhbnNhY3Rpb24gJm9wZXJhdG9yPSAoY29uc3Qg Q09SQkFfV3JvbmdUcmFuc2FjdGlvbiAmKTsKCgogIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQp OwoKICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKFRBT19PdXRwdXRDRFIgJmNkciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmKSBjb25zdDsKICB2aXJ0 dWFsIHZvaWQgX3Rhb19kZWNvZGUgKFRBT19JbnB1dENEUiAmY2RyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYpOwoKICBzdGF0aWMgQ09SQkFfV3JvbmdU cmFuc2FjdGlvbiAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogIHN0YXRpYyBD T1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwoKfTsKCiAgICAgICAgICAgQ09SQkE6OkJv b2xlYW4Kb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmLCBjb25zdCBDT1JCQV9Xcm9uZ1RyYW5z YWN0aW9uICYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yPj4gKFRBT19JbnB1 dENEUiAmLCBDT1JCQV9Xcm9uZ1RyYW5zYWN0aW9uICYpOwoKCgoKCgoKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgOTMgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vV3JvbmdUcmFuc2Fj dGlvbkMuaCIgMgojIDU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL2NvcmJhLmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL0NEUi5oIiAxCiMgNjMgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMgoKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDEKIyA2 NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3Ji YS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9NYW5hZ2VkX1R5cGVzLmgiIDEKIyA2NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RfS2V5Qy5oIiAxCiMgMTUgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0X0tl eUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv cHJlLmgiIDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9PYmplY3RfS2V5Qy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9LZXlDLmgiIDIKCgoK CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v U2VxdWVuY2UuaCIgMQojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL09iamVjdF9LZXlDLmgiIDIKCmNsYXNzIFRBT19PYmplY3RLZXkgOiBwdWJs aWMgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+CnsKIyAzNSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RfS2V5Qy5oIgpw dWJsaWM6CgogICAgdHlwZWRlZiBUQU9fT2JqZWN0S2V5X3ZhciBfdmFyX3R5cGU7CgoKICBUQU9f T2JqZWN0S2V5ICh2b2lkKTsKICBUQU9fT2JqZWN0S2V5IChDT1JCQTo6VUxvbmcgbWF4KTsKICBU QU9fT2JqZWN0S2V5IChDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICBDT1JCQTo6 VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICBDT1JCQTo6T2N0ZXQgKmRhdGEsCiAgICAg ICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKICBUQU9fT2JqZWN0S2V5 IChjb25zdCBUQU9fT2JqZWN0S2V5ICYpOwogIFRBT19PYmplY3RLZXkmIG9wZXJhdG9yPSAoY29u c3QgVEFPX09iamVjdEtleSAmKTsKCiAgc3RhdGljIHZvaWQgZW5jb2RlX3NlcXVlbmNlX3RvX3N0 cmluZyAoY2hhciAqICZzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+ICZzZXEpOwogIHN0 YXRpYyB2b2lkIGRlY29kZV9zdHJpbmdfdG9fc2VxdWVuY2UgKFRBT19VbmJvdW5kZWRfU2VxdWVu Y2U8Q09SQkE6Ok9jdGV0PiAmc2VxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKnN0cik7Cn07CgpjbGFzcyBUQU9fT2JqZWN0S2V5X3Zhcgp7CnB1 YmxpYzoKICBUQU9fT2JqZWN0S2V5X3ZhciAodm9pZCk7CiAgVEFPX09iamVjdEtleV92YXIgKFRB T19PYmplY3RLZXkgKik7CiAgVEFPX09iamVjdEtleV92YXIgKGNvbnN0IFRBT19PYmplY3RLZXlf dmFyICYpOwogIH5UQU9fT2JqZWN0S2V5X3ZhciAodm9pZCk7CgogIFRBT19PYmplY3RLZXlfdmFy ICZvcGVyYXRvcj0gKFRBT19PYmplY3RLZXkgKik7CiAgVEFPX09iamVjdEtleV92YXIgJm9wZXJh dG9yPSAoY29uc3QgVEFPX09iamVjdEtleV92YXIgJik7CiAgVEFPX09iamVjdEtleSAqb3BlcmF0 b3ItPiAodm9pZCk7CiAgY29uc3QgVEFPX09iamVjdEtleSAqb3BlcmF0b3ItPiAodm9pZCkgY29u c3Q7CgogIG9wZXJhdG9yIGNvbnN0IFRBT19PYmplY3RLZXkgJigpIGNvbnN0OwogIG9wZXJhdG9y IFRBT19PYmplY3RLZXkgJigpOwogIG9wZXJhdG9yIFRBT19PYmplY3RLZXkgJigpIGNvbnN0Owog IENPUkJBOjpPY3RldCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCiAgY29uc3Qg VEFPX09iamVjdEtleSAmaW4gKHZvaWQpIGNvbnN0OwogIFRBT19PYmplY3RLZXkgJmlub3V0ICh2 b2lkKTsKICBUQU9fT2JqZWN0S2V5IComb3V0ICh2b2lkKTsKICBUQU9fT2JqZWN0S2V5ICpfcmV0 biAodm9pZCk7CiAgVEFPX09iamVjdEtleSAqcHRyICh2b2lkKSBjb25zdDsKCnByaXZhdGU6CiAg VEFPX09iamVjdEtleSAqcHRyXzsKfTsKCmNsYXNzIFRBT19PYmplY3RLZXlfb3V0CnsKcHVibGlj OgogIFRBT19PYmplY3RLZXlfb3V0IChUQU9fT2JqZWN0S2V5IComKTsKICBUQU9fT2JqZWN0S2V5 X291dCAoVEFPX09iamVjdEtleV92YXIgJik7CiAgVEFPX09iamVjdEtleV9vdXQgKFRBT19PYmpl Y3RLZXlfb3V0ICYpOwogIFRBT19PYmplY3RLZXlfb3V0ICZvcGVyYXRvcj0gKFRBT19PYmplY3RL ZXlfb3V0ICYpOwogIFRBT19PYmplY3RLZXlfb3V0ICZvcGVyYXRvcj0gKFRBT19PYmplY3RLZXkg Kik7CiAgb3BlcmF0b3IgVEFPX09iamVjdEtleSAqJigpOwogIFRBT19PYmplY3RLZXkgKiZwdHIg KHZvaWQpOwogIFRBT19PYmplY3RLZXkgKm9wZXJhdG9yLT4gKHZvaWQpOwogIENPUkJBOjpPY3Rl dCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCnByaXZhdGU6CiAgVEFPX09iamVj dEtleSAqJnB0cl87CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBUQU9fT2JqZWN0S2V5X3ZhciAm KTsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vT2JqZWN0X0tleUMuaSIgMQojIDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9LZXlDLmkiCmlubGluZQpUQU9fT2JqZWN0S2V5 OjpUQU9fT2JqZWN0S2V5ICh2b2lkKQp7Cn0KCmlubGluZQpUQU9fT2JqZWN0S2V5OjpUQU9fT2Jq ZWN0S2V5IChDT1JCQTo6VUxvbmcgbWF4KQogIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JC QTo6T2N0ZXQ+IChtYXgpCnsKfQoKaW5saW5lClRBT19PYmplY3RLZXk6OlRBT19PYmplY3RLZXkg KENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6 OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6T2N0 ZXQgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4g cmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PiAobWF4LCBs ZW5ndGgsIGRhdGEsIHJlbGVhc2UpCnsKfQoKaW5saW5lClRBT19PYmplY3RLZXk6OlRBT19PYmpl Y3RLZXkgKGNvbnN0IFRBT19PYmplY3RLZXkgJnJocykKICA6IFRBT19VbmJvdW5kZWRfU2VxdWVu Y2U8Q09SQkE6Ok9jdGV0PiAocmhzKQp7Cn0KCmlubGluZSBUQU9fT2JqZWN0S2V5JgpUQU9fT2Jq ZWN0S2V5OjpvcGVyYXRvcj0gKGNvbnN0IFRBT19PYmplY3RLZXkgJnJocykKewogIGlmICh0aGlz ID09ICZyaHMpCiAgICByZXR1cm4gKnRoaXM7CgogIFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09S QkE6Ok9jdGV0Pjo6b3BlcmF0b3I9IChyaHMpOwogIHJldHVybiAqdGhpczsKfQoKCgoKCmlubGlu ZQpUQU9fT2JqZWN0S2V5X3Zhcjo6VEFPX09iamVjdEtleV92YXIgKHZvaWQpCiAgICAgICAgOiBw dHJfICgwKQp7fQoKaW5saW5lClRBT19PYmplY3RLZXlfdmFyOjpUQU9fT2JqZWN0S2V5X3ZhciAo VEFPX09iamVjdEtleSAqcCkKICAgICAgICA6IHB0cl8gKHApCnt9CgppbmxpbmUKVEFPX09iamVj dEtleV92YXI6OlRBT19PYmplY3RLZXlfdmFyIChjb25zdCBUQU9fT2JqZWN0S2V5X3ZhciAmcCkK ewogIGlmIChwLnB0cl8pCiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgVEFPX09iamVj dEtleSgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CgogIGVsc2UKICAgIHRoaXMtPnB0 cl8gPSAwOwp9CgppbmxpbmUKVEFPX09iamVjdEtleV92YXI6On5UQU9fT2JqZWN0S2V5X3ZhciAo dm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFPX09iamVjdEtleV92YXIg JgpUQU9fT2JqZWN0S2V5X3Zhcjo6b3BlcmF0b3I9IChUQU9fT2JqZWN0S2V5ICpwKQp7CiAgZGVs ZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9Cgppbmxp bmUgVEFPX09iamVjdEtleV92YXIgJgpUQU9fT2JqZWN0S2V5X3Zhcjo6b3BlcmF0b3I9IChjb25z dCBUQU9fT2JqZWN0S2V5X3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBp ZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAg ICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAg ICAgICAgICBUQU9fT2JqZWN0S2V5ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgVEFPX09i amVjdEtleSAoKnAucHRyXyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgVEFPX09iamVjdEtleSAqdG1wID0gZGVlcF9jb3B5OwogICAg ICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRy XyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCBUQU9fT2JqZWN0 S2V5ICoKVEFPX09iamVjdEtleV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1 cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRBT19PYmplY3RLZXkgKgpUQU9fT2JqZWN0S2V5X3Zh cjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKVEFP X09iamVjdEtleV92YXI6Om9wZXJhdG9yIGNvbnN0IFRBT19PYmplY3RLZXkgJigpIGNvbnN0CnsK ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpUQU9fT2JqZWN0S2V5X3Zhcjo6b3BlcmF0 b3IgVEFPX09iamVjdEtleSAmKCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lClRB T19PYmplY3RLZXlfdmFyOjpvcGVyYXRvciBUQU9fT2JqZWN0S2V5ICYoKSBjb25zdAp7CiAgcmV0 dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6Ok9jdGV0ICYKVEFPX09iamVjdEtleV92 YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBzbG90KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8t Pm9wZXJhdG9yW10gKHNsb3QpOwp9CgppbmxpbmUgY29uc3QgVEFPX09iamVjdEtleSAmClRBT19P YmplY3RLZXlfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoK aW5saW5lIFRBT19PYmplY3RLZXkgJgpUQU9fT2JqZWN0S2V5X3Zhcjo6aW5vdXQgKHZvaWQpCnsK ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgVEFPX09iamVjdEtleSAqJgpUQU9fT2Jq ZWN0S2V5X3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRy XyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBUQU9fT2JqZWN0S2V5ICoKVEFP X09iamVjdEtleV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgVEFPX09iamVjdEtleSAqdG1wID0gdGhp cy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdG1wOwp9CgppbmxpbmUgVEFPX09i amVjdEtleSAqClRBT19PYmplY3RLZXlfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g dGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpUQU9fT2JqZWN0S2V5X291dDo6VEFPX09iamVjdEtl eV9vdXQgKFRBT19PYmplY3RLZXkgKiZwKQogICAgICAgIDogcHRyXyAocCkKewogIHRoaXMtPnB0 cl8gPSAwOwp9CgppbmxpbmUKVEFPX09iamVjdEtleV9vdXQ6OlRBT19PYmplY3RLZXlfb3V0IChU QU9fT2JqZWN0S2V5X3ZhciAmcCkKICAgICAgICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRl IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpUQU9fT2JqZWN0S2V5X291 dDo6VEFPX09iamVjdEtleV9vdXQgKFRBT19PYmplY3RLZXlfb3V0ICZwKQogICAgICAgIDogcHRy XyAocC5wdHJfKQp7fQoKaW5saW5lIFRBT19PYmplY3RLZXlfb3V0ICYKVEFPX09iamVjdEtleV9v dXQ6Om9wZXJhdG9yPSAoVEFPX09iamVjdEtleV9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gcC5w dHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFRBT19PYmplY3RLZXlfb3V0ICYKVEFPX09i amVjdEtleV9vdXQ6Om9wZXJhdG9yPSAoVEFPX09iamVjdEtleSAqcCkKewogIHRoaXMtPnB0cl8g PSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lClRBT19PYmplY3RLZXlfb3V0OjpvcGVyYXRv ciBUQU9fT2JqZWN0S2V5IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFP X09iamVjdEtleSAqJgpUQU9fT2JqZWN0S2V5X291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRo aXMtPnB0cl87Cn0KCmlubGluZSBUQU9fT2JqZWN0S2V5ICoKVEFPX09iamVjdEtleV9vdXQ6Om9w ZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBOjpP Y3RldCAmClRBT19PYmplY3RLZXlfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkK ewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChzbG90KTsKfQojIDEwNCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RfS2V5Qy5o IiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv cG9zdC5oIiAxCiMgMTA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL09iamVjdF9LZXlDLmgiIDIKIyA2NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RJRExpc3QuaCIgMQojIDE1 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVj dElETGlzdC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9wcmUuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL09iamVjdElETGlzdC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDE4ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdElETGlzdC5o IiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9TZXF1ZW5jZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vT2JqZWN0SURMaXN0LmgiIDIKIyA0NCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RJRExpc3QuaCIKY2xhc3MgQ09S QkFfT1JCX09iamVjdElkTGlzdCA6IHB1YmxpYwoKVEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVu Y2UKCgoKewpwdWJsaWM6CiBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICh2b2lkKTsKIENPUkJBX09S Ql9PYmplY3RJZExpc3QgKENPUkJBOjpVTG9uZyBtYXgpOwogQ09SQkFfT1JCX09iamVjdElkTGlz dCAoCiAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgIENPUkJB OjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgIGNoYXIgKiAqYnVmZmVyLAogICAgICAgICAg ICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTAKICAgICAgICAgICAgICAgKTsKIENPUkJBX09S Ql9PYmplY3RJZExpc3QgKGNvbnN0IENPUkJBX09SQl9PYmplY3RJZExpc3QgJik7CiB+Q09SQkFf T1JCX09iamVjdElkTGlzdCAodm9pZCk7CgogIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0 b3IgKHZvaWQqKTsKfTsKCnR5cGVkZWYgQ09SQkFfT1JCX09iamVjdElkTGlzdCAqQ09SQkFfT1JC X09iamVjdElkTGlzdF9wdHI7CiMgNzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0SURMaXN0LmgiCmNsYXNzIENPUkJBX09SQl9PYmplY3RJ ZExpc3RfdmFyCnsKcHVibGljOgogIENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICh2b2lkKTsK ICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3ZhciAoQ09SQkFfT1JCX09iamVjdElkTGlzdCAqKTsK ICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3ZhciAoY29uc3QgQ09SQkFfT1JCX09iamVjdElkTGlz dF92YXIgJik7CiAgfkNPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICh2b2lkKTsKCiAgQ09SQkFf T1JCX09iamVjdElkTGlzdF92YXIgJm9wZXJhdG9yPSAoQ09SQkFfT1JCX09iamVjdElkTGlzdCAq KTsKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9P UkJfT2JqZWN0SWRMaXN0X3ZhciAmKTsKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICpvcGVyYXRv ci0+ICh2b2lkKTsKICBjb25zdCBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICpvcGVyYXRvci0+ICh2 b2lkKSBjb25zdDsKCiAgb3BlcmF0b3IgY29uc3QgQ09SQkFfT1JCX09iamVjdElkTGlzdCAmKCkg Y29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfT1JCX09iamVjdElkTGlzdCAmKCk7CiAgb3BlcmF0b3Ig Q09SQkFfT1JCX09iamVjdElkTGlzdCAmKCkgY29uc3Q7CiAgVEFPX1NlcUVsZW1fU3RyaW5nX01h bmFnZXIgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpOwoKICBjb25zdCBDT1JCQV9PUkJf T2JqZWN0SWRMaXN0ICZpbiAodm9pZCkgY29uc3Q7CiAgQ09SQkFfT1JCX09iamVjdElkTGlzdCAm aW5vdXQgKHZvaWQpOwogIENPUkJBX09SQl9PYmplY3RJZExpc3QgKiZvdXQgKHZvaWQpOwogIENP UkJBX09SQl9PYmplY3RJZExpc3QgKl9yZXRuICh2b2lkKTsKICBDT1JCQV9PUkJfT2JqZWN0SWRM aXN0ICpwdHIgKHZvaWQpIGNvbnN0OwoKcHJpdmF0ZToKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0 ICpwdHJfOwp9OwoKCgoKCgoKY2xhc3MgQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQKewpwdWJs aWM6CiAgQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQgKENPUkJBX09SQl9PYmplY3RJZExpc3Qg KiYpOwogIENPUkJBX09SQl9PYmplY3RJZExpc3Rfb3V0IChDT1JCQV9PUkJfT2JqZWN0SWRMaXN0 X3ZhciAmKTsKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dCAoY29uc3QgQ09SQkFfT1JCX09i amVjdElkTGlzdF9vdXQgJik7CiAgQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQgJm9wZXJhdG9y PSAoY29uc3QgQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQgJik7CiAgQ09SQkFfT1JCX09iamVj dElkTGlzdF9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfT1JCX09iamVjdElkTGlzdCAqKTsKICBvcGVy YXRvciBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0IComKCk7CiAgQ09SQkFfT1JCX09iamVjdElkTGlz dCAqJnB0ciAodm9pZCk7CiAgQ09SQkFfT1JCX09iamVjdElkTGlzdCAqb3BlcmF0b3ItPiAodm9p ZCk7CiAgVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25n IHNsb3QpOwoKcHJpdmF0ZToKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0IComcHRyXzsKCiAgdm9p ZCBvcGVyYXRvcj0gKGNvbnN0IENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICYpOwp9OwoKCgog ICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJiwgY29u c3QgQ09SQkFfT1JCX09iamVjdElkTGlzdCAmKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBv cGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJiwgQ09SQkFfT1JCX09iamVjdElkTGlzdCAmKTsKCgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2Jq ZWN0SURMaXN0LmkiIDEKIyAyMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9PYmplY3RJRExpc3QuaSIKaW5saW5lCkNPUkJBX09SQl9PYmplY3RJZExp c3RfdmFyOjpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9 CgppbmxpbmUKQ09SQkFfT1JCX09iamVjdElkTGlzdF92YXI6OkNPUkJBX09SQl9PYmplY3RJZExp c3RfdmFyIChDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICpwKQogIDogcHRyXyAocCkKe30KCmlubGlu ZQpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3Zhcjo6Q09SQkFfT1JCX09iamVjdElkTGlzdF92YXIg KGNvbnN0IENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAg IHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfT1JCX09iamVjdElkTGlzdCgqcC5wdHJfKTsKICBlbHNl CiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX09SQl9PYmplY3RJZExpc3RfdmFy Ojp+Q09SQkFfT1JCX09iamVjdElkTGlzdF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRy XzsKfQoKaW5saW5lIENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICYKQ09SQkFfT1JCX09iamVj dElkTGlzdF92YXI6Om9wZXJhdG9yPSAoQ09SQkFfT1JCX09iamVjdElkTGlzdCAqcCkKewogIGRl bGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5s aW5lIENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICYKQ09SQkFfT1JCX09iamVjdElkTGlzdF92 YXI6Om9wZXJhdG9yPSAoY29uc3QgQ09SQkFfT1JCX09iamVjdElkTGlzdF92YXIgJnApCnsKICBp ZiAodGhpcyAhPSAmcCkKICB7CiAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgIHRoaXMtPnB0cl8g PSBuZXcgQ09SQkFfT1JCX09iamVjdElkTGlzdCAoKnAucHRyXyk7CiAgfQogIHJldHVybiAqdGhp czsKfQoKaW5saW5lIGNvbnN0IENPUkJBX09SQl9PYmplY3RJZExpc3QgKgpDT1JCQV9PUkJfT2Jq ZWN0SWRMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5w dHJfOwp9CgppbmxpbmUgQ09SQkFfT1JCX09iamVjdElkTGlzdCAqCkNPUkJBX09SQl9PYmplY3RJ ZExpc3RfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlu bGluZQpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3Zhcjo6b3BlcmF0b3IgY29uc3QgQ09SQkFfT1JC X09iamVjdElkTGlzdCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5l CkNPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyOjpvcGVyYXRvciBDT1JCQV9PUkJfT2JqZWN0SWRM aXN0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfT1JCX09iamVj dElkTGlzdF92YXI6Om9wZXJhdG9yIENPUkJBX09SQl9PYmplY3RJZExpc3QgJigpIGNvbnN0CnsK ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdl cgpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNs b3QpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoc2xvdCk7Cn0KCmlubGluZSBj b25zdCBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICYKQ09SQkFfT1JCX09iamVjdElkTGlzdF92YXI6 OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFf T1JCX09iamVjdElkTGlzdCAmCkNPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyOjppbm91dCAodm9p ZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSBDT1JCQV9PUkJfT2JqZWN0SWRM aXN0IComCkNPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUg dGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s aW5lIENPUkJBX09SQl9PYmplY3RJZExpc3QgKgpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3Zhcjo6 X3JldG4gKHZvaWQpCnsKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICp0bXAgPSB0aGlzLT5wdHJf OwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSBDT1JCQV9PUkJfT2Jq ZWN0SWRMaXN0ICoKQ09SQkFfT1JCX09iamVjdElkTGlzdF92YXI6OnB0ciAodm9pZCkgY29uc3QK ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lCkNPUkJBX09SQl9PYmplY3RJZExp c3Rfb3V0OjpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dCAoQ09SQkFfT1JCX09iamVjdElkTGlz dCAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpDT1JCQV9P UkJfT2JqZWN0SWRMaXN0X291dDo6Q09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQgKENPUkJBX09S Ql9PYmplY3RJZExpc3RfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBkZWxldGUgdGhp cy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX09SQl9PYmplY3RJZExp c3Rfb3V0OjpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dCAoY29uc3QgQ09SQkFfT1JCX09iamVj dElkTGlzdF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PENPUkJBX09SQl9PYmplY3RJZExp c3Rfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQg JgpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dDo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9PUkJf T2JqZWN0SWRMaXN0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PENPUkJBX09S Ql9PYmplY3RJZExpc3Rfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUg Q09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQgJgpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dDo6 b3BlcmF0b3I9IChDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7 CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQ6Om9w ZXJhdG9yIENPUkJBX09SQl9PYmplY3RJZExpc3QgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87 Cn0KCmlubGluZSBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0IComCkNPUkJBX09SQl9PYmplY3RJZExp c3Rfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJB X09SQl9PYmplY3RJZExpc3QgKgpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dDo6b3BlcmF0b3It PiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFPX1NlcUVsZW1fU3Ry aW5nX01hbmFnZXIKQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQ6Om9wZXJhdG9yW10gKENPUkJB OjpVTG9uZyBzbG90KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKHNsb3QpOwp9 CiMgMTM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L09iamVjdElETGlzdC5oIiAyCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RJRExpc3QuaCIgMgojIDY4ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIK CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9S ZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwuaCIgMQojIDcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJpbmdTZXFDLmgiIDEKIyAy NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJp bmdTZXFDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv YWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vU3RyaW5nU2VxQy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDI4ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1N0cmluZ1NlcUMuaCIgMgoK CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9TZXF1ZW5jZS5oIiAxCiMgMzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vU3RyaW5nU2VxQy5oIiAyCiMgNjEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU3RyaW5nU2VxQy5oIgogIGNsYXNzIENPUkJB X1N0cmluZ1NlcTsKICBjbGFzcyBDT1JCQV9TdHJpbmdTZXFfdmFyOwoKCgoKCiAgY2xhc3MgQ09S QkFfU3RyaW5nU2VxIDogcHVibGljCgogICAgVEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UK CgoKICB7CiAgcHVibGljOgogICAgQ09SQkFfU3RyaW5nU2VxICh2b2lkKTsKICAgIENPUkJBX1N0 cmluZ1NlcSAoQ09SQkE6OlVMb25nIG1heCk7CiAgICBDT1JCQV9TdHJpbmdTZXEgKAogICAgICBD T1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICBjaGFyICog KmJ1ZmZlciwKICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICk7CiAgICBDT1JC QV9TdHJpbmdTZXEgKGNvbnN0IENPUkJBX1N0cmluZ1NlcSAmKTsKICAgIH5DT1JCQV9TdHJpbmdT ZXEgKHZvaWQpOwogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoK CiAgICB0eXBlZGVmIENPUkJBX1N0cmluZ1NlcV92YXIgX3Zhcl90eXBlOwoKCiAgfTsKIyAxMDQg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU3RyaW5n U2VxQy5oIgogIGNsYXNzIENPUkJBX1N0cmluZ1NlcV92YXIKICB7CiAgcHVibGljOgogICAgQ09S QkFfU3RyaW5nU2VxX3ZhciAodm9pZCk7CiAgICBDT1JCQV9TdHJpbmdTZXFfdmFyIChDT1JCQV9T dHJpbmdTZXEgKik7CiAgICBDT1JCQV9TdHJpbmdTZXFfdmFyIChjb25zdCBDT1JCQV9TdHJpbmdT ZXFfdmFyICYpOwogICAgfkNPUkJBX1N0cmluZ1NlcV92YXIgKHZvaWQpOwoKICAgIENPUkJBX1N0 cmluZ1NlcV92YXIgJm9wZXJhdG9yPSAoQ09SQkFfU3RyaW5nU2VxICopOwogICAgQ09SQkFfU3Ry aW5nU2VxX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9TdHJpbmdTZXFfdmFyICYpOwogICAg Q09SQkFfU3RyaW5nU2VxICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IENPUkJBX1N0cmlu Z1NlcSAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgQ09SQkFf U3RyaW5nU2VxICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIENPUkJBX1N0cmluZ1NlcSAmKCk7CiAg ICBvcGVyYXRvciBDT1JCQV9TdHJpbmdTZXEgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgQ09SQkFf U3RyaW5nU2VxIComKCk7CgogICAgVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgb3BlcmF0b3Jb XSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCgogICAgY29uc3QgQ09SQkFfU3RyaW5nU2VxICZpbiAo dm9pZCkgY29uc3Q7CiAgICBDT1JCQV9TdHJpbmdTZXEgJmlub3V0ICh2b2lkKTsKICAgIENPUkJB X1N0cmluZ1NlcSAqJm91dCAodm9pZCk7CiAgICBDT1JCQV9TdHJpbmdTZXEgKl9yZXRuICh2b2lk KTsKICAgIENPUkJBX1N0cmluZ1NlcSAqcHRyICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAg IENPUkJBX1N0cmluZ1NlcSAqcHRyXzsKICB9OwojIDE0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJpbmdTZXFDLmgiCiAgY2xhc3MgQ09SQkFf U3RyaW5nU2VxX291dAogIHsKICBwdWJsaWM6CiAgICBDT1JCQV9TdHJpbmdTZXFfb3V0IChDT1JC QV9TdHJpbmdTZXEgKiYpOwogICAgQ09SQkFfU3RyaW5nU2VxX291dCAoQ09SQkFfU3RyaW5nU2Vx X3ZhciAmKTsKICAgIENPUkJBX1N0cmluZ1NlcV9vdXQgKGNvbnN0IENPUkJBX1N0cmluZ1NlcV9v dXQgJik7CiAgICBDT1JCQV9TdHJpbmdTZXFfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX1N0 cmluZ1NlcV9vdXQgJik7CiAgICBDT1JCQV9TdHJpbmdTZXFfb3V0ICZvcGVyYXRvcj0gKENPUkJB X1N0cmluZ1NlcSAqKTsKICAgIG9wZXJhdG9yIENPUkJBX1N0cmluZ1NlcSAqJigpOwogICAgQ09S QkFfU3RyaW5nU2VxIComcHRyICh2b2lkKTsKICAgIENPUkJBX1N0cmluZ1NlcSAqb3BlcmF0b3It PiAodm9pZCk7CiAgICBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlciBvcGVyYXRvcltdIChDT1JC QTo6VUxvbmcgaW5kZXgpOwoKICBwcml2YXRlOgogICAgQ09SQkFfU3RyaW5nU2VxIComcHRyXzsK CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFfU3RyaW5nU2VxX3ZhciAmKTsKICB9OwoK CgoKCgoKICBjbGFzcyBDT1JCQV9XU3RyaW5nU2VxOwogIGNsYXNzIENPUkJBX1dTdHJpbmdTZXFf dmFyOwoKCgoKCiAgY2xhc3MgQ09SQkFfV1N0cmluZ1NlcSA6IHB1YmxpYwoKICAgIFRBT19VbmJv dW5kZWRfV1N0cmluZ19TZXF1ZW5jZQoKCgogIHsKICBwdWJsaWM6CiAgICBDT1JCQV9XU3RyaW5n U2VxICh2b2lkKTsKICAgIENPUkJBX1dTdHJpbmdTZXEgKENPUkJBOjpVTG9uZyBtYXgpOwogICAg Q09SQkFfV1N0cmluZ1NlcSAoCiAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgIENPUkJBOjpV TG9uZyBsZW5ndGgsCiAgICAgIENPUkJBOjpXQ2hhciAqICpidWZmZXIsCiAgICAgIENPUkJBOjpC b29sZWFuIHJlbGVhc2UgPSAwCiAgICApOwogICAgQ09SQkFfV1N0cmluZ1NlcSAoY29uc3QgQ09S QkFfV1N0cmluZ1NlcSAmKTsKICAgIH5DT1JCQV9XU3RyaW5nU2VxICh2b2lkKTsKICAgIHN0YXRp YyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgdHlwZWRlZiBDT1JCQV9X U3RyaW5nU2VxX3ZhciBfdmFyX3R5cGU7CgoKICB9OwojIDIxMCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJpbmdTZXFDLmgiCiAgY2xhc3MgQ09S QkFfV1N0cmluZ1NlcV92YXIKICB7CiAgcHVibGljOgogICAgQ09SQkFfV1N0cmluZ1NlcV92YXIg KHZvaWQpOwogICAgQ09SQkFfV1N0cmluZ1NlcV92YXIgKENPUkJBX1dTdHJpbmdTZXEgKik7CiAg ICBDT1JCQV9XU3RyaW5nU2VxX3ZhciAoY29uc3QgQ09SQkFfV1N0cmluZ1NlcV92YXIgJik7CiAg ICB+Q09SQkFfV1N0cmluZ1NlcV92YXIgKHZvaWQpOwoKICAgIENPUkJBX1dTdHJpbmdTZXFfdmFy ICZvcGVyYXRvcj0gKENPUkJBX1dTdHJpbmdTZXEgKik7CiAgICBDT1JCQV9XU3RyaW5nU2VxX3Zh ciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9XU3RyaW5nU2VxX3ZhciAmKTsKICAgIENPUkJBX1dT dHJpbmdTZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgQ09SQkFfV1N0cmluZ1NlcSAq b3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgQ09SQkFfV1N0cmlu Z1NlcSAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBDT1JCQV9XU3RyaW5nU2VxICYoKTsKICAgIG9w ZXJhdG9yIENPUkJBX1dTdHJpbmdTZXEgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgQ09SQkFfV1N0 cmluZ1NlcSAqJigpOwoKICAgIFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlciBvcGVyYXRvcltd IChDT1JCQTo6VUxvbmcgaW5kZXgpOwoKCiAgICBjb25zdCBDT1JCQV9XU3RyaW5nU2VxICZpbiAo dm9pZCkgY29uc3Q7CiAgICBDT1JCQV9XU3RyaW5nU2VxICZpbm91dCAodm9pZCk7CiAgICBDT1JC QV9XU3RyaW5nU2VxIComb3V0ICh2b2lkKTsKICAgIENPUkJBX1dTdHJpbmdTZXEgKl9yZXRuICh2 b2lkKTsKICAgIENPUkJBX1dTdHJpbmdTZXEgKnB0ciAodm9pZCkgY29uc3Q7CgogIHByaXZhdGU6 CiAgICBDT1JCQV9XU3RyaW5nU2VxICpwdHJfOwogIH07CiMgMjQ4ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1N0cmluZ1NlcUMuaCIKICBjbGFzcyBD T1JCQV9XU3RyaW5nU2VxX291dAogIHsKICBwdWJsaWM6CiAgICBDT1JCQV9XU3RyaW5nU2VxX291 dCAoQ09SQkFfV1N0cmluZ1NlcSAqJik7CiAgICBDT1JCQV9XU3RyaW5nU2VxX291dCAoQ09SQkFf V1N0cmluZ1NlcV92YXIgJik7CiAgICBDT1JCQV9XU3RyaW5nU2VxX291dCAoY29uc3QgQ09SQkFf V1N0cmluZ1NlcV9vdXQgJik7CiAgICBDT1JCQV9XU3RyaW5nU2VxX291dCAmb3BlcmF0b3I9IChj b25zdCBDT1JCQV9XU3RyaW5nU2VxX291dCAmKTsKICAgIENPUkJBX1dTdHJpbmdTZXFfb3V0ICZv cGVyYXRvcj0gKENPUkJBX1dTdHJpbmdTZXEgKik7CiAgICBvcGVyYXRvciBDT1JCQV9XU3RyaW5n U2VxIComKCk7CiAgICBDT1JCQV9XU3RyaW5nU2VxIComcHRyICh2b2lkKTsKICAgIENPUkJBX1dT dHJpbmdTZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5h Z2VyIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7CgogIHByaXZhdGU6CiAgICBDT1JC QV9XU3RyaW5nU2VxIComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFfV1N0 cmluZ1NlcV92YXIgJik7CiAgfTsKCgoKCgoKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChD T1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX1N0cmluZ1NlcSAmKTsKICAgICAgICAgICB2b2lkIG9w ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX1N0cmluZ1NlcSopOwogICAgICAgICAgIENP UkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIENPUkJBX1N0cmlu Z1NlcSAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENP UkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfU3RyaW5nU2VxIComKTsKICAgICAgICAgICB2b2lkIG9w ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX1dTdHJpbmdTZXEgJik7CiAgICAg ICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9XU3RyaW5nU2VxKik7 CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkg JiwgQ09SQkFfV1N0cmluZ1NlcSAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0 b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfV1N0cmluZ1NlcSAqJik7CiMg MzE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1N0 cmluZ1NlcUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1N0cmluZ1NlcUMuaSIgMQojIDMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1N0cmluZ1NlcUMuaSIKaW5saW5lCkNPUkJBX1N0cmlu Z1NlcV92YXI6OkNPUkJBX1N0cmluZ1NlcV92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5s aW5lCkNPUkJBX1N0cmluZ1NlcV92YXI6OkNPUkJBX1N0cmluZ1NlcV92YXIgKENPUkJBX1N0cmlu Z1NlcSAqcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6Q09S QkFfU3RyaW5nU2VxX3ZhciAoY29uc3QgOjpDT1JCQV9TdHJpbmdTZXFfdmFyICZwKQp7CiAgaWYg KHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkNPUkJBX1N0cmluZ1Nl cSAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlv biAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8g PSAwOwp9CgppbmxpbmUKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6fkNPUkJBX1N0cmluZ1NlcV92YXIg KHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1N0cmluZ1NlcV92 YXIgJgpDT1JCQV9TdHJpbmdTZXFfdmFyOjpvcGVyYXRvcj0gKENPUkJBX1N0cmluZ1NlcSAqcCkK ewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsK fQoKaW5saW5lIDo6Q09SQkFfU3RyaW5nU2VxX3ZhciAmCkNPUkJBX1N0cmluZ1NlcV92YXI6Om9w ZXJhdG9yPSAoY29uc3QgOjpDT1JCQV9TdHJpbmdTZXFfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0g JnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxl dGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAg ZWxzZQogICAgICAgIHsKICAgICAgICAgIENPUkJBX1N0cmluZ1NlcSAqZGVlcF9jb3B5ID0KICAg ICAgICAgICAgbmV3IENPUkJBX1N0cmluZ1NlcSAoKnAucHRyXyk7CgogICAgICAgICAgaWYgKGRl ZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgQ09SQkFfU3RyaW5nU2Vx ICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsK ICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVw X2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoK aW5saW5lIGNvbnN0IDo6Q09SQkFfU3RyaW5nU2VxICoKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6b3Bl cmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpD T1JCQV9TdHJpbmdTZXEgKgpDT1JCQV9TdHJpbmdTZXFfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7 CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpDT1JCQV9TdHJpbmdTZXFfdmFyOjpvcGVy YXRvciBjb25zdCA6OkNPUkJBX1N0cmluZ1NlcSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+ cHRyXzsKfQoKaW5saW5lCkNPUkJBX1N0cmluZ1NlcV92YXI6Om9wZXJhdG9yIDo6Q09SQkFfU3Ry aW5nU2VxICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfU3RyaW5n U2VxX3Zhcjo6b3BlcmF0b3IgOjpDT1JCQV9TdHJpbmdTZXEgJigpIGNvbnN0CnsKICByZXR1cm4g KnRoaXMtPnB0cl87Cn0KCgppbmxpbmUKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6b3BlcmF0b3IgOjpD T1JCQV9TdHJpbmdTZXEgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBUQU9f U2VxRWxlbV9TdHJpbmdfTWFuYWdlcgpDT1JCQV9TdHJpbmdTZXFfdmFyOjpvcGVyYXRvcltdIChD T1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5k ZXgpOwp9CgppbmxpbmUgY29uc3QgOjpDT1JCQV9TdHJpbmdTZXEgJgpDT1JCQV9TdHJpbmdTZXFf dmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6 Q09SQkFfU3RyaW5nU2VxICYKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICBy ZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgOjpDT1JCQV9TdHJpbmdTZXEgKiYKQ09SQkFf U3RyaW5nU2VxX3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+ cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkNPUkJBX1N0cmluZ1Nl cSAqCkNPUkJBX1N0cmluZ1NlcV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpDT1JCQV9TdHJpbmdT ZXEgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoK aW5saW5lIDo6Q09SQkFfU3RyaW5nU2VxICoKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6cHRyICh2b2lk KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKQ09SQkFfU3RyaW5n U2VxX291dDo6Q09SQkFfU3RyaW5nU2VxX291dCAoQ09SQkFfU3RyaW5nU2VxIComcCkKICA6IHB0 cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX1N0cmluZ1NlcV9vdXQ6 OkNPUkJBX1N0cmluZ1NlcV9vdXQgKENPUkJBX1N0cmluZ1NlcV92YXIgJnApCiAgOiBwdHJfIChw Lm91dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9Cgppbmxp bmUKQ09SQkFfU3RyaW5nU2VxX291dDo6Q09SQkFfU3RyaW5nU2VxX291dCAoY29uc3QgOjpDT1JC QV9TdHJpbmdTZXFfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxDT1JCQV9TdHJpbmdTZXFf b3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgOjpDT1JCQV9TdHJpbmdTZXFfb3V0ICYKQ09SQkFf U3RyaW5nU2VxX291dDo6b3BlcmF0b3I9IChjb25zdCA6OkNPUkJBX1N0cmluZ1NlcV9vdXQgJnAp CnsKICB0aGlzLT5wdHJfID0gY29uc3RfY2FzdDxDT1JCQV9TdHJpbmdTZXFfb3V0Jj4gKHApLnB0 cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpDT1JCQV9TdHJpbmdTZXFfb3V0ICYKQ09S QkFfU3RyaW5nU2VxX291dDo6b3BlcmF0b3I9IChDT1JCQV9TdHJpbmdTZXEgKnApCnsKICB0aGlz LT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9TdHJpbmdTZXFfb3V0 OjpvcGVyYXRvciA6OkNPUkJBX1N0cmluZ1NlcSAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsK fQoKaW5saW5lIDo6Q09SQkFfU3RyaW5nU2VxIComCkNPUkJBX1N0cmluZ1NlcV9vdXQ6OnB0ciAo dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9TdHJpbmdTZXEg KgpDT1JCQV9TdHJpbmdTZXFfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMt PnB0cl87Cn0KCmlubGluZSBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlcgpDT1JCQV9TdHJpbmdT ZXFfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+ cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CiMgMjQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1N0cmluZ1NlcUMuaSIKaW5saW5lCkNPUkJBX1dT dHJpbmdTZXFfdmFyOjpDT1JCQV9XU3RyaW5nU2VxX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9 CgppbmxpbmUKQ09SQkFfV1N0cmluZ1NlcV92YXI6OkNPUkJBX1dTdHJpbmdTZXFfdmFyIChDT1JC QV9XU3RyaW5nU2VxICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpDT1JCQV9XU3RyaW5nU2Vx X3Zhcjo6Q09SQkFfV1N0cmluZ1NlcV92YXIgKGNvbnN0IDo6Q09SQkFfV1N0cmluZ1NlcV92YXIg JnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6Q09S QkFfV1N0cmluZ1NlcSAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19l cnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAg IHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFfV1N0cmluZ1NlcV92YXI6On5DT1JCQV9X U3RyaW5nU2VxX3ZhciAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09S QkFfV1N0cmluZ1NlcV92YXIgJgpDT1JCQV9XU3RyaW5nU2VxX3Zhcjo6b3BlcmF0b3I9IChDT1JC QV9XU3RyaW5nU2VxICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7 CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpDT1JCQV9XU3RyaW5nU2VxX3ZhciAmCkNPUkJB X1dTdHJpbmdTZXFfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6Q09SQkFfV1N0cmluZ1NlcV92YXIg JnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAwKQogICAg ICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+cHRyXyA9 IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgQ09SQkFfV1N0cmlu Z1NlcSAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IENPUkJBX1dTdHJpbmdTZXEgKCpwLnB0 cl8pOwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIENPUkJBX1dTdHJpbmdTZXEgKnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBk ZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwogICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAg ICAgICAgICAgICAgZGVsZXRlIGRlZXBfY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg IH0KCiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3QgOjpDT1JCQV9XU3RyaW5nU2VxICoK Q09SQkFfV1N0cmluZ1NlcV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g dGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6Q09SQkFfV1N0cmluZ1NlcSAqCkNPUkJBX1dTdHJpbmdT ZXFfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGlu ZQpDT1JCQV9XU3RyaW5nU2VxX3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpDT1JCQV9XU3RyaW5nU2Vx ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfV1N0cmlu Z1NlcV92YXI6Om9wZXJhdG9yIDo6Q09SQkFfV1N0cmluZ1NlcSAmKCkKewogIHJldHVybiAqdGhp cy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1dTdHJpbmdTZXFfdmFyOjpvcGVyYXRvciA6OkNPUkJB X1dTdHJpbmdTZXEgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUK Q09SQkFfV1N0cmluZ1NlcV92YXI6Om9wZXJhdG9yIDo6Q09SQkFfV1N0cmluZ1NlcSAqJigpCnsK ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdl cgpDT1JCQV9XU3RyaW5nU2VxX3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7 CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQoKaW5saW5lIGNvbnN0 IDo6Q09SQkFfV1N0cmluZ1NlcSAmCkNPUkJBX1dTdHJpbmdTZXFfdmFyOjppbiAodm9pZCkgY29u c3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6Q09SQkFfV1N0cmluZ1NlcSAm CkNPUkJBX1dTdHJpbmdTZXFfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRy XzsKfQoKCmlubGluZSA6OkNPUkJBX1dTdHJpbmdTZXEgKiYKQ09SQkFfV1N0cmluZ1NlcV92YXI6 Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJl dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9XU3RyaW5nU2VxICoKQ09SQkFfV1N0 cmluZ1NlcV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpDT1JCQV9XU3RyaW5nU2VxICp0bXAgPSB0 aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSA6OkNP UkJBX1dTdHJpbmdTZXEgKgpDT1JCQV9XU3RyaW5nU2VxX3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7 CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKQ09SQkFfV1N0cmluZ1NlcV9vdXQ6 OkNPUkJBX1dTdHJpbmdTZXFfb3V0IChDT1JCQV9XU3RyaW5nU2VxIComcCkKICA6IHB0cl8gKHAp CnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX1dTdHJpbmdTZXFfb3V0OjpDT1JC QV9XU3RyaW5nU2VxX291dCAoQ09SQkFfV1N0cmluZ1NlcV92YXIgJnApCiAgOiBwdHJfIChwLm91 dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUK Q09SQkFfV1N0cmluZ1NlcV9vdXQ6OkNPUkJBX1dTdHJpbmdTZXFfb3V0IChjb25zdCA6OkNPUkJB X1dTdHJpbmdTZXFfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxDT1JCQV9XU3RyaW5nU2Vx X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIDo6Q09SQkFfV1N0cmluZ1NlcV9vdXQgJgpDT1JC QV9XU3RyaW5nU2VxX291dDo6b3BlcmF0b3I9IChjb25zdCA6OkNPUkJBX1dTdHJpbmdTZXFfb3V0 ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNvbnN0X2Nhc3Q8Q09SQkFfV1N0cmluZ1NlcV9vdXQmPiAo cCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OkNPUkJBX1dTdHJpbmdTZXFfb3V0 ICYKQ09SQkFfV1N0cmluZ1NlcV9vdXQ6Om9wZXJhdG9yPSAoQ09SQkFfV1N0cmluZ1NlcSAqcCkK ewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJBX1dTdHJp bmdTZXFfb3V0OjpvcGVyYXRvciA6OkNPUkJBX1dTdHJpbmdTZXEgKiYoKQp7CiAgcmV0dXJuIHRo aXMtPnB0cl87Cn0KCmlubGluZSA6OkNPUkJBX1dTdHJpbmdTZXEgKiYKQ09SQkFfV1N0cmluZ1Nl cV9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JC QV9XU3RyaW5nU2VxICoKQ09SQkFfV1N0cmluZ1NlcV9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsK ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdl cgpDT1JCQV9XU3RyaW5nU2VxX291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7 CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDQ1MCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJpbmdTZXFDLmki CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29u c3QgQ09SQkE6OlN0cmluZ1NlcSAmCiAgKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAg ICBUQU9fSW5wdXRDRFIgJiwKICAgIENPUkJBOjpTdHJpbmdTZXEgJgogICk7CgoKCgoKCgpDT1JC QTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IENP UkJBX1dTdHJpbmdTZXEgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFP X0lucHV0Q0RSICYsCiAgICBDT1JCQV9XU3RyaW5nU2VxICYKICApOwojIDMxOSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJpbmdTZXFDLmgiIDIK IyAzMjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v U3RyaW5nU2VxQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL2FjZS9wb3N0LmgiIDEKIyAzMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vU3RyaW5nU2VxQy5oIiAyCiMgNzIgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2N0ZXRTZXFDLmgiIDEK IyA3MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9j b3JiYS5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5o IgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUu aCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjggIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNl cHRvckMuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9EeW5hbWljQy5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRHluYW1pY0MuaCIKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNiAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5oIiAyCgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29y YmFmd2QuaCIgMQojIDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL0R5bmFtaWNDLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQW55LmgiIDEKIyAzNCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5oIiAyCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5o IiAxCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vRHluYW1pY0MuaCIgMgojIDU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL0R5bmFtaWNDLmgiCm5hbWVzcGFjZSBEeW5hbWljCnsKICBzdHJ1Y3Qg UGFyYW1ldGVyOwogIGNsYXNzIFBhcmFtZXRlcl92YXI7CgogIHN0cnVjdCBQYXJhbWV0ZXIKICB7 CgoKICAgIHR5cGVkZWYgUGFyYW1ldGVyX3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0YXRpYyB2b2lk IF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICBDT1JCQTo6QW55IGFyZ3VtZW50Owog ICAgQ09SQkE6OlBhcmFtZXRlck1vZGUgbW9kZTsKICB9OwoKICBjbGFzcyBQYXJhbWV0ZXJfdmFy CiAgewogIHB1YmxpYzoKICAgIFBhcmFtZXRlcl92YXIgKHZvaWQpOwogICAgUGFyYW1ldGVyX3Zh ciAoUGFyYW1ldGVyICopOwogICAgUGFyYW1ldGVyX3ZhciAoY29uc3QgUGFyYW1ldGVyX3ZhciAm KTsKICAgIH5QYXJhbWV0ZXJfdmFyICh2b2lkKTsKCiAgICBQYXJhbWV0ZXJfdmFyICZvcGVyYXRv cj0gKFBhcmFtZXRlciAqKTsKICAgIFBhcmFtZXRlcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgUGFy YW1ldGVyX3ZhciAmKTsKICAgIFBhcmFtZXRlciAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25z dCBQYXJhbWV0ZXIgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0 IFBhcmFtZXRlciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQYXJhbWV0ZXIgJigpOwogICAgb3Bl cmF0b3IgUGFyYW1ldGVyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFBhcmFtZXRlciAqJigpOwoK CiAgICBjb25zdCBQYXJhbWV0ZXIgJmluICh2b2lkKSBjb25zdDsKICAgIFBhcmFtZXRlciAmaW5v dXQgKHZvaWQpOwogICAgUGFyYW1ldGVyIComb3V0ICh2b2lkKTsKICAgIFBhcmFtZXRlciAqX3Jl dG4gKHZvaWQpOwogICAgUGFyYW1ldGVyICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgog ICAgUGFyYW1ldGVyICpwdHJfOwogIH07CgogIGNsYXNzIFBhcmFtZXRlcl9vdXQKICB7CiAgcHVi bGljOgogICAgUGFyYW1ldGVyX291dCAoUGFyYW1ldGVyIComKTsKICAgIFBhcmFtZXRlcl9vdXQg KFBhcmFtZXRlcl92YXIgJik7CiAgICBQYXJhbWV0ZXJfb3V0IChjb25zdCBQYXJhbWV0ZXJfb3V0 ICYpOwogICAgUGFyYW1ldGVyX291dCAmb3BlcmF0b3I9IChjb25zdCBQYXJhbWV0ZXJfb3V0ICYp OwogICAgUGFyYW1ldGVyX291dCAmb3BlcmF0b3I9IChQYXJhbWV0ZXIgKik7CiAgICBvcGVyYXRv ciBQYXJhbWV0ZXIgKiYoKTsKICAgIFBhcmFtZXRlciAqJnB0ciAodm9pZCk7CiAgICBQYXJhbWV0 ZXIgKm9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgUGFyYW1ldGVyIComcHRyXzsK CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUGFyYW1ldGVyX3ZhciAmKTsKICB9OwoKICBleHRl cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUGFyYW1ldGVyOwoKCgoKCgoKICAgIGNsYXNzIF9U QU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdCA6IHB1YmxpYyBUQU9f VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UKICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBfVEFPX1Vu Ym91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3QgKHZvaWQpOwogICAgICBfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3QgKENPUkJBOjpVTG9uZyBt YXhpbXVtKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJM aXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAog ICAgICAgIFBhcmFtZXRlciAqZGF0YSwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0g MCk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdCAo Y29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0ICZyaHMp OwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3QgJm9w ZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJM aXN0ICZyaHMpOwogICAgICB2aXJ0dWFsIH5fVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWlj X1BhcmFtZXRlckxpc3QgKHZvaWQpOwoKICAgICAgUGFyYW1ldGVyICZvcGVyYXRvcltdIChDT1JC QTo6VUxvbmcgaSk7CiAgICAgIGNvbnN0IFBhcmFtZXRlciAmb3BlcmF0b3JbXSAoQ09SQkE6OlVM b25nIGkpIGNvbnN0OwoKICAgICAgc3RhdGljIFBhcmFtZXRlciAqYWxsb2NidWYgKENPUkJBOjpV TG9uZyBzaXplKTsKICAgICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoUGFyYW1ldGVyICpidWZmZXIp OwogICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0 aCk7CiAgICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwoKCiAgICAg IFBhcmFtZXRlciAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuID0gMCk7CiAgICAg IGNvbnN0IFBhcmFtZXRlciAqZ2V0X2J1ZmZlciAodm9pZCkgY29uc3Q7CiAgICAgIHZvaWQgcmVw bGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAg ICAgIFBhcmFtZXRlciAqZGF0YSwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKTsKICAg IH07CiMgMTcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL0R5bmFtaWNDLmgiCiAgY2xhc3MgUGFyYW1ldGVyTGlzdDsKICBjbGFzcyBQYXJhbWV0ZXJM aXN0X3ZhcjsKCgoKCgogIGNsYXNzIFBhcmFtZXRlckxpc3QgOiBwdWJsaWMKCiAgICBfVEFPX1Vu Ym91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3QKCgoKICB7CiAgcHVibGljOgog ICAgUGFyYW1ldGVyTGlzdCAodm9pZCk7CiAgICBQYXJhbWV0ZXJMaXN0IChDT1JCQTo6VUxvbmcg bWF4KTsKICAgIFBhcmFtZXRlckxpc3QgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICBD T1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICBQYXJhbWV0ZXIgKmJ1ZmZlciwKICAgICAgQ09SQkE6 OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICk7CiAgICBQYXJhbWV0ZXJMaXN0IChjb25zdCBQYXJh bWV0ZXJMaXN0ICYpOwogICAgflBhcmFtZXRlckxpc3QgKHZvaWQpOwogICAgc3RhdGljIHZvaWQg X3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgICB0eXBlZGVmIFBhcmFtZXRlckxpc3Rf dmFyIF92YXJfdHlwZTsKCgogIH07CiMgMjE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL0R5bmFtaWNDLmgiCiAgY2xhc3MgUGFyYW1ldGVyTGlzdF92 YXIKICB7CiAgcHVibGljOgogICAgUGFyYW1ldGVyTGlzdF92YXIgKHZvaWQpOwogICAgUGFyYW1l dGVyTGlzdF92YXIgKFBhcmFtZXRlckxpc3QgKik7CiAgICBQYXJhbWV0ZXJMaXN0X3ZhciAoY29u c3QgUGFyYW1ldGVyTGlzdF92YXIgJik7CiAgICB+UGFyYW1ldGVyTGlzdF92YXIgKHZvaWQpOwoK ICAgIFBhcmFtZXRlckxpc3RfdmFyICZvcGVyYXRvcj0gKFBhcmFtZXRlckxpc3QgKik7CiAgICBQ YXJhbWV0ZXJMaXN0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBQYXJhbWV0ZXJMaXN0X3ZhciAmKTsK ICAgIFBhcmFtZXRlckxpc3QgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgUGFyYW1ldGVy TGlzdCAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgUGFyYW1l dGVyTGlzdCAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQYXJhbWV0ZXJMaXN0ICYoKTsKICAgIG9w ZXJhdG9yIFBhcmFtZXRlckxpc3QgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgUGFyYW1ldGVyTGlz dCAqJigpOwoKICAgIFBhcmFtZXRlciAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7 CiAgICBjb25zdCBQYXJhbWV0ZXIgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpIGNv bnN0OwoKCiAgICBjb25zdCBQYXJhbWV0ZXJMaXN0ICZpbiAodm9pZCkgY29uc3Q7CiAgICBQYXJh bWV0ZXJMaXN0ICZpbm91dCAodm9pZCk7CiAgICBQYXJhbWV0ZXJMaXN0IComb3V0ICh2b2lkKTsK ICAgIFBhcmFtZXRlckxpc3QgKl9yZXRuICh2b2lkKTsKICAgIFBhcmFtZXRlckxpc3QgKnB0ciAo dm9pZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBQYXJhbWV0ZXJMaXN0ICpwdHJfOwogIH07CiMg MjU0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0R5 bmFtaWNDLmgiCiAgY2xhc3MgUGFyYW1ldGVyTGlzdF9vdXQKICB7CiAgcHVibGljOgogICAgUGFy YW1ldGVyTGlzdF9vdXQgKFBhcmFtZXRlckxpc3QgKiYpOwogICAgUGFyYW1ldGVyTGlzdF9vdXQg KFBhcmFtZXRlckxpc3RfdmFyICYpOwogICAgUGFyYW1ldGVyTGlzdF9vdXQgKGNvbnN0IFBhcmFt ZXRlckxpc3Rfb3V0ICYpOwogICAgUGFyYW1ldGVyTGlzdF9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg UGFyYW1ldGVyTGlzdF9vdXQgJik7CiAgICBQYXJhbWV0ZXJMaXN0X291dCAmb3BlcmF0b3I9IChQ YXJhbWV0ZXJMaXN0ICopOwogICAgb3BlcmF0b3IgUGFyYW1ldGVyTGlzdCAqJigpOwogICAgUGFy YW1ldGVyTGlzdCAqJnB0ciAodm9pZCk7CiAgICBQYXJhbWV0ZXJMaXN0ICpvcGVyYXRvci0+ICh2 b2lkKTsKICAgIFBhcmFtZXRlciAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7Cgog IHByaXZhdGU6CiAgICBQYXJhbWV0ZXJMaXN0IComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAo Y29uc3QgUGFyYW1ldGVyTGlzdF92YXIgJik7CiAgfTsKCgoKCiAgZXh0ZXJuIENPUkJBOjpUeXBl Q29kZV9wdHIgX3RjX1BhcmFtZXRlckxpc3Q7CgogIHR5cGVkZWYgQ09SQkE6OlN0cmluZ1NlcSBD b250ZXh0TGlzdDsKICB0eXBlZGVmIENPUkJBOjpTdHJpbmdTZXFfdmFyIENvbnRleHRMaXN0X3Zh cjsKICB0eXBlZGVmIENPUkJBOjpTdHJpbmdTZXFfb3V0IENvbnRleHRMaXN0X291dDsKICAgIGV4 dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Db250ZXh0TGlzdDsKCiAgdHlwZWRlZiBDT1JC QTo6VHlwZUNvZGUgVHlwZUNvZGU7CiAgdHlwZWRlZiBDT1JCQTo6VHlwZUNvZGVfcHRyIFR5cGVD b2RlX3B0cjsKICB0eXBlZGVmIENPUkJBOjpUeXBlQ29kZV92YXIgVHlwZUNvZGVfdmFyOwogIHR5 cGVkZWYgQ09SQkE6OlR5cGVDb2RlX291dCBUeXBlQ29kZV9vdXQ7CiAgICBleHRlcm4gQ09SQkE6 OlR5cGVDb2RlX3B0ciBfdGNfVHlwZUNvZGU7CgoKCgoKCgogICAgY2xhc3MgX1RBT19VbmJvdW5k ZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdCA6IHB1YmxpYyBUQU9fVW5i b3VuZGVkX0Jhc2VfU2VxdWVuY2UKICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBfVEFPX1VuYm91 bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1pY19FeGNlcHRpb25MaXN0ICh2b2lkKTsKICAgICAg X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdCAoQ09S QkE6OlVMb25nIG1heGltdW0pOwogICAgICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2Vf RHluYW1pY19FeGNlcHRpb25MaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICBDT1JC QTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIENPUkJBOjpUeXBlQ29kZSogKnZhbHVlLAogICAgICAg IENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKICAgICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0 X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdChjb25zdCBfVEFPX1VuYm91bmRlZF9PYmpl Y3RfU2VxdWVuY2VfRHluYW1pY19FeGNlcHRpb25MaXN0ICZyaHMpOwogICAgICB2aXJ0dWFsIH5f VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1pY19FeGNlcHRpb25MaXN0ICh2b2lk KTsKICAgICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9u TGlzdCAmb3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHlu YW1pY19FeGNlcHRpb25MaXN0ICZyaHMpOwogICAgICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2Vy PER5bmFtaWM6OlR5cGVDb2RlLER5bmFtaWM6OlR5cGVDb2RlX3Zhcj4gb3BlcmF0b3JbXSAoQ09S QkE6OlVMb25nIGluZGV4KSBjb25zdDsKICAgICAgc3RhdGljIENPUkJBOjpUeXBlQ29kZSAqKmFs bG9jYnVmIChDT1JCQTo6VUxvbmcgbmVsZW1zKTsKICAgICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAo Q09SQkE6OlR5cGVDb2RlICoqYnVmZmVyKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVf YnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKTsKICAgICAgdmlydHVhbCB2b2lkIF9kZWFsbG9j YXRlX2J1ZmZlciAodm9pZCk7CiAgICAgIENPUkJBOjpUeXBlQ29kZSogKmdldF9idWZmZXIgKENP UkJBOjpCb29sZWFuIG9ycGhhbiA9IDApOwogICAgICBjb25zdCBDT1JCQTo6VHlwZUNvZGUqICpn ZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKICAgICAgdmlydHVhbCB2b2lkIF9zaHJpbmtfYnVmZmVy IChDT1JCQTo6VUxvbmcgbmwsIENPUkJBOjpVTG9uZyBvbCk7CgogICAgfTsKIyAzMjkgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRHluYW1pY0MuaCIK ICBjbGFzcyBFeGNlcHRpb25MaXN0OwogIGNsYXNzIEV4Y2VwdGlvbkxpc3RfdmFyOwoKCgoKCiAg Y2xhc3MgRXhjZXB0aW9uTGlzdCA6IHB1YmxpYwoKICAgIF9UQU9fVW5ib3VuZGVkX09iamVjdF9T ZXF1ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3QKCgoKICB7CiAgcHVibGljOgogICAgRXhjZXB0 aW9uTGlzdCAodm9pZCk7CiAgICBFeGNlcHRpb25MaXN0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAg IEV4Y2VwdGlvbkxpc3QgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxv bmcgbGVuZ3RoLAogICAgICBDT1JCQTo6VHlwZUNvZGVfcHRyICpidWZmZXIsCiAgICAgIENPUkJB OjpCb29sZWFuIHJlbGVhc2UgPSAwCiAgICApOwogICAgRXhjZXB0aW9uTGlzdCAoY29uc3QgRXhj ZXB0aW9uTGlzdCAmKTsKICAgIH5FeGNlcHRpb25MaXN0ICh2b2lkKTsKICAgIHN0YXRpYyB2b2lk IF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgdHlwZWRlZiBFeGNlcHRpb25MaXN0 X3ZhciBfdmFyX3R5cGU7CgoKICB9OwojIDM3MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5oIgogIGNsYXNzIEV4Y2VwdGlvbkxpc3Rf dmFyCiAgewogIHB1YmxpYzoKICAgIEV4Y2VwdGlvbkxpc3RfdmFyICh2b2lkKTsKICAgIEV4Y2Vw dGlvbkxpc3RfdmFyIChFeGNlcHRpb25MaXN0ICopOwogICAgRXhjZXB0aW9uTGlzdF92YXIgKGNv bnN0IEV4Y2VwdGlvbkxpc3RfdmFyICYpOwogICAgfkV4Y2VwdGlvbkxpc3RfdmFyICh2b2lkKTsK CiAgICBFeGNlcHRpb25MaXN0X3ZhciAmb3BlcmF0b3I9IChFeGNlcHRpb25MaXN0ICopOwogICAg RXhjZXB0aW9uTGlzdF92YXIgJm9wZXJhdG9yPSAoY29uc3QgRXhjZXB0aW9uTGlzdF92YXIgJik7 CiAgICBFeGNlcHRpb25MaXN0ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IEV4Y2VwdGlv bkxpc3QgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IEV4Y2Vw dGlvbkxpc3QgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgRXhjZXB0aW9uTGlzdCAmKCk7CiAgICBv cGVyYXRvciBFeGNlcHRpb25MaXN0ICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIEV4Y2VwdGlvbkxp c3QgKiYoKTsKCiAgICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2VyPFR5cGVDb2RlLFR5cGVDb2Rl X3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCgogICAgY29uc3QgRXhjZXB0 aW9uTGlzdCAmaW4gKHZvaWQpIGNvbnN0OwogICAgRXhjZXB0aW9uTGlzdCAmaW5vdXQgKHZvaWQp OwogICAgRXhjZXB0aW9uTGlzdCAqJm91dCAodm9pZCk7CiAgICBFeGNlcHRpb25MaXN0ICpfcmV0 biAodm9pZCk7CiAgICBFeGNlcHRpb25MaXN0ICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRl OgogICAgRXhjZXB0aW9uTGlzdCAqcHRyXzsKICB9OwojIDQxMCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5oIgogIGNsYXNzIEV4Y2Vw dGlvbkxpc3Rfb3V0CiAgewogIHB1YmxpYzoKICAgIEV4Y2VwdGlvbkxpc3Rfb3V0IChFeGNlcHRp b25MaXN0IComKTsKICAgIEV4Y2VwdGlvbkxpc3Rfb3V0IChFeGNlcHRpb25MaXN0X3ZhciAmKTsK ICAgIEV4Y2VwdGlvbkxpc3Rfb3V0IChjb25zdCBFeGNlcHRpb25MaXN0X291dCAmKTsKICAgIEV4 Y2VwdGlvbkxpc3Rfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IEV4Y2VwdGlvbkxpc3Rfb3V0ICYpOwog ICAgRXhjZXB0aW9uTGlzdF9vdXQgJm9wZXJhdG9yPSAoRXhjZXB0aW9uTGlzdCAqKTsKICAgIG9w ZXJhdG9yIEV4Y2VwdGlvbkxpc3QgKiYoKTsKICAgIEV4Y2VwdGlvbkxpc3QgKiZwdHIgKHZvaWQp OwogICAgRXhjZXB0aW9uTGlzdCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBUQU9fUHNldWRvX09i amVjdF9NYW5hZ2VyPFR5cGVDb2RlLFR5cGVDb2RlX3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVM b25nIGluZGV4KTsKCiAgcHJpdmF0ZToKICAgIEV4Y2VwdGlvbkxpc3QgKiZwdHJfOwoKICAgIHZv aWQgb3BlcmF0b3I9IChjb25zdCBFeGNlcHRpb25MaXN0X3ZhciAmKTsKICB9OwoKCgoKICBleHRl cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRXhjZXB0aW9uTGlzdDsKCiAgdHlwZWRlZiBDT1JC QTo6U3RyaW5nU2VxIFJlcXVlc3RDb250ZXh0OwogIHR5cGVkZWYgQ09SQkE6OlN0cmluZ1NlcV92 YXIgUmVxdWVzdENvbnRleHRfdmFyOwogIHR5cGVkZWYgQ09SQkE6OlN0cmluZ1NlcV9vdXQgUmVx dWVzdENvbnRleHRfb3V0OwogICAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1JlcXVl c3RDb250ZXh0OwoKCn0KCgogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkg JiwgY29uc3QgRHluYW1pYzo6UGFyYW1ldGVyICYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8 PD0gKENPUkJBOjpBbnkgJiwgRHluYW1pYzo6UGFyYW1ldGVyKik7CiAgICAgICAgICAgQ09SQkE6 OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgRHluYW1pYzo6UGFyYW1l dGVyIComKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S QkE6OkFueSAmLCBjb25zdCBEeW5hbWljOjpQYXJhbWV0ZXIgKiYpOwogICAgICAgICAgIHZvaWQg b3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgRHluYW1pYzo6UGFyYW1ldGVyTGlzdCAm KTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIER5bmFtaWM6OlBh cmFtZXRlckxpc3QqKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29u c3QgQ09SQkE6OkFueSAmLCBEeW5hbWljOjpQYXJhbWV0ZXJMaXN0IComKTsKICAgICAgICAgICBD T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBEeW5h bWljOjpQYXJhbWV0ZXJMaXN0IComKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JC QTo6QW55ICYsIGNvbnN0IER5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgJik7CiAgICAgICAgICAgdm9p ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBEeW5hbWljOjpFeGNlcHRpb25MaXN0Kik7CiAg ICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwg RHluYW1pYzo6RXhjZXB0aW9uTGlzdCAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3Bl cmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgRHluYW1pYzo6RXhjZXB0aW9uTGlz dCAqJik7CiMgNDk1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL0R5bmFtaWNDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5pIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRHluYW1pY0MuaSIKaW5saW5lCkR5bmFtaWM6 OlBhcmFtZXRlcl92YXI6OlBhcmFtZXRlcl92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5s aW5lCkR5bmFtaWM6OlBhcmFtZXRlcl92YXI6OlBhcmFtZXRlcl92YXIgKFBhcmFtZXRlciAqcCkK ICA6IHB0cl8gKHApCnt9CgppbmxpbmUKRHluYW1pYzo6UGFyYW1ldGVyX3Zhcjo6UGFyYW1ldGVy X3ZhciAoY29uc3QgOjpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyICZwKQp7CiAgaWYgKHAucHRyXykK ICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkR5bmFtaWM6OlBhcmFtZXRlciAoKnAu cHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkg PSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8gPSAwOwp9 CgppbmxpbmUKRHluYW1pYzo6UGFyYW1ldGVyX3Zhcjo6flBhcmFtZXRlcl92YXIgKHZvaWQpCnsK ICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIER5bmFtaWM6OlBhcmFtZXRlcl92YXIgJgpE eW5hbWljOjpQYXJhbWV0ZXJfdmFyOjpvcGVyYXRvcj0gKFBhcmFtZXRlciAqcCkKewogIGRlbGV0 ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l IDo6RHluYW1pYzo6UGFyYW1ldGVyX3ZhciAmCkR5bmFtaWM6OlBhcmFtZXRlcl92YXI6Om9wZXJh dG9yPSAoY29uc3QgOjpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0g JnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxl dGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAg ZWxzZQogICAgICAgIHsKICAgICAgICAgIFBhcmFtZXRlciAqZGVlcF9jb3B5ID0KICAgICAgICAg ICAgbmV3IFBhcmFtZXRlciAoKnAucHRyXyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAw KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgUGFyYW1ldGVyICp0bXAgPSBkZWVwX2NvcHk7 CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlz LT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IDo6RHlu YW1pYzo6UGFyYW1ldGVyICoKRHluYW1pYzo6UGFyYW1ldGVyX3Zhcjo6b3BlcmF0b3ItPiAodm9p ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpEeW5hbWljOjpQYXJh bWV0ZXIgKgpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0 dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyOjpvcGVyYXRv ciBjb25zdCA6OkR5bmFtaWM6OlBhcmFtZXRlciAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+ cHRyXzsKfQoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlcl92YXI6Om9wZXJhdG9yIDo6RHluYW1p Yzo6UGFyYW1ldGVyICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKRHluYW1p Yzo6UGFyYW1ldGVyX3Zhcjo6b3BlcmF0b3IgOjpEeW5hbWljOjpQYXJhbWV0ZXIgJigpIGNvbnN0 CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUKRHluYW1pYzo6UGFyYW1ldGVyX3Zh cjo6b3BlcmF0b3IgOjpEeW5hbWljOjpQYXJhbWV0ZXIgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0 cl87Cn0KCmlubGluZSBjb25zdCA6OkR5bmFtaWM6OlBhcmFtZXRlciAmCkR5bmFtaWM6OlBhcmFt ZXRlcl92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgppbmxp bmUgOjpEeW5hbWljOjpQYXJhbWV0ZXIgJgpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyOjppbm91dCAo dm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OkR5bmFtaWM6OlBhcmFt ZXRlciAqJgpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhp cy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5l IDo6RHluYW1pYzo6UGFyYW1ldGVyICoKRHluYW1pYzo6UGFyYW1ldGVyX3Zhcjo6X3JldG4gKHZv aWQpCnsKICA6OkR5bmFtaWM6OlBhcmFtZXRlciAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5w dHJfID0gMDsKICByZXR1cm4gdG1wOwp9CgppbmxpbmUgOjpEeW5hbWljOjpQYXJhbWV0ZXIgKgpE eW5hbWljOjpQYXJhbWV0ZXJfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQoKCgoKCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJfb3V0OjpQYXJhbWV0ZXJfb3V0 ICg6OkR5bmFtaWM6OlBhcmFtZXRlciAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9 IDA7Cn0KCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJfb3V0OjpQYXJhbWV0ZXJfb3V0IChQYXJh bWV0ZXJfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsK ICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlcl9vdXQ6OlBhcmFt ZXRlcl9vdXQgKGNvbnN0IDo6RHluYW1pYzo6UGFyYW1ldGVyX291dCAmcCkKICA6IHB0cl8gKGNv bnN0X2Nhc3Q8UGFyYW1ldGVyX291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIER5bmFtaWM6OlBh cmFtZXRlcl9vdXQgJgpEeW5hbWljOjpQYXJhbWV0ZXJfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6 RHluYW1pYzo6UGFyYW1ldGVyX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFBh cmFtZXRlcl9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBEeW5hbWlj OjpQYXJhbWV0ZXJfb3V0ICYKRHluYW1pYzo6UGFyYW1ldGVyX291dDo6b3BlcmF0b3I9IChQYXJh bWV0ZXIgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpE eW5hbWljOjpQYXJhbWV0ZXJfb3V0OjpvcGVyYXRvciA6OkR5bmFtaWM6OlBhcmFtZXRlciAqJigp CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6RHluYW1pYzo6UGFyYW1ldGVyICom CkR5bmFtaWM6OlBhcmFtZXRlcl9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJf Owp9CgppbmxpbmUgOjpEeW5hbWljOjpQYXJhbWV0ZXIgKgpEeW5hbWljOjpQYXJhbWV0ZXJfb3V0 OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KIyAyMjIgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRHluYW1pY0MuaSIK ICBpbmxpbmUgRHluYW1pYzo6UGFyYW1ldGVyICoKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9T ZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6 ZSkKCiAgewogICAgRHluYW1pYzo6UGFyYW1ldGVyICpyZXR2YWwgPSAwOwogICAgZG8geyB0cnkg eyByZXR2YWwgPSBuZXcgRHluYW1pYzo6UGFyYW1ldGVyW3NpemVdOyB9IGNhdGNoIChzdGQ6OmJh ZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hp bGUgKDApOwogICAgcmV0dXJuIHJldHZhbDsKICB9CgogIGlubGluZSB2b2lkIER5bmFtaWM6Ol9U QU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdDo6ZnJlZWJ1ZiAoRHlu YW1pYzo6UGFyYW1ldGVyICpidWZmZXIpCgogIHsKICAgIGRlbGV0ZSBbXSBidWZmZXI7CiAgfQoK ICBpbmxpbmUKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFt ZXRlckxpc3Q6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdCAo dm9pZCkKICB7CiAgfQoKICBpbmxpbmUKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5j ZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNf UGFyYW1ldGVyTGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgICA6IFRBT19VbmJvdW5kZWRf QmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19Q YXJhbWV0ZXJMaXN0OjphbGxvY2J1ZiAobWF4aW11bSkpCiAgewogIH0KCiAgaW5saW5lCiAgRHlu YW1pYzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0OjpfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3QgKENPUkJBOjpVTG9uZyBt YXhpbXVtLAogICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgIER5bmFtaWM6OlBhcmFtZXRlciAq ZGF0YSwKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2Vf U2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkKICB7CiAgfQoKICBpbmxp bmUKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxp c3Q6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdCAoY29uc3Qg X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0ICZyaHMpCgogICAg OiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJocykKICB7CiAgICBpZiAocmhzLmJ1ZmZl cl8gIT0gMCkKICAgIHsKICAgICAgRHluYW1pYzo6UGFyYW1ldGVyICp0bXAxID0gX1RBT19VbmJv dW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0OjphbGxvY2J1ZiAodGhpcy0+bWF4 aW11bV8pOwogICAgICBEeW5hbWljOjpQYXJhbWV0ZXIgKiBjb25zdCB0bXAyID0gcmVpbnRlcnBy ZXRfY2FzdDxEeW5hbWljOjpQYXJhbWV0ZXIgKj4gKHJocy5idWZmZXJfKTsKCiAgICAgIGZvciAo Q09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICAgIHRtcDFb aV0gPSB0bXAyW2ldOwoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgICBlbHNl CiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgfQogIH0KCiAgaW5saW5lIER5bmFt aWM6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdCAmCiAgRHlu YW1pYzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0OjpvcGVy YXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlz dCAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1cm4gKnRoaXM7Cgog ICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCBy aHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgRHluYW1pYzo6UGFyYW1ldGVyICp0bXAgPSBy ZWludGVycHJldF9jYXN0PER5bmFtaWM6OlBhcmFtZXRlciAqPiAodGhpcy0+YnVmZmVyXyk7CiAg ICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0OjpmcmVl YnVmICh0bXApOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5j ZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgICB9 CiAgICB9CiAgICBlbHNlCiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1 ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICAg IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICAgIER5bmFt aWM6OlBhcmFtZXRlciAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RHluYW1pYzo6UGFyYW1ldGVy ICo+ICh0aGlzLT5idWZmZXJfKTsKICAgIER5bmFtaWM6OlBhcmFtZXRlciAqIGNvbnN0IHRtcDIg PSByZWludGVycHJldF9jYXN0PER5bmFtaWM6OlBhcmFtZXRlciAqPiAocmhzLmJ1ZmZlcl8pOwoK ICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAg ICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIER5 bmFtaWM6OlBhcmFtZXRlciAmCiAgRHluYW1pYzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHlu YW1pY19QYXJhbWV0ZXJMaXN0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkKCiAgewogICAg ZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09T OjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3Rh bmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vRHluYW1pY0MuaSIsIDMxNCwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18t PnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNr ICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAl bCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwg LTEpOyB9IH0gd2hpbGUgKDApOwogICAgRHluYW1pYzo6UGFyYW1ldGVyKiB0bXAgPSByZWludGVy cHJldF9jYXN0PER5bmFtaWM6OlBhcmFtZXRlcio+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVy biB0bXBbaV07CiAgfQoKICBpbmxpbmUgY29uc3QgRHluYW1pYzo6UGFyYW1ldGVyICYKICBEeW5h bWljOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6Om9wZXJh dG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25zdAoKICB7CiAgICBkbyB7IGlmKCEoaSA8IHRoaXMt Pm1heGltdW1fKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFD RV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0 ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5h bWljQy5pIiwgMzIzLCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19f LT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAo TE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQg Zm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7 CiAgICBEeW5hbWljOjpQYXJhbWV0ZXIgKiBjb25zdCB0bXAgPSByZWludGVycHJldF9jYXN0PER5 bmFtaWM6OlBhcmFtZXRlcio+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVybiB0bXBbaV07CiAg fQoKCgogIGlubGluZSBEeW5hbWljOjpQYXJhbWV0ZXIgKgogIER5bmFtaWM6Ol9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdDo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJv b2xlYW4gb3JwaGFuKQogIHsKICAgIER5bmFtaWM6OlBhcmFtZXRlciAqcmVzdWx0ID0gMDsKICAg IGlmIChvcnBoYW4gPT0gMCkKICAgIHsKCiAgICAgIGlmICh0aGlzLT5idWZmZXJfID09IDApCiAg ICAgIHsKICAgICAgICByZXN1bHQgPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1Bh cmFtZXRlckxpc3Q6OmFsbG9jYnVmICh0aGlzLT5sZW5ndGhfKTsKICAgICAgICB0aGlzLT5idWZm ZXJfID0gcmVzdWx0OwogICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAgfQogICAgICBl bHNlCiAgICAgIHsKICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PER5bmFtaWM6OlBh cmFtZXRlcio+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewog ICAgICBpZiAodGhpcy0+cmVsZWFzZV8gIT0gMCkKICAgICAgewoKCiAgICAgICAgcmVzdWx0ID0g cmVpbnRlcnByZXRfY2FzdDxEeW5hbWljOjpQYXJhbWV0ZXIqPiAodGhpcy0+YnVmZmVyXyk7CiAg ICAgICAgdGhpcy0+bWF4aW11bV8gPSAwOwogICAgICAgIHRoaXMtPmxlbmd0aF8gPSAwOwogICAg ICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMDsKICAgICAg fQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGlubGluZSBjb25zdCBEeW5hbWljOjpQ YXJhbWV0ZXIgKgogIER5bmFtaWM6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFy YW1ldGVyTGlzdDo6Z2V0X2J1ZmZlciAodm9pZCkgY29uc3QKICB7CiAgICByZXR1cm4gcmVpbnRl cnByZXRfY2FzdDxjb25zdCBEeW5hbWljOjpQYXJhbWV0ZXIgKj4gKHRoaXMtPmJ1ZmZlcl8pOwog IH0KCiAgaW5saW5lIHZvaWQKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5h bWljX1BhcmFtZXRlckxpc3Q6OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgQ09SQkE6OlVM b25nIGxlbmd0aCwKICBEeW5hbWljOjpQYXJhbWV0ZXIgKmRhdGEsCiAgQ09SQkE6OkJvb2xlYW4g cmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAgIHRoaXMtPmxlbmd0aF8g PSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQog ICAgewogICAgICBEeW5hbWljOjpQYXJhbWV0ZXIgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RHlu YW1pYzo6UGFyYW1ldGVyKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICBfVEFPX1VuYm91bmRlZF9T ZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6OmZyZWVidWYgKHRtcCk7CiAgICB9CiAgICB0 aGlzLT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVsZWFzZTsKICB9CiMg Mzk5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0R5 bmFtaWNDLmkiCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6UGFyYW1ldGVyTGlz dF92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlckxp c3RfdmFyOjpQYXJhbWV0ZXJMaXN0X3ZhciAoUGFyYW1ldGVyTGlzdCAqcCkKICA6IHB0cl8gKHAp Cnt9CgppbmxpbmUKRHluYW1pYzo6UGFyYW1ldGVyTGlzdF92YXI6OlBhcmFtZXRlckxpc3RfdmFy IChjb25zdCA6OkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFyICZwKQp7CiAgaWYgKHAucHRyXykK ICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkR5bmFtaWM6OlBhcmFtZXRlckxpc3Qg KCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24g KCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0g MDsKfQoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFyOjp+UGFyYW1ldGVyTGlzdF92 YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIER5bmFtaWM6OlBhcmFt ZXRlckxpc3RfdmFyICYKRHluYW1pYzo6UGFyYW1ldGVyTGlzdF92YXI6Om9wZXJhdG9yPSAoUGFy YW1ldGVyTGlzdCAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwog IHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6RHluYW1pYzo6UGFyYW1ldGVyTGlzdF92YXIgJgpE eW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OkR5bmFtaWM6OlBh cmFtZXRlckxpc3RfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChw LnB0cl8gPT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAg ICAgIHRoaXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAg ICAgIFBhcmFtZXRlckxpc3QgKmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJM aXN0ICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBQYXJhbWV0ZXJMaXN0ICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAg ICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0g dG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IDo6RHluYW1pYzo6UGFy YW1ldGVyTGlzdCAqCkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFyOjpvcGVyYXRvci0+ICh2b2lk KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkR5bmFtaWM6OlBhcmFt ZXRlckxpc3QgKgpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkK ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKRHluYW1pYzo6UGFyYW1ldGVyTGlzdF92 YXI6Om9wZXJhdG9yIGNvbnN0IDo6RHluYW1pYzo6UGFyYW1ldGVyTGlzdCAmKCkgY29uc3QKewog IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFy OjpvcGVyYXRvciA6OkR5bmFtaWM6OlBhcmFtZXRlckxpc3QgJigpCnsKICByZXR1cm4gKnRoaXMt PnB0cl87Cn0KCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6b3BlcmF0b3IgOjpE eW5hbWljOjpQYXJhbWV0ZXJMaXN0ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9 CgoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFyOjpvcGVyYXRvciA6OkR5bmFtaWM6 OlBhcmFtZXRlckxpc3QgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBEeW5h bWljOjpQYXJhbWV0ZXIgJgpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6b3BlcmF0b3JbXSAo Q09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGlu ZGV4KTsKfQoKaW5saW5lIGNvbnN0IER5bmFtaWM6OlBhcmFtZXRlciAmCkR5bmFtaWM6OlBhcmFt ZXRlckxpc3RfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpIGNvbnN0CnsKICBy ZXR1cm4gY29uc3RfY2FzdDxjb25zdCBEeW5hbWljOjpQYXJhbWV0ZXIgJj4gKHRoaXMtPnB0cl8t Pm9wZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGluZSBjb25zdCA6OkR5bmFtaWM6OlBhcmFtZXRl ckxpc3QgJgpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICBy ZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkR5bmFtaWM6OlBhcmFtZXRlckxpc3QgJgpE eW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMt PnB0cl87Cn0KCgppbmxpbmUgOjpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0IComCkR5bmFtaWM6OlBh cmFtZXRlckxpc3RfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlz LT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6RHluYW1pYzo6UGFy YW1ldGVyTGlzdCAqCkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFyOjpfcmV0biAodm9pZCkKewog IDo6RHluYW1pYzo6UGFyYW1ldGVyTGlzdCAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJf ID0gMDsKICByZXR1cm4gdG1wOwp9CgppbmxpbmUgOjpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0ICoK RHluYW1pYzo6UGFyYW1ldGVyTGlzdF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlckxpc3Rfb3V0OjpQYXJh bWV0ZXJMaXN0X291dCAoUGFyYW1ldGVyTGlzdCAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+ cHRyXyA9IDA7Cn0KCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X291dDo6UGFyYW1ldGVy TGlzdF9vdXQgKFBhcmFtZXRlckxpc3RfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBk ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkR5bmFtaWM6OlBh cmFtZXRlckxpc3Rfb3V0OjpQYXJhbWV0ZXJMaXN0X291dCAoY29uc3QgOjpEeW5hbWljOjpQYXJh bWV0ZXJMaXN0X291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8UGFyYW1ldGVyTGlzdF9vdXQm PiAocCkucHRyXykKe30KCmlubGluZSA6OkR5bmFtaWM6OlBhcmFtZXRlckxpc3Rfb3V0ICYKRHlu YW1pYzo6UGFyYW1ldGVyTGlzdF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpEeW5hbWljOjpQYXJh bWV0ZXJMaXN0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFBhcmFtZXRlckxp c3Rfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpEeW5hbWljOjpQ YXJhbWV0ZXJMaXN0X291dCAmCkR5bmFtaWM6OlBhcmFtZXRlckxpc3Rfb3V0OjpvcGVyYXRvcj0g KFBhcmFtZXRlckxpc3QgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0K CmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X291dDo6b3BlcmF0b3IgOjpEeW5hbWljOjpQ YXJhbWV0ZXJMaXN0IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpEeW5h bWljOjpQYXJhbWV0ZXJMaXN0IComCkR5bmFtaWM6OlBhcmFtZXRlckxpc3Rfb3V0OjpwdHIgKHZv aWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6RHluYW1pYzo6UGFyYW1ldGVy TGlzdCAqCkR5bmFtaWM6OlBhcmFtZXRlckxpc3Rfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAg cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBEeW5hbWljOjpQYXJhbWV0ZXIgJgpEeW5hbWlj OjpQYXJhbWV0ZXJMaXN0X291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAg cmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDYxNSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5pIgogIGlu bGluZSBDT1JCQTo6VHlwZUNvZGUgKioKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9PYmplY3Rf U2VxdWVuY2VfRHluYW1pY19FeGNlcHRpb25MaXN0OjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIG5l bGVtcykKICB7CiAgICBDT1JCQTo6VHlwZUNvZGUgKipidWYgPSAwOwoKICAgIGRvIHsgdHJ5IHsg YnVmID0gbmV3IENPUkJBOjpUeXBlQ29kZSpbbmVsZW1zXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxs b2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgw KTsKCiAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IG5lbGVtczsgaSsrKQogICAgICB7 CiAgICAgICAgYnVmW2ldID0gQ09SQkE6OlR5cGVDb2RlOjpfbmlsICgpOwogICAgICB9CgogICAg cmV0dXJuIGJ1ZjsKICB9CgogIGlubGluZSB2b2lkCiAgRHluYW1pYzo6X1RBT19VbmJvdW5kZWRf T2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdDo6ZnJlZWJ1ZiAoQ09SQkE6OlR5 cGVDb2RlICoqYnVmZmVyKQogIHsKICAgIGlmIChidWZmZXIgPT0gMCkKICAgICAgcmV0dXJuOwog ICAgZGVsZXRlW10gYnVmZmVyOwogIH0KCiAgaW5saW5lCiAgRHluYW1pYzo6X1RBT19VbmJvdW5k ZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdDo6X1RBT19VbmJvdW5kZWRf T2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdCAodm9pZCkKICB7CiAgfQoKICBp bmxpbmUKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1pY19F eGNlcHRpb25MaXN0OjpfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1pY19FeGNl cHRpb25MaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSkKICAgIDogVEFPX1VuYm91bmRlZF9CYXNl X1NlcXVlbmNlIChtYXhpbXVtLCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1p Y19FeGNlcHRpb25MaXN0OjphbGxvY2J1ZiAobWF4aW11bSkpCiAgewogIH0KCiAgaW5saW5lCiAg RHluYW1pYzo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9u TGlzdDo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlz dCAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgQ09S QkE6OlR5cGVDb2RlKiAqdmFsdWUsCiAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKQogIDogVEFP X1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBsZW5ndGgsIHZhbHVlLCByZWxlYXNl KQogIHsKICB9CgogIGlubGluZQogIER5bmFtaWM6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1 ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3Q6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5j ZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3QoY29uc3QgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVl bmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdCAmcmhzKQogICAgOiBUQU9fVW5ib3VuZGVkX0Jhc2Vf U2VxdWVuY2UgKHJocykKICB7CiAgICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAg Q09SQkE6OlR5cGVDb2RlICoqdG1wMSA9IF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9E eW5hbWljX0V4Y2VwdGlvbkxpc3Q6OmFsbG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CiAgICAgIENP UkJBOjpUeXBlQ29kZSAqKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6VHlw ZUNvZGUgKio+IChyaHMuYnVmZmVyXyk7CgogICAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsg aSA8IHJocy5sZW5ndGhfOyArK2kpCiAgICAgICAgewogICAgICAgICAgdG1wMVtpXSA9IENPUkJB OjpUeXBlQ29kZTo6X2R1cGxpY2F0ZSAodG1wMltpXSk7CiAgICAgICAgfQoKICAgICAgdGhpcy0+ YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8g PSAwOwogICAgfQogIH0KCiAgaW5saW5lIER5bmFtaWM6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9T ZXF1ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3QgJgogIER5bmFtaWM6Ol9UQU9fVW5ib3VuZGVk X09iamVjdF9TZXF1ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3Q6Om9wZXJhdG9yPSAoY29uc3Qg X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdCAmcmhz KQogIHsKICAgIGlmICh0aGlzID09ICZyaHMpCiAgICAgIHJldHVybiAqdGhpczsKCiAgICBpZiAo dGhpcy0+cmVsZWFzZV8pCiAgICB7CiAgICAgIENPUkJBOjpUeXBlQ29kZSAqKnRtcCA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Q09SQkE6OlR5cGVDb2RlICoqPiAodGhpcy0+YnVmZmVyXyk7CgogICAgICBm b3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgewog ICAgICAgIENPUkJBOjpyZWxlYXNlICh0bXBbaV0pOwogICAgICAgIHRtcFtpXSA9IENPUkJBOjpU eXBlQ29kZTo6X25pbCAoKTsKICAgICAgfQogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMu bWF4aW11bV8pCiAgICAgIHsKICAgICAgICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2Vf RHluYW1pY19FeGNlcHRpb25MaXN0OjpmcmVlYnVmICh0bXApOwogICAgICAgIHRoaXMtPmJ1ZmZl cl8gPSBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1pY19FeGNlcHRpb25MaXN0 OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgICB0 aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhj ZXB0aW9uTGlzdDo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CgogICAgVEFPX1VuYm91bmRlZF9C YXNlX1NlcXVlbmNlOjpvcGVyYXRvcj0gKHJocyk7CgogICAgQ09SQkE6OlR5cGVDb2RlICoqdG1w MSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlR5cGVDb2RlICoqPiAodGhpcy0+YnVmZmVyXyk7 CiAgICBDT1JCQTo6VHlwZUNvZGUgKiogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09S QkE6OlR5cGVDb2RlICoqPiAocmhzLmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkg PSAwOyBpIDwgcmhzLmxlbmd0aF87ICsraSkKICAgICAgewogICAgICAgIHRtcDFbaV0gPSBDT1JC QTo6VHlwZUNvZGU6Ol9kdXBsaWNhdGUgKHRtcDJbaV0pOwogICAgICB9CgogICAgcmV0dXJuICp0 aGlzOwogIH0KCiAgaW5saW5lIFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8RHluYW1pYzo6VHlw ZUNvZGUsRHluYW1pYzo6VHlwZUNvZGVfdmFyPgogIER5bmFtaWM6Ol9UQU9fVW5ib3VuZGVkX09i amVjdF9TZXF1ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3Q6Om9wZXJhdG9yW10gKENPUkJBOjpV TG9uZyBpbmRleCkgY29uc3QKCiAgewogICAgZG8geyBpZighKGluZGV4IDwgdGhpcy0+bWF4aW11 bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19N c2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0R5bmFtaWNDLmki LCA3MjEsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19v c3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJP UiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVz Jy4lYVxuIiwgImluZGV4IDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAg ICBDT1JCQTo6VHlwZUNvZGUgKiogY29uc3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6 VHlwZUNvZGUgKio+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVybiBUQU9fUHNldWRvX09iamVj dF9NYW5hZ2VyPER5bmFtaWM6OlR5cGVDb2RlLER5bmFtaWM6OlR5cGVDb2RlX3Zhcj4gKHRtcCAr IGluZGV4LCB0aGlzLT5yZWxlYXNlXyk7CiAgfQoKICBpbmxpbmUgQ09SQkE6OlR5cGVDb2RlKiAq CiAgRHluYW1pYzo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0 aW9uTGlzdDo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQogIHsKICAgIENPUkJB OjpUeXBlQ29kZSAqKnJlc3VsdCA9IDA7CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAg ICBpZiAodGhpcy0+YnVmZmVyXyA9PSAwKQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19V bmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdDo6YWxsb2NidWYg KHRoaXMtPm1heGltdW1fKTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gcmVzdWx0OwogICAgICAg IHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICBy ZXN1bHQgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpUeXBlQ29kZSoqPiAodGhpcy0+YnVmZmVy Xyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVhc2Vf ICE9IDApCiAgICAgIHsKCgogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6 OlR5cGVDb2RlKio+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICB0aGlzLT5tYXhpbXVtXyA9IDA7 CiAgICAgICAgdGhpcy0+bGVuZ3RoXyA9IDA7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAg ICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0 OwogIH0KCiAgaW5saW5lIGNvbnN0IENPUkJBOjpUeXBlQ29kZSogKgogIER5bmFtaWM6Ol9UQU9f VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3Q6OmdldF9idWZm ZXIgKHZvaWQpIGNvbnN0CiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ09S QkE6OlR5cGVDb2RlICoqPiAodGhpcy0+YnVmZmVyXyk7CiAgfQojIDc3OSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5pIgppbmxpbmUK RHluYW1pYzo6RXhjZXB0aW9uTGlzdF92YXI6OkV4Y2VwdGlvbkxpc3RfdmFyICh2b2lkKQogIDog cHRyXyAoMCkKe30KCmlubGluZQpEeW5hbWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6RXhjZXB0aW9u TGlzdF92YXIgKEV4Y2VwdGlvbkxpc3QgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCkR5bmFt aWM6OkV4Y2VwdGlvbkxpc3RfdmFyOjpFeGNlcHRpb25MaXN0X3ZhciAoY29uc3QgOjpEeW5hbWlj OjpFeGNlcHRpb25MaXN0X3ZhciAmcCkKewogIGlmIChwLnB0cl8pCiAgICBkbyB7IHRyeSB7IHRo aXMtPnB0cl8gPSBuZXcgOjpEeW5hbWljOjpFeGNlcHRpb25MaXN0ICgqcC5wdHJfKTsgfSBjYXRj aCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47 IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpEeW5h bWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6fkV4Y2VwdGlvbkxpc3RfdmFyICh2b2lkKQp7CiAgZGVs ZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBEeW5hbWljOjpFeGNlcHRpb25MaXN0X3ZhciAmCkR5 bmFtaWM6OkV4Y2VwdGlvbkxpc3RfdmFyOjpvcGVyYXRvcj0gKEV4Y2VwdGlvbkxpc3QgKnApCnsK ICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0K CmlubGluZSA6OkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3RfdmFyICYKRHluYW1pYzo6RXhjZXB0aW9u TGlzdF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpEeW5hbWljOjpFeGNlcHRpb25MaXN0X3ZhciAm cCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAg ICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0g MDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBFeGNlcHRpb25MaXN0 ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgRXhjZXB0aW9uTGlzdCAoKnAucHRyXyk7Cgog ICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg RXhjZXB0aW9uTGlzdCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9 IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAg ICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1 cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgKgpEeW5h bWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVy biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpEeW5hbWljOjpFeGNlcHRpb25MaXN0ICoKRHluYW1p Yzo6RXhjZXB0aW9uTGlzdF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQoKaW5saW5lCkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3RfdmFyOjpvcGVyYXRvciBjb25z dCA6OkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0 cl87Cn0KCmlubGluZQpEeW5hbWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6b3BlcmF0b3IgOjpEeW5h bWljOjpFeGNlcHRpb25MaXN0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUK RHluYW1pYzo6RXhjZXB0aW9uTGlzdF92YXI6Om9wZXJhdG9yIDo6RHluYW1pYzo6RXhjZXB0aW9u TGlzdCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpEeW5hbWlj OjpFeGNlcHRpb25MaXN0X3Zhcjo6b3BlcmF0b3IgOjpEeW5hbWljOjpFeGNlcHRpb25MaXN0ICom KCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFPX1BzZXVkb19PYmplY3RfTWFu YWdlcjxEeW5hbWljOjpUeXBlQ29kZSxEeW5hbWljOjpUeXBlQ29kZV92YXI+CkR5bmFtaWM6OkV4 Y2VwdGlvbkxpc3RfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1 cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3QgOjpEeW5h bWljOjpFeGNlcHRpb25MaXN0ICYKRHluYW1pYzo6RXhjZXB0aW9uTGlzdF92YXI6OmluICh2b2lk KSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpEeW5hbWljOjpFeGNl cHRpb25MaXN0ICYKRHluYW1pYzo6RXhjZXB0aW9uTGlzdF92YXI6Omlub3V0ICh2b2lkKQp7CiAg cmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6RHluYW1pYzo6RXhjZXB0aW9uTGlzdCAq JgpEeW5hbWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMt PnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6 OkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgKgpEeW5hbWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6X3Jl dG4gKHZvaWQpCnsKICA6OkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgKnRtcCA9IHRoaXMtPnB0cl87 CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6RHluYW1pYzo6RXhj ZXB0aW9uTGlzdCAqCkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3RfdmFyOjpwdHIgKHZvaWQpIGNvbnN0 CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpEeW5hbWljOjpFeGNlcHRpb25M aXN0X291dDo6RXhjZXB0aW9uTGlzdF9vdXQgKEV4Y2VwdGlvbkxpc3QgKiZwKQogIDogcHRyXyAo cCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKRHluYW1pYzo6RXhjZXB0aW9uTGlzdF9v dXQ6OkV4Y2VwdGlvbkxpc3Rfb3V0IChFeGNlcHRpb25MaXN0X3ZhciAmcCkKICA6IHB0cl8gKHAu b3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGlu ZQpEeW5hbWljOjpFeGNlcHRpb25MaXN0X291dDo6RXhjZXB0aW9uTGlzdF9vdXQgKGNvbnN0IDo6 RHluYW1pYzo6RXhjZXB0aW9uTGlzdF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PEV4Y2Vw dGlvbkxpc3Rfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgOjpEeW5hbWljOjpFeGNlcHRpb25M aXN0X291dCAmCkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3Rfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6 RHluYW1pYzo6RXhjZXB0aW9uTGlzdF9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3RfY2Fz dDxFeGNlcHRpb25MaXN0X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l IDo6RHluYW1pYzo6RXhjZXB0aW9uTGlzdF9vdXQgJgpEeW5hbWljOjpFeGNlcHRpb25MaXN0X291 dDo6b3BlcmF0b3I9IChFeGNlcHRpb25MaXN0ICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0 dXJuICp0aGlzOwp9CgppbmxpbmUKRHluYW1pYzo6RXhjZXB0aW9uTGlzdF9vdXQ6Om9wZXJhdG9y IDo6RHluYW1pYzo6RXhjZXB0aW9uTGlzdCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK aW5saW5lIDo6RHluYW1pYzo6RXhjZXB0aW9uTGlzdCAqJgpEeW5hbWljOjpFeGNlcHRpb25MaXN0 X291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkR5bmFt aWM6OkV4Y2VwdGlvbkxpc3QgKgpEeW5hbWljOjpFeGNlcHRpb25MaXN0X291dDo6b3BlcmF0b3It PiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFPX1BzZXVkb19PYmpl Y3RfTWFuYWdlcjxEeW5hbWljOjpUeXBlQ29kZSxEeW5hbWljOjpUeXBlQ29kZV92YXI+CkR5bmFt aWM6OkV4Y2VwdGlvbkxpc3Rfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsK ICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CgoKCgppbmxpbmUgQ09S QkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgRHluYW1p Yzo6UGFyYW1ldGVyICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtIDw8IF90YW9f YWdncmVnYXRlLmFyZ3VtZW50KSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUubW9kZSkK ICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JCQTo6 Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIER5bmFtaWM6OlBhcmFtZXRl ciAmX3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5h cmd1bWVudCkgJiYKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLm1vZGUpCiAgKQogICAgcmV0 dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgoKCgoKQ09SQkE6OkJvb2xlYW4gb3BlcmF0 b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBEeW5hbWljOjpQYXJhbWV0ZXJM aXN0ICYKICApOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAm LAogICAgRHluYW1pYzo6UGFyYW1ldGVyTGlzdCAmCiAgKTsKCgoKCgoKCkNPUkJBOjpCb29sZWFu IG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgRHluYW1pYzo6RXhj ZXB0aW9uTGlzdCAmCiAgKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5w dXRDRFIgJiwKICAgIER5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgJgogICk7CiMgNDk2ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0R5bmFtaWNDLmgiIDIK IyA1MDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v RHluYW1pY0MuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvcG9zdC5oIiAxCiMgNTA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL0R5bmFtaWNDLmgiIDIKIyAzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5oIiAyCiMg MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNz YWdpbmdDLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIiAyCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9vcmJjb25mLmgiIDEKIyAy NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNz YWdpbmdDLmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL2NvcmJhZndkLmgiIDEKIyAzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiIDIKCgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVCYXNlLmgiIDEK IyAzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9N ZXNzYWdpbmdDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1ZhbHVlRmFjdG9yeS5oIiAxCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIiAyCgoKCgoKCiMgMSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fRXhw b3J0LmgiIDEKIyA0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9NZXNzYWdpbmdDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5oIiAxCiMgNDMgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIiAyCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DRFIuaCIgMQojIDQ0 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3Nh Z2luZ0MuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vUmVtb3RlX09iamVjdF9Qcm94eV9JbXBsLmgiIDEKIyA0NSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiIDIKIyAx ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVC YXNlQy5oIiAxCiMgNDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vTWVzc2FnaW5nQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIiAyCiMgMSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fRXhw b3J0LmgiIDEKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9JT1BDLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vQW55LmgiIDEKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdC5oIiAxCiMgMzQgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIiAy CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9F eGNlcHRpb24uaCIgMQojIDM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL0lPUEMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vQ0RSLmgiIDEKIyAzNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDEKIyAzNyAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgi IDIKIyA2MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9JT1BDLmgiCm5hbWVzcGFjZSBJT1AKewogIHR5cGVkZWYgQ09SQkE6OlVMb25nIFByb2ZpbGVJ ZDsKICB0eXBlZGVmIENPUkJBOjpVTG9uZ19vdXQgUHJvZmlsZUlkX291dDsKICAgIGV4dGVybiBD T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Qcm9maWxlSWQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6 VUxvbmcgVEFHX0lOVEVSTkVUX0lPUDsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBUQUdf TVVMVElQTEVfQ09NUE9ORU5UUzsKCiAgc3RydWN0IFRhZ2dlZFByb2ZpbGU7CiAgY2xhc3MgVGFn Z2VkUHJvZmlsZV92YXI7CgogIHN0cnVjdCBUYWdnZWRQcm9maWxlCiAgewoKCiAgICB0eXBlZGVm IFRhZ2dlZFByb2ZpbGVfdmFyIF92YXJfdHlwZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlf ZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIElPUDo6UHJvZmlsZUlkIHRhZzsKCgoKCiAgICBjbGFz cyBfdGFvX3NlcV9PY3RldDsKICAgIGNsYXNzIF90YW9fc2VxX09jdGV0X3ZhcjsKCgoKCgogICAg Y2xhc3MgX3Rhb19zZXFfT2N0ZXQgOiBwdWJsaWMKCiAgICAgIFRBT19VbmJvdW5kZWRfU2VxdWVu Y2U8Q09SQkE6Ok9jdGV0PgoKCgogICAgewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9PY3Rl dCAodm9pZCk7CiAgICAgIF90YW9fc2VxX09jdGV0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAg X3Rhb19zZXFfT2N0ZXQgKAogICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgQ09SQkE6 OlVMb25nIGxlbmd0aCwKICAgICAgICBDT1JCQTo6T2N0ZXQgKmJ1ZmZlciwKICAgICAgICBDT1JC QTo6Qm9vbGVhbiByZWxlYXNlID0gMAogICAgICApOwogICAgICBfdGFvX3NlcV9PY3RldCAoY29u c3QgX3Rhb19zZXFfT2N0ZXQgJik7CiAgICAgIH5fdGFvX3NlcV9PY3RldCAodm9pZCk7CiAgICAg IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgICB0eXBlZGVm IF90YW9fc2VxX09jdGV0X3ZhciBfdmFyX3R5cGU7CgoKCgogICAgICBfdGFvX3NlcV9PY3RldCAo CiAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgY29uc3QgQUNFX01lc3Nh Z2VfQmxvY2sqIG1iCiAgICAgICAgKQogICAgICAgIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxD T1JCQTo6T2N0ZXQ+IChsZW5ndGgsIG1iKSB7fQoKCiAgICB9OwoKCgoKICAgIHR5cGVkZWYgX3Rh b19zZXFfT2N0ZXQgX3Byb2ZpbGVfZGF0YV9zZXE7CgoKICAgICAgICAgIF90YW9fc2VxX09jdGV0 IHByb2ZpbGVfZGF0YTsKICB9OwoKICBjbGFzcyBUYWdnZWRQcm9maWxlX3ZhcgogIHsKICBwdWJs aWM6CiAgICBUYWdnZWRQcm9maWxlX3ZhciAodm9pZCk7CiAgICBUYWdnZWRQcm9maWxlX3ZhciAo VGFnZ2VkUHJvZmlsZSAqKTsKICAgIFRhZ2dlZFByb2ZpbGVfdmFyIChjb25zdCBUYWdnZWRQcm9m aWxlX3ZhciAmKTsKICAgIH5UYWdnZWRQcm9maWxlX3ZhciAodm9pZCk7CgogICAgVGFnZ2VkUHJv ZmlsZV92YXIgJm9wZXJhdG9yPSAoVGFnZ2VkUHJvZmlsZSAqKTsKICAgIFRhZ2dlZFByb2ZpbGVf dmFyICZvcGVyYXRvcj0gKGNvbnN0IFRhZ2dlZFByb2ZpbGVfdmFyICYpOwogICAgVGFnZ2VkUHJv ZmlsZSAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBUYWdnZWRQcm9maWxlICpvcGVyYXRv ci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBUYWdnZWRQcm9maWxlICYoKSBj b25zdDsKICAgIG9wZXJhdG9yIFRhZ2dlZFByb2ZpbGUgJigpOwogICAgb3BlcmF0b3IgVGFnZ2Vk UHJvZmlsZSAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBUYWdnZWRQcm9maWxlIComKCk7CgoKICAg IGNvbnN0IFRhZ2dlZFByb2ZpbGUgJmluICh2b2lkKSBjb25zdDsKICAgIFRhZ2dlZFByb2ZpbGUg Jmlub3V0ICh2b2lkKTsKICAgIFRhZ2dlZFByb2ZpbGUgKiZvdXQgKHZvaWQpOwogICAgVGFnZ2Vk UHJvZmlsZSAqX3JldG4gKHZvaWQpOwogICAgVGFnZ2VkUHJvZmlsZSAqcHRyICh2b2lkKSBjb25z dDsKCiAgcHJpdmF0ZToKICAgIFRhZ2dlZFByb2ZpbGUgKnB0cl87CiAgfTsKCiAgY2xhc3MgVGFn Z2VkUHJvZmlsZV9vdXQKICB7CiAgcHVibGljOgogICAgVGFnZ2VkUHJvZmlsZV9vdXQgKFRhZ2dl ZFByb2ZpbGUgKiYpOwogICAgVGFnZ2VkUHJvZmlsZV9vdXQgKFRhZ2dlZFByb2ZpbGVfdmFyICYp OwogICAgVGFnZ2VkUHJvZmlsZV9vdXQgKGNvbnN0IFRhZ2dlZFByb2ZpbGVfb3V0ICYpOwogICAg VGFnZ2VkUHJvZmlsZV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgVGFnZ2VkUHJvZmlsZV9vdXQgJik7 CiAgICBUYWdnZWRQcm9maWxlX291dCAmb3BlcmF0b3I9IChUYWdnZWRQcm9maWxlICopOwogICAg b3BlcmF0b3IgVGFnZ2VkUHJvZmlsZSAqJigpOwogICAgVGFnZ2VkUHJvZmlsZSAqJnB0ciAodm9p ZCk7CiAgICBUYWdnZWRQcm9maWxlICpvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAg IFRhZ2dlZFByb2ZpbGUgKiZwdHJfOwoKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBUYWdnZWRQ cm9maWxlX3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVGFn Z2VkUHJvZmlsZTsKCiAgc3RydWN0IElPUjsKICBjbGFzcyBJT1JfdmFyOwoKICBzdHJ1Y3QgSU9S CiAgewoKCiAgICB0eXBlZGVmIElPUl92YXIgX3Zhcl90eXBlOwoKCiAgICBzdGF0aWMgdm9pZCBf dGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgVEFPX1N0cmluZ19NYW5hZ2VyIHR5cGVf aWQ7CgoKCgoKCiAgICAgIGNsYXNzIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rh b19zZXFfVGFnZ2VkUHJvZmlsZSA6IHB1YmxpYyBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UK ICAgICAgewogICAgICBwdWJsaWM6CgoKICAgICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9J T1BfSU9SX190YW9fc2VxX1RhZ2dlZFByb2ZpbGUgKHZvaWQpOwogICAgICAgIF9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAoQ09SQkE6OlVMb25n IG1heGltdW0pOwogICAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rhb19z ZXFfVGFnZ2VkUHJvZmlsZSAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICAgICAgICBDT1JCQTo6 VUxvbmcgbGVuZ3RoLAogICAgICAgICAgSU9QOjpUYWdnZWRQcm9maWxlICpkYXRhLAogICAgICAg ICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDApOwogICAgICAgIF9UQU9fVW5ib3VuZGVkX1Nl cXVlbmNlX0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAoY29uc3QgX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlICZyaHMpOwogICAgICAg IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAm b3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2Vx X1RhZ2dlZFByb2ZpbGUgJnJocyk7CiAgICAgICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfU2Vx dWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlICh2b2lkKTsKCiAgICAgICAgSU9Q OjpUYWdnZWRQcm9maWxlICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSk7CiAgICAgICAgY29u c3QgSU9QOjpUYWdnZWRQcm9maWxlICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3Q7 CgogICAgICAgIHN0YXRpYyBJT1A6OlRhZ2dlZFByb2ZpbGUgKmFsbG9jYnVmIChDT1JCQTo6VUxv bmcgc2l6ZSk7CiAgICAgICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoSU9QOjpUYWdnZWRQcm9maWxl ICpidWZmZXIpOwogICAgICAgIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6 VUxvbmcgbGVuZ3RoKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2 b2lkKTsKCgogICAgICAgIElPUDo6VGFnZ2VkUHJvZmlsZSAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJv b2xlYW4gb3JwaGFuID0gMCk7CiAgICAgICAgY29uc3QgSU9QOjpUYWdnZWRQcm9maWxlICpnZXRf YnVmZmVyICh2b2lkKSBjb25zdDsKICAgICAgICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBt YXgsCiAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgSU9QOjpUYWdnZWRQ cm9maWxlICpkYXRhLAogICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSk7CiAgICAgIH07 CiMgMjQ3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L0lPUEMuaCIKICAgIGNsYXNzIF90YW9fc2VxX1RhZ2dlZFByb2ZpbGU7CiAgICBjbGFzcyBfdGFv X3NlcV9UYWdnZWRQcm9maWxlX3ZhcjsKCgoKCgogICAgY2xhc3MgX3Rhb19zZXFfVGFnZ2VkUHJv ZmlsZSA6IHB1YmxpYwoKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFv X3NlcV9UYWdnZWRQcm9maWxlCgoKCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIF90YW9fc2VxX1Rh Z2dlZFByb2ZpbGUgKHZvaWQpOwogICAgICBfdGFvX3NlcV9UYWdnZWRQcm9maWxlIChDT1JCQTo6 VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAoCiAgICAgICAgQ09SQkE6 OlVMb25nIG1heCwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIElPUDo6VGFn Z2VkUHJvZmlsZSAqYnVmZmVyLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwCiAg ICAgICk7CiAgICAgIF90YW9fc2VxX1RhZ2dlZFByb2ZpbGUgKGNvbnN0IF90YW9fc2VxX1RhZ2dl ZFByb2ZpbGUgJik7CiAgICAgIH5fdGFvX3NlcV9UYWdnZWRQcm9maWxlICh2b2lkKTsKICAgICAg c3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgICAgIHR5cGVkZWYg X3Rhb19zZXFfVGFnZ2VkUHJvZmlsZV92YXIgX3Zhcl90eXBlOwoKCiAgICB9OwoKCgoKICAgIHR5 cGVkZWYgX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSBfcHJvZmlsZXNfc2VxOwoKCiAgICAgICAgICBf dGFvX3NlcV9UYWdnZWRQcm9maWxlIHByb2ZpbGVzOwogIH07CgogIGNsYXNzIElPUl92YXIKICB7 CiAgcHVibGljOgogICAgSU9SX3ZhciAodm9pZCk7CiAgICBJT1JfdmFyIChJT1IgKik7CiAgICBJ T1JfdmFyIChjb25zdCBJT1JfdmFyICYpOwogICAgfklPUl92YXIgKHZvaWQpOwoKICAgIElPUl92 YXIgJm9wZXJhdG9yPSAoSU9SICopOwogICAgSU9SX3ZhciAmb3BlcmF0b3I9IChjb25zdCBJT1Jf dmFyICYpOwogICAgSU9SICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IElPUiAqb3BlcmF0 b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgSU9SICYoKSBjb25zdDsKICAg IG9wZXJhdG9yIElPUiAmKCk7CiAgICBvcGVyYXRvciBJT1IgJigpIGNvbnN0OwogICAgb3BlcmF0 b3IgSU9SIComKCk7CgoKICAgIGNvbnN0IElPUiAmaW4gKHZvaWQpIGNvbnN0OwogICAgSU9SICZp bm91dCAodm9pZCk7CiAgICBJT1IgKiZvdXQgKHZvaWQpOwogICAgSU9SICpfcmV0biAodm9pZCk7 CiAgICBJT1IgKnB0ciAodm9pZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBJT1IgKnB0cl87CiAg fTsKCiAgY2xhc3MgSU9SX291dAogIHsKICBwdWJsaWM6CiAgICBJT1Jfb3V0IChJT1IgKiYpOwog ICAgSU9SX291dCAoSU9SX3ZhciAmKTsKICAgIElPUl9vdXQgKGNvbnN0IElPUl9vdXQgJik7CiAg ICBJT1Jfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IElPUl9vdXQgJik7CiAgICBJT1Jfb3V0ICZvcGVy YXRvcj0gKElPUiAqKTsKICAgIG9wZXJhdG9yIElPUiAqJigpOwogICAgSU9SIComcHRyICh2b2lk KTsKICAgIElPUiAqb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBJT1IgKiZwdHJf OwoKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBJT1JfdmFyICYpOwogIH07CgogIGV4dGVybiBD T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JT1I7CgogIHR5cGVkZWYgQ09SQkE6OlVMb25nIENvbXBv bmVudElkOwogIHR5cGVkZWYgQ09SQkE6OlVMb25nX291dCBDb21wb25lbnRJZF9vdXQ7CiAgICBl eHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQ29tcG9uZW50SWQ7CgogIHN0cnVjdCBUYWdn ZWRDb21wb25lbnQ7CiAgY2xhc3MgVGFnZ2VkQ29tcG9uZW50X3ZhcjsKCiAgc3RydWN0IFRhZ2dl ZENvbXBvbmVudAogIHsKCgogICAgdHlwZWRlZiBUYWdnZWRDb21wb25lbnRfdmFyIF92YXJfdHlw ZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIElP UDo6Q29tcG9uZW50SWQgdGFnOwoKCgoKICAgIGNsYXNzIF90YW9fc2VxX09jdGV0OwogICAgY2xh c3MgX3Rhb19zZXFfT2N0ZXRfdmFyOwoKCgoKCiAgICBjbGFzcyBfdGFvX3NlcV9PY3RldCA6IHB1 YmxpYwoKICAgICAgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+CgoKCiAgICB7 CiAgICBwdWJsaWM6CiAgICAgIF90YW9fc2VxX09jdGV0ICh2b2lkKTsKICAgICAgX3Rhb19zZXFf T2N0ZXQgKENPUkJBOjpVTG9uZyBtYXgpOwogICAgICBfdGFvX3NlcV9PY3RldCAoCiAgICAgICAg Q09SQkE6OlVMb25nIG1heCwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIENP UkJBOjpPY3RldCAqYnVmZmVyLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwCiAg ICAgICk7CiAgICAgIF90YW9fc2VxX09jdGV0IChjb25zdCBfdGFvX3NlcV9PY3RldCAmKTsKICAg ICAgfl90YW9fc2VxX09jdGV0ICh2b2lkKTsKICAgICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVz dHJ1Y3RvciAodm9pZCopOwoKCiAgICAgIHR5cGVkZWYgX3Rhb19zZXFfT2N0ZXRfdmFyIF92YXJf dHlwZTsKCgoKCiAgICAgIF90YW9fc2VxX09jdGV0ICgKICAgICAgICAgIENPUkJBOjpVTG9uZyBs ZW5ndGgsCiAgICAgICAgICBjb25zdCBBQ0VfTWVzc2FnZV9CbG9jayogbWIKICAgICAgICApCiAg ICAgICAgOiBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJBOjpPY3RldD4gKGxlbmd0aCwgbWIp IHt9CgoKICAgIH07CgoKCgogICAgdHlwZWRlZiBfdGFvX3NlcV9PY3RldCBfY29tcG9uZW50X2Rh dGFfc2VxOwoKCiAgICAgICAgICBfdGFvX3NlcV9PY3RldCBjb21wb25lbnRfZGF0YTsKICB9OwoK ICBjbGFzcyBUYWdnZWRDb21wb25lbnRfdmFyCiAgewogIHB1YmxpYzoKICAgIFRhZ2dlZENvbXBv bmVudF92YXIgKHZvaWQpOwogICAgVGFnZ2VkQ29tcG9uZW50X3ZhciAoVGFnZ2VkQ29tcG9uZW50 ICopOwogICAgVGFnZ2VkQ29tcG9uZW50X3ZhciAoY29uc3QgVGFnZ2VkQ29tcG9uZW50X3ZhciAm KTsKICAgIH5UYWdnZWRDb21wb25lbnRfdmFyICh2b2lkKTsKCiAgICBUYWdnZWRDb21wb25lbnRf dmFyICZvcGVyYXRvcj0gKFRhZ2dlZENvbXBvbmVudCAqKTsKICAgIFRhZ2dlZENvbXBvbmVudF92 YXIgJm9wZXJhdG9yPSAoY29uc3QgVGFnZ2VkQ29tcG9uZW50X3ZhciAmKTsKICAgIFRhZ2dlZENv bXBvbmVudCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBUYWdnZWRDb21wb25lbnQgKm9w ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFRhZ2dlZENvbXBvbmVu dCAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBUYWdnZWRDb21wb25lbnQgJigpOwogICAgb3BlcmF0 b3IgVGFnZ2VkQ29tcG9uZW50ICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFRhZ2dlZENvbXBvbmVu dCAqJigpOwoKCiAgICBjb25zdCBUYWdnZWRDb21wb25lbnQgJmluICh2b2lkKSBjb25zdDsKICAg IFRhZ2dlZENvbXBvbmVudCAmaW5vdXQgKHZvaWQpOwogICAgVGFnZ2VkQ29tcG9uZW50IComb3V0 ICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVudCAqX3JldG4gKHZvaWQpOwogICAgVGFnZ2VkQ29t cG9uZW50ICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgVGFnZ2VkQ29tcG9uZW50 ICpwdHJfOwogIH07CgogIGNsYXNzIFRhZ2dlZENvbXBvbmVudF9vdXQKICB7CiAgcHVibGljOgog ICAgVGFnZ2VkQ29tcG9uZW50X291dCAoVGFnZ2VkQ29tcG9uZW50IComKTsKICAgIFRhZ2dlZENv bXBvbmVudF9vdXQgKFRhZ2dlZENvbXBvbmVudF92YXIgJik7CiAgICBUYWdnZWRDb21wb25lbnRf b3V0IChjb25zdCBUYWdnZWRDb21wb25lbnRfb3V0ICYpOwogICAgVGFnZ2VkQ29tcG9uZW50X291 dCAmb3BlcmF0b3I9IChjb25zdCBUYWdnZWRDb21wb25lbnRfb3V0ICYpOwogICAgVGFnZ2VkQ29t cG9uZW50X291dCAmb3BlcmF0b3I9IChUYWdnZWRDb21wb25lbnQgKik7CiAgICBvcGVyYXRvciBU YWdnZWRDb21wb25lbnQgKiYoKTsKICAgIFRhZ2dlZENvbXBvbmVudCAqJnB0ciAodm9pZCk7CiAg ICBUYWdnZWRDb21wb25lbnQgKm9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgVGFn Z2VkQ29tcG9uZW50IComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgVGFnZ2VkQ29t cG9uZW50X3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVGFn Z2VkQ29tcG9uZW50OwoKCgoKCgoKICAgIGNsYXNzIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lP UF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgOiBwdWJsaWMgVEFPX1VuYm91bmRlZF9CYXNlX1Nl cXVlbmNlCiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf SU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAodm9pZCk7CiAgICAgIF9UQU9fVW5ib3VuZGVk X1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKENPUkJBOjpVTG9uZyBtYXhp bXVtKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50 UHJvZmlsZSAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0 aCwKICAgICAgICBUYWdnZWRDb21wb25lbnQgKmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4g cmVsZWFzZSA9IDApOwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfTXVsdGlwbGVD b21wb25lbnRQcm9maWxlIChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfTXVsdGlw bGVDb21wb25lbnRQcm9maWxlICZyaHMpOwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9J T1BfTXVsdGlwbGVDb21wb25lbnRQcm9maWxlICZvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgJnJocyk7CiAgICAgIHZp cnR1YWwgfl9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2Zp bGUgKHZvaWQpOwoKICAgICAgVGFnZ2VkQ29tcG9uZW50ICZvcGVyYXRvcltdIChDT1JCQTo6VUxv bmcgaSk7CiAgICAgIGNvbnN0IFRhZ2dlZENvbXBvbmVudCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVM b25nIGkpIGNvbnN0OwoKICAgICAgc3RhdGljIFRhZ2dlZENvbXBvbmVudCAqYWxsb2NidWYgKENP UkJBOjpVTG9uZyBzaXplKTsKICAgICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoVGFnZ2VkQ29tcG9u ZW50ICpidWZmZXIpOwogICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6 OlVMb25nIGxlbmd0aCk7CiAgICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZv aWQpOwoKCiAgICAgIFRhZ2dlZENvbXBvbmVudCAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4g b3JwaGFuID0gMCk7CiAgICAgIGNvbnN0IFRhZ2dlZENvbXBvbmVudCAqZ2V0X2J1ZmZlciAodm9p ZCkgY29uc3Q7CiAgICAgIHZvaWQgcmVwbGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICAgICAgICBD T1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIFRhZ2dlZENvbXBvbmVudCAqZGF0YSwKICAgICAg ICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKTsKICAgIH07CiMgNTA1ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaCIKICBjbGFzcyBNdWx0aXBs ZUNvbXBvbmVudFByb2ZpbGU7CiAgY2xhc3MgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhcjsK CgoKCgogIGNsYXNzIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSA6IHB1YmxpYwoKICAgIF9UQU9f VW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUKCgoKICB7CiAg cHVibGljOgogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlICh2b2lkKTsKICAgIE11bHRpcGxl Q29tcG9uZW50UHJvZmlsZSAoQ09SQkE6OlVMb25nIG1heCk7CiAgICBNdWx0aXBsZUNvbXBvbmVu dFByb2ZpbGUgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxvbmcgbGVu Z3RoLAogICAgICBUYWdnZWRDb21wb25lbnQgKmJ1ZmZlciwKICAgICAgQ09SQkE6OkJvb2xlYW4g cmVsZWFzZSA9IDAKICAgICk7CiAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKGNvbnN0IE11 bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAmKTsKICAgIH5NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUg KHZvaWQpOwogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAg ICB0eXBlZGVmIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgX3Zhcl90eXBlOwoKCiAgfTsK IyA1NDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v SU9QQy5oIgogIGNsYXNzIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIKICB7CiAgcHVibGlj OgogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAodm9pZCk7CiAgICBNdWx0aXBsZUNv bXBvbmVudFByb2ZpbGVfdmFyIChNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKik7CiAgICBNdWx0 aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyIChjb25zdCBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVf dmFyICYpOwogICAgfk11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgKHZvaWQpOwoKICAgIE11 bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgJm9wZXJhdG9yPSAoTXVsdGlwbGVDb21wb25lbnRQ cm9maWxlICopOwogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAmb3BlcmF0b3I9IChj b25zdCBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyICYpOwogICAgTXVsdGlwbGVDb21wb25l bnRQcm9maWxlICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IE11bHRpcGxlQ29tcG9uZW50 UHJvZmlsZSAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgTXVs dGlwbGVDb21wb25lbnRQcm9maWxlICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIE11bHRpcGxlQ29t cG9uZW50UHJvZmlsZSAmKCk7CiAgICBvcGVyYXRvciBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUg JigpIGNvbnN0OwogICAgb3BlcmF0b3IgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlIComKCk7Cgog ICAgVGFnZ2VkQ29tcG9uZW50ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKICAg IGNvbnN0IFRhZ2dlZENvbXBvbmVudCAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkg Y29uc3Q7CgoKICAgIGNvbnN0IE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAmaW4gKHZvaWQpIGNv bnN0OwogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlICZpbm91dCAodm9pZCk7CiAgICBNdWx0 aXBsZUNvbXBvbmVudFByb2ZpbGUgKiZvdXQgKHZvaWQpOwogICAgTXVsdGlwbGVDb21wb25lbnRQ cm9maWxlICpfcmV0biAodm9pZCk7CiAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKnB0ciAo dm9pZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKnB0 cl87CiAgfTsKIyA1ODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vSU9QQy5oIgogIGNsYXNzIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV9vdXQKICB7 CiAgcHVibGljOgogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dCAoTXVsdGlwbGVDb21w b25lbnRQcm9maWxlIComKTsKICAgIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV9vdXQgKE11bHRp cGxlQ29tcG9uZW50UHJvZmlsZV92YXIgJik7CiAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVf b3V0IChjb25zdCBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfb3V0ICYpOwogICAgTXVsdGlwbGVD b21wb25lbnRQcm9maWxlX291dCAmb3BlcmF0b3I9IChjb25zdCBNdWx0aXBsZUNvbXBvbmVudFBy b2ZpbGVfb3V0ICYpOwogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dCAmb3BlcmF0b3I9 IChNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKik7CiAgICBvcGVyYXRvciBNdWx0aXBsZUNvbXBv bmVudFByb2ZpbGUgKiYoKTsKICAgIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAqJnB0ciAodm9p ZCk7CiAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAg VGFnZ2VkQ29tcG9uZW50ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCiAgcHJp dmF0ZToKICAgIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAqJnB0cl87CgogICAgdm9pZCBvcGVy YXRvcj0gKGNvbnN0IE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgJik7CiAgfTsKCgoKCiAg ZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTsK CgoKCgoKCiAgICBjbGFzcyBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9u ZW50TGlzdCA6IHB1YmxpYyBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UKICAgIHsKICAgIHB1 YmxpYzoKCgogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50 TGlzdCAodm9pZCk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21w b25lbnRMaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1Nl cXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAg ICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIFRhZ2dlZENvbXBvbmVudCAqZGF0YSwK ICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMCk7CiAgICAgIF9UQU9fVW5ib3VuZGVk X1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0IChjb25zdCBfVEFPX1VuYm91bmRlZF9T ZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdCAmcmhzKTsKICAgICAgX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudExpc3QgJm9wZXJhdG9yPSAoY29uc3QgX1RB T19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudExpc3QgJnJocyk7CiAgICAg IHZpcnR1YWwgfl9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0 ICh2b2lkKTsKCiAgICAgIFRhZ2dlZENvbXBvbmVudCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25n IGkpOwogICAgICBjb25zdCBUYWdnZWRDb21wb25lbnQgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9u ZyBpKSBjb25zdDsKCiAgICAgIHN0YXRpYyBUYWdnZWRDb21wb25lbnQgKmFsbG9jYnVmIChDT1JC QTo6VUxvbmcgc2l6ZSk7CiAgICAgIHN0YXRpYyB2b2lkIGZyZWVidWYgKFRhZ2dlZENvbXBvbmVu dCAqYnVmZmVyKTsKICAgICAgdmlydHVhbCB2b2lkIF9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpV TG9uZyBsZW5ndGgpOwogICAgICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2b2lk KTsKCgogICAgICBUYWdnZWRDb21wb25lbnQgKmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFuIG9y cGhhbiA9IDApOwogICAgICBjb25zdCBUYWdnZWRDb21wb25lbnQgKmdldF9idWZmZXIgKHZvaWQp IGNvbnN0OwogICAgICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgQ09S QkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBUYWdnZWRDb21wb25lbnQgKmRhdGEsCiAgICAgICAg Q09SQkE6OkJvb2xlYW4gcmVsZWFzZSk7CiAgICB9OwojIDY1NyAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCiAgY2xhc3MgVGFnZ2VkQ29t cG9uZW50TGlzdDsKICBjbGFzcyBUYWdnZWRDb21wb25lbnRMaXN0X3ZhcjsKCgoKCgogIGNsYXNz IFRhZ2dlZENvbXBvbmVudExpc3QgOiBwdWJsaWMKCiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5j ZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdAoKCgogIHsKICBwdWJsaWM6CiAgICBUYWdnZWRDb21w b25lbnRMaXN0ICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVudExpc3QgKENPUkJBOjpVTG9uZyBt YXgpOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdCAoCiAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAg ICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgIFRhZ2dlZENvbXBvbmVudCAqYnVmZmVyLAog ICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMAogICAgKTsKICAgIFRhZ2dlZENvbXBvbmVu dExpc3QgKGNvbnN0IFRhZ2dlZENvbXBvbmVudExpc3QgJik7CiAgICB+VGFnZ2VkQ29tcG9uZW50 TGlzdCAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7 CgoKICAgIHR5cGVkZWYgVGFnZ2VkQ29tcG9uZW50TGlzdF92YXIgX3Zhcl90eXBlOwoKCiAgfTsK IyA3MDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v SU9QQy5oIgogIGNsYXNzIFRhZ2dlZENvbXBvbmVudExpc3RfdmFyCiAgewogIHB1YmxpYzoKICAg IFRhZ2dlZENvbXBvbmVudExpc3RfdmFyICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVudExpc3Rf dmFyIChUYWdnZWRDb21wb25lbnRMaXN0ICopOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF92YXIg KGNvbnN0IFRhZ2dlZENvbXBvbmVudExpc3RfdmFyICYpOwogICAgflRhZ2dlZENvbXBvbmVudExp c3RfdmFyICh2b2lkKTsKCiAgICBUYWdnZWRDb21wb25lbnRMaXN0X3ZhciAmb3BlcmF0b3I9IChU YWdnZWRDb21wb25lbnRMaXN0ICopOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF92YXIgJm9wZXJh dG9yPSAoY29uc3QgVGFnZ2VkQ29tcG9uZW50TGlzdF92YXIgJik7CiAgICBUYWdnZWRDb21wb25l bnRMaXN0ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IFRhZ2dlZENvbXBvbmVudExpc3Qg Km9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFRhZ2dlZENvbXBv bmVudExpc3QgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgVGFnZ2VkQ29tcG9uZW50TGlzdCAmKCk7 CiAgICBvcGVyYXRvciBUYWdnZWRDb21wb25lbnRMaXN0ICYoKSBjb25zdDsKICAgIG9wZXJhdG9y IFRhZ2dlZENvbXBvbmVudExpc3QgKiYoKTsKCiAgICBUYWdnZWRDb21wb25lbnQgJiBvcGVyYXRv cltdIChDT1JCQTo6VUxvbmcgaW5kZXgpOwogICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50ICYgb3Bl cmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdDsKCgogICAgY29uc3QgVGFnZ2VkQ29t cG9uZW50TGlzdCAmaW4gKHZvaWQpIGNvbnN0OwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdCAmaW5v dXQgKHZvaWQpOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdCAqJm91dCAodm9pZCk7CiAgICBUYWdn ZWRDb21wb25lbnRMaXN0ICpfcmV0biAodm9pZCk7CiAgICBUYWdnZWRDb21wb25lbnRMaXN0ICpw dHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgVGFnZ2VkQ29tcG9uZW50TGlzdCAqcHRy XzsKICB9OwojIDczOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9JT1BDLmgiCiAgY2xhc3MgVGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQKICB7CiAgcHVi bGljOgogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQgKFRhZ2dlZENvbXBvbmVudExpc3QgKiYp OwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQgKFRhZ2dlZENvbXBvbmVudExpc3RfdmFyICYp OwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQgKGNvbnN0IFRhZ2dlZENvbXBvbmVudExpc3Rf b3V0ICYpOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgVGFn Z2VkQ29tcG9uZW50TGlzdF9vdXQgJik7CiAgICBUYWdnZWRDb21wb25lbnRMaXN0X291dCAmb3Bl cmF0b3I9IChUYWdnZWRDb21wb25lbnRMaXN0ICopOwogICAgb3BlcmF0b3IgVGFnZ2VkQ29tcG9u ZW50TGlzdCAqJigpOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdCAqJnB0ciAodm9pZCk7CiAgICBU YWdnZWRDb21wb25lbnRMaXN0ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVu dCAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7CgogIHByaXZhdGU6CiAgICBUYWdn ZWRDb21wb25lbnRMaXN0IComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgVGFnZ2Vk Q29tcG9uZW50TGlzdF92YXIgJik7CiAgfTsKCgoKCiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9w dHIgX3RjX1RhZ2dlZENvbXBvbmVudExpc3Q7CgoKCgoKCgogICAgY2xhc3MgX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSA6IHB1YmxpYyBUQU9fVW5ib3VuZGVk X0Jhc2VfU2VxdWVuY2UKICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBfVEFPX1VuYm91bmRlZF9T ZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxICh2b2lkKTsKICAgICAgX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSAoQ09SQkE6OlVMb25nIG1heGltdW0p OwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxIChD T1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAg IFRhZ2dlZENvbXBvbmVudCAqZGF0YSwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0g MCk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXEg KGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXEgJnJo cyk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXEg Jm9wZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBv bmVudFNlcSAmcmhzKTsKICAgICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9Q X1RhZ2dlZENvbXBvbmVudFNlcSAodm9pZCk7CgogICAgICBUYWdnZWRDb21wb25lbnQgJm9wZXJh dG9yW10gKENPUkJBOjpVTG9uZyBpKTsKICAgICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50ICZvcGVy YXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3Q7CgogICAgICBzdGF0aWMgVGFnZ2VkQ29tcG9u ZW50ICphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIHNpemUpOwogICAgICBzdGF0aWMgdm9pZCBmcmVl YnVmIChUYWdnZWRDb21wb25lbnQgKmJ1ZmZlcik7CiAgICAgIHZpcnR1YWwgdm9pZCBfYWxsb2Nh dGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKTsKICAgICAgdmlydHVhbCB2b2lkIF9kZWFs bG9jYXRlX2J1ZmZlciAodm9pZCk7CgoKICAgICAgVGFnZ2VkQ29tcG9uZW50ICpnZXRfYnVmZmVy IChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICAgICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50 ICpnZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKICAgICAgdm9pZCByZXBsYWNlIChDT1JCQTo6VUxv bmcgbWF4LAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgVGFnZ2VkQ29tcG9u ZW50ICpkYXRhLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpOwogICAgfTsKIyA4MDkg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5o IgogIGNsYXNzIFRhZ2dlZENvbXBvbmVudFNlcTsKICBjbGFzcyBUYWdnZWRDb21wb25lbnRTZXFf dmFyOwoKCgoKCiAgY2xhc3MgVGFnZ2VkQ29tcG9uZW50U2VxIDogcHVibGljCgogICAgX1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcQoKCgogIHsKICBwdWJsaWM6 CiAgICBUYWdnZWRDb21wb25lbnRTZXEgKHZvaWQpOwogICAgVGFnZ2VkQ29tcG9uZW50U2VxIChD T1JCQTo6VUxvbmcgbWF4KTsKICAgIFRhZ2dlZENvbXBvbmVudFNlcSAoCiAgICAgIENPUkJBOjpV TG9uZyBtYXgsCiAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgIFRhZ2dlZENvbXBvbmVu dCAqYnVmZmVyLAogICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMAogICAgKTsKICAgIFRh Z2dlZENvbXBvbmVudFNlcSAoY29uc3QgVGFnZ2VkQ29tcG9uZW50U2VxICYpOwogICAgflRhZ2dl ZENvbXBvbmVudFNlcSAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9y ICh2b2lkKik7CgoKICAgIHR5cGVkZWYgVGFnZ2VkQ29tcG9uZW50U2VxX3ZhciBfdmFyX3R5cGU7 CgoKICB9OwojIDg1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9JT1BDLmgiCiAgY2xhc3MgVGFnZ2VkQ29tcG9uZW50U2VxX3ZhcgogIHsKICBwdWJs aWM6CiAgICBUYWdnZWRDb21wb25lbnRTZXFfdmFyICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVu dFNlcV92YXIgKFRhZ2dlZENvbXBvbmVudFNlcSAqKTsKICAgIFRhZ2dlZENvbXBvbmVudFNlcV92 YXIgKGNvbnN0IFRhZ2dlZENvbXBvbmVudFNlcV92YXIgJik7CiAgICB+VGFnZ2VkQ29tcG9uZW50 U2VxX3ZhciAodm9pZCk7CgogICAgVGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAmb3BlcmF0b3I9IChU YWdnZWRDb21wb25lbnRTZXEgKik7CiAgICBUYWdnZWRDb21wb25lbnRTZXFfdmFyICZvcGVyYXRv cj0gKGNvbnN0IFRhZ2dlZENvbXBvbmVudFNlcV92YXIgJik7CiAgICBUYWdnZWRDb21wb25lbnRT ZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50U2VxICpvcGVy YXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBUYWdnZWRDb21wb25lbnRT ZXEgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgVGFnZ2VkQ29tcG9uZW50U2VxICYoKTsKICAgIG9w ZXJhdG9yIFRhZ2dlZENvbXBvbmVudFNlcSAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBUYWdnZWRD b21wb25lbnRTZXEgKiYoKTsKCiAgICBUYWdnZWRDb21wb25lbnQgJiBvcGVyYXRvcltdIChDT1JC QTo6VUxvbmcgaW5kZXgpOwogICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50ICYgb3BlcmF0b3JbXSAo Q09SQkE6OlVMb25nIGluZGV4KSBjb25zdDsKCgogICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50U2Vx ICZpbiAodm9pZCkgY29uc3Q7CiAgICBUYWdnZWRDb21wb25lbnRTZXEgJmlub3V0ICh2b2lkKTsK ICAgIFRhZ2dlZENvbXBvbmVudFNlcSAqJm91dCAodm9pZCk7CiAgICBUYWdnZWRDb21wb25lbnRT ZXEgKl9yZXRuICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVudFNlcSAqcHRyICh2b2lkKSBjb25z dDsKCiAgcHJpdmF0ZToKICAgIFRhZ2dlZENvbXBvbmVudFNlcSAqcHRyXzsKICB9OwojIDg5MSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgi CiAgY2xhc3MgVGFnZ2VkQ29tcG9uZW50U2VxX291dAogIHsKICBwdWJsaWM6CiAgICBUYWdnZWRD b21wb25lbnRTZXFfb3V0IChUYWdnZWRDb21wb25lbnRTZXEgKiYpOwogICAgVGFnZ2VkQ29tcG9u ZW50U2VxX291dCAoVGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAmKTsKICAgIFRhZ2dlZENvbXBvbmVu dFNlcV9vdXQgKGNvbnN0IFRhZ2dlZENvbXBvbmVudFNlcV9vdXQgJik7CiAgICBUYWdnZWRDb21w b25lbnRTZXFfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFRhZ2dlZENvbXBvbmVudFNlcV9vdXQgJik7 CiAgICBUYWdnZWRDb21wb25lbnRTZXFfb3V0ICZvcGVyYXRvcj0gKFRhZ2dlZENvbXBvbmVudFNl cSAqKTsKICAgIG9wZXJhdG9yIFRhZ2dlZENvbXBvbmVudFNlcSAqJigpOwogICAgVGFnZ2VkQ29t cG9uZW50U2VxIComcHRyICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVudFNlcSAqb3BlcmF0b3It PiAodm9pZCk7CiAgICBUYWdnZWRDb21wb25lbnQgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcg aW5kZXgpOwoKICBwcml2YXRlOgogICAgVGFnZ2VkQ29tcG9uZW50U2VxIComcHRyXzsKCiAgICB2 b2lkIG9wZXJhdG9yPSAoY29uc3QgVGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAmKTsKICB9OwoKCgoK ICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVGFnZ2VkQ29tcG9uZW50U2VxOwoKICBl eHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRBR19PUkJfVFlQRTsKCiAgZXh0ZXJuIGNvbnN0IENP UkJBOjpVTG9uZyBUQUdfQ09ERV9TRVRTOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRB R19QT0xJQ0lFUzsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBUQUdfQUxURVJOQVRFX0lJ T1BfQUREUkVTUzsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBUQUdfQ09NUExFVEVfT0JK RUNUX0tFWTsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBUQUdfRU5EUE9JTlRfSURfUE9T SVRJT047CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgVEFHX0xPQ0FUSU9OX1BPTElDWTsK CiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBUQUdfRENFX1NUUklOR19CSU5ESU5HOwoKICBl eHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRBR19EQ0VfQklORElOR19OQU1FOwoKICBleHRlcm4g Y29uc3QgQ09SQkE6OlVMb25nIFRBR19EQ0VfTk9fUElQRVM7CgogIHR5cGVkZWYgQ09SQkE6OlVM b25nIFNlcnZpY2VJZDsKICB0eXBlZGVmIENPUkJBOjpVTG9uZ19vdXQgU2VydmljZUlkX291dDsK ICAgIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TZXJ2aWNlSWQ7CgogIHN0cnVjdCBT ZXJ2aWNlQ29udGV4dDsKICBjbGFzcyBTZXJ2aWNlQ29udGV4dF92YXI7CgogIHN0cnVjdCBTZXJ2 aWNlQ29udGV4dAogIHsKCgogICAgdHlwZWRlZiBTZXJ2aWNlQ29udGV4dF92YXIgX3Zhcl90eXBl OwoKCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgSU9Q OjpTZXJ2aWNlSWQgY29udGV4dF9pZDsKCgoKCiAgICBjbGFzcyBfdGFvX3NlcV9PY3RldDsKICAg IGNsYXNzIF90YW9fc2VxX09jdGV0X3ZhcjsKCgoKCgogICAgY2xhc3MgX3Rhb19zZXFfT2N0ZXQg OiBwdWJsaWMKCiAgICAgIFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PgoKCgog ICAgewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9PY3RldCAodm9pZCk7CiAgICAgIF90YW9f c2VxX09jdGV0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfT2N0ZXQgKAogICAg ICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAg ICBDT1JCQTo6T2N0ZXQgKmJ1ZmZlciwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0g MAogICAgICApOwogICAgICBfdGFvX3NlcV9PY3RldCAoY29uc3QgX3Rhb19zZXFfT2N0ZXQgJik7 CiAgICAgIH5fdGFvX3NlcV9PY3RldCAodm9pZCk7CiAgICAgIHN0YXRpYyB2b2lkIF90YW9fYW55 X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgICB0eXBlZGVmIF90YW9fc2VxX09jdGV0X3ZhciBf dmFyX3R5cGU7CgoKCgogICAgICBfdGFvX3NlcV9PY3RldCAoCiAgICAgICAgICBDT1JCQTo6VUxv bmcgbGVuZ3RoLAogICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sqIG1iCiAgICAgICAg KQogICAgICAgIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+IChsZW5ndGgs IG1iKSB7fQoKCiAgICB9OwoKCgoKICAgIHR5cGVkZWYgX3Rhb19zZXFfT2N0ZXQgX2NvbnRleHRf ZGF0YV9zZXE7CgoKICAgICAgICAgIF90YW9fc2VxX09jdGV0IGNvbnRleHRfZGF0YTsKICB9OwoK ICBjbGFzcyBTZXJ2aWNlQ29udGV4dF92YXIKICB7CiAgcHVibGljOgogICAgU2VydmljZUNvbnRl eHRfdmFyICh2b2lkKTsKICAgIFNlcnZpY2VDb250ZXh0X3ZhciAoU2VydmljZUNvbnRleHQgKik7 CiAgICBTZXJ2aWNlQ29udGV4dF92YXIgKGNvbnN0IFNlcnZpY2VDb250ZXh0X3ZhciAmKTsKICAg IH5TZXJ2aWNlQ29udGV4dF92YXIgKHZvaWQpOwoKICAgIFNlcnZpY2VDb250ZXh0X3ZhciAmb3Bl cmF0b3I9IChTZXJ2aWNlQ29udGV4dCAqKTsKICAgIFNlcnZpY2VDb250ZXh0X3ZhciAmb3BlcmF0 b3I9IChjb25zdCBTZXJ2aWNlQ29udGV4dF92YXIgJik7CiAgICBTZXJ2aWNlQ29udGV4dCAqb3Bl cmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBTZXJ2aWNlQ29udGV4dCAqb3BlcmF0b3ItPiAodm9p ZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgU2VydmljZUNvbnRleHQgJigpIGNvbnN0Owog ICAgb3BlcmF0b3IgU2VydmljZUNvbnRleHQgJigpOwogICAgb3BlcmF0b3IgU2VydmljZUNvbnRl eHQgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgU2VydmljZUNvbnRleHQgKiYoKTsKCgogICAgY29u c3QgU2VydmljZUNvbnRleHQgJmluICh2b2lkKSBjb25zdDsKICAgIFNlcnZpY2VDb250ZXh0ICZp bm91dCAodm9pZCk7CiAgICBTZXJ2aWNlQ29udGV4dCAqJm91dCAodm9pZCk7CiAgICBTZXJ2aWNl Q29udGV4dCAqX3JldG4gKHZvaWQpOwogICAgU2VydmljZUNvbnRleHQgKnB0ciAodm9pZCkgY29u c3Q7CgogIHByaXZhdGU6CiAgICBTZXJ2aWNlQ29udGV4dCAqcHRyXzsKICB9OwoKICBjbGFzcyBT ZXJ2aWNlQ29udGV4dF9vdXQKICB7CiAgcHVibGljOgogICAgU2VydmljZUNvbnRleHRfb3V0IChT ZXJ2aWNlQ29udGV4dCAqJik7CiAgICBTZXJ2aWNlQ29udGV4dF9vdXQgKFNlcnZpY2VDb250ZXh0 X3ZhciAmKTsKICAgIFNlcnZpY2VDb250ZXh0X291dCAoY29uc3QgU2VydmljZUNvbnRleHRfb3V0 ICYpOwogICAgU2VydmljZUNvbnRleHRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFNlcnZpY2VDb250 ZXh0X291dCAmKTsKICAgIFNlcnZpY2VDb250ZXh0X291dCAmb3BlcmF0b3I9IChTZXJ2aWNlQ29u dGV4dCAqKTsKICAgIG9wZXJhdG9yIFNlcnZpY2VDb250ZXh0IComKCk7CiAgICBTZXJ2aWNlQ29u dGV4dCAqJnB0ciAodm9pZCk7CiAgICBTZXJ2aWNlQ29udGV4dCAqb3BlcmF0b3ItPiAodm9pZCk7 CgogIHByaXZhdGU6CiAgICBTZXJ2aWNlQ29udGV4dCAqJnB0cl87CgogICAgdm9pZCBvcGVyYXRv cj0gKGNvbnN0IFNlcnZpY2VDb250ZXh0X3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6OlR5 cGVDb2RlX3B0ciBfdGNfU2VydmljZUNvbnRleHQ7CgoKCgoKCgogICAgY2xhc3MgX1RBT19VbmJv dW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdCA6IHB1YmxpYyBUQU9fVW5ib3Vu ZGVkX0Jhc2VfU2VxdWVuY2UKICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBfVEFPX1VuYm91bmRl ZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0ICh2b2lkKTsKICAgICAgX1RBT19VbmJv dW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdCAoQ09SQkE6OlVMb25nIG1heGlt dW0pOwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0 IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAg ICAgIFNlcnZpY2VDb250ZXh0ICpkYXRhLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2Ug PSAwKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlz dCAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdCAm cmhzKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlz dCAmb3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNv bnRleHRMaXN0ICZyaHMpOwogICAgICB2aXJ0dWFsIH5fVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9J T1BfU2VydmljZUNvbnRleHRMaXN0ICh2b2lkKTsKCiAgICAgIFNlcnZpY2VDb250ZXh0ICZvcGVy YXRvcltdIChDT1JCQTo6VUxvbmcgaSk7CiAgICAgIGNvbnN0IFNlcnZpY2VDb250ZXh0ICZvcGVy YXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3Q7CgogICAgICBzdGF0aWMgU2VydmljZUNvbnRl eHQgKmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSk7CiAgICAgIHN0YXRpYyB2b2lkIGZyZWVi dWYgKFNlcnZpY2VDb250ZXh0ICpidWZmZXIpOwogICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRl X2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxv Y2F0ZV9idWZmZXIgKHZvaWQpOwoKCiAgICAgIFNlcnZpY2VDb250ZXh0ICpnZXRfYnVmZmVyIChD T1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICAgICAgY29uc3QgU2VydmljZUNvbnRleHQgKmdl dF9idWZmZXIgKHZvaWQpIGNvbnN0OwogICAgICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBt YXgsCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBTZXJ2aWNlQ29udGV4dCAq ZGF0YSwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKTsKICAgIH07CiMgMTEwMiAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCiAg Y2xhc3MgU2VydmljZUNvbnRleHRMaXN0OwogIGNsYXNzIFNlcnZpY2VDb250ZXh0TGlzdF92YXI7 CgoKCgoKICBjbGFzcyBTZXJ2aWNlQ29udGV4dExpc3QgOiBwdWJsaWMKCiAgICBfVEFPX1VuYm91 bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0CgoKCiAgewogIHB1YmxpYzoKICAg IFNlcnZpY2VDb250ZXh0TGlzdCAodm9pZCk7CiAgICBTZXJ2aWNlQ29udGV4dExpc3QgKENPUkJB OjpVTG9uZyBtYXgpOwogICAgU2VydmljZUNvbnRleHRMaXN0ICgKICAgICAgQ09SQkE6OlVMb25n IG1heCwKICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgU2VydmljZUNvbnRleHQgKmJ1 ZmZlciwKICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICk7CiAgICBTZXJ2aWNl Q29udGV4dExpc3QgKGNvbnN0IFNlcnZpY2VDb250ZXh0TGlzdCAmKTsKICAgIH5TZXJ2aWNlQ29u dGV4dExpc3QgKHZvaWQpOwogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9p ZCopOwoKCiAgICB0eXBlZGVmIFNlcnZpY2VDb250ZXh0TGlzdF92YXIgX3Zhcl90eXBlOwoKCiAg fTsKIyAxMTQ1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL0lPUEMuaCIKICBjbGFzcyBTZXJ2aWNlQ29udGV4dExpc3RfdmFyCiAgewogIHB1YmxpYzoK ICAgIFNlcnZpY2VDb250ZXh0TGlzdF92YXIgKHZvaWQpOwogICAgU2VydmljZUNvbnRleHRMaXN0 X3ZhciAoU2VydmljZUNvbnRleHRMaXN0ICopOwogICAgU2VydmljZUNvbnRleHRMaXN0X3ZhciAo Y29uc3QgU2VydmljZUNvbnRleHRMaXN0X3ZhciAmKTsKICAgIH5TZXJ2aWNlQ29udGV4dExpc3Rf dmFyICh2b2lkKTsKCiAgICBTZXJ2aWNlQ29udGV4dExpc3RfdmFyICZvcGVyYXRvcj0gKFNlcnZp Y2VDb250ZXh0TGlzdCAqKTsKICAgIFNlcnZpY2VDb250ZXh0TGlzdF92YXIgJm9wZXJhdG9yPSAo Y29uc3QgU2VydmljZUNvbnRleHRMaXN0X3ZhciAmKTsKICAgIFNlcnZpY2VDb250ZXh0TGlzdCAq b3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBTZXJ2aWNlQ29udGV4dExpc3QgKm9wZXJhdG9y LT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFNlcnZpY2VDb250ZXh0TGlzdCAm KCkgY29uc3Q7CiAgICBvcGVyYXRvciBTZXJ2aWNlQ29udGV4dExpc3QgJigpOwogICAgb3BlcmF0 b3IgU2VydmljZUNvbnRleHRMaXN0ICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFNlcnZpY2VDb250 ZXh0TGlzdCAqJigpOwoKICAgIFNlcnZpY2VDb250ZXh0ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVM b25nIGluZGV4KTsKICAgIGNvbnN0IFNlcnZpY2VDb250ZXh0ICYgb3BlcmF0b3JbXSAoQ09SQkE6 OlVMb25nIGluZGV4KSBjb25zdDsKCgogICAgY29uc3QgU2VydmljZUNvbnRleHRMaXN0ICZpbiAo dm9pZCkgY29uc3Q7CiAgICBTZXJ2aWNlQ29udGV4dExpc3QgJmlub3V0ICh2b2lkKTsKICAgIFNl cnZpY2VDb250ZXh0TGlzdCAqJm91dCAodm9pZCk7CiAgICBTZXJ2aWNlQ29udGV4dExpc3QgKl9y ZXRuICh2b2lkKTsKICAgIFNlcnZpY2VDb250ZXh0TGlzdCAqcHRyICh2b2lkKSBjb25zdDsKCiAg cHJpdmF0ZToKICAgIFNlcnZpY2VDb250ZXh0TGlzdCAqcHRyXzsKICB9OwojIDExODQgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIgogIGNs YXNzIFNlcnZpY2VDb250ZXh0TGlzdF9vdXQKICB7CiAgcHVibGljOgogICAgU2VydmljZUNvbnRl eHRMaXN0X291dCAoU2VydmljZUNvbnRleHRMaXN0IComKTsKICAgIFNlcnZpY2VDb250ZXh0TGlz dF9vdXQgKFNlcnZpY2VDb250ZXh0TGlzdF92YXIgJik7CiAgICBTZXJ2aWNlQ29udGV4dExpc3Rf b3V0IChjb25zdCBTZXJ2aWNlQ29udGV4dExpc3Rfb3V0ICYpOwogICAgU2VydmljZUNvbnRleHRM aXN0X291dCAmb3BlcmF0b3I9IChjb25zdCBTZXJ2aWNlQ29udGV4dExpc3Rfb3V0ICYpOwogICAg U2VydmljZUNvbnRleHRMaXN0X291dCAmb3BlcmF0b3I9IChTZXJ2aWNlQ29udGV4dExpc3QgKik7 CiAgICBvcGVyYXRvciBTZXJ2aWNlQ29udGV4dExpc3QgKiYoKTsKICAgIFNlcnZpY2VDb250ZXh0 TGlzdCAqJnB0ciAodm9pZCk7CiAgICBTZXJ2aWNlQ29udGV4dExpc3QgKm9wZXJhdG9yLT4gKHZv aWQpOwogICAgU2VydmljZUNvbnRleHQgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgp OwoKICBwcml2YXRlOgogICAgU2VydmljZUNvbnRleHRMaXN0IComcHRyXzsKCiAgICB2b2lkIG9w ZXJhdG9yPSAoY29uc3QgU2VydmljZUNvbnRleHRMaXN0X3ZhciAmKTsKICB9OwoKCgoKICBleHRl cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2VydmljZUNvbnRleHRMaXN0OwoKICBleHRlcm4g Y29uc3QgQ09SQkE6OlVMb25nIFRyYW5zYWN0aW9uU2VydmljZTsKCiAgZXh0ZXJuIGNvbnN0IENP UkJBOjpVTG9uZyBDb2RlU2V0czsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBDaGFpbkJ5 cGFzc0NoZWNrOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIENoYWluQnlwYXNzSW5mbzsK CiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBMb2dpY2FsVGhyZWFkSWQ7CgogIGV4dGVybiBj b25zdCBDT1JCQTo6VUxvbmcgQklfRElSX0lJT1A7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxv bmcgU2VuZGluZ0NvbnRleHRSdW5UaW1lOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIElO Vk9DQVRJT05fUE9MSUNJRVM7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgVW5rbm93bkV4 Y2VwdGlvbkluZm87CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgUlRDb3JiYVByaW9yaXR5 OwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFJUQ29yYmFQcmlvcml0eVJhbmdlOwoKICBl eHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRBR19GVF9HUk9VUDsKCiAgZXh0ZXJuIGNvbnN0IENP UkJBOjpVTG9uZyBUQUdfRlRfUFJJTUFSWTsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBU QUdfRlRfSEVBUlRCRUFUX0VOQUJMRUQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgRlRf R1JPVVBfVkVSU0lPTjsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBGVF9SRVFVRVNUOwoK CgoKCiAgY2xhc3MgQ29kZWM7CiAgdHlwZWRlZiBDb2RlYyAqQ29kZWNfcHRyOwoKCgoKCgoKICBj bGFzcyBDb2RlY192YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIENv ZGVjX3ZhciAodm9pZCk7CiAgICBDb2RlY192YXIgKENvZGVjX3B0ciBwKSA6IHB0cl8gKHApIHt9 CiAgICBDb2RlY192YXIgKGNvbnN0IENvZGVjX3ZhciAmKTsKICAgIH5Db2RlY192YXIgKHZvaWQp OwoKICAgIENvZGVjX3ZhciAmb3BlcmF0b3I9IChDb2RlY19wdHIpOwogICAgQ29kZWNfdmFyICZv cGVyYXRvcj0gKGNvbnN0IENvZGVjX3ZhciAmKTsKICAgIENvZGVjX3B0ciBvcGVyYXRvci0+ICh2 b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBDb2RlY19wdHIgJigpIGNvbnN0OwogICAg b3BlcmF0b3IgQ29kZWNfcHRyICYoKTsKCiAgICBDb2RlY19wdHIgaW4gKHZvaWQpIGNvbnN0Owog ICAgQ29kZWNfcHRyICZpbm91dCAodm9pZCk7CiAgICBDb2RlY19wdHIgJm91dCAodm9pZCk7CiAg ICBDb2RlY19wdHIgX3JldG4gKHZvaWQpOwogICAgQ29kZWNfcHRyIHB0ciAodm9pZCkgY29uc3Q7 CgoKCiAgICBzdGF0aWMgQ29kZWNfcHRyIGR1cGxpY2F0ZSAoQ29kZWNfcHRyKTsKICAgIHN0YXRp YyB2b2lkIHJlbGVhc2UgKENvZGVjX3B0cik7CiAgICBzdGF0aWMgQ29kZWNfcHRyIG5pbCAodm9p ZCk7CiAgICBzdGF0aWMgQ29kZWNfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6 RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAq KTsKCiAgcHJpdmF0ZToKICAgIENvZGVjX3B0ciBwdHJfOwoKICAgIENvZGVjX3ZhciAoY29uc3Qg VEFPX0Jhc2VfdmFyICZyaHMpOwogICAgQ29kZWNfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19C YXNlX3ZhciAmcmhzKTsKICB9OwojIDEyOTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIgogIGNsYXNzIENvZGVjX291dAogIHsKICBwdWJs aWM6CiAgICBDb2RlY19vdXQgKENvZGVjX3B0ciAmKTsKICAgIENvZGVjX291dCAoQ29kZWNfdmFy ICYpOwogICAgQ29kZWNfb3V0IChjb25zdCBDb2RlY19vdXQgJik7CiAgICBDb2RlY19vdXQgJm9w ZXJhdG9yPSAoY29uc3QgQ29kZWNfb3V0ICYpOwogICAgQ29kZWNfb3V0ICZvcGVyYXRvcj0gKGNv bnN0IENvZGVjX3ZhciAmKTsKICAgIENvZGVjX291dCAmb3BlcmF0b3I9IChDb2RlY19wdHIpOwog ICAgb3BlcmF0b3IgQ29kZWNfcHRyICYoKTsKICAgIENvZGVjX3B0ciAmcHRyICh2b2lkKTsKICAg IENvZGVjX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIENvZGVjX3B0ciAm cHRyXzsKICB9OwojIDEzMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vSU9QQy5oIgpjbGFzcyBDb2RlYyA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09i amVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBDb2RlY19wdHIgX3B0cl90eXBlOwogICAg dHlwZWRlZiBDb2RlY192YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIENvZGVjX3B0ciBfZHVw bGljYXRlIChDb2RlY19wdHIgb2JqKTsKICAgIHN0YXRpYyBDb2RlY19wdHIgX25hcnJvdyAoCiAg ICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9l bnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIENvZGVjX3B0ciBfdW5jaGVja2VkX25h cnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIENvZGVjX3B0ciBfbmls ICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChDb2RlY19wdHIpMDsKICAgICAgfQoKCgoK CiAgICBjbGFzcyBJbnZhbGlkVHlwZUZvckVuY29kaW5nIDogcHVibGljIENPUkJBOjpVc2VyRXhj ZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBJbnZhbGlkVHlwZUZvckVuY29kaW5nICh2 b2lkKTsKCgogICAgICBJbnZhbGlkVHlwZUZvckVuY29kaW5nIChjb25zdCBJbnZhbGlkVHlwZUZv ckVuY29kaW5nICYpOwoKCiAgICAgIH5JbnZhbGlkVHlwZUZvckVuY29kaW5nICh2b2lkKTsKCgog ICAgICBJbnZhbGlkVHlwZUZvckVuY29kaW5nICZvcGVyYXRvcj0gKGNvbnN0IEludmFsaWRUeXBl Rm9yRW5jb2RpbmcgJik7CgogICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICAg IHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAg ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICk7CgogICAgICBzdGF0aWMgSW52YWxpZFR5 cGVGb3JFbmNvZGluZyAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBz dGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIH07CiMgMTM5MCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCiAg ICBjbGFzcyBGb3JtYXRNaXNtYXRjaCA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAg ewogICAgcHVibGljOgoKICAgICAgRm9ybWF0TWlzbWF0Y2ggKHZvaWQpOwoKCiAgICAgIEZvcm1h dE1pc21hdGNoIChjb25zdCBGb3JtYXRNaXNtYXRjaCAmKTsKCgogICAgICB+Rm9ybWF0TWlzbWF0 Y2ggKHZvaWQpOwoKCiAgICAgIEZvcm1hdE1pc21hdGNoICZvcGVyYXRvcj0gKGNvbnN0IEZvcm1h dE1pc21hdGNoICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2 aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVh bCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIEZvcm1hdE1pc21h dGNoICpfZG93bmNhc3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAgICAgIHN0YXRpYyBDT1JC QTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwogICAgfTsKIyAxNDMxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaCIKICAgIGNsYXNzIFR5 cGVNaXNtYXRjaCA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGlj OgoKICAgICAgVHlwZU1pc21hdGNoICh2b2lkKTsKCgogICAgICBUeXBlTWlzbWF0Y2ggKGNvbnN0 IFR5cGVNaXNtYXRjaCAmKTsKCgogICAgICB+VHlwZU1pc21hdGNoICh2b2lkKTsKCgogICAgICBU eXBlTWlzbWF0Y2ggJm9wZXJhdG9yPSAoY29uc3QgVHlwZU1pc21hdGNoICYpOwoKICAgICAgdmly dHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUg KAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAg ICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAg ICAgICApOwoKICAgICAgc3RhdGljIFR5cGVNaXNtYXRjaCAqX2Rvd25jYXN0IChDT1JCQTo6RXhj ZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lk KTsKICAgIH07CgoKCgogICAgdmlydHVhbCBDT1JCQTo6T2N0ZXRTZXEgKiBlbmNvZGUgKAogICAg ICAgIGNvbnN0IENPUkJBOjpBbnkgJiBkYXRhLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9l bnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlv biwgSU9QOjpDb2RlYzo6SW52YWxpZFR5cGVGb3JFbmNvZGluZyApID0gMDsKCgoKCiAgICB2aXJ0 dWFsIENPUkJBOjpBbnkgKiBkZWNvZGUgKAogICAgICAgIGNvbnN0IENPUkJBOjpPY3RldFNlcSAm IGRhdGEsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50 X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkK ICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBJT1A6OkNvZGVjOjpGb3JtYXRN aXNtYXRjaCApID0gMDsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpPY3RldFNlcSAqIGVuY29kZV92 YWx1ZSAoCiAgICAgICAgY29uc3QgQ09SQkE6OkFueSAmIGRhdGEsCiAgICAgICAgQ09SQkE6OkVu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lz dGVtRXhjZXB0aW9uLCBJT1A6OkNvZGVjOjpJbnZhbGlkVHlwZUZvckVuY29kaW5nICkgPSAwOwoK CgoKICAgIHZpcnR1YWwgQ09SQkE6OkFueSAqIGRlY29kZV92YWx1ZSAoCiAgICAgICAgY29uc3Qg Q09SQkE6Ok9jdGV0U2VxICYgZGF0YSwKICAgICAgICBDT1JCQTo6VHlwZUNvZGVfcHRyIHRjLAog ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRo cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgSU9QOjpDb2RlYzo6Rm9ybWF0TWlzbWF0Y2gs IElPUDo6Q29kZWM6OlR5cGVNaXNtYXRjaCApID0gMDsKCgoKCgogICAgdmlydHVhbCB2b2lkICpf dGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0 IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3Rl ZDoKICAgIENvZGVjICgpOwoKICAgIHZpcnR1YWwgfkNvZGVjICh2b2lkKTsKICBwcml2YXRlOgog ICAgQ29kZWMgKGNvbnN0IENvZGVjICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IENvZGVj ICYpOwogIH07CgoKCgogIHR5cGVkZWYgQ09SQkE6OlNob3J0IEVuY29kaW5nRm9ybWF0OwogIHR5 cGVkZWYgQ09SQkE6OlNob3J0X291dCBFbmNvZGluZ0Zvcm1hdF9vdXQ7CiAgICBleHRlcm4gQ09S QkE6OlR5cGVDb2RlX3B0ciBfdGNfRW5jb2RpbmdGb3JtYXQ7CgogIGV4dGVybiBjb25zdCBDT1JC QTo6U2hvcnQgRU5DT0RJTkdfQ0RSX0VOQ0FQUzsKCiAgc3RydWN0IEVuY29kaW5nOwogIGNsYXNz IEVuY29kaW5nX3ZhcjsKCiAgc3RydWN0IEVuY29kaW5nCiAgewoKCiAgICB0eXBlZGVmIEVuY29k aW5nX3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3Ig KHZvaWQqKTsKCiAgICBJT1A6OkVuY29kaW5nRm9ybWF0IGZvcm1hdDsKICAgIENPUkJBOjpPY3Rl dCBtYWpvcl92ZXJzaW9uOwogICAgQ09SQkE6Ok9jdGV0IG1pbm9yX3ZlcnNpb247CiAgfTsKCiAg Y2xhc3MgRW5jb2RpbmdfdmFyCiAgewogIHB1YmxpYzoKICAgIEVuY29kaW5nX3ZhciAodm9pZCk7 CiAgICBFbmNvZGluZ192YXIgKEVuY29kaW5nICopOwogICAgRW5jb2RpbmdfdmFyIChjb25zdCBF bmNvZGluZ192YXIgJik7CiAgICBFbmNvZGluZ192YXIgKGNvbnN0IEVuY29kaW5nICYpOwogICAg fkVuY29kaW5nX3ZhciAodm9pZCk7CgogICAgRW5jb2RpbmdfdmFyICZvcGVyYXRvcj0gKEVuY29k aW5nICopOwogICAgRW5jb2RpbmdfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEVuY29kaW5nX3ZhciAm KTsKICAgIEVuY29kaW5nX3ZhciAmb3BlcmF0b3I9IChjb25zdCBFbmNvZGluZyAmKTsKICAgIEVu Y29kaW5nICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IEVuY29kaW5nICpvcGVyYXRvci0+ ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBFbmNvZGluZyAmKCkgY29uc3Q7CiAg ICBvcGVyYXRvciBFbmNvZGluZyAmKCk7CiAgICBvcGVyYXRvciBFbmNvZGluZyAmKCkgY29uc3Q7 CgoKICAgIGNvbnN0IEVuY29kaW5nICZpbiAodm9pZCkgY29uc3Q7CiAgICBFbmNvZGluZyAmaW5v dXQgKHZvaWQpOwogICAgRW5jb2RpbmcgJm91dCAodm9pZCk7CiAgICBFbmNvZGluZyBfcmV0biAo dm9pZCk7CiAgICBFbmNvZGluZyAqcHRyICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIEVu Y29kaW5nICpwdHJfOwogIH07CgogIHR5cGVkZWYgRW5jb2RpbmcgJkVuY29kaW5nX291dDsKCiAg ZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0VuY29kaW5nOwoKCgoKCiAgY2xhc3MgQ29k ZWNGYWN0b3J5OwogIHR5cGVkZWYgQ29kZWNGYWN0b3J5ICpDb2RlY0ZhY3RvcnlfcHRyOwoKCgoK CgoKICBjbGFzcyBDb2RlY0ZhY3RvcnlfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBw dWJsaWM6CiAgICBDb2RlY0ZhY3RvcnlfdmFyICh2b2lkKTsKICAgIENvZGVjRmFjdG9yeV92YXIg KENvZGVjRmFjdG9yeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgQ29kZWNGYWN0b3J5X3ZhciAo Y29uc3QgQ29kZWNGYWN0b3J5X3ZhciAmKTsKICAgIH5Db2RlY0ZhY3RvcnlfdmFyICh2b2lkKTsK CiAgICBDb2RlY0ZhY3RvcnlfdmFyICZvcGVyYXRvcj0gKENvZGVjRmFjdG9yeV9wdHIpOwogICAg Q29kZWNGYWN0b3J5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBDb2RlY0ZhY3RvcnlfdmFyICYpOwog ICAgQ29kZWNGYWN0b3J5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRv ciBjb25zdCBDb2RlY0ZhY3RvcnlfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIENvZGVjRmFj dG9yeV9wdHIgJigpOwoKICAgIENvZGVjRmFjdG9yeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAg Q29kZWNGYWN0b3J5X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgQ29kZWNGYWN0b3J5X3B0ciAmb3V0 ICh2b2lkKTsKICAgIENvZGVjRmFjdG9yeV9wdHIgX3JldG4gKHZvaWQpOwogICAgQ29kZWNGYWN0 b3J5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIENvZGVjRmFjdG9yeV9wdHIg ZHVwbGljYXRlIChDb2RlY0ZhY3RvcnlfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKENv ZGVjRmFjdG9yeV9wdHIpOwogICAgc3RhdGljIENvZGVjRmFjdG9yeV9wdHIgbmlsICh2b2lkKTsK ICAgIHN0YXRpYyBDb2RlY0ZhY3RvcnlfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JC QTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9p ZCAqKTsKCiAgcHJpdmF0ZToKICAgIENvZGVjRmFjdG9yeV9wdHIgcHRyXzsKCiAgICBDb2RlY0Zh Y3RvcnlfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBDb2RlY0ZhY3RvcnlfdmFy ICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDE2MzkgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIgogIGNs YXNzIENvZGVjRmFjdG9yeV9vdXQKICB7CiAgcHVibGljOgogICAgQ29kZWNGYWN0b3J5X291dCAo Q29kZWNGYWN0b3J5X3B0ciAmKTsKICAgIENvZGVjRmFjdG9yeV9vdXQgKENvZGVjRmFjdG9yeV92 YXIgJik7CiAgICBDb2RlY0ZhY3Rvcnlfb3V0IChjb25zdCBDb2RlY0ZhY3Rvcnlfb3V0ICYpOwog ICAgQ29kZWNGYWN0b3J5X291dCAmb3BlcmF0b3I9IChjb25zdCBDb2RlY0ZhY3Rvcnlfb3V0ICYp OwogICAgQ29kZWNGYWN0b3J5X291dCAmb3BlcmF0b3I9IChjb25zdCBDb2RlY0ZhY3RvcnlfdmFy ICYpOwogICAgQ29kZWNGYWN0b3J5X291dCAmb3BlcmF0b3I9IChDb2RlY0ZhY3RvcnlfcHRyKTsK ICAgIG9wZXJhdG9yIENvZGVjRmFjdG9yeV9wdHIgJigpOwogICAgQ29kZWNGYWN0b3J5X3B0ciAm cHRyICh2b2lkKTsKICAgIENvZGVjRmFjdG9yeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHBy aXZhdGU6CiAgICBDb2RlY0ZhY3RvcnlfcHRyICZwdHJfOwogIH07CiMgMTY2MyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCmNsYXNzIENv ZGVjRmFjdG9yeSA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdAogIHsKICBwdWJsaWM6Cgog ICAgdHlwZWRlZiBDb2RlY0ZhY3RvcnlfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgQ29kZWNG YWN0b3J5X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgQ29kZWNGYWN0b3J5X3B0ciBfZHVw bGljYXRlIChDb2RlY0ZhY3RvcnlfcHRyIG9iaik7CiAgICBzdGF0aWMgQ29kZWNGYWN0b3J5X3B0 ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgQ29kZWNGYWN0 b3J5X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2Jq LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAg c3RhdGljIENvZGVjRmFjdG9yeV9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVy biAoQ29kZWNGYWN0b3J5X3B0cikwOwogICAgICB9CgoKCgoKICAgIGNsYXNzIFVua25vd25FbmNv ZGluZyA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKICAg ICAgVW5rbm93bkVuY29kaW5nICh2b2lkKTsKCgogICAgICBVbmtub3duRW5jb2RpbmcgKGNvbnN0 IFVua25vd25FbmNvZGluZyAmKTsKCgogICAgICB+VW5rbm93bkVuY29kaW5nICh2b2lkKTsKCgog ICAgICBVbmtub3duRW5jb2RpbmcgJm9wZXJhdG9yPSAoY29uc3QgVW5rbm93bkVuY29kaW5nICYp OwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQg X3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9f ZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmly b25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIFVua25vd25FbmNvZGluZyAqX2Rvd25j YXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlv biAqX2FsbG9jICh2b2lkKTsKICAgIH07CgoKCgogICAgdmlydHVhbCBJT1A6OkNvZGVjX3B0ciBj cmVhdGVfY29kZWMgKAogICAgICAgIGNvbnN0IElPUDo6RW5jb2RpbmcgJiBlbmMsCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD T1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBJT1A6OkNvZGVjRmFjdG9yeTo6VW5rbm93bkVuY29kaW5n ICkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2Fy aXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRv cnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBDb2RlY0ZhY3RvcnkgKCk7Cgog ICAgdmlydHVhbCB+Q29kZWNGYWN0b3J5ICh2b2lkKTsKICBwcml2YXRlOgogICAgQ29kZWNGYWN0 b3J5IChjb25zdCBDb2RlY0ZhY3RvcnkgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ29k ZWNGYWN0b3J5ICYpOwogIH07CgoKCgoKfQoKCiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo Q09SQkE6OkFueSAmLCBjb25zdCBJT1A6OlRhZ2dlZFByb2ZpbGUgJik7CiAgICAgICAgICAgdm9p ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBJT1A6OlRhZ2dlZFByb2ZpbGUqKTsKICAgICAg ICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBJT1A6 OlRhZ2dlZFByb2ZpbGUgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49 IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6VGFnZ2VkUHJvZmlsZSAqJik7CiAgICAg ICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBJT1A6OklPUiAmKTsK ICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIElPUDo6SU9SKik7CiAg ICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwg SU9QOjpJT1IgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25z dCBDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6SU9SIComKTsKICAgICAgICAgICB2b2lkIG9wZXJh dG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9uZW50ICYpOwogICAg ICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgSU9QOjpUYWdnZWRDb21wb25l bnQqKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6 OkFueSAmLCBJT1A6OlRhZ2dlZENvbXBvbmVudCAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xl YW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgSU9QOjpUYWdnZWRDb21w b25lbnQgKiYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29u c3QgSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgJik7CiAgICAgICAgICAgdm9pZCBvcGVy YXRvcjw8PSAoQ09SQkE6OkFueSAmLCBJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSopOwog ICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYs IElPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlIComKTsKICAgICAgICAgICBDT1JCQTo6Qm9v bGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBJT1A6Ok11bHRpcGxl Q29tcG9uZW50UHJvZmlsZSAqJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6 OkFueSAmLCBjb25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudExpc3QgJik7CiAgICAgICAgICAgdm9p ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBJT1A6OlRhZ2dlZENvbXBvbmVudExpc3QqKTsK ICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAm LCBJT1A6OlRhZ2dlZENvbXBvbmVudExpc3QgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFu IG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9u ZW50TGlzdCAqJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBj b25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudFNlcSAmKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9y PDw9IChDT1JCQTo6QW55ICYsIElPUDo6VGFnZ2VkQ29tcG9uZW50U2VxKik7CiAgICAgICAgICAg Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgSU9QOjpUYWdn ZWRDb21wb25lbnRTZXEgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49 IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9uZW50U2VxIComKTsK ICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6U2Vy dmljZUNvbnRleHQgJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAm LCBJT1A6OlNlcnZpY2VDb250ZXh0Kik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0 b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgSU9QOjpTZXJ2aWNlQ29udGV4dCAqJik7CiAgICAg ICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29u c3QgSU9QOjpTZXJ2aWNlQ29udGV4dCAqJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo Q09SQkE6OkFueSAmLCBjb25zdCBJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAmKTsKICAgICAgICAg ICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIElPUDo6U2VydmljZUNvbnRleHRMaXN0 Kik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpB bnkgJiwgSU9QOjpTZXJ2aWNlQ29udGV4dExpc3QgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29s ZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6U2VydmljZUNv bnRleHRMaXN0IComKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYs IGNvbnN0IElPUDo6RW5jb2RpbmcgJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09S QkE6OkFueSAmLCBJT1A6OkVuY29kaW5nKik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3Bl cmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgSU9QOjpFbmNvZGluZyAqJik7CiAgICAgICAg ICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3Qg SU9QOjpFbmNvZGluZyAqJik7CiMgMTkzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiCmlubGluZQpJT1A6OlRh Z2dlZFByb2ZpbGVfdmFyOjpUYWdnZWRQcm9maWxlX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9 CgppbmxpbmUKSU9QOjpUYWdnZWRQcm9maWxlX3Zhcjo6VGFnZ2VkUHJvZmlsZV92YXIgKFRhZ2dl ZFByb2ZpbGUgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCklPUDo6VGFnZ2VkUHJvZmlsZV92 YXI6OlRhZ2dlZFByb2ZpbGVfdmFyIChjb25zdCA6OklPUDo6VGFnZ2VkUHJvZmlsZV92YXIgJnAp CnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6SU9QOjpU YWdnZWRQcm9maWxlICgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vy cm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAg dGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6OlRhZ2dlZFByb2ZpbGVfdmFyOjp+VGFnZ2Vk UHJvZmlsZV92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIElPUDo6 VGFnZ2VkUHJvZmlsZV92YXIgJgpJT1A6OlRhZ2dlZFByb2ZpbGVfdmFyOjpvcGVyYXRvcj0gKFRh Z2dlZFByb2ZpbGUgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsK ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkUHJvZmlsZV92YXIgJgpJT1A6 OlRhZ2dlZFByb2ZpbGVfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6SU9QOjpUYWdnZWRQcm9maWxl X3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDAp CiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5w dHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBUYWdnZWRQ cm9maWxlICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgVGFnZ2VkUHJvZmlsZSAoKnAucHRy Xyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgVGFnZ2VkUHJvZmlsZSAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBf Y29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAg ICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoK ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6VGFnZ2VkUHJvZmlsZSAqCklP UDo6VGFnZ2VkUHJvZmlsZV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g dGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRQcm9maWxlICoKSU9QOjpUYWdnZWRQ cm9maWxlX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgpp bmxpbmUKSU9QOjpUYWdnZWRQcm9maWxlX3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpJT1A6OlRhZ2dl ZFByb2ZpbGUgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6 OlRhZ2dlZFByb2ZpbGVfdmFyOjpvcGVyYXRvciA6OklPUDo6VGFnZ2VkUHJvZmlsZSAmKCkKewog IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCklPUDo6VGFnZ2VkUHJvZmlsZV92YXI6Om9w ZXJhdG9yIDo6SU9QOjpUYWdnZWRQcm9maWxlICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w dHJfOwp9CgoKaW5saW5lCklPUDo6VGFnZ2VkUHJvZmlsZV92YXI6Om9wZXJhdG9yIDo6SU9QOjpU YWdnZWRQcm9maWxlIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3Qg OjpJT1A6OlRhZ2dlZFByb2ZpbGUgJgpJT1A6OlRhZ2dlZFByb2ZpbGVfdmFyOjppbiAodm9pZCkg Y29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRQcm9m aWxlICYKSU9QOjpUYWdnZWRQcm9maWxlX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRo aXMtPnB0cl87Cn0KCgppbmxpbmUgOjpJT1A6OlRhZ2dlZFByb2ZpbGUgKiYKSU9QOjpUYWdnZWRQ cm9maWxlX3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRy XyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkUHJvZmls ZSAqCklPUDo6VGFnZ2VkUHJvZmlsZV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpJT1A6OlRhZ2dl ZFByb2ZpbGUgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRt cDsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRQcm9maWxlICoKSU9QOjpUYWdnZWRQcm9maWxlX3Zh cjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUK SU9QOjpUYWdnZWRQcm9maWxlX291dDo6VGFnZ2VkUHJvZmlsZV9vdXQgKDo6SU9QOjpUYWdnZWRQ cm9maWxlIComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCklP UDo6VGFnZ2VkUHJvZmlsZV9vdXQ6OlRhZ2dlZFByb2ZpbGVfb3V0IChUYWdnZWRQcm9maWxlX3Zh ciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+ cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6OlRhZ2dlZFByb2ZpbGVfb3V0OjpUYWdnZWRQcm9maWxl X291dCAoY29uc3QgOjpJT1A6OlRhZ2dlZFByb2ZpbGVfb3V0ICZwKQogIDogcHRyXyAoY29uc3Rf Y2FzdDxUYWdnZWRQcm9maWxlX291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIElPUDo6VGFnZ2Vk UHJvZmlsZV9vdXQgJgpJT1A6OlRhZ2dlZFByb2ZpbGVfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6 SU9QOjpUYWdnZWRQcm9maWxlX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFRh Z2dlZFByb2ZpbGVfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgSU9Q OjpUYWdnZWRQcm9maWxlX291dCAmCklPUDo6VGFnZ2VkUHJvZmlsZV9vdXQ6Om9wZXJhdG9yPSAo VGFnZ2VkUHJvZmlsZSAqcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoK aW5saW5lCklPUDo6VGFnZ2VkUHJvZmlsZV9vdXQ6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRQcm9m aWxlIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlRhZ2dlZFBy b2ZpbGUgKiYKSU9QOjpUYWdnZWRQcm9maWxlX291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRo aXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkUHJvZmlsZSAqCklPUDo6VGFnZ2VkUHJv ZmlsZV9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoK CmlubGluZQpJT1A6OklPUl92YXI6OklPUl92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5s aW5lCklPUDo6SU9SX3Zhcjo6SU9SX3ZhciAoSU9SICpwKQogIDogcHRyXyAocCkKe30KCmlubGlu ZQpJT1A6OklPUl92YXI6OklPUl92YXIgKGNvbnN0IDo6SU9QOjpJT1JfdmFyICZwKQp7CiAgaWYg KHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OklPUDo6SU9SICgqcC5w dHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9 IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0K CmlubGluZQpJT1A6OklPUl92YXI6On5JT1JfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0 cl87Cn0KCmlubGluZSBJT1A6OklPUl92YXIgJgpJT1A6OklPUl92YXI6Om9wZXJhdG9yPSAoSU9S ICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0 aGlzOwp9CgppbmxpbmUgOjpJT1A6OklPUl92YXIgJgpJT1A6OklPUl92YXI6Om9wZXJhdG9yPSAo Y29uc3QgOjpJT1A6OklPUl92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAg aWYgKHAucHRyXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwog ICAgICAgICAgdGhpcy0+cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewog ICAgICAgICAgSU9SICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgSU9SICgqcC5wdHJfKTsK CiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBJT1IgKnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5w dHJfOwogICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRl IGRlZXBfY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlz Owp9CgppbmxpbmUgY29uc3QgOjpJT1A6OklPUiAqCklPUDo6SU9SX3Zhcjo6b3BlcmF0b3ItPiAo dm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OklPUiAq CklPUDo6SU9SX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9 CgppbmxpbmUKSU9QOjpJT1JfdmFyOjpvcGVyYXRvciBjb25zdCA6OklPUDo6SU9SICYoKSBjb25z dAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpJT1JfdmFyOjpvcGVyYXRv ciA6OklPUDo6SU9SICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpJ T1JfdmFyOjpvcGVyYXRvciA6OklPUDo6SU9SICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w dHJfOwp9CgoKaW5saW5lCklPUDo6SU9SX3Zhcjo6b3BlcmF0b3IgOjpJT1A6OklPUiAqJigpCnsK ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IDo6SU9QOjpJT1IgJgpJT1A6OklP Ul92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUg OjpJT1A6OklPUiAmCklPUDo6SU9SX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMt PnB0cl87Cn0KCgppbmxpbmUgOjpJT1A6OklPUiAqJgpJT1A6OklPUl92YXI6Om91dCAodm9pZCkK ewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5w dHJfOwp9CgppbmxpbmUgOjpJT1A6OklPUiAqCklPUDo6SU9SX3Zhcjo6X3JldG4gKHZvaWQpCnsK ICA6OklPUDo6SU9SICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVy biB0bXA7Cn0KCmlubGluZSA6OklPUDo6SU9SICoKSU9QOjpJT1JfdmFyOjpwdHIgKHZvaWQpIGNv bnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpJT1A6OklPUl9vdXQ6OklP Ul9vdXQgKDo6SU9QOjpJT1IgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9 CgppbmxpbmUKSU9QOjpJT1Jfb3V0OjpJT1Jfb3V0IChJT1JfdmFyICZwKQogIDogcHRyXyAocC5v dXQgKCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5l CklPUDo6SU9SX291dDo6SU9SX291dCAoY29uc3QgOjpJT1A6OklPUl9vdXQgJnApCiAgOiBwdHJf IChjb25zdF9jYXN0PElPUl9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSBJT1A6OklPUl9vdXQg JgpJT1A6OklPUl9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpJT1A6OklPUl9vdXQgJnApCnsKICB0 aGlzLT5wdHJfID0gY29uc3RfY2FzdDxJT1Jfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlz Owp9CgppbmxpbmUgSU9QOjpJT1Jfb3V0ICYKSU9QOjpJT1Jfb3V0OjpvcGVyYXRvcj0gKElPUiAq cCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCklPUDo6SU9S X291dDo6b3BlcmF0b3IgOjpJT1A6OklPUiAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK aW5saW5lIDo6SU9QOjpJT1IgKiYKSU9QOjpJT1Jfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4g dGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpJT1IgKgpJT1A6OklPUl9vdXQ6Om9wZXJhdG9y LT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQojIDQxNSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiCiAgaW5saW5lIElPUDo6 VGFnZ2VkUHJvZmlsZSAqCiAgSU9QOjpJT1I6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9J T1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZTo6YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQoK ICB7CiAgICBJT1A6OlRhZ2dlZFByb2ZpbGUgKnJldHZhbCA9IDA7CiAgICBkbyB7IHRyeSB7IHJl dHZhbCA9IG5ldyBJT1A6OlRhZ2dlZFByb2ZpbGVbc2l6ZV07IH0gY2F0Y2ggKHN0ZDo6YmFkX2Fs bG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGlsZSAo MCk7CiAgICByZXR1cm4gcmV0dmFsOwogIH0KCiAgaW5saW5lIHZvaWQgSU9QOjpJT1I6Ol9UQU9f VW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZTo6ZnJlZWJ1 ZiAoSU9QOjpUYWdnZWRQcm9maWxlICpidWZmZXIpCgogIHsKICAgIGRlbGV0ZSBbXSBidWZmZXI7 CiAgfQoKICBpbmxpbmUKICBJT1A6OklPUjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lP Ul9fdGFvX3NlcV9UYWdnZWRQcm9maWxlOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9S X190YW9fc2VxX1RhZ2dlZFByb2ZpbGUgKHZvaWQpCiAgewogIH0KCiAgaW5saW5lCiAgSU9QOjpJ T1I6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmls ZTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxl IChDT1JCQTo6VUxvbmcgbWF4aW11bSkKICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNl IChtYXhpbXVtLCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2VxX1RhZ2dl ZFByb2ZpbGU6OmFsbG9jYnVmIChtYXhpbXVtKSkKICB7CiAgfQoKICBpbmxpbmUKICBJT1A6OklP Ujo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxl OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2VxX1RhZ2dlZFByb2ZpbGUg KENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgIElPUDo6 VGFnZ2VkUHJvZmlsZSAqZGF0YSwKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9f VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkK ICB7CiAgfQoKICBpbmxpbmUKICBJT1A6OklPUjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9Q X0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1Bf SU9SX190YW9fc2VxX1RhZ2dlZFByb2ZpbGUgKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAmcmhzKQoKICAgIDogVEFPX1VuYm91bmRl ZF9CYXNlX1NlcXVlbmNlIChyaHMpCiAgewogICAgaWYgKHJocy5idWZmZXJfICE9IDApCiAgICB7 CiAgICAgIElPUDo6VGFnZ2VkUHJvZmlsZSAqdG1wMSA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZTo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1f KTsKICAgICAgSU9QOjpUYWdnZWRQcm9maWxlICogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nh c3Q8SU9QOjpUYWdnZWRQcm9maWxlICo+IChyaHMuYnVmZmVyXyk7CgogICAgICBmb3IgKENPUkJB OjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgICB0bXAxW2ldID0g dG1wMltpXTsKCiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSB0bXAxOwogICAgfQogICAgZWxzZQogICAg ewogICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgIH0KICB9CgogIGlubGluZSBJT1A6OklPUjo6 X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlICYK ICBJT1A6OklPUjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdn ZWRQcm9maWxlOjpvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9J T1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhz KQogICAgICByZXR1cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAg ICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgSU9Q OjpUYWdnZWRQcm9maWxlICp0bXAgPSByZWludGVycHJldF9jYXN0PElPUDo6VGFnZ2VkUHJvZmls ZSAqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9Q X0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlOjpmcmVlYnVmICh0bXApOwogICAgICAgIHRoaXMt PmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2VxX1RhZ2dl ZFByb2ZpbGU6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgICB9CiAgICB9CiAgICBlbHNl CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190 YW9fc2VxX1RhZ2dlZFByb2ZpbGU6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICAgIFRBT19V bmJvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICAgIElPUDo6VGFnZ2Vk UHJvZmlsZSAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRQcm9maWxlICo+ICh0 aGlzLT5idWZmZXJfKTsKICAgIElPUDo6VGFnZ2VkUHJvZmlsZSAqIGNvbnN0IHRtcDIgPSByZWlu dGVycHJldF9jYXN0PElPUDo6VGFnZ2VkUHJvZmlsZSAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgIGZv ciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICB0bXAx W2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIElPUDo6VGFn Z2VkUHJvZmlsZSAmCiAgSU9QOjpJT1I6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1Jf X3Rhb19zZXFfVGFnZ2VkUHJvZmlsZTo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpCgogIHsK ICAgIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFD RV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjpp bnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIsIDUwNywgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18t PnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNr ICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAl bCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwg LTEpOyB9IH0gd2hpbGUgKDApOwogICAgSU9QOjpUYWdnZWRQcm9maWxlKiB0bXAgPSByZWludGVy cHJldF9jYXN0PElPUDo6VGFnZ2VkUHJvZmlsZSo+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVy biB0bXBbaV07CiAgfQoKICBpbmxpbmUgY29uc3QgSU9QOjpUYWdnZWRQcm9maWxlICYKICBJT1A6 OklPUjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9m aWxlOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3QKCiAgewogICAgZG8geyBpZigh KGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vy cm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBh Y2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vSU9QQy5pIiwgNTE2LCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwg YWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18t PmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBm YWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGls ZSAoMCk7CiAgICBJT1A6OlRhZ2dlZFByb2ZpbGUgKiBjb25zdCB0bXAgPSByZWludGVycHJldF9j YXN0PElPUDo6VGFnZ2VkUHJvZmlsZSo+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVybiB0bXBb aV07CiAgfQoKCgogIGlubGluZSBJT1A6OlRhZ2dlZFByb2ZpbGUgKgogIElPUDo6SU9SOjpfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2VxX1RhZ2dlZFByb2ZpbGU6OmdldF9i dWZmZXIgKENPUkJBOjpCb29sZWFuIG9ycGhhbikKICB7CiAgICBJT1A6OlRhZ2dlZFByb2ZpbGUg KnJlc3VsdCA9IDA7CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+ YnVmZmVyXyA9PSAwKQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRfU2Vx dWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlOjphbGxvY2J1ZiAodGhpcy0+bGVu Z3RoXyk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgICB0aGlzLT5yZWxl YXNlXyA9IDE7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gcmVp bnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZFByb2ZpbGUqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAg IH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVhc2VfICE9IDApCiAg ICAgIHsKCgogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRQcm9m aWxlKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAg ICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0 aGlzLT5yZWxlYXNlXyA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoK ICBpbmxpbmUgY29uc3QgSU9QOjpUYWdnZWRQcm9maWxlICoKICBJT1A6OklPUjo6X1RBT19VbmJv dW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlOjpnZXRfYnVmZmVy ICh2b2lkKSBjb25zdAogIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IElPUDo6 VGFnZ2VkUHJvZmlsZSAqPiAodGhpcy0+YnVmZmVyXyk7CiAgfQoKICBpbmxpbmUgdm9pZAogIElP UDo6SU9SOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2VxX1RhZ2dlZFBy b2ZpbGU6OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgQ09SQkE6OlVMb25nIGxlbmd0aCwK ICBJT1A6OlRhZ2dlZFByb2ZpbGUgKmRhdGEsCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICB7 CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAgIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAg ICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQogICAgewogICAgICBJ T1A6OlRhZ2dlZFByb2ZpbGUgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRQcm9m aWxlKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1Bf SU9SX190YW9fc2VxX1RhZ2dlZFByb2ZpbGU6OmZyZWVidWYgKHRtcCk7CiAgICB9CiAgICB0aGlz LT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVsZWFzZTsKICB9CiMgNTg4 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMu aSIKaW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50X3Zhcjo6VGFnZ2VkQ29tcG9uZW50X3ZhciAo dm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRfdmFyOjpU YWdnZWRDb21wb25lbnRfdmFyIChUYWdnZWRDb21wb25lbnQgKnApCiAgOiBwdHJfIChwKQp7fQoK aW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50X3Zhcjo6VGFnZ2VkQ29tcG9uZW50X3ZhciAoY29u c3QgOjpJT1A6OlRhZ2dlZENvbXBvbmVudF92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8g eyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6SU9QOjpUYWdnZWRDb21wb25lbnQgKCpwLnB0cl8p OyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7 IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5s aW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50X3Zhcjo6flRhZ2dlZENvbXBvbmVudF92YXIgKHZvaWQp CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIElPUDo6VGFnZ2VkQ29tcG9uZW50X3Zh ciAmCklPUDo6VGFnZ2VkQ29tcG9uZW50X3Zhcjo6b3BlcmF0b3I9IChUYWdnZWRDb21wb25lbnQg KnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRo aXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50X3ZhciAmCklPUDo6VGFnZ2VkQ29t cG9uZW50X3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50X3ZhciAm cCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAg ICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0g MDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBUYWdnZWRDb21wb25l bnQgKmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBUYWdnZWRDb21wb25lbnQgKCpwLnB0cl8p OwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIFRhZ2dlZENvbXBvbmVudCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBf Y29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAg ICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoK ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50ICoK SU9QOjpUYWdnZWRDb21wb25lbnRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0 dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50ICoKSU9QOjpU YWdnZWRDb21wb25lbnRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0 cl87Cn0KCmlubGluZQpJT1A6OlRhZ2dlZENvbXBvbmVudF92YXI6Om9wZXJhdG9yIGNvbnN0IDo6 SU9QOjpUYWdnZWRDb21wb25lbnQgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K CmlubGluZQpJT1A6OlRhZ2dlZENvbXBvbmVudF92YXI6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRD b21wb25lbnQgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6OlRhZ2dl ZENvbXBvbmVudF92YXI6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRDb21wb25lbnQgJigpIGNvbnN0 CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRf dmFyOjpvcGVyYXRvciA6OklPUDo6VGFnZ2VkQ29tcG9uZW50IComKCkKewogIHJldHVybiB0aGlz LT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpJT1A6OlRhZ2dlZENvbXBvbmVudCAmCklPUDo6VGFn Z2VkQ29tcG9uZW50X3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87 Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50ICYKSU9QOjpUYWdnZWRDb21wb25lbnRf dmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OklP UDo6VGFnZ2VkQ29tcG9uZW50IComCklPUDo6VGFnZ2VkQ29tcG9uZW50X3Zhcjo6b3V0ICh2b2lk KQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMt PnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50ICoKSU9QOjpUYWdnZWRDb21w b25lbnRfdmFyOjpfcmV0biAodm9pZCkKewogIDo6SU9QOjpUYWdnZWRDb21wb25lbnQgKnRtcCA9 IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6 SU9QOjpUYWdnZWRDb21wb25lbnQgKgpJT1A6OlRhZ2dlZENvbXBvbmVudF92YXI6OnB0ciAodm9p ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lCklPUDo6VGFnZ2Vk Q29tcG9uZW50X291dDo6VGFnZ2VkQ29tcG9uZW50X291dCAoOjpJT1A6OlRhZ2dlZENvbXBvbmVu dCAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6OlRh Z2dlZENvbXBvbmVudF9vdXQ6OlRhZ2dlZENvbXBvbmVudF9vdXQgKFRhZ2dlZENvbXBvbmVudF92 YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMt PnB0cl8gPSAwOwp9CgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRfb3V0OjpUYWdnZWRDb21w b25lbnRfb3V0IChjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50X291dCAmcCkKICA6IHB0cl8g KGNvbnN0X2Nhc3Q8VGFnZ2VkQ29tcG9uZW50X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIElP UDo6VGFnZ2VkQ29tcG9uZW50X291dCAmCklPUDo6VGFnZ2VkQ29tcG9uZW50X291dDo6b3BlcmF0 b3I9IChjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50X291dCAmcCkKewogIHRoaXMtPnB0cl8g PSBjb25zdF9jYXN0PFRhZ2dlZENvbXBvbmVudF9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRo aXM7Cn0KCmlubGluZSBJT1A6OlRhZ2dlZENvbXBvbmVudF9vdXQgJgpJT1A6OlRhZ2dlZENvbXBv bmVudF9vdXQ6Om9wZXJhdG9yPSAoVGFnZ2VkQ29tcG9uZW50ICpwKQp7CiAgdGhpcy0+cHRyXyA9 IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRfb3V0Ojpv cGVyYXRvciA6OklPUDo6VGFnZ2VkQ29tcG9uZW50IComKCkKewogIHJldHVybiB0aGlzLT5wdHJf Owp9CgppbmxpbmUgOjpJT1A6OlRhZ2dlZENvbXBvbmVudCAqJgpJT1A6OlRhZ2dlZENvbXBvbmVu dF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6 OlRhZ2dlZENvbXBvbmVudCAqCklPUDo6VGFnZ2VkQ29tcG9uZW50X291dDo6b3BlcmF0b3ItPiAo dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CiMgNzg0ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIKICBpbmxpbmUgSU9QOjpUYWdn ZWRDb21wb25lbnQgKgogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxl Q29tcG9uZW50UHJvZmlsZTo6YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQoKICB7CiAgICBJ T1A6OlRhZ2dlZENvbXBvbmVudCAqcmV0dmFsID0gMDsKICAgIGRvIHsgdHJ5IHsgcmV0dmFsID0g bmV3IElPUDo6VGFnZ2VkQ29tcG9uZW50W3NpemVdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykg eyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwog ICAgcmV0dXJuIHJldHZhbDsKICB9CgogIGlubGluZSB2b2lkIElPUDo6X1RBT19VbmJvdW5kZWRf U2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6ZnJlZWJ1ZiAoSU9QOjpUYWdn ZWRDb21wb25lbnQgKmJ1ZmZlcikKCiAgewogICAgZGVsZXRlIFtdIGJ1ZmZlcjsKICB9CgogIGlu bGluZQogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50 UHJvZmlsZTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJv ZmlsZSAodm9pZCkKICB7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVl bmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGU6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKENPUkJBOjpVTG9uZyBtYXhpbXVtKQogICAg OiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIF9UQU9fVW5ib3VuZGVkX1Nl cXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGU6OmFsbG9jYnVmIChtYXhpbXVtKSkK ICB7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0 aXBsZUNvbXBvbmVudFByb2ZpbGU6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBs ZUNvbXBvbmVudFByb2ZpbGUgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgQ09SQkE6OlVMb25n IGxlbmd0aCwKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICpkYXRhLAogICAgQ09SQkE6OkJvb2xl YW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVu Z3RoLCBkYXRhLCByZWxlYXNlKQogIHsKICB9CgogIGlubGluZQogIElPUDo6X1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6X1RBT19VbmJvdW5kZWRf U2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAoY29uc3QgX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAmcmhzKQoKICAgIDogVEFP X1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCiAgewogICAgaWYgKHJocy5idWZmZXJfICE9 IDApCiAgICB7CiAgICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICp0bXAxID0gX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6YWxsb2NidWYgKHRoaXMt Pm1heGltdW1fKTsKICAgICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAyID0gcmVp bnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCAqPiAocmhzLmJ1ZmZlcl8pOwoKICAg ICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAg ICAgdG1wMVtpXSA9IHRtcDJbaV07CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0K ICAgIGVsc2UKICAgIHsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxp bmUgSU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfTXVsdGlwbGVDb21wb25lbnRQcm9m aWxlICYKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVu dFByb2ZpbGU6Om9wZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011 bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQog ICAgICByZXR1cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBp ZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgSU9QOjpU YWdnZWRDb21wb25lbnQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25l bnQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lP UF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGU6OmZyZWVidWYgKHRtcCk7CiAgICAgICAgdGhpcy0+ YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFBy b2ZpbGU6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAg ICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfTXVsdGlwbGVD b21wb25lbnRQcm9maWxlOjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKCiAgICBUQU9fVW5ib3Vu ZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgICBJT1A6OlRhZ2dlZENvbXBv bmVudCAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQgKj4gKHRo aXMtPmJ1ZmZlcl8pOwogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAyID0gcmVp bnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCAqPiAocmhzLmJ1ZmZlcl8pOwoKICAg IGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICB0 bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIElPUDo6 VGFnZ2VkQ29tcG9uZW50ICYKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0 aXBsZUNvbXBvbmVudFByb2ZpbGU6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKQoKICB7CiAg ICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBBQ0Vf T1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5z dGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiLCA4NzYsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5y ZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAo KSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwg YXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0x KTsgfSB9IHdoaWxlICgwKTsKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50KiB0bXAgPSByZWludGVy cHJldF9jYXN0PElPUDo6VGFnZ2VkQ29tcG9uZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgcmV0 dXJuIHRtcFtpXTsKICB9CgogIGlubGluZSBjb25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudCAmCiAg SU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfTXVsdGlwbGVDb21wb25lbnRQcm9maWxl OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3QKCiAgewogICAgZG8geyBpZighKGkg PCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9y ICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2Vf X18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vSU9QQy5pIiwgODg1LCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNl X19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxv ZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWls ZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAo MCk7CiAgICBJT1A6OlRhZ2dlZENvbXBvbmVudCAqIGNvbnN0IHRtcCA9IHJlaW50ZXJwcmV0X2Nh c3Q8SU9QOjpUYWdnZWRDb21wb25lbnQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gdG1w W2ldOwogIH0KCgoKICBpbmxpbmUgSU9QOjpUYWdnZWRDb21wb25lbnQgKgogIElPUDo6X1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6Z2V0X2J1ZmZl ciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQogIHsKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICpy ZXN1bHQgPSAwOwogICAgaWYgKG9ycGhhbiA9PSAwKQogICAgewoKICAgICAgaWYgKHRoaXMtPmJ1 ZmZlcl8gPT0gMCkKICAgICAgewogICAgICAgIHJlc3VsdCA9IF9UQU9fVW5ib3VuZGVkX1NlcXVl bmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGU6OmFsbG9jYnVmICh0aGlzLT5sZW5ndGhf KTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gcmVzdWx0OwogICAgICAgIHRoaXMtPnJlbGVhc2Vf ID0gMTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICByZXN1bHQgPSByZWludGVy cHJldF9jYXN0PElPUDo6VGFnZ2VkQ29tcG9uZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICB9 CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAwKQogICAg ICB7CgoKICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PElPUDo6VGFnZ2VkQ29tcG9u ZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAg ICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0 aGlzLT5yZWxlYXNlXyA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoK ICBpbmxpbmUgY29uc3QgSU9QOjpUYWdnZWRDb21wb25lbnQgKgogIElPUDo6X1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6Z2V0X2J1ZmZlciAodm9p ZCkgY29uc3QKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJT1A6OlRhZ2dl ZENvbXBvbmVudCAqPiAodGhpcy0+YnVmZmVyXyk7CiAgfQoKICBpbmxpbmUgdm9pZAogIElPUDo6 X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6cmVw bGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogIElPUDo6VGFn Z2VkQ29tcG9uZW50ICpkYXRhLAogIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgewogICAgdGhp cy0+bWF4aW11bV8gPSBtYXg7CiAgICB0aGlzLT5sZW5ndGhfID0gbGVuZ3RoOwogICAgaWYgKHRo aXMtPmJ1ZmZlcl8gJiYgdGhpcy0+cmVsZWFzZV8gPT0gMSkKICAgIHsKICAgICAgSU9QOjpUYWdn ZWRDb21wb25lbnQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQq PiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0 aXBsZUNvbXBvbmVudFByb2ZpbGU6OmZyZWVidWYgKHRtcCk7CiAgICB9CiAgICB0aGlzLT5idWZm ZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVsZWFzZTsKICB9CiMgOTYxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIKaW5s aW5lCklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6TXVsdGlwbGVDb21wb25lbnRQ cm9maWxlX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKSU9QOjpNdWx0aXBsZUNv bXBvbmVudFByb2ZpbGVfdmFyOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyIChNdWx0aXBs ZUNvbXBvbmVudFByb2ZpbGUgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCklPUDo6TXVsdGlw bGVDb21wb25lbnRQcm9maWxlX3Zhcjo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAoY29u c3QgOjpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgJnApCnsKICBpZiAocC5wdHJf KQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6SU9QOjpNdWx0aXBsZUNvbXBvbmVu dFByb2ZpbGUgKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9f bG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlz LT5wdHJfID0gMDsKfQoKaW5saW5lCklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6 fk11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRy XzsKfQoKaW5saW5lIElPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAmCklPUDo6TXVs dGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6b3BlcmF0b3I9IChNdWx0aXBsZUNvbXBvbmVudFBy b2ZpbGUgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1 cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAm CklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OklP UDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQog ICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRo aXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UK ICAgICAgICB7CiAgICAgICAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKmRlZXBfY29weSA9 CiAgICAgICAgICAgIG5ldyBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKCpwLnB0cl8pOwoKICAg ICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIE11 bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRl ZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAg ICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg fQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6TXVsdGlwbGVDb21wb25l bnRQcm9maWxlICoKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyOjpvcGVyYXRvci0+ ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6TXVs dGlwbGVDb21wb25lbnRQcm9maWxlICoKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFy OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6 Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXI6Om9wZXJhdG9yIGNvbnN0IDo6SU9QOjpNdWx0 aXBsZUNvbXBvbmVudFByb2ZpbGUgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K CmlubGluZQpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXI6Om9wZXJhdG9yIDo6SU9Q OjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K CmlubGluZQpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXI6Om9wZXJhdG9yIDo6SU9Q OjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0 cl87Cn0KCgppbmxpbmUKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyOjpvcGVyYXRv ciA6OklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlIComKCkKewogIHJldHVybiB0aGlzLT5w dHJfOwp9CgppbmxpbmUgSU9QOjpUYWdnZWRDb21wb25lbnQgJgpJT1A6Ok11bHRpcGxlQ29tcG9u ZW50UHJvZmlsZV92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVy biB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25zdCBJT1A6OlRh Z2dlZENvbXBvbmVudCAmCklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6b3BlcmF0 b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdAp7CiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29u c3QgSU9QOjpUYWdnZWRDb21wb25lbnQgJj4gKHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4 KSk7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlICYKSU9Q OjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVy biAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUg JgpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0 dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6SU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2Zp bGUgKiYKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyOjpvdXQgKHZvaWQpCnsKICBk ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsK fQoKaW5saW5lIDo6SU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKgpJT1A6Ok11bHRpcGxl Q29tcG9uZW50UHJvZmlsZV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpJT1A6Ok11bHRpcGxlQ29t cG9uZW50UHJvZmlsZSAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1 cm4gdG1wOwp9CgppbmxpbmUgOjpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAqCklPUDo6 TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJu IHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVf b3V0OjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfb3V0IChNdWx0aXBsZUNvbXBvbmVudFByb2Zp bGUgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKSU9QOjpN dWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfb3V0OjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfb3V0 IChNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsK ICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCklPUDo6TXVs dGlwbGVDb21wb25lbnRQcm9maWxlX291dDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dCAo Y29uc3QgOjpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV9vdXQgJnApCiAgOiBwdHJfIChj b25zdF9jYXN0PE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV9vdXQmPiAocCkucHRyXykKe30KCmlu bGluZSA6OklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dCAmCklPUDo6TXVsdGlwbGVD b21wb25lbnRQcm9maWxlX291dDo6b3BlcmF0b3I9IChjb25zdCA6OklPUDo6TXVsdGlwbGVDb21w b25lbnRQcm9maWxlX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PE11bHRpcGxl Q29tcG9uZW50UHJvZmlsZV9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGlu ZSA6OklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dCAmCklPUDo6TXVsdGlwbGVDb21w b25lbnRQcm9maWxlX291dDo6b3BlcmF0b3I9IChNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKnAp CnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpJT1A6Ok11bHRp cGxlQ29tcG9uZW50UHJvZmlsZV9vdXQ6Om9wZXJhdG9yIDo6SU9QOjpNdWx0aXBsZUNvbXBvbmVu dFByb2ZpbGUgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6TXVs dGlwbGVDb21wb25lbnRQcm9maWxlIComCklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291 dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6TXVs dGlwbGVDb21wb25lbnRQcm9maWxlICoKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfb3V0 OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBJT1A6 OlRhZ2dlZENvbXBvbmVudCAmCklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dDo6b3Bl cmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJh dG9yW10gKGluZGV4KTsKfQojIDExNzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vSU9QQy5pIgogIGlubGluZSBJT1A6OlRhZ2dlZENvbXBvbmVudCAq CiAgSU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdDo6 YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQoKICB7CiAgICBJT1A6OlRhZ2dlZENvbXBvbmVu dCAqcmV0dmFsID0gMDsKICAgIGRvIHsgdHJ5IHsgcmV0dmFsID0gbmV3IElPUDo6VGFnZ2VkQ29t cG9uZW50W3NpemVdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRp b24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwogICAgcmV0dXJuIHJldHZhbDsK ICB9CgogIGlubGluZSB2b2lkIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dl ZENvbXBvbmVudExpc3Q6OmZyZWVidWYgKElPUDo6VGFnZ2VkQ29tcG9uZW50ICpidWZmZXIpCgog IHsKICAgIGRlbGV0ZSBbXSBidWZmZXI7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpfVEFPX1VuYm91bmRlZF9TZXF1 ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdCAodm9pZCkKICB7CiAgfQoKICBpbmxpbmUKICBJ T1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdCAoQ09SQkE6OlVMb25n IG1heGltdW0pCiAgICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgX1RB T19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudExpc3Q6OmFsbG9jYnVmICht YXhpbXVtKSkKICB7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFn Z2VkQ29tcG9uZW50TGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcg bGVuZ3RoLAogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKmRhdGEsCiAgICBDT1JCQTo6Qm9vbGVh biByZWxlYXNlKQogIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBsZW5n dGgsIGRhdGEsIHJlbGVhc2UpCiAgewogIH0KCiAgaW5saW5lCiAgSU9QOjpfVEFPX1VuYm91bmRl ZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdDo6X1RBT19VbmJvdW5kZWRfU2VxdWVu Y2VfSU9QX1RhZ2dlZENvbXBvbmVudExpc3QgKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X0lPUF9UYWdnZWRDb21wb25lbnRMaXN0ICZyaHMpCgogICAgOiBUQU9fVW5ib3VuZGVkX0Jhc2Vf U2VxdWVuY2UgKHJocykKICB7CiAgICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAg SU9QOjpUYWdnZWRDb21wb25lbnQgKnRtcDEgPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1Bf VGFnZ2VkQ29tcG9uZW50TGlzdDo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1fKTsKICAgICAgSU9Q OjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxJT1A6OlRh Z2dlZENvbXBvbmVudCAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9yIChDT1JCQTo6VUxvbmcg aSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgdG1wMVtpXSA9IHRtcDJbaV07 CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAg dGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxpbmUgSU9QOjpfVEFPX1VuYm91bmRl ZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdCAmCiAgSU9QOjpfVEFPX1VuYm91bmRl ZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdDo6b3BlcmF0b3I9IChjb25zdCBfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdCAmcmhzKQoKICB7CiAg ICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJl bGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAg ICAgIHsKCiAgICAgICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nh c3Q8SU9QOjpUYWdnZWRDb21wb25lbnQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIF9UQU9f VW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpmcmVlYnVmICh0bXAp OwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFn Z2VkQ29tcG9uZW50TGlzdDo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgIH0KICAgIH0K ICAgIGVsc2UKICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lP UF9UYWdnZWRDb21wb25lbnRMaXN0OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKCiAgICBUQU9f VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgICBJT1A6OlRhZ2dl ZENvbXBvbmVudCAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQg Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAy ID0gcmVpbnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCAqPiAocmhzLmJ1ZmZlcl8p OwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQog ICAgICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5l IElPUDo6VGFnZ2VkQ29tcG9uZW50ICYKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lP UF9UYWdnZWRDb21wb25lbnRMaXN0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkKCiAgewog ICAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNF X09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omlu c3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vSU9QQy5pIiwgMTI3MCwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18t PnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNr ICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAl bCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwg LTEpOyB9IH0gd2hpbGUgKDApOwogICAgSU9QOjpUYWdnZWRDb21wb25lbnQqIHRtcCA9IHJlaW50 ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICBy ZXR1cm4gdG1wW2ldOwogIH0KCiAgaW5saW5lIGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9uZW50ICYK ICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0Ojpv cGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3QKCiAgewogICAgZG8geyBpZighKGkgPCB0 aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgp OyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18t PnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v SU9QQy5pIiwgMTI3OSwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQgKCksIGFjZV9f Xy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNlX19fLT5sb2cg KExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRpb24gZmFpbGVk IGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEpOyB9IH0gd2hpbGUgKDAp OwogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAgPSByZWludGVycHJldF9jYXN0 PElPUDo6VGFnZ2VkQ29tcG9uZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgcmV0dXJuIHRtcFtp XTsKICB9CgoKCiAgaW5saW5lIElPUDo6VGFnZ2VkQ29tcG9uZW50ICoKICBJT1A6Ol9UQU9fVW5i b3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpnZXRfYnVmZmVyIChDT1JC QTo6Qm9vbGVhbiBvcnBoYW4pCiAgewogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKnJlc3VsdCA9 IDA7CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+YnVmZmVyXyA9 PSAwKQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9Q X1RhZ2dlZENvbXBvbmVudExpc3Q6OmFsbG9jYnVmICh0aGlzLT5sZW5ndGhfKTsKICAgICAgICB0 aGlzLT5idWZmZXJfID0gcmVzdWx0OwogICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAg fQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PElP UDo6VGFnZ2VkQ29tcG9uZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICB9CiAgICB9CiAgICBl bHNlCiAgICB7CiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAwKQogICAgICB7CgoKICAgICAg ICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PElPUDo6VGFnZ2VkQ29tcG9uZW50Kj4gKHRoaXMt PmJ1ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAgICB0aGlzLT5sZW5n dGhfID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0aGlzLT5yZWxlYXNl XyA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbmxpbmUgY29u c3QgSU9QOjpUYWdnZWRDb21wb25lbnQgKgogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf SU9QX1RhZ2dlZENvbXBvbmVudExpc3Q6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CiAgewogICAg cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSU9QOjpUYWdnZWRDb21wb25lbnQgKj4gKHRo aXMtPmJ1ZmZlcl8pOwogIH0KCiAgaW5saW5lIHZvaWQKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1Nl cXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpyZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4 LAogIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgSU9QOjpUYWdnZWRDb21wb25lbnQgKmRhdGEsCiAg Q09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAg IHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5y ZWxlYXNlXyA9PSAxKQogICAgewogICAgICBJT1A6OlRhZ2dlZENvbXBvbmVudCAqdG1wID0gcmVp bnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCo+ICh0aGlzLT5idWZmZXJfKTsKICAg ICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudExpc3Q6OmZyZWVi dWYgKHRtcCk7CiAgICB9CiAgICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVh c2VfID0gcmVsZWFzZTsKICB9CiMgMTM1NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiCmlubGluZQpJT1A6OlRhZ2dlZENvbXBvbmVudExp c3RfdmFyOjpUYWdnZWRDb21wb25lbnRMaXN0X3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9Cgpp bmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRMaXN0X3Zhcjo6VGFnZ2VkQ29tcG9uZW50TGlzdF92 YXIgKFRhZ2dlZENvbXBvbmVudExpc3QgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCklPUDo6 VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyIChjb25zdCA6 OklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8g eyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6SU9QOjpUYWdnZWRDb21wb25lbnRMaXN0ICgqcC5w dHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9 IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0K CmlubGluZQpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjp+VGFnZ2VkQ29tcG9uZW50TGlz dF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIElPUDo6VGFnZ2Vk Q29tcG9uZW50TGlzdF92YXIgJgpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjpvcGVyYXRv cj0gKFRhZ2dlZENvbXBvbmVudExpc3QgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlz LT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9u ZW50TGlzdF92YXIgJgpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjpvcGVyYXRvcj0gKGNv bnN0IDo6SU9QOjpUYWdnZWRDb21wb25lbnRMaXN0X3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZw KQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRl IHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICBUYWdnZWRDb21wb25lbnRMaXN0ICpkZWVwX2NvcHkgPQog ICAgICAgICAgICBuZXcgVGFnZ2VkQ29tcG9uZW50TGlzdCAoKnAucHRyXyk7CgogICAgICAgICAg aWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgVGFnZ2VkQ29t cG9uZW50TGlzdCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRo aXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBk ZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4g KnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdCAqCklPUDo6 VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1 cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRDb21wb25lbnRMaXN0ICoKSU9Q OjpUYWdnZWRDb21wb25lbnRMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRMaXN0X3Zhcjo6b3BlcmF0 b3IgY29uc3QgOjpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3QgJigpIGNvbnN0CnsKICByZXR1cm4g KnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjpvcGVy YXRvciA6OklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdCAmKCkKewogIHJldHVybiAqdGhpcy0+cHRy XzsKfQoKaW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6Om9wZXJhdG9yIDo6SU9Q OjpUYWdnZWRDb21wb25lbnRMaXN0ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9 CgoKaW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6Om9wZXJhdG9yIDo6SU9QOjpU YWdnZWRDb21wb25lbnRMaXN0IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg SU9QOjpUYWdnZWRDb21wb25lbnQgJgpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjpvcGVy YXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0 b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3QgSU9QOjpUYWdnZWRDb21wb25lbnQgJgpJT1A6 OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgp IGNvbnN0CnsKICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudCAm PiAodGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpKTsKfQoKaW5saW5lIGNvbnN0IDo6SU9Q OjpUYWdnZWRDb21wb25lbnRMaXN0ICYKSU9QOjpUYWdnZWRDb21wb25lbnRMaXN0X3Zhcjo6aW4g KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFn Z2VkQ29tcG9uZW50TGlzdCAmCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6Omlub3V0ICh2 b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6SU9QOjpUYWdnZWRDb21w b25lbnRMaXN0IComCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6Om91dCAodm9pZCkKewog IGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJf Owp9CgppbmxpbmUgOjpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3QgKgpJT1A6OlRhZ2dlZENvbXBv bmVudExpc3RfdmFyOjpfcmV0biAodm9pZCkKewogIDo6SU9QOjpUYWdnZWRDb21wb25lbnRMaXN0 ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlu bGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdCAqCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlz dF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5s aW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQ6OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0 IChUYWdnZWRDb21wb25lbnRMaXN0IComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0g MDsKfQoKaW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQ6OlRhZ2dlZENvbXBvbmVu dExpc3Rfb3V0IChUYWdnZWRDb21wb25lbnRMaXN0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgp KQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6 OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0OjpUYWdnZWRDb21wb25lbnRMaXN0X291dCAoY29uc3Qg OjpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxU YWdnZWRDb21wb25lbnRMaXN0X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIDo6SU9QOjpUYWdn ZWRDb21wb25lbnRMaXN0X291dCAmCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQ6Om9wZXJh dG9yPSAoY29uc3QgOjpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0ICZwKQp7CiAgdGhpcy0+ cHRyXyA9IGNvbnN0X2Nhc3Q8VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQmPiAocCkucHRyXzsKICBy ZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQgJgpJ T1A6OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0OjpvcGVyYXRvcj0gKFRhZ2dlZENvbXBvbmVudExp c3QgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpJT1A6 OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0OjpvcGVyYXRvciA6OklPUDo6VGFnZ2VkQ29tcG9uZW50 TGlzdCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRD b21wb25lbnRMaXN0IComCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQ6OnB0ciAodm9pZCkK ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlRhZ2dlZENvbXBvbmVudExp c3QgKgpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAg cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBJT1A6OlRhZ2dlZENvbXBvbmVudCAmCklPUDo6 VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkK ewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KIyAxNTcyICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIKICBp bmxpbmUgSU9QOjpUYWdnZWRDb21wb25lbnQgKgogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVu Y2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQoK ICB7CiAgICBJT1A6OlRhZ2dlZENvbXBvbmVudCAqcmV0dmFsID0gMDsKICAgIGRvIHsgdHJ5IHsg cmV0dmFsID0gbmV3IElPUDo6VGFnZ2VkQ29tcG9uZW50W3NpemVdOyB9IGNhdGNoIChzdGQ6OmJh ZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hp bGUgKDApOwogICAgcmV0dXJuIHJldHZhbDsKICB9CgogIGlubGluZSB2b2lkIElPUDo6X1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6ZnJlZWJ1ZiAoSU9QOjpU YWdnZWRDb21wb25lbnQgKmJ1ZmZlcikKCiAgewogICAgZGVsZXRlIFtdIGJ1ZmZlcjsKICB9Cgog IGlubGluZQogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVu dFNlcTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSAodm9p ZCkKICB7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9U YWdnZWRDb21wb25lbnRTZXE6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21w b25lbnRTZXEgKENPUkJBOjpVTG9uZyBtYXhpbXVtKQogICAgOiBUQU9fVW5ib3VuZGVkX0Jhc2Vf U2VxdWVuY2UgKG1heGltdW0sIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21w b25lbnRTZXE6OmFsbG9jYnVmIChtYXhpbXVtKSkKICB7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9U QU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXE6Ol9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXEgKENPUkJBOjpVTG9uZyBtYXhpbXVt LAogICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICpkYXRh LAogICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1 ZW5jZSAobWF4aW11bSwgbGVuZ3RoLCBkYXRhLCByZWxlYXNlKQogIHsKICB9CgogIGlubGluZQog IElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6X1RB T19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSAoY29uc3QgX1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSAmcmhzKQoKICAgIDogVEFP X1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCiAgewogICAgaWYgKHJocy5idWZmZXJfICE9 IDApCiAgICB7CiAgICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICp0bXAxID0gX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6YWxsb2NidWYgKHRoaXMtPm1heGlt dW1fKTsKICAgICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAyID0gcmVpbnRlcnBy ZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9y IChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgdG1w MVtpXSA9IHRtcDJbaV07CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0KICAgIGVs c2UKICAgIHsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxpbmUgSU9Q OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxICYKICBJT1A6 Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXE6Om9wZXJhdG9y PSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSAm cmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1cm4gKnRoaXM7CgogICAg aWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMu bWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKnRtcCA9IHJl aW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwog ICAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXE6OmZy ZWVidWYgKHRtcCk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVl bmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXE6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAg ICB9CiAgICB9CiAgICBlbHNlCiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9T ZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxOjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsK CiAgICBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgICBJ T1A6OlRhZ2dlZENvbXBvbmVudCAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRD b21wb25lbnQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBj b25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCAqPiAocmhz LmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3Ro XzsgKytpKQogICAgICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoK CiAgaW5saW5lIElPUDo6VGFnZ2VkQ29tcG9uZW50ICYKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1Nl cXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXE6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBp KQoKICB7CiAgICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19hY2VfZXJy b3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9n X01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiLCAxNjY0LCAtMSwgX19hY2VfZXJyb3Is IGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2df Y2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVO LCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4 aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgICBJT1A6OlRhZ2dlZENvbXBvbmVudCogdG1w ID0gcmVpbnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCo+ICh0aGlzLT5idWZmZXJf KTsKICAgIHJldHVybiB0bXBbaV07CiAgfQoKICBpbmxpbmUgY29uc3QgSU9QOjpUYWdnZWRDb21w b25lbnQgJgogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVu dFNlcTo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0CgogIHsKICAgIGRvIHsgaWYo IShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9l cnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsg YWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL0lPUEMuaSIsIDE2NzMsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgp LCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9f Xy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9u IGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdo aWxlICgwKTsKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICogY29uc3QgdG1wID0gcmVpbnRlcnBy ZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCo+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVy biB0bXBbaV07CiAgfQoKCgogIGlubGluZSBJT1A6OlRhZ2dlZENvbXBvbmVudCAqCiAgSU9QOjpf VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxOjpnZXRfYnVmZmVy IChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCiAgewogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKnJl c3VsdCA9IDA7CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+YnVm ZmVyXyA9PSAwKQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRfU2VxdWVu Y2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6YWxsb2NidWYgKHRoaXMtPmxlbmd0aF8pOwogICAg ICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7CiAgICAgICAgdGhpcy0+cmVsZWFzZV8gPSAxOwog ICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nh c3Q8SU9QOjpUYWdnZWRDb21wb25lbnQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIH0KICAgIH0K ICAgIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVhc2VfICE9IDApCiAgICAgIHsKCgog ICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQqPiAo dGhpcy0+YnVmZmVyXyk7CiAgICAgICAgdGhpcy0+bWF4aW11bV8gPSAwOwogICAgICAgIHRoaXMt Pmxlbmd0aF8gPSAwOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgIHRoaXMtPnJl bGVhc2VfID0gMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGlubGlu ZSBjb25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudCAqCiAgSU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1 ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxOjpnZXRfYnVmZmVyICh2b2lkKSBjb25zdAogIHsK ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9uZW50ICo+ ICh0aGlzLT5idWZmZXJfKTsKICB9CgogIGlubGluZSB2b2lkCiAgSU9QOjpfVEFPX1VuYm91bmRl ZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxOjpyZXBsYWNlIChDT1JCQTo6VUxvbmcg bWF4LAogIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgSU9QOjpUYWdnZWRDb21wb25lbnQgKmRhdGEs CiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsK ICAgIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlz LT5yZWxlYXNlXyA9PSAxKQogICAgewogICAgICBJT1A6OlRhZ2dlZENvbXBvbmVudCAqdG1wID0g cmVpbnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCo+ICh0aGlzLT5idWZmZXJfKTsK ICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6ZnJl ZWJ1ZiAodG1wKTsKICAgIH0KICAgIHRoaXMtPmJ1ZmZlcl8gPSBkYXRhOwogICAgdGhpcy0+cmVs ZWFzZV8gPSByZWxlYXNlOwogIH0KIyAxNzQ5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIKaW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50 U2VxX3Zhcjo6VGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9Cgpp bmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFfdmFyOjpUYWdnZWRDb21wb25lbnRTZXFfdmFy IChUYWdnZWRDb21wb25lbnRTZXEgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCklPUDo6VGFn Z2VkQ29tcG9uZW50U2VxX3Zhcjo6VGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAoY29uc3QgOjpJT1A6 OlRhZ2dlZENvbXBvbmVudFNlcV92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkg eyB0aGlzLT5wdHJfID0gbmV3IDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEgKCpwLnB0cl8pOyB9 IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJl dHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5l CklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX3Zhcjo6flRhZ2dlZENvbXBvbmVudFNlcV92YXIgKHZv aWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIElPUDo6VGFnZ2VkQ29tcG9uZW50 U2VxX3ZhciAmCklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX3Zhcjo6b3BlcmF0b3I9IChUYWdnZWRD b21wb25lbnRTZXEgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsK ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAm CklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OklPUDo6VGFn Z2VkQ29tcG9uZW50U2VxX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBp ZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAg ICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAg ICAgICAgICBUYWdnZWRDb21wb25lbnRTZXEgKmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBU YWdnZWRDb21wb25lbnRTZXEgKCpwLnB0cl8pOwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0g MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIFRhZ2dlZENvbXBvbmVudFNlcSAqdG1wID0g ZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAg ICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBj b25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxICoKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFf dmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlu bGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxICoKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFf dmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpJ T1A6OlRhZ2dlZENvbXBvbmVudFNlcV92YXI6Om9wZXJhdG9yIGNvbnN0IDo6SU9QOjpUYWdnZWRD b21wb25lbnRTZXEgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpJ T1A6OlRhZ2dlZENvbXBvbmVudFNlcV92YXI6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRDb21wb25l bnRTZXEgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6OlRhZ2dlZENv bXBvbmVudFNlcV92YXI6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEgJigpIGNv bnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25l bnRTZXFfdmFyOjpvcGVyYXRvciA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxIComKCkKewogIHJl dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgSU9QOjpUYWdnZWRDb21wb25lbnQgJgpJT1A6OlRh Z2dlZENvbXBvbmVudFNlcV92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewog IHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25zdCBJ T1A6OlRhZ2dlZENvbXBvbmVudCAmCklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX3Zhcjo6b3BlcmF0 b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdAp7CiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29u c3QgSU9QOjpUYWdnZWRDb21wb25lbnQgJj4gKHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4 KSk7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxICYKSU9QOjpUYWdn ZWRDb21wb25lbnRTZXFfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRy XzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEgJgpJT1A6OlRhZ2dlZENvbXBv bmVudFNlcV92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5s aW5lIDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEgKiYKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFf dmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsK ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEg KgpJT1A6OlRhZ2dlZENvbXBvbmVudFNlcV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpJT1A6OlRh Z2dlZENvbXBvbmVudFNlcSAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICBy ZXR1cm4gdG1wOwp9CgppbmxpbmUgOjpJT1A6OlRhZ2dlZENvbXBvbmVudFNlcSAqCklPUDo6VGFn Z2VkQ29tcG9uZW50U2VxX3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0 cl87Cn0KCgoKCgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFfb3V0OjpUYWdnZWRDb21w b25lbnRTZXFfb3V0IChUYWdnZWRDb21wb25lbnRTZXEgKiZwKQogIDogcHRyXyAocCkKewogIHRo aXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFfb3V0OjpUYWdn ZWRDb21wb25lbnRTZXFfb3V0IChUYWdnZWRDb21wb25lbnRTZXFfdmFyICZwKQogIDogcHRyXyAo cC5vdXQgKCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5s aW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dCAo Y29uc3QgOjpJT1A6OlRhZ2dlZENvbXBvbmVudFNlcV9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9j YXN0PFRhZ2dlZENvbXBvbmVudFNlcV9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSA6OklPUDo6 VGFnZ2VkQ29tcG9uZW50U2VxX291dCAmCklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dDo6b3Bl cmF0b3I9IChjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dCAmcCkKewogIHRoaXMt PnB0cl8gPSBjb25zdF9jYXN0PFRhZ2dlZENvbXBvbmVudFNlcV9vdXQmPiAocCkucHRyXzsKICBy ZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dCAmCklP UDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dDo6b3BlcmF0b3I9IChUYWdnZWRDb21wb25lbnRTZXEg KnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpJT1A6OlRh Z2dlZENvbXBvbmVudFNlcV9vdXQ6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEg KiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9u ZW50U2VxIComCklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dDo6cHRyICh2b2lkKQp7CiAgcmV0 dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxICoKSU9Q OjpUYWdnZWRDb21wb25lbnRTZXFfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRo aXMtPnB0cl87Cn0KCmlubGluZSBJT1A6OlRhZ2dlZENvbXBvbmVudCAmCklPUDo6VGFnZ2VkQ29t cG9uZW50U2VxX291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJu IHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDE5NjMgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5pIgppbmxpbmUKSU9QOjpT ZXJ2aWNlQ29udGV4dF92YXI6OlNlcnZpY2VDb250ZXh0X3ZhciAodm9pZCkKICA6IHB0cl8gKDAp Cnt9CgppbmxpbmUKSU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6OlNlcnZpY2VDb250ZXh0X3ZhciAo U2VydmljZUNvbnRleHQgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCklPUDo6U2VydmljZUNv bnRleHRfdmFyOjpTZXJ2aWNlQ29udGV4dF92YXIgKGNvbnN0IDo6SU9QOjpTZXJ2aWNlQ29udGV4 dF92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3 IDo6SU9QOjpTZXJ2aWNlQ29udGV4dCAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9j KSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwog IGVsc2UKICAgIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNlQ29udGV4dF92 YXI6On5TZXJ2aWNlQ29udGV4dF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoK aW5saW5lIElPUDo6U2VydmljZUNvbnRleHRfdmFyICYKSU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6 Om9wZXJhdG9yPSAoU2VydmljZUNvbnRleHQgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0 aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6U2VydmljZUNv bnRleHRfdmFyICYKSU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpJ T1A6OlNlcnZpY2VDb250ZXh0X3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAg ICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87 CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7 CiAgICAgICAgICBTZXJ2aWNlQ29udGV4dCAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IFNl cnZpY2VDb250ZXh0ICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBTZXJ2aWNlQ29udGV4dCAqdG1wID0gZGVlcF9jb3B5 OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhp cy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklP UDo6U2VydmljZUNvbnRleHQgKgpJT1A6OlNlcnZpY2VDb250ZXh0X3Zhcjo6b3BlcmF0b3ItPiAo dm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlNlcnZp Y2VDb250ZXh0ICoKSU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsK ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCklPUDo6U2VydmljZUNvbnRleHRfdmFyOjpv cGVyYXRvciBjb25zdCA6OklPUDo6U2VydmljZUNvbnRleHQgJigpIGNvbnN0CnsKICByZXR1cm4g KnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6OlNlcnZpY2VDb250ZXh0X3Zhcjo6b3BlcmF0b3Ig OjpJT1A6OlNlcnZpY2VDb250ZXh0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgppbmxp bmUKSU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6Om9wZXJhdG9yIDo6SU9QOjpTZXJ2aWNlQ29udGV4 dCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpJT1A6OlNlcnZp Y2VDb250ZXh0X3Zhcjo6b3BlcmF0b3IgOjpJT1A6OlNlcnZpY2VDb250ZXh0IComKCkKewogIHJl dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpJT1A6OlNlcnZpY2VDb250ZXh0ICYK SU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlz LT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0ICYKSU9QOjpTZXJ2aWNlQ29u dGV4dF92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5l IDo6SU9QOjpTZXJ2aWNlQ29udGV4dCAqJgpJT1A6OlNlcnZpY2VDb250ZXh0X3Zhcjo6b3V0ICh2 b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRo aXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6U2VydmljZUNvbnRleHQgKgpJT1A6OlNlcnZpY2VD b250ZXh0X3Zhcjo6X3JldG4gKHZvaWQpCnsKICA6OklPUDo6U2VydmljZUNvbnRleHQgKnRtcCA9 IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6 SU9QOjpTZXJ2aWNlQ29udGV4dCAqCklPUDo6U2VydmljZUNvbnRleHRfdmFyOjpwdHIgKHZvaWQp IGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpJT1A6OlNlcnZpY2VD b250ZXh0X291dDo6U2VydmljZUNvbnRleHRfb3V0ICg6OklPUDo6U2VydmljZUNvbnRleHQgKiZw KQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNl Q29udGV4dF9vdXQ6OlNlcnZpY2VDb250ZXh0X291dCAoU2VydmljZUNvbnRleHRfdmFyICZwKQog IDogcHRyXyAocC5vdXQgKCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0g MDsKfQoKaW5saW5lCklPUDo6U2VydmljZUNvbnRleHRfb3V0OjpTZXJ2aWNlQ29udGV4dF9vdXQg KGNvbnN0IDo6SU9QOjpTZXJ2aWNlQ29udGV4dF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0 PFNlcnZpY2VDb250ZXh0X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIElPUDo6U2VydmljZUNv bnRleHRfb3V0ICYKSU9QOjpTZXJ2aWNlQ29udGV4dF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpJ T1A6OlNlcnZpY2VDb250ZXh0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFNl cnZpY2VDb250ZXh0X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIElP UDo6U2VydmljZUNvbnRleHRfb3V0ICYKSU9QOjpTZXJ2aWNlQ29udGV4dF9vdXQ6Om9wZXJhdG9y PSAoU2VydmljZUNvbnRleHQgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7 Cn0KCmlubGluZQpJT1A6OlNlcnZpY2VDb250ZXh0X291dDo6b3BlcmF0b3IgOjpJT1A6OlNlcnZp Y2VDb250ZXh0IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlNl cnZpY2VDb250ZXh0IComCklPUDo6U2VydmljZUNvbnRleHRfb3V0OjpwdHIgKHZvaWQpCnsKICBy ZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpTZXJ2aWNlQ29udGV4dCAqCklPUDo6 U2VydmljZUNvbnRleHRfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0 cl87Cn0KIyAyMTU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL0lPUEMuaSIKICBpbmxpbmUgSU9QOjpTZXJ2aWNlQ29udGV4dCAqCiAgSU9QOjpfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0OjphbGxvY2J1ZiAoQ09S QkE6OlVMb25nIHNpemUpCgogIHsKICAgIElPUDo6U2VydmljZUNvbnRleHQgKnJldHZhbCA9IDA7 CiAgICBkbyB7IHRyeSB7IHJldHZhbCA9IG5ldyBJT1A6OlNlcnZpY2VDb250ZXh0W3NpemVdOyB9 IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJl dHVybiAwOyB9IH0gd2hpbGUgKDApOwogICAgcmV0dXJuIHJldHZhbDsKICB9CgogIGlubGluZSB2 b2lkIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6 ZnJlZWJ1ZiAoSU9QOjpTZXJ2aWNlQ29udGV4dCAqYnVmZmVyKQoKICB7CiAgICBkZWxldGUgW10g YnVmZmVyOwogIH0KCiAgaW5saW5lCiAgSU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1Bf U2VydmljZUNvbnRleHRMaXN0OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNv bnRleHRMaXN0ICh2b2lkKQogIHsKICB9CgogIGlubGluZQogIElPUDo6X1RBT19VbmJvdW5kZWRf U2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf SU9QX1NlcnZpY2VDb250ZXh0TGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgICA6IFRBT19V bmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf SU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6YWxsb2NidWYgKG1heGltdW0pKQogIHsKICB9CgogIGlu bGluZQogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlz dDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdCAoQ09SQkE6 OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgSU9QOjpTZXJ2aWNl Q29udGV4dCAqZGF0YSwKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fVW5ib3Vu ZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkKICB7CiAg fQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29u dGV4dExpc3Q6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29udGV4dExpc3Qg KGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29udGV4dExpc3QgJnJo cykKCiAgICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAocmhzKQogIHsKICAgIGlmIChy aHMuYnVmZmVyXyAhPSAwKQogICAgewogICAgICBJT1A6OlNlcnZpY2VDb250ZXh0ICp0bXAxID0g X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6YWxsb2NidWYg KHRoaXMtPm1heGltdW1fKTsKICAgICAgSU9QOjpTZXJ2aWNlQ29udGV4dCAqIGNvbnN0IHRtcDIg PSByZWludGVycHJldF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQgKj4gKHJocy5idWZmZXJfKTsK CiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQog ICAgICAgIHRtcDFbaV0gPSB0bXAyW2ldOwoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAg ICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgfQogIH0KCiAg aW5saW5lIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlz dCAmCiAgSU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0 OjpvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29u dGV4dExpc3QgJnJocykKCiAgewogICAgaWYgKHRoaXMgPT0gJnJocykKICAgICAgcmV0dXJuICp0 aGlzOwoKICAgIGlmICh0aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAgaWYgKHRoaXMtPm1heGlt dW1fIDwgcmhzLm1heGltdW1fKQogICAgICB7CgogICAgICAgIElPUDo6U2VydmljZUNvbnRleHQg KnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpTZXJ2aWNlQ29udGV4dCAqPiAodGhpcy0+YnVm ZmVyXyk7CiAgICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0 TGlzdDo6ZnJlZWJ1ZiAodG1wKTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6YWxsb2NidWYgKHJocy5tYXhpbXVt Xyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5i b3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29udGV4dExpc3Q6OmFsbG9jYnVmIChyaHMubWF4 aW11bV8pOwoKICAgIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMp OwoKICAgIElPUDo6U2VydmljZUNvbnRleHQgKnRtcDEgPSByZWludGVycHJldF9jYXN0PElPUDo6 U2VydmljZUNvbnRleHQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgSU9QOjpTZXJ2aWNlQ29udGV4 dCAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQgKj4g KHJocy5idWZmZXJfKTsKCiAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxl bmd0aF87ICsraSkKICAgICAgdG1wMVtpXSA9IHRtcDJbaV07CgogICAgcmV0dXJuICp0aGlzOwog IH0KCgogIGlubGluZSBJT1A6OlNlcnZpY2VDb250ZXh0ICYKICBJT1A6Ol9UQU9fVW5ib3VuZGVk X1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29udGV4dExpc3Q6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9u ZyBpKQoKICB7CiAgICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19hY2Vf ZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0Vf TG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiLCAyMjUxLCAtMSwgX19hY2VfZXJy b3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5t c2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxl ICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+ bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgICBJT1A6OlNlcnZpY2VDb250ZXh0KiB0 bXAgPSByZWludGVycHJldF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQqPiAodGhpcy0+YnVmZmVy Xyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0KCiAgaW5saW5lIGNvbnN0IElPUDo6U2VydmljZUNv bnRleHQgJgogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0 TGlzdDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0CgogIHsKICAgIGRvIHsgaWYo IShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9l cnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsg YWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL0lPUEMuaSIsIDIyNjAsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgp LCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9f Xy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9u IGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdo aWxlICgwKTsKICAgIElPUDo6U2VydmljZUNvbnRleHQgKiBjb25zdCB0bXAgPSByZWludGVycHJl dF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4g dG1wW2ldOwogIH0KCgoKICBpbmxpbmUgSU9QOjpTZXJ2aWNlQ29udGV4dCAqCiAgSU9QOjpfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0OjpnZXRfYnVmZmVyIChD T1JCQTo6Qm9vbGVhbiBvcnBoYW4pCiAgewogICAgSU9QOjpTZXJ2aWNlQ29udGV4dCAqcmVzdWx0 ID0gMDsKICAgIGlmIChvcnBoYW4gPT0gMCkKICAgIHsKCiAgICAgIGlmICh0aGlzLT5idWZmZXJf ID09IDApCiAgICAgIHsKICAgICAgICByZXN1bHQgPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9J T1BfU2VydmljZUNvbnRleHRMaXN0OjphbGxvY2J1ZiAodGhpcy0+bGVuZ3RoXyk7CiAgICAgICAg dGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgICB0aGlzLT5yZWxlYXNlXyA9IDE7CiAgICAg IH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxJ T1A6OlNlcnZpY2VDb250ZXh0Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICB9CiAgICB9CiAgICBl bHNlCiAgICB7CiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAwKQogICAgICB7CgoKICAgICAg ICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQqPiAodGhpcy0+ YnVmZmVyXyk7CiAgICAgICAgdGhpcy0+bWF4aW11bV8gPSAwOwogICAgICAgIHRoaXMtPmxlbmd0 aF8gPSAwOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgIHRoaXMtPnJlbGVhc2Vf ID0gMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGlubGluZSBjb25z dCBJT1A6OlNlcnZpY2VDb250ZXh0ICoKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lP UF9TZXJ2aWNlQ29udGV4dExpc3Q6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CiAgewogICAgcmV0 dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSU9QOjpTZXJ2aWNlQ29udGV4dCAqPiAodGhpcy0+ YnVmZmVyXyk7CiAgfQoKICBpbmxpbmUgdm9pZAogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVu Y2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6cmVwbGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICBD T1JCQTo6VUxvbmcgbGVuZ3RoLAogIElPUDo6U2VydmljZUNvbnRleHQgKmRhdGEsCiAgQ09SQkE6 OkJvb2xlYW4gcmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAgIHRoaXMt Pmxlbmd0aF8gPSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNl XyA9PSAxKQogICAgewogICAgICBJT1A6OlNlcnZpY2VDb250ZXh0ICp0bXAgPSByZWludGVycHJl dF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIF9UQU9f VW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29udGV4dExpc3Q6OmZyZWVidWYgKHRtcCk7 CiAgICB9CiAgICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVs ZWFzZTsKICB9CiMgMjMzNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9JT1BDLmkiCmlubGluZQpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF92YXI6OlNl cnZpY2VDb250ZXh0TGlzdF92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCklPUDo6 U2VydmljZUNvbnRleHRMaXN0X3Zhcjo6U2VydmljZUNvbnRleHRMaXN0X3ZhciAoU2VydmljZUNv bnRleHRMaXN0ICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpJT1A6OlNlcnZpY2VDb250ZXh0 TGlzdF92YXI6OlNlcnZpY2VDb250ZXh0TGlzdF92YXIgKGNvbnN0IDo6SU9QOjpTZXJ2aWNlQ29u dGV4dExpc3RfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRy XyA9IG5ldyA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0ICgqcC5wdHJfKTsgfSBjYXRjaCAoc3Rk OjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3 aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6OlNlcnZp Y2VDb250ZXh0TGlzdF92YXI6On5TZXJ2aWNlQ29udGV4dExpc3RfdmFyICh2b2lkKQp7CiAgZGVs ZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF92YXIgJgpJ T1A6OlNlcnZpY2VDb250ZXh0TGlzdF92YXI6Om9wZXJhdG9yPSAoU2VydmljZUNvbnRleHRMaXN0 ICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0 aGlzOwp9CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF92YXIgJgpJT1A6OlNlcnZp Y2VDb250ZXh0TGlzdF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpJT1A6OlNlcnZpY2VDb250ZXh0 TGlzdF92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9 PSAwKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhp cy0+cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgU2Vy dmljZUNvbnRleHRMaXN0ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgU2VydmljZUNvbnRl eHRMaXN0ICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBTZXJ2aWNlQ29udGV4dExpc3QgKnRtcCA9IGRlZXBfY29weTsK ICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwogICAgICAgICAgICAgIHRoaXMt PnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRlZXBfY29weTsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3QgOjpJT1A6 OlNlcnZpY2VDb250ZXh0TGlzdCAqCklPUDo6U2VydmljZUNvbnRleHRMaXN0X3Zhcjo6b3BlcmF0 b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6 OlNlcnZpY2VDb250ZXh0TGlzdCAqCklPUDo6U2VydmljZUNvbnRleHRMaXN0X3Zhcjo6b3BlcmF0 b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNl Q29udGV4dExpc3RfdmFyOjpvcGVyYXRvciBjb25zdCA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0 ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNl Q29udGV4dExpc3RfdmFyOjpvcGVyYXRvciA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0ICYoKQp7 CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNlQ29udGV4dExpc3Rf dmFyOjpvcGVyYXRvciA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0ICYoKSBjb25zdAp7CiAgcmV0 dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lCklPUDo6U2VydmljZUNvbnRleHRMaXN0X3Zhcjo6 b3BlcmF0b3IgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAqJigpCnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQoKaW5saW5lIElPUDo6U2VydmljZUNvbnRleHQgJgpJT1A6OlNlcnZpY2VDb250ZXh0 TGlzdF92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVybiB0aGlz LT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25zdCBJT1A6OlNlcnZpY2VD b250ZXh0ICYKSU9QOjpTZXJ2aWNlQ29udGV4dExpc3RfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6 VUxvbmcgaW5kZXgpIGNvbnN0CnsKICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBJT1A6OlNlcnZp Y2VDb250ZXh0ICY+ICh0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCkpOwp9CgppbmxpbmUg Y29uc3QgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAmCklPUDo6U2VydmljZUNvbnRleHRMaXN0 X3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6 OklPUDo6U2VydmljZUNvbnRleHRMaXN0ICYKSU9QOjpTZXJ2aWNlQ29udGV4dExpc3RfdmFyOjpp bm91dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OklPUDo6U2Vy dmljZUNvbnRleHRMaXN0IComCklPUDo6U2VydmljZUNvbnRleHRMaXN0X3Zhcjo6b3V0ICh2b2lk KQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMt PnB0cl87Cn0KCmlubGluZSA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0ICoKSU9QOjpTZXJ2aWNl Q29udGV4dExpc3RfdmFyOjpfcmV0biAodm9pZCkKewogIDo6SU9QOjpTZXJ2aWNlQ29udGV4dExp c3QgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoK aW5saW5lIDo6SU9QOjpTZXJ2aWNlQ29udGV4dExpc3QgKgpJT1A6OlNlcnZpY2VDb250ZXh0TGlz dF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5s aW5lCklPUDo6U2VydmljZUNvbnRleHRMaXN0X291dDo6U2VydmljZUNvbnRleHRMaXN0X291dCAo U2VydmljZUNvbnRleHRMaXN0IComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsK fQoKaW5saW5lCklPUDo6U2VydmljZUNvbnRleHRMaXN0X291dDo6U2VydmljZUNvbnRleHRMaXN0 X291dCAoU2VydmljZUNvbnRleHRMaXN0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAg ZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6OlNlcnZp Y2VDb250ZXh0TGlzdF9vdXQ6OlNlcnZpY2VDb250ZXh0TGlzdF9vdXQgKGNvbnN0IDo6SU9QOjpT ZXJ2aWNlQ29udGV4dExpc3Rfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxTZXJ2aWNlQ29u dGV4dExpc3Rfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0 TGlzdF9vdXQgJgpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF9vdXQ6Om9wZXJhdG9yPSAoY29uc3Qg OjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3Rf Y2FzdDxTZXJ2aWNlQ29udGV4dExpc3Rfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9 CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF9vdXQgJgpJT1A6OlNlcnZpY2VDb250 ZXh0TGlzdF9vdXQ6Om9wZXJhdG9yPSAoU2VydmljZUNvbnRleHRMaXN0ICpwKQp7CiAgdGhpcy0+ cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNlQ29udGV4dExp c3Rfb3V0OjpvcGVyYXRvciA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0IComKCkKewogIHJldHVy biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAqJgpJT1A6 OlNlcnZpY2VDb250ZXh0TGlzdF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJf Owp9CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAqCklPUDo6U2VydmljZUNvbnRl eHRMaXN0X291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgpp bmxpbmUgSU9QOjpTZXJ2aWNlQ29udGV4dCAmCklPUDo6U2VydmljZUNvbnRleHRMaXN0X291dDo6 b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9w ZXJhdG9yW10gKGluZGV4KTsKfQojIDI1NjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5pIgppbmxpbmUgSU9QOjpDb2RlY19wdHIKdGFvX0lP UF9Db2RlY19kdXBsaWNhdGUgKAogICAgSU9QOjpDb2RlY19wdHIgcAogICkKewogIHJldHVybiBJ T1A6OkNvZGVjOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX0lPUF9Db2RlY19y ZWxlYXNlICgKICAgIElPUDo6Q29kZWNfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7 Cn0KCmlubGluZSBJT1A6OkNvZGVjX3B0cgp0YW9fSU9QX0NvZGVjX25pbCAoCiAgICB2b2lkCiAg KQp7CiAgcmV0dXJuIElPUDo6Q29kZWM6Ol9uaWwgKCk7Cn0KCmlubGluZSBJT1A6OkNvZGVjX3B0 cgp0YW9fSU9QX0NvZGVjX25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQp7CiAgcmV0 dXJuIElPUDo6Q29kZWM6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19JT1BfQ29kZWNfdXBjYXN0ICgKICAg IHZvaWQgKnNyYwogICkKewogIElPUDo6Q29kZWMgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8SU9Q OjpDb2RlYyAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAyNjEyICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIKaW5saW5lCklPUDo6 RW5jb2RpbmdfdmFyOjpFbmNvZGluZ192YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5l CklPUDo6RW5jb2RpbmdfdmFyOjpFbmNvZGluZ192YXIgKEVuY29kaW5nICpwKQogIDogcHRyXyAo cCkKe30KCmlubGluZQpJT1A6OkVuY29kaW5nX3Zhcjo6RW5jb2RpbmdfdmFyIChjb25zdCA6OklP UDo6RW5jb2RpbmdfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+ cHRyXyA9IG5ldyA6OklPUDo6RW5jb2RpbmcgKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9h bGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgw KTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKCmlubGluZQpJT1A6OkVuY29kaW5nX3Zh cjo6RW5jb2RpbmdfdmFyIChjb25zdCA6OklPUDo6RW5jb2RpbmcgJnApCnsKICBkbyB7IHRyeSB7 IHRoaXMtPnB0cl8gPSBuZXcgOjpJT1A6OkVuY29kaW5nIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRf YWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAo MCk7Cn0KCmlubGluZQpJT1A6OkVuY29kaW5nX3Zhcjo6fkVuY29kaW5nX3ZhciAodm9pZCkKewog IGRlbGV0ZSB0aGlzLT5wdHJfOwp9CgppbmxpbmUgSU9QOjpFbmNvZGluZ192YXIgJgpJT1A6OkVu Y29kaW5nX3Zhcjo6b3BlcmF0b3I9IChFbmNvZGluZyAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJf OwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6SU9QOjpFbmNv ZGluZ192YXIgJgpJT1A6OkVuY29kaW5nX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OklPUDo6RW5j b2RpbmdfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8g PT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRo aXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIEVu Y29kaW5nICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgRW5jb2RpbmcgKCpwLnB0cl8pOwoK ICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAg IEVuY29kaW5nICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhp cy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRl bGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAq dGhpczsKfQoKCmlubGluZSBJT1A6OkVuY29kaW5nX3ZhciAmCklPUDo6RW5jb2RpbmdfdmFyOjpv cGVyYXRvcj0gKGNvbnN0IDo6SU9QOjpFbmNvZGluZyAmcCkKewogIGlmICh0aGlzLT5wdHJfICE9 ICZwKQogIHsKICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJf ID0gbmV3IDo6SU9QOjpFbmNvZGluZyAocCk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgq X19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuICp0aGlzOyB9IH0gd2hpbGUgKDApOwog IH0KICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6RW5jb2RpbmcgKgpJT1A6 OkVuY29kaW5nX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5w dHJfOwp9CgppbmxpbmUgOjpJT1A6OkVuY29kaW5nICoKSU9QOjpFbmNvZGluZ192YXI6Om9wZXJh dG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCklPUDo6RW5jb2Rp bmdfdmFyOjpvcGVyYXRvciBjb25zdCA6OklPUDo6RW5jb2RpbmcgJigpIGNvbnN0CnsKICByZXR1 cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6OkVuY29kaW5nX3Zhcjo6b3BlcmF0b3IgOjpJ T1A6OkVuY29kaW5nICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpF bmNvZGluZ192YXI6Om9wZXJhdG9yIDo6SU9QOjpFbmNvZGluZyAmKCkgY29uc3QKewogIHJldHVy biAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IDo6SU9QOjpFbmNvZGluZyAmCklPUDo6RW5j b2RpbmdfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5s aW5lIDo6SU9QOjpFbmNvZGluZyAmCklPUDo6RW5jb2RpbmdfdmFyOjppbm91dCAodm9pZCkKewog IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OklPUDo6RW5jb2RpbmcgJgpJT1A6OkVu Y29kaW5nX3Zhcjo6b3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUg OjpJT1A6OkVuY29kaW5nCklPUDo6RW5jb2RpbmdfdmFyOjpfcmV0biAodm9pZCkKewogIHJldHVy biAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpFbmNvZGluZyAqCklPUDo6RW5jb2Rpbmdf dmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQojIDI3NjEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5pIgpp bmxpbmUgSU9QOjpDb2RlY0ZhY3RvcnlfcHRyCnRhb19JT1BfQ29kZWNGYWN0b3J5X2R1cGxpY2F0 ZSAoCiAgICBJT1A6OkNvZGVjRmFjdG9yeV9wdHIgcAogICkKewogIHJldHVybiBJT1A6OkNvZGVj RmFjdG9yeTo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19JT1BfQ29kZWNGYWN0 b3J5X3JlbGVhc2UgKAogICAgSU9QOjpDb2RlY0ZhY3RvcnlfcHRyIHAKICApCnsKICBDT1JCQTo6 cmVsZWFzZSAocCk7Cn0KCmlubGluZSBJT1A6OkNvZGVjRmFjdG9yeV9wdHIKdGFvX0lPUF9Db2Rl Y0ZhY3RvcnlfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gSU9QOjpDb2RlY0ZhY3Rvcnk6 Ol9uaWwgKCk7Cn0KCmlubGluZSBJT1A6OkNvZGVjRmFjdG9yeV9wdHIKdGFvX0lPUF9Db2RlY0Zh Y3RvcnlfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gSU9QOjpD b2RlY0ZhY3Rvcnk6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUp Owp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19JT1BfQ29kZWNGYWN0b3J5X3VwY2FzdCAo CiAgICB2b2lkICpzcmMKICApCnsKICBJT1A6OkNvZGVjRmFjdG9yeSAqKnRtcCA9CiAgICBzdGF0 aWNfY2FzdDxJT1A6OkNvZGVjRmFjdG9yeSAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAy ODExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lP UEMuaSIKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAg ICBjb25zdCBJT1A6OlRhZ2dlZFByb2ZpbGU6Ol90YW9fc2VxX09jdGV0ICYKICApOwpDT1JCQTo6 Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgSU9QOjpUYWdnZWRQ cm9maWxlOjpfdGFvX3NlcV9PY3RldCAmCiAgKTsKCgoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9w ZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IElPUDo6VGFnZ2VkUHJvZmlsZSAm X3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS50YWcp ICYmCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5wcm9maWxlX2RhdGEpCiAgKQogICAgcmV0 dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3Bl cmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBJT1A6OlRhZ2dlZFByb2ZpbGUgJl90YW9fYWdn cmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUudGFnKSAmJgogICAg KHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUucHJvZmlsZV9kYXRhKQogICkKICAgIHJldHVybiAxOwog IGVsc2UKICAgIHJldHVybiAwOwoKfQoKCgoKCkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKAog ICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgSU9QOjpJT1I6Ol90YW9fc2VxX1RhZ2dlZFBy b2ZpbGUgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RS ICYsCiAgICBJT1A6OklPUjo6X3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAmCiAgKTsKCgoKaW5saW5l IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IElP UDo6SU9SICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtIDw8IF90YW9fYWdncmVn YXRlLnR5cGVfaWQuaW4gKCkpICYmCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5wcm9maWxl cykKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JC QTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIElPUDo6SU9SICZfdGFv X2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLnR5cGVfaWQu b3V0ICgpKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUucHJvZmlsZXMpCiAgKQogICAg cmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgoKCgoKQ09SQkE6OkJvb2xlYW4gb3Bl cmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBJT1A6OlRhZ2dlZENvbXBv bmVudDo6X3Rhb19zZXFfT2N0ZXQgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAog ICAgVEFPX0lucHV0Q0RSICYsCiAgICBJT1A6OlRhZ2dlZENvbXBvbmVudDo6X3Rhb19zZXFfT2N0 ZXQgJgogICk7CgoKCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0 Q0RSICZzdHJtLCBjb25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudCAmX3Rhb19hZ2dyZWdhdGUpCnsK ICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS50YWcpICYmCiAgICAoc3RybSA8PCBf dGFvX2FnZ3JlZ2F0ZS5jb21wb25lbnRfZGF0YSkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAg ICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5w dXRDRFIgJnN0cm0sIElPUDo6VGFnZ2VkQ29tcG9uZW50ICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlm ICgKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLnRhZykgJiYKICAgIChzdHJtID4+IF90YW9f YWdncmVnYXRlLmNvbXBvbmVudF9kYXRhKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJl dHVybiAwOwoKfQoKCgoKCkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1 dENEUiAmLAogICAgY29uc3QgSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgJgogICk7CkNP UkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAgICBJT1A6Ok11 bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAmCiAgKTsKCgoKCgoKCkNPUkJBOjpCb29sZWFuIG9wZXJh dG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgSU9QOjpUYWdnZWRDb21wb25l bnRMaXN0ICYKICApOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENE UiAmLAogICAgSU9QOjpUYWdnZWRDb21wb25lbnRMaXN0ICYKICApOwoKCgoKCgoKQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBJT1A6OlRh Z2dlZENvbXBvbmVudFNlcSAmCiAgKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBU QU9fSW5wdXRDRFIgJiwKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50U2VxICYKICApOwoKCgoKCgoK Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25z dCBJT1A6OlNlcnZpY2VDb250ZXh0OjpfdGFvX3NlcV9PY3RldCAmCiAgKTsKQ09SQkE6OkJvb2xl YW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwKICAgIElPUDo6U2VydmljZUNvbnRl eHQ6Ol90YW9fc2VxX09jdGV0ICYKICApOwoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0 b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgSU9QOjpTZXJ2aWNlQ29udGV4dCAmX3Rh b19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5jb250ZXh0 X2lkKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuY29udGV4dF9kYXRhKQogICkKICAg IHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu IG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwgSU9QOjpTZXJ2aWNlQ29udGV4dCAmX3Rh b19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5jb250ZXh0 X2lkKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUuY29udGV4dF9kYXRhKQogICkKICAg IHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKCgoKCkNPUkJBOjpCb29sZWFuIG9w ZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgSU9QOjpTZXJ2aWNlQ29u dGV4dExpc3QgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0 Q0RSICYsCiAgICBJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAmCiAgKTsKCgoKaW5saW5lIENPUkJB OjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IElPUDo6RW5j b2RpbmcgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdh dGUuZm9ybWF0KSAmJgogICAgKHN0cm0gPDwgQ09SQkE6OkFueTo6ZnJvbV9vY3RldCAoX3Rhb19h Z2dyZWdhdGUubWFqb3JfdmVyc2lvbikpICYmCiAgICAoc3RybSA8PCBDT1JCQTo6QW55Ojpmcm9t X29jdGV0IChfdGFvX2FnZ3JlZ2F0ZS5taW5vcl92ZXJzaW9uKSkKICApCiAgICByZXR1cm4gMTsK ICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ IChUQU9fSW5wdXRDRFIgJnN0cm0sIElPUDo6RW5jb2RpbmcgJl90YW9fYWdncmVnYXRlKQp7CiAg aWYgKAogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUuZm9ybWF0KSAmJgogICAgKHN0cm0gPj4g Q09SQkE6OkFueTo6dG9fb2N0ZXQgKF90YW9fYWdncmVnYXRlLm1ham9yX3ZlcnNpb24pKSAmJgog ICAgKHN0cm0gPj4gQ09SQkE6OkFueTo6dG9fb2N0ZXQgKF90YW9fYWdncmVnYXRlLm1pbm9yX3Zl cnNpb24pKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQojIDE5MzQg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5o IiAyCiMgMTk0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9JT1BDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL3Bvc3QuaCIgMQojIDE5NDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIiAyCiMgNDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIiAyCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDEKIyA0 OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNz YWdpbmdDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvbGxhYmxlQy5oIiAxCiMgMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjUgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiIDIKCiMg MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3Ji YWZ3ZC5oIiAxCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vUG9sbGFibGVDLmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdC5oIiAxCiMgMzEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiIDIKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlv bi5oIiAxCiMgMzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vUG9sbGFibGVDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL0NEUi5oIiAxCiMgMzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiIDIKIyA2MiAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xsYWJsZUMuaCIKY2xh c3MgQ09SQkFfUG9sbGFibGVTZXQ7CgoKCgp0eXBlZGVmIENPUkJBX1BvbGxhYmxlU2V0ICpDT1JC QV9Qb2xsYWJsZVNldF9wdHI7CgoKCgoKCgpjbGFzcyBDT1JCQV9Qb2xsYWJsZVNldF92YXIgOiBw dWJsaWMgVEFPX0Jhc2VfdmFyCnsKcHVibGljOgogIENPUkJBX1BvbGxhYmxlU2V0X3ZhciAodm9p ZCk7CiAgQ09SQkFfUG9sbGFibGVTZXRfdmFyIChDT1JCQV9Qb2xsYWJsZVNldF9wdHIgcCkgOiBw dHJfIChwKSB7fQogIENPUkJBX1BvbGxhYmxlU2V0X3ZhciAoY29uc3QgQ09SQkFfUG9sbGFibGVT ZXRfdmFyICYpOwogIH5DT1JCQV9Qb2xsYWJsZVNldF92YXIgKHZvaWQpOwoKICBDT1JCQV9Qb2xs YWJsZVNldF92YXIgJm9wZXJhdG9yPSAoQ09SQkFfUG9sbGFibGVTZXRfcHRyKTsKICBDT1JCQV9Q b2xsYWJsZVNldF92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9sbGFibGVTZXRfdmFyICYp OwogIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgb3Bl cmF0b3IgY29uc3QgQ09SQkFfUG9sbGFibGVTZXRfcHRyICYoKSBjb25zdDsKICBvcGVyYXRvciBD T1JCQV9Qb2xsYWJsZVNldF9wdHIgJigpOwoKICBDT1JCQV9Qb2xsYWJsZVNldF9wdHIgaW4gKHZv aWQpIGNvbnN0OwogIENPUkJBX1BvbGxhYmxlU2V0X3B0ciAmaW5vdXQgKHZvaWQpOwogIENPUkJB X1BvbGxhYmxlU2V0X3B0ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9Qb2xsYWJsZVNldF9wdHIgX3Jl dG4gKHZvaWQpOwogIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgog IHN0YXRpYyBDT1JCQV9Qb2xsYWJsZVNldF9wdHIgZHVwbGljYXRlIChDT1JCQV9Qb2xsYWJsZVNl dF9wdHIpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UgKENPUkJBX1BvbGxhYmxlU2V0X3B0cik7CiAg c3RhdGljIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBDT1JCQV9Q b2xsYWJsZVNldF9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVu dCAmKTsKICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCnByaXZhdGU6 CiAgQ09SQkFfUG9sbGFibGVTZXRfcHRyIHB0cl87CgogIENPUkJBX1BvbGxhYmxlU2V0X3ZhciAo Y29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIENPUkJBX1BvbGxhYmxlU2V0X3ZhciAmb3BlcmF0 b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7Cn07CiMgMTE4ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGxhYmxlQy5oIgpjbGFzcyBDT1JC QV9Qb2xsYWJsZVNldF9vdXQKewpwdWJsaWM6CiAgQ09SQkFfUG9sbGFibGVTZXRfb3V0IChDT1JC QV9Qb2xsYWJsZVNldF9wdHIgJik7CiAgQ09SQkFfUG9sbGFibGVTZXRfb3V0IChDT1JCQV9Qb2xs YWJsZVNldF92YXIgJik7CiAgQ09SQkFfUG9sbGFibGVTZXRfb3V0IChjb25zdCBDT1JCQV9Qb2xs YWJsZVNldF9vdXQgJik7CiAgQ09SQkFfUG9sbGFibGVTZXRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0 IENPUkJBX1BvbGxhYmxlU2V0X291dCAmKTsKICBDT1JCQV9Qb2xsYWJsZVNldF9vdXQgJm9wZXJh dG9yPSAoY29uc3QgQ09SQkFfUG9sbGFibGVTZXRfdmFyICYpOwogIENPUkJBX1BvbGxhYmxlU2V0 X291dCAmb3BlcmF0b3I9IChDT1JCQV9Qb2xsYWJsZVNldF9wdHIpOwogIG9wZXJhdG9yIENPUkJB X1BvbGxhYmxlU2V0X3B0ciAmKCk7CiAgQ09SQkFfUG9sbGFibGVTZXRfcHRyICZwdHIgKHZvaWQp OwogIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAg Q09SQkFfUG9sbGFibGVTZXRfcHRyICZwdHJfOwp9OwojIDE0MiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xsYWJsZUMuaCIKY2xhc3MgQ09SQkFf UG9sbGFibGU7CnR5cGVkZWYgQ09SQkFfUG9sbGFibGUgKkNPUkJBX1BvbGxhYmxlX3B0cjsKCgoK CgoKCmNsYXNzIENPUkJBX1BvbGxhYmxlX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKewpwdWJs aWM6CiAgQ09SQkFfUG9sbGFibGVfdmFyICh2b2lkKTsKICBDT1JCQV9Qb2xsYWJsZV92YXIgKENP UkJBX1BvbGxhYmxlX3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgQ09SQkFfUG9sbGFibGVfdmFyIChj b25zdCBDT1JCQV9Qb2xsYWJsZV92YXIgJik7CiAgfkNPUkJBX1BvbGxhYmxlX3ZhciAodm9pZCk7 CgogIENPUkJBX1BvbGxhYmxlX3ZhciAmb3BlcmF0b3I9IChDT1JCQV9Qb2xsYWJsZV9wdHIpOwog IENPUkJBX1BvbGxhYmxlX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xsYWJsZV92YXIg Jik7CiAgQ09SQkFfUG9sbGFibGVfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICBvcGVy YXRvciBjb25zdCBDT1JCQV9Qb2xsYWJsZV9wdHIgJigpIGNvbnN0OwogIG9wZXJhdG9yIENPUkJB X1BvbGxhYmxlX3B0ciAmKCk7CgogIENPUkJBX1BvbGxhYmxlX3B0ciBpbiAodm9pZCkgY29uc3Q7 CiAgQ09SQkFfUG9sbGFibGVfcHRyICZpbm91dCAodm9pZCk7CiAgQ09SQkFfUG9sbGFibGVfcHRy ICZvdXQgKHZvaWQpOwogIENPUkJBX1BvbGxhYmxlX3B0ciBfcmV0biAodm9pZCk7CiAgQ09SQkFf UG9sbGFibGVfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgc3RhdGljIENPUkJBX1BvbGxhYmxl X3B0ciBkdXBsaWNhdGUgKENPUkJBX1BvbGxhYmxlX3B0cik7CiAgc3RhdGljIHZvaWQgcmVsZWFz ZSAoQ09SQkFfUG9sbGFibGVfcHRyKTsKICBzdGF0aWMgQ09SQkFfUG9sbGFibGVfcHRyIG5pbCAo dm9pZCk7CiAgc3RhdGljIENPUkJBX1BvbGxhYmxlX3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3Qg KiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0 ICh2b2lkICopOwoKcHJpdmF0ZToKICBDT1JCQV9Qb2xsYWJsZV9wdHIgcHRyXzsKCiAgQ09SQkFf UG9sbGFibGVfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgQ09SQkFfUG9sbGFibGVf dmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKfTsKIyAxOTQgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgi CmNsYXNzIENPUkJBX1BvbGxhYmxlX291dAp7CnB1YmxpYzoKICBDT1JCQV9Qb2xsYWJsZV9vdXQg KENPUkJBX1BvbGxhYmxlX3B0ciAmKTsKICBDT1JCQV9Qb2xsYWJsZV9vdXQgKENPUkJBX1BvbGxh YmxlX3ZhciAmKTsKICBDT1JCQV9Qb2xsYWJsZV9vdXQgKGNvbnN0IENPUkJBX1BvbGxhYmxlX291 dCAmKTsKICBDT1JCQV9Qb2xsYWJsZV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9sbGFi bGVfb3V0ICYpOwogIENPUkJBX1BvbGxhYmxlX291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Q b2xsYWJsZV92YXIgJik7CiAgQ09SQkFfUG9sbGFibGVfb3V0ICZvcGVyYXRvcj0gKENPUkJBX1Bv bGxhYmxlX3B0cik7CiAgb3BlcmF0b3IgQ09SQkFfUG9sbGFibGVfcHRyICYoKTsKICBDT1JCQV9Q b2xsYWJsZV9wdHIgJnB0ciAodm9pZCk7CiAgQ09SQkFfUG9sbGFibGVfcHRyIG9wZXJhdG9yLT4g KHZvaWQpOwoKcHJpdmF0ZToKICBDT1JCQV9Qb2xsYWJsZV9wdHIgJnB0cl87Cn07CiMgMjE4ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGxhYmxl Qy5oIgpjbGFzcyBDT1JCQV9Qb2xsYWJsZSA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdAp7 CnB1YmxpYzoKCiAgdHlwZWRlZiBDT1JCQV9Qb2xsYWJsZV9wdHIgX3B0cl90eXBlOwogIHR5cGVk ZWYgQ09SQkFfUG9sbGFibGVfdmFyIF92YXJfdHlwZTsKCgoKICBzdGF0aWMgQ09SQkFfUG9sbGFi bGVfcHRyIF9kdXBsaWNhdGUgKENPUkJBX1BvbGxhYmxlX3B0ciBvYmopOwogIHN0YXRpYyBDT1JC QV9Qb2xsYWJsZV9wdHIgX25hcnJvdyAoCiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgKTsKICBzdGF0aWMgQ09SQkFf UG9sbGFibGVfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgQ09SQkE6Ok9iamVjdF9wdHIg b2JqLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwogIHN0YXRp YyBDT1JCQV9Qb2xsYWJsZV9wdHIgX25pbCAodm9pZCkKICAgIHsKICAgICAgcmV0dXJuIChDT1JC QV9Qb2xsYWJsZV9wdHIpMDsKICAgIH0KCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBpc19yZWFk eSAoCiAgICAgIENPUkJBOjpVTG9uZyB0aW1lb3V0LAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9 IDA7CgoKCiAgdmlydHVhbCBDT1JCQV9Qb2xsYWJsZVNldF9wdHIgY3JlYXRlX3BvbGxhYmxlX3Nl dCAoCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkKICAgIHRocm93 ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICB2aXJ0dWFsIHZvaWQgKl90YW9f UXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICB2aXJ0dWFsIGNvbnN0IGNoYXIq IF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgQ09S QkFfUG9sbGFibGUgKHZvaWQpOwoKICB2aXJ0dWFsIH5DT1JCQV9Qb2xsYWJsZSAodm9pZCk7CnBy aXZhdGU6CiAgQ09SQkFfUG9sbGFibGUgKGNvbnN0IENPUkJBX1BvbGxhYmxlICYpOwogIHZvaWQg b3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xsYWJsZSAmKTsKfTsKIyAyODAgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiCmNsYXNz IENPUkJBX0RJSVBvbGxhYmxlOwp0eXBlZGVmIENPUkJBX0RJSVBvbGxhYmxlICpDT1JCQV9ESUlQ b2xsYWJsZV9wdHI7CgoKCgoKCgpjbGFzcyBDT1JCQV9ESUlQb2xsYWJsZV92YXIgOiBwdWJsaWMg VEFPX0Jhc2VfdmFyCnsKcHVibGljOgogIENPUkJBX0RJSVBvbGxhYmxlX3ZhciAodm9pZCk7CiAg Q09SQkFfRElJUG9sbGFibGVfdmFyIChDT1JCQV9ESUlQb2xsYWJsZV9wdHIgcCkgOiBwdHJfIChw KSB7fQogIENPUkJBX0RJSVBvbGxhYmxlX3ZhciAoY29uc3QgQ09SQkFfRElJUG9sbGFibGVfdmFy ICYpOwogIH5DT1JCQV9ESUlQb2xsYWJsZV92YXIgKHZvaWQpOwoKICBDT1JCQV9ESUlQb2xsYWJs ZV92YXIgJm9wZXJhdG9yPSAoQ09SQkFfRElJUG9sbGFibGVfcHRyKTsKICBDT1JCQV9ESUlQb2xs YWJsZV92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfRElJUG9sbGFibGVfdmFyICYpOwogIENP UkJBX0RJSVBvbGxhYmxlX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgb3BlcmF0b3Ig Y29uc3QgQ09SQkFfRElJUG9sbGFibGVfcHRyICYoKSBjb25zdDsKICBvcGVyYXRvciBDT1JCQV9E SUlQb2xsYWJsZV9wdHIgJigpOwoKICBDT1JCQV9ESUlQb2xsYWJsZV9wdHIgaW4gKHZvaWQpIGNv bnN0OwogIENPUkJBX0RJSVBvbGxhYmxlX3B0ciAmaW5vdXQgKHZvaWQpOwogIENPUkJBX0RJSVBv bGxhYmxlX3B0ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9ESUlQb2xsYWJsZV9wdHIgX3JldG4gKHZv aWQpOwogIENPUkJBX0RJSVBvbGxhYmxlX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogIHN0YXRp YyBDT1JCQV9ESUlQb2xsYWJsZV9wdHIgZHVwbGljYXRlIChDT1JCQV9ESUlQb2xsYWJsZV9wdHIp OwogIHN0YXRpYyB2b2lkIHJlbGVhc2UgKENPUkJBX0RJSVBvbGxhYmxlX3B0cik7CiAgc3RhdGlj IENPUkJBX0RJSVBvbGxhYmxlX3B0ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBDT1JCQV9ESUlQb2xs YWJsZV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsK ICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCnByaXZhdGU6CiAgQ09S QkFfRElJUG9sbGFibGVfcHRyIHB0cl87CgogIENPUkJBX0RJSVBvbGxhYmxlX3ZhciAoY29uc3Qg VEFPX0Jhc2VfdmFyICZyaHMpOwogIENPUkJBX0RJSVBvbGxhYmxlX3ZhciAmb3BlcmF0b3I9IChj b25zdCBUQU9fQmFzZV92YXIgJnJocyk7Cn07CiMgMzMyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGxhYmxlQy5oIgpjbGFzcyBDT1JCQV9ESUlQ b2xsYWJsZV9vdXQKewpwdWJsaWM6CiAgQ09SQkFfRElJUG9sbGFibGVfb3V0IChDT1JCQV9ESUlQ b2xsYWJsZV9wdHIgJik7CiAgQ09SQkFfRElJUG9sbGFibGVfb3V0IChDT1JCQV9ESUlQb2xsYWJs ZV92YXIgJik7CiAgQ09SQkFfRElJUG9sbGFibGVfb3V0IChjb25zdCBDT1JCQV9ESUlQb2xsYWJs ZV9vdXQgJik7CiAgQ09SQkFfRElJUG9sbGFibGVfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJB X0RJSVBvbGxhYmxlX291dCAmKTsKICBDT1JCQV9ESUlQb2xsYWJsZV9vdXQgJm9wZXJhdG9yPSAo Y29uc3QgQ09SQkFfRElJUG9sbGFibGVfdmFyICYpOwogIENPUkJBX0RJSVBvbGxhYmxlX291dCAm b3BlcmF0b3I9IChDT1JCQV9ESUlQb2xsYWJsZV9wdHIpOwogIG9wZXJhdG9yIENPUkJBX0RJSVBv bGxhYmxlX3B0ciAmKCk7CiAgQ09SQkFfRElJUG9sbGFibGVfcHRyICZwdHIgKHZvaWQpOwogIENP UkJBX0RJSVBvbGxhYmxlX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAgQ09SQkFf RElJUG9sbGFibGVfcHRyICZwdHJfOwp9OwojIDM1NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xsYWJsZUMuaCIKY2xhc3MgQ09SQkFfRElJUG9s bGFibGU6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX1BvbGxhYmxlCnsKcHVibGljOgoKICB0eXBlZGVm IENPUkJBX0RJSVBvbGxhYmxlX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDT1JCQV9ESUlQb2xs YWJsZV92YXIgX3Zhcl90eXBlOwoKCgogIHN0YXRpYyBDT1JCQV9ESUlQb2xsYWJsZV9wdHIgX2R1 cGxpY2F0ZSAoQ09SQkFfRElJUG9sbGFibGVfcHRyIG9iaik7CiAgc3RhdGljIENPUkJBX0RJSVBv bGxhYmxlX3B0ciBfbmFycm93ICgKICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwogIHN0YXRpYyBDT1JCQV9ESUlQ b2xsYWJsZV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBv YmosCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7CiAgc3RhdGlj IENPUkJBX0RJSVBvbGxhYmxlX3B0ciBfbmlsICh2b2lkKQogICAgewogICAgICByZXR1cm4gKENP UkJBX0RJSVBvbGxhYmxlX3B0cikwOwogICAgfQoKICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJ bnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRl cmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgQ09SQkFfRElJ UG9sbGFibGUgKHZvaWQpOwoKICB2aXJ0dWFsIH5DT1JCQV9ESUlQb2xsYWJsZSAodm9pZCk7CnBy aXZhdGU6CiAgQ09SQkFfRElJUG9sbGFibGUgKGNvbnN0IENPUkJBX0RJSVBvbGxhYmxlICYpOwog IHZvaWQgb3BlcmF0b3I9IChjb25zdCBDT1JCQV9ESUlQb2xsYWJsZSAmKTsKfTsKIyA0MTAgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVD LmgiCmNsYXNzIENPUkJBX1BvbGxhYmxlU2V0IDogcHVibGljIHZpcnR1YWwgQ09SQkFfT2JqZWN0 CnsKcHVibGljOgoKICB0eXBlZGVmIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBfcHRyX3R5cGU7CiAg dHlwZWRlZiBDT1JCQV9Qb2xsYWJsZVNldF92YXIgX3Zhcl90eXBlOwoKCgogIHN0YXRpYyBDT1JC QV9Qb2xsYWJsZVNldF9wdHIgX2R1cGxpY2F0ZSAoQ09SQkFfUG9sbGFibGVTZXRfcHRyIG9iaik7 CiAgc3RhdGljIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBfbmFycm93ICgKICAgICAgQ09SQkE6Ok9i amVjdF9wdHIgb2JqLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAp OwogIHN0YXRpYyBDT1JCQV9Qb2xsYWJsZVNldF9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAg ICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1l bnQgKCkKICAgICk7CiAgc3RhdGljIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBfbmlsICh2b2lkKQog ICAgewogICAgICByZXR1cm4gKENPUkJBX1BvbGxhYmxlU2V0X3B0cikwOwogICAgfQoKCgoKCiAg Y2xhc3MgTm9Qb3NzaWJsZVBvbGxhYmxlIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAg ewogIHB1YmxpYzoKCiAgICBOb1Bvc3NpYmxlUG9sbGFibGUgKHZvaWQpOwoKCiAgICBOb1Bvc3Np YmxlUG9sbGFibGUgKGNvbnN0IE5vUG9zc2libGVQb2xsYWJsZSAmKTsKCgogICAgfk5vUG9zc2li bGVQb2xsYWJsZSAodm9pZCk7CgoKICAgIE5vUG9zc2libGVQb2xsYWJsZSAmb3BlcmF0b3I9IChj b25zdCBOb1Bvc3NpYmxlUG9sbGFibGUgJik7CgogICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9p ZCk7CgogICAgdmlydHVhbCB2b2lkIF90YW9fZW5jb2RlICgKICAgICAgICBUQU9fT3V0cHV0Q0RS ICYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgKSBjb25zdDsKCiAgICB2aXJ0 dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgIENP UkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICk7CgogICAgc3RhdGljIE5vUG9zc2libGVQb2xsYWJs ZSAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgc3RhdGljIENPUkJBOjpF eGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgfTsKIyA0ODAgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiCiAgY2xhc3MgVW5rbm93 blBvbGxhYmxlIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgewogIHB1YmxpYzoKCiAg ICBVbmtub3duUG9sbGFibGUgKHZvaWQpOwoKCiAgICBVbmtub3duUG9sbGFibGUgKGNvbnN0IFVu a25vd25Qb2xsYWJsZSAmKTsKCgogICAgflVua25vd25Qb2xsYWJsZSAodm9pZCk7CgoKICAgIFVu a25vd25Qb2xsYWJsZSAmb3BlcmF0b3I9IChjb25zdCBVbmtub3duUG9sbGFibGUgJik7CgogICAg dmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgdmlydHVhbCB2b2lkIF90YW9fZW5jb2Rl ICgKICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYK ICAgICAgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgIFRB T19JbnB1dENEUiAmLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICk7CgogICAg c3RhdGljIFVua25vd25Qb2xsYWJsZSAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoK CgogICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgfTsKCgoKCnZp cnR1YWwgQ09SQkFfRElJUG9sbGFibGVfcHRyIGNyZWF0ZV9kaWlfcG9sbGFibGUgKAogICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg VEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj ZXB0aW9uICkgPSAwOwoKCgp2aXJ0dWFsIHZvaWQgYWRkX3BvbGxhYmxlICgKICAgIENPUkJBX1Bv bGxhYmxlX3B0ciBwb3RlbnRpYWwsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog ICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCnZpcnR1YWwgQ09S QkFfUG9sbGFibGVfcHRyIHBvbGwgKAogICAgQ09SQkE6OlVMb25nIHRpbWVvdXQsCiAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICBU QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24sIENPUkJBX1BvbGxhYmxlU2V0OjpOb1Bvc3NpYmxlUG9sbGFibGUgKSA9IDA7CgoKCgp2 aXJ0dWFsIHZvaWQgcmVtb3ZlICgKICAgIENPUkJBX1BvbGxhYmxlX3B0ciBwb3RlbnRpYWwsCiAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0 ZW1FeGNlcHRpb24sIENPUkJBX1BvbGxhYmxlU2V0OjpVbmtub3duUG9sbGFibGUgKSA9IDA7CgoK Cgp2aXJ0dWFsIENPUkJBOjpVU2hvcnQgbnVtYmVyX2xlZnQgKAogICAgQ09SQkE6OkVudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgVEFPX2RlZmF1bHRf ZW52aXJvbm1lbnQgKCkKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAw OwoKCgp2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUp OwoKdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNv bnN0OwoKcHJvdGVjdGVkOgogIENPUkJBX1BvbGxhYmxlU2V0ICh2b2lkKTsKCiAgdmlydHVhbCB+ Q09SQkFfUG9sbGFibGVTZXQgKHZvaWQpOwpwcml2YXRlOgogIENPUkJBX1BvbGxhYmxlU2V0IChj b25zdCBDT1JCQV9Qb2xsYWJsZVNldCAmKTsKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFf UG9sbGFibGVTZXQgJik7Cn07CiMgNTg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1BvbGxhYmxlQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmkiIDEKIyAyNiAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xsYWJsZUMuaSIK aW5saW5lIENPUkJBX1BvbGxhYmxlX3B0cgp0YW9fQ09SQkFfUG9sbGFibGVfZHVwbGljYXRlICgK ICAgIENPUkJBX1BvbGxhYmxlX3B0ciBwCiAgKQp7CiAgcmV0dXJuIENPUkJBX1BvbGxhYmxlOjpf ZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX0NPUkJBX1BvbGxhYmxlX3JlbGVhc2Ug KAogICAgQ09SQkFfUG9sbGFibGVfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0K CmlubGluZSBDT1JCQV9Qb2xsYWJsZV9wdHIKdGFvX0NPUkJBX1BvbGxhYmxlX25pbCAoCiAgICB2 b2lkCiAgKQp7CiAgcmV0dXJuIENPUkJBX1BvbGxhYmxlOjpfbmlsICgpOwp9CgppbmxpbmUgQ09S QkFfUG9sbGFibGVfcHRyCnRhb19DT1JCQV9Qb2xsYWJsZV9uYXJyb3cgKAogICAgQ09SQkE6Ok9i amVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZQogICkKewogIHJldHVybiBDT1JCQV9Qb2xsYWJsZTo6X25hcnJvdyAocCwgX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFv X0NPUkJBX1BvbGxhYmxlX3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBDT1JCQV9Qb2xs YWJsZSAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxDT1JCQV9Qb2xsYWJsZSAqKj4gKHNyYyk7CiAg cmV0dXJuICp0bXA7Cn0KIyA3NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9Qb2xsYWJsZUMuaSIKaW5saW5lIENPUkJBX0RJSVBvbGxhYmxlX3B0cgp0 YW9fQ09SQkFfRElJUG9sbGFibGVfZHVwbGljYXRlICgKICAgIENPUkJBX0RJSVBvbGxhYmxlX3B0 ciBwCiAgKQp7CiAgcmV0dXJuIENPUkJBX0RJSVBvbGxhYmxlOjpfZHVwbGljYXRlIChwKTsKfQoK aW5saW5lIHZvaWQKdGFvX0NPUkJBX0RJSVBvbGxhYmxlX3JlbGVhc2UgKAogICAgQ09SQkFfRElJ UG9sbGFibGVfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBDT1JC QV9ESUlQb2xsYWJsZV9wdHIKdGFvX0NPUkJBX0RJSVBvbGxhYmxlX25pbCAoCiAgICB2b2lkCiAg KQp7CiAgcmV0dXJuIENPUkJBX0RJSVBvbGxhYmxlOjpfbmlsICgpOwp9CgppbmxpbmUgQ09SQkFf RElJUG9sbGFibGVfcHRyCnRhb19DT1JCQV9ESUlQb2xsYWJsZV9uYXJyb3cgKAogICAgQ09SQkE6 Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZQogICkKewogIHJldHVybiBDT1JCQV9ESUlQb2xsYWJsZTo6X25hcnJvdyAocCwg X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0 ICoKdGFvX0NPUkJBX0RJSVBvbGxhYmxlX3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBD T1JCQV9ESUlQb2xsYWJsZSAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxDT1JCQV9ESUlQb2xsYWJs ZSAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMzMgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmkiCmlubGluZSBDT1JCQV9Q b2xsYWJsZVNldF9wdHIKdGFvX0NPUkJBX1BvbGxhYmxlU2V0X2R1cGxpY2F0ZSAoCiAgICBDT1JC QV9Qb2xsYWJsZVNldF9wdHIgcAogICkKewogIHJldHVybiBDT1JCQV9Qb2xsYWJsZVNldDo6X2R1 cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19DT1JCQV9Qb2xsYWJsZVNldF9yZWxlYXNl ICgKICAgIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHAp Owp9CgppbmxpbmUgQ09SQkFfUG9sbGFibGVTZXRfcHRyCnRhb19DT1JCQV9Qb2xsYWJsZVNldF9u aWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBDT1JCQV9Qb2xsYWJsZVNldDo6X25pbCAoKTsK fQoKaW5saW5lIENPUkJBX1BvbGxhYmxlU2V0X3B0cgp0YW9fQ09SQkFfUG9sbGFibGVTZXRfbmFy cm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gQ09SQkFfUG9sbGFibGVT ZXQ6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgppbmxp bmUgQ09SQkE6Ok9iamVjdCAqCnRhb19DT1JCQV9Qb2xsYWJsZVNldF91cGNhc3QgKAogICAgdm9p ZCAqc3JjCiAgKQp7CiAgQ09SQkFfUG9sbGFibGVTZXQgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8 Q09SQkFfUG9sbGFibGVTZXQgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CiMgNTg3ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGxhYmxlQy5o IiAyCiMgNTk5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL1BvbGxhYmxlQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA2MDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiIDIKIyA0OSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiIDIKIyA3OCAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdp bmdDLmgiCm5hbWVzcGFjZSBNZXNzYWdpbmcKewogIHR5cGVkZWYgQ09SQkE6OlNob3J0IFJlYmlu ZE1vZGU7CiAgdHlwZWRlZiBDT1JCQTo6U2hvcnRfb3V0IFJlYmluZE1vZGVfb3V0OwogICAgZXh0 ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1JlYmluZE1vZGU7CgogIGV4dGVybiBjb25zdCBD T1JCQTo6U2hvcnQgVFJBTlNQQVJFTlQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgTk9f UkVCSU5EOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlNob3J0IE5PX1JFQ09OTkVDVDsKCiAgdHlw ZWRlZiBDT1JCQTo6U2hvcnQgU3luY1Njb3BlOwogIHR5cGVkZWYgQ09SQkE6OlNob3J0X291dCBT eW5jU2NvcGVfb3V0OwogICAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1N5bmNTY29w ZTsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpTaG9ydCBTWU5DX05PTkU7CgogIGV4dGVybiBjb25z dCBDT1JCQTo6U2hvcnQgU1lOQ19XSVRIX1RSQU5TUE9SVDsKCiAgZXh0ZXJuIGNvbnN0IENPUkJB OjpTaG9ydCBTWU5DX1dJVEhfU0VSVkVSOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlNob3J0IFNZ TkNfV0lUSF9UQVJHRVQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgU1lOQ19FQUdFUl9C VUZGRVJJTkc7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgU1lOQ19ERUxBWUVEX0JVRkZF UklORzsKCiAgdHlwZWRlZiBDT1JCQTo6U2hvcnQgUm91dGluZ1R5cGU7CiAgdHlwZWRlZiBDT1JC QTo6U2hvcnRfb3V0IFJvdXRpbmdUeXBlX291dDsKICAgIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVf cHRyIF90Y19Sb3V0aW5nVHlwZTsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpTaG9ydCBST1VURV9O T05FOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlNob3J0IFJPVVRFX0ZPUldBUkQ7CgogIGV4dGVy biBjb25zdCBDT1JCQTo6U2hvcnQgUk9VVEVfU1RPUkVfQU5EX0ZPUldBUkQ7CgogIHR5cGVkZWYg VGltZUJhc2U6OlRpbWVUIFRpbWVvdXQ7CiAgdHlwZWRlZiBUaW1lQmFzZTo6VGltZVRfb3V0IFRp bWVvdXRfb3V0OwogICAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1RpbWVvdXQ7Cgog IHR5cGVkZWYgQ09SQkE6OlNob3J0IFByaW9yaXR5OwogIHR5cGVkZWYgQ09SQkE6OlNob3J0X291 dCBQcmlvcml0eV9vdXQ7CiAgICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUHJpb3Jp dHk7CgogIHR5cGVkZWYgQ09SQkE6OlVTaG9ydCBPcmRlcmluZzsKICB0eXBlZGVmIENPUkJBOjpV U2hvcnRfb3V0IE9yZGVyaW5nX291dDsKICAgIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90 Y19PcmRlcmluZzsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVU2hvcnQgT1JERVJfQU5ZOwoKICBl eHRlcm4gY29uc3QgQ09SQkE6OlVTaG9ydCBPUkRFUl9URU1QT1JBTDsKCiAgZXh0ZXJuIGNvbnN0 IENPUkJBOjpVU2hvcnQgT1JERVJfUFJJT1JJVFk7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VVNo b3J0IE9SREVSX0RFQURMSU5FOwoKCgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgUkVCSU5E X1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3MgUmViaW5kUG9saWN5OwogIHR5cGVkZWYgUmViaW5k UG9saWN5ICpSZWJpbmRQb2xpY3lfcHRyOwoKCgoKCgoKICBjbGFzcyBSZWJpbmRQb2xpY3lfdmFy IDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBSZWJpbmRQb2xpY3lfdmFy ICh2b2lkKTsKICAgIFJlYmluZFBvbGljeV92YXIgKFJlYmluZFBvbGljeV9wdHIgcCkgOiBwdHJf IChwKSB7fQogICAgUmViaW5kUG9saWN5X3ZhciAoY29uc3QgUmViaW5kUG9saWN5X3ZhciAmKTsK ICAgIH5SZWJpbmRQb2xpY3lfdmFyICh2b2lkKTsKCiAgICBSZWJpbmRQb2xpY3lfdmFyICZvcGVy YXRvcj0gKFJlYmluZFBvbGljeV9wdHIpOwogICAgUmViaW5kUG9saWN5X3ZhciAmb3BlcmF0b3I9 IChjb25zdCBSZWJpbmRQb2xpY3lfdmFyICYpOwogICAgUmViaW5kUG9saWN5X3B0ciBvcGVyYXRv ci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBSZWJpbmRQb2xpY3lfcHRyICYo KSBjb25zdDsKICAgIG9wZXJhdG9yIFJlYmluZFBvbGljeV9wdHIgJigpOwoKICAgIFJlYmluZFBv bGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUmViaW5kUG9saWN5X3B0ciAmaW5vdXQgKHZv aWQpOwogICAgUmViaW5kUG9saWN5X3B0ciAmb3V0ICh2b2lkKTsKICAgIFJlYmluZFBvbGljeV9w dHIgX3JldG4gKHZvaWQpOwogICAgUmViaW5kUG9saWN5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoK CgogICAgc3RhdGljIFJlYmluZFBvbGljeV9wdHIgZHVwbGljYXRlIChSZWJpbmRQb2xpY3lfcHRy KTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFJlYmluZFBvbGljeV9wdHIpOwogICAgc3RhdGlj IFJlYmluZFBvbGljeV9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBSZWJpbmRQb2xpY3lfcHRy IG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0 aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFJlYmlu ZFBvbGljeV9wdHIgcHRyXzsKCiAgICBSZWJpbmRQb2xpY3lfdmFyIChjb25zdCBUQU9fQmFzZV92 YXIgJnJocyk7CiAgICBSZWJpbmRQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNl X3ZhciAmcmhzKTsKICB9OwojIDE5NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmViaW5kUG9saWN5X291dAog IHsKICBwdWJsaWM6CiAgICBSZWJpbmRQb2xpY3lfb3V0IChSZWJpbmRQb2xpY3lfcHRyICYpOwog ICAgUmViaW5kUG9saWN5X291dCAoUmViaW5kUG9saWN5X3ZhciAmKTsKICAgIFJlYmluZFBvbGlj eV9vdXQgKGNvbnN0IFJlYmluZFBvbGljeV9vdXQgJik7CiAgICBSZWJpbmRQb2xpY3lfb3V0ICZv cGVyYXRvcj0gKGNvbnN0IFJlYmluZFBvbGljeV9vdXQgJik7CiAgICBSZWJpbmRQb2xpY3lfb3V0 ICZvcGVyYXRvcj0gKGNvbnN0IFJlYmluZFBvbGljeV92YXIgJik7CiAgICBSZWJpbmRQb2xpY3lf b3V0ICZvcGVyYXRvcj0gKFJlYmluZFBvbGljeV9wdHIpOwogICAgb3BlcmF0b3IgUmViaW5kUG9s aWN5X3B0ciAmKCk7CiAgICBSZWJpbmRQb2xpY3lfcHRyICZwdHIgKHZvaWQpOwogICAgUmViaW5k UG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFJlYmluZFBvbGlj eV9wdHIgJnB0cl87CiAgfTsKIyAyMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJlYmluZFBvbGljeTogcHVi bGljIHZpcnR1YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBSZWJp bmRQb2xpY3lfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgUmViaW5kUG9saWN5X3ZhciBfdmFy X3R5cGU7CgoKCiAgICBzdGF0aWMgUmViaW5kUG9saWN5X3B0ciBfZHVwbGljYXRlIChSZWJpbmRQ b2xpY3lfcHRyIG9iaik7CiAgICBzdGF0aWMgUmViaW5kUG9saWN5X3B0ciBfbmFycm93ICgKICAg ICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmViaW5kUG9saWN5X3B0ciBfdW5jaGVj a2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlYmluZFBv bGljeV9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoUmViaW5kUG9saWN5 X3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBNZXNzYWdpbmc6OlJlYmluZE1vZGUgcmViaW5k X21vZGUgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAp CiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1 YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmly dHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoK ICBwcm90ZWN0ZWQ6CiAgICBSZWJpbmRQb2xpY3kgKCk7CgogICAgdmlydHVhbCB+UmViaW5kUG9s aWN5ICh2b2lkKTsKICBwcml2YXRlOgogICAgUmViaW5kUG9saWN5IChjb25zdCBSZWJpbmRQb2xp Y3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUmViaW5kUG9saWN5ICYpOwogIH07CiMg MjczICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01l c3NhZ2luZ0MuaCIKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFNZTkNfU0NPUEVfUE9MSUNZ X1RZUEU7CgoKCgoKICBjbGFzcyBTeW5jU2NvcGVQb2xpY3k7CiAgdHlwZWRlZiBTeW5jU2NvcGVQ b2xpY3kgKlN5bmNTY29wZVBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIFN5bmNTY29wZVBvbGlj eV92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFN5bmNTY29wZVBv bGljeV92YXIgKHZvaWQpOwogICAgU3luY1Njb3BlUG9saWN5X3ZhciAoU3luY1Njb3BlUG9saWN5 X3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgICBTeW5jU2NvcGVQb2xpY3lfdmFyIChjb25zdCBTeW5j U2NvcGVQb2xpY3lfdmFyICYpOwogICAgflN5bmNTY29wZVBvbGljeV92YXIgKHZvaWQpOwoKICAg IFN5bmNTY29wZVBvbGljeV92YXIgJm9wZXJhdG9yPSAoU3luY1Njb3BlUG9saWN5X3B0cik7CiAg ICBTeW5jU2NvcGVQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFN5bmNTY29wZVBvbGljeV92 YXIgJik7CiAgICBTeW5jU2NvcGVQb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoK ICAgIG9wZXJhdG9yIGNvbnN0IFN5bmNTY29wZVBvbGljeV9wdHIgJigpIGNvbnN0OwogICAgb3Bl cmF0b3IgU3luY1Njb3BlUG9saWN5X3B0ciAmKCk7CgogICAgU3luY1Njb3BlUG9saWN5X3B0ciBp biAodm9pZCkgY29uc3Q7CiAgICBTeW5jU2NvcGVQb2xpY3lfcHRyICZpbm91dCAodm9pZCk7CiAg ICBTeW5jU2NvcGVQb2xpY3lfcHRyICZvdXQgKHZvaWQpOwogICAgU3luY1Njb3BlUG9saWN5X3B0 ciBfcmV0biAodm9pZCk7CiAgICBTeW5jU2NvcGVQb2xpY3lfcHRyIHB0ciAodm9pZCkgY29uc3Q7 CgoKCiAgICBzdGF0aWMgU3luY1Njb3BlUG9saWN5X3B0ciBkdXBsaWNhdGUgKFN5bmNTY29wZVBv bGljeV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoU3luY1Njb3BlUG9saWN5X3B0cik7 CiAgICBzdGF0aWMgU3luY1Njb3BlUG9saWN5X3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFN5 bmNTY29wZVBvbGljeV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9u bWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBw cml2YXRlOgogICAgU3luY1Njb3BlUG9saWN5X3B0ciBwdHJfOwoKICAgIFN5bmNTY29wZVBvbGlj eV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIFN5bmNTY29wZVBvbGljeV92YXIg Jm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMzMxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIK ICBjbGFzcyBTeW5jU2NvcGVQb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIFN5bmNTY29wZVBv bGljeV9vdXQgKFN5bmNTY29wZVBvbGljeV9wdHIgJik7CiAgICBTeW5jU2NvcGVQb2xpY3lfb3V0 IChTeW5jU2NvcGVQb2xpY3lfdmFyICYpOwogICAgU3luY1Njb3BlUG9saWN5X291dCAoY29uc3Qg U3luY1Njb3BlUG9saWN5X291dCAmKTsKICAgIFN5bmNTY29wZVBvbGljeV9vdXQgJm9wZXJhdG9y PSAoY29uc3QgU3luY1Njb3BlUG9saWN5X291dCAmKTsKICAgIFN5bmNTY29wZVBvbGljeV9vdXQg Jm9wZXJhdG9yPSAoY29uc3QgU3luY1Njb3BlUG9saWN5X3ZhciAmKTsKICAgIFN5bmNTY29wZVBv bGljeV9vdXQgJm9wZXJhdG9yPSAoU3luY1Njb3BlUG9saWN5X3B0cik7CiAgICBvcGVyYXRvciBT eW5jU2NvcGVQb2xpY3lfcHRyICYoKTsKICAgIFN5bmNTY29wZVBvbGljeV9wdHIgJnB0ciAodm9p ZCk7CiAgICBTeW5jU2NvcGVQb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRl OgogICAgU3luY1Njb3BlUG9saWN5X3B0ciAmcHRyXzsKICB9OwojIDM1NSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xh c3MgU3luY1Njb3BlUG9saWN5OiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1 YmxpYzoKCiAgICB0eXBlZGVmIFN5bmNTY29wZVBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlw ZWRlZiBTeW5jU2NvcGVQb2xpY3lfdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBTeW5jU2Nv cGVQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKFN5bmNTY29wZVBvbGljeV9wdHIgb2JqKTsKICAgIHN0 YXRpYyBTeW5jU2NvcGVQb2xpY3lfcHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3Rf cHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAg KTsKICAgIHN0YXRpYyBTeW5jU2NvcGVQb2xpY3lfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAg ICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgU3luY1Njb3BlUG9saWN5X3B0ciBfbmls ICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChTeW5jU2NvcGVQb2xpY3lfcHRyKTA7CiAg ICAgIH0KCiAgICB2aXJ0dWFsIE1lc3NhZ2luZzo6U3luY1Njb3BlIHN5bmNocm9uaXphdGlvbiAo CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAg dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lk ICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNv bnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3Rl Y3RlZDoKICAgIFN5bmNTY29wZVBvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5TeW5jU2NvcGVQb2xp Y3kgKHZvaWQpOwogIHByaXZhdGU6CiAgICBTeW5jU2NvcGVQb2xpY3kgKGNvbnN0IFN5bmNTY29w ZVBvbGljeSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBTeW5jU2NvcGVQb2xpY3kgJik7 CiAgfTsKIyA0MDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vTWVzc2FnaW5nQy5oIgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgUkVRVUVTVF9Q UklPUklUWV9QT0xJQ1lfVFlQRTsKCiAgc3RydWN0IFByaW9yaXR5UmFuZ2U7CiAgY2xhc3MgUHJp b3JpdHlSYW5nZV92YXI7CgogIHN0cnVjdCBQcmlvcml0eVJhbmdlCiAgewoKCiAgICB0eXBlZGVm IFByaW9yaXR5UmFuZ2VfdmFyIF92YXJfdHlwZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlf ZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIE1lc3NhZ2luZzo6UHJpb3JpdHkgbWluOwogICAgTWVz c2FnaW5nOjpQcmlvcml0eSBtYXg7CiAgfTsKCiAgY2xhc3MgUHJpb3JpdHlSYW5nZV92YXIKICB7 CiAgcHVibGljOgogICAgUHJpb3JpdHlSYW5nZV92YXIgKHZvaWQpOwogICAgUHJpb3JpdHlSYW5n ZV92YXIgKFByaW9yaXR5UmFuZ2UgKik7CiAgICBQcmlvcml0eVJhbmdlX3ZhciAoY29uc3QgUHJp b3JpdHlSYW5nZV92YXIgJik7CiAgICBQcmlvcml0eVJhbmdlX3ZhciAoY29uc3QgUHJpb3JpdHlS YW5nZSAmKTsKICAgIH5Qcmlvcml0eVJhbmdlX3ZhciAodm9pZCk7CgogICAgUHJpb3JpdHlSYW5n ZV92YXIgJm9wZXJhdG9yPSAoUHJpb3JpdHlSYW5nZSAqKTsKICAgIFByaW9yaXR5UmFuZ2VfdmFy ICZvcGVyYXRvcj0gKGNvbnN0IFByaW9yaXR5UmFuZ2VfdmFyICYpOwogICAgUHJpb3JpdHlSYW5n ZV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUHJpb3JpdHlSYW5nZSAmKTsKICAgIFByaW9yaXR5UmFu Z2UgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgUHJpb3JpdHlSYW5nZSAqb3BlcmF0b3It PiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgUHJpb3JpdHlSYW5nZSAmKCkgY29u c3Q7CiAgICBvcGVyYXRvciBQcmlvcml0eVJhbmdlICYoKTsKICAgIG9wZXJhdG9yIFByaW9yaXR5 UmFuZ2UgJigpIGNvbnN0OwoKCiAgICBjb25zdCBQcmlvcml0eVJhbmdlICZpbiAodm9pZCkgY29u c3Q7CiAgICBQcmlvcml0eVJhbmdlICZpbm91dCAodm9pZCk7CiAgICBQcmlvcml0eVJhbmdlICZv dXQgKHZvaWQpOwogICAgUHJpb3JpdHlSYW5nZSBfcmV0biAodm9pZCk7CiAgICBQcmlvcml0eVJh bmdlICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgUHJpb3JpdHlSYW5nZSAqcHRy XzsKICB9OwoKICB0eXBlZGVmIFByaW9yaXR5UmFuZ2UgJlByaW9yaXR5UmFuZ2Vfb3V0OwoKICBl eHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUHJpb3JpdHlSYW5nZTsKCgoKCgogIGNsYXNz IFJlcXVlc3RQcmlvcml0eVBvbGljeTsKICB0eXBlZGVmIFJlcXVlc3RQcmlvcml0eVBvbGljeSAq UmVxdWVzdFByaW9yaXR5UG9saWN5X3B0cjsKCgoKCgoKCiAgY2xhc3MgUmVxdWVzdFByaW9yaXR5 UG9saWN5X3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgUmVxdWVz dFByaW9yaXR5UG9saWN5X3ZhciAodm9pZCk7CiAgICBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfdmFy IChSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIHApIDogcHRyXyAocCkge30KICAgIFJlcXVlc3RQ cmlvcml0eVBvbGljeV92YXIgKGNvbnN0IFJlcXVlc3RQcmlvcml0eVBvbGljeV92YXIgJik7CiAg ICB+UmVxdWVzdFByaW9yaXR5UG9saWN5X3ZhciAodm9pZCk7CgogICAgUmVxdWVzdFByaW9yaXR5 UG9saWN5X3ZhciAmb3BlcmF0b3I9IChSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyKTsKICAgIFJl cXVlc3RQcmlvcml0eVBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUmVxdWVzdFByaW9yaXR5 UG9saWN5X3ZhciAmKTsKICAgIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIgb3BlcmF0b3ItPiAo dm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgUmVxdWVzdFByaW9yaXR5UG9saWN5X3B0 ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyICYoKTsK CiAgICBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIGluICh2b2lkKSBjb25zdDsKICAgIFJlcXVl c3RQcmlvcml0eVBvbGljeV9wdHIgJmlub3V0ICh2b2lkKTsKICAgIFJlcXVlc3RQcmlvcml0eVBv bGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIF9yZXRu ICh2b2lkKTsKICAgIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIgcHRyICh2b2lkKSBjb25zdDsK CgoKICAgIHN0YXRpYyBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIGR1cGxpY2F0ZSAoUmVxdWVz dFByaW9yaXR5UG9saWN5X3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChSZXF1ZXN0UHJp b3JpdHlQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIG5p bCAodm9pZCk7CiAgICBzdGF0aWMgUmVxdWVzdFByaW9yaXR5UG9saWN5X3B0ciBuYXJyb3cgKENP UkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpP YmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBSZXF1ZXN0UHJpb3JpdHlQ b2xpY3lfcHRyIHB0cl87CgogICAgUmVxdWVzdFByaW9yaXR5UG9saWN5X3ZhciAoY29uc3QgVEFP X0Jhc2VfdmFyICZyaHMpOwogICAgUmVxdWVzdFByaW9yaXR5UG9saWN5X3ZhciAmb3BlcmF0b3I9 IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyA1MTYgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJl cXVlc3RQcmlvcml0eVBvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgUmVxdWVzdFByaW9yaXR5 UG9saWN5X291dCAoUmVxdWVzdFByaW9yaXR5UG9saWN5X3B0ciAmKTsKICAgIFJlcXVlc3RQcmlv cml0eVBvbGljeV9vdXQgKFJlcXVlc3RQcmlvcml0eVBvbGljeV92YXIgJik7CiAgICBSZXF1ZXN0 UHJpb3JpdHlQb2xpY3lfb3V0IChjb25zdCBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfb3V0ICYpOwog ICAgUmVxdWVzdFByaW9yaXR5UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZXF1ZXN0UHJp b3JpdHlQb2xpY3lfb3V0ICYpOwogICAgUmVxdWVzdFByaW9yaXR5UG9saWN5X291dCAmb3BlcmF0 b3I9IChjb25zdCBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfdmFyICYpOwogICAgUmVxdWVzdFByaW9y aXR5UG9saWN5X291dCAmb3BlcmF0b3I9IChSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyKTsKICAg IG9wZXJhdG9yIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIgJigpOwogICAgUmVxdWVzdFByaW9y aXR5UG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIg b3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lf cHRyICZwdHJfOwogIH07CiMgNTQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBSZXF1ZXN0UHJpb3JpdHlQb2xp Y3k6IHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpQb2xpY3kKICB7CiAgcHVibGljOgoKICAgIHR5cGVk ZWYgUmVxdWVzdFByaW9yaXR5UG9saWN5X3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFJlcXVl c3RQcmlvcml0eVBvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFJlcXVlc3RQcmlv cml0eVBvbGljeV9wdHIgX2R1cGxpY2F0ZSAoUmVxdWVzdFByaW9yaXR5UG9saWN5X3B0ciBvYmop OwogICAgc3RhdGljIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAg Q09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIgX3Vu Y2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg ICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBSZXF1 ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4g KFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgTWVzc2Fn aW5nOjpQcmlvcml0eVJhbmdlIHByaW9yaXR5X3JhbmdlICgKICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F eGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2Ug KHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9y ZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgUmVxdWVzdFByaW9y aXR5UG9saWN5ICgpOwoKICAgIHZpcnR1YWwgflJlcXVlc3RQcmlvcml0eVBvbGljeSAodm9pZCk7 CiAgcHJpdmF0ZToKICAgIFJlcXVlc3RQcmlvcml0eVBvbGljeSAoY29uc3QgUmVxdWVzdFByaW9y aXR5UG9saWN5ICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFJlcXVlc3RQcmlvcml0eVBv bGljeSAmKTsKICB9OwoKCgoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFJFUExZX1BSSU9S SVRZX1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3MgUmVwbHlQcmlvcml0eVBvbGljeTsKICB0eXBl ZGVmIFJlcGx5UHJpb3JpdHlQb2xpY3kgKlJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyOwoKCgoKCgoK ICBjbGFzcyBSZXBseVByaW9yaXR5UG9saWN5X3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7 CiAgcHVibGljOgogICAgUmVwbHlQcmlvcml0eVBvbGljeV92YXIgKHZvaWQpOwogICAgUmVwbHlQ cmlvcml0eVBvbGljeV92YXIgKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyIHApIDogcHRyXyAocCkg e30KICAgIFJlcGx5UHJpb3JpdHlQb2xpY3lfdmFyIChjb25zdCBSZXBseVByaW9yaXR5UG9saWN5 X3ZhciAmKTsKICAgIH5SZXBseVByaW9yaXR5UG9saWN5X3ZhciAodm9pZCk7CgogICAgUmVwbHlQ cmlvcml0eVBvbGljeV92YXIgJm9wZXJhdG9yPSAoUmVwbHlQcmlvcml0eVBvbGljeV9wdHIpOwog ICAgUmVwbHlQcmlvcml0eVBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUmVwbHlQcmlvcml0 eVBvbGljeV92YXIgJik7CiAgICBSZXBseVByaW9yaXR5UG9saWN5X3B0ciBvcGVyYXRvci0+ICh2 b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBSZXBseVByaW9yaXR5UG9saWN5X3B0ciAm KCkgY29uc3Q7CiAgICBvcGVyYXRvciBSZXBseVByaW9yaXR5UG9saWN5X3B0ciAmKCk7CgogICAg UmVwbHlQcmlvcml0eVBvbGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUmVwbHlQcmlvcml0 eVBvbGljeV9wdHIgJmlub3V0ICh2b2lkKTsKICAgIFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyICZv dXQgKHZvaWQpOwogICAgUmVwbHlQcmlvcml0eVBvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAg UmVwbHlQcmlvcml0eVBvbGljeV9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBS ZXBseVByaW9yaXR5UG9saWN5X3B0ciBkdXBsaWNhdGUgKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRy KTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyKTsKICAg IHN0YXRpYyBSZXBseVByaW9yaXR5UG9saWN5X3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFJl cGx5UHJpb3JpdHlQb2xpY3lfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52 aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsK CiAgcHJpdmF0ZToKICAgIFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyIHB0cl87CgogICAgUmVwbHlQ cmlvcml0eVBvbGljeV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIFJlcGx5UHJp b3JpdHlQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9 OwojIDY0NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmVwbHlQcmlvcml0eVBvbGljeV9vdXQKICB7CiAgcHVi bGljOgogICAgUmVwbHlQcmlvcml0eVBvbGljeV9vdXQgKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRy ICYpOwogICAgUmVwbHlQcmlvcml0eVBvbGljeV9vdXQgKFJlcGx5UHJpb3JpdHlQb2xpY3lfdmFy ICYpOwogICAgUmVwbHlQcmlvcml0eVBvbGljeV9vdXQgKGNvbnN0IFJlcGx5UHJpb3JpdHlQb2xp Y3lfb3V0ICYpOwogICAgUmVwbHlQcmlvcml0eVBvbGljeV9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg UmVwbHlQcmlvcml0eVBvbGljeV9vdXQgJik7CiAgICBSZXBseVByaW9yaXR5UG9saWN5X291dCAm b3BlcmF0b3I9IChjb25zdCBSZXBseVByaW9yaXR5UG9saWN5X3ZhciAmKTsKICAgIFJlcGx5UHJp b3JpdHlQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyKTsKICAg IG9wZXJhdG9yIFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyICYoKTsKICAgIFJlcGx5UHJpb3JpdHlQ b2xpY3lfcHRyICZwdHIgKHZvaWQpOwogICAgUmVwbHlQcmlvcml0eVBvbGljeV9wdHIgb3BlcmF0 b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBSZXBseVByaW9yaXR5UG9saWN5X3B0ciAmcHRy XzsKICB9OwojIDY3MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmVwbHlQcmlvcml0eVBvbGljeTogcHVibGlj IHZpcnR1YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBSZXBseVBy aW9yaXR5UG9saWN5X3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFJlcGx5UHJpb3JpdHlQb2xp Y3lfdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBSZXBseVByaW9yaXR5UG9saWN5X3B0ciBf ZHVwbGljYXRlIChSZXBseVByaW9yaXR5UG9saWN5X3B0ciBvYmopOwogICAgc3RhdGljIFJlcGx5 UHJpb3JpdHlQb2xpY3lfcHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9i aiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAg IHN0YXRpYyBSZXBseVByaW9yaXR5UG9saWN5X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAg ICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZp cm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyIF9u aWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRy KTA7CiAgICAgIH0KCiAgICB2aXJ0dWFsIE1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZSBwcmlvcml0 eV9yYW5nZSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAg ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmly dHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2 aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7 CgogIHByb3RlY3RlZDoKICAgIFJlcGx5UHJpb3JpdHlQb2xpY3kgKCk7CgogICAgdmlydHVhbCB+ UmVwbHlQcmlvcml0eVBvbGljeSAodm9pZCk7CiAgcHJpdmF0ZToKICAgIFJlcGx5UHJpb3JpdHlQ b2xpY3kgKGNvbnN0IFJlcGx5UHJpb3JpdHlQb2xpY3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAo Y29uc3QgUmVwbHlQcmlvcml0eVBvbGljeSAmKTsKICB9OwojIDcyNCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgZXh0ZXJu IGNvbnN0IENPUkJBOjpVTG9uZyBSRVFVRVNUX1NUQVJUX1RJTUVfUE9MSUNZX1RZUEU7CgoKCgoK ICBjbGFzcyBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5OwogIHR5cGVkZWYgUmVxdWVzdFN0YXJ0VGlt ZVBvbGljeSAqUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIFJlcXVl c3RTdGFydFRpbWVQb2xpY3lfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6 CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3ZhciAodm9pZCk7CiAgICBSZXF1ZXN0U3RhcnRU aW1lUG9saWN5X3ZhciAoUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgcCkgOiBwdHJfIChwKSB7 fQogICAgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV92YXIgKGNvbnN0IFJlcXVlc3RTdGFydFRpbWVQ b2xpY3lfdmFyICYpOwogICAgflJlcXVlc3RTdGFydFRpbWVQb2xpY3lfdmFyICh2b2lkKTsKCiAg ICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3ZhciAmb3BlcmF0b3I9IChSZXF1ZXN0U3RhcnRUaW1l UG9saWN5X3B0cik7CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3ZhciAmb3BlcmF0b3I9IChj b25zdCBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3ZhciAmKTsKICAgIFJlcXVlc3RTdGFydFRpbWVQ b2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFJl cXVlc3RTdGFydFRpbWVQb2xpY3lfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFJlcXVlc3RT dGFydFRpbWVQb2xpY3lfcHRyICYoKTsKCiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0ciBp biAodm9pZCkgY29uc3Q7CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0ciAmaW5vdXQgKHZv aWQpOwogICAgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBSZXF1 ZXN0U3RhcnRUaW1lUG9saWN5X3B0ciBfcmV0biAodm9pZCk7CiAgICBSZXF1ZXN0U3RhcnRUaW1l UG9saWN5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFJlcXVlc3RTdGFydFRp bWVQb2xpY3lfcHRyIGR1cGxpY2F0ZSAoUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIpOwogICAg c3RhdGljIHZvaWQgcmVsZWFzZSAoUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIpOwogICAgc3Rh dGljIFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgUmVx dWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpF bnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICop OwoKICBwcml2YXRlOgogICAgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgcHRyXzsKCiAgICBS ZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAg UmVxdWVzdFN0YXJ0VGltZVBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFy ICZyaHMpOwogIH07CiMgNzgyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5 X291dAogIHsKICBwdWJsaWM6CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X291dCAoUmVxdWVz dFN0YXJ0VGltZVBvbGljeV9wdHIgJik7CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X291dCAo UmVxdWVzdFN0YXJ0VGltZVBvbGljeV92YXIgJik7CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5 X291dCAoY29uc3QgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9vdXQgJik7CiAgICBSZXF1ZXN0U3Rh cnRUaW1lUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5 X291dCAmKTsKICAgIFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0 IFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfdmFyICYpOwogICAgUmVxdWVzdFN0YXJ0VGltZVBvbGlj eV9vdXQgJm9wZXJhdG9yPSAoUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIpOwogICAgb3BlcmF0 b3IgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgJigpOwogICAgUmVxdWVzdFN0YXJ0VGltZVBv bGljeV9wdHIgJnB0ciAodm9pZCk7CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0ciBvcGVy YXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRy ICZwdHJfOwogIH07CiMgODA2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5 OiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVm IFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgUmVxdWVz dFN0YXJ0VGltZVBvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFJlcXVlc3RTdGFy dFRpbWVQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRyIG9i aik7CiAgICBzdGF0aWMgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAg ICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZp cm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRy IF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K ICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMg UmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJl dHVybiAoUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwg VGltZUJhc2U6OlV0Y1Qgc3RhcnRfdGltZSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u ICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJp dGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9y eV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgIFJlcXVlc3RTdGFydFRpbWVQb2xp Y3kgKCk7CgogICAgdmlydHVhbCB+UmVxdWVzdFN0YXJ0VGltZVBvbGljeSAodm9pZCk7CiAgcHJp dmF0ZToKICAgIFJlcXVlc3RTdGFydFRpbWVQb2xpY3kgKGNvbnN0IFJlcXVlc3RTdGFydFRpbWVQ b2xpY3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUmVxdWVzdFN0YXJ0VGltZVBvbGlj eSAmKTsKICB9OwojIDg1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBSRVFV RVNUX0VORF9USU1FX1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3MgUmVxdWVzdEVuZFRpbWVQb2xp Y3k7CiAgdHlwZWRlZiBSZXF1ZXN0RW5kVGltZVBvbGljeSAqUmVxdWVzdEVuZFRpbWVQb2xpY3lf cHRyOwoKCgoKCgoKICBjbGFzcyBSZXF1ZXN0RW5kVGltZVBvbGljeV92YXIgOiBwdWJsaWMgVEFP X0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFJlcXVlc3RFbmRUaW1lUG9saWN5X3ZhciAodm9p ZCk7CiAgICBSZXF1ZXN0RW5kVGltZVBvbGljeV92YXIgKFJlcXVlc3RFbmRUaW1lUG9saWN5X3B0 ciBwKSA6IHB0cl8gKHApIHt9CiAgICBSZXF1ZXN0RW5kVGltZVBvbGljeV92YXIgKGNvbnN0IFJl cXVlc3RFbmRUaW1lUG9saWN5X3ZhciAmKTsKICAgIH5SZXF1ZXN0RW5kVGltZVBvbGljeV92YXIg KHZvaWQpOwoKICAgIFJlcXVlc3RFbmRUaW1lUG9saWN5X3ZhciAmb3BlcmF0b3I9IChSZXF1ZXN0 RW5kVGltZVBvbGljeV9wdHIpOwogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfdmFyICZvcGVyYXRv cj0gKGNvbnN0IFJlcXVlc3RFbmRUaW1lUG9saWN5X3ZhciAmKTsKICAgIFJlcXVlc3RFbmRUaW1l UG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBS ZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgUmVxdWVzdEVu ZFRpbWVQb2xpY3lfcHRyICYoKTsKCiAgICBSZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgaW4gKHZv aWQpIGNvbnN0OwogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyICZpbm91dCAodm9pZCk7CiAg ICBSZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBSZXF1ZXN0RW5kVGlt ZVBvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyIHB0 ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyIGR1 cGxpY2F0ZSAoUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVh c2UgKFJlcXVlc3RFbmRUaW1lUG9saWN5X3B0cik7CiAgICBzdGF0aWMgUmVxdWVzdEVuZFRpbWVQ b2xpY3lfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRy IG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0 aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFJlcXVl c3RFbmRUaW1lUG9saWN5X3B0ciBwdHJfOwoKICAgIFJlcXVlc3RFbmRUaW1lUG9saWN5X3ZhciAo Y29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfdmFyICZv cGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDkxNyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAg Y2xhc3MgUmVxdWVzdEVuZFRpbWVQb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIFJlcXVlc3RF bmRUaW1lUG9saWN5X291dCAoUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyICYpOwogICAgUmVxdWVz dEVuZFRpbWVQb2xpY3lfb3V0IChSZXF1ZXN0RW5kVGltZVBvbGljeV92YXIgJik7CiAgICBSZXF1 ZXN0RW5kVGltZVBvbGljeV9vdXQgKGNvbnN0IFJlcXVlc3RFbmRUaW1lUG9saWN5X291dCAmKTsK ICAgIFJlcXVlc3RFbmRUaW1lUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZXF1ZXN0RW5k VGltZVBvbGljeV9vdXQgJik7CiAgICBSZXF1ZXN0RW5kVGltZVBvbGljeV9vdXQgJm9wZXJhdG9y PSAoY29uc3QgUmVxdWVzdEVuZFRpbWVQb2xpY3lfdmFyICYpOwogICAgUmVxdWVzdEVuZFRpbWVQ b2xpY3lfb3V0ICZvcGVyYXRvcj0gKFJlcXVlc3RFbmRUaW1lUG9saWN5X3B0cik7CiAgICBvcGVy YXRvciBSZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgJigpOwogICAgUmVxdWVzdEVuZFRpbWVQb2xp Y3lfcHRyICZwdHIgKHZvaWQpOwogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyIG9wZXJhdG9y LT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyICZwdHJf OwogIH07CiMgOTQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBSZXF1ZXN0RW5kVGltZVBvbGljeTogcHVibGlj IHZpcnR1YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBSZXF1ZXN0 RW5kVGltZVBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZXF1ZXN0RW5kVGltZVBv bGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFJlcXVlc3RFbmRUaW1lUG9saWN5X3B0 ciBfZHVwbGljYXRlIChSZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBS ZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9w dHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAp OwogICAgc3RhdGljIFJlcXVlc3RFbmRUaW1lUG9saWN5X3B0ciBfdW5jaGVja2VkX25hcnJvdyAo CiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVu dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVs dF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlcXVlc3RFbmRUaW1lUG9saWN5 X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChSZXF1ZXN0RW5kVGltZVBv bGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgVGltZUJhc2U6OlV0Y1QgZW5kX3RpbWUg KAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAg IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9p ZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBj b25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90 ZWN0ZWQ6CiAgICBSZXF1ZXN0RW5kVGltZVBvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5SZXF1ZXN0 RW5kVGltZVBvbGljeSAodm9pZCk7CiAgcHJpdmF0ZToKICAgIFJlcXVlc3RFbmRUaW1lUG9saWN5 IChjb25zdCBSZXF1ZXN0RW5kVGltZVBvbGljeSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25z dCBSZXF1ZXN0RW5kVGltZVBvbGljeSAmKTsKICB9OwojIDk5NCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgZXh0ZXJuIGNv bnN0IENPUkJBOjpVTG9uZyBSRVBMWV9TVEFSVF9USU1FX1BPTElDWV9UWVBFOwoKCgoKCiAgY2xh c3MgUmVwbHlTdGFydFRpbWVQb2xpY3k7CiAgdHlwZWRlZiBSZXBseVN0YXJ0VGltZVBvbGljeSAq UmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyOwoKCgoKCgoKICBjbGFzcyBSZXBseVN0YXJ0VGltZVBv bGljeV92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFJlcGx5U3Rh cnRUaW1lUG9saWN5X3ZhciAodm9pZCk7CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeV92YXIgKFJl cGx5U3RhcnRUaW1lUG9saWN5X3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgICBSZXBseVN0YXJ0VGlt ZVBvbGljeV92YXIgKGNvbnN0IFJlcGx5U3RhcnRUaW1lUG9saWN5X3ZhciAmKTsKICAgIH5SZXBs eVN0YXJ0VGltZVBvbGljeV92YXIgKHZvaWQpOwoKICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X3Zh ciAmb3BlcmF0b3I9IChSZXBseVN0YXJ0VGltZVBvbGljeV9wdHIpOwogICAgUmVwbHlTdGFydFRp bWVQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFJlcGx5U3RhcnRUaW1lUG9saWN5X3ZhciAm KTsKICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsK CiAgICBvcGVyYXRvciBjb25zdCBSZXBseVN0YXJ0VGltZVBvbGljeV9wdHIgJigpIGNvbnN0Owog ICAgb3BlcmF0b3IgUmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyICYoKTsKCiAgICBSZXBseVN0YXJ0 VGltZVBvbGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUmVwbHlTdGFydFRpbWVQb2xpY3lf cHRyICZpbm91dCAodm9pZCk7CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeV9wdHIgJm91dCAodm9p ZCk7CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgUmVwbHlT dGFydFRpbWVQb2xpY3lfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgUmVwbHlT dGFydFRpbWVQb2xpY3lfcHRyIGR1cGxpY2F0ZSAoUmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyKTsK ICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0cik7CiAgICBz dGF0aWMgUmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgUmVw bHlTdGFydFRpbWVQb2xpY3lfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52 aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsK CiAgcHJpdmF0ZToKICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciBwdHJfOwoKICAgIFJlcGx5 U3RhcnRUaW1lUG9saWN5X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgUmVwbHlT dGFydFRpbWVQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsK ICB9OwojIDEwNTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJlcGx5U3RhcnRUaW1lUG9saWN5X291dAogIHsK ICBwdWJsaWM6CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeV9vdXQgKFJlcGx5U3RhcnRUaW1lUG9s aWN5X3B0ciAmKTsKICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X291dCAoUmVwbHlTdGFydFRpbWVQ b2xpY3lfdmFyICYpOwogICAgUmVwbHlTdGFydFRpbWVQb2xpY3lfb3V0IChjb25zdCBSZXBseVN0 YXJ0VGltZVBvbGljeV9vdXQgJik7CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeV9vdXQgJm9wZXJh dG9yPSAoY29uc3QgUmVwbHlTdGFydFRpbWVQb2xpY3lfb3V0ICYpOwogICAgUmVwbHlTdGFydFRp bWVQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFJlcGx5U3RhcnRUaW1lUG9saWN5X3ZhciAm KTsKICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X291dCAmb3BlcmF0b3I9IChSZXBseVN0YXJ0VGlt ZVBvbGljeV9wdHIpOwogICAgb3BlcmF0b3IgUmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyICYoKTsK ICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFJlcGx5U3RhcnRU aW1lUG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFJlcGx5U3Rh cnRUaW1lUG9saWN5X3B0ciAmcHRyXzsKICB9OwojIDEwNzYgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJlcGx5 U3RhcnRUaW1lUG9saWN5OiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1Ymxp YzoKCiAgICB0eXBlZGVmIFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciBfcHRyX3R5cGU7CiAgICB0 eXBlZGVmIFJlcGx5U3RhcnRUaW1lUG9saWN5X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMg UmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKFJlcGx5U3RhcnRUaW1lUG9saWN5 X3B0ciBvYmopOwogICAgc3RhdGljIFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciBfbmFycm93ICgK ICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0 X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVwbHlTdGFydFRpbWVQb2xpY3lf cHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0 aWMgUmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICBy ZXR1cm4gKFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBU aW1lQmFzZTo6VXRjVCBzdGFydF90aW1lICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24g KSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0 aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5 X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgUmVwbHlTdGFydFRpbWVQb2xpY3kg KCk7CgogICAgdmlydHVhbCB+UmVwbHlTdGFydFRpbWVQb2xpY3kgKHZvaWQpOwogIHByaXZhdGU6 CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeSAoY29uc3QgUmVwbHlTdGFydFRpbWVQb2xpY3kgJik7 CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUmVwbHlTdGFydFRpbWVQb2xpY3kgJik7CiAgfTsK IyAxMTI5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L01lc3NhZ2luZ0MuaCIKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFJFUExZX0VORF9USU1F X1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3MgUmVwbHlFbmRUaW1lUG9saWN5OwogIHR5cGVkZWYg UmVwbHlFbmRUaW1lUG9saWN5ICpSZXBseUVuZFRpbWVQb2xpY3lfcHRyOwoKCgoKCgoKICBjbGFz cyBSZXBseUVuZFRpbWVQb2xpY3lfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJs aWM6CiAgICBSZXBseUVuZFRpbWVQb2xpY3lfdmFyICh2b2lkKTsKICAgIFJlcGx5RW5kVGltZVBv bGljeV92YXIgKFJlcGx5RW5kVGltZVBvbGljeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgUmVw bHlFbmRUaW1lUG9saWN5X3ZhciAoY29uc3QgUmVwbHlFbmRUaW1lUG9saWN5X3ZhciAmKTsKICAg IH5SZXBseUVuZFRpbWVQb2xpY3lfdmFyICh2b2lkKTsKCiAgICBSZXBseUVuZFRpbWVQb2xpY3lf dmFyICZvcGVyYXRvcj0gKFJlcGx5RW5kVGltZVBvbGljeV9wdHIpOwogICAgUmVwbHlFbmRUaW1l UG9saWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBSZXBseUVuZFRpbWVQb2xpY3lfdmFyICYpOwog ICAgUmVwbHlFbmRUaW1lUG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBv cGVyYXRvciBjb25zdCBSZXBseUVuZFRpbWVQb2xpY3lfcHRyICYoKSBjb25zdDsKICAgIG9wZXJh dG9yIFJlcGx5RW5kVGltZVBvbGljeV9wdHIgJigpOwoKICAgIFJlcGx5RW5kVGltZVBvbGljeV9w dHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUmVwbHlFbmRUaW1lUG9saWN5X3B0ciAmaW5vdXQgKHZv aWQpOwogICAgUmVwbHlFbmRUaW1lUG9saWN5X3B0ciAmb3V0ICh2b2lkKTsKICAgIFJlcGx5RW5k VGltZVBvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgUmVwbHlFbmRUaW1lUG9saWN5X3B0ciBw dHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFJlcGx5RW5kVGltZVBvbGljeV9wdHIgZHVw bGljYXRlIChSZXBseUVuZFRpbWVQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2Ug KFJlcGx5RW5kVGltZVBvbGljeV9wdHIpOwogICAgc3RhdGljIFJlcGx5RW5kVGltZVBvbGljeV9w dHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBSZXBseUVuZFRpbWVQb2xpY3lfcHRyIG5hcnJvdyAo Q09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6 Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFJlcGx5RW5kVGltZVBv bGljeV9wdHIgcHRyXzsKCiAgICBSZXBseUVuZFRpbWVQb2xpY3lfdmFyIChjb25zdCBUQU9fQmFz ZV92YXIgJnJocyk7CiAgICBSZXBseUVuZFRpbWVQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0 IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDExODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJlcGx5RW5k VGltZVBvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgUmVwbHlFbmRUaW1lUG9saWN5X291dCAo UmVwbHlFbmRUaW1lUG9saWN5X3B0ciAmKTsKICAgIFJlcGx5RW5kVGltZVBvbGljeV9vdXQgKFJl cGx5RW5kVGltZVBvbGljeV92YXIgJik7CiAgICBSZXBseUVuZFRpbWVQb2xpY3lfb3V0IChjb25z dCBSZXBseUVuZFRpbWVQb2xpY3lfb3V0ICYpOwogICAgUmVwbHlFbmRUaW1lUG9saWN5X291dCAm b3BlcmF0b3I9IChjb25zdCBSZXBseUVuZFRpbWVQb2xpY3lfb3V0ICYpOwogICAgUmVwbHlFbmRU aW1lUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZXBseUVuZFRpbWVQb2xpY3lfdmFyICYp OwogICAgUmVwbHlFbmRUaW1lUG9saWN5X291dCAmb3BlcmF0b3I9IChSZXBseUVuZFRpbWVQb2xp Y3lfcHRyKTsKICAgIG9wZXJhdG9yIFJlcGx5RW5kVGltZVBvbGljeV9wdHIgJigpOwogICAgUmVw bHlFbmRUaW1lUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFJlcGx5RW5kVGltZVBvbGljeV9w dHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBSZXBseUVuZFRpbWVQb2xpY3lf cHRyICZwdHJfOwogIH07CiMgMTIxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmVwbHlFbmRUaW1lUG9saWN5 OiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVm IFJlcGx5RW5kVGltZVBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZXBseUVuZFRp bWVQb2xpY3lfdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBSZXBseUVuZFRpbWVQb2xpY3lf cHRyIF9kdXBsaWNhdGUgKFJlcGx5RW5kVGltZVBvbGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBS ZXBseUVuZFRpbWVQb2xpY3lfcHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRy IG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsK ICAgIHN0YXRpYyBSZXBseUVuZFRpbWVQb2xpY3lfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAg ICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVwbHlFbmRUaW1lUG9saWN5X3B0ciBf bmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChSZXBseUVuZFRpbWVQb2xpY3lfcHRy KTA7CiAgICAgIH0KCiAgICB2aXJ0dWFsIFRpbWVCYXNlOjpVdGNUIGVuZF90aW1lICgKICAgICAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAo IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9f UXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hh ciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgog ICAgUmVwbHlFbmRUaW1lUG9saWN5ICgpOwoKICAgIHZpcnR1YWwgflJlcGx5RW5kVGltZVBvbGlj eSAodm9pZCk7CiAgcHJpdmF0ZToKICAgIFJlcGx5RW5kVGltZVBvbGljeSAoY29uc3QgUmVwbHlF bmRUaW1lUG9saWN5ICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFJlcGx5RW5kVGltZVBv bGljeSAmKTsKICB9OwojIDEyNjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcg UkVMQVRJVkVfUkVRX1RJTUVPVVRfUE9MSUNZX1RZUEU7CgoKCgoKICBjbGFzcyBSZWxhdGl2ZVJl cXVlc3RUaW1lb3V0UG9saWN5OwogIHR5cGVkZWYgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGlj eSAqUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIFJlbGF0 aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBw dWJsaWM6CiAgICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3ZhciAodm9pZCk7CiAgICBS ZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3ZhciAoUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBv bGljeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGlj eV92YXIgKGNvbnN0IFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfdmFyICYpOwogICAgflJl bGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfdmFyICh2b2lkKTsKCiAgICBSZWxhdGl2ZVJlcXVl c3RUaW1lb3V0UG9saWN5X3ZhciAmb3BlcmF0b3I9IChSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9s aWN5X3B0cik7CiAgICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3ZhciAmb3BlcmF0b3I9 IChjb25zdCBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3ZhciAmKTsKICAgIFJlbGF0aXZl UmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9w ZXJhdG9yIGNvbnN0IFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyICYoKSBjb25zdDsK ICAgIG9wZXJhdG9yIFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyICYoKTsKCiAgICBS ZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBSZWxh dGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgUmVsYXRpdmVS ZXF1ZXN0VGltZW91dFBvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBSZWxhdGl2ZVJlcXVlc3RU aW1lb3V0UG9saWN5X3B0ciBfcmV0biAodm9pZCk7CiAgICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0 UG9saWN5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFJlbGF0aXZlUmVxdWVz dFRpbWVvdXRQb2xpY3lfcHRyIGR1cGxpY2F0ZSAoUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGlj eV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBv bGljeV9wdHIpOwogICAgc3RhdGljIFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyIG5p bCAodm9pZCk7CiAgICBzdGF0aWMgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9wdHIgbmFy cm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBD T1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgUmVsYXRpdmVS ZXF1ZXN0VGltZW91dFBvbGljeV9wdHIgcHRyXzsKCiAgICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0 UG9saWN5X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgUmVsYXRpdmVSZXF1ZXN0 VGltZW91dFBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwog IH07CiMgMTMyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9v dXQKICB7CiAgcHVibGljOgogICAgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9vdXQgKFJl bGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyICYpOwogICAgUmVsYXRpdmVSZXF1ZXN0VGlt ZW91dFBvbGljeV9vdXQgKFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfdmFyICYpOwogICAg UmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9vdXQgKGNvbnN0IFJlbGF0aXZlUmVxdWVzdFRp bWVvdXRQb2xpY3lfb3V0ICYpOwogICAgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9vdXQg Jm9wZXJhdG9yPSAoY29uc3QgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9vdXQgJik7CiAg ICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZWxh dGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3ZhciAmKTsKICAgIFJlbGF0aXZlUmVxdWVzdFRpbWVv dXRQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRy KTsKICAgIG9wZXJhdG9yIFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyICYoKTsKICAg IFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyICZwdHIgKHZvaWQpOwogICAgUmVsYXRp dmVSZXF1ZXN0VGltZW91dFBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6 CiAgICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0ciAmcHRyXzsKICB9OwojIDEzNDYg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2Fn aW5nQy5oIgogIGNsYXNzIFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3k6IHB1YmxpYyB2aXJ0 dWFsIENPUkJBOjpQb2xpY3kKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUmVsYXRpdmVSZXF1 ZXN0VGltZW91dFBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZWxhdGl2ZVJlcXVl c3RUaW1lb3V0UG9saWN5X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgUmVsYXRpdmVSZXF1 ZXN0VGltZW91dFBvbGljeV9wdHIgX2R1cGxpY2F0ZSAoUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBv bGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0 ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVsYXRpdmVS ZXF1ZXN0VGltZW91dFBvbGljeV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJB OjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg KCkKICAgICAgKTsKICAgIHN0YXRpYyBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0ciBf bmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0 UG9saWN5X3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBUaW1lQmFzZTo6VGltZVQgcmVsYXRp dmVfZXhwaXJ5ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAg ICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2 aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAg IHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25z dDsKCiAgcHJvdGVjdGVkOgogICAgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeSAoKTsKCiAg ICB2aXJ0dWFsIH5SZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5ICh2b2lkKTsKICBwcml2YXRl OgogICAgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeSAoY29uc3QgUmVsYXRpdmVSZXF1ZXN0 VGltZW91dFBvbGljeSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBSZWxhdGl2ZVJlcXVl c3RUaW1lb3V0UG9saWN5ICYpOwogIH07CiMgMTM5OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgZXh0ZXJuIGNvbnN0IENP UkJBOjpVTG9uZyBSRUxBVElWRV9SVF9USU1FT1VUX1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3Mg UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5OwogIHR5cGVkZWYgUmVsYXRpdmVSb3VuZHRy aXBUaW1lb3V0UG9saWN5ICpSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyOwoKCgoK CgoKICBjbGFzcyBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfdmFyIDogcHVibGljIFRB T19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xp Y3lfdmFyICh2b2lkKTsKICAgIFJlbGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV92YXIgKFJl bGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgUmVs YXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X3ZhciAoY29uc3QgUmVsYXRpdmVSb3VuZHRyaXBU aW1lb3V0UG9saWN5X3ZhciAmKTsKICAgIH5SZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lf dmFyICh2b2lkKTsKCiAgICBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfdmFyICZvcGVy YXRvcj0gKFJlbGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9wdHIpOwogICAgUmVsYXRpdmVS b3VuZHRyaXBUaW1lb3V0UG9saWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBSZWxhdGl2ZVJvdW5k dHJpcFRpbWVvdXRQb2xpY3lfdmFyICYpOwogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9s aWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBSZWxh dGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFJl bGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9wdHIgJigpOwoKICAgIFJlbGF0aXZlUm91bmR0 cmlwVGltZW91dFBvbGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUmVsYXRpdmVSb3VuZHRy aXBUaW1lb3V0UG9saWN5X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgUmVsYXRpdmVSb3VuZHRyaXBU aW1lb3V0UG9saWN5X3B0ciAmb3V0ICh2b2lkKTsKICAgIFJlbGF0aXZlUm91bmR0cmlwVGltZW91 dFBvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9s aWN5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFJlbGF0aXZlUm91bmR0cmlw VGltZW91dFBvbGljeV9wdHIgZHVwbGljYXRlIChSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xp Y3lfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFJlbGF0aXZlUm91bmR0cmlwVGltZW91 dFBvbGljeV9wdHIpOwogICAgc3RhdGljIFJlbGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9w dHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lf cHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBz dGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFJl bGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9wdHIgcHRyXzsKCiAgICBSZWxhdGl2ZVJvdW5k dHJpcFRpbWVvdXRQb2xpY3lfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBSZWxh dGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNl X3ZhciAmcmhzKTsKICB9OwojIDE0NTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJlbGF0aXZlUm91bmR0cmlw VGltZW91dFBvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1l b3V0UG9saWN5X291dCAoUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X3B0ciAmKTsKICAg IFJlbGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9vdXQgKFJlbGF0aXZlUm91bmR0cmlwVGlt ZW91dFBvbGljeV92YXIgJik7CiAgICBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfb3V0 IChjb25zdCBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfb3V0ICYpOwogICAgUmVsYXRp dmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZWxhdGl2ZVJv dW5kdHJpcFRpbWVvdXRQb2xpY3lfb3V0ICYpOwogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0 UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xp Y3lfdmFyICYpOwogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X291dCAmb3BlcmF0 b3I9IChSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyKTsKICAgIG9wZXJhdG9yIFJl bGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9wdHIgJigpOwogICAgUmVsYXRpdmVSb3VuZHRy aXBUaW1lb3V0UG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFJlbGF0aXZlUm91bmR0cmlwVGlt ZW91dFBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBSZWxhdGl2 ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyICZwdHJfOwogIH07CiMgMTQ4MSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAg Y2xhc3MgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5OiBwdWJsaWMgdmlydHVhbCBDT1JC QTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIFJlbGF0aXZlUm91bmR0cmlwVGlt ZW91dFBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZWxhdGl2ZVJvdW5kdHJpcFRp bWVvdXRQb2xpY3lfdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBSZWxhdGl2ZVJvdW5kdHJp cFRpbWVvdXRQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKFJlbGF0aXZlUm91bmR0cmlwVGltZW91dFBv bGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lf cHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBSZWxhdGl2 ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBD T1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t ZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5 X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChSZWxhdGl2ZVJvdW5kdHJp cFRpbWVvdXRQb2xpY3lfcHRyKTA7CiAgICAgIH0KCiAgICB2aXJ0dWFsIFRpbWVCYXNlOjpUaW1l VCByZWxhdGl2ZV9leHBpcnkgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu dCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsK CgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlw ZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZv aWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xp Y3kgKCk7CgogICAgdmlydHVhbCB+UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5ICh2b2lk KTsKICBwcml2YXRlOgogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5IChjb25zdCBS ZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29u c3QgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5ICYpOwogIH07CiMgMTUzNCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgi CiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBST1VUSU5HX1BPTElDWV9UWVBFOwoKICBzdHJ1 Y3QgUm91dGluZ1R5cGVSYW5nZTsKICBjbGFzcyBSb3V0aW5nVHlwZVJhbmdlX3ZhcjsKCiAgc3Ry dWN0IFJvdXRpbmdUeXBlUmFuZ2UKICB7CgoKICAgIHR5cGVkZWYgUm91dGluZ1R5cGVSYW5nZV92 YXIgX3Zhcl90eXBlOwoKCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lk Kik7CgogICAgTWVzc2FnaW5nOjpSb3V0aW5nVHlwZSBtaW47CiAgICBNZXNzYWdpbmc6OlJvdXRp bmdUeXBlIG1heDsKICB9OwoKICBjbGFzcyBSb3V0aW5nVHlwZVJhbmdlX3ZhcgogIHsKICBwdWJs aWM6CiAgICBSb3V0aW5nVHlwZVJhbmdlX3ZhciAodm9pZCk7CiAgICBSb3V0aW5nVHlwZVJhbmdl X3ZhciAoUm91dGluZ1R5cGVSYW5nZSAqKTsKICAgIFJvdXRpbmdUeXBlUmFuZ2VfdmFyIChjb25z dCBSb3V0aW5nVHlwZVJhbmdlX3ZhciAmKTsKICAgIFJvdXRpbmdUeXBlUmFuZ2VfdmFyIChjb25z dCBSb3V0aW5nVHlwZVJhbmdlICYpOwogICAgflJvdXRpbmdUeXBlUmFuZ2VfdmFyICh2b2lkKTsK CiAgICBSb3V0aW5nVHlwZVJhbmdlX3ZhciAmb3BlcmF0b3I9IChSb3V0aW5nVHlwZVJhbmdlICop OwogICAgUm91dGluZ1R5cGVSYW5nZV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUm91dGluZ1R5cGVS YW5nZV92YXIgJik7CiAgICBSb3V0aW5nVHlwZVJhbmdlX3ZhciAmb3BlcmF0b3I9IChjb25zdCBS b3V0aW5nVHlwZVJhbmdlICYpOwogICAgUm91dGluZ1R5cGVSYW5nZSAqb3BlcmF0b3ItPiAodm9p ZCk7CiAgICBjb25zdCBSb3V0aW5nVHlwZVJhbmdlICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsK CiAgICBvcGVyYXRvciBjb25zdCBSb3V0aW5nVHlwZVJhbmdlICYoKSBjb25zdDsKICAgIG9wZXJh dG9yIFJvdXRpbmdUeXBlUmFuZ2UgJigpOwogICAgb3BlcmF0b3IgUm91dGluZ1R5cGVSYW5nZSAm KCkgY29uc3Q7CgoKICAgIGNvbnN0IFJvdXRpbmdUeXBlUmFuZ2UgJmluICh2b2lkKSBjb25zdDsK ICAgIFJvdXRpbmdUeXBlUmFuZ2UgJmlub3V0ICh2b2lkKTsKICAgIFJvdXRpbmdUeXBlUmFuZ2Ug Jm91dCAodm9pZCk7CiAgICBSb3V0aW5nVHlwZVJhbmdlIF9yZXRuICh2b2lkKTsKICAgIFJvdXRp bmdUeXBlUmFuZ2UgKnB0ciAodm9pZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBSb3V0aW5nVHlw ZVJhbmdlICpwdHJfOwogIH07CgogIHR5cGVkZWYgUm91dGluZ1R5cGVSYW5nZSAmUm91dGluZ1R5 cGVSYW5nZV9vdXQ7CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Sb3V0aW5nVHlw ZVJhbmdlOwoKCgoKCiAgY2xhc3MgUm91dGluZ1BvbGljeTsKICB0eXBlZGVmIFJvdXRpbmdQb2xp Y3kgKlJvdXRpbmdQb2xpY3lfcHRyOwoKCgoKCgoKICBjbGFzcyBSb3V0aW5nUG9saWN5X3ZhciA6 IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgUm91dGluZ1BvbGljeV92YXIg KHZvaWQpOwogICAgUm91dGluZ1BvbGljeV92YXIgKFJvdXRpbmdQb2xpY3lfcHRyIHApIDogcHRy XyAocCkge30KICAgIFJvdXRpbmdQb2xpY3lfdmFyIChjb25zdCBSb3V0aW5nUG9saWN5X3ZhciAm KTsKICAgIH5Sb3V0aW5nUG9saWN5X3ZhciAodm9pZCk7CgogICAgUm91dGluZ1BvbGljeV92YXIg Jm9wZXJhdG9yPSAoUm91dGluZ1BvbGljeV9wdHIpOwogICAgUm91dGluZ1BvbGljeV92YXIgJm9w ZXJhdG9yPSAoY29uc3QgUm91dGluZ1BvbGljeV92YXIgJik7CiAgICBSb3V0aW5nUG9saWN5X3B0 ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBSb3V0aW5nUG9s aWN5X3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBSb3V0aW5nUG9saWN5X3B0ciAmKCk7Cgog ICAgUm91dGluZ1BvbGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUm91dGluZ1BvbGljeV9w dHIgJmlub3V0ICh2b2lkKTsKICAgIFJvdXRpbmdQb2xpY3lfcHRyICZvdXQgKHZvaWQpOwogICAg Um91dGluZ1BvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgUm91dGluZ1BvbGljeV9wdHIgcHRy ICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBSb3V0aW5nUG9saWN5X3B0ciBkdXBsaWNhdGUg KFJvdXRpbmdQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFJvdXRpbmdQb2xp Y3lfcHRyKTsKICAgIHN0YXRpYyBSb3V0aW5nUG9saWN5X3B0ciBuaWwgKHZvaWQpOwogICAgc3Rh dGljIFJvdXRpbmdQb2xpY3lfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52 aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsK CiAgcHJpdmF0ZToKICAgIFJvdXRpbmdQb2xpY3lfcHRyIHB0cl87CgogICAgUm91dGluZ1BvbGlj eV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIFJvdXRpbmdQb2xpY3lfdmFyICZv cGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDE2NDIgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgog IGNsYXNzIFJvdXRpbmdQb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIFJvdXRpbmdQb2xpY3lf b3V0IChSb3V0aW5nUG9saWN5X3B0ciAmKTsKICAgIFJvdXRpbmdQb2xpY3lfb3V0IChSb3V0aW5n UG9saWN5X3ZhciAmKTsKICAgIFJvdXRpbmdQb2xpY3lfb3V0IChjb25zdCBSb3V0aW5nUG9saWN5 X291dCAmKTsKICAgIFJvdXRpbmdQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFJvdXRpbmdQ b2xpY3lfb3V0ICYpOwogICAgUm91dGluZ1BvbGljeV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUm91 dGluZ1BvbGljeV92YXIgJik7CiAgICBSb3V0aW5nUG9saWN5X291dCAmb3BlcmF0b3I9IChSb3V0 aW5nUG9saWN5X3B0cik7CiAgICBvcGVyYXRvciBSb3V0aW5nUG9saWN5X3B0ciAmKCk7CiAgICBS b3V0aW5nUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFJvdXRpbmdQb2xpY3lfcHRyIG9wZXJh dG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgUm91dGluZ1BvbGljeV9wdHIgJnB0cl87CiAg fTsKIyAxNjY2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBSb3V0aW5nUG9saWN5OiBwdWJsaWMgdmlydHVhbCBD T1JCQTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIFJvdXRpbmdQb2xpY3lfcHRy IF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgUm91dGluZ1BvbGljeV92YXIgX3Zhcl90eXBlOwoKCgog ICAgc3RhdGljIFJvdXRpbmdQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKFJvdXRpbmdQb2xpY3lfcHRy IG9iaik7CiAgICBzdGF0aWMgUm91dGluZ1BvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09S QkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu dCAoKQogICAgICApOwogICAgc3RhdGljIFJvdXRpbmdQb2xpY3lfcHRyIF91bmNoZWNrZWRfbmFy cm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19k ZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUm91dGluZ1BvbGljeV9w dHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoUm91dGluZ1BvbGljeV9wdHIp MDsKICAgICAgfQoKICAgIHZpcnR1YWwgTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlIHJvdXRp bmdfcmFuZ2UgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg ICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZp cnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAg dmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0 OwoKICBwcm90ZWN0ZWQ6CiAgICBSb3V0aW5nUG9saWN5ICgpOwoKICAgIHZpcnR1YWwgflJvdXRp bmdQb2xpY3kgKHZvaWQpOwogIHByaXZhdGU6CiAgICBSb3V0aW5nUG9saWN5IChjb25zdCBSb3V0 aW5nUG9saWN5ICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFJvdXRpbmdQb2xpY3kgJik7 CiAgfTsKIyAxNzE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL01lc3NhZ2luZ0MuaCIKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIE1BWF9IT1BT X1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3MgTWF4SG9wc1BvbGljeTsKICB0eXBlZGVmIE1heEhv cHNQb2xpY3kgKk1heEhvcHNQb2xpY3lfcHRyOwoKCgoKCgoKICBjbGFzcyBNYXhIb3BzUG9saWN5 X3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgTWF4SG9wc1BvbGlj eV92YXIgKHZvaWQpOwogICAgTWF4SG9wc1BvbGljeV92YXIgKE1heEhvcHNQb2xpY3lfcHRyIHAp IDogcHRyXyAocCkge30KICAgIE1heEhvcHNQb2xpY3lfdmFyIChjb25zdCBNYXhIb3BzUG9saWN5 X3ZhciAmKTsKICAgIH5NYXhIb3BzUG9saWN5X3ZhciAodm9pZCk7CgogICAgTWF4SG9wc1BvbGlj eV92YXIgJm9wZXJhdG9yPSAoTWF4SG9wc1BvbGljeV9wdHIpOwogICAgTWF4SG9wc1BvbGljeV92 YXIgJm9wZXJhdG9yPSAoY29uc3QgTWF4SG9wc1BvbGljeV92YXIgJik7CiAgICBNYXhIb3BzUG9s aWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBNYXhI b3BzUG9saWN5X3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBNYXhIb3BzUG9saWN5X3B0ciAm KCk7CgogICAgTWF4SG9wc1BvbGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgTWF4SG9wc1Bv bGljeV9wdHIgJmlub3V0ICh2b2lkKTsKICAgIE1heEhvcHNQb2xpY3lfcHRyICZvdXQgKHZvaWQp OwogICAgTWF4SG9wc1BvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgTWF4SG9wc1BvbGljeV9w dHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBNYXhIb3BzUG9saWN5X3B0ciBkdXBs aWNhdGUgKE1heEhvcHNQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKE1heEhv cHNQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyBNYXhIb3BzUG9saWN5X3B0ciBuaWwgKHZvaWQpOwog ICAgc3RhdGljIE1heEhvcHNQb2xpY3lfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JC QTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9p ZCAqKTsKCiAgcHJpdmF0ZToKICAgIE1heEhvcHNQb2xpY3lfcHRyIHB0cl87CgogICAgTWF4SG9w c1BvbGljeV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIE1heEhvcHNQb2xpY3lf dmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDE3NzcgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5n Qy5oIgogIGNsYXNzIE1heEhvcHNQb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIE1heEhvcHNQ b2xpY3lfb3V0IChNYXhIb3BzUG9saWN5X3B0ciAmKTsKICAgIE1heEhvcHNQb2xpY3lfb3V0IChN YXhIb3BzUG9saWN5X3ZhciAmKTsKICAgIE1heEhvcHNQb2xpY3lfb3V0IChjb25zdCBNYXhIb3Bz UG9saWN5X291dCAmKTsKICAgIE1heEhvcHNQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IE1h eEhvcHNQb2xpY3lfb3V0ICYpOwogICAgTWF4SG9wc1BvbGljeV9vdXQgJm9wZXJhdG9yPSAoY29u c3QgTWF4SG9wc1BvbGljeV92YXIgJik7CiAgICBNYXhIb3BzUG9saWN5X291dCAmb3BlcmF0b3I9 IChNYXhIb3BzUG9saWN5X3B0cik7CiAgICBvcGVyYXRvciBNYXhIb3BzUG9saWN5X3B0ciAmKCk7 CiAgICBNYXhIb3BzUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIE1heEhvcHNQb2xpY3lfcHRy IG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgTWF4SG9wc1BvbGljeV9wdHIgJnB0 cl87CiAgfTsKIyAxODAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBNYXhIb3BzUG9saWN5OiBwdWJsaWMgdmly dHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIE1heEhvcHNQb2xp Y3lfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgTWF4SG9wc1BvbGljeV92YXIgX3Zhcl90eXBl OwoKCgogICAgc3RhdGljIE1heEhvcHNQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKE1heEhvcHNQb2xp Y3lfcHRyIG9iaik7CiAgICBzdGF0aWMgTWF4SG9wc1BvbGljeV9wdHIgX25hcnJvdyAoCiAgICAg ICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZp cm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIE1heEhvcHNQb2xpY3lfcHRyIF91bmNoZWNr ZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgTWF4SG9wc1Bv bGljeV9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoTWF4SG9wc1BvbGlj eV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgQ09SQkE6OlVTaG9ydCBtYXhfaG9wcyAoCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhy b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkICpf dGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0 IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3Rl ZDoKICAgIE1heEhvcHNQb2xpY3kgKCk7CgogICAgdmlydHVhbCB+TWF4SG9wc1BvbGljeSAodm9p ZCk7CiAgcHJpdmF0ZToKICAgIE1heEhvcHNQb2xpY3kgKGNvbnN0IE1heEhvcHNQb2xpY3kgJik7 CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgTWF4SG9wc1BvbGljeSAmKTsKICB9OwojIDE4NTQg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2Fn aW5nQy5oIgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgUVVFVUVfT1JERVJfUE9MSUNZX1RZ UEU7CgoKCgoKICBjbGFzcyBRdWV1ZU9yZGVyUG9saWN5OwogIHR5cGVkZWYgUXVldWVPcmRlclBv bGljeSAqUXVldWVPcmRlclBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIFF1ZXVlT3JkZXJQb2xp Y3lfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBRdWV1ZU9yZGVy UG9saWN5X3ZhciAodm9pZCk7CiAgICBRdWV1ZU9yZGVyUG9saWN5X3ZhciAoUXVldWVPcmRlclBv bGljeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgUXVldWVPcmRlclBvbGljeV92YXIgKGNvbnN0 IFF1ZXVlT3JkZXJQb2xpY3lfdmFyICYpOwogICAgflF1ZXVlT3JkZXJQb2xpY3lfdmFyICh2b2lk KTsKCiAgICBRdWV1ZU9yZGVyUG9saWN5X3ZhciAmb3BlcmF0b3I9IChRdWV1ZU9yZGVyUG9saWN5 X3B0cik7CiAgICBRdWV1ZU9yZGVyUG9saWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBRdWV1ZU9y ZGVyUG9saWN5X3ZhciAmKTsKICAgIFF1ZXVlT3JkZXJQb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZv aWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFF1ZXVlT3JkZXJQb2xpY3lfcHRyICYoKSBj b25zdDsKICAgIG9wZXJhdG9yIFF1ZXVlT3JkZXJQb2xpY3lfcHRyICYoKTsKCiAgICBRdWV1ZU9y ZGVyUG9saWN5X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBRdWV1ZU9yZGVyUG9saWN5X3B0ciAm aW5vdXQgKHZvaWQpOwogICAgUXVldWVPcmRlclBvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBR dWV1ZU9yZGVyUG9saWN5X3B0ciBfcmV0biAodm9pZCk7CiAgICBRdWV1ZU9yZGVyUG9saWN5X3B0 ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFF1ZXVlT3JkZXJQb2xpY3lfcHRyIGR1 cGxpY2F0ZSAoUXVldWVPcmRlclBvbGljeV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAo UXVldWVPcmRlclBvbGljeV9wdHIpOwogICAgc3RhdGljIFF1ZXVlT3JkZXJQb2xpY3lfcHRyIG5p bCAodm9pZCk7CiAgICBzdGF0aWMgUXVldWVPcmRlclBvbGljeV9wdHIgbmFycm93IChDT1JCQTo6 T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0 ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgUXVldWVPcmRlclBvbGljeV9wdHIg cHRyXzsKCiAgICBRdWV1ZU9yZGVyUG9saWN5X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMp OwogICAgUXVldWVPcmRlclBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFy ICZyaHMpOwogIH07CiMgMTkxMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUXVldWVPcmRlclBvbGljeV9vdXQK ICB7CiAgcHVibGljOgogICAgUXVldWVPcmRlclBvbGljeV9vdXQgKFF1ZXVlT3JkZXJQb2xpY3lf cHRyICYpOwogICAgUXVldWVPcmRlclBvbGljeV9vdXQgKFF1ZXVlT3JkZXJQb2xpY3lfdmFyICYp OwogICAgUXVldWVPcmRlclBvbGljeV9vdXQgKGNvbnN0IFF1ZXVlT3JkZXJQb2xpY3lfb3V0ICYp OwogICAgUXVldWVPcmRlclBvbGljeV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUXVldWVPcmRlclBv bGljeV9vdXQgJik7CiAgICBRdWV1ZU9yZGVyUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBR dWV1ZU9yZGVyUG9saWN5X3ZhciAmKTsKICAgIFF1ZXVlT3JkZXJQb2xpY3lfb3V0ICZvcGVyYXRv cj0gKFF1ZXVlT3JkZXJQb2xpY3lfcHRyKTsKICAgIG9wZXJhdG9yIFF1ZXVlT3JkZXJQb2xpY3lf cHRyICYoKTsKICAgIFF1ZXVlT3JkZXJQb2xpY3lfcHRyICZwdHIgKHZvaWQpOwogICAgUXVldWVP cmRlclBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBRdWV1ZU9y ZGVyUG9saWN5X3B0ciAmcHRyXzsKICB9OwojIDE5MzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFF1ZXVlT3Jk ZXJQb2xpY3k6IHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpQb2xpY3kKICB7CiAgcHVibGljOgoKICAg IHR5cGVkZWYgUXVldWVPcmRlclBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBRdWV1 ZU9yZGVyUG9saWN5X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgUXVldWVPcmRlclBvbGlj eV9wdHIgX2R1cGxpY2F0ZSAoUXVldWVPcmRlclBvbGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBR dWV1ZU9yZGVyUG9saWN5X3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBv YmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAg ICBzdGF0aWMgUXVldWVPcmRlclBvbGljeV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAg IENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv bm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBRdWV1ZU9yZGVyUG9saWN5X3B0ciBfbmlsICh2 b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChRdWV1ZU9yZGVyUG9saWN5X3B0cikwOwogICAg ICB9CgogICAgdmlydHVhbCBNZXNzYWdpbmc6Ok9yZGVyaW5nIGFsbG93ZWRfb3JkZXJzICgKICAg ICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg PQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJv dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90 YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3Qg Y2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVk OgogICAgUXVldWVPcmRlclBvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5RdWV1ZU9yZGVyUG9saWN5 ICh2b2lkKTsKICBwcml2YXRlOgogICAgUXVldWVPcmRlclBvbGljeSAoY29uc3QgUXVldWVPcmRl clBvbGljeSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBRdWV1ZU9yZGVyUG9saWN5ICYp OwogIH07CgoKCgoKCiAgc3RydWN0IFBvbGljeVZhbHVlOwogIGNsYXNzIFBvbGljeVZhbHVlX3Zh cjsKCiAgc3RydWN0IFBvbGljeVZhbHVlCiAgewoKCiAgICB0eXBlZGVmIFBvbGljeVZhbHVlX3Zh ciBfdmFyX3R5cGU7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQq KTsKCiAgICBDT1JCQTo6UG9saWN5VHlwZSBwdHlwZTsKCgoKCiAgICBjbGFzcyBfdGFvX3NlcV9P Y3RldDsKICAgIGNsYXNzIF90YW9fc2VxX09jdGV0X3ZhcjsKCgoKCgogICAgY2xhc3MgX3Rhb19z ZXFfT2N0ZXQgOiBwdWJsaWMKCiAgICAgIFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9j dGV0PgoKCgogICAgewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9PY3RldCAodm9pZCk7CiAg ICAgIF90YW9fc2VxX09jdGV0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfT2N0 ZXQgKAogICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0 aCwKICAgICAgICBDT1JCQTo6T2N0ZXQgKmJ1ZmZlciwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiBy ZWxlYXNlID0gMAogICAgICApOwogICAgICBfdGFvX3NlcV9PY3RldCAoY29uc3QgX3Rhb19zZXFf T2N0ZXQgJik7CiAgICAgIH5fdGFvX3NlcV9PY3RldCAodm9pZCk7CiAgICAgIHN0YXRpYyB2b2lk IF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgICB0eXBlZGVmIF90YW9fc2VxX09j dGV0X3ZhciBfdmFyX3R5cGU7CgoKCgogICAgICBfdGFvX3NlcV9PY3RldCAoCiAgICAgICAgICBD T1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sqIG1i CiAgICAgICAgKQogICAgICAgIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+ IChsZW5ndGgsIG1iKSB7fQoKCiAgICB9OwoKCgoKICAgIHR5cGVkZWYgX3Rhb19zZXFfT2N0ZXQg X3B2YWx1ZV9zZXE7CgoKICAgICAgICAgIF90YW9fc2VxX09jdGV0IHB2YWx1ZTsKICB9OwoKICBj bGFzcyBQb2xpY3lWYWx1ZV92YXIKICB7CiAgcHVibGljOgogICAgUG9saWN5VmFsdWVfdmFyICh2 b2lkKTsKICAgIFBvbGljeVZhbHVlX3ZhciAoUG9saWN5VmFsdWUgKik7CiAgICBQb2xpY3lWYWx1 ZV92YXIgKGNvbnN0IFBvbGljeVZhbHVlX3ZhciAmKTsKICAgIH5Qb2xpY3lWYWx1ZV92YXIgKHZv aWQpOwoKICAgIFBvbGljeVZhbHVlX3ZhciAmb3BlcmF0b3I9IChQb2xpY3lWYWx1ZSAqKTsKICAg IFBvbGljeVZhbHVlX3ZhciAmb3BlcmF0b3I9IChjb25zdCBQb2xpY3lWYWx1ZV92YXIgJik7CiAg ICBQb2xpY3lWYWx1ZSAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBQb2xpY3lWYWx1ZSAq b3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgUG9saWN5VmFsdWUg JigpIGNvbnN0OwogICAgb3BlcmF0b3IgUG9saWN5VmFsdWUgJigpOwogICAgb3BlcmF0b3IgUG9s aWN5VmFsdWUgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgUG9saWN5VmFsdWUgKiYoKTsKCgogICAg Y29uc3QgUG9saWN5VmFsdWUgJmluICh2b2lkKSBjb25zdDsKICAgIFBvbGljeVZhbHVlICZpbm91 dCAodm9pZCk7CiAgICBQb2xpY3lWYWx1ZSAqJm91dCAodm9pZCk7CiAgICBQb2xpY3lWYWx1ZSAq X3JldG4gKHZvaWQpOwogICAgUG9saWN5VmFsdWUgKnB0ciAodm9pZCkgY29uc3Q7CgogIHByaXZh dGU6CiAgICBQb2xpY3lWYWx1ZSAqcHRyXzsKICB9OwoKICBjbGFzcyBQb2xpY3lWYWx1ZV9vdXQK ICB7CiAgcHVibGljOgogICAgUG9saWN5VmFsdWVfb3V0IChQb2xpY3lWYWx1ZSAqJik7CiAgICBQ b2xpY3lWYWx1ZV9vdXQgKFBvbGljeVZhbHVlX3ZhciAmKTsKICAgIFBvbGljeVZhbHVlX291dCAo Y29uc3QgUG9saWN5VmFsdWVfb3V0ICYpOwogICAgUG9saWN5VmFsdWVfb3V0ICZvcGVyYXRvcj0g KGNvbnN0IFBvbGljeVZhbHVlX291dCAmKTsKICAgIFBvbGljeVZhbHVlX291dCAmb3BlcmF0b3I9 IChQb2xpY3lWYWx1ZSAqKTsKICAgIG9wZXJhdG9yIFBvbGljeVZhbHVlIComKCk7CiAgICBQb2xp Y3lWYWx1ZSAqJnB0ciAodm9pZCk7CiAgICBQb2xpY3lWYWx1ZSAqb3BlcmF0b3ItPiAodm9pZCk7 CgogIHByaXZhdGU6CiAgICBQb2xpY3lWYWx1ZSAqJnB0cl87CgogICAgdm9pZCBvcGVyYXRvcj0g KGNvbnN0IFBvbGljeVZhbHVlX3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6OlR5cGVDb2Rl X3B0ciBfdGNfUG9saWN5VmFsdWU7CgoKCgoKCgogICAgY2xhc3MgX1RBT19VbmJvdW5kZWRfU2Vx dWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxIDogcHVibGljIFRBT19VbmJvdW5kZWRfQmFz ZV9TZXF1ZW5jZQogICAgewogICAgcHVibGljOgoKCiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVl bmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcSAodm9pZCk7CiAgICAgIF9UQU9fVW5ib3VuZGVk X1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcSAoQ09SQkE6OlVMb25nIG1heGltdW0p OwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXEg KENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAg ICAgUG9saWN5VmFsdWUgKmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAp OwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXEg KGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcSAm cmhzKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVl U2VxICZvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Q b2xpY3lWYWx1ZVNlcSAmcmhzKTsKICAgICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfU2VxdWVu Y2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxICh2b2lkKTsKCiAgICAgIFBvbGljeVZhbHVlICZv cGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSk7CiAgICAgIGNvbnN0IFBvbGljeVZhbHVlICZvcGVy YXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3Q7CgogICAgICBzdGF0aWMgUG9saWN5VmFsdWUg KmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSk7CiAgICAgIHN0YXRpYyB2b2lkIGZyZWVidWYg KFBvbGljeVZhbHVlICpidWZmZXIpOwogICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZl ciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9i dWZmZXIgKHZvaWQpOwoKCiAgICAgIFBvbGljeVZhbHVlICpnZXRfYnVmZmVyIChDT1JCQTo6Qm9v bGVhbiBvcnBoYW4gPSAwKTsKICAgICAgY29uc3QgUG9saWN5VmFsdWUgKmdldF9idWZmZXIgKHZv aWQpIGNvbnN0OwogICAgICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAg Q09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBQb2xpY3lWYWx1ZSAqZGF0YSwKICAgICAgICBD T1JCQTo6Qm9vbGVhbiByZWxlYXNlKTsKICAgIH07CiMgMjE1MCAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUG9s aWN5VmFsdWVTZXE7CiAgY2xhc3MgUG9saWN5VmFsdWVTZXFfdmFyOwoKCgoKCiAgY2xhc3MgUG9s aWN5VmFsdWVTZXEgOiBwdWJsaWMKCiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdp bmdfUG9saWN5VmFsdWVTZXEKCgoKICB7CiAgcHVibGljOgogICAgUG9saWN5VmFsdWVTZXEgKHZv aWQpOwogICAgUG9saWN5VmFsdWVTZXEgKENPUkJBOjpVTG9uZyBtYXgpOwogICAgUG9saWN5VmFs dWVTZXEgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro LAogICAgICBQb2xpY3lWYWx1ZSAqYnVmZmVyLAogICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNl ID0gMAogICAgKTsKICAgIFBvbGljeVZhbHVlU2VxIChjb25zdCBQb2xpY3lWYWx1ZVNlcSAmKTsK ICAgIH5Qb2xpY3lWYWx1ZVNlcSAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0 cnVjdG9yICh2b2lkKik7CgoKICAgIHR5cGVkZWYgUG9saWN5VmFsdWVTZXFfdmFyIF92YXJfdHlw ZTsKCgogIH07CiMgMjE5MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUG9saWN5VmFsdWVTZXFfdmFyCiAgewog IHB1YmxpYzoKICAgIFBvbGljeVZhbHVlU2VxX3ZhciAodm9pZCk7CiAgICBQb2xpY3lWYWx1ZVNl cV92YXIgKFBvbGljeVZhbHVlU2VxICopOwogICAgUG9saWN5VmFsdWVTZXFfdmFyIChjb25zdCBQ b2xpY3lWYWx1ZVNlcV92YXIgJik7CiAgICB+UG9saWN5VmFsdWVTZXFfdmFyICh2b2lkKTsKCiAg ICBQb2xpY3lWYWx1ZVNlcV92YXIgJm9wZXJhdG9yPSAoUG9saWN5VmFsdWVTZXEgKik7CiAgICBQ b2xpY3lWYWx1ZVNlcV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUG9saWN5VmFsdWVTZXFfdmFyICYp OwogICAgUG9saWN5VmFsdWVTZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgUG9saWN5 VmFsdWVTZXEgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFBv bGljeVZhbHVlU2VxICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFBvbGljeVZhbHVlU2VxICYoKTsK ICAgIG9wZXJhdG9yIFBvbGljeVZhbHVlU2VxICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFBvbGlj eVZhbHVlU2VxIComKCk7CgogICAgUG9saWN5VmFsdWUgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxv bmcgaW5kZXgpOwogICAgY29uc3QgUG9saWN5VmFsdWUgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxv bmcgaW5kZXgpIGNvbnN0OwoKCiAgICBjb25zdCBQb2xpY3lWYWx1ZVNlcSAmaW4gKHZvaWQpIGNv bnN0OwogICAgUG9saWN5VmFsdWVTZXEgJmlub3V0ICh2b2lkKTsKICAgIFBvbGljeVZhbHVlU2Vx IComb3V0ICh2b2lkKTsKICAgIFBvbGljeVZhbHVlU2VxICpfcmV0biAodm9pZCk7CiAgICBQb2xp Y3lWYWx1ZVNlcSAqcHRyICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIFBvbGljeVZhbHVl U2VxICpwdHJfOwogIH07CiMgMjIzMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUG9saWN5VmFsdWVTZXFfb3V0 CiAgewogIHB1YmxpYzoKICAgIFBvbGljeVZhbHVlU2VxX291dCAoUG9saWN5VmFsdWVTZXEgKiYp OwogICAgUG9saWN5VmFsdWVTZXFfb3V0IChQb2xpY3lWYWx1ZVNlcV92YXIgJik7CiAgICBQb2xp Y3lWYWx1ZVNlcV9vdXQgKGNvbnN0IFBvbGljeVZhbHVlU2VxX291dCAmKTsKICAgIFBvbGljeVZh bHVlU2VxX291dCAmb3BlcmF0b3I9IChjb25zdCBQb2xpY3lWYWx1ZVNlcV9vdXQgJik7CiAgICBQ b2xpY3lWYWx1ZVNlcV9vdXQgJm9wZXJhdG9yPSAoUG9saWN5VmFsdWVTZXEgKik7CiAgICBvcGVy YXRvciBQb2xpY3lWYWx1ZVNlcSAqJigpOwogICAgUG9saWN5VmFsdWVTZXEgKiZwdHIgKHZvaWQp OwogICAgUG9saWN5VmFsdWVTZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgUG9saWN5VmFsdWUg JiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpOwoKICBwcml2YXRlOgogICAgUG9saWN5 VmFsdWVTZXEgKiZwdHJfOwoKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBQb2xpY3lWYWx1ZVNl cV92YXIgJik7CiAgfTsKCgoKCiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1BvbGlj eVZhbHVlU2VxOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRBR19QT0xJQ0lFUzsKCiAg ZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBJTlZPQ0FUSU9OX1BPTElDSUVTOwoKCgoKICBjbGFz cyBFeGNlcHRpb25Ib2xkZXI7CiAgdHlwZWRlZiBFeGNlcHRpb25Ib2xkZXIgKkV4Y2VwdGlvbkhv bGRlcl9wdHI7CgoKCgogIGNsYXNzIEV4Y2VwdGlvbkhvbGRlcl92YXIKICB7CiAgcHVibGljOgog ICAgRXhjZXB0aW9uSG9sZGVyX3ZhciAodm9pZCk7CiAgICBFeGNlcHRpb25Ib2xkZXJfdmFyIChF eGNlcHRpb25Ib2xkZXIqKTsKICAgIEV4Y2VwdGlvbkhvbGRlcl92YXIgKGNvbnN0IEV4Y2VwdGlv bkhvbGRlciopOwogICAgRXhjZXB0aW9uSG9sZGVyX3ZhciAoY29uc3QgRXhjZXB0aW9uSG9sZGVy X3ZhciAmKTsKICAgIH5FeGNlcHRpb25Ib2xkZXJfdmFyICh2b2lkKTsKCiAgICBFeGNlcHRpb25I b2xkZXJfdmFyICZvcGVyYXRvcj0gKEV4Y2VwdGlvbkhvbGRlciopOwogICAgRXhjZXB0aW9uSG9s ZGVyX3ZhciAmb3BlcmF0b3I9IChjb25zdCBFeGNlcHRpb25Ib2xkZXJfdmFyICYpOwogICAgRXhj ZXB0aW9uSG9sZGVyKiBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25z dCBFeGNlcHRpb25Ib2xkZXIqICgpIGNvbnN0OwogICAgb3BlcmF0b3IgRXhjZXB0aW9uSG9sZGVy KiAoKTsKCiAgICBFeGNlcHRpb25Ib2xkZXIqIGluICh2b2lkKSBjb25zdDsKICAgIEV4Y2VwdGlv bkhvbGRlciogJmlub3V0ICh2b2lkKTsKICAgIEV4Y2VwdGlvbkhvbGRlciogJm91dCAodm9pZCk7 CiAgICBFeGNlcHRpb25Ib2xkZXIqIF9yZXRuICh2b2lkKTsKICAgIEV4Y2VwdGlvbkhvbGRlciog cHRyICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIEV4Y2VwdGlvbkhvbGRlciogcHRyXzsK ICB9OwojIDIzMDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIEV4Y2VwdGlvbkhvbGRlcl9vdXQKICB7CiAgcHVi bGljOgogICAgRXhjZXB0aW9uSG9sZGVyX291dCAoRXhjZXB0aW9uSG9sZGVyKiAmKTsKICAgIEV4 Y2VwdGlvbkhvbGRlcl9vdXQgKEV4Y2VwdGlvbkhvbGRlcl92YXIgJik7CiAgICBFeGNlcHRpb25I b2xkZXJfb3V0IChjb25zdCBFeGNlcHRpb25Ib2xkZXJfb3V0ICYpOwogICAgRXhjZXB0aW9uSG9s ZGVyX291dCAmb3BlcmF0b3I9IChjb25zdCBFeGNlcHRpb25Ib2xkZXJfb3V0ICYpOwogICAgRXhj ZXB0aW9uSG9sZGVyX291dCAmb3BlcmF0b3I9IChjb25zdCBFeGNlcHRpb25Ib2xkZXJfdmFyICYp OwogICAgRXhjZXB0aW9uSG9sZGVyX291dCAmb3BlcmF0b3I9IChFeGNlcHRpb25Ib2xkZXIqKTsK ICAgIG9wZXJhdG9yIEV4Y2VwdGlvbkhvbGRlciogJigpOwogICAgRXhjZXB0aW9uSG9sZGVyKiAm cHRyICh2b2lkKTsKICAgIEV4Y2VwdGlvbkhvbGRlciogb3BlcmF0b3ItPiAodm9pZCk7CgogIHBy aXZhdGU6CiAgICBFeGNlcHRpb25Ib2xkZXIqICZwdHJfOwogIH07CiMgMjMyNiAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAg Y2xhc3MgRXhjZXB0aW9uSG9sZGVyX2luaXQgOiBwdWJsaWMgQ09SQkFfVmFsdWVGYWN0b3J5QmFz ZQogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5FeGNlcHRpb25Ib2xkZXJfaW5pdCAoKTsKICAg IHZpcnR1YWwgY29uc3QgY2hhciogdGFvX3JlcG9zaXRvcnlfaWQgKHZvaWQpOwoKCgogIH07CgoK CgoKCgogIGNsYXNzIEV4Y2VwdGlvbkhvbGRlciA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX1ZhbHVl QmFzZQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBFeGNlcHRpb25Ib2xkZXIqIF9wdHJfdHlw ZTsKICAgIHR5cGVkZWYgRXhjZXB0aW9uSG9sZGVyX3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0YXRp YyBFeGNlcHRpb25Ib2xkZXIqIF9kb3duY2FzdCAoQ09SQkE6OlZhbHVlQmFzZSogKTsKCgoKICAg IHN0YXRpYyBDT1JCQTo6Qm9vbGVhbiBfdGFvX3VubWFyc2hhbCAoVEFPX0lucHV0Q0RSICYsIEV4 Y2VwdGlvbkhvbGRlciAqJik7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF90YW9fb2J2X3JlcG9z aXRvcnlfaWQgKCkgY29uc3Q7CiAgICBzdGF0aWMgY29uc3QgY2hhciogX3Rhb19vYnZfc3RhdGlj X3JlcG9zaXRvcnlfaWQgKCk7CiAgcHVibGljOgogICAgdmlydHVhbCB2b2lkIGlzX3N5c3RlbV9l eGNlcHRpb24gKENPUkJBOjpCb29sZWFuKSA9IDA7CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu IGlzX3N5c3RlbV9leGNlcHRpb24gKHZvaWQpIGNvbnN0ID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQg Ynl0ZV9vcmRlciAoQ09SQkE6OkJvb2xlYW4pID0gMDsKICAgIHZpcnR1YWwgQ09SQkE6OkJvb2xl YW4gYnl0ZV9vcmRlciAodm9pZCkgY29uc3QgPSAwOwoKCgoKCiAgICBjbGFzcyBfdGFvX3NlcV9P Y3RldDsKICAgIGNsYXNzIF90YW9fc2VxX09jdGV0X3ZhcjsKCgoKCgogICAgY2xhc3MgX3Rhb19z ZXFfT2N0ZXQgOiBwdWJsaWMKCiAgICAgIFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9j dGV0PgoKCgogICAgewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9PY3RldCAodm9pZCk7CiAg ICAgIF90YW9fc2VxX09jdGV0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfT2N0 ZXQgKAogICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0 aCwKICAgICAgICBDT1JCQTo6T2N0ZXQgKmJ1ZmZlciwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiBy ZWxlYXNlID0gMAogICAgICApOwogICAgICBfdGFvX3NlcV9PY3RldCAoY29uc3QgX3Rhb19zZXFf T2N0ZXQgJik7CiAgICAgIH5fdGFvX3NlcV9PY3RldCAodm9pZCk7CiAgICAgIHN0YXRpYyB2b2lk IF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgICB0eXBlZGVmIF90YW9fc2VxX09j dGV0X3ZhciBfdmFyX3R5cGU7CgoKCgogICAgICBfdGFvX3NlcV9PY3RldCAoCiAgICAgICAgICBD T1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sqIG1i CiAgICAgICAgKQogICAgICAgIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+ IChsZW5ndGgsIG1iKSB7fQoKCiAgICB9OwoKCgoKICAgIHR5cGVkZWYgX3Rhb19zZXFfT2N0ZXQg X21hcnNoYWxlZF9leGNlcHRpb25fc2VxOwoKCiAgICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyc2hh bGVkX2V4Y2VwdGlvbiAoY29uc3QgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXI6Ol90YW9fc2Vx X09jdGV0ICYpID0gMDsKICAgIHZpcnR1YWwgY29uc3QgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xk ZXI6Ol90YW9fc2VxX09jdGV0ICZtYXJzaGFsZWRfZXhjZXB0aW9uICh2b2lkKSBjb25zdCA9IDA7 CiAgICB2aXJ0dWFsIE1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyOjpfdGFvX3NlcV9PY3RldCAm bWFyc2hhbGVkX2V4Y2VwdGlvbiAodm9pZCkgPSAwOwoKCiAgcHJvdGVjdGVkOgogICAgRXhjZXB0 aW9uSG9sZGVyICgpOwogICAgdmlydHVhbCB+RXhjZXB0aW9uSG9sZGVyICgpOwoKCiAgICB2aXJ0 dWFsIHZvaWQgKl90YW9fb2J2X25hcnJvdyAocHRyX2FyaXRoX3QpOwogICAgdmlydHVhbCBDT1JC QTo6Qm9vbGVhbiBfdGFvX21hcnNoYWxfdiAoVEFPX091dHB1dENEUiAmKTsKICAgIHZpcnR1YWwg Q09SQkE6OkJvb2xlYW4gX3Rhb191bm1hcnNoYWxfdiAoVEFPX0lucHV0Q0RSICYpOwoKICBwcml2 YXRlOgogICAgRXhjZXB0aW9uSG9sZGVyIChjb25zdCBFeGNlcHRpb25Ib2xkZXIgJik7CiAgICB2 b2lkIG9wZXJhdG9yPSAoY29uc3QgRXhjZXB0aW9uSG9sZGVyICYpOwoKICBwcm90ZWN0ZWQ6CiAg ICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF90YW9fbWFyc2hhbF9fTWVzc2FnaW5nX0V4Y2VwdGlv bkhvbGRlciAoVEFPX091dHB1dENEUiAmKSA9IDA7CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu IF90YW9fdW5tYXJzaGFsX19NZXNzYWdpbmdfRXhjZXB0aW9uSG9sZGVyIChUQU9fSW5wdXRDRFIg JikgPSAwOwoKICB9OwoKCgoKCgoKICBjbGFzcyBSZXBseUhhbmRsZXI7CiAgdHlwZWRlZiBSZXBs eUhhbmRsZXIgKlJlcGx5SGFuZGxlcl9wdHI7CgoKCgoKCgogIGNsYXNzIFJlcGx5SGFuZGxlcl92 YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFJlcGx5SGFuZGxlcl92 YXIgKHZvaWQpOwogICAgUmVwbHlIYW5kbGVyX3ZhciAoUmVwbHlIYW5kbGVyX3B0ciBwKSA6IHB0 cl8gKHApIHt9CiAgICBSZXBseUhhbmRsZXJfdmFyIChjb25zdCBSZXBseUhhbmRsZXJfdmFyICYp OwogICAgflJlcGx5SGFuZGxlcl92YXIgKHZvaWQpOwoKICAgIFJlcGx5SGFuZGxlcl92YXIgJm9w ZXJhdG9yPSAoUmVwbHlIYW5kbGVyX3B0cik7CiAgICBSZXBseUhhbmRsZXJfdmFyICZvcGVyYXRv cj0gKGNvbnN0IFJlcGx5SGFuZGxlcl92YXIgJik7CiAgICBSZXBseUhhbmRsZXJfcHRyIG9wZXJh dG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFJlcGx5SGFuZGxlcl9wdHIg JigpIGNvbnN0OwogICAgb3BlcmF0b3IgUmVwbHlIYW5kbGVyX3B0ciAmKCk7CgogICAgUmVwbHlI YW5kbGVyX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBSZXBseUhhbmRsZXJfcHRyICZpbm91dCAo dm9pZCk7CiAgICBSZXBseUhhbmRsZXJfcHRyICZvdXQgKHZvaWQpOwogICAgUmVwbHlIYW5kbGVy X3B0ciBfcmV0biAodm9pZCk7CiAgICBSZXBseUhhbmRsZXJfcHRyIHB0ciAodm9pZCkgY29uc3Q7 CgoKCiAgICBzdGF0aWMgUmVwbHlIYW5kbGVyX3B0ciBkdXBsaWNhdGUgKFJlcGx5SGFuZGxlcl9w dHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoUmVwbHlIYW5kbGVyX3B0cik7CiAgICBzdGF0 aWMgUmVwbHlIYW5kbGVyX3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFJlcGx5SGFuZGxlcl9w dHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0 YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgUmVw bHlIYW5kbGVyX3B0ciBwdHJfOwoKICAgIFJlcGx5SGFuZGxlcl92YXIgKGNvbnN0IFRBT19CYXNl X3ZhciAmcmhzKTsKICAgIFJlcGx5SGFuZGxlcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jh c2VfdmFyICZyaHMpOwogIH07CiMgMjQ5OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmVwbHlIYW5kbGVyX291 dAogIHsKICBwdWJsaWM6CiAgICBSZXBseUhhbmRsZXJfb3V0IChSZXBseUhhbmRsZXJfcHRyICYp OwogICAgUmVwbHlIYW5kbGVyX291dCAoUmVwbHlIYW5kbGVyX3ZhciAmKTsKICAgIFJlcGx5SGFu ZGxlcl9vdXQgKGNvbnN0IFJlcGx5SGFuZGxlcl9vdXQgJik7CiAgICBSZXBseUhhbmRsZXJfb3V0 ICZvcGVyYXRvcj0gKGNvbnN0IFJlcGx5SGFuZGxlcl9vdXQgJik7CiAgICBSZXBseUhhbmRsZXJf b3V0ICZvcGVyYXRvcj0gKGNvbnN0IFJlcGx5SGFuZGxlcl92YXIgJik7CiAgICBSZXBseUhhbmRs ZXJfb3V0ICZvcGVyYXRvcj0gKFJlcGx5SGFuZGxlcl9wdHIpOwogICAgb3BlcmF0b3IgUmVwbHlI YW5kbGVyX3B0ciAmKCk7CiAgICBSZXBseUhhbmRsZXJfcHRyICZwdHIgKHZvaWQpOwogICAgUmVw bHlIYW5kbGVyX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFJlcGx5SGFu ZGxlcl9wdHIgJnB0cl87CiAgfTsKIyAyNTIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBfVEFPX1JlcGx5SGFu ZGxlcl9Qcm94eV9JbXBsOwogIGNsYXNzIF9UQU9fUmVwbHlIYW5kbGVyX1JlbW90ZV9Qcm94eV9J bXBsOwogIGNsYXNzIF9UQU9fUmVwbHlIYW5kbGVyX1Byb3h5X0Jyb2tlcjsKICBjbGFzcyBfVEFP X1JlcGx5SGFuZGxlcl9SZW1vdGVfUHJveHlfQnJva2VyOwoKICBjbGFzcyBSZXBseUhhbmRsZXIg OiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6T2JqZWN0CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVm IFJlcGx5SGFuZGxlcl9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZXBseUhhbmRsZXJfdmFy IF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBSZXBseUhhbmRsZXJfcHRyIF9kdXBsaWNhdGUgKFJl cGx5SGFuZGxlcl9wdHIgb2JqKTsKICAgIHN0YXRpYyBSZXBseUhhbmRsZXJfcHRyIF9uYXJyb3cg KAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBSZXBseUhhbmRsZXJfcHRyIF91 bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVw bHlIYW5kbGVyX3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChSZXBseUhh bmRsZXJfcHRyKTA7CiAgICAgIH0KCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9y ICh2b2lkKik7CgogICAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfYSAoCiAgICAgICAgY29u c3QgQ09SQkE6OkNoYXIgKnR5cGVfaWQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly b25tZW50ICgpCiAgICAgICk7CiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2Ug KHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9y ZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIF9UQU9fUmVwbHlIYW5k bGVyX1Byb3h5X0Jyb2tlciAqdGhlX1RBT19SZXBseUhhbmRsZXJfUHJveHlfQnJva2VyXzsKCiAg cHJvdGVjdGVkOgogICAgUmVwbHlIYW5kbGVyIChpbnQgY29sbG9jYXRlZCA9IDApOwoKICAgIHBy b3RlY3RlZDoKCgogICAgICB2aXJ0dWFsIHZvaWQgTWVzc2FnaW5nX1JlcGx5SGFuZGxlcl9zZXR1 cF9jb2xsb2NhdGlvbiAoaW50IGNvbGxvY2F0ZWQpOwoKICAgICAgUmVwbHlIYW5kbGVyICgKICAg ICAgICBUQU9fU3R1YiAqb2JqcmVmLAogICAgICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9j YXRlZCA9IDAsCiAgICAgICAgVEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlICpzZXJ2YW50ID0gMAog ICAgICAgICk7CgogICAgICBmcmllbmQgY2xhc3MgX1RBT19SZXBseUhhbmRsZXJfUmVtb3RlX1By b3h5X0ltcGw7CiAgICAgIGZyaWVuZCBjbGFzcyBfVEFPX1JlcGx5SGFuZGxlcl9UaHJ1UE9BX1By b3h5X0ltcGw7CiAgICAgIGZyaWVuZCBjbGFzcyBfVEFPX1JlcGx5SGFuZGxlcl9EaXJlY3RfUHJv eHlfSW1wbDsKCiAgICB2aXJ0dWFsIH5SZXBseUhhbmRsZXIgKHZvaWQpOwogIHByaXZhdGU6CiAg ICBSZXBseUhhbmRsZXIgKGNvbnN0IFJlcGx5SGFuZGxlciAmKTsKICAgIHZvaWQgb3BlcmF0b3I9 IChjb25zdCBSZXBseUhhbmRsZXIgJik7CiAgfTsKIyAyNjAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBfVEFP X1JlcGx5SGFuZGxlcl9Qcm94eV9JbXBsIDogcHVibGljIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94 eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9UQU9fUmVwbHlIYW5kbGVyX1Byb3h5 X0ltcGwgKHZvaWQpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgIF9UQU9fUmVwbHlIYW5kbGVyX1By b3h5X0ltcGwgKHZvaWQpOwoKICB9OwojIDI2MTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgpjbGFzcyBfVEFPX1JlcGx5SGFu ZGxlcl9SZW1vdGVfUHJveHlfSW1wbCA6CiAgcHVibGljIHZpcnR1YWwgX1RBT19SZXBseUhhbmRs ZXJfUHJveHlfSW1wbCwKICBwdWJsaWMgdmlydHVhbCBUQU9fUmVtb3RlX09iamVjdF9Qcm94eV9J bXBsCnsKcHVibGljOgogIF9UQU9fUmVwbHlIYW5kbGVyX1JlbW90ZV9Qcm94eV9JbXBsICh2b2lk KTsKCiAgdmlydHVhbCB+X1RBT19SZXBseUhhbmRsZXJfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQp IHsgfQoKICB9OwojIDI2NDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgpjbGFzcyBfVEFPX1JlcGx5SGFuZGxlcl9Qcm94eV9C cm9rZXIKewpwdWJsaWM6CiAgdmlydHVhbCB+X1RBT19SZXBseUhhbmRsZXJfUHJveHlfQnJva2Vy ICh2b2lkKTsKICB2aXJ0dWFsIF9UQU9fUmVwbHlIYW5kbGVyX1Byb3h5X0ltcGwgJnNlbGVjdF9w cm94eSAoCiAgICBSZXBseUhhbmRsZXIgKm9iamVjdCwKICAgIENPUkJBX0Vudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0gVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg KCkKICApID0gMDsKCnByb3RlY3RlZDoKICBfVEFPX1JlcGx5SGFuZGxlcl9Qcm94eV9Ccm9rZXIg KHZvaWQpOwoKfTsKIyAyNjY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKY2xhc3MgX1RBT19SZXBseUhhbmRsZXJfUmVtb3Rl X1Byb3h5X0Jyb2tlciA6IHB1YmxpYyB2aXJ0dWFsIF9UQU9fUmVwbHlIYW5kbGVyX1Byb3h5X0Jy b2tlcgp7CnB1YmxpYzoKICBfVEFPX1JlcGx5SGFuZGxlcl9SZW1vdGVfUHJveHlfQnJva2VyICh2 b2lkKTsKCiAgdmlydHVhbCB+X1RBT19SZXBseUhhbmRsZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAo dm9pZCk7CgogIHZpcnR1YWwgX1RBT19SZXBseUhhbmRsZXJfUHJveHlfSW1wbCAmc2VsZWN0X3By b3h5ICgKICAgIFJlcGx5SGFuZGxlciAqb2JqZWN0LAogICAgQ09SQkFfRW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApOwoKcHJpdmF0ZToKICBfVEFPX1JlcGx5 SGFuZGxlcl9SZW1vdGVfUHJveHlfSW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgoKCgpwdWJsaWM6 CiAgc3RhdGljIF9UQU9fUmVwbHlIYW5kbGVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9f UmVwbHlIYW5kbGVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwp9OwojIDI2OTkgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5o IgpleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUmVwbHlIYW5kbGVyOwoKCgp9CgoKCgoK CmV4dGVybgpNZXNzYWdpbmc6Ol9UQU9fUmVwbHlIYW5kbGVyX1Byb3h5X0Jyb2tlciAqCigqTWVz c2FnaW5nX19UQU9fUmVwbHlIYW5kbGVyX1Byb3h5X0Jyb2tlcl9GYWN0b3J5X2Z1bmN0aW9uX3Bv aW50ZXIpICgKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iagogICk7CgoKCgoKbmFtZXNwYWNlIE9C Vl9NZXNzYWdpbmcKewoKCgoKCiAgY2xhc3MgRXhjZXB0aW9uSG9sZGVyIDogcHVibGljIHZpcnR1 YWwgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXIKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB2 b2lkIGlzX3N5c3RlbV9leGNlcHRpb24gKENPUkJBOjpCb29sZWFuKTsKICAgIHZpcnR1YWwgQ09S QkE6OkJvb2xlYW4gaXNfc3lzdGVtX2V4Y2VwdGlvbiAodm9pZCkgY29uc3Q7CgogICAgdmlydHVh bCB2b2lkIGJ5dGVfb3JkZXIgKENPUkJBOjpCb29sZWFuKTsKICAgIHZpcnR1YWwgQ09SQkE6OkJv b2xlYW4gYnl0ZV9vcmRlciAodm9pZCkgY29uc3Q7CgoKICAgIHR5cGVkZWYgX3Rhb19zZXFfT2N0 ZXQgX21hcnNoYWxlZF9leGNlcHRpb25fc2VxOwoKCiAgICAgICAgICB2aXJ0dWFsIHZvaWQgbWFy c2hhbGVkX2V4Y2VwdGlvbiAoY29uc3QgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXI6Ol90YW9f c2VxX09jdGV0ICYpOwogICAgdmlydHVhbCBjb25zdCBNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRl cjo6X3Rhb19zZXFfT2N0ZXQgJm1hcnNoYWxlZF9leGNlcHRpb24gKHZvaWQpIGNvbnN0OwogICAg dmlydHVhbCBNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlcjo6X3Rhb19zZXFfT2N0ZXQgJm1hcnNo YWxlZF9leGNlcHRpb24gKHZvaWQpOwoKCiAgcHJvdGVjdGVkOgogICAgdmlydHVhbCBDT1JCQTo6 Qm9vbGVhbiBfdGFvX21hcnNoYWxfX01lc3NhZ2luZ19FeGNlcHRpb25Ib2xkZXIgKFRBT19PdXRw dXRDRFIgJik7CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF90YW9fdW5tYXJzaGFsX19NZXNz YWdpbmdfRXhjZXB0aW9uSG9sZGVyIChUQU9fSW5wdXRDRFIgJik7CiAgICBDT1JCQTo6Qm9vbGVh biBfdGFvX21hcnNoYWxfc3RhdGUgKFRBT19PdXRwdXRDRFIgJik7CiAgICBDT1JCQTo6Qm9vbGVh biBfdGFvX3VubWFyc2hhbF9zdGF0ZSAoVEFPX0lucHV0Q0RSICYpOwoKCiAgcHJpdmF0ZToKICAg ICAgICBDT1JCQTo6Qm9vbGVhbiBfcGRfaXNfc3lzdGVtX2V4Y2VwdGlvbjsKICAgIENPUkJBOjpC b29sZWFuIF9wZF9ieXRlX29yZGVyOwogICAgX3Rhb19zZXFfT2N0ZXQgX3BkX21hcnNoYWxlZF9l eGNlcHRpb247CiAgfTsKCgoKfQoKCgoKCgogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENP UkJBOjpBbnkgJiwgY29uc3QgTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlICYpOwogICAgICAgICAg IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdl Kik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpB bnkgJiwgTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlIComKTsKICAgICAgICAgICBDT1JCQTo6Qm9v bGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBNZXNzYWdpbmc6OlBy aW9yaXR5UmFuZ2UgKiYpOwoKCgoKCiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6 OkFueSAmLCBjb25zdCBNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgJik7CiAgICAgICAgICAg dm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFu Z2UqKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6 OkFueSAmLCBNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgKiYpOwogICAgICAgICAgIENPUkJB OjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IE1lc3NhZ2lu Zzo6Um91dGluZ1R5cGVSYW5nZSAqJik7CgoKCiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo Q09SQkE6OkFueSAmLCBjb25zdCBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICYpOwogICAgICAgICAg IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSop OwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55 ICYsIE1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFu IG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IE1lc3NhZ2luZzo6UG9saWN5 VmFsdWUgKiYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29u c3QgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcSAmKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9y PDw9IChDT1JCQTo6QW55ICYsIE1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXEqKTsKICAgICAgICAg ICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBNZXNzYWdp bmc6OlBvbGljeVZhbHVlU2VxIComKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv cj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2Vx IComKTsKCgoKCiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBNZXNz YWdpbmc6OlJlcGx5SGFuZGxlcl9wdHIpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJh dG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIE1lc3NhZ2luZzo6UmVwbHlIYW5kbGVyIComKTsK IyAyODYwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L01lc3NhZ2luZ0MuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIgMQojIDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2lu Zzo6UmViaW5kUG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlYmluZFBvbGljeV9kdXBsaWNhdGUg KAogICAgTWVzc2FnaW5nOjpSZWJpbmRQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gTWVzc2Fn aW5nOjpSZWJpbmRQb2xpY3k6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fTWVz c2FnaW5nX1JlYmluZFBvbGljeV9yZWxlYXNlICgKICAgIE1lc3NhZ2luZzo6UmViaW5kUG9saWN5 X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpS ZWJpbmRQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmViaW5kUG9saWN5X25pbCAoCiAgICB2b2lk CiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UmViaW5kUG9saWN5OjpfbmlsICgpOwp9Cgppbmxp bmUgTWVzc2FnaW5nOjpSZWJpbmRQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmViaW5kUG9saWN5 X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6 UmViaW5kUG9saWN5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl KTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fTWVzc2FnaW5nX1JlYmluZFBvbGljeV91 cGNhc3QgKAogICAgdm9pZCAqc3JjCiAgKQp7CiAgTWVzc2FnaW5nOjpSZWJpbmRQb2xpY3kgKip0 bXAgPQogICAgc3RhdGljX2Nhc3Q8TWVzc2FnaW5nOjpSZWJpbmRQb2xpY3kgKio+IChzcmMpOwog IHJldHVybiAqdG1wOwp9CiMgODIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5pIgppbmxpbmUgTWVzc2FnaW5nOjpTeW5jU2NvcGVQ b2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfU3luY1Njb3BlUG9saWN5X2R1cGxpY2F0ZSAoCiAgICBN ZXNzYWdpbmc6OlN5bmNTY29wZVBvbGljeV9wdHIgcAogICkKewogIHJldHVybiBNZXNzYWdpbmc6 OlN5bmNTY29wZVBvbGljeTo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19NZXNz YWdpbmdfU3luY1Njb3BlUG9saWN5X3JlbGVhc2UgKAogICAgTWVzc2FnaW5nOjpTeW5jU2NvcGVQ b2xpY3lfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBNZXNzYWdp bmc6OlN5bmNTY29wZVBvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19TeW5jU2NvcGVQb2xpY3lfbmls ICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gTWVzc2FnaW5nOjpTeW5jU2NvcGVQb2xpY3k6Ol9u aWwgKCk7Cn0KCmlubGluZSBNZXNzYWdpbmc6OlN5bmNTY29wZVBvbGljeV9wdHIKdGFvX01lc3Nh Z2luZ19TeW5jU2NvcGVQb2xpY3lfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsK ICByZXR1cm4gTWVzc2FnaW5nOjpTeW5jU2NvcGVQb2xpY3k6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09S QkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19N ZXNzYWdpbmdfU3luY1Njb3BlUG9saWN5X3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBN ZXNzYWdpbmc6OlN5bmNTY29wZVBvbGljeSAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxNZXNzYWdp bmc6OlN5bmNTY29wZVBvbGljeSAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMzYgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5n Qy5pIgppbmxpbmUKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zhcjo6UHJpb3JpdHlSYW5nZV92 YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCk1lc3NhZ2luZzo6UHJpb3JpdHlSYW5n ZV92YXI6OlByaW9yaXR5UmFuZ2VfdmFyIChQcmlvcml0eVJhbmdlICpwKQogIDogcHRyXyAocCkK e30KCmlubGluZQpNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2VfdmFyOjpQcmlvcml0eVJhbmdlX3Zh ciAoY29uc3QgOjpNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2VfdmFyICZwKQp7CiAgaWYgKHAucHRy XykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlS YW5nZSAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2Nh dGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0 cl8gPSAwOwp9CgoKaW5saW5lCk1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92YXI6OlByaW9yaXR5 UmFuZ2VfdmFyIChjb25zdCA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZSAmcCkKewogIGRvIHsg dHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZSAocCk7IH0g Y2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0 dXJuOyB9IH0gd2hpbGUgKDApOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zh cjo6flByaW9yaXR5UmFuZ2VfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlu bGluZSBNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2VfdmFyICYKTWVzc2FnaW5nOjpQcmlvcml0eVJh bmdlX3Zhcjo6b3BlcmF0b3I9IChQcmlvcml0eVJhbmdlICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0 cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpNZXNzYWdp bmc6OlByaW9yaXR5UmFuZ2VfdmFyICYKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zhcjo6b3Bl cmF0b3I9IChjb25zdCA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92YXIgJnApCnsKICBpZiAo dGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAwKQogICAgICAgIHsKICAgICAg ICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+cHRyXyA9IDA7CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgUHJpb3JpdHlSYW5nZSAqZGVlcF9jb3B5 ID0KICAgICAgICAgICAgbmV3IFByaW9yaXR5UmFuZ2UgKCpwLnB0cl8pOwoKICAgICAgICAgIGlm IChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIFByaW9yaXR5UmFu Z2UgKnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJf OwogICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRl ZXBfY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9 CgoKaW5saW5lIE1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92YXIgJgpNZXNzYWdpbmc6OlByaW9y aXR5UmFuZ2VfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6TWVzc2FnaW5nOjpQcmlvcml0eVJhbmdl ICZwKQp7CiAgaWYgKHRoaXMtPnB0cl8gIT0gJnApCiAgewogICAgZGVsZXRlIHRoaXMtPnB0cl87 CiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpNZXNzYWdpbmc6OlByaW9yaXR5UmFu Z2UgKHApOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkp ID0gMTI7IHJldHVybiAqdGhpczsgfSB9IHdoaWxlICgwKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9 CgppbmxpbmUgY29uc3QgOjpNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2UgKgpNZXNzYWdpbmc6OlBy aW9yaXR5UmFuZ2VfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMt PnB0cl87Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZSAqCk1lc3NhZ2luZzo6 UHJpb3JpdHlSYW5nZV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRy XzsKfQoKaW5saW5lCk1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92YXI6Om9wZXJhdG9yIGNvbnN0 IDo6TWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w dHJfOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zhcjo6b3BlcmF0b3IgOjpN ZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2UgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlu bGluZQpNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2VfdmFyOjpvcGVyYXRvciA6Ok1lc3NhZ2luZzo6 UHJpb3JpdHlSYW5nZSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5l IGNvbnN0IDo6TWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlICYKTWVzc2FnaW5nOjpQcmlvcml0eVJh bmdlX3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGlu ZSA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZSAmCk1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92 YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6TWVz c2FnaW5nOjpQcmlvcml0eVJhbmdlICYKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zhcjo6b3V0 ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlBy aW9yaXR5UmFuZ2UKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zhcjo6X3JldG4gKHZvaWQpCnsK ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5n ZSAqCk1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJl dHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lIE1lc3NhZ2luZzo6UmVxdWVzdFByaW9yaXR5 UG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlcXVlc3RQcmlvcml0eVBvbGljeV9kdXBsaWNhdGUg KAogICAgTWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIHAKICApCnsKICByZXR1 cm4gTWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3k6Ol9kdXBsaWNhdGUgKHApOwp9Cgpp bmxpbmUgdm9pZAp0YW9fTWVzc2FnaW5nX1JlcXVlc3RQcmlvcml0eVBvbGljeV9yZWxlYXNlICgK ICAgIE1lc3NhZ2luZzo6UmVxdWVzdFByaW9yaXR5UG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6 OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3lf cHRyCnRhb19NZXNzYWdpbmdfUmVxdWVzdFByaW9yaXR5UG9saWN5X25pbCAoCiAgICB2b2lkCiAg KQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UmVxdWVzdFByaW9yaXR5UG9saWN5OjpfbmlsICgpOwp9 CgppbmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyCnRhb19NZXNzYWdp bmdfUmVxdWVzdFByaW9yaXR5UG9saWN5X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAog ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg KQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UmVxdWVzdFByaW9yaXR5UG9saWN5OjpfbmFycm93IChw LCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmpl Y3QgKgp0YW9fTWVzc2FnaW5nX1JlcXVlc3RQcmlvcml0eVBvbGljeV91cGNhc3QgKAogICAgdm9p ZCAqc3JjCiAgKQp7CiAgTWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3kgKip0bXAgPQog ICAgc3RhdGljX2Nhc3Q8TWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3kgKio+IChzcmMp OwogIHJldHVybiAqdG1wOwp9CiMgMzMxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2luZzo6UmVwbHlQ cmlvcml0eVBvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19SZXBseVByaW9yaXR5UG9saWN5X2R1cGxp Y2F0ZSAoCiAgICBNZXNzYWdpbmc6OlJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyIHAKICApCnsKICBy ZXR1cm4gTWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5OjpfZHVwbGljYXRlIChwKTsKfQoK aW5saW5lIHZvaWQKdGFvX01lc3NhZ2luZ19SZXBseVByaW9yaXR5UG9saWN5X3JlbGVhc2UgKAog ICAgTWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJl bGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5X3B0cgp0 YW9fTWVzc2FnaW5nX1JlcGx5UHJpb3JpdHlQb2xpY3lfbmlsICgKICAgIHZvaWQKICApCnsKICBy ZXR1cm4gTWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUg TWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlcGx5UHJp b3JpdHlQb2xpY3lfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4g TWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fTWVzc2Fn aW5nX1JlcGx5UHJpb3JpdHlQb2xpY3lfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIE1l c3NhZ2luZzo6UmVwbHlQcmlvcml0eVBvbGljeSAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxNZXNz YWdpbmc6OlJlcGx5UHJpb3JpdHlQb2xpY3kgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CiMg Mzg1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01l c3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2luZzo6UmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIK dGFvX01lc3NhZ2luZ19SZXF1ZXN0U3RhcnRUaW1lUG9saWN5X2R1cGxpY2F0ZSAoCiAgICBNZXNz YWdpbmc6OlJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gTWVzc2Fn aW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5OjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZv aWQKdGFvX01lc3NhZ2luZ19SZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3JlbGVhc2UgKAogICAgTWVz c2FnaW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVh c2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0cgp0 YW9fTWVzc2FnaW5nX1JlcXVlc3RTdGFydFRpbWVQb2xpY3lfbmlsICgKICAgIHZvaWQKICApCnsK ICByZXR1cm4gTWVzc2FnaW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5OjpfbmlsICgpOwp9Cgpp bmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0cgp0YW9fTWVzc2FnaW5n X1JlcXVlc3RTdGFydFRpbWVQb2xpY3lfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAp CnsKICByZXR1cm4gTWVzc2FnaW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5OjpfbmFycm93IChw LCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmpl Y3QgKgp0YW9fTWVzc2FnaW5nX1JlcXVlc3RTdGFydFRpbWVQb2xpY3lfdXBjYXN0ICgKICAgIHZv aWQgKnNyYwogICkKewogIE1lc3NhZ2luZzo6UmVxdWVzdFN0YXJ0VGltZVBvbGljeSAqKnRtcCA9 CiAgICBzdGF0aWNfY2FzdDxNZXNzYWdpbmc6OlJlcXVlc3RTdGFydFRpbWVQb2xpY3kgKio+IChz cmMpOwogIHJldHVybiAqdG1wOwp9CiMgNDM5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2luZzo6UmVx dWVzdEVuZFRpbWVQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmVxdWVzdEVuZFRpbWVQb2xpY3lf ZHVwbGljYXRlICgKICAgIE1lc3NhZ2luZzo6UmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyIHAKICAp CnsKICByZXR1cm4gTWVzc2FnaW5nOjpSZXF1ZXN0RW5kVGltZVBvbGljeTo6X2R1cGxpY2F0ZSAo cCk7Cn0KCmlubGluZSB2b2lkCnRhb19NZXNzYWdpbmdfUmVxdWVzdEVuZFRpbWVQb2xpY3lfcmVs ZWFzZSAoCiAgICBNZXNzYWdpbmc6OlJlcXVlc3RFbmRUaW1lUG9saWN5X3B0ciBwCiAgKQp7CiAg Q09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0RW5kVGltZVBv bGljeV9wdHIKdGFvX01lc3NhZ2luZ19SZXF1ZXN0RW5kVGltZVBvbGljeV9uaWwgKAogICAgdm9p ZAogICkKewogIHJldHVybiBNZXNzYWdpbmc6OlJlcXVlc3RFbmRUaW1lUG9saWN5OjpfbmlsICgp Owp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIKdGFvX01lc3Nh Z2luZ19SZXF1ZXN0RW5kVGltZVBvbGljeV9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwK ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQog ICkKewogIHJldHVybiBNZXNzYWdpbmc6OlJlcXVlc3RFbmRUaW1lUG9saWN5OjpfbmFycm93IChw LCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmpl Y3QgKgp0YW9fTWVzc2FnaW5nX1JlcXVlc3RFbmRUaW1lUG9saWN5X3VwY2FzdCAoCiAgICB2b2lk ICpzcmMKICApCnsKICBNZXNzYWdpbmc6OlJlcXVlc3RFbmRUaW1lUG9saWN5ICoqdG1wID0KICAg IHN0YXRpY19jYXN0PE1lc3NhZ2luZzo6UmVxdWVzdEVuZFRpbWVQb2xpY3kgKio+IChzcmMpOwog IHJldHVybiAqdG1wOwp9CiMgNDkzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2luZzo6UmVwbHlTdGFy dFRpbWVQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmVwbHlTdGFydFRpbWVQb2xpY3lfZHVwbGlj YXRlICgKICAgIE1lc3NhZ2luZzo6UmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyIHAKICApCnsKICBy ZXR1cm4gTWVzc2FnaW5nOjpSZXBseVN0YXJ0VGltZVBvbGljeTo6X2R1cGxpY2F0ZSAocCk7Cn0K CmlubGluZSB2b2lkCnRhb19NZXNzYWdpbmdfUmVwbHlTdGFydFRpbWVQb2xpY3lfcmVsZWFzZSAo CiAgICBNZXNzYWdpbmc6OlJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6 OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXBseVN0YXJ0VGltZVBvbGljeV9w dHIKdGFvX01lc3NhZ2luZ19SZXBseVN0YXJ0VGltZVBvbGljeV9uaWwgKAogICAgdm9pZAogICkK ewogIHJldHVybiBNZXNzYWdpbmc6OlJlcGx5U3RhcnRUaW1lUG9saWN5OjpfbmlsICgpOwp9Cgpp bmxpbmUgTWVzc2FnaW5nOjpSZXBseVN0YXJ0VGltZVBvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19S ZXBseVN0YXJ0VGltZVBvbGljeV9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENP UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewog IHJldHVybiBNZXNzYWdpbmc6OlJlcGx5U3RhcnRUaW1lUG9saWN5OjpfbmFycm93IChwLCBfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0 YW9fTWVzc2FnaW5nX1JlcGx5U3RhcnRUaW1lUG9saWN5X3VwY2FzdCAoCiAgICB2b2lkICpzcmMK ICApCnsKICBNZXNzYWdpbmc6OlJlcGx5U3RhcnRUaW1lUG9saWN5ICoqdG1wID0KICAgIHN0YXRp Y19jYXN0PE1lc3NhZ2luZzo6UmVwbHlTdGFydFRpbWVQb2xpY3kgKio+IChzcmMpOwogIHJldHVy biAqdG1wOwp9CiMgNTQ3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2luZzo6UmVwbHlFbmRUaW1lUG9s aWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlcGx5RW5kVGltZVBvbGljeV9kdXBsaWNhdGUgKAogICAg TWVzc2FnaW5nOjpSZXBseUVuZFRpbWVQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gTWVzc2Fn aW5nOjpSZXBseUVuZFRpbWVQb2xpY3k6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0 YW9fTWVzc2FnaW5nX1JlcGx5RW5kVGltZVBvbGljeV9yZWxlYXNlICgKICAgIE1lc3NhZ2luZzo6 UmVwbHlFbmRUaW1lUG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9Cgpp bmxpbmUgTWVzc2FnaW5nOjpSZXBseUVuZFRpbWVQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmVw bHlFbmRUaW1lUG9saWN5X25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6 UmVwbHlFbmRUaW1lUG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXBseUVu ZFRpbWVQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmVwbHlFbmRUaW1lUG9saWN5X25hcnJvdyAo CiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB X0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UmVwbHlFbmRU aW1lUG9saWN5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsK fQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fTWVzc2FnaW5nX1JlcGx5RW5kVGltZVBvbGlj eV91cGNhc3QgKAogICAgdm9pZCAqc3JjCiAgKQp7CiAgTWVzc2FnaW5nOjpSZXBseUVuZFRpbWVQ b2xpY3kgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8TWVzc2FnaW5nOjpSZXBseUVuZFRpbWVQb2xp Y3kgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CiMgNjAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3Nh Z2luZzo6UmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19SZWxh dGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X2R1cGxpY2F0ZSAoCiAgICBNZXNzYWdpbmc6OlJlbGF0 aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gTWVzc2FnaW5nOjpS ZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5OjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZv aWQKdGFvX01lc3NhZ2luZ19SZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3JlbGVhc2UgKAog ICAgTWVzc2FnaW5nOjpSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0ciBwCiAgKQp7CiAg Q09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZWxhdGl2ZVJlcXVlc3RU aW1lb3V0UG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xp Y3lfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gTWVzc2FnaW5nOjpSZWxhdGl2ZVJlcXVl c3RUaW1lb3V0UG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZWxhdGl2ZVJl cXVlc3RUaW1lb3V0UG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlbGF0aXZlUmVxdWVzdFRpbWVv dXRQb2xpY3lfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gTWVz c2FnaW5nOjpSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5OjpfbmFycm93IChwLCBfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9f TWVzc2FnaW5nX1JlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfdXBjYXN0ICgKICAgIHZvaWQg KnNyYwogICkKewogIE1lc3NhZ2luZzo6UmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeSAqKnRt cCA9CiAgICBzdGF0aWNfY2FzdDxNZXNzYWdpbmc6OlJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xp Y3kgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CiMgNjU1ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3Nh Z2luZzo6UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1Jl bGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9kdXBsaWNhdGUgKAogICAgTWVzc2FnaW5nOjpS ZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gTWVzc2Fn aW5nOjpSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3k6Ol9kdXBsaWNhdGUgKHApOwp9Cgpp bmxpbmUgdm9pZAp0YW9fTWVzc2FnaW5nX1JlbGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9y ZWxlYXNlICgKICAgIE1lc3NhZ2luZzo6UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X3B0 ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZWxh dGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmVsYXRpdmVSb3Vu ZHRyaXBUaW1lb3V0UG9saWN5X25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2lu Zzo6UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgTWVz c2FnaW5nOjpSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdf UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0 ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9s aWN5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5s aW5lIENPUkJBOjpPYmplY3QgKgp0YW9fTWVzc2FnaW5nX1JlbGF0aXZlUm91bmR0cmlwVGltZW91 dFBvbGljeV91cGNhc3QgKAogICAgdm9pZCAqc3JjCiAgKQp7CiAgTWVzc2FnaW5nOjpSZWxhdGl2 ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3kgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8TWVzc2FnaW5n OjpSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3kgKio+IChzcmMpOwogIHJldHVybiAqdG1w Owp9CiMgNzA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lCk1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZV92YXI6 OlJvdXRpbmdUeXBlUmFuZ2VfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30KCmlubGluZQpNZXNz YWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2VfdmFyOjpSb3V0aW5nVHlwZVJhbmdlX3ZhciAoUm91dGlu Z1R5cGVSYW5nZSAqcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKTWVzc2FnaW5nOjpSb3V0aW5n VHlwZVJhbmdlX3Zhcjo6Um91dGluZ1R5cGVSYW5nZV92YXIgKGNvbnN0IDo6TWVzc2FnaW5nOjpS b3V0aW5nVHlwZVJhbmdlX3ZhciAmcCkKewogIGlmIChwLnB0cl8pCiAgICBkbyB7IHRyeSB7IHRo aXMtPnB0cl8gPSBuZXcgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgKCpwLnB0cl8pOyB9 IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJl dHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKCmlubGlu ZQpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2VfdmFyOjpSb3V0aW5nVHlwZVJhbmdlX3ZhciAo Y29uc3QgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgJnApCnsKICBkbyB7IHRyeSB7IHRo aXMtPnB0cl8gPSBuZXcgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgKHApOyB9IGNhdGNo IChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsg fSB9IHdoaWxlICgwKTsKfQoKaW5saW5lCk1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZV92YXI6 On5Sb3V0aW5nVHlwZVJhbmdlX3ZhciAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwp9Cgpp bmxpbmUgTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlX3ZhciAmCk1lc3NhZ2luZzo6Um91dGlu Z1R5cGVSYW5nZV92YXI6Om9wZXJhdG9yPSAoUm91dGluZ1R5cGVSYW5nZSAqcCkKewogIGRlbGV0 ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l IDo6TWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlX3ZhciAmCk1lc3NhZ2luZzo6Um91dGluZ1R5 cGVSYW5nZV92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFu Z2VfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0g MCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMt PnB0cl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIFJvdXRp bmdUeXBlUmFuZ2UgKmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBSb3V0aW5nVHlwZVJhbmdl ICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBSb3V0aW5nVHlwZVJhbmdlICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAg ICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0g dG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBNZXNzYWdpbmc6OlJvdXRpbmdU eXBlUmFuZ2VfdmFyICYKTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlX3Zhcjo6b3BlcmF0b3I9 IChjb25zdCA6Ok1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZSAmcCkKewogIGlmICh0aGlzLT5w dHJfICE9ICZwKQogIHsKICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgZG8geyB0cnkgeyB0aGlz LT5wdHJfID0gbmV3IDo6TWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlIChwKTsgfSBjYXRjaCAo c3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gKnRo aXM7IH0gfSB3aGlsZSAoMCk7CiAgfQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IDo6 TWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlICoKTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdl X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgpp bmxpbmUgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgKgpNZXNzYWdpbmc6OlJvdXRpbmdU eXBlUmFuZ2VfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0K CmlubGluZQpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2VfdmFyOjpvcGVyYXRvciBjb25zdCA6 Ok1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+ cHRyXzsKfQoKaW5saW5lCk1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZV92YXI6Om9wZXJhdG9y IDo6TWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJf Owp9CgppbmxpbmUKTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlX3Zhcjo6b3BlcmF0b3IgOjpN ZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0 cl87Cn0KCmlubGluZSBjb25zdCA6Ok1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZSAmCk1lc3Nh Z2luZzo6Um91dGluZ1R5cGVSYW5nZV92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0 aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgJgpNZXNz YWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2VfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiAqdGhp cy0+cHRyXzsKfQoKCmlubGluZSA6Ok1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZSAmCk1lc3Nh Z2luZzo6Um91dGluZ1R5cGVSYW5nZV92YXI6Om91dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+ cHRyXzsKfQoKaW5saW5lIDo6TWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlCk1lc3NhZ2luZzo6 Um91dGluZ1R5cGVSYW5nZV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJf Owp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgKgpNZXNzYWdpbmc6OlJv dXRpbmdUeXBlUmFuZ2VfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRy XzsKfQoKCgoKCmlubGluZSBNZXNzYWdpbmc6OlJvdXRpbmdQb2xpY3lfcHRyCnRhb19NZXNzYWdp bmdfUm91dGluZ1BvbGljeV9kdXBsaWNhdGUgKAogICAgTWVzc2FnaW5nOjpSb3V0aW5nUG9saWN5 X3B0ciBwCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6Um91dGluZ1BvbGljeTo6X2R1cGxpY2F0 ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19NZXNzYWdpbmdfUm91dGluZ1BvbGljeV9yZWxlYXNl ICgKICAgIE1lc3NhZ2luZzo6Um91dGluZ1BvbGljeV9wdHIgcAogICkKewogIENPUkJBOjpyZWxl YXNlIChwKTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6Um91dGluZ1BvbGljeV9wdHIKdGFvX01lc3Nh Z2luZ19Sb3V0aW5nUG9saWN5X25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2lu Zzo6Um91dGluZ1BvbGljeTo6X25pbCAoKTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6Um91dGluZ1Bv bGljeV9wdHIKdGFvX01lc3NhZ2luZ19Sb3V0aW5nUG9saWN5X25hcnJvdyAoCiAgICBDT1JCQTo6 T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50 X3ZhcmlhYmxlCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6Um91dGluZ1BvbGljeTo6X25hcnJv dyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6 T2JqZWN0ICoKdGFvX01lc3NhZ2luZ19Sb3V0aW5nUG9saWN5X3VwY2FzdCAoCiAgICB2b2lkICpz cmMKICApCnsKICBNZXNzYWdpbmc6OlJvdXRpbmdQb2xpY3kgKip0bXAgPQogICAgc3RhdGljX2Nh c3Q8TWVzc2FnaW5nOjpSb3V0aW5nUG9saWN5ICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsKfQoj IDkwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9N ZXNzYWdpbmdDLmkiCmlubGluZSBNZXNzYWdpbmc6Ok1heEhvcHNQb2xpY3lfcHRyCnRhb19NZXNz YWdpbmdfTWF4SG9wc1BvbGljeV9kdXBsaWNhdGUgKAogICAgTWVzc2FnaW5nOjpNYXhIb3BzUG9s aWN5X3B0ciBwCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6TWF4SG9wc1BvbGljeTo6X2R1cGxp Y2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19NZXNzYWdpbmdfTWF4SG9wc1BvbGljeV9yZWxl YXNlICgKICAgIE1lc3NhZ2luZzo6TWF4SG9wc1BvbGljeV9wdHIgcAogICkKewogIENPUkJBOjpy ZWxlYXNlIChwKTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6TWF4SG9wc1BvbGljeV9wdHIKdGFvX01l c3NhZ2luZ19NYXhIb3BzUG9saWN5X25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIE1lc3Nh Z2luZzo6TWF4SG9wc1BvbGljeTo6X25pbCAoKTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6TWF4SG9w c1BvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19NYXhIb3BzUG9saWN5X25hcnJvdyAoCiAgICBDT1JC QTo6T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6TWF4SG9wc1BvbGljeTo6X25h cnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JC QTo6T2JqZWN0ICoKdGFvX01lc3NhZ2luZ19NYXhIb3BzUG9saWN5X3VwY2FzdCAoCiAgICB2b2lk ICpzcmMKICApCnsKICBNZXNzYWdpbmc6Ok1heEhvcHNQb2xpY3kgKip0bXAgPQogICAgc3RhdGlj X2Nhc3Q8TWVzc2FnaW5nOjpNYXhIb3BzUG9saWN5ICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsK fQojIDk2MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9NZXNzYWdpbmdDLmkiCmlubGluZSBNZXNzYWdpbmc6OlF1ZXVlT3JkZXJQb2xpY3lfcHRyCnRh b19NZXNzYWdpbmdfUXVldWVPcmRlclBvbGljeV9kdXBsaWNhdGUgKAogICAgTWVzc2FnaW5nOjpR dWV1ZU9yZGVyUG9saWN5X3B0ciBwCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UXVldWVPcmRl clBvbGljeTo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19NZXNzYWdpbmdfUXVl dWVPcmRlclBvbGljeV9yZWxlYXNlICgKICAgIE1lc3NhZ2luZzo6UXVldWVPcmRlclBvbGljeV9w dHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6UXVl dWVPcmRlclBvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19RdWV1ZU9yZGVyUG9saWN5X25pbCAoCiAg ICB2b2lkCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UXVldWVPcmRlclBvbGljeTo6X25pbCAo KTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6UXVldWVPcmRlclBvbGljeV9wdHIKdGFvX01lc3NhZ2lu Z19RdWV1ZU9yZGVyUG9saWN5X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQp7CiAg cmV0dXJuIE1lc3NhZ2luZzo6UXVldWVPcmRlclBvbGljeTo6X25hcnJvdyAocCwgX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX01l c3NhZ2luZ19RdWV1ZU9yZGVyUG9saWN5X3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBN ZXNzYWdpbmc6OlF1ZXVlT3JkZXJQb2xpY3kgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8TWVzc2Fn aW5nOjpRdWV1ZU9yZGVyUG9saWN5ICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsKfQojIDEwMTQg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2Fn aW5nQy5pIgppbmxpbmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6OlBvbGljeVZhbHVlX3Zh ciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92 YXI6OlBvbGljeVZhbHVlX3ZhciAoUG9saWN5VmFsdWUgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5s aW5lCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVfdmFyOjpQb2xpY3lWYWx1ZV92YXIgKGNvbnN0IDo6 TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0 cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAoKnAucHRyXyk7 IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsg cmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8gPSAwOwp9Cgppbmxp bmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6On5Qb2xpY3lWYWx1ZV92YXIgKHZvaWQpCnsK ICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIE1lc3NhZ2luZzo6UG9saWN5VmFsdWVfdmFy ICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6Om9wZXJhdG9yPSAoUG9saWN5VmFsdWUgKnAp CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7 Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWVfdmFyICYKTWVzc2FnaW5nOjpQb2xp Y3lWYWx1ZV92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlX3Zh ciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAg ICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJf ID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBQb2xpY3lWYWx1 ZSAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IFBvbGljeVZhbHVlICgqcC5wdHJfKTsKCiAg ICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBQ b2xpY3lWYWx1ZSAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRo aXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBk ZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4g KnRoaXM7Cn0KCmlubGluZSBjb25zdCA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKgpNZXNzYWdp bmc6OlBvbGljeVZhbHVlX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlICoKTWVzc2FnaW5n OjpQb2xpY3lWYWx1ZV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRy XzsKfQoKaW5saW5lCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVfdmFyOjpvcGVyYXRvciBjb25zdCA6 Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWUgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87 Cn0KCmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlX3Zhcjo6b3BlcmF0b3IgOjpNZXNzYWdp bmc6OlBvbGljeVZhbHVlICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKTWVz c2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6Om9wZXJhdG9yIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1 ZSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpNZXNzYWdpbmc6 OlBvbGljeVZhbHVlX3Zhcjo6b3BlcmF0b3IgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlIComKCkK ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpNZXNzYWdpbmc6OlBvbGlj eVZhbHVlICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6OmluICh2b2lkKSBjb25zdAp7CiAg cmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlICYK TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlz LT5wdHJfOwp9CgoKaW5saW5lIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqJgpNZXNzYWdpbmc6 OlBvbGljeVZhbHVlX3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhp cy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6 UG9saWN5VmFsdWUgKgpNZXNzYWdpbmc6OlBvbGljeVZhbHVlX3Zhcjo6X3JldG4gKHZvaWQpCnsK ICA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRy XyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAq Ck1lc3NhZ2luZzo6UG9saWN5VmFsdWVfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g dGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlX291dDo6UG9s aWN5VmFsdWVfb3V0ICg6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKiZwKQogIDogcHRyXyAocCkK ewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV9vdXQ6 OlBvbGljeVZhbHVlX291dCAoUG9saWN5VmFsdWVfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkp CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCk1lc3Nh Z2luZzo6UG9saWN5VmFsdWVfb3V0OjpQb2xpY3lWYWx1ZV9vdXQgKGNvbnN0IDo6TWVzc2FnaW5n OjpQb2xpY3lWYWx1ZV9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PFBvbGljeVZhbHVlX291 dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIE1lc3NhZ2luZzo6UG9saWN5VmFsdWVfb3V0ICYKTWVz c2FnaW5nOjpQb2xpY3lWYWx1ZV9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpNZXNzYWdpbmc6OlBv bGljeVZhbHVlX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFBvbGljeVZhbHVl X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIE1lc3NhZ2luZzo6UG9s aWN5VmFsdWVfb3V0ICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV9vdXQ6Om9wZXJhdG9yPSAoUG9s aWN5VmFsdWUgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGlu ZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlX291dDo6b3BlcmF0b3IgOjpNZXNzYWdpbmc6OlBvbGlj eVZhbHVlIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6 OlBvbGljeVZhbHVlIComCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVfb3V0OjpwdHIgKHZvaWQpCnsK ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAq Ck1lc3NhZ2luZzo6UG9saWN5VmFsdWVfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJu IHRoaXMtPnB0cl87Cn0KIyAxMjEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKICBpbmxpbmUgTWVzc2FnaW5nOjpQb2xpY3lW YWx1ZSAqCiAgTWVzc2FnaW5nOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9s aWN5VmFsdWVTZXE6OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSkKCiAgewogICAgTWVzc2Fn aW5nOjpQb2xpY3lWYWx1ZSAqcmV0dmFsID0gMDsKICAgIGRvIHsgdHJ5IHsgcmV0dmFsID0gbmV3 IE1lc3NhZ2luZzo6UG9saWN5VmFsdWVbc2l6ZV07IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7 ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGlsZSAoMCk7CiAg ICByZXR1cm4gcmV0dmFsOwogIH0KCiAgaW5saW5lIHZvaWQgTWVzc2FnaW5nOjpfVEFPX1VuYm91 bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXE6OmZyZWVidWYgKE1lc3NhZ2lu Zzo6UG9saWN5VmFsdWUgKmJ1ZmZlcikKCiAgewogICAgZGVsZXRlIFtdIGJ1ZmZlcjsKICB9Cgog IGlubGluZQogIE1lc3NhZ2luZzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfTWVzc2FnaW5nX1Bv bGljeVZhbHVlU2VxOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFs dWVTZXEgKHZvaWQpCiAgewogIH0KCiAgaW5saW5lCiAgTWVzc2FnaW5nOjpfVEFPX1VuYm91bmRl ZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXE6Ol9UQU9fVW5ib3VuZGVkX1NlcXVl bmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcSAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgICA6 IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgX1RBT19VbmJvdW5kZWRfU2Vx dWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxOjphbGxvY2J1ZiAobWF4aW11bSkpCiAgewog IH0KCiAgaW5saW5lCiAgTWVzc2FnaW5nOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdp bmdfUG9saWN5VmFsdWVTZXE6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xp Y3lWYWx1ZVNlcSAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro LAogICAgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqZGF0YSwKICAgIENPUkJBOjpCb29sZWFuIHJl bGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwg ZGF0YSwgcmVsZWFzZSkKICB7CiAgfQoKICBpbmxpbmUKICBNZXNzYWdpbmc6Ol9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcTo6X1RBT19VbmJvdW5kZWRfU2Vx dWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxIChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1 ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXEgJnJocykKCiAgICA6IFRBT19VbmJvdW5kZWRf QmFzZV9TZXF1ZW5jZSAocmhzKQogIHsKICAgIGlmIChyaHMuYnVmZmVyXyAhPSAwKQogICAgewog ICAgICBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICp0bXAxID0gX1RBT19VbmJvdW5kZWRfU2VxdWVu Y2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxOjphbGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwog ICAgICBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nh c3Q8TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9yIChD T1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgdG1wMVtp XSA9IHRtcDJbaV07CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0KICAgIGVsc2UK ICAgIHsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxpbmUgTWVzc2Fn aW5nOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXEgJgog IE1lc3NhZ2luZzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVl U2VxOjpvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Q b2xpY3lWYWx1ZVNlcSAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1 cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+ bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgTWVzc2FnaW5nOjpQb2xp Y3lWYWx1ZSAqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZXNzYWdpbmc6OlBvbGljeVZhbHVlICo+ ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdp bmdfUG9saWN5VmFsdWVTZXE6OmZyZWVidWYgKHRtcCk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9 IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcTo6YWxsb2Ni dWYgKHJocy5tYXhpbXVtXyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgICAgdGhpcy0+YnVm ZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcTo6 YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CgogICAgVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNl OjpvcGVyYXRvcj0gKHJocyk7CgogICAgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqdG1wMSA9IHJl aW50ZXJwcmV0X2Nhc3Q8TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqPiAodGhpcy0+YnVmZmVyXyk7 CiAgICBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nh c3Q8TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09S QkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICB0bXAxW2ldID0g dG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIE1lc3NhZ2luZzo6UG9s aWN5VmFsdWUgJgogIE1lc3NhZ2luZzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfTWVzc2FnaW5n X1BvbGljeVZhbHVlU2VxOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkKCiAgewogICAgZG8g eyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjps YXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNl ICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5pIiwgMTMwMiwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18t PnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNr ICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAl bCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwg LTEpOyB9IH0gd2hpbGUgKDApOwogICAgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSogdG1wID0gcmVp bnRlcnByZXRfY2FzdDxNZXNzYWdpbmc6OlBvbGljeVZhbHVlKj4gKHRoaXMtPmJ1ZmZlcl8pOwog ICAgcmV0dXJuIHRtcFtpXTsKICB9CgogIGlubGluZSBjb25zdCBNZXNzYWdpbmc6OlBvbGljeVZh bHVlICYKICBNZXNzYWdpbmc6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xp Y3lWYWx1ZVNlcTo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0CgogIHsKICAgIGRv IHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6 bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j ZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIsIDEzMTEsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19f LT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFj ayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUg JWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIs IC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIE1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKiBjb25zdCB0 bXAgPSByZWludGVycHJldF9jYXN0PE1lc3NhZ2luZzo6UG9saWN5VmFsdWUqPiAodGhpcy0+YnVm ZmVyXyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0KCgoKICBpbmxpbmUgTWVzc2FnaW5nOjpQb2xp Y3lWYWx1ZSAqCiAgTWVzc2FnaW5nOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdf UG9saWN5VmFsdWVTZXE6OmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFuIG9ycGhhbikKICB7CiAg ICBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICpyZXN1bHQgPSAwOwogICAgaWYgKG9ycGhhbiA9PSAw KQogICAgewoKICAgICAgaWYgKHRoaXMtPmJ1ZmZlcl8gPT0gMCkKICAgICAgewogICAgICAgIHJl c3VsdCA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcTo6 YWxsb2NidWYgKHRoaXMtPmxlbmd0aF8pOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7 CiAgICAgICAgdGhpcy0+cmVsZWFzZV8gPSAxOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewog ICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSo+ ICh0aGlzLT5idWZmZXJfKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICBpZiAo dGhpcy0+cmVsZWFzZV8gIT0gMCkKICAgICAgewoKCiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnBy ZXRfY2FzdDxNZXNzYWdpbmc6OlBvbGljeVZhbHVlKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAg IHRoaXMtPm1heGltdW1fID0gMDsKICAgICAgICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICB0 aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0aGlzLT5yZWxlYXNlXyA9IDA7CiAgICAgIH0KICAg IH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbmxpbmUgY29uc3QgTWVzc2FnaW5nOjpQb2xp Y3lWYWx1ZSAqCiAgTWVzc2FnaW5nOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdf UG9saWN5VmFsdWVTZXE6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CiAgewogICAgcmV0dXJuIHJl aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqPiAodGhpcy0+YnVm ZmVyXyk7CiAgfQoKICBpbmxpbmUgdm9pZAogIE1lc3NhZ2luZzo6X1RBT19VbmJvdW5kZWRfU2Vx dWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxOjpyZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4 LAogIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqZGF0YSwK ICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKQogIHsKICAgIHRoaXMtPm1heGltdW1fID0gbWF4Owog ICAgdGhpcy0+bGVuZ3RoXyA9IGxlbmd0aDsKICAgIGlmICh0aGlzLT5idWZmZXJfICYmIHRoaXMt PnJlbGVhc2VfID09IDEpCiAgICB7CiAgICAgIE1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKnRtcCA9 IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSo+ICh0aGlzLT5idWZmZXJf KTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2Vx OjpmcmVlYnVmICh0bXApOwogICAgfQogICAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAgICB0aGlz LT5yZWxlYXNlXyA9IHJlbGVhc2U7CiAgfQojIDEzODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5pIgppbmxpbmUKTWVzc2FnaW5n OjpQb2xpY3lWYWx1ZVNlcV92YXI6OlBvbGljeVZhbHVlU2VxX3ZhciAodm9pZCkKICA6IHB0cl8g KDApCnt9CgppbmxpbmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6OlBvbGljeVZhbHVl U2VxX3ZhciAoUG9saWN5VmFsdWVTZXEgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCk1lc3Nh Z2luZzo6UG9saWN5VmFsdWVTZXFfdmFyOjpQb2xpY3lWYWx1ZVNlcV92YXIgKGNvbnN0IDo6TWVz c2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0 cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcSAoKnAucHRy Xyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAx MjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8gPSAwOwp9Cgpp bmxpbmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6On5Qb2xpY3lWYWx1ZVNlcV92YXIg KHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIE1lc3NhZ2luZzo6UG9saWN5 VmFsdWVTZXFfdmFyICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6Om9wZXJhdG9yPSAo UG9saWN5VmFsdWVTZXEgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0g cDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXFf dmFyICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpN ZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAg ewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMt PnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICBQb2xpY3lWYWx1ZVNlcSAqZGVlcF9jb3B5ID0KICAgICAgICAgICAg bmV3IFBvbGljeVZhbHVlU2VxICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9 IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBQb2xpY3lWYWx1ZVNlcSAqdG1wID0gZGVl cF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAg ICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25z dCA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXEgKgpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2Vx X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgpp bmxpbmUgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxICoKTWVzc2FnaW5nOjpQb2xpY3lWYWx1 ZVNlcV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s aW5lCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXFfdmFyOjpvcGVyYXRvciBjb25zdCA6Ok1lc3Nh Z2luZzo6UG9saWN5VmFsdWVTZXEgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K CmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX3Zhcjo6b3BlcmF0b3IgOjpNZXNzYWdp bmc6OlBvbGljeVZhbHVlU2VxICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUK TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6Om9wZXJhdG9yIDo6TWVzc2FnaW5nOjpQb2xp Y3lWYWx1ZVNlcSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpN ZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX3Zhcjo6b3BlcmF0b3IgOjpNZXNzYWdpbmc6OlBvbGlj eVZhbHVlU2VxIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgTWVzc2FnaW5n OjpQb2xpY3lWYWx1ZSAmCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXFfdmFyOjpvcGVyYXRvcltd IChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAo aW5kZXgpOwp9CgppbmxpbmUgY29uc3QgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAmCk1lc3NhZ2lu Zzo6UG9saWN5VmFsdWVTZXFfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpIGNv bnN0CnsKICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICY+ ICh0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCkpOwp9CgppbmxpbmUgY29uc3QgOjpNZXNz YWdpbmc6OlBvbGljeVZhbHVlU2VxICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6Omlu ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdp bmc6OlBvbGljeVZhbHVlU2VxICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6Omlub3V0 ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6TWVzc2FnaW5nOjpQ b2xpY3lWYWx1ZVNlcSAqJgpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX3Zhcjo6b3V0ICh2b2lk KQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMt PnB0cl87Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXEgKgpNZXNzYWdpbmc6 OlBvbGljeVZhbHVlU2VxX3Zhcjo6X3JldG4gKHZvaWQpCnsKICA6Ok1lc3NhZ2luZzo6UG9saWN5 VmFsdWVTZXEgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRt cDsKfQoKaW5saW5lIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcSAqCk1lc3NhZ2luZzo6UG9s aWN5VmFsdWVTZXFfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsK fQoKCgoKCmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX291dDo6UG9saWN5VmFsdWVT ZXFfb3V0IChQb2xpY3lWYWx1ZVNlcSAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9 IDA7Cn0KCmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX291dDo6UG9saWN5VmFsdWVT ZXFfb3V0IChQb2xpY3lWYWx1ZVNlcV92YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRl bGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpQ b2xpY3lWYWx1ZVNlcV9vdXQ6OlBvbGljeVZhbHVlU2VxX291dCAoY29uc3QgOjpNZXNzYWdpbmc6 OlBvbGljeVZhbHVlU2VxX291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8UG9saWN5VmFsdWVT ZXFfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2Vx X291dCAmCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXFfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6 TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3Rf Y2FzdDxQb2xpY3lWYWx1ZVNlcV9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlu bGluZSA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXFfb3V0ICYKTWVzc2FnaW5nOjpQb2xpY3lW YWx1ZVNlcV9vdXQ6Om9wZXJhdG9yPSAoUG9saWN5VmFsdWVTZXEgKnApCnsKICB0aGlzLT5wdHJf ID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2Vx X291dDo6b3BlcmF0b3IgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxIComKCkKewogIHJldHVy biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxIComCk1l c3NhZ2luZzo6UG9saWN5VmFsdWVTZXFfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQoKaW5saW5lIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcSAqCk1lc3NhZ2luZzo6 UG9saWN5VmFsdWVTZXFfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0 cl87Cn0KCmlubGluZSBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICYKTWVzc2FnaW5nOjpQb2xpY3lW YWx1ZVNlcV9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVybiB0 aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCgoKCgoKaW5saW5lCk1lc3NhZ2luZzo6 RXhjZXB0aW9uSG9sZGVyOjpFeGNlcHRpb25Ib2xkZXIgKCkKe30KCmlubGluZQpNZXNzYWdpbmc6 OkV4Y2VwdGlvbkhvbGRlcjo6fkV4Y2VwdGlvbkhvbGRlciAoKQp7fQoKaW5saW5lIGNvbnN0IGNo YXIqCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyOjpfdGFvX29idl9zdGF0aWNfcmVwb3NpdG9y eV9pZCAoKQp7CiAgcmV0dXJuICJJREw6b21nLm9yZy9NZXNzYWdpbmcvRXhjZXB0aW9uSG9sZGVy OjEuMCI7Cn0KIyAxNjIxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVy X3Zhcjo6RXhjZXB0aW9uSG9sZGVyX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUK TWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfdmFyOjpFeGNlcHRpb25Ib2xkZXJfdmFyIChFeGNl cHRpb25Ib2xkZXIqIHApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCk1lc3NhZ2luZzo6RXhjZXB0 aW9uSG9sZGVyX3Zhcjo6RXhjZXB0aW9uSG9sZGVyX3ZhciAoY29uc3QgRXhjZXB0aW9uSG9sZGVy KiBwKQogIDogcHRyXyAoY29uc3RfY2FzdDxFeGNlcHRpb25Ib2xkZXIqPiAocCkpCnt9Cgppbmxp bmUgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXIqCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVy X3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpN ZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlcl92YXI6OkV4Y2VwdGlvbkhvbGRlcl92YXIgKGNvbnN0 IEV4Y2VwdGlvbkhvbGRlcl92YXIgJnApCnsKICBDT1JCQTo6YWRkX3JlZiAocC5wdHIgKCkpOwog IHRoaXMtPnB0cl8gPSBwLnB0ciAoKTsKfQoKaW5saW5lCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9s ZGVyX3Zhcjo6fkV4Y2VwdGlvbkhvbGRlcl92YXIgKHZvaWQpCnsKICBDT1JCQTo6cmVtb3ZlX3Jl ZiAodGhpcy0+cHRyXyk7Cn0KCmlubGluZSBNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlcl92YXIg JgpNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlcl92YXI6Om9wZXJhdG9yPSAoRXhjZXB0aW9uSG9s ZGVyKiBwKQp7CiAgQ09SQkE6OnJlbW92ZV9yZWYgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8g PSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIE1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVy X3ZhciAmCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX3Zhcjo6b3BlcmF0b3I9IChjb25zdCBF eGNlcHRpb25Ib2xkZXJfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgewogICAgQ09SQkE6 OnJlbW92ZV9yZWYgKHRoaXMtPnB0cl8pOwogICAgRXhjZXB0aW9uSG9sZGVyKiB0bXAgPSBwLnB0 ciAoKTsKICAgIENPUkJBOjphZGRfcmVmICh0bXApOwogICAgdGhpcy0+cHRyXyA9IHRtcDsKICB9 CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfdmFy OjpvcGVyYXRvciBjb25zdCBNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlciogKCkgY29uc3QKewog IHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJf dmFyOjpvcGVyYXRvciBNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlciogKCkKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXIqCk1lc3NhZ2lu Zzo6RXhjZXB0aW9uSG9sZGVyX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVy biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXIqCk1lc3Nh Z2luZzo6RXhjZXB0aW9uSG9sZGVyX3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhp cy0+cHRyXzsKfQoKaW5saW5lIE1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyKiAmCk1lc3NhZ2lu Zzo6RXhjZXB0aW9uSG9sZGVyX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRy XzsKfQoKaW5saW5lIE1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyKiAmCk1lc3NhZ2luZzo6RXhj ZXB0aW9uSG9sZGVyX3Zhcjo6b3V0ICh2b2lkKQp7CiAgQ09SQkE6OnJlbW92ZV9yZWYgKHRoaXMt PnB0cl8pOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg TWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXIqCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX3Zh cjo6X3JldG4gKHZvaWQpCnsKCiAgRXhjZXB0aW9uSG9sZGVyKiB0bXAgPSB0aGlzLT5wdHJfOwog IHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KIyAxNzM0ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lCk1l c3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX291dDo6RXhjZXB0aW9uSG9sZGVyX291dCAoRXhjZXB0 aW9uSG9sZGVyKiAmcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5l Ck1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX291dDo6RXhjZXB0aW9uSG9sZGVyX291dCAoRXhj ZXB0aW9uSG9sZGVyX3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgQ09SQkE6OnJlbW92 ZV9yZWYgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKTWVzc2FnaW5n OjpFeGNlcHRpb25Ib2xkZXJfb3V0OjpFeGNlcHRpb25Ib2xkZXJfb3V0IChjb25zdCBFeGNlcHRp b25Ib2xkZXJfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxFeGNlcHRpb25Ib2xkZXJfb3V0 Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfb3V0ICYK TWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IEV4Y2VwdGlv bkhvbGRlcl9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3RfY2FzdDxFeGNlcHRpb25Ib2xk ZXJfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpF eGNlcHRpb25Ib2xkZXJfb3V0ICYKTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfb3V0OjpvcGVy YXRvcj0gKGNvbnN0IEV4Y2VwdGlvbkhvbGRlcl92YXIgJnApCnsKICBFeGNlcHRpb25Ib2xkZXIq IHRtcCA9IHAucHRyICgpOwogIENPUkJBOjphZGRfcmVmICh0bXApOwogIHRoaXMtPnB0cl8gPSB0 bXA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJf b3V0ICYKTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfb3V0OjpvcGVyYXRvcj0gKEV4Y2VwdGlv bkhvbGRlciogcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l Ck1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX291dDo6b3BlcmF0b3IgTWVzc2FnaW5nOjpFeGNl cHRpb25Ib2xkZXIqICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBNZXNzYWdp bmc6OkV4Y2VwdGlvbkhvbGRlciogJgpNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlcl9vdXQ6OnB0 ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpFeGNl cHRpb25Ib2xkZXIqCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX291dDo6b3BlcmF0b3ItPiAo dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CiMgMTgwMiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmkiCmlubGluZSBNZXNz YWdpbmc6OlJlcGx5SGFuZGxlcl9wdHIKdGFvX01lc3NhZ2luZ19SZXBseUhhbmRsZXJfZHVwbGlj YXRlICgKICAgIE1lc3NhZ2luZzo6UmVwbHlIYW5kbGVyX3B0ciBwCiAgKQp7CiAgcmV0dXJuIE1l c3NhZ2luZzo6UmVwbHlIYW5kbGVyOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFv X01lc3NhZ2luZ19SZXBseUhhbmRsZXJfcmVsZWFzZSAoCiAgICBNZXNzYWdpbmc6OlJlcGx5SGFu ZGxlcl9wdHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIE1lc3NhZ2lu Zzo6UmVwbHlIYW5kbGVyX3B0cgp0YW9fTWVzc2FnaW5nX1JlcGx5SGFuZGxlcl9uaWwgKAogICAg dm9pZAogICkKewogIHJldHVybiBNZXNzYWdpbmc6OlJlcGx5SGFuZGxlcjo6X25pbCAoKTsKfQoK aW5saW5lIE1lc3NhZ2luZzo6UmVwbHlIYW5kbGVyX3B0cgp0YW9fTWVzc2FnaW5nX1JlcGx5SGFu ZGxlcl9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVu dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBNZXNzYWdp bmc6OlJlcGx5SGFuZGxlcjo6X25hcnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX01lc3NhZ2luZ19SZXBseUhhbmRs ZXJfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIE1lc3NhZ2luZzo6UmVwbHlIYW5kbGVy ICoqdG1wID0KICAgIHN0YXRpY19jYXN0PE1lc3NhZ2luZzo6UmVwbHlIYW5kbGVyICoqPiAoc3Jj KTsKICByZXR1cm4gKnRtcDsKfQoKaW5saW5lCk1lc3NhZ2luZzo6UmVwbHlIYW5kbGVyOjpSZXBs eUhhbmRsZXIgKAogICAgVEFPX1N0dWIgKm9ianJlZiwKICAgIENPUkJBOjpCb29sZWFuIF90YW9f Y29sbG9jYXRlZCwKICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAqc2VydmFudAogICkKICA6 IENPUkJBX09iamVjdCAob2JqcmVmLCBfdGFvX2NvbGxvY2F0ZWQsIHNlcnZhbnQpCnsKICB0aGlz LT5NZXNzYWdpbmdfUmVwbHlIYW5kbGVyX3NldHVwX2NvbGxvY2F0aW9uIChfdGFvX2NvbGxvY2F0 ZWQpOwp9CiMgMTg2MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9NZXNzYWdpbmdDLmkiCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChU QU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2UgJl90YW9f YWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUubWluKSAmJgog ICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUubWF4KQogICkKICAgIHJldHVybiAxOwogIGVsc2UK ICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19J bnB1dENEUiAmc3RybSwgTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlICZfdGFvX2FnZ3JlZ2F0ZSkK ewogIGlmICgKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLm1pbikgJiYKICAgIChzdHJtID4+ IF90YW9fYWdncmVnYXRlLm1heCkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4g MDsKCn0KCgoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENE UiAmc3RybSwgY29uc3QgTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlICZfdGFvX2FnZ3JlZ2F0 ZSkKewogIGlmICgKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLm1pbikgJiYKICAgIChzdHJt IDw8IF90YW9fYWdncmVnYXRlLm1heCkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1 cm4gMDsKCn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIg JnN0cm0sIE1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZSAmX3Rhb19hZ2dyZWdhdGUpCnsKICBp ZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5taW4pICYmCiAgICAoc3RybSA+PiBfdGFv X2FnZ3JlZ2F0ZS5tYXgpCiAgKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9 CgoKCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwK ICAgIGNvbnN0IE1lc3NhZ2luZzo6UG9saWN5VmFsdWU6Ol90YW9fc2VxX09jdGV0ICYKICApOwpD T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgTWVzc2Fn aW5nOjpQb2xpY3lWYWx1ZTo6X3Rhb19zZXFfT2N0ZXQgJgogICk7CgoKCmlubGluZSBDT1JCQTo6 Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBNZXNzYWdpbmc6 OlBvbGljeVZhbHVlICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtIDw8IF90YW9f YWdncmVnYXRlLnB0eXBlKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUucHZhbHVlKQog ICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpC b29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwgTWVzc2FnaW5nOjpQb2xpY3lW YWx1ZSAmX3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0 ZS5wdHlwZSkgJiYKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLnB2YWx1ZSkKICApCiAgICBy ZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVy YXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IE1lc3NhZ2luZzo6UG9saWN5 VmFsdWVTZXEgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0 Q0RSICYsCiAgICBNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxICYKICApOwoKCgoKCmlubGluZSBD T1JCQTo6Qm9vbGVhbgpvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBNZXNz YWdpbmc6OkV4Y2VwdGlvbkhvbGRlciAqX3Rhb192YWx1ZXR5cGUpCnsKICByZXR1cm4gQ09SQkFf VmFsdWVCYXNlOjpfdGFvX21hcnNoYWwgKHN0cm0sCiAgICBjb25zdF9jYXN0PE1lc3NhZ2luZzo6 RXhjZXB0aW9uSG9sZGVyKj4gKF90YW9fdmFsdWV0eXBlKSwKICAgIChwdHJfYXJpdGhfdCkgJk1l c3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyOjpfZG93bmNhc3QpOwp9CgppbmxpbmUgQ09SQkE6OkJv b2xlYW4Kb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBNZXNzYWdpbmc6OkV4Y2VwdGlv bkhvbGRlciAqJl90YW9fdmFsdWV0eXBlKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6RXhjZXB0aW9u SG9sZGVyOjpfdGFvX3VubWFyc2hhbCAoc3RybSwgX3Rhb192YWx1ZXR5cGUpOwp9CgppbmxpbmUg Q09SQkE6OkJvb2xlYW4KT0JWX01lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyOjpfdGFvX21hcnNo YWxfc3RhdGUgKFRBT19PdXRwdXRDRFIgJnN0cm0pCnsKICBpZiAoCiAgICAoc3RybSA8PCBDT1JC QTo6QW55Ojpmcm9tX2Jvb2xlYW4gKF9wZF9pc19zeXN0ZW1fZXhjZXB0aW9uKSkgJiYKICAgIChz dHJtIDw8IENPUkJBOjpBbnk6OmZyb21fYm9vbGVhbiAoX3BkX2J5dGVfb3JkZXIpKSAmJgogICAg KHN0cm0gPDwgX3BkX21hcnNoYWxlZF9leGNlcHRpb24pCiAgKQogICAgcmV0dXJuIDE7CiAgZWxz ZQogICAgcmV0dXJuIDA7Cgp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KT0JWX01lc3NhZ2luZzo6 RXhjZXB0aW9uSG9sZGVyOjpfdGFvX3VubWFyc2hhbF9zdGF0ZSAoVEFPX0lucHV0Q0RSICZzdHJt KQp7CiAgaWYgKAogICAgKHN0cm0gPj4gQ09SQkE6OkFueTo6dG9fYm9vbGVhbiAoX3BkX2lzX3N5 c3RlbV9leGNlcHRpb24pKSAmJgogICAgKHN0cm0gPj4gQ09SQkE6OkFueTo6dG9fYm9vbGVhbiAo X3BkX2J5dGVfb3JkZXIpKSAmJgogICAgKHN0cm0gPj4gX3BkX21hcnNoYWxlZF9leGNlcHRpb24p CiAgKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgpDT1JCQTo6Qm9vbGVh bgpvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IE1lc3NhZ2luZzo6 UmVwbHlIYW5kbGVyX3B0cgogICk7CkNPUkJBOjpCb29sZWFuCm9wZXJhdG9yPj4gKAogICAgVEFP X0lucHV0Q0RSICYsCiAgICBNZXNzYWdpbmc6OlJlcGx5SGFuZGxlcl9wdHIgJgogICk7CiMgMjg2 MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNz YWdpbmdDLmgiIDIKIyAyODcxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMjg3MiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiIDIKIyAzNSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUlu dGVyY2VwdG9yQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9DdXJyZW50Qy5oIiAxCiMgMzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIgMgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5o IiAxCiMgMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIgMgojIDYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCm5hbWVz cGFjZSBQb3J0YWJsZUludGVyY2VwdG9yCnsKCgoKCiAgY2xhc3MgSW50ZXJjZXB0b3I7CiAgdHlw ZWRlZiBJbnRlcmNlcHRvciAqSW50ZXJjZXB0b3JfcHRyOwoKCgoKCgoKICBjbGFzcyBJbnRlcmNl cHRvcl92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIEludGVyY2Vw dG9yX3ZhciAodm9pZCk7CiAgICBJbnRlcmNlcHRvcl92YXIgKEludGVyY2VwdG9yX3B0ciBwKSA6 IHB0cl8gKHApIHt9CiAgICBJbnRlcmNlcHRvcl92YXIgKGNvbnN0IEludGVyY2VwdG9yX3ZhciAm KTsKICAgIH5JbnRlcmNlcHRvcl92YXIgKHZvaWQpOwoKICAgIEludGVyY2VwdG9yX3ZhciAmb3Bl cmF0b3I9IChJbnRlcmNlcHRvcl9wdHIpOwogICAgSW50ZXJjZXB0b3JfdmFyICZvcGVyYXRvcj0g KGNvbnN0IEludGVyY2VwdG9yX3ZhciAmKTsKICAgIEludGVyY2VwdG9yX3B0ciBvcGVyYXRvci0+ ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBJbnRlcmNlcHRvcl9wdHIgJigpIGNv bnN0OwogICAgb3BlcmF0b3IgSW50ZXJjZXB0b3JfcHRyICYoKTsKCiAgICBJbnRlcmNlcHRvcl9w dHIgaW4gKHZvaWQpIGNvbnN0OwogICAgSW50ZXJjZXB0b3JfcHRyICZpbm91dCAodm9pZCk7CiAg ICBJbnRlcmNlcHRvcl9wdHIgJm91dCAodm9pZCk7CiAgICBJbnRlcmNlcHRvcl9wdHIgX3JldG4g KHZvaWQpOwogICAgSW50ZXJjZXB0b3JfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0 aWMgSW50ZXJjZXB0b3JfcHRyIGR1cGxpY2F0ZSAoSW50ZXJjZXB0b3JfcHRyKTsKICAgIHN0YXRp YyB2b2lkIHJlbGVhc2UgKEludGVyY2VwdG9yX3B0cik7CiAgICBzdGF0aWMgSW50ZXJjZXB0b3Jf cHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgSW50ZXJjZXB0b3JfcHRyIG5hcnJvdyAoQ09SQkE6 Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVj dCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIEludGVyY2VwdG9yX3B0ciBwdHJf OwoKICAgIEludGVyY2VwdG9yX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgSW50 ZXJjZXB0b3JfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9Owoj IDExOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q b3J0YWJsZUludGVyY2VwdG9yQy5oIgogIGNsYXNzIEludGVyY2VwdG9yX291dAogIHsKICBwdWJs aWM6CiAgICBJbnRlcmNlcHRvcl9vdXQgKEludGVyY2VwdG9yX3B0ciAmKTsKICAgIEludGVyY2Vw dG9yX291dCAoSW50ZXJjZXB0b3JfdmFyICYpOwogICAgSW50ZXJjZXB0b3Jfb3V0IChjb25zdCBJ bnRlcmNlcHRvcl9vdXQgJik7CiAgICBJbnRlcmNlcHRvcl9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg SW50ZXJjZXB0b3Jfb3V0ICYpOwogICAgSW50ZXJjZXB0b3Jfb3V0ICZvcGVyYXRvcj0gKGNvbnN0 IEludGVyY2VwdG9yX3ZhciAmKTsKICAgIEludGVyY2VwdG9yX291dCAmb3BlcmF0b3I9IChJbnRl cmNlcHRvcl9wdHIpOwogICAgb3BlcmF0b3IgSW50ZXJjZXB0b3JfcHRyICYoKTsKICAgIEludGVy Y2VwdG9yX3B0ciAmcHRyICh2b2lkKTsKICAgIEludGVyY2VwdG9yX3B0ciBvcGVyYXRvci0+ICh2 b2lkKTsKCiAgcHJpdmF0ZToKICAgIEludGVyY2VwdG9yX3B0ciAmcHRyXzsKICB9OwojIDE0MyAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJs ZUludGVyY2VwdG9yQy5oIgpjbGFzcyBJbnRlcmNlcHRvciA6IHB1YmxpYyB2aXJ0dWFsIENPUkJB X09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBJbnRlcmNlcHRvcl9wdHIgX3B0cl90 eXBlOwogICAgdHlwZWRlZiBJbnRlcmNlcHRvcl92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGlj IEludGVyY2VwdG9yX3B0ciBfZHVwbGljYXRlIChJbnRlcmNlcHRvcl9wdHIgb2JqKTsKICAgIHN0 YXRpYyBJbnRlcmNlcHRvcl9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIg b2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwog ICAgc3RhdGljIEludGVyY2VwdG9yX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09S QkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu dCAoKQogICAgICApOwogICAgc3RhdGljIEludGVyY2VwdG9yX3B0ciBfbmlsICh2b2lkKQogICAg ICB7CiAgICAgICAgcmV0dXJuIChJbnRlcmNlcHRvcl9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1 YWwgY2hhciAqIG5hbWUgKAoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSAoCgogICAgICApCiAgICAg IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9p ZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBj b25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90 ZWN0ZWQ6CiAgICBJbnRlcmNlcHRvciAoKTsKCiAgICB2aXJ0dWFsIH5JbnRlcmNlcHRvciAodm9p ZCk7CiAgcHJpdmF0ZToKICAgIEludGVyY2VwdG9yIChjb25zdCBJbnRlcmNlcHRvciAmKTsKICAg IHZvaWQgb3BlcmF0b3I9IChjb25zdCBJbnRlcmNlcHRvciAmKTsKICB9OwojIDIwMiAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVy Y2VwdG9yQy5oIgogIGNsYXNzIEZvcndhcmRSZXF1ZXN0IDogcHVibGljIENPUkJBOjpVc2VyRXhj ZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIENPUkJBOjpPYmplY3RfdmFyIGZvcndhcmQ7CiAgICBD T1JCQTo6Qm9vbGVhbiBwZXJtYW5lbnQ7CgogICAgRm9yd2FyZFJlcXVlc3QgKHZvaWQpOwoKCiAg ICBGb3J3YXJkUmVxdWVzdCAoY29uc3QgRm9yd2FyZFJlcXVlc3QgJik7CgoKICAgIH5Gb3J3YXJk UmVxdWVzdCAodm9pZCk7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZv aWQqKTsKCiAgICBGb3J3YXJkUmVxdWVzdCAmb3BlcmF0b3I9IChjb25zdCBGb3J3YXJkUmVxdWVz dCAmKTsKCiAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICB2aXJ0dWFsIHZvaWQg X3Rhb19lbmNvZGUgKAogICAgICAgIFRBT19PdXRwdXRDRFIgJiwKICAgICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJgogICAgICApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBfdGFvX2RlY29kZSAo CiAgICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAg ICAgKTsKCiAgICBzdGF0aWMgRm9yd2FyZFJlcXVlc3QgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2Vw dGlvbiAqKTsKCiAgICBGb3J3YXJkUmVxdWVzdCAoCiAgICAgICAgY29uc3QgQ09SQkE6Ok9iamVj dF9wdHIgX3Rhb19mb3J3YXJkLAogICAgICAgIENPUkJBOjpCb29sZWFuIF90YW9fcGVybWFuZW50 CiAgICAgICk7CgoKICAgIHN0YXRpYyBDT1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwog ICAgdmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsKICB9OwoK ICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRm9yd2FyZFJlcXVlc3Q7CgoKCgogIHR5 cGVkZWYgQ09SQkE6OlNob3J0IFJlcGx5U3RhdHVzOwogIHR5cGVkZWYgQ09SQkE6OlNob3J0X291 dCBSZXBseVN0YXR1c19vdXQ7CiAgICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUmVw bHlTdGF0dXM7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgU1VDQ0VTU0ZVTDsKCiAgZXh0 ZXJuIGNvbnN0IENPUkJBOjpTaG9ydCBTWVNURU1fRVhDRVBUSU9OOwoKICBleHRlcm4gY29uc3Qg Q09SQkE6OlNob3J0IFVTRVJfRVhDRVBUSU9OOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlNob3J0 IExPQ0FUSU9OX0ZPUldBUkQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgTE9DQVRJT05f Rk9SV0FSRF9QRVJNQU5FTlQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgVFJBTlNQT1JU X1JFVFJZOwoKICB0eXBlZGVmIENPUkJBOjpVTG9uZyBTbG90SWQ7CiAgdHlwZWRlZiBDT1JCQTo6 VUxvbmdfb3V0IFNsb3RJZF9vdXQ7CiAgICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf U2xvdElkOwoKCgoKCiAgY2xhc3MgSW52YWxpZFNsb3QgOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNl cHRpb24KICB7CiAgcHVibGljOgoKICAgIEludmFsaWRTbG90ICh2b2lkKTsKCgogICAgSW52YWxp ZFNsb3QgKGNvbnN0IEludmFsaWRTbG90ICYpOwoKCiAgICB+SW52YWxpZFNsb3QgKHZvaWQpOwoK CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgSW52YWxp ZFNsb3QgJm9wZXJhdG9yPSAoY29uc3QgSW52YWxpZFNsb3QgJik7CgogICAgdmlydHVhbCB2b2lk IF9yYWlzZSAodm9pZCk7CgogICAgdmlydHVhbCB2b2lkIF90YW9fZW5jb2RlICgKICAgICAgICBU QU9fT3V0cHV0Q0RSICYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgKSBjb25z dDsKCiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgIFRBT19JbnB1dENEUiAm LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICk7CgogICAgc3RhdGljIEludmFs aWRTbG90ICpfZG93bmNhc3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAgICBzdGF0aWMgQ09S QkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIHZpcnR1YWwgQ09SQkE6OlR5cGVDb2Rl X3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7CiAgfTsKCiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9w dHIgX3RjX0ludmFsaWRTbG90OwojIDMyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5oIgogIGNsYXNzIEN1cnJl bnQ7CiAgdHlwZWRlZiBDdXJyZW50ICpDdXJyZW50X3B0cjsKCgoKCgoKCiAgY2xhc3MgQ3VycmVu dF92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIEN1cnJlbnRfdmFy ICh2b2lkKTsKICAgIEN1cnJlbnRfdmFyIChDdXJyZW50X3B0ciBwKSA6IHB0cl8gKHApIHt9CiAg ICBDdXJyZW50X3ZhciAoY29uc3QgQ3VycmVudF92YXIgJik7CiAgICB+Q3VycmVudF92YXIgKHZv aWQpOwoKICAgIEN1cnJlbnRfdmFyICZvcGVyYXRvcj0gKEN1cnJlbnRfcHRyKTsKICAgIEN1cnJl bnRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEN1cnJlbnRfdmFyICYpOwogICAgQ3VycmVudF9wdHIg b3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgQ3VycmVudF9wdHIg JigpIGNvbnN0OwogICAgb3BlcmF0b3IgQ3VycmVudF9wdHIgJigpOwoKICAgIEN1cnJlbnRfcHRy IGluICh2b2lkKSBjb25zdDsKICAgIEN1cnJlbnRfcHRyICZpbm91dCAodm9pZCk7CiAgICBDdXJy ZW50X3B0ciAmb3V0ICh2b2lkKTsKICAgIEN1cnJlbnRfcHRyIF9yZXRuICh2b2lkKTsKICAgIEN1 cnJlbnRfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgQ3VycmVudF9wdHIgZHVw bGljYXRlIChDdXJyZW50X3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChDdXJyZW50X3B0 cik7CiAgICBzdGF0aWMgQ3VycmVudF9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBDdXJyZW50 X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAg c3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBD dXJyZW50X3B0ciBwdHJfOwoKICAgIEN1cnJlbnRfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJo cyk7CiAgICBDdXJyZW50X3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7 CiAgfTsKIyAzNzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKICBjbGFzcyBDdXJyZW50X291dAogIHsKICBw dWJsaWM6CiAgICBDdXJyZW50X291dCAoQ3VycmVudF9wdHIgJik7CiAgICBDdXJyZW50X291dCAo Q3VycmVudF92YXIgJik7CiAgICBDdXJyZW50X291dCAoY29uc3QgQ3VycmVudF9vdXQgJik7CiAg ICBDdXJyZW50X291dCAmb3BlcmF0b3I9IChjb25zdCBDdXJyZW50X291dCAmKTsKICAgIEN1cnJl bnRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IEN1cnJlbnRfdmFyICYpOwogICAgQ3VycmVudF9vdXQg Jm9wZXJhdG9yPSAoQ3VycmVudF9wdHIpOwogICAgb3BlcmF0b3IgQ3VycmVudF9wdHIgJigpOwog ICAgQ3VycmVudF9wdHIgJnB0ciAodm9pZCk7CiAgICBDdXJyZW50X3B0ciBvcGVyYXRvci0+ICh2 b2lkKTsKCiAgcHJpdmF0ZToKICAgIEN1cnJlbnRfcHRyICZwdHJfOwogIH07CiMgMzk2ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50 ZXJjZXB0b3JDLmgiCmNsYXNzIEN1cnJlbnQ6IHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpDdXJyZW50 CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIEN1cnJlbnRfcHRyIF9wdHJfdHlwZTsKICAgIHR5 cGVkZWYgQ3VycmVudF92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIEN1cnJlbnRfcHRyIF9k dXBsaWNhdGUgKEN1cnJlbnRfcHRyIG9iaik7CiAgICBzdGF0aWMgQ3VycmVudF9wdHIgX25hcnJv dyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9u bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVm YXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIEN1cnJlbnRfcHRyIF91bmNo ZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgQ3VycmVu dF9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoQ3VycmVudF9wdHIpMDsK ICAgICAgfQoKICAgIHZpcnR1YWwgQ09SQkE6OkFueSAqIGdldF9zbG90ICgKICAgICAgICBQb3J0 YWJsZUludGVyY2VwdG9yOjpTbG90SWQgaWQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u LCBQb3J0YWJsZUludGVyY2VwdG9yOjpJbnZhbGlkU2xvdCApID0gMDsKCgoKCiAgICB2aXJ0dWFs IHZvaWQgc2V0X3Nsb3QgKAogICAgICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNsb3RJZCBpZCwK ICAgICAgICBjb25zdCBDT1JCQTo6QW55ICYgZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24sIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkludmFsaWRTbG90ICkgPSAwOwoKCgoKICAgIHZp cnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAg dmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0 OwoKICBwcm90ZWN0ZWQ6CiAgICBDdXJyZW50ICgpOwoKICAgIHZpcnR1YWwgfkN1cnJlbnQgKHZv aWQpOwogIHByaXZhdGU6CiAgICBDdXJyZW50IChjb25zdCBDdXJyZW50ICYpOwogICAgdm9pZCBv cGVyYXRvcj0gKGNvbnN0IEN1cnJlbnQgJik7CiAgfTsKIyA0NjIgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIK ICBjbGFzcyBSZXF1ZXN0SW5mbzsKICB0eXBlZGVmIFJlcXVlc3RJbmZvICpSZXF1ZXN0SW5mb19w dHI7CgoKCgoKCgogIGNsYXNzIFJlcXVlc3RJbmZvX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIK ICB7CiAgcHVibGljOgogICAgUmVxdWVzdEluZm9fdmFyICh2b2lkKTsKICAgIFJlcXVlc3RJbmZv X3ZhciAoUmVxdWVzdEluZm9fcHRyIHApIDogcHRyXyAocCkge30KICAgIFJlcXVlc3RJbmZvX3Zh ciAoY29uc3QgUmVxdWVzdEluZm9fdmFyICYpOwogICAgflJlcXVlc3RJbmZvX3ZhciAodm9pZCk7 CgogICAgUmVxdWVzdEluZm9fdmFyICZvcGVyYXRvcj0gKFJlcXVlc3RJbmZvX3B0cik7CiAgICBS ZXF1ZXN0SW5mb192YXIgJm9wZXJhdG9yPSAoY29uc3QgUmVxdWVzdEluZm9fdmFyICYpOwogICAg UmVxdWVzdEluZm9fcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNv bnN0IFJlcXVlc3RJbmZvX3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBSZXF1ZXN0SW5mb19w dHIgJigpOwoKICAgIFJlcXVlc3RJbmZvX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBSZXF1ZXN0 SW5mb19wdHIgJmlub3V0ICh2b2lkKTsKICAgIFJlcXVlc3RJbmZvX3B0ciAmb3V0ICh2b2lkKTsK ICAgIFJlcXVlc3RJbmZvX3B0ciBfcmV0biAodm9pZCk7CiAgICBSZXF1ZXN0SW5mb19wdHIgcHRy ICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBSZXF1ZXN0SW5mb19wdHIgZHVwbGljYXRlIChS ZXF1ZXN0SW5mb19wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoUmVxdWVzdEluZm9fcHRy KTsKICAgIHN0YXRpYyBSZXF1ZXN0SW5mb19wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBSZXF1 ZXN0SW5mb19wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAm KTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRl OgogICAgUmVxdWVzdEluZm9fcHRyIHB0cl87CgogICAgUmVxdWVzdEluZm9fdmFyIChjb25zdCBU QU9fQmFzZV92YXIgJnJocyk7CiAgICBSZXF1ZXN0SW5mb192YXIgJm9wZXJhdG9yPSAoY29uc3Qg VEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgNTE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3Mg UmVxdWVzdEluZm9fb3V0CiAgewogIHB1YmxpYzoKICAgIFJlcXVlc3RJbmZvX291dCAoUmVxdWVz dEluZm9fcHRyICYpOwogICAgUmVxdWVzdEluZm9fb3V0IChSZXF1ZXN0SW5mb192YXIgJik7CiAg ICBSZXF1ZXN0SW5mb19vdXQgKGNvbnN0IFJlcXVlc3RJbmZvX291dCAmKTsKICAgIFJlcXVlc3RJ bmZvX291dCAmb3BlcmF0b3I9IChjb25zdCBSZXF1ZXN0SW5mb19vdXQgJik7CiAgICBSZXF1ZXN0 SW5mb19vdXQgJm9wZXJhdG9yPSAoY29uc3QgUmVxdWVzdEluZm9fdmFyICYpOwogICAgUmVxdWVz dEluZm9fb3V0ICZvcGVyYXRvcj0gKFJlcXVlc3RJbmZvX3B0cik7CiAgICBvcGVyYXRvciBSZXF1 ZXN0SW5mb19wdHIgJigpOwogICAgUmVxdWVzdEluZm9fcHRyICZwdHIgKHZvaWQpOwogICAgUmVx dWVzdEluZm9fcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgUmVxdWVzdElu Zm9fcHRyICZwdHJfOwogIH07CiMgNTM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCmNsYXNzIFJlcXVlc3RJ bmZvIDogcHVibGljIHZpcnR1YWwgQ09SQkFfT2JqZWN0CiAgewogIHB1YmxpYzoKCiAgICB0eXBl ZGVmIFJlcXVlc3RJbmZvX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFJlcXVlc3RJbmZvX3Zh ciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgUmVxdWVzdEluZm9fcHRyIF9kdXBsaWNhdGUgKFJl cXVlc3RJbmZvX3B0ciBvYmopOwogICAgc3RhdGljIFJlcXVlc3RJbmZvX3B0ciBfbmFycm93ICgK ICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0 X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVxdWVzdEluZm9fcHRyIF91bmNo ZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVxdWVz dEluZm9fcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKFJlcXVlc3RJbmZv X3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBDT1JCQTo6VUxvbmcgcmVxdWVzdF9pZCAoCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhy b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBjaGFyICog b3BlcmF0aW9uICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAg ICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2 aXJ0dWFsIER5bmFtaWM6OlBhcmFtZXRlckxpc3QgKiBhcmd1bWVudHMgKAogICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6 OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgRHluYW1pYzo6RXhjZXB0aW9u TGlzdCAqIGV4Y2VwdGlvbnMgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu dCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsK CgoKICAgIHZpcnR1YWwgRHluYW1pYzo6Q29udGV4dExpc3QgKiBjb250ZXh0cyAoCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD T1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBEeW5hbWljOjpSZXF1 ZXN0Q29udGV4dCAqIG9wZXJhdGlvbl9jb250ZXh0ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpBbnkgKiByZXN1bHQgKAogICAgICAg IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICgg Q09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgQ09SQkE6OkJvb2xl YW4gcmVzcG9uc2VfZXhwZWN0ZWQgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0g MDsKCgoKCgogICAgdmlydHVhbCBNZXNzYWdpbmc6OlN5bmNTY29wZSBzeW5jX3Njb3BlICgKICAg ICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg PQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJv dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgUG9ydGFi bGVJbnRlcmNlcHRvcjo6UmVwbHlTdGF0dXMgcmVwbHlfc3RhdHVzICgKICAgICAgICBDT1JCQTo6 RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAg VEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpT eXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIGZv cndhcmRfcmVmZXJlbmNlICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoK CiAgICB2aXJ0dWFsIENPUkJBOjpBbnkgKiBnZXRfc2xvdCAoCiAgICAgICAgUG9ydGFibGVJbnRl cmNlcHRvcjo6U2xvdElkIGlkLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu dCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUG9ydGFi bGVJbnRlcmNlcHRvcjo6SW52YWxpZFNsb3QgKSA9IDA7CgoKCgogICAgdmlydHVhbCBJT1A6OlNl cnZpY2VDb250ZXh0ICogZ2V0X3JlcXVlc3Rfc2VydmljZV9jb250ZXh0ICgKICAgICAgICBJT1A6 OlNlcnZpY2VJZCBpZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK ICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAg ICB2aXJ0dWFsIElPUDo6U2VydmljZUNvbnRleHQgKiBnZXRfcmVwbHlfc2VydmljZV9jb250ZXh0 ICgKICAgICAgICBJT1A6OlNlcnZpY2VJZCBpZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRf ZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRp b24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9h cml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0 b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgUmVxdWVzdEluZm8gKCk7Cgog ICAgdmlydHVhbCB+UmVxdWVzdEluZm8gKHZvaWQpOwogIHByaXZhdGU6CiAgICBSZXF1ZXN0SW5m byAoY29uc3QgUmVxdWVzdEluZm8gJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUmVxdWVz dEluZm8gJik7CiAgfTsKIyA3MDMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKICBjbGFzcyBDbGllbnRSZXF1 ZXN0SW5mbzsKICB0eXBlZGVmIENsaWVudFJlcXVlc3RJbmZvICpDbGllbnRSZXF1ZXN0SW5mb19w dHI7CgoKCgoKCgogIGNsYXNzIENsaWVudFJlcXVlc3RJbmZvX3ZhciA6IHB1YmxpYyBUQU9fQmFz ZV92YXIKICB7CiAgcHVibGljOgogICAgQ2xpZW50UmVxdWVzdEluZm9fdmFyICh2b2lkKTsKICAg IENsaWVudFJlcXVlc3RJbmZvX3ZhciAoQ2xpZW50UmVxdWVzdEluZm9fcHRyIHApIDogcHRyXyAo cCkge30KICAgIENsaWVudFJlcXVlc3RJbmZvX3ZhciAoY29uc3QgQ2xpZW50UmVxdWVzdEluZm9f dmFyICYpOwogICAgfkNsaWVudFJlcXVlc3RJbmZvX3ZhciAodm9pZCk7CgogICAgQ2xpZW50UmVx dWVzdEluZm9fdmFyICZvcGVyYXRvcj0gKENsaWVudFJlcXVlc3RJbmZvX3B0cik7CiAgICBDbGll bnRSZXF1ZXN0SW5mb192YXIgJm9wZXJhdG9yPSAoY29uc3QgQ2xpZW50UmVxdWVzdEluZm9fdmFy ICYpOwogICAgQ2xpZW50UmVxdWVzdEluZm9fcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoK ICAgIG9wZXJhdG9yIGNvbnN0IENsaWVudFJlcXVlc3RJbmZvX3B0ciAmKCkgY29uc3Q7CiAgICBv cGVyYXRvciBDbGllbnRSZXF1ZXN0SW5mb19wdHIgJigpOwoKICAgIENsaWVudFJlcXVlc3RJbmZv X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBDbGllbnRSZXF1ZXN0SW5mb19wdHIgJmlub3V0ICh2 b2lkKTsKICAgIENsaWVudFJlcXVlc3RJbmZvX3B0ciAmb3V0ICh2b2lkKTsKICAgIENsaWVudFJl cXVlc3RJbmZvX3B0ciBfcmV0biAodm9pZCk7CiAgICBDbGllbnRSZXF1ZXN0SW5mb19wdHIgcHRy ICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBDbGllbnRSZXF1ZXN0SW5mb19wdHIgZHVwbGlj YXRlIChDbGllbnRSZXF1ZXN0SW5mb19wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoQ2xp ZW50UmVxdWVzdEluZm9fcHRyKTsKICAgIHN0YXRpYyBDbGllbnRSZXF1ZXN0SW5mb19wdHIgbmls ICh2b2lkKTsKICAgIHN0YXRpYyBDbGllbnRSZXF1ZXN0SW5mb19wdHIgbmFycm93IChDT1JCQTo6 T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0 ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgQ2xpZW50UmVxdWVzdEluZm9fcHRy IHB0cl87CgogICAgQ2xpZW50UmVxdWVzdEluZm9fdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJo cyk7CiAgICBDbGllbnRSZXF1ZXN0SW5mb192YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2Vf dmFyICZyaHMpOwogIH07CiMgNzU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgQ2xpZW50UmVx dWVzdEluZm9fb3V0CiAgewogIHB1YmxpYzoKICAgIENsaWVudFJlcXVlc3RJbmZvX291dCAoQ2xp ZW50UmVxdWVzdEluZm9fcHRyICYpOwogICAgQ2xpZW50UmVxdWVzdEluZm9fb3V0IChDbGllbnRS ZXF1ZXN0SW5mb192YXIgJik7CiAgICBDbGllbnRSZXF1ZXN0SW5mb19vdXQgKGNvbnN0IENsaWVu dFJlcXVlc3RJbmZvX291dCAmKTsKICAgIENsaWVudFJlcXVlc3RJbmZvX291dCAmb3BlcmF0b3I9 IChjb25zdCBDbGllbnRSZXF1ZXN0SW5mb19vdXQgJik7CiAgICBDbGllbnRSZXF1ZXN0SW5mb19v dXQgJm9wZXJhdG9yPSAoY29uc3QgQ2xpZW50UmVxdWVzdEluZm9fdmFyICYpOwogICAgQ2xpZW50 UmVxdWVzdEluZm9fb3V0ICZvcGVyYXRvcj0gKENsaWVudFJlcXVlc3RJbmZvX3B0cik7CiAgICBv cGVyYXRvciBDbGllbnRSZXF1ZXN0SW5mb19wdHIgJigpOwogICAgQ2xpZW50UmVxdWVzdEluZm9f cHRyICZwdHIgKHZvaWQpOwogICAgQ2xpZW50UmVxdWVzdEluZm9fcHRyIG9wZXJhdG9yLT4gKHZv aWQpOwoKICBwcml2YXRlOgogICAgQ2xpZW50UmVxdWVzdEluZm9fcHRyICZwdHJfOwogIH07CiMg Nzc5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv cnRhYmxlSW50ZXJjZXB0b3JDLmgiCmNsYXNzIENsaWVudFJlcXVlc3RJbmZvOiBwdWJsaWMgdmly dHVhbCBSZXF1ZXN0SW5mbwogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBDbGllbnRSZXF1ZXN0 SW5mb19wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBDbGllbnRSZXF1ZXN0SW5mb192YXIgX3Zh cl90eXBlOwoKCgogICAgc3RhdGljIENsaWVudFJlcXVlc3RJbmZvX3B0ciBfZHVwbGljYXRlIChD bGllbnRSZXF1ZXN0SW5mb19wdHIgb2JqKTsKICAgIHN0YXRpYyBDbGllbnRSZXF1ZXN0SW5mb19w dHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIENsaWVudFJl cXVlc3RJbmZvX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9w dHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAp OwogICAgc3RhdGljIENsaWVudFJlcXVlc3RJbmZvX3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAg ICAgICAgcmV0dXJuIChDbGllbnRSZXF1ZXN0SW5mb19wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1 YWwgQ09SQkE6Ok9iamVjdF9wdHIgdGFyZ2V0ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRf ZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRp b24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIGVmZmVjdGl2ZV90YXJn ZXQgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAg ICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwg SU9QOjpUYWdnZWRQcm9maWxlICogZWZmZWN0aXZlX3Byb2ZpbGUgKAogICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBU QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5 c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgQ09SQkE6OkFueSAqIHJlY2VpdmVk X2V4Y2VwdGlvbiAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAg ICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAg dmlydHVhbCBjaGFyICogcmVjZWl2ZWRfZXhjZXB0aW9uX2lkICgKICAgICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0 ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIElPUDo6VGFnZ2VkQ29tcG9uZW50ICog Z2V0X2VmZmVjdGl2ZV9jb21wb25lbnQgKAogICAgICAgIElPUDo6Q29tcG9uZW50SWQgaWQsCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhy b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBJT1A6OlRh Z2dlZENvbXBvbmVudFNlcSAqIGdldF9lZmZlY3RpdmVfY29tcG9uZW50cyAoCiAgICAgICAgSU9Q OjpDb21wb25lbnRJZCBpZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoK CiAgICB2aXJ0dWFsIENPUkJBOjpQb2xpY3lfcHRyIGdldF9yZXF1ZXN0X3BvbGljeSAoCiAgICAg ICAgQ09SQkE6OlBvbGljeVR5cGUgdHlwZSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24g KSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgYWRkX3JlcXVlc3Rfc2VydmljZV9jb250ZXh0ICgK ICAgICAgICBjb25zdCBJT1A6OlNlcnZpY2VDb250ZXh0ICYgc2VydmljZV9jb250ZXh0LAogICAg ICAgIENPUkJBOjpCb29sZWFuIHJlcGxhY2UsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u ICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJp dGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9y eV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgIENsaWVudFJlcXVlc3RJbmZvICgp OwoKICAgIHZpcnR1YWwgfkNsaWVudFJlcXVlc3RJbmZvICh2b2lkKTsKICBwcml2YXRlOgogICAg Q2xpZW50UmVxdWVzdEluZm8gKGNvbnN0IENsaWVudFJlcXVlc3RJbmZvICYpOwogICAgdm9pZCBv cGVyYXRvcj0gKGNvbnN0IENsaWVudFJlcXVlc3RJbmZvICYpOwogIH07CiMgOTAxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJj ZXB0b3JDLmgiCiAgY2xhc3MgU2VydmVyUmVxdWVzdEluZm87CiAgdHlwZWRlZiBTZXJ2ZXJSZXF1 ZXN0SW5mbyAqU2VydmVyUmVxdWVzdEluZm9fcHRyOwoKCgoKCgoKICBjbGFzcyBTZXJ2ZXJSZXF1 ZXN0SW5mb192YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFNlcnZl clJlcXVlc3RJbmZvX3ZhciAodm9pZCk7CiAgICBTZXJ2ZXJSZXF1ZXN0SW5mb192YXIgKFNlcnZl clJlcXVlc3RJbmZvX3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgICBTZXJ2ZXJSZXF1ZXN0SW5mb192 YXIgKGNvbnN0IFNlcnZlclJlcXVlc3RJbmZvX3ZhciAmKTsKICAgIH5TZXJ2ZXJSZXF1ZXN0SW5m b192YXIgKHZvaWQpOwoKICAgIFNlcnZlclJlcXVlc3RJbmZvX3ZhciAmb3BlcmF0b3I9IChTZXJ2 ZXJSZXF1ZXN0SW5mb19wdHIpOwogICAgU2VydmVyUmVxdWVzdEluZm9fdmFyICZvcGVyYXRvcj0g KGNvbnN0IFNlcnZlclJlcXVlc3RJbmZvX3ZhciAmKTsKICAgIFNlcnZlclJlcXVlc3RJbmZvX3B0 ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBTZXJ2ZXJSZXF1 ZXN0SW5mb19wdHIgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgU2VydmVyUmVxdWVzdEluZm9fcHRy ICYoKTsKCiAgICBTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgU2Vy dmVyUmVxdWVzdEluZm9fcHRyICZpbm91dCAodm9pZCk7CiAgICBTZXJ2ZXJSZXF1ZXN0SW5mb19w dHIgJm91dCAodm9pZCk7CiAgICBTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgX3JldG4gKHZvaWQpOwog ICAgU2VydmVyUmVxdWVzdEluZm9fcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMg U2VydmVyUmVxdWVzdEluZm9fcHRyIGR1cGxpY2F0ZSAoU2VydmVyUmVxdWVzdEluZm9fcHRyKTsK ICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFNlcnZlclJlcXVlc3RJbmZvX3B0cik7CiAgICBzdGF0 aWMgU2VydmVyUmVxdWVzdEluZm9fcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgU2VydmVyUmVx dWVzdEluZm9fcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQg Jik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0 ZToKICAgIFNlcnZlclJlcXVlc3RJbmZvX3B0ciBwdHJfOwoKICAgIFNlcnZlclJlcXVlc3RJbmZv X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgU2VydmVyUmVxdWVzdEluZm9fdmFy ICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDk1MyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVy Y2VwdG9yQy5oIgogIGNsYXNzIFNlcnZlclJlcXVlc3RJbmZvX291dAogIHsKICBwdWJsaWM6CiAg ICBTZXJ2ZXJSZXF1ZXN0SW5mb19vdXQgKFNlcnZlclJlcXVlc3RJbmZvX3B0ciAmKTsKICAgIFNl cnZlclJlcXVlc3RJbmZvX291dCAoU2VydmVyUmVxdWVzdEluZm9fdmFyICYpOwogICAgU2VydmVy UmVxdWVzdEluZm9fb3V0IChjb25zdCBTZXJ2ZXJSZXF1ZXN0SW5mb19vdXQgJik7CiAgICBTZXJ2 ZXJSZXF1ZXN0SW5mb19vdXQgJm9wZXJhdG9yPSAoY29uc3QgU2VydmVyUmVxdWVzdEluZm9fb3V0 ICYpOwogICAgU2VydmVyUmVxdWVzdEluZm9fb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFNlcnZlclJl cXVlc3RJbmZvX3ZhciAmKTsKICAgIFNlcnZlclJlcXVlc3RJbmZvX291dCAmb3BlcmF0b3I9IChT ZXJ2ZXJSZXF1ZXN0SW5mb19wdHIpOwogICAgb3BlcmF0b3IgU2VydmVyUmVxdWVzdEluZm9fcHRy ICYoKTsKICAgIFNlcnZlclJlcXVlc3RJbmZvX3B0ciAmcHRyICh2b2lkKTsKICAgIFNlcnZlclJl cXVlc3RJbmZvX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFNlcnZlclJl cXVlc3RJbmZvX3B0ciAmcHRyXzsKICB9OwojIDk3NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5oIgpjbGFzcyBT ZXJ2ZXJSZXF1ZXN0SW5mbzogcHVibGljIHZpcnR1YWwgUmVxdWVzdEluZm8KICB7CiAgcHVibGlj OgoKICAgIHR5cGVkZWYgU2VydmVyUmVxdWVzdEluZm9fcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVk ZWYgU2VydmVyUmVxdWVzdEluZm9fdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBTZXJ2ZXJS ZXF1ZXN0SW5mb19wdHIgX2R1cGxpY2F0ZSAoU2VydmVyUmVxdWVzdEluZm9fcHRyIG9iaik7CiAg ICBzdGF0aWMgU2VydmVyUmVxdWVzdEluZm9fcHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpP YmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK ICAgICAgKTsKICAgIHN0YXRpYyBTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgX3VuY2hlY2tlZF9uYXJy b3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBTZXJ2ZXJSZXF1ZXN0SW5m b19wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoU2VydmVyUmVxdWVzdElu Zm9fcHRyKTA7CiAgICAgIH0KCiAgICB2aXJ0dWFsIENPUkJBOjpBbnkgKiBzZW5kaW5nX2V4Y2Vw dGlvbiAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50 X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkK ICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVh bCBDT1JCQTo6T2N0ZXRTZXEgKiBvYmplY3RfaWQgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVu dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVs dF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2Vw dGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgQ09SQkE6Ok9jdGV0U2VxICogYWRhcHRlcl9pZCAo CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAg dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBjaGFy ICogdGFyZ2V0X21vc3RfZGVyaXZlZF9pbnRlcmZhY2UgKAogICAgICAgIENPUkJBOjpFbnZpcm9u bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVm YXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4 Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgQ09SQkE6OlBvbGljeV9wdHIgZ2V0X3NlcnZl cl9wb2xpY3kgKAogICAgICAgIENPUkJBOjpQb2xpY3lUeXBlIHR5cGUsCiAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6 U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkIHNldF9zbG90ICgKICAg ICAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpTbG90SWQgaWQsCiAgICAgICAgY29uc3QgQ09SQkE6 OkFueSAmIGRhdGEsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAg ICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZUludGVy Y2VwdG9yOjpJbnZhbGlkU2xvdCApID0gMDsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu IHRhcmdldF9pc19hICgKICAgICAgICBjb25zdCBjaGFyICogaWQsCiAgICAgICAgQ09SQkE6OkVu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lz dGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkIGFkZF9yZXBseV9zZXJ2aWNl X2NvbnRleHQgKAogICAgICAgIGNvbnN0IElPUDo6U2VydmljZUNvbnRleHQgJiBzZXJ2aWNlX2Nv bnRleHQsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVwbGFjZSwKICAgICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0 ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZh Y2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFj ZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgU2VydmVyUmVx dWVzdEluZm8gKCk7CgogICAgdmlydHVhbCB+U2VydmVyUmVxdWVzdEluZm8gKHZvaWQpOwogIHBy aXZhdGU6CiAgICBTZXJ2ZXJSZXF1ZXN0SW5mbyAoY29uc3QgU2VydmVyUmVxdWVzdEluZm8gJik7 CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgU2VydmVyUmVxdWVzdEluZm8gJik7CiAgfTsKIyAx MDkzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv cnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yOwog IHR5cGVkZWYgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yICpDbGllbnRSZXF1ZXN0SW50ZXJjZXB0 b3JfcHRyOwoKCgoKCgoKICBjbGFzcyBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyIDogcHVi bGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0 b3JfdmFyICh2b2lkKTsKICAgIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl92YXIgKENsaWVudFJl cXVlc3RJbnRlcmNlcHRvcl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgQ2xpZW50UmVxdWVzdElu dGVyY2VwdG9yX3ZhciAoY29uc3QgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3ZhciAmKTsKICAg IH5DbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICh2b2lkKTsKCiAgICBDbGllbnRSZXF1ZXN0 SW50ZXJjZXB0b3JfdmFyICZvcGVyYXRvcj0gKENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIp OwogICAgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDbGll bnRSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICYpOwogICAgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9y X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBDbGllbnRS ZXF1ZXN0SW50ZXJjZXB0b3JfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIENsaWVudFJlcXVl c3RJbnRlcmNlcHRvcl9wdHIgJigpOwoKICAgIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIg aW4gKHZvaWQpIGNvbnN0OwogICAgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0ciAmaW5vdXQg KHZvaWQpOwogICAgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0ciAmb3V0ICh2b2lkKTsKICAg IENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgX3JldG4gKHZvaWQpOwogICAgQ2xpZW50UmVx dWVzdEludGVyY2VwdG9yX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIENsaWVu dFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgZHVwbGljYXRlIChDbGllbnRSZXF1ZXN0SW50ZXJjZXB0 b3JfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKENsaWVudFJlcXVlc3RJbnRlcmNlcHRv cl9wdHIpOwogICAgc3RhdGljIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgbmlsICh2b2lk KTsKICAgIHN0YXRpYyBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIG5hcnJvdyAoQ09SQkE6 Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVj dCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIENsaWVudFJlcXVlc3RJbnRlcmNl cHRvcl9wdHIgcHRyXzsKCiAgICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyIChjb25zdCBU QU9fQmFzZV92YXIgJnJocyk7CiAgICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICZvcGVy YXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDExNDUgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRv ckMuaCIKICBjbGFzcyBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3Jfb3V0CiAgewogIHB1YmxpYzoK ICAgIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9vdXQgKENsaWVudFJlcXVlc3RJbnRlcmNlcHRv cl9wdHIgJik7CiAgICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3Jfb3V0IChDbGllbnRSZXF1ZXN0 SW50ZXJjZXB0b3JfdmFyICYpOwogICAgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX291dCAoY29u c3QgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX291dCAmKTsKICAgIENsaWVudFJlcXVlc3RJbnRl cmNlcHRvcl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX291 dCAmKTsKICAgIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg Q2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3ZhciAmKTsKICAgIENsaWVudFJlcXVlc3RJbnRlcmNl cHRvcl9vdXQgJm9wZXJhdG9yPSAoQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0cik7CiAgICBv cGVyYXRvciBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyICYoKTsKICAgIENsaWVudFJlcXVl c3RJbnRlcmNlcHRvcl9wdHIgJnB0ciAodm9pZCk7CiAgICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0 b3JfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgQ2xpZW50UmVxdWVzdElu dGVyY2VwdG9yX3B0ciAmcHRyXzsKICB9OwojIDExNjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKY2xhc3Mg Q2xpZW50UmVxdWVzdEludGVyY2VwdG9yOiBwdWJsaWMgdmlydHVhbCBJbnRlcmNlcHRvcgogIHsK ICBwdWJsaWM6CgogICAgdHlwZWRlZiBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIF9wdHJf dHlwZTsKICAgIHR5cGVkZWYgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3ZhciBfdmFyX3R5cGU7 CgoKCiAgICBzdGF0aWMgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0ciBfZHVwbGljYXRlIChD bGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIG9iaik7CiAgICBzdGF0aWMgQ2xpZW50UmVxdWVz dEludGVyY2VwdG9yX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmos CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBz dGF0aWMgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAg ICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9l bnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIENsaWVudFJlcXVlc3RJbnRlcmNlcHRv cl9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoQ2xpZW50UmVxdWVzdElu dGVyY2VwdG9yX3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCB2b2lkIHNlbmRfcmVxdWVzdCAo CiAgICAgICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVxdWVzdEluZm9fcHRyIHJpCgog ICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUG9ydGFibGVJbnRl cmNlcHRvcjo6Rm9yd2FyZFJlcXVlc3QgKSA9IDA7CgoKCgogICAgdmlydHVhbCB2b2lkIHNlbmRf cG9sbCAoCiAgICAgICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVxdWVzdEluZm9fcHRy IHJpCgogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsK CgoKICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlX3JlcGx5ICgKICAgICAgICBQb3J0YWJsZUludGVy Y2VwdG9yOjpDbGllbnRSZXF1ZXN0SW5mb19wdHIgcmkKCiAgICAgICkKICAgICAgdGhyb3cgKCBD T1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkIHJlY2VpdmVf ZXhjZXB0aW9uICgKICAgICAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1ZXN0SW5m b19wdHIgcmkKCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQ b3J0YWJsZUludGVyY2VwdG9yOjpGb3J3YXJkUmVxdWVzdCApID0gMDsKCgoKCiAgICB2aXJ0dWFs IHZvaWQgcmVjZWl2ZV9vdGhlciAoCiAgICAgICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50 UmVxdWVzdEluZm9fcHRyIHJpCgogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4 Y2VwdGlvbiwgUG9ydGFibGVJbnRlcmNlcHRvcjo6Rm9yd2FyZFJlcXVlc3QgKSA9IDA7CgoKCgog ICAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsK CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkg Y29uc3Q7CgogIHByb3RlY3RlZDoKICAgIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvciAoKTsKCiAg ICB2aXJ0dWFsIH5DbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3IgKHZvaWQpOwogIHByaXZhdGU6CiAg ICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3IgKGNvbnN0IENsaWVudFJlcXVlc3RJbnRlcmNlcHRv ciAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3Ig Jik7CiAgfTsKIyAxMjU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgU2VydmVyUmVxdWVzdElu dGVyY2VwdG9yOwogIHR5cGVkZWYgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yICpTZXJ2ZXJSZXF1 ZXN0SW50ZXJjZXB0b3JfcHRyOwoKCgoKCgoKICBjbGFzcyBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0 b3JfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBTZXJ2ZXJSZXF1 ZXN0SW50ZXJjZXB0b3JfdmFyICh2b2lkKTsKICAgIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl92 YXIgKFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgU2Vy dmVyUmVxdWVzdEludGVyY2VwdG9yX3ZhciAoY29uc3QgU2VydmVyUmVxdWVzdEludGVyY2VwdG9y X3ZhciAmKTsKICAgIH5TZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICh2b2lkKTsKCiAgICBT ZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICZvcGVyYXRvcj0gKFNlcnZlclJlcXVlc3RJbnRl cmNlcHRvcl9wdHIpOwogICAgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3ZhciAmb3BlcmF0b3I9 IChjb25zdCBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICYpOwogICAgU2VydmVyUmVxdWVz dEludGVyY2VwdG9yX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBj b25zdCBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9y IFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgJigpOwoKICAgIFNlcnZlclJlcXVlc3RJbnRl cmNlcHRvcl9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgU2VydmVyUmVxdWVzdEludGVyY2VwdG9y X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciAmb3V0 ICh2b2lkKTsKICAgIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgX3JldG4gKHZvaWQpOwog ICAgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAg c3RhdGljIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgZHVwbGljYXRlIChTZXJ2ZXJSZXF1 ZXN0SW50ZXJjZXB0b3JfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFNlcnZlclJlcXVl c3RJbnRlcmNlcHRvcl9wdHIpOwogICAgc3RhdGljIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9w dHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIG5h cnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMg Q09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFNlcnZlclJl cXVlc3RJbnRlcmNlcHRvcl9wdHIgcHRyXzsKCiAgICBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3Jf dmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0 b3JfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDEzMDkg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFi bGVJbnRlcmNlcHRvckMuaCIKICBjbGFzcyBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3Jfb3V0CiAg ewogIHB1YmxpYzoKICAgIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9vdXQgKFNlcnZlclJlcXVl c3RJbnRlcmNlcHRvcl9wdHIgJik7CiAgICBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3Jfb3V0IChT ZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICYpOwogICAgU2VydmVyUmVxdWVzdEludGVyY2Vw dG9yX291dCAoY29uc3QgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX291dCAmKTsKICAgIFNlcnZl clJlcXVlc3RJbnRlcmNlcHRvcl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgU2VydmVyUmVxdWVzdElu dGVyY2VwdG9yX291dCAmKTsKICAgIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9vdXQgJm9wZXJh dG9yPSAoY29uc3QgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3ZhciAmKTsKICAgIFNlcnZlclJl cXVlc3RJbnRlcmNlcHRvcl9vdXQgJm9wZXJhdG9yPSAoU2VydmVyUmVxdWVzdEludGVyY2VwdG9y X3B0cik7CiAgICBvcGVyYXRvciBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyICYoKTsKICAg IFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgJnB0ciAodm9pZCk7CiAgICBTZXJ2ZXJSZXF1 ZXN0SW50ZXJjZXB0b3JfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgU2Vy dmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciAmcHRyXzsKICB9OwojIDEzMzMgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRv ckMuaCIKY2xhc3MgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yOiBwdWJsaWMgdmlydHVhbCBJbnRl cmNlcHRvcgogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0 b3JfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3Zh ciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciBf ZHVwbGljYXRlIChTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIG9iaik7CiAgICBzdGF0aWMg U2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2Jq ZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAg ICAgICk7CiAgICBzdGF0aWMgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciBfdW5jaGVja2Vk X25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBU QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFNlcnZlclJlcXVl c3RJbnRlcmNlcHRvcl9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoU2Vy dmVyUmVxdWVzdEludGVyY2VwdG9yX3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCB2b2lkIHJl Y2VpdmVfcmVxdWVzdF9zZXJ2aWNlX2NvbnRleHRzICgKICAgICAgICBQb3J0YWJsZUludGVyY2Vw dG9yOjpTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgcmkKCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC QTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZUludGVyY2VwdG9yOjpGb3J3YXJkUmVxdWVzdCAp ID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZV9yZXF1ZXN0ICgKICAgICAgICBQb3J0 YWJsZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgcmkKCiAgICAgICkKICAgICAg dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZUludGVyY2VwdG9yOjpGb3J3 YXJkUmVxdWVzdCApID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgc2VuZF9yZXBseSAoCiAgICAg ICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6U2VydmVyUmVxdWVzdEluZm9fcHRyIHJpCgogICAgICAp CiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1 YWwgdm9pZCBzZW5kX2V4Y2VwdGlvbiAoCiAgICAgICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6U2Vy dmVyUmVxdWVzdEluZm9fcHRyIHJpCgogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl bUV4Y2VwdGlvbiwgUG9ydGFibGVJbnRlcmNlcHRvcjo6Rm9yd2FyZFJlcXVlc3QgKSA9IDA7CgoK CgogICAgdmlydHVhbCB2b2lkIHNlbmRfb3RoZXIgKAogICAgICAgIFBvcnRhYmxlSW50ZXJjZXB0 b3I6OlNlcnZlclJlcXVlc3RJbmZvX3B0ciByaQoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJB OjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkZvcndhcmRSZXF1ZXN0ICkg PSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRo X3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlf aWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0 b3IgKCk7CgogICAgdmlydHVhbCB+U2VydmVyUmVxdWVzdEludGVyY2VwdG9yICh2b2lkKTsKICBw cml2YXRlOgogICAgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yIChjb25zdCBTZXJ2ZXJSZXF1ZXN0 SW50ZXJjZXB0b3IgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgU2VydmVyUmVxdWVzdElu dGVyY2VwdG9yICYpOwogIH07CiMgMTQyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5oIgogIGNsYXNzIElPUklu Zm87CiAgdHlwZWRlZiBJT1JJbmZvICpJT1JJbmZvX3B0cjsKCgoKCgoKCiAgY2xhc3MgSU9SSW5m b192YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIElPUkluZm9fdmFy ICh2b2lkKTsKICAgIElPUkluZm9fdmFyIChJT1JJbmZvX3B0ciBwKSA6IHB0cl8gKHApIHt9CiAg ICBJT1JJbmZvX3ZhciAoY29uc3QgSU9SSW5mb192YXIgJik7CiAgICB+SU9SSW5mb192YXIgKHZv aWQpOwoKICAgIElPUkluZm9fdmFyICZvcGVyYXRvcj0gKElPUkluZm9fcHRyKTsKICAgIElPUklu Zm9fdmFyICZvcGVyYXRvcj0gKGNvbnN0IElPUkluZm9fdmFyICYpOwogICAgSU9SSW5mb19wdHIg b3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgSU9SSW5mb19wdHIg JigpIGNvbnN0OwogICAgb3BlcmF0b3IgSU9SSW5mb19wdHIgJigpOwoKICAgIElPUkluZm9fcHRy IGluICh2b2lkKSBjb25zdDsKICAgIElPUkluZm9fcHRyICZpbm91dCAodm9pZCk7CiAgICBJT1JJ bmZvX3B0ciAmb3V0ICh2b2lkKTsKICAgIElPUkluZm9fcHRyIF9yZXRuICh2b2lkKTsKICAgIElP UkluZm9fcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgSU9SSW5mb19wdHIgZHVw bGljYXRlIChJT1JJbmZvX3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChJT1JJbmZvX3B0 cik7CiAgICBzdGF0aWMgSU9SSW5mb19wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBJT1JJbmZv X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAg c3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBJ T1JJbmZvX3B0ciBwdHJfOwoKICAgIElPUkluZm9fdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJo cyk7CiAgICBJT1JJbmZvX3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7 CiAgfTsKIyAxNDc0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgSU9SSW5mb19vdXQKICB7CiAg cHVibGljOgogICAgSU9SSW5mb19vdXQgKElPUkluZm9fcHRyICYpOwogICAgSU9SSW5mb19vdXQg KElPUkluZm9fdmFyICYpOwogICAgSU9SSW5mb19vdXQgKGNvbnN0IElPUkluZm9fb3V0ICYpOwog ICAgSU9SSW5mb19vdXQgJm9wZXJhdG9yPSAoY29uc3QgSU9SSW5mb19vdXQgJik7CiAgICBJT1JJ bmZvX291dCAmb3BlcmF0b3I9IChjb25zdCBJT1JJbmZvX3ZhciAmKTsKICAgIElPUkluZm9fb3V0 ICZvcGVyYXRvcj0gKElPUkluZm9fcHRyKTsKICAgIG9wZXJhdG9yIElPUkluZm9fcHRyICYoKTsK ICAgIElPUkluZm9fcHRyICZwdHIgKHZvaWQpOwogICAgSU9SSW5mb19wdHIgb3BlcmF0b3ItPiAo dm9pZCk7CgogIHByaXZhdGU6CiAgICBJT1JJbmZvX3B0ciAmcHRyXzsKICB9OwojIDE0OTggIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJ bnRlcmNlcHRvckMuaCIKY2xhc3MgSU9SSW5mbyA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVj dAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBJT1JJbmZvX3B0ciBfcHRyX3R5cGU7CiAgICB0 eXBlZGVmIElPUkluZm9fdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBJT1JJbmZvX3B0ciBf ZHVwbGljYXRlIChJT1JJbmZvX3B0ciBvYmopOwogICAgc3RhdGljIElPUkluZm9fcHRyIF9uYXJy b3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBJT1JJbmZvX3B0ciBfdW5j aGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENP UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAg ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIElPUklu Zm9fcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKElPUkluZm9fcHRyKTA7 CiAgICAgIH0KCiAgICB2aXJ0dWFsIENPUkJBOjpQb2xpY3lfcHRyIGdldF9lZmZlY3RpdmVfcG9s aWN5ICgKICAgICAgICBDT1JCQTo6UG9saWN5VHlwZSB0eXBlLAogICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl bUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCBhZGRfaW9yX2NvbXBvbmVudCAo CiAgICAgICAgY29uc3QgSU9QOjpUYWdnZWRDb21wb25lbnQgJiBjb21wb25lbnQsCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD T1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkIGFkZF9pb3Jf Y29tcG9uZW50X3RvX3Byb2ZpbGUgKAogICAgICAgIGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9uZW50 ICYgY29tcG9uZW50LAogICAgICAgIElPUDo6UHJvZmlsZUlkIHByb2ZpbGVfaWQsCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD T1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkICpfdGFvX1F1 ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq IF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAg IElPUkluZm8gKCk7CgogICAgdmlydHVhbCB+SU9SSW5mbyAodm9pZCk7CiAgcHJpdmF0ZToKICAg IElPUkluZm8gKGNvbnN0IElPUkluZm8gJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgSU9S SW5mbyAmKTsKICB9OwojIDE1NzEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKICBjbGFzcyBJT1JJbnRlcmNl cHRvcjsKICB0eXBlZGVmIElPUkludGVyY2VwdG9yICpJT1JJbnRlcmNlcHRvcl9wdHI7CgoKCgoK CgogIGNsYXNzIElPUkludGVyY2VwdG9yX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAg cHVibGljOgogICAgSU9SSW50ZXJjZXB0b3JfdmFyICh2b2lkKTsKICAgIElPUkludGVyY2VwdG9y X3ZhciAoSU9SSW50ZXJjZXB0b3JfcHRyIHApIDogcHRyXyAocCkge30KICAgIElPUkludGVyY2Vw dG9yX3ZhciAoY29uc3QgSU9SSW50ZXJjZXB0b3JfdmFyICYpOwogICAgfklPUkludGVyY2VwdG9y X3ZhciAodm9pZCk7CgogICAgSU9SSW50ZXJjZXB0b3JfdmFyICZvcGVyYXRvcj0gKElPUkludGVy Y2VwdG9yX3B0cik7CiAgICBJT1JJbnRlcmNlcHRvcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgSU9S SW50ZXJjZXB0b3JfdmFyICYpOwogICAgSU9SSW50ZXJjZXB0b3JfcHRyIG9wZXJhdG9yLT4gKHZv aWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IElPUkludGVyY2VwdG9yX3B0ciAmKCkgY29u c3Q7CiAgICBvcGVyYXRvciBJT1JJbnRlcmNlcHRvcl9wdHIgJigpOwoKICAgIElPUkludGVyY2Vw dG9yX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBJT1JJbnRlcmNlcHRvcl9wdHIgJmlub3V0ICh2 b2lkKTsKICAgIElPUkludGVyY2VwdG9yX3B0ciAmb3V0ICh2b2lkKTsKICAgIElPUkludGVyY2Vw dG9yX3B0ciBfcmV0biAodm9pZCk7CiAgICBJT1JJbnRlcmNlcHRvcl9wdHIgcHRyICh2b2lkKSBj b25zdDsKCgoKICAgIHN0YXRpYyBJT1JJbnRlcmNlcHRvcl9wdHIgZHVwbGljYXRlIChJT1JJbnRl cmNlcHRvcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoSU9SSW50ZXJjZXB0b3JfcHRy KTsKICAgIHN0YXRpYyBJT1JJbnRlcmNlcHRvcl9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBJ T1JJbnRlcmNlcHRvcl9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9u bWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBw cml2YXRlOgogICAgSU9SSW50ZXJjZXB0b3JfcHRyIHB0cl87CgogICAgSU9SSW50ZXJjZXB0b3Jf dmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBJT1JJbnRlcmNlcHRvcl92YXIgJm9w ZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMTYyMyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2Vw dG9yQy5oIgogIGNsYXNzIElPUkludGVyY2VwdG9yX291dAogIHsKICBwdWJsaWM6CiAgICBJT1JJ bnRlcmNlcHRvcl9vdXQgKElPUkludGVyY2VwdG9yX3B0ciAmKTsKICAgIElPUkludGVyY2VwdG9y X291dCAoSU9SSW50ZXJjZXB0b3JfdmFyICYpOwogICAgSU9SSW50ZXJjZXB0b3Jfb3V0IChjb25z dCBJT1JJbnRlcmNlcHRvcl9vdXQgJik7CiAgICBJT1JJbnRlcmNlcHRvcl9vdXQgJm9wZXJhdG9y PSAoY29uc3QgSU9SSW50ZXJjZXB0b3Jfb3V0ICYpOwogICAgSU9SSW50ZXJjZXB0b3Jfb3V0ICZv cGVyYXRvcj0gKGNvbnN0IElPUkludGVyY2VwdG9yX3ZhciAmKTsKICAgIElPUkludGVyY2VwdG9y X291dCAmb3BlcmF0b3I9IChJT1JJbnRlcmNlcHRvcl9wdHIpOwogICAgb3BlcmF0b3IgSU9SSW50 ZXJjZXB0b3JfcHRyICYoKTsKICAgIElPUkludGVyY2VwdG9yX3B0ciAmcHRyICh2b2lkKTsKICAg IElPUkludGVyY2VwdG9yX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIElP UkludGVyY2VwdG9yX3B0ciAmcHRyXzsKICB9OwojIDE2NDcgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKY2xh c3MgSU9SSW50ZXJjZXB0b3I6IHB1YmxpYyB2aXJ0dWFsIEludGVyY2VwdG9yCiAgewogIHB1Ymxp YzoKCiAgICB0eXBlZGVmIElPUkludGVyY2VwdG9yX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVm IElPUkludGVyY2VwdG9yX3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgSU9SSW50ZXJjZXB0 b3JfcHRyIF9kdXBsaWNhdGUgKElPUkludGVyY2VwdG9yX3B0ciBvYmopOwogICAgc3RhdGljIElP UkludGVyY2VwdG9yX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmos CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBz dGF0aWMgSU9SSW50ZXJjZXB0b3JfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JC QTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB X0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50 ICgpCiAgICAgICk7CiAgICBzdGF0aWMgSU9SSW50ZXJjZXB0b3JfcHRyIF9uaWwgKHZvaWQpCiAg ICAgIHsKICAgICAgICByZXR1cm4gKElPUkludGVyY2VwdG9yX3B0cikwOwogICAgICB9CgogICAg dmlydHVhbCB2b2lkIGVzdGFibGlzaF9jb21wb25lbnRzICgKICAgICAgICBQb3J0YWJsZUludGVy Y2VwdG9yOjpJT1JJbmZvX3B0ciBpbmZvCgogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5 c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVy ZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJm YWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBJT1JJbnRl cmNlcHRvciAoKTsKCiAgICB2aXJ0dWFsIH5JT1JJbnRlcmNlcHRvciAodm9pZCk7CiAgcHJpdmF0 ZToKICAgIElPUkludGVyY2VwdG9yIChjb25zdCBJT1JJbnRlcmNlcHRvciAmKTsKICAgIHZvaWQg b3BlcmF0b3I9IChjb25zdCBJT1JJbnRlcmNlcHRvciAmKTsKICB9OwojIDE3MDAgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNl cHRvckMuaCIKICBjbGFzcyBQb2xpY3lGYWN0b3J5OwogIHR5cGVkZWYgUG9saWN5RmFjdG9yeSAq UG9saWN5RmFjdG9yeV9wdHI7CgoKCgoKCgogIGNsYXNzIFBvbGljeUZhY3RvcnlfdmFyIDogcHVi bGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBQb2xpY3lGYWN0b3J5X3ZhciAodm9p ZCk7CiAgICBQb2xpY3lGYWN0b3J5X3ZhciAoUG9saWN5RmFjdG9yeV9wdHIgcCkgOiBwdHJfIChw KSB7fQogICAgUG9saWN5RmFjdG9yeV92YXIgKGNvbnN0IFBvbGljeUZhY3RvcnlfdmFyICYpOwog ICAgflBvbGljeUZhY3RvcnlfdmFyICh2b2lkKTsKCiAgICBQb2xpY3lGYWN0b3J5X3ZhciAmb3Bl cmF0b3I9IChQb2xpY3lGYWN0b3J5X3B0cik7CiAgICBQb2xpY3lGYWN0b3J5X3ZhciAmb3BlcmF0 b3I9IChjb25zdCBQb2xpY3lGYWN0b3J5X3ZhciAmKTsKICAgIFBvbGljeUZhY3RvcnlfcHRyIG9w ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFBvbGljeUZhY3Rvcnlf cHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFBvbGljeUZhY3RvcnlfcHRyICYoKTsKCiAgICBQ b2xpY3lGYWN0b3J5X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBQb2xpY3lGYWN0b3J5X3B0ciAm aW5vdXQgKHZvaWQpOwogICAgUG9saWN5RmFjdG9yeV9wdHIgJm91dCAodm9pZCk7CiAgICBQb2xp Y3lGYWN0b3J5X3B0ciBfcmV0biAodm9pZCk7CiAgICBQb2xpY3lGYWN0b3J5X3B0ciBwdHIgKHZv aWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFBvbGljeUZhY3RvcnlfcHRyIGR1cGxpY2F0ZSAoUG9s aWN5RmFjdG9yeV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoUG9saWN5RmFjdG9yeV9w dHIpOwogICAgc3RhdGljIFBvbGljeUZhY3RvcnlfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMg UG9saWN5RmFjdG9yeV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9u bWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBw cml2YXRlOgogICAgUG9saWN5RmFjdG9yeV9wdHIgcHRyXzsKCiAgICBQb2xpY3lGYWN0b3J5X3Zh ciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgUG9saWN5RmFjdG9yeV92YXIgJm9wZXJh dG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMTc1MiAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9y Qy5oIgogIGNsYXNzIFBvbGljeUZhY3Rvcnlfb3V0CiAgewogIHB1YmxpYzoKICAgIFBvbGljeUZh Y3Rvcnlfb3V0IChQb2xpY3lGYWN0b3J5X3B0ciAmKTsKICAgIFBvbGljeUZhY3Rvcnlfb3V0IChQ b2xpY3lGYWN0b3J5X3ZhciAmKTsKICAgIFBvbGljeUZhY3Rvcnlfb3V0IChjb25zdCBQb2xpY3lG YWN0b3J5X291dCAmKTsKICAgIFBvbGljeUZhY3Rvcnlfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFBv bGljeUZhY3Rvcnlfb3V0ICYpOwogICAgUG9saWN5RmFjdG9yeV9vdXQgJm9wZXJhdG9yPSAoY29u c3QgUG9saWN5RmFjdG9yeV92YXIgJik7CiAgICBQb2xpY3lGYWN0b3J5X291dCAmb3BlcmF0b3I9 IChQb2xpY3lGYWN0b3J5X3B0cik7CiAgICBvcGVyYXRvciBQb2xpY3lGYWN0b3J5X3B0ciAmKCk7 CiAgICBQb2xpY3lGYWN0b3J5X3B0ciAmcHRyICh2b2lkKTsKICAgIFBvbGljeUZhY3RvcnlfcHRy IG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgUG9saWN5RmFjdG9yeV9wdHIgJnB0 cl87CiAgfTsKIyAxNzc2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCmNsYXNzIFBvbGljeUZhY3RvcnkgOiBw dWJsaWMgdmlydHVhbCBDT1JCQV9PYmplY3QKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUG9s aWN5RmFjdG9yeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBQb2xpY3lGYWN0b3J5X3ZhciBf dmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgUG9saWN5RmFjdG9yeV9wdHIgX2R1cGxpY2F0ZSAoUG9s aWN5RmFjdG9yeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBQb2xpY3lGYWN0b3J5X3B0ciBfbmFycm93 ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUG9saWN5RmFjdG9yeV9wdHIg X3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBQ b2xpY3lGYWN0b3J5X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChQb2xp Y3lGYWN0b3J5X3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBDT1JCQTo6UG9saWN5X3B0ciBj cmVhdGVfcG9saWN5ICgKICAgICAgICBDT1JCQTo6UG9saWN5VHlwZSB0eXBlLAogICAgICAgIGNv bnN0IENPUkJBOjpBbnkgJiB2YWx1ZQoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0 ZW1FeGNlcHRpb24sIENPUkJBOjpQb2xpY3lFcnJvciApID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZv aWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwg Y29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJv dGVjdGVkOgogICAgUG9saWN5RmFjdG9yeSAoKTsKCiAgICB2aXJ0dWFsIH5Qb2xpY3lGYWN0b3J5 ICh2b2lkKTsKICBwcml2YXRlOgogICAgUG9saWN5RmFjdG9yeSAoY29uc3QgUG9saWN5RmFjdG9y eSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBQb2xpY3lGYWN0b3J5ICYpOwogIH07CiMg MTgzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q b3J0YWJsZUludGVyY2VwdG9yQy5oIgogIGNsYXNzIE9SQkluaXRJbmZvOwogIHR5cGVkZWYgT1JC SW5pdEluZm8gKk9SQkluaXRJbmZvX3B0cjsKCgoKCgoKCiAgY2xhc3MgT1JCSW5pdEluZm9fdmFy IDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBPUkJJbml0SW5mb192YXIg KHZvaWQpOwogICAgT1JCSW5pdEluZm9fdmFyIChPUkJJbml0SW5mb19wdHIgcCkgOiBwdHJfIChw KSB7fQogICAgT1JCSW5pdEluZm9fdmFyIChjb25zdCBPUkJJbml0SW5mb192YXIgJik7CiAgICB+ T1JCSW5pdEluZm9fdmFyICh2b2lkKTsKCiAgICBPUkJJbml0SW5mb192YXIgJm9wZXJhdG9yPSAo T1JCSW5pdEluZm9fcHRyKTsKICAgIE9SQkluaXRJbmZvX3ZhciAmb3BlcmF0b3I9IChjb25zdCBP UkJJbml0SW5mb192YXIgJik7CiAgICBPUkJJbml0SW5mb19wdHIgb3BlcmF0b3ItPiAodm9pZCkg Y29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgT1JCSW5pdEluZm9fcHRyICYoKSBjb25zdDsKICAg IG9wZXJhdG9yIE9SQkluaXRJbmZvX3B0ciAmKCk7CgogICAgT1JCSW5pdEluZm9fcHRyIGluICh2 b2lkKSBjb25zdDsKICAgIE9SQkluaXRJbmZvX3B0ciAmaW5vdXQgKHZvaWQpOwogICAgT1JCSW5p dEluZm9fcHRyICZvdXQgKHZvaWQpOwogICAgT1JCSW5pdEluZm9fcHRyIF9yZXRuICh2b2lkKTsK ICAgIE9SQkluaXRJbmZvX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIE9SQklu aXRJbmZvX3B0ciBkdXBsaWNhdGUgKE9SQkluaXRJbmZvX3B0cik7CiAgICBzdGF0aWMgdm9pZCBy ZWxlYXNlIChPUkJJbml0SW5mb19wdHIpOwogICAgc3RhdGljIE9SQkluaXRJbmZvX3B0ciBuaWwg KHZvaWQpOwogICAgc3RhdGljIE9SQkluaXRJbmZvX3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3Qg KiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNh c3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBPUkJJbml0SW5mb19wdHIgcHRyXzsKCiAgICBP UkJJbml0SW5mb192YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIE9SQkluaXRJbmZv X3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyAxODgzICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl SW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgT1JCSW5pdEluZm9fb3V0CiAgewogIHB1YmxpYzoKICAg IE9SQkluaXRJbmZvX291dCAoT1JCSW5pdEluZm9fcHRyICYpOwogICAgT1JCSW5pdEluZm9fb3V0 IChPUkJJbml0SW5mb192YXIgJik7CiAgICBPUkJJbml0SW5mb19vdXQgKGNvbnN0IE9SQkluaXRJ bmZvX291dCAmKTsKICAgIE9SQkluaXRJbmZvX291dCAmb3BlcmF0b3I9IChjb25zdCBPUkJJbml0 SW5mb19vdXQgJik7CiAgICBPUkJJbml0SW5mb19vdXQgJm9wZXJhdG9yPSAoY29uc3QgT1JCSW5p dEluZm9fdmFyICYpOwogICAgT1JCSW5pdEluZm9fb3V0ICZvcGVyYXRvcj0gKE9SQkluaXRJbmZv X3B0cik7CiAgICBvcGVyYXRvciBPUkJJbml0SW5mb19wdHIgJigpOwogICAgT1JCSW5pdEluZm9f cHRyICZwdHIgKHZvaWQpOwogICAgT1JCSW5pdEluZm9fcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoK ICBwcml2YXRlOgogICAgT1JCSW5pdEluZm9fcHRyICZwdHJfOwogIH07CiMgMTkwNyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVy Y2VwdG9yQy5oIgpjbGFzcyBPUkJJbml0SW5mbyA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVj dAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBPUkJJbml0SW5mb19wdHIgX3B0cl90eXBlOwog ICAgdHlwZWRlZiBPUkJJbml0SW5mb192YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIE9SQklu aXRJbmZvX3B0ciBfZHVwbGljYXRlIChPUkJJbml0SW5mb19wdHIgb2JqKTsKICAgIHN0YXRpYyBP UkJJbml0SW5mb19wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAog ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3Rh dGljIE9SQkluaXRJbmZvX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9i amVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog ICAgICApOwogICAgc3RhdGljIE9SQkluaXRJbmZvX3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAg ICAgICAgcmV0dXJuIChPUkJJbml0SW5mb19wdHIpMDsKICAgICAgfQoKICAgIHR5cGVkZWYgY2hh ciAqIE9iamVjdElkOwogICAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX3ZhciBPYmplY3RJZF92YXI7 CiAgICB0eXBlZGVmIENPUkJBOjpTdHJpbmdfb3V0IE9iamVjdElkX291dDsKCgoKCiAgICBjbGFz cyBEdXBsaWNhdGVOYW1lIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBw dWJsaWM6CiAgICAgIFRBT19TdHJpbmdfTWFuYWdlciBuYW1lOwoKICAgICAgRHVwbGljYXRlTmFt ZSAodm9pZCk7CgoKICAgICAgRHVwbGljYXRlTmFtZSAoY29uc3QgRHVwbGljYXRlTmFtZSAmKTsK CgogICAgICB+RHVwbGljYXRlTmFtZSAodm9pZCk7CgoKICAgICAgRHVwbGljYXRlTmFtZSAmb3Bl cmF0b3I9IChjb25zdCBEdXBsaWNhdGVOYW1lICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlz ZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFP X091dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNv bnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1 dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAg c3RhdGljIER1cGxpY2F0ZU5hbWUgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCiAg ICAgIER1cGxpY2F0ZU5hbWUgKAogICAgICAgICAgY29uc3QgY2hhciAqIF90YW9fbmFtZQogICAg ICAgICk7CgoKICAgICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAg ICB9OwojIDE5ODQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKICAgIGNsYXNzIEludmFsaWROYW1lIDogcHVi bGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBJbnZhbGlk TmFtZSAodm9pZCk7CgoKICAgICAgSW52YWxpZE5hbWUgKGNvbnN0IEludmFsaWROYW1lICYpOwoK CiAgICAgIH5JbnZhbGlkTmFtZSAodm9pZCk7CgoKICAgICAgSW52YWxpZE5hbWUgJm9wZXJhdG9y PSAoY29uc3QgSW52YWxpZE5hbWUgJik7CgogICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lk KTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgICBUQU9fT3V0cHV0 Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgICAgVEFPX0lucHV0Q0RSICYs CiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICk7CgogICAgICBzdGF0aWMg SW52YWxpZE5hbWUgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCgoKICAgICAgc3Rh dGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICB9OwoKCgoKICAgIHZpcnR1 YWwgQ09SQkE6OlN0cmluZ1NlcSAqIGFyZ3VtZW50cyAoCiAgICAgICAgQ09SQkE6OkVudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj ZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBjaGFyICogb3JiX2lkICgKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJB OjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIElPUDo6Q29kZWNGYWN0b3J5 X3B0ciBjb2RlY19mYWN0b3J5ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09S QkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1l bnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7 CgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJfaW5pdGlhbF9yZWZlcmVuY2UgKAogICAgICAg IGNvbnN0IGNoYXIgKiBpZCwKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD T1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mbzo6 SW52YWxpZE5hbWUgKSA9IDA7CgoKCgogICAgdmlydHVhbCBDT1JCQTo6T2JqZWN0X3B0ciByZXNv bHZlX2luaXRpYWxfcmVmZXJlbmNlcyAoCiAgICAgICAgY29uc3QgY2hhciAqIGlkLAogICAgICAg IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICgg Q09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUG9ydGFibGVJbnRlcmNlcHRvcjo6T1JCSW5pdEluZm86 OkludmFsaWROYW1lICkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCBhZGRfY2xpZW50X3JlcXVl c3RfaW50ZXJjZXB0b3IgKAogICAgICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkNsaWVudFJlcXVl c3RJbnRlcmNlcHRvcl9wdHIgaW50ZXJjZXB0b3IsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0 X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0 aW9uLCBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mbzo6RHVwbGljYXRlTmFtZSApID0g MDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgYWRkX3NlcnZlcl9yZXF1ZXN0X2ludGVyY2VwdG9yICgK ICAgICAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRy IGludGVyY2VwdG9yLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog ICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUG9ydGFibGVJbnRl cmNlcHRvcjo6T1JCSW5pdEluZm86OkR1cGxpY2F0ZU5hbWUgKSA9IDA7CgoKCgogICAgdmlydHVh bCB2b2lkIGFkZF9pb3JfaW50ZXJjZXB0b3IgKAogICAgICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6 OklPUkludGVyY2VwdG9yX3B0ciBpbnRlcmNlcHRvciwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24sIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvOjpEdXBsaWNhdGVOYW1lICkg PSAwOwoKCgoKICAgIHZpcnR1YWwgUG9ydGFibGVJbnRlcmNlcHRvcjo6U2xvdElkIGFsbG9jYXRl X3Nsb3RfaWQgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg ICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZp cnR1YWwgdm9pZCByZWdpc3Rlcl9wb2xpY3lfZmFjdG9yeSAoCiAgICAgICAgQ09SQkE6OlBvbGlj eVR5cGUgdHlwZSwKICAgICAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpQb2xpY3lGYWN0b3J5X3B0 ciBwb2xpY3lfZmFjdG9yeSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoK CiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUp OwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lk KSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgT1JCSW5pdEluZm8gKCk7CgogICAgdmlydHVhbCB+ T1JCSW5pdEluZm8gKHZvaWQpOwogIHByaXZhdGU6CiAgICBPUkJJbml0SW5mbyAoY29uc3QgT1JC SW5pdEluZm8gJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgT1JCSW5pdEluZm8gJik7CiAg fTsKIyAyMTM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgT1JCSW5pdGlhbGl6ZXI7CiAgdHlw ZWRlZiBPUkJJbml0aWFsaXplciAqT1JCSW5pdGlhbGl6ZXJfcHRyOwoKCgoKCgoKICBjbGFzcyBP UkJJbml0aWFsaXplcl92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAg IE9SQkluaXRpYWxpemVyX3ZhciAodm9pZCk7CiAgICBPUkJJbml0aWFsaXplcl92YXIgKE9SQklu aXRpYWxpemVyX3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgICBPUkJJbml0aWFsaXplcl92YXIgKGNv bnN0IE9SQkluaXRpYWxpemVyX3ZhciAmKTsKICAgIH5PUkJJbml0aWFsaXplcl92YXIgKHZvaWQp OwoKICAgIE9SQkluaXRpYWxpemVyX3ZhciAmb3BlcmF0b3I9IChPUkJJbml0aWFsaXplcl9wdHIp OwogICAgT1JCSW5pdGlhbGl6ZXJfdmFyICZvcGVyYXRvcj0gKGNvbnN0IE9SQkluaXRpYWxpemVy X3ZhciAmKTsKICAgIE9SQkluaXRpYWxpemVyX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsK CiAgICBvcGVyYXRvciBjb25zdCBPUkJJbml0aWFsaXplcl9wdHIgJigpIGNvbnN0OwogICAgb3Bl cmF0b3IgT1JCSW5pdGlhbGl6ZXJfcHRyICYoKTsKCiAgICBPUkJJbml0aWFsaXplcl9wdHIgaW4g KHZvaWQpIGNvbnN0OwogICAgT1JCSW5pdGlhbGl6ZXJfcHRyICZpbm91dCAodm9pZCk7CiAgICBP UkJJbml0aWFsaXplcl9wdHIgJm91dCAodm9pZCk7CiAgICBPUkJJbml0aWFsaXplcl9wdHIgX3Jl dG4gKHZvaWQpOwogICAgT1JCSW5pdGlhbGl6ZXJfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAg ICBzdGF0aWMgT1JCSW5pdGlhbGl6ZXJfcHRyIGR1cGxpY2F0ZSAoT1JCSW5pdGlhbGl6ZXJfcHRy KTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKE9SQkluaXRpYWxpemVyX3B0cik7CiAgICBzdGF0 aWMgT1JCSW5pdGlhbGl6ZXJfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgT1JCSW5pdGlhbGl6 ZXJfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAg ICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAg IE9SQkluaXRpYWxpemVyX3B0ciBwdHJfOwoKICAgIE9SQkluaXRpYWxpemVyX3ZhciAoY29uc3Qg VEFPX0Jhc2VfdmFyICZyaHMpOwogICAgT1JCSW5pdGlhbGl6ZXJfdmFyICZvcGVyYXRvcj0gKGNv bnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDIxODYgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKICBj bGFzcyBPUkJJbml0aWFsaXplcl9vdXQKICB7CiAgcHVibGljOgogICAgT1JCSW5pdGlhbGl6ZXJf b3V0IChPUkJJbml0aWFsaXplcl9wdHIgJik7CiAgICBPUkJJbml0aWFsaXplcl9vdXQgKE9SQklu aXRpYWxpemVyX3ZhciAmKTsKICAgIE9SQkluaXRpYWxpemVyX291dCAoY29uc3QgT1JCSW5pdGlh bGl6ZXJfb3V0ICYpOwogICAgT1JCSW5pdGlhbGl6ZXJfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IE9S QkluaXRpYWxpemVyX291dCAmKTsKICAgIE9SQkluaXRpYWxpemVyX291dCAmb3BlcmF0b3I9IChj b25zdCBPUkJJbml0aWFsaXplcl92YXIgJik7CiAgICBPUkJJbml0aWFsaXplcl9vdXQgJm9wZXJh dG9yPSAoT1JCSW5pdGlhbGl6ZXJfcHRyKTsKICAgIG9wZXJhdG9yIE9SQkluaXRpYWxpemVyX3B0 ciAmKCk7CiAgICBPUkJJbml0aWFsaXplcl9wdHIgJnB0ciAodm9pZCk7CiAgICBPUkJJbml0aWFs aXplcl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBPUkJJbml0aWFsaXpl cl9wdHIgJnB0cl87CiAgfTsKIyAyMjEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCmNsYXNzIE9SQkluaXRp YWxpemVyIDogcHVibGljIHZpcnR1YWwgQ09SQkFfT2JqZWN0CiAgewogIHB1YmxpYzoKCiAgICB0 eXBlZGVmIE9SQkluaXRpYWxpemVyX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIE9SQkluaXRp YWxpemVyX3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgT1JCSW5pdGlhbGl6ZXJfcHRyIF9k dXBsaWNhdGUgKE9SQkluaXRpYWxpemVyX3B0ciBvYmopOwogICAgc3RhdGljIE9SQkluaXRpYWxp emVyX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgT1JC SW5pdGlhbGl6ZXJfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0 X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAg ICk7CiAgICBzdGF0aWMgT1JCSW5pdGlhbGl6ZXJfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAg ICAgICByZXR1cm4gKE9SQkluaXRpYWxpemVyX3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCB2 b2lkIHByZV9pbml0ICgKICAgICAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mb19w dHIgaW5mbwoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9 IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgcG9zdF9pbml0ICgKICAgICAgICBQb3J0YWJsZUludGVy Y2VwdG9yOjpPUkJJbml0SW5mb19wdHIgaW5mbwoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJB OjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJ bnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2lu dGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgT1JC SW5pdGlhbGl6ZXIgKCk7CgogICAgdmlydHVhbCB+T1JCSW5pdGlhbGl6ZXIgKHZvaWQpOwogIHBy aXZhdGU6CiAgICBPUkJJbml0aWFsaXplciAoY29uc3QgT1JCSW5pdGlhbGl6ZXIgJik7CiAgICB2 b2lkIG9wZXJhdG9yPSAoY29uc3QgT1JCSW5pdGlhbGl6ZXIgJik7CiAgfTsKCgoKCgoKZXh0ZXJu IHZvaWQgcmVnaXN0ZXJfb3JiX2luaXRpYWxpemVyICgKICBPUkJJbml0aWFsaXplcl9wdHIgaW5p dCwKICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg PSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7Cgp9CgoKICAgICAgICAgICB2b2lkIG9wZXJh dG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IFBvcnRhYmxlSW50ZXJjZXB0b3I6OkZvcndhcmRS ZXF1ZXN0ICYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUG9y dGFibGVJbnRlcmNlcHRvcjo6Rm9yd2FyZFJlcXVlc3QqKTsKICAgICAgICAgICBDT1JCQTo6Qm9v bGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBQb3J0YWJsZUludGVyY2VwdG9y OjpGb3J3YXJkUmVxdWVzdCAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+ Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUG9ydGFibGVJbnRlcmNlcHRvcjo6Rm9yd2Fy ZFJlcXVlc3QgKiYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwg Y29uc3QgUG9ydGFibGVJbnRlcmNlcHRvcjo6SW52YWxpZFNsb3QgJik7CiAgICAgICAgICAgdm9p ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBQb3J0YWJsZUludGVyY2VwdG9yOjpJbnZhbGlk U2xvdCopOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JC QTo6QW55ICYsIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkludmFsaWRTbG90IComKTsKICAgICAgICAg ICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBQ b3J0YWJsZUludGVyY2VwdG9yOjpJbnZhbGlkU2xvdCAqJik7CiMgMjI5OCAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9y Qy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaSIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmkiCmlubGlu ZSBQb3J0YWJsZUludGVyY2VwdG9yOjpJbnRlcmNlcHRvcl9wdHIKdGFvX1BvcnRhYmxlSW50ZXJj ZXB0b3JfSW50ZXJjZXB0b3JfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6Oklu dGVyY2VwdG9yX3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkludGVy Y2VwdG9yOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX1BvcnRhYmxlSW50ZXJj ZXB0b3JfSW50ZXJjZXB0b3JfcmVsZWFzZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpJbnRl cmNlcHRvcl9wdHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIFBvcnRh YmxlSW50ZXJjZXB0b3I6OkludGVyY2VwdG9yX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9J bnRlcmNlcHRvcl9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2Vw dG9yOjpJbnRlcmNlcHRvcjo6X25pbCAoKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6 OkludGVyY2VwdG9yX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9JbnRlcmNlcHRvcl9uYXJy b3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2Vw dG9yOjpJbnRlcmNlcHRvcjo6X25hcnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3Jf SW50ZXJjZXB0b3JfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIFBvcnRhYmxlSW50ZXJj ZXB0b3I6OkludGVyY2VwdG9yICoqdG1wID0KICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlSW50ZXJj ZXB0b3I6OkludGVyY2VwdG9yICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsKfQojIDg0ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50 ZXJjZXB0b3JDLmkiCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpDdXJyZW50X3B0cgp0YW9f UG9ydGFibGVJbnRlcmNlcHRvcl9DdXJyZW50X2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZUludGVy Y2VwdG9yOjpDdXJyZW50X3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50ZXJjZXB0b3I6 OkN1cnJlbnQ6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVJbnRl cmNlcHRvcl9DdXJyZW50X3JlbGVhc2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q3VycmVu dF9wdHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50 ZXJjZXB0b3I6OkN1cnJlbnRfcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0N1cnJlbnRfbmls ICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6Q3VycmVudDo6 X25pbCAoKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkN1cnJlbnRfcHRyCnRhb19Q b3J0YWJsZUludGVyY2VwdG9yX0N1cnJlbnRfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAs CiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUK ICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6Q3VycmVudDo6X25hcnJvdyAocCwg X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0 ICoKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfQ3VycmVudF91cGNhc3QgKAogICAgdm9pZCAqc3Jj CiAgKQp7CiAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q3VycmVudCAqKnRtcCA9CiAgICBzdGF0aWNf Y2FzdDxQb3J0YWJsZUludGVyY2VwdG9yOjpDdXJyZW50ICoqPiAoc3JjKTsKICByZXR1cm4gKnRt cDsKfQojIDEzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5pIgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6 UmVxdWVzdEluZm9fcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX1JlcXVlc3RJbmZvX2R1cGxp Y2F0ZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0SW5mb19wdHIgcAogICkKewog IHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0SW5mbzo6X2R1cGxpY2F0ZSAocCk7 Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX1JlcXVlc3RJbmZvX3JlbGVh c2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6UmVxdWVzdEluZm9fcHRyIHAKICApCnsKICBD T1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0 SW5mb19wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfUmVxdWVzdEluZm9fbmlsICgKICAgIHZv aWQKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6UmVxdWVzdEluZm86Ol9uaWwg KCk7Cn0KCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0SW5mb19wdHIKdGFvX1Bv cnRhYmxlSW50ZXJjZXB0b3JfUmVxdWVzdEluZm9fbmFycm93ICgKICAgIENPUkJBOjpPYmplY3Qg KnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6UmVxdWVzdEluZm86Ol9uYXJy b3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6 Ok9iamVjdCAqCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX1JlcXVlc3RJbmZvX3VwY2FzdCAoCiAg ICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0SW5mbyAqKnRt cCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0SW5mbyAqKj4g KHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxODQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaSIKaW5saW5lIFBv cnRhYmxlSW50ZXJjZXB0b3I6OkNsaWVudFJlcXVlc3RJbmZvX3B0cgp0YW9fUG9ydGFibGVJbnRl cmNlcHRvcl9DbGllbnRSZXF1ZXN0SW5mb19kdXBsaWNhdGUgKAogICAgUG9ydGFibGVJbnRlcmNl cHRvcjo6Q2xpZW50UmVxdWVzdEluZm9fcHRyIHAKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRl cmNlcHRvcjo6Q2xpZW50UmVxdWVzdEluZm86Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9p ZAp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9DbGllbnRSZXF1ZXN0SW5mb19yZWxlYXNlICgKICAg IFBvcnRhYmxlSW50ZXJjZXB0b3I6OkNsaWVudFJlcXVlc3RJbmZvX3B0ciBwCiAgKQp7CiAgQ09S QkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVx dWVzdEluZm9fcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0NsaWVudFJlcXVlc3RJbmZvX25p bCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkNsaWVudFJl cXVlc3RJbmZvOjpfbmlsICgpOwp9CgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50 UmVxdWVzdEluZm9fcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0NsaWVudFJlcXVlc3RJbmZv X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50 ZXJjZXB0b3I6OkNsaWVudFJlcXVlc3RJbmZvOjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fUG9ydGFibGVJ bnRlcmNlcHRvcl9DbGllbnRSZXF1ZXN0SW5mb191cGNhc3QgKAogICAgdm9pZCAqc3JjCiAgKQp7 CiAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVxdWVzdEluZm8gKip0bXAgPQogICAgc3Rh dGljX2Nhc3Q8UG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVxdWVzdEluZm8gKio+IChzcmMp OwogIHJldHVybiAqdG1wOwp9CiMgMjM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmkiCmlubGluZSBQb3J0YWJs ZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0 b3JfU2VydmVyUmVxdWVzdEluZm9fZHVwbGljYXRlICgKICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6 OlNlcnZlclJlcXVlc3RJbmZvX3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50ZXJjZXB0 b3I6OlNlcnZlclJlcXVlc3RJbmZvOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFv X1BvcnRhYmxlSW50ZXJjZXB0b3JfU2VydmVyUmVxdWVzdEluZm9fcmVsZWFzZSAoCiAgICBQb3J0 YWJsZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgcAogICkKewogIENPUkJBOjpy ZWxlYXNlIChwKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZlclJlcXVlc3RJ bmZvX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9TZXJ2ZXJSZXF1ZXN0SW5mb19uaWwgKAog ICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1ZXN0 SW5mbzo6X25pbCAoKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZlclJlcXVl c3RJbmZvX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9TZXJ2ZXJSZXF1ZXN0SW5mb19uYXJy b3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2Vw dG9yOjpTZXJ2ZXJSZXF1ZXN0SW5mbzo6X25hcnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX1BvcnRhYmxlSW50ZXJj ZXB0b3JfU2VydmVyUmVxdWVzdEluZm9fdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIFBv cnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZlclJlcXVlc3RJbmZvICoqdG1wID0KICAgIHN0YXRpY19j YXN0PFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZlclJlcXVlc3RJbmZvICoqPiAoc3JjKTsKICBy ZXR1cm4gKnRtcDsKfQojIDI4NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5pIgppbmxpbmUgUG9ydGFibGVJbnRl cmNlcHRvcjo6Q2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNl cHRvcl9DbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlSW50 ZXJjZXB0b3I6OkNsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgcAogICkKewogIHJldHVybiBQ b3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3I6Ol9kdXBsaWNhdGUg KHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9DbGllbnRSZXF1ZXN0 SW50ZXJjZXB0b3JfcmVsZWFzZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1 ZXN0SW50ZXJjZXB0b3JfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGlu ZSBQb3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyCnRhb19Q b3J0YWJsZUludGVyY2VwdG9yX0NsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9uaWwgKAogICAgdm9p ZAogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1ZXN0SW50ZXJj ZXB0b3I6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1 ZXN0SW50ZXJjZXB0b3JfcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0NsaWVudFJlcXVlc3RJ bnRlcmNlcHRvcl9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQ b3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3I6Ol9uYXJyb3cgKHAs IF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVj dCAqCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0NsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl91cGNh c3QgKAogICAgdm9pZCAqc3JjCiAgKQp7CiAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVx dWVzdEludGVyY2VwdG9yICoqdG1wID0KICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlSW50ZXJjZXB0 b3I6OkNsaWVudFJlcXVlc3RJbnRlcmNlcHRvciAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0K IyAzMzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v UG9ydGFibGVJbnRlcmNlcHRvckMuaSIKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZl clJlcXVlc3RJbnRlcmNlcHRvcl9wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfU2VydmVyUmVx dWVzdEludGVyY2VwdG9yX2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpTZXJ2 ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIHAKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNl cHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9yOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5l IHZvaWQKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3Jl bGVhc2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9y X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgUG9ydGFibGVJbnRl cmNlcHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNl cHRvcl9TZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1 cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9yOjpfbmlsICgp Owp9CgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9y X3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9TZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfbmFy cm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNl cHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9yOjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fUG9ydGFi bGVJbnRlcmNlcHRvcl9TZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfdXBjYXN0ICgKICAgIHZvaWQg KnNyYwogICkKewogIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZlclJlcXVlc3RJbnRlcmNlcHRv ciAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1 ZXN0SW50ZXJjZXB0b3IgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CiMgMzg0ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJj ZXB0b3JDLmkiCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbmZvX3B0cgp0YW9fUG9y dGFibGVJbnRlcmNlcHRvcl9JT1JJbmZvX2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZUludGVyY2Vw dG9yOjpJT1JJbmZvX3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50ZXJjZXB0b3I6OklP UkluZm86Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVJbnRlcmNl cHRvcl9JT1JJbmZvX3JlbGVhc2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9SSW5mb19w dHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJj ZXB0b3I6OklPUkluZm9fcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0lPUkluZm9fbmlsICgK ICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9SSW5mbzo6X25p bCAoKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6OklPUkluZm9fcHRyCnRhb19Qb3J0 YWJsZUludGVyY2VwdG9yX0lPUkluZm9fbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAp CnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9SSW5mbzo6X25hcnJvdyAocCwgX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoK dGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfSU9SSW5mb191cGNhc3QgKAogICAgdm9pZCAqc3JjCiAg KQp7CiAgUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9SSW5mbyAqKnRtcCA9CiAgICBzdGF0aWNfY2Fz dDxQb3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbmZvICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsK fQojIDQzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9Qb3J0YWJsZUludGVyY2VwdG9yQy5pIgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9S SW50ZXJjZXB0b3JfcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0lPUkludGVyY2VwdG9yX2R1 cGxpY2F0ZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbnRlcmNlcHRvcl9wdHIgcAog ICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbnRlcmNlcHRvcjo6X2R1cGxp Y2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0lPUkludGVy Y2VwdG9yX3JlbGVhc2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9SSW50ZXJjZXB0b3Jf cHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZUludGVy Y2VwdG9yOjpJT1JJbnRlcmNlcHRvcl9wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfSU9SSW50 ZXJjZXB0b3JfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRv cjo6SU9SSW50ZXJjZXB0b3I6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9y OjpJT1JJbnRlcmNlcHRvcl9wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfSU9SSW50ZXJjZXB0 b3JfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gUG9ydGFibGVJ bnRlcmNlcHRvcjo6SU9SSW50ZXJjZXB0b3I6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZUlu dGVyY2VwdG9yX0lPUkludGVyY2VwdG9yX3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBQ b3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbnRlcmNlcHRvciAqKnRtcCA9CiAgICBzdGF0aWNfY2Fz dDxQb3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbnRlcmNlcHRvciAqKj4gKHNyYyk7CiAgcmV0dXJu ICp0bXA7Cn0KIyA0ODQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaSIKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0 b3I6OlBvbGljeUZhY3RvcnlfcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX1BvbGljeUZhY3Rv cnlfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlBvbGljeUZhY3RvcnlfcHRy IHAKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6UG9saWN5RmFjdG9yeTo6X2R1 cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX1BvbGlj eUZhY3RvcnlfcmVsZWFzZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpQb2xpY3lGYWN0b3J5 X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgUG9ydGFibGVJbnRl cmNlcHRvcjo6UG9saWN5RmFjdG9yeV9wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfUG9saWN5 RmFjdG9yeV9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9y OjpQb2xpY3lGYWN0b3J5OjpfbmlsICgpOwp9CgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6 UG9saWN5RmFjdG9yeV9wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfUG9saWN5RmFjdG9yeV9u YXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZUludGVy Y2VwdG9yOjpQb2xpY3lGYWN0b3J5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50 X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fUG9ydGFibGVJbnRlcmNl cHRvcl9Qb2xpY3lGYWN0b3J5X3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJs ZUludGVyY2VwdG9yOjpQb2xpY3lGYWN0b3J5ICoqdG1wID0KICAgIHN0YXRpY19jYXN0PFBvcnRh YmxlSW50ZXJjZXB0b3I6OlBvbGljeUZhY3RvcnkgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9 CiMgNTQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv L1BvcnRhYmxlSW50ZXJjZXB0b3JDLmkiCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJ bml0SW5mb19wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfT1JCSW5pdEluZm9fZHVwbGljYXRl ICgKICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvX3B0ciBwCiAgKQp7CiAgcmV0 dXJuIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvOjpfZHVwbGljYXRlIChwKTsKfQoK aW5saW5lIHZvaWQKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfT1JCSW5pdEluZm9fcmVsZWFzZSAo CiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mb19wdHIgcAogICkKewogIENPUkJB OjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZv X3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9PUkJJbml0SW5mb19uaWwgKAogICAgdm9pZAog ICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mbzo6X25pbCAoKTsK fQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvX3B0cgp0YW9fUG9ydGFi bGVJbnRlcmNlcHRvcl9PUkJJbml0SW5mb19uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwK ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQog ICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mbzo6X25hcnJvdyAo cCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2Jq ZWN0ICoKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfT1JCSW5pdEluZm9fdXBjYXN0ICgKICAgIHZv aWQgKnNyYwogICkKewogIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvICoqdG1wID0K ICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvICoqPiAoc3Jj KTsKICByZXR1cm4gKnRtcDsKfQojIDU5MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5pIgppbmxpbmUgUG9ydGFi bGVJbnRlcmNlcHRvcjo6T1JCSW5pdGlhbGl6ZXJfcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9y X09SQkluaXRpYWxpemVyX2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJ bml0aWFsaXplcl9wdHIgcAogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJ bml0aWFsaXplcjo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZUlu dGVyY2VwdG9yX09SQkluaXRpYWxpemVyX3JlbGVhc2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRv cjo6T1JCSW5pdGlhbGl6ZXJfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlu bGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0aWFsaXplcl9wdHIKdGFvX1BvcnRhYmxl SW50ZXJjZXB0b3JfT1JCSW5pdGlhbGl6ZXJfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4g UG9ydGFibGVJbnRlcmNlcHRvcjo6T1JCSW5pdGlhbGl6ZXI6Ol9uaWwgKCk7Cn0KCmlubGluZSBQ b3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0aWFsaXplcl9wdHIKdGFvX1BvcnRhYmxlSW50ZXJj ZXB0b3JfT1JCSW5pdGlhbGl6ZXJfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsK ICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6T1JCSW5pdGlhbGl6ZXI6Ol9uYXJyb3cgKHAs IF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVj dCAqCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX09SQkluaXRpYWxpemVyX3VwY2FzdCAoCiAgICB2 b2lkICpzcmMKICApCnsKICBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0aWFsaXplciAqKnRt cCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0aWFsaXplciAq Kj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KCgoKCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVy YXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBQb3J0YWJsZUludGVyY2VwdG9yOjpG b3J3YXJkUmVxdWVzdCAmX3Rhb19hZ2dyZWdhdGUpCnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dy ZWdhdGUuX2lkICgpKQogIHsKCiAgICBpZiAoCiAgICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRl LmZvcndhcmQuaW4gKCkpICYmCiAgICAgIChzdHJtIDw8IENPUkJBOjpBbnk6OmZyb21fYm9vbGVh biAoX3Rhb19hZ2dyZWdhdGUucGVybWFuZW50KSkKICAgICkKICAgICAgcmV0dXJuIDE7CiAgICBl bHNlCiAgICAgIHJldHVybiAwOwogIH0KICBlbHNlCiAgICByZXR1cm4gMDsKfQoKaW5saW5lIENP UkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSxQb3J0YWJsZUludGVy Y2VwdG9yOjpGb3J3YXJkUmVxdWVzdCAmX3Rhb19hZ2dyZWdhdGUpCnsKCiAgaWYgKAogICAgKHN0 cm0gPj4gX3Rhb19hZ2dyZWdhdGUuZm9yd2FyZC5vdXQgKCkpICYmCiAgICAoc3RybSA+PiBDT1JC QTo6QW55Ojp0b19ib29sZWFuIChfdGFvX2FnZ3JlZ2F0ZS5wZXJtYW5lbnQpKQogICkKICAgIHJl dHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3Bl cmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUG9ydGFibGVJbnRlcmNlcHRvcjo6 SW52YWxpZFNsb3QgJl90YW9fYWdncmVnYXRlKQp7CgogIGlmIChzdHJtIDw8IF90YW9fYWdncmVn YXRlLl9pZCAoKSkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgppbmxpbmUg Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICYsUG9ydGFibGVJbnRlcmNl cHRvcjo6SW52YWxpZFNsb3QmKQp7CiAgcmV0dXJuIDE7Cn0KIyAyMjk5ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JD LmgiIDIKIyAyMzA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDIzMTAgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMu aCIgMgojIDc2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL2NvcmJhLmgiIDIKIyA4NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9jb3JiYS5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA4NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VD LmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy9vcmJzdmNzL29yYnN2Y3Mvc3ZjX3V0aWxzX2V4cG9ydC5oIiAxCiMgMTAgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mvc3Zj X3V0aWxzX2V4cG9ydC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDEKIyAxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9zdmNfdXRpbHNfZXhwb3J0Lmgi IDIKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y YnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZUMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VDLmgiIDEKIyAzNCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9UaW1l QmFzZUMuaCIgMgojIDY2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VDLmki IDEKIyA2NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y YnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZUMuaCIgMgojIDc3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlQy5oIgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEK IyA3OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9UaW1lQmFzZUMuaCIgMgojIDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlUy5oIiAyCgoKCgoK CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q b3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlci5oIiAxCiMgMjAgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVT ZXJ2ZXIuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvcHJlLmgiIDEKIyAyMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlci5oIiAyCgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2 ZXIvcG9ydGFibGVzZXJ2ZXJfZXhwb3J0LmgiIDEKIyAxMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9wb3J0YWJsZXNlcnZl cl9leHBvcnQuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvcG9ydGFibGVzZXJ2ZXJfZXhwb3J0 LmgiIDIKIyAyMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlci5oIiAyCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjQg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFi bGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXIuaCIgMgoKCgoKCmNsYXNzIFRBT19QT0FfSW5pdGlhbGl6 ZXIKewpwdWJsaWM6CiAgc3RhdGljIGludCBpbml0ICh2b2lkKTsKCn07CiMgNDUgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIv UG9ydGFibGVTZXJ2ZXIuaCIKc3RhdGljIGludApUQU9fUmVxdWlyZXNfUE9BX0luaXRpYWxpemVy ID0gVEFPX1BPQV9Jbml0aWFsaXplcjo6aW5pdCAoKTsKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJs ZVNlcnZlckMuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl U2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9wb3J0YWJsZXNlcnZlcl9l eHBvcnQuaCIgMQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAyCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAx CiMgMjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v UG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaCIgMQojIDM0 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRh YmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDEKIyAzNSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Q b3J0YWJsZVNlcnZlckMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaCIgMQojIDM2ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2Vy dmVyQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9BbnkuaCIgMQojIDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAyCiMgNjEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFi bGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiCmNsYXNzIFRBT19TZXJ2YW50QmFzZTsKY2xhc3Mg VEFPX1NlcnZhbnRCYXNlX3ZhcjsKY2xhc3MgVEFPX1JlZkNvdW50U2VydmFudEJhc2U7CmNsYXNz IFRBT19Mb2NhbF9TZXJ2YW50QmFzZTsKY2xhc3MgVEFPX0R5bmFtaWNJbXBsZW1lbnRhdGlvbjsK Y2xhc3MgVEFPX1BPQTsKCm5hbWVzcGFjZSBQb3J0YWJsZVNlcnZlcgp7CiAgdHlwZWRlZiBUQU9f U2VydmFudEJhc2UgU2VydmFudEJhc2U7CiAgdHlwZWRlZiBUQU9fU2VydmFudEJhc2VfdmFyIFNl cnZhbnRCYXNlX3ZhcjsKICB0eXBlZGVmIFRBT19SZWZDb3VudFNlcnZhbnRCYXNlIFJlZkNvdW50 U2VydmFudEJhc2U7CiAgdHlwZWRlZiBTZXJ2YW50QmFzZSAqU2VydmFudDsKCiAgdHlwZWRlZiBU QU9fTG9jYWxfU2VydmFudEJhc2UgTG9jYWxTZXJ2YW50QmFzZTsKICB0eXBlZGVmIFRBT19EeW5h bWljSW1wbGVtZW50YXRpb24gRHluYW1pY0ltcGxlbWVudGF0aW9uOwoKICBjbGFzcyBQT0E7CgoK CgogIHR5cGVkZWYgUE9BICpQT0FfcHRyOwoKCgoKCgoKICBjbGFzcyBQT0FfdmFyIDogcHVibGlj IFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBQT0FfdmFyICh2b2lkKTsKICAgIFBPQV92 YXIgKFBPQV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgUE9BX3ZhciAoY29uc3QgUE9BX3ZhciAm KTsKICAgIH5QT0FfdmFyICh2b2lkKTsKCiAgICBQT0FfdmFyICZvcGVyYXRvcj0gKFBPQV9wdHIp OwogICAgUE9BX3ZhciAmb3BlcmF0b3I9IChjb25zdCBQT0FfdmFyICYpOwogICAgUE9BX3B0ciBv cGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBQT0FfcHRyICYoKSBj b25zdDsKICAgIG9wZXJhdG9yIFBPQV9wdHIgJigpOwoKICAgIFBPQV9wdHIgaW4gKHZvaWQpIGNv bnN0OwogICAgUE9BX3B0ciAmaW5vdXQgKHZvaWQpOwogICAgUE9BX3B0ciAmb3V0ICh2b2lkKTsK ICAgIFBPQV9wdHIgX3JldG4gKHZvaWQpOwogICAgUE9BX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoK CgogICAgc3RhdGljIFBPQV9wdHIgZHVwbGljYXRlIChQT0FfcHRyKTsKICAgIHN0YXRpYyB2b2lk IHJlbGVhc2UgKFBPQV9wdHIpOwogICAgc3RhdGljIFBPQV9wdHIgbmlsICh2b2lkKTsKICAgIHN0 YXRpYyBQT0FfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQg Jik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0 ZToKICAgIFBPQV9wdHIgcHRyXzsKCiAgICBQT0FfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJo cyk7CiAgICBQT0FfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9 OwojIDEzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBQT0Ffb3V0CiAgewog IHB1YmxpYzoKICAgIFBPQV9vdXQgKFBPQV9wdHIgJik7CiAgICBQT0Ffb3V0IChQT0FfdmFyICYp OwogICAgUE9BX291dCAoY29uc3QgUE9BX291dCAmKTsKICAgIFBPQV9vdXQgJm9wZXJhdG9yPSAo Y29uc3QgUE9BX291dCAmKTsKICAgIFBPQV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUE9BX3ZhciAm KTsKICAgIFBPQV9vdXQgJm9wZXJhdG9yPSAoUE9BX3B0cik7CiAgICBvcGVyYXRvciBQT0FfcHRy ICYoKTsKICAgIFBPQV9wdHIgJnB0ciAodm9pZCk7CiAgICBQT0FfcHRyIG9wZXJhdG9yLT4gKHZv aWQpOwoKICBwcml2YXRlOgogICAgUE9BX3B0ciAmcHRyXzsKICB9OwojIDE2MCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Q b3J0YWJsZVNlcnZlckMuaCIKICAgIGNsYXNzIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5j ZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0IDogcHVibGljIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1 ZW5jZQogICAgewogICAgcHVibGljOgoKCiAgICAgIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1 ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0ICh2b2lkKTsKICAgICAgX1RBT19VbmJvdW5kZWRf T2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3QgKENPUkJBOjpVTG9uZyBtYXhp bXVtKTsKICAgICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVy X1BPQUxpc3QgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5n dGgsCiAgICAgICAgUE9BKiAqdmFsdWUsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9 IDApOwogICAgICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJf UE9BTGlzdChjb25zdCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2 ZXJfUE9BTGlzdCAmcmhzKTsKICAgICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfT2JqZWN0X1Nl cXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3QgKHZvaWQpOwogICAgICBfVEFPX1VuYm91bmRl ZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdCAmb3BlcmF0b3I9IChjb25z dCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdCAm cmhzKTsKICAgICAgVEFPX09iamVjdF9NYW5hZ2VyPFBvcnRhYmxlU2VydmVyOjpQT0EsUG9ydGFi bGVTZXJ2ZXI6OlBPQV92YXI+IG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkgY29uc3Q7 CiAgICAgIHN0YXRpYyBQT0EgKiphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIG5lbGVtcyk7CiAgICAg IHN0YXRpYyB2b2lkIGZyZWVidWYgKFBPQSAqKmJ1ZmZlcik7CgogICAgICB2aXJ0dWFsIHZvaWQg X2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgICAgIHZpcnR1YWwgdm9p ZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwogICAgICBQT0EqICpnZXRfYnVmZmVyIChDT1JC QTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICAgICAgY29uc3QgUE9BKiAqZ2V0X2J1ZmZlciAodm9p ZCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBfc2hyaW5rX2J1ZmZlciAoQ09SQkE6OlVMb25n IG5sLCBDT1JCQTo6VUxvbmcgb2wpOwogICAgICB2aXJ0dWFsIHZvaWQgX2Rvd25jYXN0ICgKICAg ICAgICAgIHZvaWQqIHRhcmdldCwKICAgICAgICAgIENPUkJBX09iamVjdCAqc3JjLAogICAgICAg ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAgICk7CiAgICAgIHZp cnR1YWwgQ09SQkFfT2JqZWN0KiBfdXBjYXN0ICh2b2lkICpzcmMpIGNvbnN0OwoKICAgIH07CiMg MjAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv cnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIFBPQUxpc3Q7CiAgY2xhc3Mg UE9BTGlzdF92YXI7CgoKCgoKICBjbGFzcyBQT0FMaXN0IDogcHVibGljCgogICAgX1RBT19VbmJv dW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3QKCgoKICB7CiAgcHVi bGljOgogICAgUE9BTGlzdCAodm9pZCk7CiAgICBQT0FMaXN0IChDT1JCQTo6VUxvbmcgbWF4KTsK ICAgIFBPQUxpc3QgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxvbmcg bGVuZ3RoLAogICAgICBQT0FfcHRyICpidWZmZXIsCiAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVh c2UgPSAwCiAgICApOwogICAgUE9BTGlzdCAoY29uc3QgUE9BTGlzdCAmKTsKICAgIH5QT0FMaXN0 ICh2b2lkKTsKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgog ICAgdHlwZWRlZiBQT0FMaXN0X3ZhciBfdmFyX3R5cGU7CgoKICB9OwojIDI0NCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Q b3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBQT0FMaXN0X3ZhcgogIHsKICBwdWJsaWM6CiAgICBQ T0FMaXN0X3ZhciAodm9pZCk7CiAgICBQT0FMaXN0X3ZhciAoUE9BTGlzdCAqKTsKICAgIFBPQUxp c3RfdmFyIChjb25zdCBQT0FMaXN0X3ZhciAmKTsKICAgIH5QT0FMaXN0X3ZhciAodm9pZCk7Cgog ICAgUE9BTGlzdF92YXIgJm9wZXJhdG9yPSAoUE9BTGlzdCAqKTsKICAgIFBPQUxpc3RfdmFyICZv cGVyYXRvcj0gKGNvbnN0IFBPQUxpc3RfdmFyICYpOwogICAgUE9BTGlzdCAqb3BlcmF0b3ItPiAo dm9pZCk7CiAgICBjb25zdCBQT0FMaXN0ICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBv cGVyYXRvciBjb25zdCBQT0FMaXN0ICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFBPQUxpc3QgJigp OwogICAgb3BlcmF0b3IgUE9BTGlzdCAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQT0FMaXN0ICom KCk7CgogICAgVEFPX09iamVjdF9NYW5hZ2VyPFBPQSwgUE9BX3Zhcj4gb3BlcmF0b3JbXSAoQ09S QkE6OlVMb25nIGluZGV4KTsKCgogICAgY29uc3QgUE9BTGlzdCAmaW4gKHZvaWQpIGNvbnN0Owog ICAgUE9BTGlzdCAmaW5vdXQgKHZvaWQpOwogICAgUE9BTGlzdCAqJm91dCAodm9pZCk7CiAgICBQ T0FMaXN0ICpfcmV0biAodm9pZCk7CiAgICBQT0FMaXN0ICpwdHIgKHZvaWQpIGNvbnN0OwoKICBw cml2YXRlOgogICAgUE9BTGlzdCAqcHRyXzsKICB9OwojIDI4MiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNl cnZlckMuaCIKICBjbGFzcyBQT0FMaXN0X291dAogIHsKICBwdWJsaWM6CiAgICBQT0FMaXN0X291 dCAoUE9BTGlzdCAqJik7CiAgICBQT0FMaXN0X291dCAoUE9BTGlzdF92YXIgJik7CiAgICBQT0FM aXN0X291dCAoY29uc3QgUE9BTGlzdF9vdXQgJik7CiAgICBQT0FMaXN0X291dCAmb3BlcmF0b3I9 IChjb25zdCBQT0FMaXN0X291dCAmKTsKICAgIFBPQUxpc3Rfb3V0ICZvcGVyYXRvcj0gKFBPQUxp c3QgKik7CiAgICBvcGVyYXRvciBQT0FMaXN0IComKCk7CiAgICBQT0FMaXN0IComcHRyICh2b2lk KTsKICAgIFBPQUxpc3QgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgVEFPX09iamVjdF9NYW5hZ2Vy PFBPQSwgUE9BX3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCiAgcHJpdmF0 ZToKICAgIFBPQUxpc3QgKiZwdHJfOwoKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBQT0FMaXN0 X3ZhciAmKTsKICB9OwojIDMwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBP YmplY3RJZDsKICBjbGFzcyBPYmplY3RJZF92YXI7CgoKCgoKICBjbGFzcyBPYmplY3RJZCA6IHB1 YmxpYwoKICAgIFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PgoKCgogIHsKICBw dWJsaWM6CiAgICBPYmplY3RJZCAodm9pZCk7CiAgICBPYmplY3RJZCAoQ09SQkE6OlVMb25nIG1h eCk7CiAgICBPYmplY3RJZCAoCiAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgIENPUkJBOjpV TG9uZyBsZW5ndGgsCiAgICAgIENPUkJBOjpPY3RldCAqYnVmZmVyLAogICAgICBDT1JCQTo6Qm9v bGVhbiByZWxlYXNlID0gMAogICAgKTsKICAgIE9iamVjdElkIChjb25zdCBPYmplY3RJZCAmKTsK ICAgIH5PYmplY3RJZCAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9y ICh2b2lkKik7CgoKICAgIHR5cGVkZWYgT2JqZWN0SWRfdmFyIF92YXJfdHlwZTsKCgoKCiAgICBP YmplY3RJZCAoCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBjb25zdCBBQ0Vf TWVzc2FnZV9CbG9jayogbWIKICAgICAgKQogICAgICA6IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8 Q09SQkE6Ok9jdGV0PiAobGVuZ3RoLCBtYikge30KCgogIH07CiMgMzYwICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRh YmxlU2VydmVyQy5oIgogIGNsYXNzIE9iamVjdElkX3ZhcgogIHsKICBwdWJsaWM6CiAgICBPYmpl Y3RJZF92YXIgKHZvaWQpOwogICAgT2JqZWN0SWRfdmFyIChPYmplY3RJZCAqKTsKICAgIE9iamVj dElkX3ZhciAoY29uc3QgT2JqZWN0SWRfdmFyICYpOwogICAgT2JqZWN0SWRfdmFyIChjb25zdCBP YmplY3RJZCAmKTsKICAgIH5PYmplY3RJZF92YXIgKHZvaWQpOwoKICAgIE9iamVjdElkX3ZhciAm b3BlcmF0b3I9IChPYmplY3RJZCAqKTsKICAgIE9iamVjdElkX3ZhciAmb3BlcmF0b3I9IChjb25z dCBPYmplY3RJZF92YXIgJik7CiAgICBPYmplY3RJZF92YXIgJm9wZXJhdG9yPSAoY29uc3QgT2Jq ZWN0SWQgJik7CiAgICBPYmplY3RJZCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBPYmpl Y3RJZCAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgT2JqZWN0 SWQgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgT2JqZWN0SWQgJigpOwogICAgb3BlcmF0b3IgT2Jq ZWN0SWQgJigpIGNvbnN0OwoKICAgIENPUkJBOjpPY3RldCAmIG9wZXJhdG9yW10gKENPUkJBOjpV TG9uZyBpbmRleCk7CiAgICBjb25zdCBDT1JCQTo6T2N0ZXQgJiBvcGVyYXRvcltdIChDT1JCQTo6 VUxvbmcgaW5kZXgpIGNvbnN0OwoKCiAgICBjb25zdCBPYmplY3RJZCAmaW4gKHZvaWQpIGNvbnN0 OwogICAgT2JqZWN0SWQgJmlub3V0ICh2b2lkKTsKICAgIE9iamVjdElkIComb3V0ICh2b2lkKTsK ICAgIE9iamVjdElkICpfcmV0biAodm9pZCk7CiAgICBPYmplY3RJZCAqcHRyICh2b2lkKSBjb25z dDsKCiAgcHJpdmF0ZToKICAgIE9iamVjdElkICpwdHJfOwogIH07CiMgNDAwICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1Bv cnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIE9iamVjdElkX291dAogIHsKICBwdWJsaWM6CiAgICBP YmplY3RJZF9vdXQgKE9iamVjdElkIComKTsKICAgIE9iamVjdElkX291dCAoT2JqZWN0SWRfdmFy ICYpOwogICAgT2JqZWN0SWRfb3V0IChjb25zdCBPYmplY3RJZF9vdXQgJik7CiAgICBPYmplY3RJ ZF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgT2JqZWN0SWRfb3V0ICYpOwogICAgT2JqZWN0SWRfb3V0 ICZvcGVyYXRvcj0gKE9iamVjdElkICopOwogICAgb3BlcmF0b3IgT2JqZWN0SWQgKiYoKTsKICAg IE9iamVjdElkIComcHRyICh2b2lkKTsKICAgIE9iamVjdElkICpvcGVyYXRvci0+ICh2b2lkKTsK ICAgIENPUkJBOjpPY3RldCAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7CgogIHBy aXZhdGU6CiAgICBPYmplY3RJZCAqJnB0cl87CgogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IE9i amVjdElkX3ZhciAmKTsKICB9OwoKCgoKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf T2JqZWN0SWQ7CgoKCgoKCgogIGNsYXNzIEZvcndhcmRSZXF1ZXN0IDogcHVibGljIENPUkJBOjpV c2VyRXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIENPUkJBOjpPYmplY3RfdmFyIGZvcndhcmRf cmVmZXJlbmNlOwoKICAgIEZvcndhcmRSZXF1ZXN0ICh2b2lkKTsKCgogICAgRm9yd2FyZFJlcXVl c3QgKGNvbnN0IEZvcndhcmRSZXF1ZXN0ICYpOwoKCiAgICB+Rm9yd2FyZFJlcXVlc3QgKHZvaWQp OwoKCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgRm9y d2FyZFJlcXVlc3QgJm9wZXJhdG9yPSAoY29uc3QgRm9yd2FyZFJlcXVlc3QgJik7CgogICAgdmly dHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgdmlydHVhbCB2b2lkIF90YW9fZW5jb2RlICgK ICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAg ICAgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgIFRBT19J bnB1dENEUiAmLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICk7CgogICAgc3Rh dGljIEZvcndhcmRSZXF1ZXN0ICpfZG93bmNhc3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgogICAg Rm9yd2FyZFJlcXVlc3QgKAogICAgICAgIGNvbnN0IENPUkJBOjpPYmplY3RfcHRyIF90YW9fZm9y d2FyZF9yZWZlcmVuY2UKICAgICAgKTsKCgogICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9h bGxvYyAodm9pZCk7CiAgICB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQp IGNvbnN0OwogIH07CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Gb3J3YXJkUmVx dWVzdDsKCgoKCgoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRIUkVBRF9QT0xJQ1lfSUQ7 CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgTElGRVNQQU5fUE9MSUNZX0lEOwoKICBleHRl cm4gY29uc3QgQ09SQkE6OlVMb25nIElEX1VOSVFVRU5FU1NfUE9MSUNZX0lEOwoKICBleHRlcm4g Y29uc3QgQ09SQkE6OlVMb25nIElEX0FTU0lHTk1FTlRfUE9MSUNZX0lEOwoKICBleHRlcm4gY29u c3QgQ09SQkE6OlVMb25nIElNUExJQ0lUX0FDVElWQVRJT05fUE9MSUNZX0lEOwoKICBleHRlcm4g Y29uc3QgQ09SQkE6OlVMb25nIFNFUlZBTlRfUkVURU5USU9OX1BPTElDWV9JRDsKCiAgZXh0ZXJu IGNvbnN0IENPUkJBOjpVTG9uZyBSRVFVRVNUX1BST0NFU1NJTkdfUE9MSUNZX0lEOwoKICBlbnVt IFRocmVhZFBvbGljeVZhbHVlCiAgewogICAgICAgIE9SQl9DVFJMX01PREVMLAogICAgICAgIFNJ TkdMRV9USFJFQURfTU9ERUwKICB9OwoKCgogIHR5cGVkZWYgVGhyZWFkUG9saWN5VmFsdWUgJlRo cmVhZFBvbGljeVZhbHVlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVGhy ZWFkUG9saWN5VmFsdWU7CgoKCgoKICBjbGFzcyBUaHJlYWRQb2xpY3k7CiAgdHlwZWRlZiBUaHJl YWRQb2xpY3kgKlRocmVhZFBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIFRocmVhZFBvbGljeV92 YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFRocmVhZFBvbGljeV92 YXIgKHZvaWQpOwogICAgVGhyZWFkUG9saWN5X3ZhciAoVGhyZWFkUG9saWN5X3B0ciBwKSA6IHB0 cl8gKHApIHt9CiAgICBUaHJlYWRQb2xpY3lfdmFyIChjb25zdCBUaHJlYWRQb2xpY3lfdmFyICYp OwogICAgflRocmVhZFBvbGljeV92YXIgKHZvaWQpOwoKICAgIFRocmVhZFBvbGljeV92YXIgJm9w ZXJhdG9yPSAoVGhyZWFkUG9saWN5X3B0cik7CiAgICBUaHJlYWRQb2xpY3lfdmFyICZvcGVyYXRv cj0gKGNvbnN0IFRocmVhZFBvbGljeV92YXIgJik7CiAgICBUaHJlYWRQb2xpY3lfcHRyIG9wZXJh dG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFRocmVhZFBvbGljeV9wdHIg JigpIGNvbnN0OwogICAgb3BlcmF0b3IgVGhyZWFkUG9saWN5X3B0ciAmKCk7CgogICAgVGhyZWFk UG9saWN5X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBUaHJlYWRQb2xpY3lfcHRyICZpbm91dCAo dm9pZCk7CiAgICBUaHJlYWRQb2xpY3lfcHRyICZvdXQgKHZvaWQpOwogICAgVGhyZWFkUG9saWN5 X3B0ciBfcmV0biAodm9pZCk7CiAgICBUaHJlYWRQb2xpY3lfcHRyIHB0ciAodm9pZCkgY29uc3Q7 CgoKCiAgICBzdGF0aWMgVGhyZWFkUG9saWN5X3B0ciBkdXBsaWNhdGUgKFRocmVhZFBvbGljeV9w dHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoVGhyZWFkUG9saWN5X3B0cik7CiAgICBzdGF0 aWMgVGhyZWFkUG9saWN5X3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFRocmVhZFBvbGljeV9w dHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0 YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgVGhy ZWFkUG9saWN5X3B0ciBwdHJfOwoKICAgIFRocmVhZFBvbGljeV92YXIgKGNvbnN0IFRBT19CYXNl X3ZhciAmcmhzKTsKICAgIFRocmVhZFBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jh c2VfdmFyICZyaHMpOwogIH07CiMgNTU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogIGNs YXNzIFRocmVhZFBvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgVGhyZWFkUG9saWN5X291dCAo VGhyZWFkUG9saWN5X3B0ciAmKTsKICAgIFRocmVhZFBvbGljeV9vdXQgKFRocmVhZFBvbGljeV92 YXIgJik7CiAgICBUaHJlYWRQb2xpY3lfb3V0IChjb25zdCBUaHJlYWRQb2xpY3lfb3V0ICYpOwog ICAgVGhyZWFkUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBUaHJlYWRQb2xpY3lfb3V0ICYp OwogICAgVGhyZWFkUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBUaHJlYWRQb2xpY3lfdmFy ICYpOwogICAgVGhyZWFkUG9saWN5X291dCAmb3BlcmF0b3I9IChUaHJlYWRQb2xpY3lfcHRyKTsK ICAgIG9wZXJhdG9yIFRocmVhZFBvbGljeV9wdHIgJigpOwogICAgVGhyZWFkUG9saWN5X3B0ciAm cHRyICh2b2lkKTsKICAgIFRocmVhZFBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHBy aXZhdGU6CiAgICBUaHJlYWRQb2xpY3lfcHRyICZwdHJfOwogIH07CiMgNTgzICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1Bv cnRhYmxlU2VydmVyQy5oIgpjbGFzcyBUaHJlYWRQb2xpY3k6IHB1YmxpYyB2aXJ0dWFsIENPUkJB OjpQb2xpY3kKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgVGhyZWFkUG9saWN5X3B0ciBfcHRy X3R5cGU7CiAgICB0eXBlZGVmIFRocmVhZFBvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3Rh dGljIFRocmVhZFBvbGljeV9wdHIgX2R1cGxpY2F0ZSAoVGhyZWFkUG9saWN5X3B0ciBvYmopOwog ICAgc3RhdGljIFRocmVhZFBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVj dF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg ICApOwogICAgc3RhdGljIFRocmVhZFBvbGljeV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAg ICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBUaHJlYWRQb2xpY3lfcHRyIF9uaWwgKHZv aWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKFRocmVhZFBvbGljeV9wdHIpMDsKICAgICAgfQoK ICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeVZhbHVlIHZhbHVlICgKICAg ICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg PQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJv dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90 YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3Qg Y2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVk OgogICAgVGhyZWFkUG9saWN5ICgpOwoKICAgIHZpcnR1YWwgflRocmVhZFBvbGljeSAodm9pZCk7 CiAgcHJpdmF0ZToKICAgIFRocmVhZFBvbGljeSAoY29uc3QgVGhyZWFkUG9saWN5ICYpOwogICAg dm9pZCBvcGVyYXRvcj0gKGNvbnN0IFRocmVhZFBvbGljeSAmKTsKICB9OwoKCgoKCgogIGVudW0g TGlmZXNwYW5Qb2xpY3lWYWx1ZQogIHsKICAgICAgICBUUkFOU0lFTlQsCiAgICAgICAgUEVSU0lT VEVOVAogIH07CiAgdHlwZWRlZiBMaWZlc3BhblBvbGljeVZhbHVlICZMaWZlc3BhblBvbGljeVZh bHVlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfTGlmZXNwYW5Qb2xpY3lW YWx1ZTsKCgoKCgogIGNsYXNzIExpZmVzcGFuUG9saWN5OwogIHR5cGVkZWYgTGlmZXNwYW5Qb2xp Y3kgKkxpZmVzcGFuUG9saWN5X3B0cjsKCgoKCgoKCiAgY2xhc3MgTGlmZXNwYW5Qb2xpY3lfdmFy IDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBMaWZlc3BhblBvbGljeV92 YXIgKHZvaWQpOwogICAgTGlmZXNwYW5Qb2xpY3lfdmFyIChMaWZlc3BhblBvbGljeV9wdHIgcCkg OiBwdHJfIChwKSB7fQogICAgTGlmZXNwYW5Qb2xpY3lfdmFyIChjb25zdCBMaWZlc3BhblBvbGlj eV92YXIgJik7CiAgICB+TGlmZXNwYW5Qb2xpY3lfdmFyICh2b2lkKTsKCiAgICBMaWZlc3BhblBv bGljeV92YXIgJm9wZXJhdG9yPSAoTGlmZXNwYW5Qb2xpY3lfcHRyKTsKICAgIExpZmVzcGFuUG9s aWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBMaWZlc3BhblBvbGljeV92YXIgJik7CiAgICBMaWZl c3BhblBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29u c3QgTGlmZXNwYW5Qb2xpY3lfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIExpZmVzcGFuUG9s aWN5X3B0ciAmKCk7CgogICAgTGlmZXNwYW5Qb2xpY3lfcHRyIGluICh2b2lkKSBjb25zdDsKICAg IExpZmVzcGFuUG9saWN5X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgTGlmZXNwYW5Qb2xpY3lfcHRy ICZvdXQgKHZvaWQpOwogICAgTGlmZXNwYW5Qb2xpY3lfcHRyIF9yZXRuICh2b2lkKTsKICAgIExp ZmVzcGFuUG9saWN5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIExpZmVzcGFu UG9saWN5X3B0ciBkdXBsaWNhdGUgKExpZmVzcGFuUG9saWN5X3B0cik7CiAgICBzdGF0aWMgdm9p ZCByZWxlYXNlIChMaWZlc3BhblBvbGljeV9wdHIpOwogICAgc3RhdGljIExpZmVzcGFuUG9saWN5 X3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIExpZmVzcGFuUG9saWN5X3B0ciBuYXJyb3cgKENP UkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpP YmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBMaWZlc3BhblBvbGljeV9w dHIgcHRyXzsKCiAgICBMaWZlc3BhblBvbGljeV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhz KTsKICAgIExpZmVzcGFuUG9saWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIg JnJocyk7CiAgfTsKIyA2OTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiCiAgY2xhc3MgTGlm ZXNwYW5Qb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIExpZmVzcGFuUG9saWN5X291dCAoTGlm ZXNwYW5Qb2xpY3lfcHRyICYpOwogICAgTGlmZXNwYW5Qb2xpY3lfb3V0IChMaWZlc3BhblBvbGlj eV92YXIgJik7CiAgICBMaWZlc3BhblBvbGljeV9vdXQgKGNvbnN0IExpZmVzcGFuUG9saWN5X291 dCAmKTsKICAgIExpZmVzcGFuUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBMaWZlc3BhblBv bGljeV9vdXQgJik7CiAgICBMaWZlc3BhblBvbGljeV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgTGlm ZXNwYW5Qb2xpY3lfdmFyICYpOwogICAgTGlmZXNwYW5Qb2xpY3lfb3V0ICZvcGVyYXRvcj0gKExp ZmVzcGFuUG9saWN5X3B0cik7CiAgICBvcGVyYXRvciBMaWZlc3BhblBvbGljeV9wdHIgJigpOwog ICAgTGlmZXNwYW5Qb2xpY3lfcHRyICZwdHIgKHZvaWQpOwogICAgTGlmZXNwYW5Qb2xpY3lfcHRy IG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgTGlmZXNwYW5Qb2xpY3lfcHRyICZw dHJfOwogIH07CiMgNzIyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgpjbGFzcyBMaWZlc3Bh blBvbGljeTogcHVibGljIHZpcnR1YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAg dHlwZWRlZiBMaWZlc3BhblBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBMaWZlc3Bh blBvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIExpZmVzcGFuUG9saWN5X3B0ciBf ZHVwbGljYXRlIChMaWZlc3BhblBvbGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBMaWZlc3BhblBv bGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAg IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIExp ZmVzcGFuUG9saWN5X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVj dF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg ICApOwogICAgc3RhdGljIExpZmVzcGFuUG9saWN5X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAg ICAgICAgcmV0dXJuIChMaWZlc3BhblBvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwg UG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5VmFsdWUgdmFsdWUgKAogICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6 OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUlu dGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50 ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBMaWZl c3BhblBvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5MaWZlc3BhblBvbGljeSAodm9pZCk7CiAgcHJp dmF0ZToKICAgIExpZmVzcGFuUG9saWN5IChjb25zdCBMaWZlc3BhblBvbGljeSAmKTsKICAgIHZv aWQgb3BlcmF0b3I9IChjb25zdCBMaWZlc3BhblBvbGljeSAmKTsKICB9OwoKCgoKICBlbnVtIElk VW5pcXVlbmVzc1BvbGljeVZhbHVlCiAgewogICAgICAgIFVOSVFVRV9JRCwKICAgICAgICBNVUxU SVBMRV9JRAogIH07CiAgdHlwZWRlZiBJZFVuaXF1ZW5lc3NQb2xpY3lWYWx1ZSAmSWRVbmlxdWVu ZXNzUG9saWN5VmFsdWVfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JZFVu aXF1ZW5lc3NQb2xpY3lWYWx1ZTsKCgoKCgogIGNsYXNzIElkVW5pcXVlbmVzc1BvbGljeTsKICB0 eXBlZGVmIElkVW5pcXVlbmVzc1BvbGljeSAqSWRVbmlxdWVuZXNzUG9saWN5X3B0cjsKCgoKCgoK CiAgY2xhc3MgSWRVbmlxdWVuZXNzUG9saWN5X3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7 CiAgcHVibGljOgogICAgSWRVbmlxdWVuZXNzUG9saWN5X3ZhciAodm9pZCk7CiAgICBJZFVuaXF1 ZW5lc3NQb2xpY3lfdmFyIChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIHApIDogcHRyXyAocCkge30K ICAgIElkVW5pcXVlbmVzc1BvbGljeV92YXIgKGNvbnN0IElkVW5pcXVlbmVzc1BvbGljeV92YXIg Jik7CiAgICB+SWRVbmlxdWVuZXNzUG9saWN5X3ZhciAodm9pZCk7CgogICAgSWRVbmlxdWVuZXNz UG9saWN5X3ZhciAmb3BlcmF0b3I9IChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyKTsKICAgIElkVW5p cXVlbmVzc1BvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgSWRVbmlxdWVuZXNzUG9saWN5X3Zh ciAmKTsKICAgIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7 CgogICAgb3BlcmF0b3IgY29uc3QgSWRVbmlxdWVuZXNzUG9saWN5X3B0ciAmKCkgY29uc3Q7CiAg ICBvcGVyYXRvciBJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyICYoKTsKCiAgICBJZFVuaXF1ZW5lc3NQ b2xpY3lfcHRyIGluICh2b2lkKSBjb25zdDsKICAgIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgJmlu b3V0ICh2b2lkKTsKICAgIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBJ ZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIF9yZXRuICh2b2lkKTsKICAgIElkVW5pcXVlbmVzc1BvbGlj eV9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBJZFVuaXF1ZW5lc3NQb2xpY3lf cHRyIGR1cGxpY2F0ZSAoSWRVbmlxdWVuZXNzUG9saWN5X3B0cik7CiAgICBzdGF0aWMgdm9pZCBy ZWxlYXNlIChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyBJZFVuaXF1ZW5lc3NQ b2xpY3lfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgSWRVbmlxdWVuZXNzUG9saWN5X3B0ciBu YXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAgc3RhdGlj IENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBJZFVuaXF1 ZW5lc3NQb2xpY3lfcHRyIHB0cl87CgogICAgSWRVbmlxdWVuZXNzUG9saWN5X3ZhciAoY29uc3Qg VEFPX0Jhc2VfdmFyICZyaHMpOwogICAgSWRVbmlxdWVuZXNzUG9saWN5X3ZhciAmb3BlcmF0b3I9 IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyA4MzUgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVT ZXJ2ZXJDLmgiCiAgY2xhc3MgSWRVbmlxdWVuZXNzUG9saWN5X291dAogIHsKICBwdWJsaWM6CiAg ICBJZFVuaXF1ZW5lc3NQb2xpY3lfb3V0IChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyICYpOwogICAg SWRVbmlxdWVuZXNzUG9saWN5X291dCAoSWRVbmlxdWVuZXNzUG9saWN5X3ZhciAmKTsKICAgIElk VW5pcXVlbmVzc1BvbGljeV9vdXQgKGNvbnN0IElkVW5pcXVlbmVzc1BvbGljeV9vdXQgJik7CiAg ICBJZFVuaXF1ZW5lc3NQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IElkVW5pcXVlbmVzc1Bv bGljeV9vdXQgJik7CiAgICBJZFVuaXF1ZW5lc3NQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0 IElkVW5pcXVlbmVzc1BvbGljeV92YXIgJik7CiAgICBJZFVuaXF1ZW5lc3NQb2xpY3lfb3V0ICZv cGVyYXRvcj0gKElkVW5pcXVlbmVzc1BvbGljeV9wdHIpOwogICAgb3BlcmF0b3IgSWRVbmlxdWVu ZXNzUG9saWN5X3B0ciAmKCk7CiAgICBJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyICZwdHIgKHZvaWQp OwogICAgSWRVbmlxdWVuZXNzUG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0 ZToKICAgIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgJnB0cl87CiAgfTsKIyA4NTkgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIv UG9ydGFibGVTZXJ2ZXJDLmgiCmNsYXNzIElkVW5pcXVlbmVzc1BvbGljeTogcHVibGljIHZpcnR1 YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBJZFVuaXF1ZW5lc3NQ b2xpY3lfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgSWRVbmlxdWVuZXNzUG9saWN5X3ZhciBf dmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgSWRVbmlxdWVuZXNzUG9saWN5X3B0ciBfZHVwbGljYXRl IChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIG9iaik7CiAgICBzdGF0aWMgSWRVbmlxdWVuZXNzUG9s aWN5X3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgSWRV bmlxdWVuZXNzUG9saWN5X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9i amVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog ICAgICApOwogICAgc3RhdGljIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgX25pbCAodm9pZCkKICAg ICAgewogICAgICAgIHJldHVybiAoSWRVbmlxdWVuZXNzUG9saWN5X3B0cikwOwogICAgICB9Cgog ICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5VmFsdWUgdmFsdWUg KAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAg IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9p ZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBj b25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90 ZWN0ZWQ6CiAgICBJZFVuaXF1ZW5lc3NQb2xpY3kgKCk7CgogICAgdmlydHVhbCB+SWRVbmlxdWVu ZXNzUG9saWN5ICh2b2lkKTsKICBwcml2YXRlOgogICAgSWRVbmlxdWVuZXNzUG9saWN5IChjb25z dCBJZFVuaXF1ZW5lc3NQb2xpY3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgSWRVbmlx dWVuZXNzUG9saWN5ICYpOwogIH07CgoKCgogIGVudW0gSWRBc3NpZ25tZW50UG9saWN5VmFsdWUK ICB7CiAgICAgICAgVVNFUl9JRCwKICAgICAgICBTWVNURU1fSUQKICB9OwogIHR5cGVkZWYgSWRB c3NpZ25tZW50UG9saWN5VmFsdWUgJklkQXNzaWdubWVudFBvbGljeVZhbHVlX291dDsKICBleHRl cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfSWRBc3NpZ25tZW50UG9saWN5VmFsdWU7CgoKCgoK ICBjbGFzcyBJZEFzc2lnbm1lbnRQb2xpY3k7CiAgdHlwZWRlZiBJZEFzc2lnbm1lbnRQb2xpY3kg KklkQXNzaWdubWVudFBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIElkQXNzaWdubWVudFBvbGlj eV92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIElkQXNzaWdubWVu dFBvbGljeV92YXIgKHZvaWQpOwogICAgSWRBc3NpZ25tZW50UG9saWN5X3ZhciAoSWRBc3NpZ25t ZW50UG9saWN5X3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lfdmFy IChjb25zdCBJZEFzc2lnbm1lbnRQb2xpY3lfdmFyICYpOwogICAgfklkQXNzaWdubWVudFBvbGlj eV92YXIgKHZvaWQpOwoKICAgIElkQXNzaWdubWVudFBvbGljeV92YXIgJm9wZXJhdG9yPSAoSWRB c3NpZ25tZW50UG9saWN5X3B0cik7CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lfdmFyICZvcGVyYXRv cj0gKGNvbnN0IElkQXNzaWdubWVudFBvbGljeV92YXIgJik7CiAgICBJZEFzc2lnbm1lbnRQb2xp Y3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IElkQXNz aWdubWVudFBvbGljeV9wdHIgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgSWRBc3NpZ25tZW50UG9s aWN5X3B0ciAmKCk7CgogICAgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBpbiAodm9pZCkgY29uc3Q7 CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lfcHRyICZpbm91dCAodm9pZCk7CiAgICBJZEFzc2lnbm1l bnRQb2xpY3lfcHRyICZvdXQgKHZvaWQpOwogICAgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBfcmV0 biAodm9pZCk7CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoK CiAgICBzdGF0aWMgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBkdXBsaWNhdGUgKElkQXNzaWdubWVu dFBvbGljeV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoSWRBc3NpZ25tZW50UG9saWN5 X3B0cik7CiAgICBzdGF0aWMgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBuaWwgKHZvaWQpOwogICAg c3RhdGljIElkQXNzaWdubWVudFBvbGljeV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENP UkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2 b2lkICopOwoKICBwcml2YXRlOgogICAgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBwdHJfOwoKICAg IElkQXNzaWdubWVudFBvbGljeV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIElk QXNzaWdubWVudFBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMp OwogIH07CiMgOTcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIElkQXNzaWdu bWVudFBvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgSWRBc3NpZ25tZW50UG9saWN5X291dCAo SWRBc3NpZ25tZW50UG9saWN5X3B0ciAmKTsKICAgIElkQXNzaWdubWVudFBvbGljeV9vdXQgKElk QXNzaWdubWVudFBvbGljeV92YXIgJik7CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lfb3V0IChjb25z dCBJZEFzc2lnbm1lbnRQb2xpY3lfb3V0ICYpOwogICAgSWRBc3NpZ25tZW50UG9saWN5X291dCAm b3BlcmF0b3I9IChjb25zdCBJZEFzc2lnbm1lbnRQb2xpY3lfb3V0ICYpOwogICAgSWRBc3NpZ25t ZW50UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBJZEFzc2lnbm1lbnRQb2xpY3lfdmFyICYp OwogICAgSWRBc3NpZ25tZW50UG9saWN5X291dCAmb3BlcmF0b3I9IChJZEFzc2lnbm1lbnRQb2xp Y3lfcHRyKTsKICAgIG9wZXJhdG9yIElkQXNzaWdubWVudFBvbGljeV9wdHIgJigpOwogICAgSWRB c3NpZ25tZW50UG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIElkQXNzaWdubWVudFBvbGljeV9w dHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lf cHRyICZwdHJfOwogIH07CiMgOTk2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgpjbGFzcyBJ ZEFzc2lnbm1lbnRQb2xpY3k6IHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpQb2xpY3kKICB7CiAgcHVi bGljOgoKICAgIHR5cGVkZWYgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBfcHRyX3R5cGU7CiAgICB0 eXBlZGVmIElkQXNzaWdubWVudFBvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIElk QXNzaWdubWVudFBvbGljeV9wdHIgX2R1cGxpY2F0ZSAoSWRBc3NpZ25tZW50UG9saWN5X3B0ciBv YmopOwogICAgc3RhdGljIElkQXNzaWdubWVudFBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAg Q09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKQogICAgICApOwogICAgc3RhdGljIElkQXNzaWdubWVudFBvbGljeV9wdHIgX3VuY2hl Y2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBJZEFzc2ln bm1lbnRQb2xpY3lfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKElkQXNz aWdubWVudFBvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6 OklkQXNzaWdubWVudFBvbGljeVZhbHVlIHZhbHVlICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0 cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBv c2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgSWRBc3NpZ25tZW50UG9s aWN5ICgpOwoKICAgIHZpcnR1YWwgfklkQXNzaWdubWVudFBvbGljeSAodm9pZCk7CiAgcHJpdmF0 ZToKICAgIElkQXNzaWdubWVudFBvbGljeSAoY29uc3QgSWRBc3NpZ25tZW50UG9saWN5ICYpOwog ICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IElkQXNzaWdubWVudFBvbGljeSAmKTsKICB9OwoKCgoK ICBlbnVtIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeVZhbHVlCiAgewogICAgICAgIElNUExJQ0lU X0FDVElWQVRJT04sCiAgICAgICAgTk9fSU1QTElDSVRfQUNUSVZBVElPTgogIH07CgoKCiAgdHlw ZWRlZiBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lWYWx1ZSAmSW1wbGljaXRBY3RpdmF0aW9uUG9s aWN5VmFsdWVfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JbXBsaWNpdEFj dGl2YXRpb25Qb2xpY3lWYWx1ZTsKCgoKCgogIGNsYXNzIEltcGxpY2l0QWN0aXZhdGlvblBvbGlj eTsKICB0eXBlZGVmIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeSAqSW1wbGljaXRBY3RpdmF0aW9u UG9saWN5X3B0cjsKCgoKCgoKCiAgY2xhc3MgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhciA6 IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgSW1wbGljaXRBY3RpdmF0aW9u UG9saWN5X3ZhciAodm9pZCk7CiAgICBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfdmFyIChJbXBs aWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIHApIDogcHRyXyAocCkge30KICAgIEltcGxpY2l0QWN0 aXZhdGlvblBvbGljeV92YXIgKGNvbnN0IEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV92YXIgJik7 CiAgICB+SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhciAodm9pZCk7CgogICAgSW1wbGljaXRB Y3RpdmF0aW9uUG9saWN5X3ZhciAmb3BlcmF0b3I9IChJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lf cHRyKTsKICAgIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3Qg SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhciAmKTsKICAgIEltcGxpY2l0QWN0aXZhdGlvblBv bGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgSW1w bGljaXRBY3RpdmF0aW9uUG9saWN5X3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBJbXBsaWNp dEFjdGl2YXRpb25Qb2xpY3lfcHRyICYoKTsKCiAgICBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lf cHRyIGluICh2b2lkKSBjb25zdDsKICAgIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgJmlu b3V0ICh2b2lkKTsKICAgIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgJm91dCAodm9pZCk7 CiAgICBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIF9yZXRuICh2b2lkKTsKICAgIEltcGxp Y2l0QWN0aXZhdGlvblBvbGljeV9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBJ bXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIGR1cGxpY2F0ZSAoSW1wbGljaXRBY3RpdmF0aW9u UG9saWN5X3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChJbXBsaWNpdEFjdGl2YXRpb25Q b2xpY3lfcHRyKTsKICAgIHN0YXRpYyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIG5pbCAo dm9pZCk7CiAgICBzdGF0aWMgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0ciBuYXJyb3cgKENP UkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpP YmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBJbXBsaWNpdEFjdGl2YXRp b25Qb2xpY3lfcHRyIHB0cl87CgogICAgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhciAoY29u c3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhciAm b3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyAxMTEyICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVy L1BvcnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9vdXQK ICB7CiAgcHVibGljOgogICAgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X291dCAoSW1wbGljaXRB Y3RpdmF0aW9uUG9saWN5X3B0ciAmKTsKICAgIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9vdXQg KEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV92YXIgJik7CiAgICBJbXBsaWNpdEFjdGl2YXRpb25Q b2xpY3lfb3V0IChjb25zdCBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfb3V0ICYpOwogICAgSW1w bGljaXRBY3RpdmF0aW9uUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBJbXBsaWNpdEFjdGl2 YXRpb25Qb2xpY3lfb3V0ICYpOwogICAgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X291dCAmb3Bl cmF0b3I9IChjb25zdCBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfdmFyICYpOwogICAgSW1wbGlj aXRBY3RpdmF0aW9uUG9saWN5X291dCAmb3BlcmF0b3I9IChJbXBsaWNpdEFjdGl2YXRpb25Qb2xp Y3lfcHRyKTsKICAgIG9wZXJhdG9yIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgJigpOwog ICAgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIEltcGxpY2l0 QWN0aXZhdGlvblBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBJ bXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyICZwdHJfOwogIH07CiMgMTEzNiAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Q b3J0YWJsZVNlcnZlckMuaCIKY2xhc3MgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5OiBwdWJsaWMg dmlydHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIEltcGxpY2l0 QWN0aXZhdGlvblBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBJbXBsaWNpdEFjdGl2 YXRpb25Qb2xpY3lfdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBJbXBsaWNpdEFjdGl2YXRp b25Qb2xpY3lfcHRyIF9kdXBsaWNhdGUgKEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgb2Jq KTsKICAgIHN0YXRpYyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIF9uYXJyb3cgKAogICAg ICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lf cHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0 aWMgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAg ICAgcmV0dXJuIChJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyKTA7CiAgICAgIH0KCiAgICB2 aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lWYWx1ZSB2YWx1 ZSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAg ICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2 b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFs IGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHBy b3RlY3RlZDoKICAgIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5J bXBsaWNpdEFjdGl2YXRpb25Qb2xpY3kgKHZvaWQpOwogIHByaXZhdGU6CiAgICBJbXBsaWNpdEFj dGl2YXRpb25Qb2xpY3kgKGNvbnN0IEltcGxpY2l0QWN0aXZhdGlvblBvbGljeSAmKTsKICAgIHZv aWQgb3BlcmF0b3I9IChjb25zdCBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3kgJik7CiAgfTsKCgoK CgoKICBlbnVtIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lWYWx1ZQogIHsKICAgICAgICBSRVRBSU4s CiAgICAgICAgTk9OX1JFVEFJTgogIH07CgoKCiAgdHlwZWRlZiBTZXJ2YW50UmV0ZW50aW9uUG9s aWN5VmFsdWUgJlNlcnZhbnRSZXRlbnRpb25Qb2xpY3lWYWx1ZV9vdXQ7CiAgZXh0ZXJuIENPUkJB OjpUeXBlQ29kZV9wdHIgX3RjX1NlcnZhbnRSZXRlbnRpb25Qb2xpY3lWYWx1ZTsKCgoKCgogIGNs YXNzIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3k7CiAgdHlwZWRlZiBTZXJ2YW50UmV0ZW50aW9uUG9s aWN5ICpTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cjsKCgoKCgoKCiAgY2xhc3MgU2VydmFudFJl dGVudGlvblBvbGljeV92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAg IFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfdmFyICh2b2lkKTsKICAgIFNlcnZhbnRSZXRlbnRpb25Q b2xpY3lfdmFyIChTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciBwKSA6IHB0cl8gKHApIHt9CiAg ICBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3ZhciAoY29uc3QgU2VydmFudFJldGVudGlvblBvbGlj eV92YXIgJik7CiAgICB+U2VydmFudFJldGVudGlvblBvbGljeV92YXIgKHZvaWQpOwoKICAgIFNl cnZhbnRSZXRlbnRpb25Qb2xpY3lfdmFyICZvcGVyYXRvcj0gKFNlcnZhbnRSZXRlbnRpb25Qb2xp Y3lfcHRyKTsKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0 IFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfdmFyICYpOwogICAgU2VydmFudFJldGVudGlvblBvbGlj eV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgU2VydmFu dFJldGVudGlvblBvbGljeV9wdHIgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgU2VydmFudFJldGVu dGlvblBvbGljeV9wdHIgJigpOwoKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIGluICh2 b2lkKSBjb25zdDsKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyICZpbm91dCAodm9pZCk7 CiAgICBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciAmb3V0ICh2b2lkKTsKICAgIFNlcnZhbnRS ZXRlbnRpb25Qb2xpY3lfcHRyIF9yZXRuICh2b2lkKTsKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xp Y3lfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgU2VydmFudFJldGVudGlvblBv bGljeV9wdHIgZHVwbGljYXRlIChTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cik7CiAgICBzdGF0 aWMgdm9pZCByZWxlYXNlIChTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cik7CiAgICBzdGF0aWMg U2VydmFudFJldGVudGlvblBvbGljeV9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBTZXJ2YW50 UmV0ZW50aW9uUG9saWN5X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmly b25tZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7Cgog IHByaXZhdGU6CiAgICBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciBwdHJfOwoKICAgIFNlcnZh bnRSZXRlbnRpb25Qb2xpY3lfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBTZXJ2 YW50UmV0ZW50aW9uUG9saWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJo cyk7CiAgfTsKIyAxMjU0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIFNlcnZh bnRSZXRlbnRpb25Qb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIFNlcnZhbnRSZXRlbnRpb25Q b2xpY3lfb3V0IChTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciAmKTsKICAgIFNlcnZhbnRSZXRl bnRpb25Qb2xpY3lfb3V0IChTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3ZhciAmKTsKICAgIFNlcnZh bnRSZXRlbnRpb25Qb2xpY3lfb3V0IChjb25zdCBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X291dCAm KTsKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFNlcnZh bnRSZXRlbnRpb25Qb2xpY3lfb3V0ICYpOwogICAgU2VydmFudFJldGVudGlvblBvbGljeV9vdXQg Jm9wZXJhdG9yPSAoY29uc3QgU2VydmFudFJldGVudGlvblBvbGljeV92YXIgJik7CiAgICBTZXJ2 YW50UmV0ZW50aW9uUG9saWN5X291dCAmb3BlcmF0b3I9IChTZXJ2YW50UmV0ZW50aW9uUG9saWN5 X3B0cik7CiAgICBvcGVyYXRvciBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciAmKCk7CiAgICBT ZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFNlcnZhbnRSZXRlbnRp b25Qb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgU2VydmFudFJl dGVudGlvblBvbGljeV9wdHIgJnB0cl87CiAgfTsKIyAxMjc4ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2Vy dmVyQy5oIgpjbGFzcyBTZXJ2YW50UmV0ZW50aW9uUG9saWN5OiBwdWJsaWMgdmlydHVhbCBDT1JC QTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIFNlcnZhbnRSZXRlbnRpb25Qb2xp Y3lfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgU2VydmFudFJldGVudGlvblBvbGljeV92YXIg X3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIF9kdXBs aWNhdGUgKFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIG9iaik7CiAgICBzdGF0aWMgU2VydmFu dFJldGVudGlvblBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIg b2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwog ICAgc3RhdGljIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIF91bmNoZWNrZWRfbmFycm93ICgK ICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0 X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgU2VydmFudFJldGVudGlvblBvbGlj eV9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoU2VydmFudFJldGVudGlv blBvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZh bnRSZXRlbnRpb25Qb2xpY3lWYWx1ZSB2YWx1ZSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0 X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0 aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJf YXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3Np dG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgIFNlcnZhbnRSZXRlbnRpb25Q b2xpY3kgKCk7CgogICAgdmlydHVhbCB+U2VydmFudFJldGVudGlvblBvbGljeSAodm9pZCk7CiAg cHJpdmF0ZToKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3kgKGNvbnN0IFNlcnZhbnRSZXRlbnRp b25Qb2xpY3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgU2VydmFudFJldGVudGlvblBv bGljeSAmKTsKICB9OwoKCgoKCgogIGVudW0gUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1ZQog IHsKICAgICAgICBVU0VfQUNUSVZFX09CSkVDVF9NQVBfT05MWSwKICAgICAgICBVU0VfREVGQVVM VF9TRVJWQU5ULAogICAgICAgIFVTRV9TRVJWQU5UX01BTkFHRVIKICB9OwoKCgogIHR5cGVkZWYg UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1ZSAmUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1 ZV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1JlcXVlc3RQcm9jZXNzaW5n UG9saWN5VmFsdWU7CgoKCgoKICBjbGFzcyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeTsKICB0eXBl ZGVmIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5ICpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHI7 CgoKCgoKCgogIGNsYXNzIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3ZhciA6IHB1YmxpYyBUQU9f QmFzZV92YXIKICB7CiAgcHVibGljOgogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfdmFyICh2 b2lkKTsKICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3ZhciAoUmVxdWVzdFByb2Nlc3NpbmdQ b2xpY3lfcHRyIHApIDogcHRyXyAocCkge30KICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3Zh ciAoY29uc3QgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfdmFyICYpOwogICAgflJlcXVlc3RQcm9j ZXNzaW5nUG9saWN5X3ZhciAodm9pZCk7CgogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfdmFy ICZvcGVyYXRvcj0gKFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0cik7CiAgICBSZXF1ZXN0UHJv Y2Vzc2luZ1BvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUmVxdWVzdFByb2Nlc3NpbmdQb2xp Y3lfdmFyICYpOwogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZv aWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0 ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgJigp OwoKICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBS ZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgJmlub3V0ICh2b2lkKTsKICAgIFJlcXVlc3RQcm9j ZXNzaW5nUG9saWN5X3B0ciAmb3V0ICh2b2lkKTsKICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5 X3B0ciBfcmV0biAodm9pZCk7CiAgICBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgcHRyICh2 b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgZHVw bGljYXRlIChSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVs ZWFzZSAoUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyBSZXF1ZXN0UHJv Y2Vzc2luZ1BvbGljeV9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBSZXF1ZXN0UHJvY2Vzc2lu Z1BvbGljeV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAm KTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRl OgogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyIHB0cl87CgogICAgUmVxdWVzdFByb2Nl c3NpbmdQb2xpY3lfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBSZXF1ZXN0UHJv Y2Vzc2luZ1BvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwog IH07CiMgMTM5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBSZXF1ZXN0UHJv Y2Vzc2luZ1BvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xp Y3lfb3V0IChSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgJik7CiAgICBSZXF1ZXN0UHJvY2Vz c2luZ1BvbGljeV9vdXQgKFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3ZhciAmKTsKICAgIFJlcXVl c3RQcm9jZXNzaW5nUG9saWN5X291dCAoY29uc3QgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfb3V0 ICYpOwogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFJl cXVlc3RQcm9jZXNzaW5nUG9saWN5X291dCAmKTsKICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5 X291dCAmb3BlcmF0b3I9IChjb25zdCBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV92YXIgJik7CiAg ICBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9vdXQgJm9wZXJhdG9yPSAoUmVxdWVzdFByb2Nlc3Np bmdQb2xpY3lfcHRyKTsKICAgIG9wZXJhdG9yIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciAm KCk7CiAgICBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgJnB0ciAodm9pZCk7CiAgICBSZXF1 ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAg ICBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgJnB0cl87CiAgfTsKIyAxNDIxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVy L1BvcnRhYmxlU2VydmVyQy5oIgpjbGFzcyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeTogcHVibGlj IHZpcnR1YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBSZXF1ZXN0 UHJvY2Vzc2luZ1BvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZXF1ZXN0UHJvY2Vz c2luZ1BvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFJlcXVlc3RQcm9jZXNzaW5n UG9saWN5X3B0ciBfZHVwbGljYXRlIChSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgb2JqKTsK ICAgIHN0YXRpYyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAg Q09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciBf dW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAg IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJl cXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0 dXJuIChSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwg UG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNzaW5nUG9saWN5VmFsdWUgdmFsdWUgKAogICAg ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9 CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93 ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rh b19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBj aGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6 CiAgICBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5SZXF1ZXN0UHJv Y2Vzc2luZ1BvbGljeSAodm9pZCk7CiAgcHJpdmF0ZToKICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9s aWN5IChjb25zdCBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9 IChjb25zdCBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSAmKTsKICB9OwojIDE0NzYgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIv UG9ydGFibGVTZXJ2ZXJDLmgiCiAgY2xhc3MgUE9BTWFuYWdlcjsKICB0eXBlZGVmIFBPQU1hbmFn ZXIgKlBPQU1hbmFnZXJfcHRyOwoKCgoKCgoKICBjbGFzcyBQT0FNYW5hZ2VyX3ZhciA6IHB1Ymxp YyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgUE9BTWFuYWdlcl92YXIgKHZvaWQpOwog ICAgUE9BTWFuYWdlcl92YXIgKFBPQU1hbmFnZXJfcHRyIHApIDogcHRyXyAocCkge30KICAgIFBP QU1hbmFnZXJfdmFyIChjb25zdCBQT0FNYW5hZ2VyX3ZhciAmKTsKICAgIH5QT0FNYW5hZ2VyX3Zh ciAodm9pZCk7CgogICAgUE9BTWFuYWdlcl92YXIgJm9wZXJhdG9yPSAoUE9BTWFuYWdlcl9wdHIp OwogICAgUE9BTWFuYWdlcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgUE9BTWFuYWdlcl92YXIgJik7 CiAgICBQT0FNYW5hZ2VyX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRv ciBjb25zdCBQT0FNYW5hZ2VyX3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQT0FNYW5hZ2Vy X3B0ciAmKCk7CgogICAgUE9BTWFuYWdlcl9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUE9BTWFu YWdlcl9wdHIgJmlub3V0ICh2b2lkKTsKICAgIFBPQU1hbmFnZXJfcHRyICZvdXQgKHZvaWQpOwog ICAgUE9BTWFuYWdlcl9wdHIgX3JldG4gKHZvaWQpOwogICAgUE9BTWFuYWdlcl9wdHIgcHRyICh2 b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBQT0FNYW5hZ2VyX3B0ciBkdXBsaWNhdGUgKFBPQU1h bmFnZXJfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFBPQU1hbmFnZXJfcHRyKTsKICAg IHN0YXRpYyBQT0FNYW5hZ2VyX3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFBPQU1hbmFnZXJf cHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBz dGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFBP QU1hbmFnZXJfcHRyIHB0cl87CgogICAgUE9BTWFuYWdlcl92YXIgKGNvbnN0IFRBT19CYXNlX3Zh ciAmcmhzKTsKICAgIFBPQU1hbmFnZXJfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3Zh ciAmcmhzKTsKICB9OwojIDE1MjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiCiAgY2xhc3Mg UE9BTWFuYWdlcl9vdXQKICB7CiAgcHVibGljOgogICAgUE9BTWFuYWdlcl9vdXQgKFBPQU1hbmFn ZXJfcHRyICYpOwogICAgUE9BTWFuYWdlcl9vdXQgKFBPQU1hbmFnZXJfdmFyICYpOwogICAgUE9B TWFuYWdlcl9vdXQgKGNvbnN0IFBPQU1hbmFnZXJfb3V0ICYpOwogICAgUE9BTWFuYWdlcl9vdXQg Jm9wZXJhdG9yPSAoY29uc3QgUE9BTWFuYWdlcl9vdXQgJik7CiAgICBQT0FNYW5hZ2VyX291dCAm b3BlcmF0b3I9IChjb25zdCBQT0FNYW5hZ2VyX3ZhciAmKTsKICAgIFBPQU1hbmFnZXJfb3V0ICZv cGVyYXRvcj0gKFBPQU1hbmFnZXJfcHRyKTsKICAgIG9wZXJhdG9yIFBPQU1hbmFnZXJfcHRyICYo KTsKICAgIFBPQU1hbmFnZXJfcHRyICZwdHIgKHZvaWQpOwogICAgUE9BTWFuYWdlcl9wdHIgb3Bl cmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBQT0FNYW5hZ2VyX3B0ciAmcHRyXzsKICB9 OwojIDE1NTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiCmNsYXNzIFBPQU1hbmFnZXIgOiBw dWJsaWMgdmlydHVhbCBDT1JCQV9PYmplY3QKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUE9B TWFuYWdlcl9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBQT0FNYW5hZ2VyX3ZhciBfdmFyX3R5 cGU7CgoKCiAgICBzdGF0aWMgUE9BTWFuYWdlcl9wdHIgX2R1cGxpY2F0ZSAoUE9BTWFuYWdlcl9w dHIgb2JqKTsKICAgIHN0YXRpYyBQT0FNYW5hZ2VyX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JC QTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB X0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50 ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUE9BTWFuYWdlcl9wdHIgX3VuY2hlY2tlZF9uYXJyb3cg KAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBQT0FNYW5hZ2VyX3B0ciBfbmls ICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChQT0FNYW5hZ2VyX3B0cikwOwogICAgICB9 CgoKCgoKICAgIGNsYXNzIEFkYXB0ZXJJbmFjdGl2ZSA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2Vw dGlvbgogICAgewogICAgcHVibGljOgoKICAgICAgQWRhcHRlckluYWN0aXZlICh2b2lkKTsKCgog ICAgICBBZGFwdGVySW5hY3RpdmUgKGNvbnN0IEFkYXB0ZXJJbmFjdGl2ZSAmKTsKCgogICAgICB+ QWRhcHRlckluYWN0aXZlICh2b2lkKTsKCgogICAgICBBZGFwdGVySW5hY3RpdmUgJm9wZXJhdG9y PSAoY29uc3QgQWRhcHRlckluYWN0aXZlICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAo dm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091 dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0 OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENE UiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3Rh dGljIEFkYXB0ZXJJbmFjdGl2ZSAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgog ICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIH07CgoKCgog ICAgZW51bSBTdGF0ZQogICAgewogICAgICAgICAgICBIT0xESU5HLAogICAgICAgICAgICBBQ1RJ VkUsCiAgICAgICAgICAgIERJU0NBUkRJTkcsCiAgICAgICAgICAgIElOQUNUSVZFCiAgICB9Owog ICAgdHlwZWRlZiBTdGF0ZSAmU3RhdGVfb3V0OwogICAgdmlydHVhbCB2b2lkIGFjdGl2YXRlICgK ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0 aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0FNYW5hZ2Vy OjpBZGFwdGVySW5hY3RpdmUgKSA9IDA7CgoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgaG9sZF9yZXF1 ZXN0cyAoCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gd2FpdF9mb3JfY29tcGxldGlvbiwKICAgICAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAo IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0FNYW5hZ2VyOjpBZGFw dGVySW5hY3RpdmUgKSA9IDA7CgoKCgogICAgdmlydHVhbCB2b2lkIGRpc2NhcmRfcmVxdWVzdHMg KAogICAgICAgIENPUkJBOjpCb29sZWFuIHdhaXRfZm9yX2NvbXBsZXRpb24sCiAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC QTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcjo6QWRhcHRlcklu YWN0aXZlICkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCBkZWFjdGl2YXRlICgKICAgICAgICBD T1JCQTo6Qm9vbGVhbiBldGhlcmVhbGl6ZV9vYmplY3RzLAogICAgICAgIENPUkJBOjpCb29sZWFu IHdhaXRfZm9yX2NvbXBsZXRpb24sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0 YWJsZVNlcnZlcjo6UE9BTWFuYWdlcjo6QWRhcHRlckluYWN0aXZlICkgPSAwOwoKCgoKCgogICAg dmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcjo6U3RhdGUgZ2V0X3N0YXRlICgKICAg ICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg PQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJv dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90 YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3Qg Y2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVk OgogICAgUE9BTWFuYWdlciAoKTsKCiAgICB2aXJ0dWFsIH5QT0FNYW5hZ2VyICh2b2lkKTsKICBw cml2YXRlOgogICAgUE9BTWFuYWdlciAoY29uc3QgUE9BTWFuYWdlciAmKTsKICAgIHZvaWQgb3Bl cmF0b3I9IChjb25zdCBQT0FNYW5hZ2VyICYpOwogIH07CiMgMTcwMCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJs ZVNlcnZlckMuaCIKICBjbGFzcyBBZGFwdGVyQWN0aXZhdG9yOwogIHR5cGVkZWYgQWRhcHRlckFj dGl2YXRvciAqQWRhcHRlckFjdGl2YXRvcl9wdHI7CgoKCgoKCgogIGNsYXNzIEFkYXB0ZXJBY3Rp dmF0b3JfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBBZGFwdGVy QWN0aXZhdG9yX3ZhciAodm9pZCk7CiAgICBBZGFwdGVyQWN0aXZhdG9yX3ZhciAoQWRhcHRlckFj dGl2YXRvcl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgQWRhcHRlckFjdGl2YXRvcl92YXIgKGNv bnN0IEFkYXB0ZXJBY3RpdmF0b3JfdmFyICYpOwogICAgfkFkYXB0ZXJBY3RpdmF0b3JfdmFyICh2 b2lkKTsKCiAgICBBZGFwdGVyQWN0aXZhdG9yX3ZhciAmb3BlcmF0b3I9IChBZGFwdGVyQWN0aXZh dG9yX3B0cik7CiAgICBBZGFwdGVyQWN0aXZhdG9yX3ZhciAmb3BlcmF0b3I9IChjb25zdCBBZGFw dGVyQWN0aXZhdG9yX3ZhciAmKTsKICAgIEFkYXB0ZXJBY3RpdmF0b3JfcHRyIG9wZXJhdG9yLT4g KHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IEFkYXB0ZXJBY3RpdmF0b3JfcHRyICYo KSBjb25zdDsKICAgIG9wZXJhdG9yIEFkYXB0ZXJBY3RpdmF0b3JfcHRyICYoKTsKCiAgICBBZGFw dGVyQWN0aXZhdG9yX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBBZGFwdGVyQWN0aXZhdG9yX3B0 ciAmaW5vdXQgKHZvaWQpOwogICAgQWRhcHRlckFjdGl2YXRvcl9wdHIgJm91dCAodm9pZCk7CiAg ICBBZGFwdGVyQWN0aXZhdG9yX3B0ciBfcmV0biAodm9pZCk7CiAgICBBZGFwdGVyQWN0aXZhdG9y X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIEFkYXB0ZXJBY3RpdmF0b3JfcHRy IGR1cGxpY2F0ZSAoQWRhcHRlckFjdGl2YXRvcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFz ZSAoQWRhcHRlckFjdGl2YXRvcl9wdHIpOwogICAgc3RhdGljIEFkYXB0ZXJBY3RpdmF0b3JfcHRy IG5pbCAodm9pZCk7CiAgICBzdGF0aWMgQWRhcHRlckFjdGl2YXRvcl9wdHIgbmFycm93IChDT1JC QTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2Jq ZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgQWRhcHRlckFjdGl2YXRvcl9w dHIgcHRyXzsKCiAgICBBZGFwdGVyQWN0aXZhdG9yX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZy aHMpOwogICAgQWRhcHRlckFjdGl2YXRvcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2Vf dmFyICZyaHMpOwogIH07CiMgMTc1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFz cyBBZGFwdGVyQWN0aXZhdG9yX291dAogIHsKICBwdWJsaWM6CiAgICBBZGFwdGVyQWN0aXZhdG9y X291dCAoQWRhcHRlckFjdGl2YXRvcl9wdHIgJik7CiAgICBBZGFwdGVyQWN0aXZhdG9yX291dCAo QWRhcHRlckFjdGl2YXRvcl92YXIgJik7CiAgICBBZGFwdGVyQWN0aXZhdG9yX291dCAoY29uc3Qg QWRhcHRlckFjdGl2YXRvcl9vdXQgJik7CiAgICBBZGFwdGVyQWN0aXZhdG9yX291dCAmb3BlcmF0 b3I9IChjb25zdCBBZGFwdGVyQWN0aXZhdG9yX291dCAmKTsKICAgIEFkYXB0ZXJBY3RpdmF0b3Jf b3V0ICZvcGVyYXRvcj0gKGNvbnN0IEFkYXB0ZXJBY3RpdmF0b3JfdmFyICYpOwogICAgQWRhcHRl ckFjdGl2YXRvcl9vdXQgJm9wZXJhdG9yPSAoQWRhcHRlckFjdGl2YXRvcl9wdHIpOwogICAgb3Bl cmF0b3IgQWRhcHRlckFjdGl2YXRvcl9wdHIgJigpOwogICAgQWRhcHRlckFjdGl2YXRvcl9wdHIg JnB0ciAodm9pZCk7CiAgICBBZGFwdGVyQWN0aXZhdG9yX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsK CiAgcHJpdmF0ZToKICAgIEFkYXB0ZXJBY3RpdmF0b3JfcHRyICZwdHJfOwogIH07CiMgMTc3NiAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJs ZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKY2xhc3MgQWRhcHRlckFjdGl2YXRvciA6IHB1Ymxp YyB2aXJ0dWFsIENPUkJBX09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBBZGFwdGVy QWN0aXZhdG9yX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIEFkYXB0ZXJBY3RpdmF0b3JfdmFy IF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBBZGFwdGVyQWN0aXZhdG9yX3B0ciBfZHVwbGljYXRl IChBZGFwdGVyQWN0aXZhdG9yX3B0ciBvYmopOwogICAgc3RhdGljIEFkYXB0ZXJBY3RpdmF0b3Jf cHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBBZGFwdGVy QWN0aXZhdG9yX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9w dHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAp OwogICAgc3RhdGljIEFkYXB0ZXJBY3RpdmF0b3JfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAg ICAgICByZXR1cm4gKEFkYXB0ZXJBY3RpdmF0b3JfcHRyKTA7CiAgICAgIH0KCiAgICB2aXJ0dWFs IENPUkJBOjpCb29sZWFuIHVua25vd25fYWRhcHRlciAoCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6 OlBPQV9wdHIgcGFyZW50LAogICAgICAgIGNvbnN0IGNoYXIgKiBuYW1lLAogICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6 OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUlu dGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50 ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBBZGFw dGVyQWN0aXZhdG9yICgpOwoKICAgIHZpcnR1YWwgfkFkYXB0ZXJBY3RpdmF0b3IgKHZvaWQpOwog IHByaXZhdGU6CiAgICBBZGFwdGVyQWN0aXZhdG9yIChjb25zdCBBZGFwdGVyQWN0aXZhdG9yICYp OwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFkYXB0ZXJBY3RpdmF0b3IgJik7CiAgfTsKIyAx ODMxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv cnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIFNlcnZhbnRNYW5hZ2VyOwog IHR5cGVkZWYgU2VydmFudE1hbmFnZXIgKlNlcnZhbnRNYW5hZ2VyX3B0cjsKCgoKCgoKCiAgY2xh c3MgU2VydmFudE1hbmFnZXJfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6 CiAgICBTZXJ2YW50TWFuYWdlcl92YXIgKHZvaWQpOwogICAgU2VydmFudE1hbmFnZXJfdmFyIChT ZXJ2YW50TWFuYWdlcl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgU2VydmFudE1hbmFnZXJfdmFy IChjb25zdCBTZXJ2YW50TWFuYWdlcl92YXIgJik7CiAgICB+U2VydmFudE1hbmFnZXJfdmFyICh2 b2lkKTsKCiAgICBTZXJ2YW50TWFuYWdlcl92YXIgJm9wZXJhdG9yPSAoU2VydmFudE1hbmFnZXJf cHRyKTsKICAgIFNlcnZhbnRNYW5hZ2VyX3ZhciAmb3BlcmF0b3I9IChjb25zdCBTZXJ2YW50TWFu YWdlcl92YXIgJik7CiAgICBTZXJ2YW50TWFuYWdlcl9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29u c3Q7CgogICAgb3BlcmF0b3IgY29uc3QgU2VydmFudE1hbmFnZXJfcHRyICYoKSBjb25zdDsKICAg IG9wZXJhdG9yIFNlcnZhbnRNYW5hZ2VyX3B0ciAmKCk7CgogICAgU2VydmFudE1hbmFnZXJfcHRy IGluICh2b2lkKSBjb25zdDsKICAgIFNlcnZhbnRNYW5hZ2VyX3B0ciAmaW5vdXQgKHZvaWQpOwog ICAgU2VydmFudE1hbmFnZXJfcHRyICZvdXQgKHZvaWQpOwogICAgU2VydmFudE1hbmFnZXJfcHRy IF9yZXRuICh2b2lkKTsKICAgIFNlcnZhbnRNYW5hZ2VyX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoK CgogICAgc3RhdGljIFNlcnZhbnRNYW5hZ2VyX3B0ciBkdXBsaWNhdGUgKFNlcnZhbnRNYW5hZ2Vy X3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChTZXJ2YW50TWFuYWdlcl9wdHIpOwogICAg c3RhdGljIFNlcnZhbnRNYW5hZ2VyX3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFNlcnZhbnRN YW5hZ2VyX3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYp OwogICAgc3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6 CiAgICBTZXJ2YW50TWFuYWdlcl9wdHIgcHRyXzsKCiAgICBTZXJ2YW50TWFuYWdlcl92YXIgKGNv bnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIFNlcnZhbnRNYW5hZ2VyX3ZhciAmb3BlcmF0b3I9 IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyAxODgzICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxl U2VydmVyQy5oIgogIGNsYXNzIFNlcnZhbnRNYW5hZ2VyX291dAogIHsKICBwdWJsaWM6CiAgICBT ZXJ2YW50TWFuYWdlcl9vdXQgKFNlcnZhbnRNYW5hZ2VyX3B0ciAmKTsKICAgIFNlcnZhbnRNYW5h Z2VyX291dCAoU2VydmFudE1hbmFnZXJfdmFyICYpOwogICAgU2VydmFudE1hbmFnZXJfb3V0IChj b25zdCBTZXJ2YW50TWFuYWdlcl9vdXQgJik7CiAgICBTZXJ2YW50TWFuYWdlcl9vdXQgJm9wZXJh dG9yPSAoY29uc3QgU2VydmFudE1hbmFnZXJfb3V0ICYpOwogICAgU2VydmFudE1hbmFnZXJfb3V0 ICZvcGVyYXRvcj0gKGNvbnN0IFNlcnZhbnRNYW5hZ2VyX3ZhciAmKTsKICAgIFNlcnZhbnRNYW5h Z2VyX291dCAmb3BlcmF0b3I9IChTZXJ2YW50TWFuYWdlcl9wdHIpOwogICAgb3BlcmF0b3IgU2Vy dmFudE1hbmFnZXJfcHRyICYoKTsKICAgIFNlcnZhbnRNYW5hZ2VyX3B0ciAmcHRyICh2b2lkKTsK ICAgIFNlcnZhbnRNYW5hZ2VyX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAg IFNlcnZhbnRNYW5hZ2VyX3B0ciAmcHRyXzsKICB9OwojIDE5MDcgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVT ZXJ2ZXJDLmgiCmNsYXNzIFNlcnZhbnRNYW5hZ2VyIDogcHVibGljIHZpcnR1YWwgQ09SQkFfT2Jq ZWN0CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIFNlcnZhbnRNYW5hZ2VyX3B0ciBfcHRyX3R5 cGU7CiAgICB0eXBlZGVmIFNlcnZhbnRNYW5hZ2VyX3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0 aWMgU2VydmFudE1hbmFnZXJfcHRyIF9kdXBsaWNhdGUgKFNlcnZhbnRNYW5hZ2VyX3B0ciBvYmop OwogICAgc3RhdGljIFNlcnZhbnRNYW5hZ2VyX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6 T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgp CiAgICAgICk7CiAgICBzdGF0aWMgU2VydmFudE1hbmFnZXJfcHRyIF91bmNoZWNrZWRfbmFycm93 ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgU2VydmFudE1hbmFnZXJfcHRy IF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKFNlcnZhbnRNYW5hZ2VyX3B0cikw OwogICAgICB9CgogICAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJp dGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9y eV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgIFNlcnZhbnRNYW5hZ2VyICgpOwoK ICAgIHZpcnR1YWwgflNlcnZhbnRNYW5hZ2VyICh2b2lkKTsKICBwcml2YXRlOgogICAgU2VydmFu dE1hbmFnZXIgKGNvbnN0IFNlcnZhbnRNYW5hZ2VyICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNv bnN0IFNlcnZhbnRNYW5hZ2VyICYpOwogIH07CiMgMTk1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZl ckMuaCIKICBjbGFzcyBTZXJ2YW50QWN0aXZhdG9yOwogIHR5cGVkZWYgU2VydmFudEFjdGl2YXRv ciAqU2VydmFudEFjdGl2YXRvcl9wdHI7CgoKCgoKCgogIGNsYXNzIFNlcnZhbnRBY3RpdmF0b3Jf dmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBTZXJ2YW50QWN0aXZh dG9yX3ZhciAodm9pZCk7CiAgICBTZXJ2YW50QWN0aXZhdG9yX3ZhciAoU2VydmFudEFjdGl2YXRv cl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgU2VydmFudEFjdGl2YXRvcl92YXIgKGNvbnN0IFNl cnZhbnRBY3RpdmF0b3JfdmFyICYpOwogICAgflNlcnZhbnRBY3RpdmF0b3JfdmFyICh2b2lkKTsK CiAgICBTZXJ2YW50QWN0aXZhdG9yX3ZhciAmb3BlcmF0b3I9IChTZXJ2YW50QWN0aXZhdG9yX3B0 cik7CiAgICBTZXJ2YW50QWN0aXZhdG9yX3ZhciAmb3BlcmF0b3I9IChjb25zdCBTZXJ2YW50QWN0 aXZhdG9yX3ZhciAmKTsKICAgIFNlcnZhbnRBY3RpdmF0b3JfcHRyIG9wZXJhdG9yLT4gKHZvaWQp IGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFNlcnZhbnRBY3RpdmF0b3JfcHRyICYoKSBjb25z dDsKICAgIG9wZXJhdG9yIFNlcnZhbnRBY3RpdmF0b3JfcHRyICYoKTsKCiAgICBTZXJ2YW50QWN0 aXZhdG9yX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBTZXJ2YW50QWN0aXZhdG9yX3B0ciAmaW5v dXQgKHZvaWQpOwogICAgU2VydmFudEFjdGl2YXRvcl9wdHIgJm91dCAodm9pZCk7CiAgICBTZXJ2 YW50QWN0aXZhdG9yX3B0ciBfcmV0biAodm9pZCk7CiAgICBTZXJ2YW50QWN0aXZhdG9yX3B0ciBw dHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFNlcnZhbnRBY3RpdmF0b3JfcHRyIGR1cGxp Y2F0ZSAoU2VydmFudEFjdGl2YXRvcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoU2Vy dmFudEFjdGl2YXRvcl9wdHIpOwogICAgc3RhdGljIFNlcnZhbnRBY3RpdmF0b3JfcHRyIG5pbCAo dm9pZCk7CiAgICBzdGF0aWMgU2VydmFudEFjdGl2YXRvcl9wdHIgbmFycm93IChDT1JCQTo6T2Jq ZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICog dXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgU2VydmFudEFjdGl2YXRvcl9wdHIgcHRy XzsKCiAgICBTZXJ2YW50QWN0aXZhdG9yX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwog ICAgU2VydmFudEFjdGl2YXRvcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZy aHMpOwogIH07CiMgMjAwNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBTZXJ2 YW50QWN0aXZhdG9yX291dAogIHsKICBwdWJsaWM6CiAgICBTZXJ2YW50QWN0aXZhdG9yX291dCAo U2VydmFudEFjdGl2YXRvcl9wdHIgJik7CiAgICBTZXJ2YW50QWN0aXZhdG9yX291dCAoU2VydmFu dEFjdGl2YXRvcl92YXIgJik7CiAgICBTZXJ2YW50QWN0aXZhdG9yX291dCAoY29uc3QgU2VydmFu dEFjdGl2YXRvcl9vdXQgJik7CiAgICBTZXJ2YW50QWN0aXZhdG9yX291dCAmb3BlcmF0b3I9IChj b25zdCBTZXJ2YW50QWN0aXZhdG9yX291dCAmKTsKICAgIFNlcnZhbnRBY3RpdmF0b3Jfb3V0ICZv cGVyYXRvcj0gKGNvbnN0IFNlcnZhbnRBY3RpdmF0b3JfdmFyICYpOwogICAgU2VydmFudEFjdGl2 YXRvcl9vdXQgJm9wZXJhdG9yPSAoU2VydmFudEFjdGl2YXRvcl9wdHIpOwogICAgb3BlcmF0b3Ig U2VydmFudEFjdGl2YXRvcl9wdHIgJigpOwogICAgU2VydmFudEFjdGl2YXRvcl9wdHIgJnB0ciAo dm9pZCk7CiAgICBTZXJ2YW50QWN0aXZhdG9yX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJp dmF0ZToKICAgIFNlcnZhbnRBY3RpdmF0b3JfcHRyICZwdHJfOwogIH07CiMgMjAyOCAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZl ci9Qb3J0YWJsZVNlcnZlckMuaCIKY2xhc3MgU2VydmFudEFjdGl2YXRvcjogcHVibGljIHZpcnR1 YWwgU2VydmFudE1hbmFnZXIKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgU2VydmFudEFjdGl2 YXRvcl9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBTZXJ2YW50QWN0aXZhdG9yX3ZhciBfdmFy X3R5cGU7CgoKCiAgICBzdGF0aWMgU2VydmFudEFjdGl2YXRvcl9wdHIgX2R1cGxpY2F0ZSAoU2Vy dmFudEFjdGl2YXRvcl9wdHIgb2JqKTsKICAgIHN0YXRpYyBTZXJ2YW50QWN0aXZhdG9yX3B0ciBf bmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgU2VydmFudEFjdGl2 YXRvcl9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9i aiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAg IHN0YXRpYyBTZXJ2YW50QWN0aXZhdG9yX3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAg cmV0dXJuIChTZXJ2YW50QWN0aXZhdG9yX3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBQb3J0 YWJsZVNlcnZlcjo6U2VydmFudCBpbmNhcm5hdGUgKAogICAgICAgIGNvbnN0IFBvcnRhYmxlU2Vy dmVyOjpPYmplY3RJZCAmIG9pZCwKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBhZGFw dGVyCgogICAgICApCgogICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJs ZVNlcnZlcjo6Rm9yd2FyZFJlcXVlc3QgKSA9IDA7CiMgMjA2OSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNl cnZlckMuaCIKICAgIHZpcnR1YWwgdm9pZCBldGhlcmVhbGl6ZSAoCiAgICAgICAgY29uc3QgUG9y dGFibGVTZXJ2ZXI6Ok9iamVjdElkICYgb2lkLAogICAgICAgIFBvcnRhYmxlU2VydmVyOjpQT0Ff cHRyIGFkYXB0ZXIsCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnQgc2VydiwKICAgICAg ICBDT1JCQTo6Qm9vbGVhbiBjbGVhbnVwX2luX3Byb2dyZXNzLAogICAgICAgIENPUkJBOjpCb29s ZWFuIHJlbWFpbmluZ19hY3RpdmF0aW9ucwoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpT eXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRl cmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVy ZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgU2VydmFu dEFjdGl2YXRvciAoKTsKCiAgICB2aXJ0dWFsIH5TZXJ2YW50QWN0aXZhdG9yICh2b2lkKTsKICBw cml2YXRlOgogICAgU2VydmFudEFjdGl2YXRvciAoY29uc3QgU2VydmFudEFjdGl2YXRvciAmKTsK ICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBTZXJ2YW50QWN0aXZhdG9yICYpOwogIH07CiMgMjEw MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0 YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBTZXJ2YW50TG9jYXRvcjsKICB0 eXBlZGVmIFNlcnZhbnRMb2NhdG9yICpTZXJ2YW50TG9jYXRvcl9wdHI7CgoKCgoKCgogIGNsYXNz IFNlcnZhbnRMb2NhdG9yX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgog ICAgU2VydmFudExvY2F0b3JfdmFyICh2b2lkKTsKICAgIFNlcnZhbnRMb2NhdG9yX3ZhciAoU2Vy dmFudExvY2F0b3JfcHRyIHApIDogcHRyXyAocCkge30KICAgIFNlcnZhbnRMb2NhdG9yX3ZhciAo Y29uc3QgU2VydmFudExvY2F0b3JfdmFyICYpOwogICAgflNlcnZhbnRMb2NhdG9yX3ZhciAodm9p ZCk7CgogICAgU2VydmFudExvY2F0b3JfdmFyICZvcGVyYXRvcj0gKFNlcnZhbnRMb2NhdG9yX3B0 cik7CiAgICBTZXJ2YW50TG9jYXRvcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgU2VydmFudExvY2F0 b3JfdmFyICYpOwogICAgU2VydmFudExvY2F0b3JfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0 OwoKICAgIG9wZXJhdG9yIGNvbnN0IFNlcnZhbnRMb2NhdG9yX3B0ciAmKCkgY29uc3Q7CiAgICBv cGVyYXRvciBTZXJ2YW50TG9jYXRvcl9wdHIgJigpOwoKICAgIFNlcnZhbnRMb2NhdG9yX3B0ciBp biAodm9pZCkgY29uc3Q7CiAgICBTZXJ2YW50TG9jYXRvcl9wdHIgJmlub3V0ICh2b2lkKTsKICAg IFNlcnZhbnRMb2NhdG9yX3B0ciAmb3V0ICh2b2lkKTsKICAgIFNlcnZhbnRMb2NhdG9yX3B0ciBf cmV0biAodm9pZCk7CiAgICBTZXJ2YW50TG9jYXRvcl9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoK ICAgIHN0YXRpYyBTZXJ2YW50TG9jYXRvcl9wdHIgZHVwbGljYXRlIChTZXJ2YW50TG9jYXRvcl9w dHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoU2VydmFudExvY2F0b3JfcHRyKTsKICAgIHN0 YXRpYyBTZXJ2YW50TG9jYXRvcl9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBTZXJ2YW50TG9j YXRvcl9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsK ICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgog ICAgU2VydmFudExvY2F0b3JfcHRyIHB0cl87CgogICAgU2VydmFudExvY2F0b3JfdmFyIChjb25z dCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBTZXJ2YW50TG9jYXRvcl92YXIgJm9wZXJhdG9yPSAo Y29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMjE1MyAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNl cnZlckMuaCIKICBjbGFzcyBTZXJ2YW50TG9jYXRvcl9vdXQKICB7CiAgcHVibGljOgogICAgU2Vy dmFudExvY2F0b3Jfb3V0IChTZXJ2YW50TG9jYXRvcl9wdHIgJik7CiAgICBTZXJ2YW50TG9jYXRv cl9vdXQgKFNlcnZhbnRMb2NhdG9yX3ZhciAmKTsKICAgIFNlcnZhbnRMb2NhdG9yX291dCAoY29u c3QgU2VydmFudExvY2F0b3Jfb3V0ICYpOwogICAgU2VydmFudExvY2F0b3Jfb3V0ICZvcGVyYXRv cj0gKGNvbnN0IFNlcnZhbnRMb2NhdG9yX291dCAmKTsKICAgIFNlcnZhbnRMb2NhdG9yX291dCAm b3BlcmF0b3I9IChjb25zdCBTZXJ2YW50TG9jYXRvcl92YXIgJik7CiAgICBTZXJ2YW50TG9jYXRv cl9vdXQgJm9wZXJhdG9yPSAoU2VydmFudExvY2F0b3JfcHRyKTsKICAgIG9wZXJhdG9yIFNlcnZh bnRMb2NhdG9yX3B0ciAmKCk7CiAgICBTZXJ2YW50TG9jYXRvcl9wdHIgJnB0ciAodm9pZCk7CiAg ICBTZXJ2YW50TG9jYXRvcl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBT ZXJ2YW50TG9jYXRvcl9wdHIgJnB0cl87CiAgfTsKIyAyMTc3ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2Vy dmVyQy5oIgpjbGFzcyBTZXJ2YW50TG9jYXRvcjogcHVibGljIHZpcnR1YWwgU2VydmFudE1hbmFn ZXIKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdm9pZCAqQ29va2llOwoKCiAgICB0eXBlZGVm IFNlcnZhbnRMb2NhdG9yX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFNlcnZhbnRMb2NhdG9y X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgU2VydmFudExvY2F0b3JfcHRyIF9kdXBsaWNh dGUgKFNlcnZhbnRMb2NhdG9yX3B0ciBvYmopOwogICAgc3RhdGljIFNlcnZhbnRMb2NhdG9yX3B0 ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgU2VydmFudExv Y2F0b3JfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBv YmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAg ICBzdGF0aWMgU2VydmFudExvY2F0b3JfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICBy ZXR1cm4gKFNlcnZhbnRMb2NhdG9yX3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBQb3J0YWJs ZVNlcnZlcjo6U2VydmFudCBwcmVpbnZva2UgKAogICAgICAgIGNvbnN0IFBvcnRhYmxlU2VydmVy OjpPYmplY3RJZCAmIG9pZCwKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBhZGFwdGVy LAogICAgICAgIGNvbnN0IGNoYXIgKiBvcGVyYXRpb24sCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6 OlNlcnZhbnRMb2NhdG9yOjpDb29raWUgJiB0aGVfY29va2llCgogICAgICApCgogICAgICB0aHJv dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpGb3J3YXJkUmVxdWVz dCApID0gMDsKIyAyMjIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogICAgdmlydHVhbCB2 b2lkIHBvc3RpbnZva2UgKAogICAgICAgIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAm IG9pZCwKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBhZGFwdGVyLAogICAgICAgIGNv bnN0IGNoYXIgKiBvcGVyYXRpb24sCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2Nh dG9yOjpDb29raWUgdGhlX2Nvb2tpZSwKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudCB0 aGVfc2VydmFudAoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24g KSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0 aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5 X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgU2VydmFudExvY2F0b3IgKCk7Cgog ICAgdmlydHVhbCB+U2VydmFudExvY2F0b3IgKHZvaWQpOwogIHByaXZhdGU6CiAgICBTZXJ2YW50 TG9jYXRvciAoY29uc3QgU2VydmFudExvY2F0b3IgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29u c3QgU2VydmFudExvY2F0b3IgJik7CiAgfTsKIyAyMjU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVy Qy5oIgpjbGFzcyBQT0EgOiBwdWJsaWMgdmlydHVhbCBDT1JCQV9PYmplY3QKICB7CiAgcHVibGlj OgoKICAgIHR5cGVkZWYgUE9BX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFBPQV92YXIgX3Zh cl90eXBlOwoKCgogICAgc3RhdGljIFBPQV9wdHIgX2R1cGxpY2F0ZSAoUE9BX3B0ciBvYmopOwog ICAgc3RhdGljIFBPQV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2Jq LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAg c3RhdGljIFBPQV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3Rf cHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAg KTsKICAgIHN0YXRpYyBQT0FfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4g KFBPQV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgVEFPX1BPQSogX3Rhb19wb2FfZG93bmNh c3Qodm9pZCkge3JldHVybiAwO30KCgoKCiAgICBjbGFzcyBBZGFwdGVyQWxyZWFkeUV4aXN0cyA6 IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKICAgICAgQWRh cHRlckFscmVhZHlFeGlzdHMgKHZvaWQpOwoKCiAgICAgIEFkYXB0ZXJBbHJlYWR5RXhpc3RzIChj b25zdCBBZGFwdGVyQWxyZWFkeUV4aXN0cyAmKTsKCgogICAgICB+QWRhcHRlckFscmVhZHlFeGlz dHMgKHZvaWQpOwoKCiAgICAgIEFkYXB0ZXJBbHJlYWR5RXhpc3RzICZvcGVyYXRvcj0gKGNvbnN0 IEFkYXB0ZXJBbHJlYWR5RXhpc3RzICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9p ZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1 dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoK ICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAm LAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKCiAgICAgIHN0YXRp YyBBZGFwdGVyQWxyZWFkeUV4aXN0cyAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoK CgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIH07CiMg MjMzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q b3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICAgIGNsYXNzIEFkYXB0ZXJOb25FeGlz dGVudCA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKICAg ICAgQWRhcHRlck5vbkV4aXN0ZW50ICh2b2lkKTsKCgogICAgICBBZGFwdGVyTm9uRXhpc3RlbnQg KGNvbnN0IEFkYXB0ZXJOb25FeGlzdGVudCAmKTsKCgogICAgICB+QWRhcHRlck5vbkV4aXN0ZW50 ICh2b2lkKTsKCgogICAgICBBZGFwdGVyTm9uRXhpc3RlbnQgJm9wZXJhdG9yPSAoY29uc3QgQWRh cHRlck5vbkV4aXN0ZW50ICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7Cgog ICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAm LAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAg dmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIEFkYXB0 ZXJOb25FeGlzdGVudCAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBz dGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIH07CiMgMjM3MSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNl cnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICAgIGNsYXNzIEludmFsaWRQb2xpY3kgOiBwdWJsaWMg Q09SQkE6OlVzZXJFeGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKICAgICAgQ09SQkE6OlVTaG9y dCBpbmRleDsKCiAgICAgIEludmFsaWRQb2xpY3kgKHZvaWQpOwoKCiAgICAgIEludmFsaWRQb2xp Y3kgKGNvbnN0IEludmFsaWRQb2xpY3kgJik7CgoKICAgICAgfkludmFsaWRQb2xpY3kgKHZvaWQp OwoKCiAgICAgIEludmFsaWRQb2xpY3kgJm9wZXJhdG9yPSAoY29uc3QgSW52YWxpZFBvbGljeSAm KTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgICAgdmlydHVhbCB2b2lk IF90YW9fZW5jb2RlICgKICAgICAgICAgIFRBT19PdXRwdXRDRFIgJiwKICAgICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmCiAgICAgICAgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFv X2RlY29kZSAoCiAgICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmCiAgICAgICAgKTsKCiAgICAgIHN0YXRpYyBJbnZhbGlkUG9saWN5ICpfZG93bmNh c3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgogICAgICBJbnZhbGlkUG9saWN5ICgKICAgICAgICAg IENPUkJBOjpVU2hvcnQgX3Rhb19pbmRleAogICAgICAgICk7CgoKICAgICAgc3RhdGljIENPUkJB OjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICB9OwojIDI0MTggIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFi bGVTZXJ2ZXJDLmgiCiAgICBjbGFzcyBOb1NlcnZhbnQgOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNl cHRpb24KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIE5vU2VydmFudCAodm9pZCk7CgoKICAgICAg Tm9TZXJ2YW50IChjb25zdCBOb1NlcnZhbnQgJik7CgoKICAgICAgfk5vU2VydmFudCAodm9pZCk7 CgoKICAgICAgTm9TZXJ2YW50ICZvcGVyYXRvcj0gKGNvbnN0IE5vU2VydmFudCAmKTsKCiAgICAg IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZW5j b2RlICgKICAgICAgICAgIFRBT19PdXRwdXRDRFIgJiwKICAgICAgICAgIENPUkJBOjpFbnZpcm9u bWVudCAmCiAgICAgICAgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2RlY29kZSAo CiAgICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm CiAgICAgICAgKTsKCiAgICAgIHN0YXRpYyBOb1NlcnZhbnQgKl9kb3duY2FzdCAoQ09SQkE6OkV4 Y2VwdGlvbiAqKTsKCgoKICAgICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9p ZCk7CiAgICB9OwojIDI0NjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiCiAgICBjbGFzcyBP YmplY3RBbHJlYWR5QWN0aXZlIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAg ICBwdWJsaWM6CgogICAgICBPYmplY3RBbHJlYWR5QWN0aXZlICh2b2lkKTsKCgogICAgICBPYmpl Y3RBbHJlYWR5QWN0aXZlIChjb25zdCBPYmplY3RBbHJlYWR5QWN0aXZlICYpOwoKCiAgICAgIH5P YmplY3RBbHJlYWR5QWN0aXZlICh2b2lkKTsKCgogICAgICBPYmplY3RBbHJlYWR5QWN0aXZlICZv cGVyYXRvcj0gKGNvbnN0IE9iamVjdEFscmVhZHlBY3RpdmUgJik7CgogICAgICB2aXJ0dWFsIHZv aWQgX3JhaXNlICh2b2lkKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAg ICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAg ICAgICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgICAg VEFPX0lucHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICk7 CgogICAgICBzdGF0aWMgT2JqZWN0QWxyZWFkeUFjdGl2ZSAqX2Rvd25jYXN0IChDT1JCQTo6RXhj ZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lk KTsKICAgIH07CiMgMjUwMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICAgIGNsYXNzIE9i amVjdE5vdEFjdGl2ZSA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVi bGljOgoKICAgICAgT2JqZWN0Tm90QWN0aXZlICh2b2lkKTsKCgogICAgICBPYmplY3ROb3RBY3Rp dmUgKGNvbnN0IE9iamVjdE5vdEFjdGl2ZSAmKTsKCgogICAgICB+T2JqZWN0Tm90QWN0aXZlICh2 b2lkKTsKCgogICAgICBPYmplY3ROb3RBY3RpdmUgJm9wZXJhdG9yPSAoY29uc3QgT2JqZWN0Tm90 QWN0aXZlICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0 dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2 b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIE9iamVjdE5vdEFjdGl2 ZSAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6 OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIH07CiMgMjU0MyAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJs ZVNlcnZlckMuaCIKICAgIGNsYXNzIFNlcnZhbnRBbHJlYWR5QWN0aXZlIDogcHVibGljIENPUkJB OjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBTZXJ2YW50QWxyZWFkeUFj dGl2ZSAodm9pZCk7CgoKICAgICAgU2VydmFudEFscmVhZHlBY3RpdmUgKGNvbnN0IFNlcnZhbnRB bHJlYWR5QWN0aXZlICYpOwoKCiAgICAgIH5TZXJ2YW50QWxyZWFkeUFjdGl2ZSAodm9pZCk7CgoK ICAgICAgU2VydmFudEFscmVhZHlBY3RpdmUgJm9wZXJhdG9yPSAoY29uc3QgU2VydmFudEFscmVh ZHlBY3RpdmUgJik7CgogICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICAgIHZp cnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAg ICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICkgY29uc3Q7CgogICAgICB2aXJ0dWFs IHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAgICBD T1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICk7CgogICAgICBzdGF0aWMgU2VydmFudEFscmVh ZHlBY3RpdmUgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCgoKICAgICAgc3RhdGlj IENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICB9OwojIDI1ODQgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIv UG9ydGFibGVTZXJ2ZXJDLmgiCiAgICBjbGFzcyBTZXJ2YW50Tm90QWN0aXZlIDogcHVibGljIENP UkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBTZXJ2YW50Tm90QWN0 aXZlICh2b2lkKTsKCgogICAgICBTZXJ2YW50Tm90QWN0aXZlIChjb25zdCBTZXJ2YW50Tm90QWN0 aXZlICYpOwoKCiAgICAgIH5TZXJ2YW50Tm90QWN0aXZlICh2b2lkKTsKCgogICAgICBTZXJ2YW50 Tm90QWN0aXZlICZvcGVyYXRvcj0gKGNvbnN0IFNlcnZhbnROb3RBY3RpdmUgJik7CgogICAgICB2 aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29k ZSAoCiAgICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJgogICAgICAgICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAog ICAgICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgog ICAgICAgICk7CgogICAgICBzdGF0aWMgU2VydmFudE5vdEFjdGl2ZSAqX2Rvd25jYXN0IChDT1JC QTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9j ICh2b2lkKTsKICAgIH07CiMgMjYyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICAgIGNs YXNzIFdyb25nQWRhcHRlciA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAg cHVibGljOgoKICAgICAgV3JvbmdBZGFwdGVyICh2b2lkKTsKCgogICAgICBXcm9uZ0FkYXB0ZXIg KGNvbnN0IFdyb25nQWRhcHRlciAmKTsKCgogICAgICB+V3JvbmdBZGFwdGVyICh2b2lkKTsKCgog ICAgICBXcm9uZ0FkYXB0ZXIgJm9wZXJhdG9yPSAoY29uc3QgV3JvbmdBZGFwdGVyICYpOwoKICAg ICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19l bmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmly b25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2Rl ICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIFdyb25nQWRhcHRlciAqX2Rvd25jYXN0IChDT1JC QTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9j ICh2b2lkKTsKICAgIH07CiMgMjY2NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICAgIGNs YXNzIFdyb25nUG9saWN5IDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBw dWJsaWM6CgogICAgICBXcm9uZ1BvbGljeSAodm9pZCk7CgoKICAgICAgV3JvbmdQb2xpY3kgKGNv bnN0IFdyb25nUG9saWN5ICYpOwoKCiAgICAgIH5Xcm9uZ1BvbGljeSAodm9pZCk7CgoKICAgICAg V3JvbmdQb2xpY3kgJm9wZXJhdG9yPSAoY29uc3QgV3JvbmdQb2xpY3kgJik7CgogICAgICB2aXJ0 dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAo CiAgICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg JgogICAgICAgICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAg ICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAg ICAgICk7CgogICAgICBzdGF0aWMgV3JvbmdQb2xpY3kgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2Vw dGlvbiAqKTsKCgoKICAgICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7 CiAgICB9OwoKCgoKICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgY3JlYXRlX1BP QSAoCiAgICAgICAgY29uc3QgY2hhciAqIGFkYXB0ZXJfbmFtZSwKICAgICAgICBQb3J0YWJsZVNl cnZlcjo6UE9BTWFuYWdlcl9wdHIgYV9QT0FNYW5hZ2VyLAogICAgICAgIGNvbnN0IENPUkJBOjpQ b2xpY3lMaXN0ICYgcG9saWNpZXMsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0 YWJsZVNlcnZlcjo6UE9BOjpBZGFwdGVyQWxyZWFkeUV4aXN0cywgUG9ydGFibGVTZXJ2ZXI6OlBP QTo6SW52YWxpZFBvbGljeSApID0gMDsKCgoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6 UE9BX3B0ciBmaW5kX1BPQSAoCiAgICAgICAgY29uc3QgY2hhciAqIGFkYXB0ZXJfbmFtZSwKICAg ICAgICBDT1JCQTo6Qm9vbGVhbiBhY3RpdmF0ZV9pdCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0E6OkFkYXB0ZXJOb25FeGlzdGVudCApID0gMDsKCgoK CiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSAoCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gZXRoZXJl YWxpemVfb2JqZWN0cywKICAgICAgICBDT1JCQTo6Qm9vbGVhbiB3YWl0X2Zvcl9jb21wbGV0aW9u LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAg IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKCgogICAgdmlydHVhbCBQ b3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5X3B0ciBjcmVhdGVfdGhyZWFkX3BvbGljeSAoCiAg ICAgICAgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeVZhbHVlIHZhbHVlLAogICAgICAgIENP UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAg ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09S QkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZl cjo6TGlmZXNwYW5Qb2xpY3lfcHRyIGNyZWF0ZV9saWZlc3Bhbl9wb2xpY3kgKAogICAgICAgIFBv cnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGljeVZhbHVlIHZhbHVlLAogICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBU QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5 c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OklkVW5p cXVlbmVzc1BvbGljeV9wdHIgY3JlYXRlX2lkX3VuaXF1ZW5lc3NfcG9saWN5ICgKICAgICAgICBQ b3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5VmFsdWUgdmFsdWUsCiAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC QTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6 SWRBc3NpZ25tZW50UG9saWN5X3B0ciBjcmVhdGVfaWRfYXNzaWdubWVudF9wb2xpY3kgKAogICAg ICAgIFBvcnRhYmxlU2VydmVyOjpJZEFzc2lnbm1lbnRQb2xpY3lWYWx1ZSB2YWx1ZSwKICAgICAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAo IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgUG9ydGFibGVT ZXJ2ZXI6OkltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgY3JlYXRlX2ltcGxpY2l0X2FjdGl2 YXRpb25fcG9saWN5ICgKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6SW1wbGljaXRBY3RpdmF0aW9u UG9saWN5VmFsdWUgdmFsdWUsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB X0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50 ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoK CgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJldGVudGlvblBvbGljeV9wdHIg Y3JlYXRlX3NlcnZhbnRfcmV0ZW50aW9uX3BvbGljeSAoCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6 OlNlcnZhbnRSZXRlbnRpb25Qb2xpY3lWYWx1ZSB2YWx1ZSwKICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F eGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpSZXF1ZXN0UHJv Y2Vzc2luZ1BvbGljeV9wdHIgY3JlYXRlX3JlcXVlc3RfcHJvY2Vzc2luZ19wb2xpY3kgKAogICAg ICAgIFBvcnRhYmxlU2VydmVyOjpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeVZhbHVlIHZhbHVlLAog ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRo cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKCgogICAgdmlydHVhbCBjaGFy ICogdGhlX25hbWUgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog ICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAg IHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgdGhlX3BhcmVudCAoCiAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC QTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6 UE9BTGlzdCAqIHRoZV9jaGlsZHJlbiAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly b25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkg PSAwOwoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcl9wdHIgdGhlX1BP QU1hbmFnZXIgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg ICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKCgogICAg dmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6QWRhcHRlckFjdGl2YXRvcl9wdHIgdGhlX2FjdGl2YXRv ciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAg ICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2 b2lkIHRoZV9hY3RpdmF0b3IgKAogICAgICAgIFBvcnRhYmxlU2VydmVyOjpBZGFwdGVyQWN0aXZh dG9yX3B0ciB0aGVfYWN0aXZhdG9yLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0g MDsKCgoKICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRNYW5hZ2VyX3B0ciBnZXRf c2VydmFudF9tYW5hZ2VyICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxl U2VydmVyOjpQT0E6Oldyb25nUG9saWN5ICkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRf c2VydmFudF9tYW5hZ2VyICgKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXJf cHRyIGltZ3IsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAg ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZVNlcnZlcjo6 UE9BOjpXcm9uZ1BvbGljeSApID0gMDsKCgoKCiAgICB2aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpT ZXJ2YW50IGdldF9zZXJ2YW50ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09S QkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1l bnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRh YmxlU2VydmVyOjpQT0E6Ok5vU2VydmFudCwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6V3JvbmdQb2xp Y3kgKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRfc2VydmFudCAoCiAgICAgICAgUG9y dGFibGVTZXJ2ZXI6OlNlcnZhbnQgcF9zZXJ2YW50LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVu dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVs dF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2Vw dGlvbiwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6V3JvbmdQb2xpY3kgKSA9IDA7CgoKCgoKCiAgICB2 aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAqIGFjdGl2YXRlX29iamVjdCAoCiAgICAg ICAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnQgcF9zZXJ2YW50LAogICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl bUV4Y2VwdGlvbiwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6U2VydmFudEFscmVhZHlBY3RpdmUsIFBv cnRhYmxlU2VydmVyOjpQT0E6Oldyb25nUG9saWN5ICkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIHZv aWQgYWN0aXZhdGVfb2JqZWN0X3dpdGhfaWQgKAogICAgICAgIGNvbnN0IFBvcnRhYmxlU2VydmVy OjpPYmplY3RJZCAmIGlkLAogICAgICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50IHBfc2VydmFu dCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAg ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0E6OlNl cnZhbnRBbHJlYWR5QWN0aXZlLCBQb3J0YWJsZVNlcnZlcjo6UE9BOjpPYmplY3RBbHJlYWR5QWN0 aXZlLCBQb3J0YWJsZVNlcnZlcjo6UE9BOjpXcm9uZ1BvbGljeSApID0gMDsKCgoKCgoKICAgIHZp cnR1YWwgdm9pZCBkZWFjdGl2YXRlX29iamVjdCAoCiAgICAgICAgY29uc3QgUG9ydGFibGVTZXJ2 ZXI6Ok9iamVjdElkICYgb2lkLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu dCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUG9ydGFi bGVTZXJ2ZXI6OlBPQTo6T2JqZWN0Tm90QWN0aXZlLCBQb3J0YWJsZVNlcnZlcjo6UE9BOjpXcm9u Z1BvbGljeSApID0gMDsKCgoKCgogICAgdmlydHVhbCBDT1JCQTo6T2JqZWN0X3B0ciBjcmVhdGVf cmVmZXJlbmNlICgKICAgICAgICBjb25zdCBjaGFyICogaW50ZiwKICAgICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0 ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0E6Oldyb25nUG9saWN5ICkgPSAwOwoKCgoK ICAgIHZpcnR1YWwgQ09SQkE6Ok9iamVjdF9wdHIgY3JlYXRlX3JlZmVyZW5jZV93aXRoX2lkICgK ICAgICAgICBjb25zdCBQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQgJiBvaWQsCiAgICAgICAgY29u c3QgY2hhciAqIGludGYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgp CiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZVNl cnZlcjo6UE9BOjpXcm9uZ1BvbGljeSApID0gMDsKCgoKCiAgICB2aXJ0dWFsIFBvcnRhYmxlU2Vy dmVyOjpPYmplY3RJZCAqIHNlcnZhbnRfdG9faWQgKAogICAgICAgIFBvcnRhYmxlU2VydmVyOjpT ZXJ2YW50IHBfc2VydmFudCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxl U2VydmVyOjpQT0E6OlNlcnZhbnROb3RBY3RpdmUsIFBvcnRhYmxlU2VydmVyOjpQT0E6Oldyb25n UG9saWN5ICkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIHNlcnZhbnRf dG9fcmVmZXJlbmNlICgKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudCBwX3NlcnZhbnQs CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAg dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZVNlcnZlcjo6UE9BOjpTZXJ2 YW50Tm90QWN0aXZlLCBQb3J0YWJsZVNlcnZlcjo6UE9BOjpXcm9uZ1BvbGljeSApID0gMDsKCgoK CgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6U2VydmFudCByZWZlcmVuY2VfdG9fc2VydmFu dCAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgcmVmZXJlbmNlLAogICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBU QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5 c3RlbUV4Y2VwdGlvbiwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6T2JqZWN0Tm90QWN0aXZlLCBQb3J0 YWJsZVNlcnZlcjo6UE9BOjpXcm9uZ0FkYXB0ZXIsIFBvcnRhYmxlU2VydmVyOjpQT0E6Oldyb25n UG9saWN5ICkgPSAwOwoKCgoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQg KiByZWZlcmVuY2VfdG9faWQgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIHJlZmVyZW5jZSwK ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0 aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0E6Oldyb25n QWRhcHRlciwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6V3JvbmdQb2xpY3kgKSA9IDA7CgoKCgoKICAg IHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnQgaWRfdG9fc2VydmFudCAoCiAgICAgICAg Y29uc3QgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICYgb2lkLAogICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl bUV4Y2VwdGlvbiwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6T2JqZWN0Tm90QWN0aXZlLCBQb3J0YWJs ZVNlcnZlcjo6UE9BOjpXcm9uZ1BvbGljeSApID0gMDsKCgoKCgogICAgdmlydHVhbCBDT1JCQTo6 T2JqZWN0X3B0ciBpZF90b19yZWZlcmVuY2UgKAogICAgICAgIGNvbnN0IFBvcnRhYmxlU2VydmVy OjpPYmplY3RJZCAmIG9pZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxl U2VydmVyOjpQT0E6Ok9iamVjdE5vdEFjdGl2ZSwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6V3JvbmdQ b2xpY3kgKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgQ09SQkE6Ok9jdGV0U2VxICogaWQgKAogICAg ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9 CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93 ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rh b19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBj aGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6 CiAgICBQT0EgKCk7CgogICAgdmlydHVhbCB+UE9BICh2b2lkKTsKICBwcml2YXRlOgogICAgUE9B IChjb25zdCBQT0EgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUE9BICYpOwogIH07CiMg MzA1MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q b3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBDdXJyZW50OwogIHR5cGVk ZWYgQ3VycmVudCAqQ3VycmVudF9wdHI7CgoKCgoKCgogIGNsYXNzIEN1cnJlbnRfdmFyIDogcHVi bGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBDdXJyZW50X3ZhciAodm9pZCk7CiAg ICBDdXJyZW50X3ZhciAoQ3VycmVudF9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgQ3VycmVudF92 YXIgKGNvbnN0IEN1cnJlbnRfdmFyICYpOwogICAgfkN1cnJlbnRfdmFyICh2b2lkKTsKCiAgICBD dXJyZW50X3ZhciAmb3BlcmF0b3I9IChDdXJyZW50X3B0cik7CiAgICBDdXJyZW50X3ZhciAmb3Bl cmF0b3I9IChjb25zdCBDdXJyZW50X3ZhciAmKTsKICAgIEN1cnJlbnRfcHRyIG9wZXJhdG9yLT4g KHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IEN1cnJlbnRfcHRyICYoKSBjb25zdDsK ICAgIG9wZXJhdG9yIEN1cnJlbnRfcHRyICYoKTsKCiAgICBDdXJyZW50X3B0ciBpbiAodm9pZCkg Y29uc3Q7CiAgICBDdXJyZW50X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgQ3VycmVudF9wdHIgJm91 dCAodm9pZCk7CiAgICBDdXJyZW50X3B0ciBfcmV0biAodm9pZCk7CiAgICBDdXJyZW50X3B0ciBw dHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIEN1cnJlbnRfcHRyIGR1cGxpY2F0ZSAoQ3Vy cmVudF9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoQ3VycmVudF9wdHIpOwogICAgc3Rh dGljIEN1cnJlbnRfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgQ3VycmVudF9wdHIgbmFycm93 IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JC QTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgQ3VycmVudF9wdHIg cHRyXzsKCiAgICBDdXJyZW50X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgQ3Vy cmVudF92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMzEw MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0 YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBDdXJyZW50X291dAogIHsKICBw dWJsaWM6CiAgICBDdXJyZW50X291dCAoQ3VycmVudF9wdHIgJik7CiAgICBDdXJyZW50X291dCAo Q3VycmVudF92YXIgJik7CiAgICBDdXJyZW50X291dCAoY29uc3QgQ3VycmVudF9vdXQgJik7CiAg ICBDdXJyZW50X291dCAmb3BlcmF0b3I9IChjb25zdCBDdXJyZW50X291dCAmKTsKICAgIEN1cnJl bnRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IEN1cnJlbnRfdmFyICYpOwogICAgQ3VycmVudF9vdXQg Jm9wZXJhdG9yPSAoQ3VycmVudF9wdHIpOwogICAgb3BlcmF0b3IgQ3VycmVudF9wdHIgJigpOwog ICAgQ3VycmVudF9wdHIgJnB0ciAodm9pZCk7CiAgICBDdXJyZW50X3B0ciBvcGVyYXRvci0+ICh2 b2lkKTsKCiAgcHJpdmF0ZToKICAgIEN1cnJlbnRfcHRyICZwdHJfOwogIH07CiMgMzEyNyAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNl cnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKY2xhc3MgQ3VycmVudDogcHVibGljIHZpcnR1YWwgQ09S QkE6OkN1cnJlbnQKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgQ3VycmVudF9wdHIgX3B0cl90 eXBlOwogICAgdHlwZWRlZiBDdXJyZW50X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgQ3Vy cmVudF9wdHIgX2R1cGxpY2F0ZSAoQ3VycmVudF9wdHIgb2JqKTsKICAgIHN0YXRpYyBDdXJyZW50 X3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgQ3VycmVu dF9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwK ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0 YXRpYyBDdXJyZW50X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChDdXJy ZW50X3B0cikwOwogICAgICB9CgoKCgoKICAgIGNsYXNzIE5vQ29udGV4dCA6IHB1YmxpYyBDT1JC QTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKICAgICAgTm9Db250ZXh0ICh2b2lk KTsKCgogICAgICBOb0NvbnRleHQgKGNvbnN0IE5vQ29udGV4dCAmKTsKCgogICAgICB+Tm9Db250 ZXh0ICh2b2lkKTsKCgogICAgICBOb0NvbnRleHQgJm9wZXJhdG9yPSAoY29uc3QgTm9Db250ZXh0 ICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZv aWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90 YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVu dmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIE5vQ29udGV4dCAqX2Rvd25jYXN0 IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAq X2FsbG9jICh2b2lkKTsKICAgIH07CgoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6UE9B X3B0ciBnZXRfUE9BICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK ICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2Vy dmVyOjpDdXJyZW50OjpOb0NvbnRleHQgKSA9IDA7CgoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNl cnZlcjo6T2JqZWN0SWQgKiBnZXRfb2JqZWN0X2lkICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24sIFBvcnRhYmxlU2VydmVyOjpDdXJyZW50OjpOb0NvbnRleHQgKSA9IDA7CgoKCgogICAg dmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAg ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29u c3Q7CgogIHByb3RlY3RlZDoKICAgIEN1cnJlbnQgKCk7CgogICAgdmlydHVhbCB+Q3VycmVudCAo dm9pZCk7CiAgcHJpdmF0ZToKICAgIEN1cnJlbnQgKGNvbnN0IEN1cnJlbnQgJik7CiAgICB2b2lk IG9wZXJhdG9yPSAoY29uc3QgQ3VycmVudCAmKTsKICB9OwoKCgoKCiAgZXh0ZXJuIGNoYXIgKk9i amVjdElkX3RvX3N0cmluZyAoY29uc3QgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICZpZCk7CiAg ZXh0ZXJuIENPUkJBOjpXQ2hhciAqT2JqZWN0SWRfdG9fd3N0cmluZyAoY29uc3QgUG9ydGFibGVT ZXJ2ZXI6Ok9iamVjdElkICZpZCk7CiAgZXh0ZXJuIFBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAq c3RyaW5nX3RvX09iamVjdElkIChjb25zdCBjaGFyICppZCk7CiAgZXh0ZXJuIFBvcnRhYmxlU2Vy dmVyOjpPYmplY3RJZCAqd3N0cmluZ190b19PYmplY3RJZCAoY29uc3QgQ09SQkE6OldDaGFyICpp ZCk7Cgp9CgoKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JC QTo6QW55ICYsIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAmKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFBvcnRhYmxlU2Vy dmVyOjpPYmplY3RJZCopOwogICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFu IG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFBvcnRhYmxlU2VydmVyOjpPYmplY3RJ ZCAqJik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+ Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICom KTsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6 QW55ICYsIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpGb3J3YXJkUmVxdWVzdCAmKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFBvcnRhYmxl U2VydmVyOjpGb3J3YXJkUmVxdWVzdCopOwogICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB OjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFBvcnRhYmxlU2VydmVy OjpGb3J3YXJkUmVxdWVzdCAqJik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUG9ydGFibGVTZXJ2 ZXI6OkZvcndhcmRSZXF1ZXN0IComKTsKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGlj eVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv cj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBQb3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5VmFs dWUgJik7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09S QkE6OkFueSAmLCBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3lWYWx1ZSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJB OjpBbnkgJiwgUG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5VmFsdWUgJik7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBQb3J0YWJs ZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5VmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAg ICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFBvcnRh YmxlU2VydmVyOjpJZFVuaXF1ZW5lc3NQb2xpY3lWYWx1ZSAmKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFBvcnRhYmxlU2VydmVyOjpJ ZEFzc2lnbm1lbnRQb2xpY3lWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6 OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUG9ydGFibGVTZXJ2ZXI6 OklkQXNzaWdubWVudFBvbGljeVZhbHVlICYpOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUG9ydGFibGVTZXJ2ZXI6OkltcGxpY2l0 QWN0aXZhdGlvblBvbGljeVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6 Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBQb3J0YWJsZVNlcnZlcjo6 SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5VmFsdWUgJik7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBQb3J0YWJsZVNlcnZlcjo6U2VydmFu dFJldGVudGlvblBvbGljeVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6 Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBQb3J0YWJsZVNlcnZlcjo6 U2VydmFudFJldGVudGlvblBvbGljeVZhbHVlICYpOwogICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQ cm9jZXNzaW5nUG9saWN5VmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpC b29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFBvcnRhYmxlU2VydmVyOjpS ZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeVZhbHVlICYpOwojIDMzMjggIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVT ZXJ2ZXJDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaSIgMQojIDI4ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVy L1BvcnRhYmxlU2VydmVyQy5pIgogIGlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9BICoqCiAgUG9y dGFibGVTZXJ2ZXI6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZl cl9QT0FMaXN0OjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIG5lbGVtcykKICB7CiAgICBQb3J0YWJs ZVNlcnZlcjo6UE9BICoqYnVmID0gMDsKCiAgICBkbyB7IHRyeSB7IGJ1ZiA9IG5ldyBQb3J0YWJs ZVNlcnZlcjo6UE9BKltuZWxlbXNdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwoKICAgIGZvciAo Q09SQkE6OlVMb25nIGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCiAgICAgIHsKICAgICAgICBidWZb aV0gPSBQb3J0YWJsZVNlcnZlcjo6UE9BOjpfbmlsICgpOwogICAgICB9CgogICAgcmV0dXJuIGJ1 ZjsKICB9CgogIGlubGluZSB2b2lkCiAgUG9ydGFibGVTZXJ2ZXI6Ol9UQU9fVW5ib3VuZGVkX09i amVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0OjpmcmVlYnVmIChQb3J0YWJsZVNl cnZlcjo6UE9BICoqYnVmZmVyKQogIHsKICAgIGlmIChidWZmZXIgPT0gMCkKICAgICAgcmV0dXJu OwogICAgZGVsZXRlW10gYnVmZmVyOwogIH0KCiAgaW5saW5lCiAgUG9ydGFibGVTZXJ2ZXI6Ol9U QU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0OjpfVEFP X1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdCAodm9pZCkK ICB7CiAgfQoKICBpbmxpbmUKICBQb3J0YWJsZVNlcnZlcjo6X1RBT19VbmJvdW5kZWRfT2JqZWN0 X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3Q6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9T ZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSkKICAg IDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBfVEFPX1VuYm91bmRlZF9P YmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdDo6YWxsb2NidWYgKG1heGltdW0p KQogIHsKICB9CgogIGlubGluZQogIFBvcnRhYmxlU2VydmVyOjpfVEFPX1VuYm91bmRlZF9PYmpl Y3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdDo6X1RBT19VbmJvdW5kZWRfT2JqZWN0 X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3QgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAog ICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgIFBvcnRhYmxlU2VydmVyOjpQT0EqICp2YWx1ZSwK ICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVu Y2UgKG1heGltdW0sIGxlbmd0aCwgdmFsdWUsIHJlbGVhc2UpCiAgewogIH0KCiAgaW5saW5lCiAg UG9ydGFibGVTZXJ2ZXI6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNl cnZlcl9QT0FMaXN0OjpfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2 ZXJfUE9BTGlzdChjb25zdCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVT ZXJ2ZXJfUE9BTGlzdCAmcmhzKQogICAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJo cykKICB7CiAgICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAgUG9ydGFibGVTZXJ2 ZXI6OlBPQSAqKnRtcDEgPSBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVT ZXJ2ZXJfUE9BTGlzdDo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1fKTsKICAgICAgUG9ydGFibGVT ZXJ2ZXI6OlBPQSAqKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxQb3J0YWJsZVNlcnZl cjo6UE9BICoqPiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7 IGkgPCByaHMubGVuZ3RoXzsgKytpKQogICAgICAgIHsKICAgICAgICAgIHRtcDFbaV0gPSBQb3J0 YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlICh0bXAyW2ldKTsKICAgICAgICB9CgogICAgICB0 aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgdGhpcy0+YnVm ZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxpbmUgUG9ydGFibGVTZXJ2ZXI6Ol9UQU9fVW5ib3Vu ZGVkX09iamVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0ICYKICBQb3J0YWJsZVNl cnZlcjo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxp c3Q6Om9wZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRh YmxlU2VydmVyX1BPQUxpc3QgJnJocykKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICBy ZXR1cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBQb3J0YWJs ZVNlcnZlcjo6UE9BICoqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxQb3J0YWJsZVNlcnZlcjo6UE9B ICoqPiAodGhpcy0+YnVmZmVyXyk7CgogICAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8 IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgewogICAgICAgIENPUkJBOjpyZWxlYXNlICh0bXBb aV0pOwogICAgICAgIHRtcFtpXSA9IFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwgKCk7CiAgICAg IH0KICAgICAgaWYgKHRoaXMtPm1heGltdW1fIDwgcmhzLm1heGltdW1fKQogICAgICB7CiAgICAg ICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3Q6 OmZyZWVidWYgKHRtcCk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX09i amVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0OjphbGxvY2J1ZiAocmhzLm1heGlt dW1fKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19V bmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3Q6OmFsbG9jYnVm IChyaHMubWF4aW11bV8pOwoKICAgIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0 b3I9IChyaHMpOwoKICAgIFBvcnRhYmxlU2VydmVyOjpQT0EgKip0bXAxID0gcmVpbnRlcnByZXRf Y2FzdDxQb3J0YWJsZVNlcnZlcjo6UE9BICoqPiAodGhpcy0+YnVmZmVyXyk7CiAgICBQb3J0YWJs ZVNlcnZlcjo6UE9BICoqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PFBvcnRhYmxlU2Vy dmVyOjpQT0EgKio+IChyaHMuYnVmZmVyXyk7CgogICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7 IGkgPCByaHMubGVuZ3RoXzsgKytpKQogICAgICB7CiAgICAgICAgdG1wMVtpXSA9IFBvcnRhYmxl U2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHRtcDJbaV0pOwogICAgICB9CgogICAgcmV0dXJuICp0 aGlzOwogIH0KCiAgaW5saW5lIFRBT19PYmplY3RfTWFuYWdlcjxQb3J0YWJsZVNlcnZlcjo6UE9B LFBvcnRhYmxlU2VydmVyOjpQT0FfdmFyPgogIFBvcnRhYmxlU2VydmVyOjpfVEFPX1VuYm91bmRl ZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdDo6b3BlcmF0b3JbXSAoQ09S QkE6OlVMb25nIGluZGV4KSBjb25zdAoKICB7CiAgICBkbyB7IGlmKCEoaW5kZXggPCB0aGlzLT5t YXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0Vf TG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAo Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFi bGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmkiLCAxMzQsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19f LT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFj ayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUg JWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImluZGV4IDwgdGhpcy0+bWF4aW11 bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgICBQb3J0YWJsZVNlcnZlcjo6UE9BICoqIGNvbnN0 IHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UG9ydGFibGVTZXJ2ZXI6OlBPQSAqKj4gKHRoaXMtPmJ1 ZmZlcl8pOwogICAgcmV0dXJuIFRBT19PYmplY3RfTWFuYWdlcjxQb3J0YWJsZVNlcnZlcjo6UE9B LFBvcnRhYmxlU2VydmVyOjpQT0FfdmFyPiAodG1wICsgaW5kZXgsIHRoaXMtPnJlbGVhc2VfKTsK ICB9CgogIGlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9BKiAqCiAgUG9ydGFibGVTZXJ2ZXI6Ol9U QU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0OjpnZXRf YnVmZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCiAgewogICAgUG9ydGFibGVTZXJ2ZXI6OlBP QSAqKnJlc3VsdCA9IDA7CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhp cy0+YnVmZmVyXyA9PSAwKQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRf T2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3Q6OmFsbG9jYnVmICh0aGlzLT5t YXhpbXVtXyk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgICB0aGlzLT5y ZWxlYXNlXyA9IDE7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmVzdWx0ID0g cmVpbnRlcnByZXRfY2FzdDxQb3J0YWJsZVNlcnZlcjo6UE9BKio+ICh0aGlzLT5idWZmZXJfKTsK ICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICBpZiAodGhpcy0+cmVsZWFzZV8gIT0g MCkKICAgICAgewoKCiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxQb3J0YWJsZVNl cnZlcjo6UE9BKio+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICB0aGlzLT5tYXhpbXVtXyA9IDA7 CiAgICAgICAgdGhpcy0+bGVuZ3RoXyA9IDA7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAg ICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0 OwogIH0KCiAgaW5saW5lIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpQT0EqICoKICBQb3J0YWJsZVNl cnZlcjo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxp c3Q6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh c3Q8Y29uc3QgUG9ydGFibGVTZXJ2ZXI6OlBPQSAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIH0KIyAx OTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9y dGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmkiCmlubGluZQpQb3J0YWJsZVNlcnZlcjo6UE9B TGlzdF92YXI6OlBPQUxpc3RfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30KCmlubGluZQpQb3J0 YWJsZVNlcnZlcjo6UE9BTGlzdF92YXI6OlBPQUxpc3RfdmFyIChQT0FMaXN0ICpwKQogIDogcHRy XyAocCkKe30KCmlubGluZQpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdF92YXI6OlBPQUxpc3RfdmFy IChjb25zdCA6OlBvcnRhYmxlU2VydmVyOjpQT0FMaXN0X3ZhciAmcCkKewogIGlmIChwLnB0cl8p CiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlz dCAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlv biAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8g PSAwOwp9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjp+UE9BTGlzdF92YXIg KHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIFBvcnRhYmxlU2VydmVyOjpQ T0FMaXN0X3ZhciAmClBvcnRhYmxlU2VydmVyOjpQT0FMaXN0X3Zhcjo6b3BlcmF0b3I9IChQT0FM aXN0ICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJu ICp0aGlzOwp9CgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdF92YXIgJgpQb3J0YWJs ZVNlcnZlcjo6UE9BTGlzdF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpQb3J0YWJsZVNlcnZlcjo6 UE9BTGlzdF92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRy XyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAg dGhpcy0+cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg UE9BTGlzdCAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IFBPQUxpc3QgKCpwLnB0cl8pOwoK ICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAg IFBPQUxpc3QgKnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlz LT5wdHJfOwogICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVs ZXRlIGRlZXBfY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0 aGlzOwp9CgppbmxpbmUgY29uc3QgOjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdCAqClBvcnRhYmxl U2VydmVyOjpQT0FMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdCAqClBvcnRhYmxl U2VydmVyOjpQT0FMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5w dHJfOwp9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjpvcGVyYXRvciBjb25z dCA6OlBvcnRhYmxlU2VydmVyOjpQT0FMaXN0ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w dHJfOwp9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjpvcGVyYXRvciA6OlBv cnRhYmxlU2VydmVyOjpQT0FMaXN0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgppbmxp bmUKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjpvcGVyYXRvciA6OlBvcnRhYmxlU2VydmVy OjpQT0FMaXN0ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lClBv cnRhYmxlU2VydmVyOjpQT0FMaXN0X3Zhcjo6b3BlcmF0b3IgOjpQb3J0YWJsZVNlcnZlcjo6UE9B TGlzdCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRBT19PYmplY3RfTWFu YWdlcjxQb3J0YWJsZVNlcnZlcjo6UE9BLCBQb3J0YWJsZVNlcnZlcjo6UE9BX3Zhcj4KUG9ydGFi bGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsK ICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3Qg OjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdCAmClBvcnRhYmxlU2VydmVyOjpQT0FMaXN0X3Zhcjo6 aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlBvcnRh YmxlU2VydmVyOjpQT0FMaXN0ICYKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjppbm91dCAo dm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OlBvcnRhYmxlU2VydmVy OjpQT0FMaXN0IComClBvcnRhYmxlU2VydmVyOjpQT0FMaXN0X3Zhcjo6b3V0ICh2b2lkKQp7CiAg ZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87 Cn0KCmlubGluZSA6OlBvcnRhYmxlU2VydmVyOjpQT0FMaXN0ICoKUG9ydGFibGVTZXJ2ZXI6OlBP QUxpc3RfdmFyOjpfcmV0biAodm9pZCkKewogIDo6UG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3QgKnRt cCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5l IDo6UG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3QgKgpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdF92YXI6 OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lClBv cnRhYmxlU2VydmVyOjpQT0FMaXN0X291dDo6UE9BTGlzdF9vdXQgKFBPQUxpc3QgKiZwKQogIDog cHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6OlBP QUxpc3Rfb3V0OjpQT0FMaXN0X291dCAoUE9BTGlzdF92YXIgJnApCiAgOiBwdHJfIChwLm91dCAo KSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKUG9y dGFibGVTZXJ2ZXI6OlBPQUxpc3Rfb3V0OjpQT0FMaXN0X291dCAoY29uc3QgOjpQb3J0YWJsZVNl cnZlcjo6UE9BTGlzdF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PFBPQUxpc3Rfb3V0Jj4g KHApLnB0cl8pCnt9CgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdF9vdXQgJgpQb3J0 YWJsZVNlcnZlcjo6UE9BTGlzdF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpQb3J0YWJsZVNlcnZl cjo6UE9BTGlzdF9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3RfY2FzdDxQT0FMaXN0X291 dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6UG9ydGFibGVTZXJ2ZXI6 OlBPQUxpc3Rfb3V0ICYKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3Rfb3V0OjpvcGVyYXRvcj0gKFBP QUxpc3QgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpQ b3J0YWJsZVNlcnZlcjo6UE9BTGlzdF9vdXQ6Om9wZXJhdG9yIDo6UG9ydGFibGVTZXJ2ZXI6OlBP QUxpc3QgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlBvcnRhYmxlU2Vy dmVyOjpQT0FMaXN0IComClBvcnRhYmxlU2VydmVyOjpQT0FMaXN0X291dDo6cHRyICh2b2lkKQp7 CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlBvcnRhYmxlU2VydmVyOjpQT0FMaXN0 ICoKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3Rfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0 dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBUQU9fT2JqZWN0X01hbmFnZXI8UG9ydGFibGVTZXJ2 ZXI6OlBPQSwgUG9ydGFibGVTZXJ2ZXI6OlBPQV92YXI+ClBvcnRhYmxlU2VydmVyOjpQT0FMaXN0 X291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0 cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDQwNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMu aSIKaW5saW5lClBvcnRhYmxlU2VydmVyOjpPYmplY3RJZF92YXI6Ok9iamVjdElkX3ZhciAodm9p ZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6 T2JqZWN0SWRfdmFyIChPYmplY3RJZCAqcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKUG9ydGFi bGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6T2JqZWN0SWRfdmFyIChjb25zdCA6OlBvcnRhYmxlU2Vy dmVyOjpPYmplY3RJZF92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlz LT5wdHJfID0gbmV3IDo6UG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICgqcC5wdHJfKTsgfSBjYXRj aCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47 IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0KCgppbmxpbmUKUG9y dGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6T2JqZWN0SWRfdmFyIChjb25zdCA6OlBvcnRhYmxl U2VydmVyOjpPYmplY3RJZCAmcCkKewogIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OlBv cnRhYmxlU2VydmVyOjpPYmplY3RJZCAocCk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgq X19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwp9Cgppbmxp bmUKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6fk9iamVjdElkX3ZhciAodm9pZCkKewog IGRlbGV0ZSB0aGlzLT5wdHJfOwp9CgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zh ciAmClBvcnRhYmxlU2VydmVyOjpPYmplY3RJZF92YXI6Om9wZXJhdG9yPSAoT2JqZWN0SWQgKnAp CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7 Cn0KCmlubGluZSA6OlBvcnRhYmxlU2VydmVyOjpPYmplY3RJZF92YXIgJgpQb3J0YWJsZVNlcnZl cjo6T2JqZWN0SWRfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6UG9ydGFibGVTZXJ2ZXI6Ok9iamVj dElkX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09 IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlz LT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBPYmpl Y3RJZCAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IE9iamVjdElkICgqcC5wdHJfKTsKCiAg ICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBP YmplY3RJZCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMt PnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxl dGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRo aXM7Cn0KCgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfdmFyICYKUG9ydGFibGVT ZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OlBvcnRhYmxlU2VydmVyOjpP YmplY3RJZCAmcCkKewogIGlmICh0aGlzLT5wdHJfICE9ICZwKQogIHsKICAgIGRlbGV0ZSB0aGlz LT5wdHJfOwogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UG9ydGFibGVTZXJ2ZXI6 Ok9iamVjdElkIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSA9IDEyOyByZXR1cm4gKnRoaXM7IH0gfSB3aGlsZSAoMCk7CiAgfQogIHJldHVybiAq dGhpczsKfQoKaW5saW5lIGNvbnN0IDo6UG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICoKUG9ydGFi bGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVy biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQgKgpQb3J0 YWJsZVNlcnZlcjo6T2JqZWN0SWRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRo aXMtPnB0cl87Cn0KCmlubGluZQpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfdmFyOjpvcGVyYXRv ciBjb25zdCA6OlBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAmKCkgY29uc3QKewogIHJldHVybiAq dGhpcy0+cHRyXzsKfQoKaW5saW5lClBvcnRhYmxlU2VydmVyOjpPYmplY3RJZF92YXI6Om9wZXJh dG9yIDo6UG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJf Owp9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6b3BlcmF0b3IgOjpQb3J0 YWJsZVNlcnZlcjo6T2JqZWN0SWQgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K CmlubGluZSBDT1JCQTo6T2N0ZXQgJgpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfdmFyOjpvcGVy YXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0 b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3QgQ09SQkE6Ok9jdGV0ICYKUG9ydGFibGVTZXJ2 ZXI6Ok9iamVjdElkX3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdAp7 CiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgQ09SQkE6Ok9jdGV0ICY+ICh0aGlzLT5wdHJfLT5v cGVyYXRvcltdIChpbmRleCkpOwp9CgppbmxpbmUgY29uc3QgOjpQb3J0YWJsZVNlcnZlcjo6T2Jq ZWN0SWQgJgpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfdmFyOjppbiAodm9pZCkgY29uc3QKewog IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElk ICYKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4g KnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQgKiYKUG9y dGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0 cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlBv cnRhYmxlU2VydmVyOjpPYmplY3RJZCAqClBvcnRhYmxlU2VydmVyOjpPYmplY3RJZF92YXI6Ol9y ZXRuICh2b2lkKQp7CiAgOjpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQgKnRtcCA9IHRoaXMtPnB0 cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6UG9ydGFibGVT ZXJ2ZXI6Ok9iamVjdElkICoKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6cHRyICh2b2lk KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKUG9ydGFibGVTZXJ2 ZXI6Ok9iamVjdElkX291dDo6T2JqZWN0SWRfb3V0IChPYmplY3RJZCAqJnApCiAgOiBwdHJfIChw KQp7CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRf b3V0OjpPYmplY3RJZF9vdXQgKE9iamVjdElkX3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7 CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpQb3J0YWJs ZVNlcnZlcjo6T2JqZWN0SWRfb3V0OjpPYmplY3RJZF9vdXQgKGNvbnN0IDo6UG9ydGFibGVTZXJ2 ZXI6Ok9iamVjdElkX291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8T2JqZWN0SWRfb3V0Jj4g KHApLnB0cl8pCnt9CgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfb3V0ICYKUG9y dGFibGVTZXJ2ZXI6Ok9iamVjdElkX291dDo6b3BlcmF0b3I9IChjb25zdCA6OlBvcnRhYmxlU2Vy dmVyOjpPYmplY3RJZF9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3RfY2FzdDxPYmplY3RJ ZF9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OlBvcnRhYmxlU2Vy dmVyOjpPYmplY3RJZF9vdXQgJgpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfb3V0OjpvcGVyYXRv cj0gKE9iamVjdElkICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9Cgpp bmxpbmUKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX291dDo6b3BlcmF0b3IgOjpQb3J0YWJsZVNl cnZlcjo6T2JqZWN0SWQgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlBv cnRhYmxlU2VydmVyOjpPYmplY3RJZCAqJgpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfb3V0Ojpw dHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UG9ydGFibGVTZXJ2 ZXI6Ok9iamVjdElkICoKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX291dDo6b3BlcmF0b3ItPiAo dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6Ok9jdGV0ICYKUG9y dGFibGVTZXJ2ZXI6Ok9iamVjdElkX291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4 KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDYzNiAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNl cnZlci9Qb3J0YWJsZVNlcnZlckMuaSIKaW5saW5lIFBvcnRhYmxlU2VydmVyOjpUaHJlYWRQb2xp Y3lfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9UaHJlYWRQb2xpY3lfZHVwbGljYXRlICgKICAgIFBv cnRhYmxlU2VydmVyOjpUaHJlYWRQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gUG9ydGFibGVT ZXJ2ZXI6OlRocmVhZFBvbGljeTo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Q b3J0YWJsZVNlcnZlcl9UaHJlYWRQb2xpY3lfcmVsZWFzZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6 VGhyZWFkUG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUg UG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1RocmVh ZFBvbGljeV9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6VGhy ZWFkUG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGlj eV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1RocmVhZFBvbGljeV9uYXJyb3cgKAogICAgQ09SQkE6 Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5Ojpf bmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENP UkJBOjpPYmplY3QgKgp0YW9fUG9ydGFibGVTZXJ2ZXJfVGhyZWFkUG9saWN5X3VwY2FzdCAoCiAg ICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5ICoqdG1wID0K ICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlU2VydmVyOjpUaHJlYWRQb2xpY3kgKio+IChzcmMpOwog IHJldHVybiAqdG1wOwp9CiMgNjg4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgppbmxpbmUg UG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfTGlm ZXNwYW5Qb2xpY3lfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGlj eV9wdHIgcAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3k6Ol9k dXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVTZXJ2ZXJfTGlmZXNwYW5Q b2xpY3lfcmVsZWFzZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3lfcHRyIHAK ICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6TGlm ZXNwYW5Qb2xpY3lfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9MaWZlc3BhblBvbGljeV9uaWwgKAog ICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3k6Ol9u aWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3lfcHRyCnRhb19Q b3J0YWJsZVNlcnZlcl9MaWZlc3BhblBvbGljeV9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAq cCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZQogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3k6Ol9uYXJyb3cg KHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9i amVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9MaWZlc3BhblBvbGljeV91cGNhc3QgKAogICAgdm9p ZCAqc3JjCiAgKQp7CiAgUG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5ICoqdG1wID0KICAg IHN0YXRpY19jYXN0PFBvcnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGljeSAqKj4gKHNyYyk7CiAg cmV0dXJuICp0bXA7Cn0KIyA3MzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmkiCmlubGluZSBQ b3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJf SWRVbmlxdWVuZXNzUG9saWN5X2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6SWRVbmlx dWVuZXNzUG9saWN5X3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpJZFVuaXF1 ZW5lc3NQb2xpY3k6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVT ZXJ2ZXJfSWRVbmlxdWVuZXNzUG9saWN5X3JlbGVhc2UgKAogICAgUG9ydGFibGVTZXJ2ZXI6Oklk VW5pcXVlbmVzc1BvbGljeV9wdHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5s aW5lIFBvcnRhYmxlU2VydmVyOjpJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyCnRhb19Qb3J0YWJsZVNl cnZlcl9JZFVuaXF1ZW5lc3NQb2xpY3lfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9y dGFibGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGljeTo6X25pbCAoKTsKfQoKaW5saW5lIFBvcnRh YmxlU2VydmVyOjpJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9JZFVu aXF1ZW5lc3NQb2xpY3lfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6 RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1 cm4gUG9ydGFibGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGljeTo6X25hcnJvdyAocCwgX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFv X1BvcnRhYmxlU2VydmVyX0lkVW5pcXVlbmVzc1BvbGljeV91cGNhc3QgKAogICAgdm9pZCAqc3Jj CiAgKQp7CiAgUG9ydGFibGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGljeSAqKnRtcCA9CiAgICBz dGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5ICoqPiAoc3JjKTsK ICByZXR1cm4gKnRtcDsKfQojIDc4OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaSIKaW5saW5l IFBvcnRhYmxlU2VydmVyOjpJZEFzc2lnbm1lbnRQb2xpY3lfcHRyCnRhb19Qb3J0YWJsZVNlcnZl cl9JZEFzc2lnbm1lbnRQb2xpY3lfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlU2VydmVyOjpJZEFz c2lnbm1lbnRQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OklkQXNz aWdubWVudFBvbGljeTo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJs ZVNlcnZlcl9JZEFzc2lnbm1lbnRQb2xpY3lfcmVsZWFzZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6 SWRBc3NpZ25tZW50UG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9Cgpp bmxpbmUgUG9ydGFibGVTZXJ2ZXI6OklkQXNzaWdubWVudFBvbGljeV9wdHIKdGFvX1BvcnRhYmxl U2VydmVyX0lkQXNzaWdubWVudFBvbGljeV9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQ b3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgUG9y dGFibGVTZXJ2ZXI6OklkQXNzaWdubWVudFBvbGljeV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX0lk QXNzaWdubWVudFBvbGljeV9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJl dHVybiBQb3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5OjpfbmFycm93IChwLCBfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0 YW9fUG9ydGFibGVTZXJ2ZXJfSWRBc3NpZ25tZW50UG9saWN5X3VwY2FzdCAoCiAgICB2b2lkICpz cmMKICApCnsKICBQb3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5ICoqdG1wID0KICAg IHN0YXRpY19jYXN0PFBvcnRhYmxlU2VydmVyOjpJZEFzc2lnbm1lbnRQb2xpY3kgKio+IChzcmMp OwogIHJldHVybiAqdG1wOwp9CiMgODQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgppbmxp bmUgUG9ydGFibGVTZXJ2ZXI6OkltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIKdGFvX1BvcnRh YmxlU2VydmVyX0ltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9kdXBsaWNhdGUgKAogICAgUG9ydGFi bGVTZXJ2ZXI6OkltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgcAogICkKewogIHJldHVybiBQ b3J0YWJsZVNlcnZlcjo6SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5OjpfZHVwbGljYXRlIChwKTsK fQoKaW5saW5lIHZvaWQKdGFvX1BvcnRhYmxlU2VydmVyX0ltcGxpY2l0QWN0aXZhdGlvblBvbGlj eV9yZWxlYXNlICgKICAgIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lf cHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZl cjo6SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfSW1wbGlj aXRBY3RpdmF0aW9uUG9saWN5X25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxl U2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3k6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0 YWJsZVNlcnZlcjo6SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2 ZXJfSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpw LAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl CiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3k6 Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUg Q09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9JbXBsaWNpdEFjdGl2YXRpb25Qb2xp Y3lfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNp dEFjdGl2YXRpb25Qb2xpY3kgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8UG9ydGFibGVTZXJ2ZXI6 OkltcGxpY2l0QWN0aXZhdGlvblBvbGljeSAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyA4 OTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9y dGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmkiCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2Vy dmFudFJldGVudGlvblBvbGljeV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1NlcnZhbnRSZXRlbnRp b25Qb2xpY3lfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50aW9u UG9saWN5X3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50 aW9uUG9saWN5OjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX1BvcnRhYmxlU2Vy dmVyX1NlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcmVsZWFzZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6 U2VydmFudFJldGVudGlvblBvbGljeV9wdHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsK fQoKaW5saW5lIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cgp0YW9f UG9ydGFibGVTZXJ2ZXJfU2VydmFudFJldGVudGlvblBvbGljeV9uaWwgKAogICAgdm9pZAogICkK ewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJldGVudGlvblBvbGljeTo6X25pbCAo KTsKfQoKaW5saW5lIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cgp0 YW9fUG9ydGFibGVTZXJ2ZXJfU2VydmFudFJldGVudGlvblBvbGljeV9uYXJyb3cgKAogICAgQ09S QkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJldGVu dGlvblBvbGljeTo6X25hcnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7 Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX1BvcnRhYmxlU2VydmVyX1NlcnZhbnRSZXRl bnRpb25Qb2xpY3lfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIFBvcnRhYmxlU2VydmVy OjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5ICoqdG1wID0KICAgIHN0YXRpY19jYXN0PFBvcnRhYmxl U2VydmVyOjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5ICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsK fQojIDk0MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaSIKaW5saW5lIFBvcnRhYmxlU2VydmVy OjpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1JlcXVlc3RQ cm9jZXNzaW5nUG9saWN5X2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6UmVxdWVzdFBy b2Nlc3NpbmdQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlJlcXVl c3RQcm9jZXNzaW5nUG9saWN5OjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX1Bv cnRhYmxlU2VydmVyX1JlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3JlbGVhc2UgKAogICAgUG9ydGFi bGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJl bGVhc2UgKHApOwp9CgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNzaW5nUG9s aWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfbmlsICgK ICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNzaW5n UG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNz aW5nUG9saWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lf bmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2 ZXI6OlJlcXVlc3RQcm9jZXNzaW5nUG9saWN5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fUG9ydGFibGVT ZXJ2ZXJfUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkK ewogIFBvcnRhYmxlU2VydmVyOjpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSAqKnRtcCA9CiAgICBz dGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3kgKio+IChz cmMpOwogIHJldHVybiAqdG1wOwp9CiMgOTk2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgpp bmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlBPQU1hbmFnZXJfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9Q T0FNYW5hZ2VyX2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcl9wdHIg cAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcjo6X2R1cGxpY2F0ZSAo cCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZVNlcnZlcl9QT0FNYW5hZ2VyX3JlbGVhc2Ug KAogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQU1hbmFnZXJfcHRyIHAKICApCnsKICBDT1JCQTo6cmVs ZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcl9wdHIKdGFvX1Bv cnRhYmxlU2VydmVyX1BPQU1hbmFnZXJfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9y dGFibGVTZXJ2ZXI6OlBPQU1hbmFnZXI6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZl cjo6UE9BTWFuYWdlcl9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1BPQU1hbmFnZXJfbmFycm93ICgK ICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlBPQU1h bmFnZXI6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgpp bmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9QT0FNYW5hZ2VyX3VwY2Fz dCAoCiAgICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlciAqKnRt cCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlciAqKj4gKHNyYyk7 CiAgcmV0dXJuICp0bXA7Cn0KIyAxMDQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgppbmxp bmUgUG9ydGFibGVTZXJ2ZXI6OkFkYXB0ZXJBY3RpdmF0b3JfcHRyCnRhb19Qb3J0YWJsZVNlcnZl cl9BZGFwdGVyQWN0aXZhdG9yX2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6QWRhcHRl ckFjdGl2YXRvcl9wdHIgcAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6QWRhcHRlckFj dGl2YXRvcjo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZVNlcnZl cl9BZGFwdGVyQWN0aXZhdG9yX3JlbGVhc2UgKAogICAgUG9ydGFibGVTZXJ2ZXI6OkFkYXB0ZXJB Y3RpdmF0b3JfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0 YWJsZVNlcnZlcjo6QWRhcHRlckFjdGl2YXRvcl9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX0FkYXB0 ZXJBY3RpdmF0b3JfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6 OkFkYXB0ZXJBY3RpdmF0b3I6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6QWRh cHRlckFjdGl2YXRvcl9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX0FkYXB0ZXJBY3RpdmF0b3JfbmFy cm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6 OkFkYXB0ZXJBY3RpdmF0b3I6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9BZGFw dGVyQWN0aXZhdG9yX3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJsZVNlcnZl cjo6QWRhcHRlckFjdGl2YXRvciAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZl cjo6QWRhcHRlckFjdGl2YXRvciAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMDk4ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl U2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRN YW5hZ2VyX3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfU2VydmFudE1hbmFnZXJfZHVwbGljYXRlICgK ICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdlcl9wdHIgcAogICkKewogIHJldHVybiBQ b3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXI6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUg dm9pZAp0YW9fUG9ydGFibGVTZXJ2ZXJfU2VydmFudE1hbmFnZXJfcmVsZWFzZSAoCiAgICBQb3J0 YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXJfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAo cCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXJfcHRyCnRhb19Qb3J0 YWJsZVNlcnZlcl9TZXJ2YW50TWFuYWdlcl9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQ b3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXI6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJs ZVNlcnZlcjo6U2VydmFudE1hbmFnZXJfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50TWFu YWdlcl9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVu dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJs ZVNlcnZlcjo6U2VydmFudE1hbmFnZXI6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZVNlcnZl cl9TZXJ2YW50TWFuYWdlcl91cGNhc3QgKAogICAgdm9pZCAqc3JjCiAgKQp7CiAgUG9ydGFibGVT ZXJ2ZXI6OlNlcnZhbnRNYW5hZ2VyICoqdG1wID0KICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlU2Vy dmVyOjpTZXJ2YW50TWFuYWdlciAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMTQ4ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl U2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRB Y3RpdmF0b3JfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50QWN0aXZhdG9yX2R1cGxpY2F0 ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcl9wdHIgcAogICkKewogIHJl dHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcjo6X2R1cGxpY2F0ZSAocCk7Cn0K CmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50QWN0aXZhdG9yX3JlbGVhc2Ug KAogICAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3JfcHRyIHAKICApCnsKICBDT1JC QTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRv cl9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1NlcnZhbnRBY3RpdmF0b3JfbmlsICgKICAgIHZvaWQK ICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3I6Ol9uaWwgKCk7 Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcl9wdHIKdGFvX1BvcnRh YmxlU2VydmVyX1NlcnZhbnRBY3RpdmF0b3JfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAs CiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUK ICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3I6Ol9uYXJyb3cg KHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9i amVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50QWN0aXZhdG9yX3VwY2FzdCAoCiAgICB2 b2lkICpzcmMKICApCnsKICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvciAqKnRtcCA9 CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvciAqKj4gKHNy Yyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMTk4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgpp bmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2NhdG9yX3B0cgp0YW9fUG9ydGFibGVTZXJ2 ZXJfU2VydmFudExvY2F0b3JfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50 TG9jYXRvcl9wdHIgcAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0 b3I6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVTZXJ2ZXJfU2Vy dmFudExvY2F0b3JfcmVsZWFzZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3Jf cHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZl cjo6U2VydmFudExvY2F0b3JfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50TG9jYXRvcl9u aWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0 b3I6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3JfcHRy CnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50TG9jYXRvcl9uYXJyb3cgKAogICAgQ09SQkE6Ok9i amVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3I6Ol9u YXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09S QkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50TG9jYXRvcl91cGNhc3QgKAog ICAgdm9pZCAqc3JjCiAgKQp7CiAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2NhdG9yICoqdG1w ID0KICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TG9jYXRvciAqKj4gKHNy Yyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMjkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgpp bmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1BPQV9kdXBs aWNhdGUgKAogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcAogICkKewogIHJldHVybiBQb3J0 YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX1BvcnRh YmxlU2VydmVyX1BPQV9yZWxlYXNlICgKICAgIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHAKICAp CnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0 cgp0YW9fUG9ydGFibGVTZXJ2ZXJfUE9BX25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIFBv cnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9B X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfUE9BX25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpw LAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl CiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09S QkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Q b3J0YWJsZVNlcnZlcl9QT0FfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIFBvcnRhYmxl U2VydmVyOjpQT0EgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8UG9ydGFibGVTZXJ2ZXI6OlBPQSAq Kj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMzQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVy Qy5pIgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OkN1cnJlbnRfcHRyCnRhb19Qb3J0YWJsZVNlcnZl cl9DdXJyZW50X2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6Q3VycmVudF9wdHIgcAog ICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6Q3VycmVudDo6X2R1cGxpY2F0ZSAocCk7Cn0K CmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZVNlcnZlcl9DdXJyZW50X3JlbGVhc2UgKAogICAgUG9y dGFibGVTZXJ2ZXI6OkN1cnJlbnRfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0K CmlubGluZSBQb3J0YWJsZVNlcnZlcjo6Q3VycmVudF9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX0N1 cnJlbnRfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OkN1cnJl bnQ6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6Q3VycmVudF9wdHIKdGFvX1Bv cnRhYmxlU2VydmVyX0N1cnJlbnRfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsK ICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OkN1cnJlbnQ6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0 YWJsZVNlcnZlcl9DdXJyZW50X3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJs ZVNlcnZlcjo6Q3VycmVudCAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6 Q3VycmVudCAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMzk0ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRh YmxlU2VydmVyQy5pIgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRD RFIgJiwKICAgIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAmCiAgKTsKQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwKICAgIFBvcnRhYmxlU2VydmVy OjpPYmplY3RJZCAmCiAgKTsKCgoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAo VEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUG9ydGFibGVTZXJ2ZXI6OkZvcndhcmRSZXF1ZXN0 ICZfdGFvX2FnZ3JlZ2F0ZSkKewoKICBpZiAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5faWQgKCkp CiAgewoKICAgIGlmICgKICAgICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuZm9yd2FyZF9yZWZl cmVuY2UuaW4gKCkpCiAgICApCiAgICAgIHJldHVybiAxOwogICAgZWxzZQogICAgICByZXR1cm4g MDsKICB9CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVy YXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sUG9ydGFibGVTZXJ2ZXI6OkZvcndhcmRSZXF1ZXN0 ICZfdGFvX2FnZ3JlZ2F0ZSkKewoKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5m b3J3YXJkX3JlZmVyZW5jZS5vdXQgKCkpCiAgKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0 dXJuIDA7Cn0KCgoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1 dENEUiAmc3RybSwgY29uc3QgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeVZhbHVlICZfdGFv X2VudW12YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gX3Rhb19lbnVtdmFsOwogIHJl dHVybiBzdHJtIDw8IF90YW9fdGVtcDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y Pj4gKFRBT19JbnB1dENEUiAmc3RybSwgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeVZhbHVl ICZfdGFvX2VudW12YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gMDsKICBDT1JCQTo6 Qm9vbGVhbiBfdGFvX3Jlc3VsdCA9IHN0cm0gPj4gX3Rhb190ZW1wOwoKICBpZiAoX3Rhb19yZXN1 bHQgPT0gMSkKICAgIHsKICAgICAgX3Rhb19lbnVtdmFsID0gc3RhdGljX2Nhc3Q8UG9ydGFibGVT ZXJ2ZXI6OlRocmVhZFBvbGljeVZhbHVlPiAoX3Rhb190ZW1wKTsKICAgIH0KCiAgcmV0dXJuIF90 YW9fcmVzdWx0Owp9CgoKCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0 cHV0Q0RSICZzdHJtLCBjb25zdCBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3lWYWx1ZSAm X3Rhb19lbnVtdmFsKQp7CiAgQ09SQkE6OlVMb25nIF90YW9fdGVtcCA9IF90YW9fZW51bXZhbDsK ICByZXR1cm4gc3RybSA8PCBfdGFvX3RlbXA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVy YXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIFBvcnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGlj eVZhbHVlICZfdGFvX2VudW12YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gMDsKICBD T1JCQTo6Qm9vbGVhbiBfdGFvX3Jlc3VsdCA9IHN0cm0gPj4gX3Rhb190ZW1wOwoKICBpZiAoX3Rh b19yZXN1bHQgPT0gMSkKICAgIHsKICAgICAgX3Rhb19lbnVtdmFsID0gc3RhdGljX2Nhc3Q8UG9y dGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5VmFsdWU+IChfdGFvX3RlbXApOwogICAgfQoKICBy ZXR1cm4gX3Rhb19yZXN1bHQ7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChU QU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBQb3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9s aWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewogIENPUkJBOjpVTG9uZyBfdGFvX3RlbXAgPSBfdGFv X2VudW12YWw7CiAgcmV0dXJuIHN0cm0gPDwgX3Rhb190ZW1wOwp9CgppbmxpbmUgQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBQb3J0YWJsZVNlcnZlcjo6SWRV bmlxdWVuZXNzUG9saWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewogIENPUkJBOjpVTG9uZyBfdGFv X3RlbXAgPSAwOwogIENPUkJBOjpCb29sZWFuIF90YW9fcmVzdWx0ID0gc3RybSA+PiBfdGFvX3Rl bXA7CgogIGlmIChfdGFvX3Jlc3VsdCA9PSAxKQogICAgewogICAgICBfdGFvX2VudW12YWwgPSBz dGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5VmFsdWU+IChfdGFv X3RlbXApOwogICAgfQoKICByZXR1cm4gX3Rhb19yZXN1bHQ7Cn0KCmlubGluZSBDT1JCQTo6Qm9v bGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBQb3J0YWJsZVNlcnZl cjo6SWRBc3NpZ25tZW50UG9saWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewogIENPUkJBOjpVTG9u ZyBfdGFvX3RlbXAgPSBfdGFvX2VudW12YWw7CiAgcmV0dXJuIHN0cm0gPDwgX3Rhb190ZW1wOwp9 CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBQ b3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewog IENPUkJBOjpVTG9uZyBfdGFvX3RlbXAgPSAwOwogIENPUkJBOjpCb29sZWFuIF90YW9fcmVzdWx0 ID0gc3RybSA+PiBfdGFvX3RlbXA7CgogIGlmIChfdGFvX3Jlc3VsdCA9PSAxKQogICAgewogICAg ICBfdGFvX2VudW12YWwgPSBzdGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50 UG9saWN5VmFsdWU+IChfdGFvX3RlbXApOwogICAgfQoKICByZXR1cm4gX3Rhb19yZXN1bHQ7Cn0K CgoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0s IGNvbnN0IFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lWYWx1ZSAmX3Rh b19lbnVtdmFsKQp7CiAgQ09SQkE6OlVMb25nIF90YW9fdGVtcCA9IF90YW9fZW51bXZhbDsKICBy ZXR1cm4gc3RybSA8PCBfdGFvX3RlbXA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv cj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRp b25Qb2xpY3lWYWx1ZSAmX3Rhb19lbnVtdmFsKQp7CiAgQ09SQkE6OlVMb25nIF90YW9fdGVtcCA9 IDA7CiAgQ09SQkE6OkJvb2xlYW4gX3Rhb19yZXN1bHQgPSBzdHJtID4+IF90YW9fdGVtcDsKCiAg aWYgKF90YW9fcmVzdWx0ID09IDEpCiAgICB7CiAgICAgIF90YW9fZW51bXZhbCA9IHN0YXRpY19j YXN0PFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lWYWx1ZT4gKF90YW9f dGVtcCk7CiAgICB9CgogIHJldHVybiBfdGFvX3Jlc3VsdDsKfQoKaW5saW5lIENPUkJBOjpCb29s ZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IFBvcnRhYmxlU2VydmVy OjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewogIENPUkJBOjpV TG9uZyBfdGFvX3RlbXAgPSBfdGFvX2VudW12YWw7CiAgcmV0dXJuIHN0cm0gPDwgX3Rhb190ZW1w Owp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJt LCBQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJldGVudGlvblBvbGljeVZhbHVlICZfdGFvX2VudW12 YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gMDsKICBDT1JCQTo6Qm9vbGVhbiBfdGFv X3Jlc3VsdCA9IHN0cm0gPj4gX3Rhb190ZW1wOwoKICBpZiAoX3Rhb19yZXN1bHQgPT0gMSkKICAg IHsKICAgICAgX3Rhb19lbnVtdmFsID0gc3RhdGljX2Nhc3Q8UG9ydGFibGVTZXJ2ZXI6OlNlcnZh bnRSZXRlbnRpb25Qb2xpY3lWYWx1ZT4gKF90YW9fdGVtcCk7CiAgICB9CgogIHJldHVybiBfdGFv X3Jlc3VsdDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRD RFIgJnN0cm0sIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeVZh bHVlICZfdGFvX2VudW12YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gX3Rhb19lbnVt dmFsOwogIHJldHVybiBzdHJtIDw8IF90YW9fdGVtcDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu IG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwgUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQ cm9jZXNzaW5nUG9saWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewogIENPUkJBOjpVTG9uZyBfdGFv X3RlbXAgPSAwOwogIENPUkJBOjpCb29sZWFuIF90YW9fcmVzdWx0ID0gc3RybSA+PiBfdGFvX3Rl bXA7CgogIGlmIChfdGFvX3Jlc3VsdCA9PSAxKQogICAgewogICAgICBfdGFvX2VudW12YWwgPSBz dGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1ZT4g KF90YW9fdGVtcCk7CiAgICB9CgogIHJldHVybiBfdGFvX3Jlc3VsdDsKfQojIDMzMjkgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2 ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiIDIKIyAzMzM5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5o IgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0 LmgiIDEKIyAzMzQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAyCiMgNTIgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIv UG9ydGFibGVTZXJ2ZXIuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyLmgi IDIKIyAzNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y YnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvU2VydmFudF9CYXNlLmgi IDEKIyAxOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9Qb3J0YWJsZVNlcnZlci9TZXJ2YW50X0Jhc2UuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyMCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9TZXJ2YW50 X0Jhc2UuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAxCiMgMjIgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2 ZXIvU2VydmFudF9CYXNlLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL0Fic3RyYWN0X1NlcnZhbnRfQmFzZS5oIiAxCiMgMjMgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQWJzdHJhY3RfU2Vy dmFudF9CYXNlLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL3ByZS5oIiAxCiMgMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy90YW8vQWJzdHJhY3RfU2VydmFudF9CYXNlLmgiIDIKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhZndkLmgiIDEKIyAy NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9BYnN0 cmFjdF9TZXJ2YW50X0Jhc2UuaCIgMgoKCgoKCmNsYXNzIFRBT19TZXJ2ZXJSZXF1ZXN0OwoKY2xh c3MgVEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlCnsKcHVibGljOgoKICB2aXJ0dWFsIH5UQU9fQWJz dHJhY3RfU2VydmFudEJhc2UgKHZvaWQpOwoKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNf YSAoY29uc3QgY2hhciogbG9naWNhbF90eXBlX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t ZW50ICgpKSA9IDA7CgoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQgKENP UkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1l bnQgKCkpID0gMDsKCgogIHZpcnR1YWwgQ09SQkFfSW50ZXJmYWNlRGVmX3B0ciBfZ2V0X2ludGVy ZmFjZSAoCiAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlID0gVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkgPSAwOwoKCgogIHZpcnR1 YWwgdm9pZCBfYWRkX3JlZiAoQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv bm1lbnQgKCkpOwogIHZpcnR1YWwgdm9pZCBfcmVtb3ZlX3JlZiAoQ09SQkFfRW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgogIHZpcnR1YWwgdm9pZCAqX2Rv d25jYXN0IChjb25zdCBjaGFyICpyZXBvc2l0b3J5X2lkKSA9IDA7CgoKICB2aXJ0dWFsIFRBT19T dHViICpfY3JlYXRlX3N0dWIgKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlKSA9IDA7Cgpwcm90ZWN0ZWQ6CgogIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFz ZSAodm9pZCk7CgoKICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKGNvbnN0IFRBT19BYnN0cmFj dF9TZXJ2YW50QmFzZSAmKTsKCgogIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAmb3BlcmF0b3I9 IChjb25zdCBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgJik7CiMgODMgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQWJzdHJhY3RfU2VydmFudF9CYXNl LmgiCiAgdmlydHVhbCB2b2lkIF9kaXNwYXRjaCAoVEFPX1NlcnZlclJlcXVlc3QgJnJlcXVlc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUpID0gMDsKCiAgdmlydHVhbCB2b2lkIHN5bmNocm9ub3VzX3VwY2FsbF9kaXNw YXRjaCAoVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXJpdmVkX3RoaXMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKSA9IDA7CgoKICB2aXJ0dWFsIGludCBfZmluZCAo Y29uc3QgY2hhciAqb3BuYW1lLAogICAgICAgICAgICAgICAgICAgICBUQU9fU2tlbGV0b24gJnNr ZWxmdW5jLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoID0g MCkgPSAwOwoKCiAgdmlydHVhbCBpbnQgX2JpbmQgKGNvbnN0IGNoYXIgKm9wbmFtZSwKICAgICAg ICAgICAgICAgICAgICAgY29uc3QgVEFPX1NrZWxldG9uIHNrZWxfcHRyKSA9IDA7CgoKICB2aXJ0 dWFsIGNvbnN0IGNoYXIgKl9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3QgPSAw Owp9OwoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv cG9zdC5oIiAxCiMgMTA2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL0Fic3RyYWN0X1NlcnZhbnRfQmFzZS5oIiAyCiMgMjMgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvU2VydmFu dF9CYXNlLmgiIDIKCgoKCgpjbGFzcyBUQU9fT3BlcmF0aW9uX1RhYmxlOwoKY2xhc3MgVEFPX1Nl cnZhbnRCYXNlCiAgOiBwdWJsaWMgdmlydHVhbCBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UKewoK CgoKCgpwdWJsaWM6CiAgZnJpZW5kIGNsYXNzIFRBT19QT0E7CiAgZnJpZW5kIGNsYXNzIFRBT19P YmplY3RfQWRhcHRlcjsKICBmcmllbmQgY2xhc3MgQ09SQkFfT2JqZWN0OwogIGZyaWVuZCBjbGFz cyBUQU9fTG9jYWxfU2VydmFudEJhc2U7CgogIHZpcnR1YWwgflRBT19TZXJ2YW50QmFzZSAodm9p ZCk7CgoKICB2aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIF9kZWZhdWx0X1BPQSAoCiAg ICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgKTsKCgogIHZpcnR1YWwgQ09S QkE6OkJvb2xlYW4gX2lzX2EgKGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9pZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25f ZXhpc3RlbnQgKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkpOwoKCiAgdmlydHVhbCBDT1JCQV9JbnRlcmZhY2VEZWZfcHRyIF9n ZXRfaW50ZXJmYWNlICgKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAp OwoKICB2aXJ0dWFsIHZvaWQgKl9kb3duY2FzdCAoY29uc3QgY2hhciAqcmVwb3NpdG9yeV9pZCkg PSAwOwoKCiAgdmlydHVhbCBUQU9fU3R1YiAqX2NyZWF0ZV9zdHViIChDT1JCQV9FbnZpcm9ubWVu dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CgoKICB2aXJ0dWFsIHZvaWQgX2Rp c3BhdGNoIChUQU9fU2VydmVyUmVxdWVzdCAmcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC QV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkgPSAwOwoKCgoK Cgpwcm90ZWN0ZWQ6CgogIFRBT19TZXJ2YW50QmFzZSAodm9pZCk7CgoKICBUQU9fU2VydmFudEJh c2UgKGNvbnN0IFRBT19TZXJ2YW50QmFzZSAmKTsKCgogIFRBT19TZXJ2YW50QmFzZSAmb3BlcmF0 b3I9IChjb25zdCBUQU9fU2VydmFudEJhc2UgJik7CgoKCiAgdmlydHVhbCB2b2lkIHN5bmNocm9u b3VzX3VwY2FsbF9kaXNwYXRjaCAoVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXJpdmVkX3Ro aXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCiAgdmlydHVhbCBp bnQgX2ZpbmQgKGNvbnN0IGNoYXIgKm9wbmFtZSwKICAgICAgICAgICAgICAgICAgICAgVEFPX1Nr ZWxldG9uICZza2VsZnVuYywKICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50 IGxlbmd0aCA9IDApOwoKCiAgdmlydHVhbCBpbnQgX2JpbmQgKGNvbnN0IGNoYXIgKm9wbmFtZSwK ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEFPX1NrZWxldG9uIHNrZWxfcHRyKTsKCgogIHZp cnR1YWwgY29uc3QgY2hhciAqX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdCA9 IDA7CgoKcHJvdGVjdGVkOgogIFRBT19PcGVyYXRpb25fVGFibGUgKm9wdGFibGVfOwoKCn07Cgpj bGFzcyBUQU9fUmVmQ291bnRTZXJ2YW50QmFzZQogIDogcHVibGljIHZpcnR1YWwgVEFPX1NlcnZh bnRCYXNlCnsKIyAxNDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvU2VydmFudF9CYXNlLmgiCnB1YmxpYzoKCiAgflRBT19S ZWZDb3VudFNlcnZhbnRCYXNlICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCBfYWRkX3JlZiAoQ09S QkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKICB2aXJ0 dWFsIHZvaWQgX3JlbW92ZV9yZWYgKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKcHJvdGVjdGVkOgoKICBUQU9fUmVmQ291bnRTZXJ2YW50 QmFzZSAodm9pZCk7CgoKICBUQU9fUmVmQ291bnRTZXJ2YW50QmFzZSAoY29uc3QgVEFPX1JlZkNv dW50U2VydmFudEJhc2UgJik7CgoKCiAgVEFPX1JlZkNvdW50U2VydmFudEJhc2UgJm9wZXJhdG9y PSAoY29uc3QgVEFPX1JlZkNvdW50U2VydmFudEJhc2UgJik7CgoKCnByaXZhdGU6CgogIEFDRV9B dG9taWNfT3A8QUNFX01UX1NZTkNIOjpNVVRFWCwgbG9uZz4gcmVmX2NvdW50XzsKCn07CgpjbGFz cyBUQU9fU2VydmFudEJhc2VfdmFyCnsKIyAxOTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvU2VydmFudF9CYXNlLmgiCnB1 YmxpYzoKICBUQU9fU2VydmFudEJhc2VfdmFyICh2b2lkKTsKCiAgVEFPX1NlcnZhbnRCYXNlX3Zh ciAoVEFPX1NlcnZhbnRCYXNlICpwKTsKCiAgVEFPX1NlcnZhbnRCYXNlX3ZhciAoY29uc3QgVEFP X1NlcnZhbnRCYXNlX3ZhciAmYik7CgogIH5UQU9fU2VydmFudEJhc2VfdmFyICh2b2lkKTsKCiAg VEFPX1NlcnZhbnRCYXNlX3ZhciAmb3BlcmF0b3I9IChUQU9fU2VydmFudEJhc2UgKnApOwoKICBU QU9fU2VydmFudEJhc2VfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19TZXJ2YW50QmFzZV92YXIg JmIpOwoKICBUQU9fU2VydmFudEJhc2UgKm9wZXJhdG9yLT4gKCkgY29uc3Q7CgogIFRBT19TZXJ2 YW50QmFzZSAqaW4gKHZvaWQpIGNvbnN0OwoKICBUQU9fU2VydmFudEJhc2UgKiZpbm91dCAodm9p ZCk7CgogIFRBT19TZXJ2YW50QmFzZSAqJm91dCAodm9pZCk7CgogIFRBT19TZXJ2YW50QmFzZSAq X3JldG4gKHZvaWQpOwoKcHJpdmF0ZToKCiAgVEFPX1NlcnZhbnRCYXNlICpwdHJfOwp9OwoKY2xh c3MgVEFPX1NlcnZhbnRfSGFzaAp7CnB1YmxpYzoKICB1X2xvbmcgb3BlcmF0b3IgKCkgKFBvcnRh YmxlU2VydmVyOjpTZXJ2YW50IHNlcnZhbnQpIGNvbnN0OwoKfTsKCmNsYXNzIFRBT19Mb2NhbF9T ZXJ2YW50QmFzZQogIDogcHVibGljIHZpcnR1YWwgVEFPX1NlcnZhbnRCYXNlCnsKIyAyNDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVT ZXJ2ZXIvU2VydmFudF9CYXNlLmgiCnByb3RlY3RlZDoKICBUQU9fU3R1YiAqX2NyZWF0ZV9zdHVi IChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoK CiAgdm9pZCBfZGlzcGF0Y2ggKFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXF1ZXN0LAogICAgICAgICAg ICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICAgICAgICAgICAgQ09SQkFfRW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKfTsKCgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVT ZXJ2ZXIvU2VydmFudF9CYXNlLmkiIDEKCgppbmxpbmUgdV9sb25nClRBT19TZXJ2YW50X0hhc2g6 Om9wZXJhdG9yICgpIChQb3J0YWJsZVNlcnZlcjo6U2VydmFudCBzZXJ2YW50KSBjb25zdAp7CiAg cmV0dXJuIHVfbG9uZyAoc2VydmFudCk7Cn0KCmlubGluZSBUQU9fU3R1YiAqClRBT19Mb2NhbF9T ZXJ2YW50QmFzZTo6X2NyZWF0ZV9zdHViIChDT1JCQV9FbnZpcm9ubWVudCAmICkKewojIDMzICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl U2VydmVyL1NlcnZhbnRfQmFzZS5pIgogIHJldHVybiAwOwoKfQojIDI1NSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9TZXJ2 YW50X0Jhc2UuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvYWNlL3Bvc3QuaCIgMQojIDI1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9TZXJ2YW50X0Jhc2UuaCIgMgojIDM2 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL1RpbWVCYXNlUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Db2xsb2NhdGVkX09iamVjdC5oIiAx CiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v UG9ydGFibGVTZXJ2ZXIvQ29sbG9jYXRlZF9PYmplY3QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxOSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Db2xs b2NhdGVkX09iamVjdC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvcG9ydGFibGVzZXJ2ZXJfZXhwb3J0Lmgi IDEKIyAyMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh by9Qb3J0YWJsZVNlcnZlci9Db2xsb2NhdGVkX09iamVjdC5oIiAyCgoKCgoKCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3QuaCIgMQoj IDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv cnRhYmxlU2VydmVyL0NvbGxvY2F0ZWRfT2JqZWN0LmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1NlcnZhbnRf QmFzZS5oIiAxCiMgMjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvQ29sbG9jYXRlZF9PYmplY3QuaCIgMgoKCmNsYXNzIFRB T19Db2xsb2NhdGVkX09iamVjdCA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdAp7CnB1Ymxp YzoKICBUQU9fQ29sbG9jYXRlZF9PYmplY3QgKFRBT19TdHViICpwID0gMCwKICAgICAgICAgICAg ICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIGNvbGxvY2F0ZWQgPSAwLAogICAgICAgICAgICAg ICAgICAgICAgICAgVEFPX1NlcnZhbnRCYXNlICpzZXJ2YW50ID0gMCk7CgoKICB2aXJ0dWFsIH5U QU9fQ29sbG9jYXRlZF9PYmplY3QgKHZvaWQpOwoKCgoKCgogIHN0YXRpYyBUQU9fQ29sbG9jYXRl ZF9PYmplY3QgKl9uYXJyb3cgKENPUkJBOjpPYmplY3RfcHRyIG9iamVjdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgoKICB2aXJ0dWFsIENP UkJBOjpCb29sZWFuIF9pc19hIChjb25zdCBDT1JCQTo6Q2hhciAqbG9naWNhbF90eXBlX2lkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu IF9pc19lcXVpdmFsZW50IChDT1JCQV9PYmplY3RfcHRyIG90aGVyX29iaiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJikKICAgIHRo cm93ICgpOwoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQgKENPUkJBX0Vu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkp OwoKICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UocHRyX2FyaXRoX3QgdHlwZSk7 Cgpwcml2YXRlOgoKICBUQU9fQ29sbG9jYXRlZF9PYmplY3QgKGNvbnN0IFRBT19Db2xsb2NhdGVk X09iamVjdCAmKTsKICBUQU9fQ29sbG9jYXRlZF9PYmplY3QgJm9wZXJhdG9yID0gKGNvbnN0IFRB T19Db2xsb2NhdGVkX09iamVjdCAmKTsKIyA3NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Db2xsb2NhdGVkX09iamVjdC5o Igp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9Qb3J0YWJsZVNlcnZlci9Db2xsb2NhdGVkX09iamVjdC5pIiAxCgoKCgoKaW5saW5lClRB T19Db2xsb2NhdGVkX09iamVjdDo6VEFPX0NvbGxvY2F0ZWRfT2JqZWN0IChUQU9fU3R1YiAqcCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29s ZWFuIGNvbGxvY2F0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUQU9fU2VydmFudEJhc2UgKnNlcnZhbnQpCiAgOiBDT1JCQV9PYmplY3QgKHAsIGNvbGxv Y2F0ZWQsIHNlcnZhbnQpCnsKfQojIDgwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0NvbGxvY2F0ZWRfT2JqZWN0LmgiIDIK CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0 LmgiIDEKIyA4MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9Qb3J0YWJsZVNlcnZlci9Db2xsb2NhdGVkX09iamVjdC5oIiAyCiMgMzcgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGlt ZUJhc2VTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1RocnVQT0FfT2JqZWN0X1Byb3h5X0ltcGwuaCIgMQoj IDIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv cnRhYmxlU2VydmVyL1RocnVQT0FfT2JqZWN0X1Byb3h5X0ltcGwuaCIKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL3Bv cnRhYmxlc2VydmVyX2V4cG9ydC5oIiAxCiMgMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvVGhydVBPQV9PYmplY3RfUHJv eHlfSW1wbC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvcHJlLmgiIDEKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9UaHJ1UE9BX09iamVjdF9Qcm94eV9JbXBs LmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vY29yYmFmd2QuaCIgMQojIDMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1RocnVQT0FfT2JqZWN0X1Byb3h5X0lt cGwuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty90YW8vT2JqZWN0X1Byb3h5X0ltcGwuaCIgMQojIDMxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1RocnVQT0FfT2JqZWN0 X1Byb3h5X0ltcGwuaCIgMgoKCgoKCgpjbGFzcyBUQU9fVGhydVBPQV9PYmplY3RfUHJveHlfSW1w bCA6IHB1YmxpYyB2aXJ0dWFsIFRBT19PYmplY3RfUHJveHlfSW1wbAp7CgoKCgoKcHVibGljOgoK ICBUQU9fVGhydVBPQV9PYmplY3RfUHJveHlfSW1wbCAodm9pZCk7CgogIHZpcnR1YWwgflRBT19U aHJ1UE9BX09iamVjdF9Qcm94eV9JbXBsICh2b2lkKTsKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVh biBfaXNfYSAoY29uc3QgQ09SQkE6Ok9iamVjdF9wdHIgdGFyZ2V0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IENPUkJBOjpDaGFyICpsb2dpY2FsX3R5cGVfaWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUpOwoKCgogIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gX25vbl9l eGlzdGVudCAoY29uc3QgQ09SQkE6Ok9iamVjdF9wdHIgdGFyZ2V0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUpOwoKICB2aXJ0dWFsIENPUkJBX0ludGVyZmFjZURlZl9wdHIgX2dl dF9pbnRlcmZhY2UgKAogICAgICBjb25zdCBDT1JCQTo6T2JqZWN0X3B0ciB0YXJnZXQsCiAgICAg IENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAp OwoKCgp9OwoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvcG9zdC5oIiAxCiMgNjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvVGhydVBPQV9PYmplY3RfUHJveHlfSW1wbC5oIiAy CiMgMzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz dmNzL29yYnN2Y3MvVGltZUJhc2VTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0RpcmVjdF9PYmplY3RfUHJv eHlfSW1wbC5oIiAxCiMgMjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvRGlyZWN0X09iamVjdF9Qcm94eV9JbXBsLmgiCiMg MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0 YWJsZVNlcnZlci9wb3J0YWJsZXNlcnZlcl9leHBvcnQuaCIgMQojIDI0ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0RpcmVj dF9PYmplY3RfUHJveHlfSW1wbC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9EaXJlY3RfT2JqZWN0 X1Byb3h5X0ltcGwuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL3Rhby9PYmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMzAgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvRGly ZWN0X09iamVjdF9Qcm94eV9JbXBsLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9wb3J0YWJsZXNlcnZlcl9l eHBvcnQuaCIgMQojIDMyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0RpcmVjdF9PYmplY3RfUHJveHlfSW1wbC5oIiAyCgoK CgoKY2xhc3MgVEFPX0RpcmVjdF9PYmplY3RfUHJveHlfSW1wbCA6CiAgcHVibGljIHZpcnR1YWwg VEFPX09iamVjdF9Qcm94eV9JbXBsCnsKCgoKCgoKcHVibGljOgoKICBUQU9fRGlyZWN0X09iamVj dF9Qcm94eV9JbXBsICh2b2lkKTsKCiAgdmlydHVhbCB+VEFPX0RpcmVjdF9PYmplY3RfUHJveHlf SW1wbCAodm9pZCk7CgogIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gX2lzX2EgKGNvbnN0IENPUkJB OjpPYmplY3RfcHRyIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBDT1JCQTo6Q2hhciAqbG9naWNhbF90eXBlX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl KTsKCgoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQgKGNvbnN0IENPUkJB OjpPYmplY3RfcHRyIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsK CiAgdmlydHVhbCBDT1JCQV9JbnRlcmZhY2VEZWZfcHRyIF9nZXRfaW50ZXJmYWNlICgKICAgICAg Y29uc3QgQ09SQkE6Ok9iamVjdF9wdHIgdGFyZ2V0LAogICAgICBDT1JCQV9FbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgKTsKCgoKfTsKCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDcxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl U2VydmVyL0RpcmVjdF9PYmplY3RfUHJveHlfSW1wbC5oIiAyCiMgMzkgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VT LmgiIDIKIyA1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L29yYnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlU19ULmgiIDEK IyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9UaW1lQmFzZVNfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlU19ULmgiIDIK IyAzOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9UaW1lQmFzZVNfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VTX1QuaSIgMQojIDM5 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL1RpbWVCYXNlU19ULmgiIDIKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVNfVC5jcHAiIDEK IyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9UaW1lQmFzZVNfVC5jcHAiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVNfVC5oIiAxCiMg MjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNz L29yYnN2Y3MvVGltZUJhc2VTX1QuY3BwIiAyCiMgNDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VTX1QuaCIgMgoj IDU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zj cy9vcmJzdmNzL1RpbWVCYXNlU19ULmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlU19ULmgiIDIK IyA1MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9UaW1lQmFzZVMuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVMuaSIgMQojIDU0 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL1RpbWVCYXNlUy5oIiAyCiMgNjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VTLmgiCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDY1ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJz dmNzL1RpbWVCYXNlUy5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVMuaCIgMgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2 Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFTLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50 RGF0YVMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvcHJlLmgiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVMuaCIgMgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2 Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFDLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50 RGF0YUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h Y2UvcHJlLmgiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YUMuaCIgMgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIg MQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Ji c3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnREYXRhQy5oIiAyCgoKCgoKIyAxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0V2 ZW50L2V2ZW50X2V4cG9ydC5oIiAxCiMgMTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQvZXZlbnRfZXhwb3J0LmgiCiMg MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1h bGwuaCIgMQojIDExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vb3Jic3Zjcy9vcmJzdmNzL0V2ZW50L2V2ZW50X2V4cG9ydC5oIiAyCiMgMzMgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl Y0RlZmF1bHRFdmVudERhdGFDLmgiIDIKIyA2MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YUMu aCIKY2xhc3MgRXZlbnRQYXlsb2FkOwpjbGFzcyBFdmVudFBheWxvYWRfdmFyOwoKCgoKCmNsYXNz IEV2ZW50UGF5bG9hZCA6IHB1YmxpYwoKVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0 ZXQ+CgoKCnsKcHVibGljOgogIEV2ZW50UGF5bG9hZCAodm9pZCk7CiAgRXZlbnRQYXlsb2FkIChD T1JCQTo6VUxvbmcgbWF4KTsKICBFdmVudFBheWxvYWQgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4 LAogICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICBDT1JCQTo6T2N0ZXQgKmJ1ZmZlciwK ICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICk7CiAgRXZlbnRQYXlsb2FkIChj b25zdCBFdmVudFBheWxvYWQgJik7CiAgfkV2ZW50UGF5bG9hZCAodm9pZCk7CiAgc3RhdGljIHZv aWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgdHlwZWRlZiBFdmVudFBheWxvYWRf dmFyIF92YXJfdHlwZTsKCgoKCiAgRXZlbnRQYXlsb2FkICgKICAgICAgQ09SQkE6OlVMb25nIGxl bmd0aCwKICAgICAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sqIG1iCiAgICApCiAgICA6IFRBT19V bmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PiAobGVuZ3RoLCBtYikge30KCgp9OwojIDEx MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mv b3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YUMuaCIKY2xhc3MgRXZlbnRQYXlsb2FkX3Zhcgp7 CnB1YmxpYzoKICBFdmVudFBheWxvYWRfdmFyICh2b2lkKTsKICBFdmVudFBheWxvYWRfdmFyIChF dmVudFBheWxvYWQgKik7CiAgRXZlbnRQYXlsb2FkX3ZhciAoY29uc3QgRXZlbnRQYXlsb2FkX3Zh ciAmKTsKCiAgRXZlbnRQYXlsb2FkX3ZhciAoY29uc3QgRXZlbnRQYXlsb2FkICYpOwogIH5FdmVu dFBheWxvYWRfdmFyICh2b2lkKTsKCiAgRXZlbnRQYXlsb2FkX3ZhciAmb3BlcmF0b3I9IChFdmVu dFBheWxvYWQgKik7CiAgRXZlbnRQYXlsb2FkX3ZhciAmb3BlcmF0b3I9IChjb25zdCBFdmVudFBh eWxvYWRfdmFyICYpOwoKICBFdmVudFBheWxvYWRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEV2ZW50 UGF5bG9hZCAmKTsKICBFdmVudFBheWxvYWQgKm9wZXJhdG9yLT4gKHZvaWQpOwogIGNvbnN0IEV2 ZW50UGF5bG9hZCAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogIG9wZXJhdG9yIGNvbnN0IEV2 ZW50UGF5bG9hZCAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgRXZlbnRQYXlsb2FkICYoKTsKICBvcGVy YXRvciBFdmVudFBheWxvYWQgJigpIGNvbnN0OwoKICBDT1JCQTo6T2N0ZXQgJiBvcGVyYXRvcltd IChDT1JCQTo6VUxvbmcgaW5kZXgpOwogIGNvbnN0IENPUkJBOjpPY3RldCAmIG9wZXJhdG9yW10g KENPUkJBOjpVTG9uZyBpbmRleCkgY29uc3Q7CgoKICBjb25zdCBFdmVudFBheWxvYWQgJmluICh2 b2lkKSBjb25zdDsKICBFdmVudFBheWxvYWQgJmlub3V0ICh2b2lkKTsKICBFdmVudFBheWxvYWQg KiZvdXQgKHZvaWQpOwogIEV2ZW50UGF5bG9hZCAqX3JldG4gKHZvaWQpOwogIEV2ZW50UGF5bG9h ZCAqcHRyICh2b2lkKSBjb25zdDsKCnByaXZhdGU6CiAgRXZlbnRQYXlsb2FkICpwdHJfOwp9Owoj IDE1NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YUMuaCIKY2xhc3MgRXZlbnRQYXlsb2FkX291 dAp7CnB1YmxpYzoKICBFdmVudFBheWxvYWRfb3V0IChFdmVudFBheWxvYWQgKiYpOwogIEV2ZW50 UGF5bG9hZF9vdXQgKEV2ZW50UGF5bG9hZF92YXIgJik7CiAgRXZlbnRQYXlsb2FkX291dCAoY29u c3QgRXZlbnRQYXlsb2FkX291dCAmKTsKICBFdmVudFBheWxvYWRfb3V0ICZvcGVyYXRvcj0gKGNv bnN0IEV2ZW50UGF5bG9hZF9vdXQgJik7CiAgRXZlbnRQYXlsb2FkX291dCAmb3BlcmF0b3I9IChF dmVudFBheWxvYWQgKik7CiAgb3BlcmF0b3IgRXZlbnRQYXlsb2FkIComKCk7CiAgRXZlbnRQYXls b2FkIComcHRyICh2b2lkKTsKICBFdmVudFBheWxvYWQgKm9wZXJhdG9yLT4gKHZvaWQpOwogIENP UkJBOjpPY3RldCAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7Cgpwcml2YXRlOgog IEV2ZW50UGF5bG9hZCAqJnB0cl87CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBFdmVudFBheWxv YWRfdmFyICYpOwp9OwoKCgoKZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0V2ZW50UGF5 bG9hZDsKCnN0cnVjdCBSdGVjRXZlbnREYXRhOwpjbGFzcyBSdGVjRXZlbnREYXRhX3ZhcjsKCnN0 cnVjdCBSdGVjRXZlbnREYXRhCnsKCgogIHR5cGVkZWYgUnRlY0V2ZW50RGF0YV92YXIgX3Zhcl90 eXBlOwoKCiAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICBDT1JC QTo6TG9uZyBwYWQxOwogIEV2ZW50UGF5bG9hZCBwYXlsb2FkOwogIENPUkJBOjpBbnkgYW55X3Zh bHVlOwoKfTsKCmNsYXNzIFJ0ZWNFdmVudERhdGFfdmFyCnsKcHVibGljOgogIFJ0ZWNFdmVudERh dGFfdmFyICh2b2lkKTsKICBSdGVjRXZlbnREYXRhX3ZhciAoUnRlY0V2ZW50RGF0YSAqKTsKICBS dGVjRXZlbnREYXRhX3ZhciAoY29uc3QgUnRlY0V2ZW50RGF0YV92YXIgJik7CiAgflJ0ZWNFdmVu dERhdGFfdmFyICh2b2lkKTsKCiAgUnRlY0V2ZW50RGF0YV92YXIgJm9wZXJhdG9yPSAoUnRlY0V2 ZW50RGF0YSAqKTsKICBSdGVjRXZlbnREYXRhX3ZhciAmb3BlcmF0b3I9IChjb25zdCBSdGVjRXZl bnREYXRhX3ZhciAmKTsKICBSdGVjRXZlbnREYXRhICpvcGVyYXRvci0+ICh2b2lkKTsKICBjb25z dCBSdGVjRXZlbnREYXRhICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgb3BlcmF0b3IgY29u c3QgUnRlY0V2ZW50RGF0YSAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgUnRlY0V2ZW50RGF0YSAmKCk7 CiAgb3BlcmF0b3IgUnRlY0V2ZW50RGF0YSAmKCkgY29uc3Q7CgogIG9wZXJhdG9yIFJ0ZWNFdmVu dERhdGEgKiYoKTsKCgogIGNvbnN0IFJ0ZWNFdmVudERhdGEgJmluICh2b2lkKSBjb25zdDsKICBS dGVjRXZlbnREYXRhICZpbm91dCAodm9pZCk7CiAgUnRlY0V2ZW50RGF0YSAqJm91dCAodm9pZCk7 CiAgUnRlY0V2ZW50RGF0YSAqX3JldG4gKHZvaWQpOwogIFJ0ZWNFdmVudERhdGEgKnB0ciAodm9p ZCkgY29uc3Q7Cgpwcml2YXRlOgogIFJ0ZWNFdmVudERhdGEgKnB0cl87Cn07CgpjbGFzcyBSdGVj RXZlbnREYXRhX291dAp7CnB1YmxpYzoKICBSdGVjRXZlbnREYXRhX291dCAoUnRlY0V2ZW50RGF0 YSAqJik7CiAgUnRlY0V2ZW50RGF0YV9vdXQgKFJ0ZWNFdmVudERhdGFfdmFyICYpOwogIFJ0ZWNF dmVudERhdGFfb3V0IChjb25zdCBSdGVjRXZlbnREYXRhX291dCAmKTsKICBSdGVjRXZlbnREYXRh X291dCAmb3BlcmF0b3I9IChjb25zdCBSdGVjRXZlbnREYXRhX291dCAmKTsKICBSdGVjRXZlbnRE YXRhX291dCAmb3BlcmF0b3I9IChSdGVjRXZlbnREYXRhICopOwogIG9wZXJhdG9yIFJ0ZWNFdmVu dERhdGEgKiYoKTsKICBSdGVjRXZlbnREYXRhIComcHRyICh2b2lkKTsKICBSdGVjRXZlbnREYXRh ICpvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAgUnRlY0V2ZW50RGF0YSAqJnB0cl87Cgog IHZvaWQgb3BlcmF0b3I9IChjb25zdCBSdGVjRXZlbnREYXRhX3ZhciAmKTsKfTsKCmV4dGVybiBD T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19SdGVjRXZlbnREYXRhOwoKICAgICAgICAgICAgICAgICAg IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgRXZlbnRQYXlsb2FkICYpOwog ICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBFdmVudFBh eWxvYWQqKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChj b25zdCBDT1JCQTo6QW55ICYsIEV2ZW50UGF5bG9hZCAqJik7CiAgICAgICAgICAgICAgICAgICBD T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBFdmVu dFBheWxvYWQgKiYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6 OkFueSAmLCBjb25zdCBSdGVjRXZlbnREYXRhICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBv cGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnREYXRhKik7CiAgICAgICAgICAgICAg ICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVj RXZlbnREYXRhIComKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y Pj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudERhdGEgKiYpOwojIDI4MCAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Ji c3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnRE YXRhQy5pIiAxCiMgMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFDLmkiCmlubGluZQpFdmVu dFBheWxvYWRfdmFyOjpFdmVudFBheWxvYWRfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30KCmlu bGluZQpFdmVudFBheWxvYWRfdmFyOjpFdmVudFBheWxvYWRfdmFyIChFdmVudFBheWxvYWQgKnAp CiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCkV2ZW50UGF5bG9hZF92YXI6OkV2ZW50UGF5bG9hZF92 YXIgKGNvbnN0IDo6RXZlbnRQYXlsb2FkX3ZhciAmcCkKewogIGlmIChwLnB0cl8pCiAgICBkbyB7 IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpFdmVudFBheWxvYWQgKCpwLnB0cl8pOyB9IGNhdGNo IChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsg fSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKCmlubGluZQpFdmVu dFBheWxvYWRfdmFyOjpFdmVudFBheWxvYWRfdmFyIChjb25zdCA6OkV2ZW50UGF5bG9hZCAmcCkK ewogIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkV2ZW50UGF5bG9hZCAocCk7IH0gY2F0 Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJu OyB9IH0gd2hpbGUgKDApOwp9CgppbmxpbmUKRXZlbnRQYXlsb2FkX3Zhcjo6fkV2ZW50UGF5bG9h ZF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIEV2ZW50UGF5bG9h ZF92YXIgJgpFdmVudFBheWxvYWRfdmFyOjpvcGVyYXRvcj0gKEV2ZW50UGF5bG9hZCAqcCkKewog IGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoK aW5saW5lIDo6RXZlbnRQYXlsb2FkX3ZhciAmCkV2ZW50UGF5bG9hZF92YXI6Om9wZXJhdG9yPSAo Y29uc3QgOjpFdmVudFBheWxvYWRfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAg ICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRy XzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg IHsKICAgICAgICAgIEV2ZW50UGF5bG9hZCAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IEV2 ZW50UGF5bG9hZCAoKnAucHRyXyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgRXZlbnRQYXlsb2FkICp0bXAgPSBkZWVwX2NvcHk7CiAg ICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5w dHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSA6OkV2ZW50UGF5bG9h ZF92YXIgJgpFdmVudFBheWxvYWRfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6RXZlbnRQYXlsb2Fk ICZwKQp7CiAgaWYgKHRoaXMtPnB0cl8gIT0gJnApCiAgewogICAgZGVsZXRlIHRoaXMtPnB0cl87 CiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpFdmVudFBheWxvYWQgKHApOyB9IGNh dGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVy biAqdGhpczsgfSB9IHdoaWxlICgwKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29u c3QgOjpFdmVudFBheWxvYWQgKgpFdmVudFBheWxvYWRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBj b25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkV2ZW50UGF5bG9hZCAqCkV2 ZW50UGF5bG9hZF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsK fQoKaW5saW5lCkV2ZW50UGF5bG9hZF92YXI6Om9wZXJhdG9yIGNvbnN0IDo6RXZlbnRQYXlsb2Fk ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKRXZlbnRQYXlsb2Fk X3Zhcjo6b3BlcmF0b3IgOjpFdmVudFBheWxvYWQgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87 Cn0KCmlubGluZQpFdmVudFBheWxvYWRfdmFyOjpvcGVyYXRvciA6OkV2ZW50UGF5bG9hZCAmKCkg Y29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBOjpPY3RldCAmCkV2 ZW50UGF5bG9hZF92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVy biB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25zdCBDT1JCQTo6 T2N0ZXQgJgpFdmVudFBheWxvYWRfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgp IGNvbnN0CnsKICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBDT1JCQTo6T2N0ZXQgJj4gKHRoaXMt PnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGluZSBjb25zdCA6OkV2ZW50UGF5bG9h ZCAmCkV2ZW50UGF5bG9hZF92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w dHJfOwp9CgppbmxpbmUgOjpFdmVudFBheWxvYWQgJgpFdmVudFBheWxvYWRfdmFyOjppbm91dCAo dm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OkV2ZW50UGF5bG9hZCAq JgpFdmVudFBheWxvYWRfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0 aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6RXZlbnRQYXls b2FkICoKRXZlbnRQYXlsb2FkX3Zhcjo6X3JldG4gKHZvaWQpCnsKICA6OkV2ZW50UGF5bG9hZCAq dG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdG1wOwp9Cgppbmxp bmUgOjpFdmVudFBheWxvYWQgKgpFdmVudFBheWxvYWRfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsK ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpFdmVudFBheWxvYWRfb3V0OjpFdmVu dFBheWxvYWRfb3V0IChFdmVudFBheWxvYWQgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0 cl8gPSAwOwp9CgppbmxpbmUKRXZlbnRQYXlsb2FkX291dDo6RXZlbnRQYXlsb2FkX291dCAoRXZl bnRQYXlsb2FkX3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0 cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpFdmVudFBheWxvYWRfb3V0OjpFdmVudFBh eWxvYWRfb3V0IChjb25zdCA6OkV2ZW50UGF5bG9hZF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9j YXN0PEV2ZW50UGF5bG9hZF9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSA6OkV2ZW50UGF5bG9h ZF9vdXQgJgpFdmVudFBheWxvYWRfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6RXZlbnRQYXlsb2Fk X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PEV2ZW50UGF5bG9hZF9vdXQmPiAo cCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OkV2ZW50UGF5bG9hZF9vdXQgJgpF dmVudFBheWxvYWRfb3V0OjpvcGVyYXRvcj0gKEV2ZW50UGF5bG9hZCAqcCkKewogIHRoaXMtPnB0 cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkV2ZW50UGF5bG9hZF9vdXQ6Om9wZXJh dG9yIDo6RXZlbnRQYXlsb2FkIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg OjpFdmVudFBheWxvYWQgKiYKRXZlbnRQYXlsb2FkX291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJu IHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkV2ZW50UGF5bG9hZCAqCkV2ZW50UGF5bG9hZF9vdXQ6 Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJB OjpPY3RldCAmCkV2ZW50UGF5bG9hZF9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRl eCkKewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KIyAyNTYgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2 Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFDLmkiCmlubGluZQpSdGVjRXZlbnREYXRhX3Zhcjo6UnRl Y0V2ZW50RGF0YV92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lClJ0ZWNFdmVudERh dGFfdmFyOjpSdGVjRXZlbnREYXRhX3ZhciAoUnRlY0V2ZW50RGF0YSAqcCkKICA6IHB0cl8gKHAp Cnt9CgppbmxpbmUKUnRlY0V2ZW50RGF0YV92YXI6OlJ0ZWNFdmVudERhdGFfdmFyIChjb25zdCA6 OlJ0ZWNFdmVudERhdGFfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhp cy0+cHRyXyA9IG5ldyA6OlJ0ZWNFdmVudERhdGEgKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJh ZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxl ICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudERhdGFf dmFyOjp+UnRlY0V2ZW50RGF0YV92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoK aW5saW5lIFJ0ZWNFdmVudERhdGFfdmFyICYKUnRlY0V2ZW50RGF0YV92YXI6Om9wZXJhdG9yPSAo UnRlY0V2ZW50RGF0YSAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBw OwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6UnRlY0V2ZW50RGF0YV92YXIgJgpSdGVjRXZl bnREYXRhX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNFdmVudERhdGFfdmFyICZwKQp7CiAg aWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAg ICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIFJ0ZWNFdmVudERhdGEgKmRlZXBf Y29weSA9CiAgICAgICAgICAgIG5ldyBSdGVjRXZlbnREYXRhICgqcC5wdHJfKTsKCiAgICAgICAg ICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBSdGVjRXZl bnREYXRhICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+ cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0 ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhp czsKfQoKaW5saW5lIGNvbnN0IDo6UnRlY0V2ZW50RGF0YSAqClJ0ZWNFdmVudERhdGFfdmFyOjpv cGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6 OlJ0ZWNFdmVudERhdGEgKgpSdGVjRXZlbnREYXRhX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewog IHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50RGF0YV92YXI6Om9wZXJhdG9y IGNvbnN0IDo6UnRlY0V2ZW50RGF0YSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsK fQoKaW5saW5lClJ0ZWNFdmVudERhdGFfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudERhdGEgJigp CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnREYXRhX3Zhcjo6b3Bl cmF0b3IgOjpSdGVjRXZlbnREYXRhICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9 CgoKaW5saW5lClJ0ZWNFdmVudERhdGFfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudERhdGEgKiYo KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBjb25zdCA6OlJ0ZWNFdmVudERhdGEg JgpSdGVjRXZlbnREYXRhX3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0 cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudERhdGEgJgpSdGVjRXZlbnREYXRhX3Zhcjo6aW5vdXQg KHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgOjpSdGVjRXZlbnREYXRh IComClJ0ZWNFdmVudERhdGFfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsK ICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2 ZW50RGF0YSAqClJ0ZWNFdmVudERhdGFfdmFyOjpfcmV0biAodm9pZCkKewogIDo6UnRlY0V2ZW50 RGF0YSAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdG1wOwp9 CgppbmxpbmUgOjpSdGVjRXZlbnREYXRhICoKUnRlY0V2ZW50RGF0YV92YXI6OnB0ciAodm9pZCkg Y29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lClJ0ZWNFdmVudERhdGFf b3V0OjpSdGVjRXZlbnREYXRhX291dCAoOjpSdGVjRXZlbnREYXRhIComcCkKICA6IHB0cl8gKHAp CnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudERhdGFfb3V0OjpSdGVjRXZl bnREYXRhX291dCAoUnRlY0V2ZW50RGF0YV92YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewog IGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50 RGF0YV9vdXQ6OlJ0ZWNFdmVudERhdGFfb3V0IChjb25zdCA6OlJ0ZWNFdmVudERhdGFfb3V0ICZw KQogIDogcHRyXyAoY29uc3RfY2FzdDxSdGVjRXZlbnREYXRhX291dCY+IChwKS5wdHJfKQp7fQoK aW5saW5lIFJ0ZWNFdmVudERhdGFfb3V0ICYKUnRlY0V2ZW50RGF0YV9vdXQ6Om9wZXJhdG9yPSAo Y29uc3QgOjpSdGVjRXZlbnREYXRhX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0 PFJ0ZWNFdmVudERhdGFfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUg UnRlY0V2ZW50RGF0YV9vdXQgJgpSdGVjRXZlbnREYXRhX291dDo6b3BlcmF0b3I9IChSdGVjRXZl bnREYXRhICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUK UnRlY0V2ZW50RGF0YV9vdXQ6Om9wZXJhdG9yIDo6UnRlY0V2ZW50RGF0YSAqJigpCnsKICByZXR1 cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50RGF0YSAqJgpSdGVjRXZlbnREYXRh X291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNF dmVudERhdGEgKgpSdGVjRXZlbnREYXRhX291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVy biB0aGlzLT5wdHJfOwp9CgoKCgoKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9f T3V0cHV0Q0RSICYsCiAgICBjb25zdCBFdmVudFBheWxvYWQgJgogICk7CkNPUkJBOjpCb29sZWFu IG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAgICBFdmVudFBheWxvYWQgJgogICk7 CgoKCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJt LCBjb25zdCBSdGVjRXZlbnREYXRhICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJt IDw8IF90YW9fYWdncmVnYXRlLnBhZDEpICYmCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5w YXlsb2FkKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuYW55X3ZhbHVlKQogICkKICAg IHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu IG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwgUnRlY0V2ZW50RGF0YSAmX3Rhb19hZ2dy ZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5wYWQxKSAmJgogICAg KHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUucGF5bG9hZCkgJiYKICAgIChzdHJtID4+IF90YW9fYWdn cmVnYXRlLmFueV92YWx1ZSkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsK Cn0KIyAyODEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9v cmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFDLmgiIDIKIyAyOTEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl Y0RlZmF1bHRFdmVudERhdGFDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDI5MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0 YUMuaCIgMgojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnREYXRhUy5oIiAyCgoKCgoKCiMgMSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJs ZVNlcnZlci9Qb3J0YWJsZVNlcnZlci5oIiAxCiMgMzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERh dGFTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL1BvcnRhYmxlU2VydmVyL1NlcnZhbnRfQmFzZS5oIiAxCiMgMzUgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Rl ZmF1bHRFdmVudERhdGFTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0NvbGxvY2F0ZWRfT2JqZWN0LmgiIDEK IyAzNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvVGhydVBP QV9PYmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFT LmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v dGFvL1BvcnRhYmxlU2VydmVyL0RpcmVjdF9PYmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMzggIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2 Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFTLmgiIDIKIyA0OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50 RGF0YVMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnREYXRhU19ULmgiIDEKIyAyNSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj cy9SdGVjRGVmYXVsdEV2ZW50RGF0YVNfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZl bnREYXRhU19ULmgiIDIKIyAzOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVNfVC5oIgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y YnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFTX1QuaSIgMQojIDM5ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0 RXZlbnREYXRhU19ULmgiIDIKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVNfVC5j cHAiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVNfVC5jcHAiCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9S dGVjRGVmYXVsdEV2ZW50RGF0YVNfVC5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERh dGFTX1QuY3BwIiAyCiMgNDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFTX1QuaCIgMgojIDU1 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnREYXRhU19ULmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDU2ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZh dWx0RXZlbnREYXRhU19ULmgiIDIKIyA1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVMuaCIg MgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y YnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVMuaSIgMQojIDUzICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNE ZWZhdWx0RXZlbnREYXRhUy5oIiAyCiMgNjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFTLmgi CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3Qu aCIgMQojIDY0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v b3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnREYXRhUy5oIiAyCiMgMjggIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl Y0V2ZW50Q29tbVMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaCIgMQojIDI1ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz L1J0ZWNFdmVudENvbW1DLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaCIgMgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEu aCIgMQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v b3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQv ZXZlbnRfZXhwb3J0LmgiIDEKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIiAyCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj cy9UaW1lQmFzZUMuaCIgMQojIDM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiIDIKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz L1J0ZWNEZWZhdWx0RXZlbnREYXRhQy5oIiAxCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaCIg MgojIDU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Ji c3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiCm5hbWVzcGFjZSBSdGVjRXZlbnRDb21tCnsK ICB0eXBlZGVmIFJ0ZWNFdmVudERhdGEgRXZlbnREYXRhOwogIHR5cGVkZWYgUnRlY0V2ZW50RGF0 YV92YXIgRXZlbnREYXRhX3ZhcjsKICB0eXBlZGVmIFJ0ZWNFdmVudERhdGFfb3V0IEV2ZW50RGF0 YV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0V2ZW50RGF0YTsKCiAgdHlw ZWRlZiBUaW1lQmFzZTo6VGltZVQgVGltZTsKICB0eXBlZGVmIFRpbWVCYXNlOjpUaW1lVF9vdXQg VGltZV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1RpbWU7CgogIHR5cGVk ZWYgQ09SQkE6OkxvbmcgRXZlbnRTb3VyY2VJRDsKICB0eXBlZGVmIENPUkJBOjpMb25nX291dCBF dmVudFNvdXJjZUlEX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRXZlbnRT b3VyY2VJRDsKCiAgdHlwZWRlZiBDT1JCQTo6TG9uZyBFdmVudFR5cGU7CiAgdHlwZWRlZiBDT1JC QTo6TG9uZ19vdXQgRXZlbnRUeXBlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBf dGNfRXZlbnRUeXBlOwoKICBzdHJ1Y3QgRXZlbnRIZWFkZXI7CiAgY2xhc3MgRXZlbnRIZWFkZXJf dmFyOwoKICBzdHJ1Y3QgRXZlbnRIZWFkZXIKICB7CgoKICAgIHR5cGVkZWYgRXZlbnRIZWFkZXJf dmFyIF92YXJfdHlwZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9p ZCopOwoKICAgIFJ0ZWNFdmVudENvbW06OkV2ZW50VHlwZSB0eXBlOwogICAgUnRlY0V2ZW50Q29t bTo6RXZlbnRTb3VyY2VJRCBzb3VyY2U7CiAgICBDT1JCQTo6TG9uZyB0dGw7CiAgICBSdGVjRXZl bnRDb21tOjpUaW1lIGNyZWF0aW9uX3RpbWU7CiAgICBSdGVjRXZlbnRDb21tOjpUaW1lIGVjX3Jl Y3ZfdGltZTsKICAgIFJ0ZWNFdmVudENvbW06OlRpbWUgZWNfc2VuZF90aW1lOwoKICB9OwoKICBj bGFzcyBFdmVudEhlYWRlcl92YXIKICB7CiAgcHVibGljOgogICAgRXZlbnRIZWFkZXJfdmFyICh2 b2lkKTsKICAgIEV2ZW50SGVhZGVyX3ZhciAoRXZlbnRIZWFkZXIgKik7CiAgICBFdmVudEhlYWRl cl92YXIgKGNvbnN0IEV2ZW50SGVhZGVyX3ZhciAmKTsKCiAgICBFdmVudEhlYWRlcl92YXIgKGNv bnN0IEV2ZW50SGVhZGVyICYpOwogICAgfkV2ZW50SGVhZGVyX3ZhciAodm9pZCk7CgogICAgRXZl bnRIZWFkZXJfdmFyICZvcGVyYXRvcj0gKEV2ZW50SGVhZGVyICopOwogICAgRXZlbnRIZWFkZXJf dmFyICZvcGVyYXRvcj0gKGNvbnN0IEV2ZW50SGVhZGVyX3ZhciAmKTsKCiAgICBFdmVudEhlYWRl cl92YXIgJm9wZXJhdG9yPSAoY29uc3QgRXZlbnRIZWFkZXIgJik7CiAgICBFdmVudEhlYWRlciAq b3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBFdmVudEhlYWRlciAqb3BlcmF0b3ItPiAodm9p ZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgRXZlbnRIZWFkZXIgJigpIGNvbnN0OwogICAg b3BlcmF0b3IgRXZlbnRIZWFkZXIgJigpOwogICAgb3BlcmF0b3IgRXZlbnRIZWFkZXIgJigpIGNv bnN0OwoKCiAgICBjb25zdCBFdmVudEhlYWRlciAmaW4gKHZvaWQpIGNvbnN0OwogICAgRXZlbnRI ZWFkZXIgJmlub3V0ICh2b2lkKTsKICAgIEV2ZW50SGVhZGVyICZvdXQgKHZvaWQpOwogICAgRXZl bnRIZWFkZXIgX3JldG4gKHZvaWQpOwogICAgRXZlbnRIZWFkZXIgKnB0ciAodm9pZCkgY29uc3Q7 CgogIHByaXZhdGU6CiAgICBFdmVudEhlYWRlciAqcHRyXzsKICB9OwoKICB0eXBlZGVmIEV2ZW50 SGVhZGVyICZFdmVudEhlYWRlcl9vdXQ7CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90 Y19FdmVudEhlYWRlcjsKCiAgc3RydWN0IEV2ZW50OwogIGNsYXNzIEV2ZW50X3ZhcjsKCiAgc3Ry dWN0IEV2ZW50CiAgewoKCiAgICB0eXBlZGVmIEV2ZW50X3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0 YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICBSdGVjRXZlbnRDb21t OjpFdmVudEhlYWRlciBoZWFkZXI7CiAgICBSdGVjRXZlbnRDb21tOjpFdmVudERhdGEgZGF0YTsK CiAgfTsKCiAgY2xhc3MgRXZlbnRfdmFyCiAgewogIHB1YmxpYzoKICAgIEV2ZW50X3ZhciAodm9p ZCk7CiAgICBFdmVudF92YXIgKEV2ZW50ICopOwogICAgRXZlbnRfdmFyIChjb25zdCBFdmVudF92 YXIgJik7CiAgICB+RXZlbnRfdmFyICh2b2lkKTsKCiAgICBFdmVudF92YXIgJm9wZXJhdG9yPSAo RXZlbnQgKik7CiAgICBFdmVudF92YXIgJm9wZXJhdG9yPSAoY29uc3QgRXZlbnRfdmFyICYpOwog ICAgRXZlbnQgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgRXZlbnQgKm9wZXJhdG9yLT4g KHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IEV2ZW50ICYoKSBjb25zdDsKICAgIG9w ZXJhdG9yIEV2ZW50ICYoKTsKICAgIG9wZXJhdG9yIEV2ZW50ICYoKSBjb25zdDsKCiAgICBvcGVy YXRvciBFdmVudCAqJigpOwoKCiAgICBjb25zdCBFdmVudCAmaW4gKHZvaWQpIGNvbnN0OwogICAg RXZlbnQgJmlub3V0ICh2b2lkKTsKICAgIEV2ZW50IComb3V0ICh2b2lkKTsKICAgIEV2ZW50ICpf cmV0biAodm9pZCk7CiAgICBFdmVudCAqcHRyICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAg IEV2ZW50ICpwdHJfOwogIH07CgogIGNsYXNzIEV2ZW50X291dAogIHsKICBwdWJsaWM6CiAgICBF dmVudF9vdXQgKEV2ZW50IComKTsKICAgIEV2ZW50X291dCAoRXZlbnRfdmFyICYpOwogICAgRXZl bnRfb3V0IChjb25zdCBFdmVudF9vdXQgJik7CiAgICBFdmVudF9vdXQgJm9wZXJhdG9yPSAoY29u c3QgRXZlbnRfb3V0ICYpOwogICAgRXZlbnRfb3V0ICZvcGVyYXRvcj0gKEV2ZW50ICopOwogICAg b3BlcmF0b3IgRXZlbnQgKiYoKTsKICAgIEV2ZW50IComcHRyICh2b2lkKTsKICAgIEV2ZW50ICpv cGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIEV2ZW50IComcHRyXzsKCiAgICB2b2lk IG9wZXJhdG9yPSAoY29uc3QgRXZlbnRfdmFyICYpOwogIH07CgogIGV4dGVybiBDT1JCQTo6VHlw ZUNvZGVfcHRyIF90Y19FdmVudDsKCgoKCgoKCiAgY2xhc3MgX1RBT19VbmJvdW5kZWRfU2VxdWVu Y2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldAogICAgOiBwdWJsaWMgVEFPX1VuYm91bmRlZF9CYXNl X1NlcXVlbmNlCiAgewogIHB1YmxpYzoKCiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVj RXZlbnRDb21tX0V2ZW50U2V0ICh2b2lkKTsKICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0 ZWNFdmVudENvbW1fRXZlbnRTZXQgKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsKICAgIF9UQU9fVW5i b3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRTZXQgKAogICAgICAgIENPUkJBOjpV TG9uZyBtYXhpbXVtLAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgRXZlbnQg KmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICAgKTsKICAgIF9U QU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRTZXQgKAogICAgICAgIGNv bnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRTZXQgJnJocwog ICAgICApOwogICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNl dCAmb3BlcmF0b3I9ICgKICAgICAgICBjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVj RXZlbnRDb21tX0V2ZW50U2V0ICZyaHMKICAgICAgKTsKICAgIHZpcnR1YWwgfl9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRTZXQgKHZvaWQpOwoKCiAgICBFdmVudCAm b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpOwogICAgY29uc3QgRXZlbnQgJm9wZXJhdG9yW10g KENPUkJBOjpVTG9uZyBpKSBjb25zdDsKCgogICAgc3RhdGljIEV2ZW50ICphbGxvY2J1ZiAoQ09S QkE6OlVMb25nIHNpemUpOwogICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoRXZlbnQgKmJ1ZmZlcik7 CgoKICAgIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3Ro KTsKICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwogICAgRXZlbnQg KmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFuIG9ycGhhbiA9IDApOwogICAgY29uc3QgRXZlbnQg KmdldF9idWZmZXIgKHZvaWQpIGNvbnN0OwogICAgdm9pZCByZXBsYWNlICgKICAgICAgICBDT1JC QTo6VUxvbmcgbWF4LAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgRXZlbnQg KmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZQogICAgICApOwogIH07CiMgMjU4 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiCiAgY2xhc3MgRXZlbnRTZXQ7CiAgY2xhc3MgRXZlbnRT ZXRfdmFyOwoKCgoKCiAgY2xhc3MgRXZlbnRTZXQgOiBwdWJsaWMKCiAgX1RBT19VbmJvdW5kZWRf U2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldAoKCgogIHsKICBwdWJsaWM6CiAgICBFdmVu dFNldCAodm9pZCk7CiAgICBFdmVudFNldCAoQ09SQkE6OlVMb25nIG1heCk7CiAgICBFdmVudFNl dCAoCiAgICAgICAgQ09SQkE6OlVMb25nIG1heCwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro LAogICAgICAgIEV2ZW50ICpidWZmZXIsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9 IDAKICAgICAgKTsKICAgIEV2ZW50U2V0IChjb25zdCBFdmVudFNldCAmKTsKICAgIH5FdmVudFNl dCAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgoK ICAgIHR5cGVkZWYgRXZlbnRTZXRfdmFyIF92YXJfdHlwZTsKCgoKICB9OwojIDMwMiAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9S dGVjRXZlbnRDb21tQy5oIgogIGNsYXNzIEV2ZW50U2V0X3ZhcgogIHsKICBwdWJsaWM6CiAgICBF dmVudFNldF92YXIgKHZvaWQpOwogICAgRXZlbnRTZXRfdmFyIChFdmVudFNldCAqKTsKICAgIEV2 ZW50U2V0X3ZhciAoY29uc3QgRXZlbnRTZXRfdmFyICYpOwogICAgfkV2ZW50U2V0X3ZhciAodm9p ZCk7CgogICAgRXZlbnRTZXRfdmFyICZvcGVyYXRvcj0gKEV2ZW50U2V0ICopOwogICAgRXZlbnRT ZXRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEV2ZW50U2V0X3ZhciAmKTsKICAgIEV2ZW50U2V0ICpv cGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IEV2ZW50U2V0ICpvcGVyYXRvci0+ICh2b2lkKSBj b25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBFdmVudFNldCAmKCkgY29uc3Q7CiAgICBvcGVyYXRv ciBFdmVudFNldCAmKCk7CiAgICBvcGVyYXRvciBFdmVudFNldCAmKCkgY29uc3Q7CiAgICBvcGVy YXRvciBFdmVudFNldCAqJigpOwoKICAgIEV2ZW50ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25n IGluZGV4KTsKICAgIGNvbnN0IEV2ZW50ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4 KSBjb25zdDsKCgogICAgY29uc3QgRXZlbnRTZXQgJmluICh2b2lkKSBjb25zdDsKICAgIEV2ZW50 U2V0ICZpbm91dCAodm9pZCk7CiAgICBFdmVudFNldCAqJm91dCAodm9pZCk7CiAgICBFdmVudFNl dCAqX3JldG4gKHZvaWQpOwogICAgRXZlbnRTZXQgKnB0ciAodm9pZCkgY29uc3Q7CgogIHByaXZh dGU6CiAgICBFdmVudFNldCAqcHRyXzsKICB9OwojIDM0MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5o IgogIGNsYXNzIEV2ZW50U2V0X291dAogIHsKICBwdWJsaWM6CiAgICBFdmVudFNldF9vdXQgKEV2 ZW50U2V0IComKTsKICAgIEV2ZW50U2V0X291dCAoRXZlbnRTZXRfdmFyICYpOwogICAgRXZlbnRT ZXRfb3V0IChjb25zdCBFdmVudFNldF9vdXQgJik7CiAgICBFdmVudFNldF9vdXQgJm9wZXJhdG9y PSAoY29uc3QgRXZlbnRTZXRfb3V0ICYpOwogICAgRXZlbnRTZXRfb3V0ICZvcGVyYXRvcj0gKEV2 ZW50U2V0ICopOwogICAgb3BlcmF0b3IgRXZlbnRTZXQgKiYoKTsKICAgIEV2ZW50U2V0IComcHRy ICh2b2lkKTsKICAgIEV2ZW50U2V0ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIEV2ZW50ICYgb3Bl cmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCiAgcHJpdmF0ZToKICAgIEV2ZW50U2V0ICom cHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgRXZlbnRTZXRfdmFyICYpOwogIH07CgoK CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19FdmVudFNldDsKCgoKCgogIGNsYXNz IFB1c2hDb25zdW1lcjsKICB0eXBlZGVmIFB1c2hDb25zdW1lciAqUHVzaENvbnN1bWVyX3B0cjsK CgoKCgoKCiAgY2xhc3MgUHVzaENvbnN1bWVyX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7 CiAgcHVibGljOgogICAgUHVzaENvbnN1bWVyX3ZhciAodm9pZCk7CiAgICBQdXNoQ29uc3VtZXJf dmFyIChQdXNoQ29uc3VtZXJfcHRyIHApIDogcHRyXyAocCkge30KICAgIFB1c2hDb25zdW1lcl92 YXIgKGNvbnN0IFB1c2hDb25zdW1lcl92YXIgJik7CiAgICB+UHVzaENvbnN1bWVyX3ZhciAodm9p ZCk7CgogICAgUHVzaENvbnN1bWVyX3ZhciAmb3BlcmF0b3I9IChQdXNoQ29uc3VtZXJfcHRyKTsK ICAgIFB1c2hDb25zdW1lcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgUHVzaENvbnN1bWVyX3ZhciAm KTsKICAgIFB1c2hDb25zdW1lcl9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3Bl cmF0b3IgY29uc3QgUHVzaENvbnN1bWVyX3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQdXNo Q29uc3VtZXJfcHRyICYoKTsKCiAgICBQdXNoQ29uc3VtZXJfcHRyIGluICh2b2lkKSBjb25zdDsK ICAgIFB1c2hDb25zdW1lcl9wdHIgJmlub3V0ICh2b2lkKTsKICAgIFB1c2hDb25zdW1lcl9wdHIg Jm91dCAodm9pZCk7CiAgICBQdXNoQ29uc3VtZXJfcHRyIF9yZXRuICh2b2lkKTsKICAgIFB1c2hD b25zdW1lcl9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBQdXNoQ29uc3VtZXJf cHRyIGR1cGxpY2F0ZSAoUHVzaENvbnN1bWVyX3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNl IChQdXNoQ29uc3VtZXJfcHRyKTsKICAgIHN0YXRpYyBQdXNoQ29uc3VtZXJfcHRyIG5pbCAodm9p ZCk7CiAgICBzdGF0aWMgUHVzaENvbnN1bWVyX3B0ciBuYXJyb3cgKAogICAgICAgIENPUkJBOjpP YmplY3QgKiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICApOwogICAgc3RhdGlj IENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBQdXNoQ29u c3VtZXJfcHRyIHB0cl87CgogICAgUHVzaENvbnN1bWVyX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFy ICZyaHMpOwogICAgUHVzaENvbnN1bWVyX3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92 YXIgJnJocyk7CiAgfTsKIyA0MjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaCIKICBjbGFzcyBQdXNo Q29uc3VtZXJfb3V0CiAgewogIHB1YmxpYzoKICAgIFB1c2hDb25zdW1lcl9vdXQgKFB1c2hDb25z dW1lcl9wdHIgJik7CiAgICBQdXNoQ29uc3VtZXJfb3V0IChQdXNoQ29uc3VtZXJfdmFyICYpOwog ICAgUHVzaENvbnN1bWVyX291dCAoY29uc3QgUHVzaENvbnN1bWVyX291dCAmKTsKICAgIFB1c2hD b25zdW1lcl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUHVzaENvbnN1bWVyX291dCAmKTsKICAgIFB1 c2hDb25zdW1lcl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUHVzaENvbnN1bWVyX3ZhciAmKTsKICAg IFB1c2hDb25zdW1lcl9vdXQgJm9wZXJhdG9yPSAoUHVzaENvbnN1bWVyX3B0cik7CiAgICBvcGVy YXRvciBQdXNoQ29uc3VtZXJfcHRyICYoKTsKICAgIFB1c2hDb25zdW1lcl9wdHIgJnB0ciAodm9p ZCk7CiAgICBQdXNoQ29uc3VtZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgog ICAgUHVzaENvbnN1bWVyX3B0ciAmcHRyXzsKICB9OwojIDQ0OSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21t Qy5oIgogIGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1Byb3h5X0ltcGw7CiAgY2xhc3MgX1RBT19Q dXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0ltcGw7CiAgY2xhc3MgX1RBT19QdXNoQ29uc3VtZXJf UHJveHlfQnJva2VyOwogIGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9Ccm9r ZXI7CgogIGNsYXNzIFB1c2hDb25zdW1lcgogICAgOiBwdWJsaWMgdmlydHVhbCBDT1JCQV9PYmpl Y3QKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUHVzaENvbnN1bWVyX3B0ciBfcHRyX3R5cGU7 CiAgICB0eXBlZGVmIFB1c2hDb25zdW1lcl92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFB1 c2hDb25zdW1lcl9wdHIgX2R1cGxpY2F0ZSAoUHVzaENvbnN1bWVyX3B0ciBvYmopOwoKICAgIHN0 YXRpYyBQdXNoQ29uc3VtZXJfcHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRy IG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsK CiAgICBzdGF0aWMgUHVzaENvbnN1bWVyX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAg Q09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKQogICAgICApOwoKICAgIHN0YXRpYyBQdXNoQ29uc3VtZXJfcHRyIF9uaWwgKHZvaWQp CiAgICAgIHsKICAgICAgICByZXR1cm4gKFB1c2hDb25zdW1lcl9wdHIpMDsKICAgICAgfQoKICAg IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICB2aXJ0dWFsIHZv aWQgcHVzaCAoCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgJiBkYXRhLAog ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRo cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgogICAgdmlydHVhbCB2b2lkIGRpc2Nv bm5lY3RfcHVzaF9jb25zdW1lciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoK CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6 Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK ICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0 aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5 X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIF9UQU9fUHVzaENvbnN1bWVyX1Byb3h5 X0Jyb2tlciAqdGhlX1RBT19QdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyXzsKCiAgcHJvdGVjdGVk OgogICAgUHVzaENvbnN1bWVyIChpbnQgY29sbG9jYXRlZCA9IDApOwoKCgogICAgdmlydHVhbCB2 b2lkIFJ0ZWNFdmVudENvbW1fUHVzaENvbnN1bWVyX3NldHVwX2NvbGxvY2F0aW9uIChpbnQgY29s bG9jYXRlZCk7CgogICAgUHVzaENvbnN1bWVyICgKICAgICAgICBUQU9fU3R1YiAqb2JqcmVmLAog ICAgICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAgVEFPX0Fi c3RyYWN0X1NlcnZhbnRCYXNlICpzZXJ2YW50ID0gMAogICAgICApOwoKICAgIGZyaWVuZCBjbGFz cyBfVEFPX1B1c2hDb25zdW1lcl9SZW1vdGVfUHJveHlfSW1wbDsKICAgIGZyaWVuZCBjbGFzcyBf VEFPX1B1c2hDb25zdW1lcl9UaHJ1UE9BX1Byb3h5X0ltcGw7CiAgICBmcmllbmQgY2xhc3MgX1RB T19QdXNoQ29uc3VtZXJfRGlyZWN0X1Byb3h5X0ltcGw7CgogICAgdmlydHVhbCB+UHVzaENvbnN1 bWVyICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFB1c2hDb25zdW1lciAoY29uc3QgUHVzaENvbnN1 bWVyICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFB1c2hDb25zdW1lciAmKTsKICB9Owoj IDU0OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIgogIGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1By b3h5X0ltcGwKICAgIDogcHVibGljIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9JbXBsCiAgewog IHB1YmxpYzoKICAgIHZpcnR1YWwgfl9UQU9fUHVzaENvbnN1bWVyX1Byb3h5X0ltcGwgKHZvaWQp IHsgfQogICAgdmlydHVhbCB2b2lkIHB1c2ggKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxv Y2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQg JiBkYXRhLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiAp ID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0X3B1c2hfY29uc3VtZXIgKAogICAg ICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAg ICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgoKICBwcm90ZWN0ZWQ6 CiAgICBfVEFPX1B1c2hDb25zdW1lcl9Qcm94eV9JbXBsICh2b2lkKTsKICB9OwojIDU4NCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj cy9SdGVjRXZlbnRDb21tQy5oIgogIGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94 eV9JbXBsCiAgICA6IHB1YmxpYyB2aXJ0dWFsIF9UQU9fUHVzaENvbnN1bWVyX1Byb3h5X0ltcGws CiAgICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwKICB7CiAg cHVibGljOgogICAgX1RBT19QdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpOwoK ICAgIHZpcnR1YWwgfl9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9JbXBsICh2b2lkKSB7 IH0KICAgIHZpcnR1YWwgdm9pZCBwdXNoICgKICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xsb2Nh dGVkX3Rhb190YXJnZXRfLAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50U2V0ICYg ZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsK CgoKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0X3B1c2hfY29uc3VtZXIgKAogICAgICAgIENP UkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhy b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCgogIH07CiMgNjI2ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNF dmVudENvbW1DLmgiCiAgICBjbGFzcyBfVEFPX1B1c2hDb25zdW1lcl9Qcm94eV9Ccm9rZXIKICB7 CiAgcHVibGljOgogICAgdmlydHVhbCB+X1RBT19QdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyICh2 b2lkKTsKICAgIHZpcnR1YWwgX1RBT19QdXNoQ29uc3VtZXJfUHJveHlfSW1wbCAmc2VsZWN0X3By b3h5ICgKICAgICAgICBQdXNoQ29uc3VtZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9u bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9IFRBT19kZWZhdWx0X2Vudmly b25tZW50ICgpCiAgICAgICkgPSAwOwoKICBwcm90ZWN0ZWQ6CiAgICBfVEFPX1B1c2hDb25zdW1l cl9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICB9OwojIDY0OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5o IgogIGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIKICAgIDogcHVi bGljIHZpcnR1YWwgX1RBT19QdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoK ICAgIF9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZp cnR1YWwgfl9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAg IHZpcnR1YWwgX1RBT19QdXNoQ29uc3VtZXJfUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAg ICAgICBQdXNoQ29uc3VtZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICBwcml2YXRlOgogICAgX1RB T19QdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0ltcGwgcmVtb3RlX3Byb3h5X2ltcGxfOwoKICBw dWJsaWM6CgoKCiAgICBzdGF0aWMgX1RBT19QdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0Jyb2tl ciAqdGhlX1RBT19QdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsK IyA2NzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz dmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaCIKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0 ciBfdGNfUHVzaENvbnN1bWVyOwoKCgoKCiAgY2xhc3MgUHVzaFN1cHBsaWVyOwogIHR5cGVkZWYg UHVzaFN1cHBsaWVyICpQdXNoU3VwcGxpZXJfcHRyOwoKCgoKCgoKICBjbGFzcyBQdXNoU3VwcGxp ZXJfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBQdXNoU3VwcGxp ZXJfdmFyICh2b2lkKTsKICAgIFB1c2hTdXBwbGllcl92YXIgKFB1c2hTdXBwbGllcl9wdHIgcCkg OiBwdHJfIChwKSB7fQogICAgUHVzaFN1cHBsaWVyX3ZhciAoY29uc3QgUHVzaFN1cHBsaWVyX3Zh ciAmKTsKICAgIH5QdXNoU3VwcGxpZXJfdmFyICh2b2lkKTsKCiAgICBQdXNoU3VwcGxpZXJfdmFy ICZvcGVyYXRvcj0gKFB1c2hTdXBwbGllcl9wdHIpOwogICAgUHVzaFN1cHBsaWVyX3ZhciAmb3Bl cmF0b3I9IChjb25zdCBQdXNoU3VwcGxpZXJfdmFyICYpOwogICAgUHVzaFN1cHBsaWVyX3B0ciBv cGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBQdXNoU3VwcGxpZXJf cHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFB1c2hTdXBwbGllcl9wdHIgJigpOwoKICAgIFB1 c2hTdXBwbGllcl9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUHVzaFN1cHBsaWVyX3B0ciAmaW5v dXQgKHZvaWQpOwogICAgUHVzaFN1cHBsaWVyX3B0ciAmb3V0ICh2b2lkKTsKICAgIFB1c2hTdXBw bGllcl9wdHIgX3JldG4gKHZvaWQpOwogICAgUHVzaFN1cHBsaWVyX3B0ciBwdHIgKHZvaWQpIGNv bnN0OwoKCgogICAgc3RhdGljIFB1c2hTdXBwbGllcl9wdHIgZHVwbGljYXRlIChQdXNoU3VwcGxp ZXJfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFB1c2hTdXBwbGllcl9wdHIpOwogICAg c3RhdGljIFB1c2hTdXBwbGllcl9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBQdXNoU3VwcGxp ZXJfcHRyIG5hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdCAqLAogICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmCiAgICAgICk7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAo dm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFB1c2hTdXBwbGllcl9wdHIgcHRyXzsKCiAgICBQdXNo U3VwcGxpZXJfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBQdXNoU3VwcGxpZXJf dmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDc0MCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj cy9SdGVjRXZlbnRDb21tQy5oIgogIGNsYXNzIFB1c2hTdXBwbGllcl9vdXQKICB7CiAgcHVibGlj OgogICAgUHVzaFN1cHBsaWVyX291dCAoUHVzaFN1cHBsaWVyX3B0ciAmKTsKICAgIFB1c2hTdXBw bGllcl9vdXQgKFB1c2hTdXBwbGllcl92YXIgJik7CiAgICBQdXNoU3VwcGxpZXJfb3V0IChjb25z dCBQdXNoU3VwcGxpZXJfb3V0ICYpOwogICAgUHVzaFN1cHBsaWVyX291dCAmb3BlcmF0b3I9IChj b25zdCBQdXNoU3VwcGxpZXJfb3V0ICYpOwogICAgUHVzaFN1cHBsaWVyX291dCAmb3BlcmF0b3I9 IChjb25zdCBQdXNoU3VwcGxpZXJfdmFyICYpOwogICAgUHVzaFN1cHBsaWVyX291dCAmb3BlcmF0 b3I9IChQdXNoU3VwcGxpZXJfcHRyKTsKICAgIG9wZXJhdG9yIFB1c2hTdXBwbGllcl9wdHIgJigp OwogICAgUHVzaFN1cHBsaWVyX3B0ciAmcHRyICh2b2lkKTsKICAgIFB1c2hTdXBwbGllcl9wdHIg b3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBQdXNoU3VwcGxpZXJfcHRyICZwdHJf OwogIH07CiMgNzY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiCiAgY2xhc3MgX1RBT19QdXNoU3Vw cGxpZXJfUHJveHlfSW1wbDsKICBjbGFzcyBfVEFPX1B1c2hTdXBwbGllcl9SZW1vdGVfUHJveHlf SW1wbDsKICBjbGFzcyBfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXI7CiAgY2xhc3MgX1RB T19QdXNoU3VwcGxpZXJfUmVtb3RlX1Byb3h5X0Jyb2tlcjsKCiAgY2xhc3MgUHVzaFN1cHBsaWVy CiAgICA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlw ZWRlZiBQdXNoU3VwcGxpZXJfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgUHVzaFN1cHBsaWVy X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgUHVzaFN1cHBsaWVyX3B0ciBfZHVwbGljYXRl IChQdXNoU3VwcGxpZXJfcHRyIG9iaik7CgogICAgc3RhdGljIFB1c2hTdXBwbGllcl9wdHIgX25h cnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwoKICAgIHN0YXRpYyBQdXNoU3VwcGxpZXJf cHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3Rh dGljIFB1c2hTdXBwbGllcl9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAo UHVzaFN1cHBsaWVyX3B0cikwOwogICAgICB9CgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVz dHJ1Y3RvciAodm9pZCopOwoKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0X3B1c2hfc3VwcGxp ZXIgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAg ICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgogICAgdmlydHVhbCBDT1JC QTo6Qm9vbGVhbiBfaXNfYSAoCiAgICAgICAgY29uc3QgQ09SQkE6OkNoYXIgKnR5cGVfaWQsCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgdmly dHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2 aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7 CgogIHByaXZhdGU6CiAgICBfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9f UHVzaFN1cHBsaWVyX1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIFB1c2hTdXBwbGll ciAoaW50IGNvbGxvY2F0ZWQgPSAwKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBSdGVjRXZlbnRDb21t X1B1c2hTdXBwbGllcl9zZXR1cF9jb2xsb2NhdGlvbiAoaW50IGNvbGxvY2F0ZWQpOwoKICAgIFB1 c2hTdXBwbGllciAoCiAgICAgICAgVEFPX1N0dWIgKm9ianJlZiwKICAgICAgICBDT1JCQTo6Qm9v bGVhbiBfdGFvX2NvbGxvY2F0ZWQgPSAwLAogICAgICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFz ZSAqc2VydmFudCA9IDAKICAgICAgKTsKCiAgICBmcmllbmQgY2xhc3MgX1RBT19QdXNoU3VwcGxp ZXJfUmVtb3RlX1Byb3h5X0ltcGw7CiAgICBmcmllbmQgY2xhc3MgX1RBT19QdXNoU3VwcGxpZXJf VGhydVBPQV9Qcm94eV9JbXBsOwogICAgZnJpZW5kIGNsYXNzIF9UQU9fUHVzaFN1cHBsaWVyX0Rp cmVjdF9Qcm94eV9JbXBsOwoKICAgIHZpcnR1YWwgflB1c2hTdXBwbGllciAodm9pZCk7CgogIHBy aXZhdGU6CiAgICBQdXNoU3VwcGxpZXIgKGNvbnN0IFB1c2hTdXBwbGllciAmKTsKICAgIHZvaWQg b3BlcmF0b3I9IChjb25zdCBQdXNoU3VwcGxpZXIgJik7CiAgfTsKIyA4NTUgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2 ZW50Q29tbUMuaCIKICBjbGFzcyBfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9JbXBsCiAgICA6IHB1 YmxpYyB2aXJ0dWFsIFRBT19PYmplY3RfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICB2aXJ0 dWFsIH5fVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9JbXBsICh2b2lkKSB7IH0KICAgIHZpcnR1YWwg dm9pZCBkaXNjb25uZWN0X3B1c2hfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2Nv bGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lz dGVtRXhjZXB0aW9uICkgPSAwOwoKCgoKICBwcm90ZWN0ZWQ6CiAgICBfVEFPX1B1c2hTdXBwbGll cl9Qcm94eV9JbXBsICh2b2lkKTsKICB9OwojIDg4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIgog IGNsYXNzIF9UQU9fUHVzaFN1cHBsaWVyX1JlbW90ZV9Qcm94eV9JbXBsCiAgICA6IHB1YmxpYyB2 aXJ0dWFsIF9UQU9fUHVzaFN1cHBsaWVyX1Byb3h5X0ltcGwsCiAgICAgIHB1YmxpYyB2aXJ0dWFs IFRBT19SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwKICB7CiAgcHVibGljOgogICAgX1RBT19QdXNo U3VwcGxpZXJfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHVz aFN1cHBsaWVyX1JlbW90ZV9Qcm94eV9JbXBsICh2b2lkKSB7IH0KICAgIHZpcnR1YWwgdm9pZCBk aXNjb25uZWN0X3B1c2hfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0 ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj ZXB0aW9uICk7CgoKCgogIH07CiMgOTE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiCiAgICBjbGFz cyBfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXIKICB7CiAgcHVibGljOgogICAgdmlydHVh bCB+X1RBT19QdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyICh2b2lkKTsKICAgIHZpcnR1YWwgX1RB T19QdXNoU3VwcGxpZXJfUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgICAgICBQdXNoU3Vw cGxpZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSA9IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkgPSAw OwoKICBwcm90ZWN0ZWQ6CiAgICBfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXIgKHZvaWQp OwoKICB9OwojIDkzOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIgogIGNsYXNzIF9UQU9fUHVzaFN1 cHBsaWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIKICAgIDogcHVibGljIHZpcnR1YWwgX1RBT19QdXNo U3VwcGxpZXJfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAgIF9UQU9fUHVzaFN1cHBsaWVy X1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHVzaFN1cHBs aWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgX1RBT19QdXNoU3Vw cGxpZXJfUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgICAgICBQdXNoU3VwcGxpZXIgKm9i amVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZQogICAgICApOwoKICBwcml2YXRlOgogICAgX1RBT19QdXNoU3VwcGxpZXJfUmVtb3Rl X1Byb3h5X0ltcGwgcmVtb3RlX3Byb3h5X2ltcGxfOwoKICBwdWJsaWM6CgoKCiAgICBzdGF0aWMg X1RBT19QdXNoU3VwcGxpZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAqdGhlX1RBT19QdXNoU3VwcGxp ZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsKIyA5NjggIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50 Q29tbUMuaCIKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUHVzaFN1cHBsaWVyOwoK Cn0KCgoKCmV4dGVybgpSdGVjRXZlbnRDb21tOjpfVEFPX1B1c2hDb25zdW1lcl9Qcm94eV9Ccm9r ZXIgKgooKlJ0ZWNFdmVudENvbW1fX1RBT19QdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyX0ZhY3Rv cnlfZnVuY3Rpb25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAgKTsKCmV4 dGVybgpSdGVjRXZlbnRDb21tOjpfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXIgKgooKlJ0 ZWNFdmVudENvbW1fX1RBT19QdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyX0ZhY3RvcnlfZnVuY3Rp b25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAgKTsKCiAgICAgICAgICAg ICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENv bW06OkV2ZW50SGVhZGVyICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo Q09SQkE6OkFueSAmLCBSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlciopOwogICAgICAgICAgICAg ICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRl Y0V2ZW50Q29tbTo6RXZlbnRIZWFkZXIgKiYpOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q29t bTo6RXZlbnRIZWFkZXIgKiYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo Q09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudCAmKTsKICAgICAgICAgICAg ICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q29tbTo6RXZl bnQqKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25z dCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENvbW06OkV2ZW50IComKTsKICAgICAgICAgICAgICAg ICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0 IFJ0ZWNFdmVudENvbW06OkV2ZW50IComKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0 b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgJik7CiAg ICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFJ0ZWNFdmVu dENvbW06OkV2ZW50U2V0Kik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVy YXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDb21tOjpFdmVudFNldCAqJik7 CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S QkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudFNldCAqJik7CgogICAgICAgICAg ICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDb21tOjpQ dXNoQ29uc3VtZXJfcHRyKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJh dG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lciAq Jik7CgogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBS dGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyKTsKICAgICAgICAgICAgICAgICAgIENPUkJB OjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENvbW06 OlB1c2hTdXBwbGllciAqJik7CiMgMTAzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2 Y3MvUnRlY0V2ZW50Q29tbUMuaSIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmkiCmlubGlu ZQpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXI6OkV2ZW50SGVhZGVyX3ZhciAodm9pZCkK ICA6IHB0cl8gKDApCnt9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFyOjpF dmVudEhlYWRlcl92YXIgKEV2ZW50SGVhZGVyICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpS dGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXI6OkV2ZW50SGVhZGVyX3ZhciAoY29uc3QgOjpS dGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8g eyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXIgKCpw LnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkp ID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsK fQoKCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXI6OkV2ZW50SGVhZGVyX3Zh ciAoY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlciAmcCkKewogIGRvIHsgdHJ5IHsg dGhpcy0+cHRyXyA9IG5ldyA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyIChwKTsgfSBjYXRj aCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47 IH0gfSB3aGlsZSAoMCk7Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXI6 On5FdmVudEhlYWRlcl92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5l IFJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyX3ZhciAmClJ0ZWNFdmVudENvbW06OkV2ZW50SGVh ZGVyX3Zhcjo6b3BlcmF0b3I9IChFdmVudEhlYWRlciAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJf OwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6UnRlY0V2ZW50 Q29tbTo6RXZlbnRIZWFkZXJfdmFyICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFyOjpv cGVyYXRvcj0gKGNvbnN0IDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFyICZwKQp7CiAg aWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAg ICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIEV2ZW50SGVhZGVyICpkZWVwX2Nv cHkgPQogICAgICAgICAgICBuZXcgRXZlbnRIZWFkZXIgKCpwLnB0cl8pOwoKICAgICAgICAgIGlm IChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIEV2ZW50SGVhZGVy ICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsK ICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVw X2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoK CmlubGluZSBSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXIgJgpSdGVjRXZlbnRDb21tOjpF dmVudEhlYWRlcl92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudEhl YWRlciAmcCkKewogIGlmICh0aGlzLT5wdHJfICE9ICZwKQogIHsKICAgIGRlbGV0ZSB0aGlzLT5w dHJfOwogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UnRlY0V2ZW50Q29tbTo6RXZl bnRIZWFkZXIgKHApOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRp b24gKCkpID0gMTI7IHJldHVybiAqdGhpczsgfSB9IHdoaWxlICgwKTsKICB9CiAgcmV0dXJuICp0 aGlzOwp9CgppbmxpbmUgY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlciAqClJ0ZWNF dmVudENvbW06OkV2ZW50SGVhZGVyX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJl dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlciAq ClJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJl dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFy OjpvcGVyYXRvciBjb25zdCA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyICYoKSBjb25zdAp7 CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFk ZXJfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyICYoKQp7CiAgcmV0 dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFy OjpvcGVyYXRvciA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyICYoKSBjb25zdAp7CiAgcmV0 dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudEhl YWRlciAmClJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyX3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsK ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVh ZGVyICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFyOjppbm91dCAodm9pZCkKewogIHJl dHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVy ICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFyOjpvdXQgKHZvaWQpCnsKICByZXR1cm4g KnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyClJ0ZWNF dmVudENvbW06OkV2ZW50SGVhZGVyX3Zhcjo6X3JldG4gKHZvaWQpCnsKICByZXR1cm4gKnRoaXMt PnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyICoKUnRlY0V2ZW50 Q29tbTo6RXZlbnRIZWFkZXJfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+ cHRyXzsKfQoKCgoKCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudF92YXI6OkV2ZW50X3ZhciAo dm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRfdmFyOjpF dmVudF92YXIgKEV2ZW50ICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpSdGVjRXZlbnRDb21t OjpFdmVudF92YXI6OkV2ZW50X3ZhciAoY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudF92YXIg JnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UnRl Y0V2ZW50Q29tbTo6RXZlbnQgKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAo Kl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNl CiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zhcjo6 fkV2ZW50X3ZhciAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwp9CgppbmxpbmUgUnRlY0V2 ZW50Q29tbTo6RXZlbnRfdmFyICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRfdmFyOjpvcGVyYXRvcj0g KEV2ZW50ICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0 dXJuICp0aGlzOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudF92YXIgJgpSdGVjRXZl bnRDb21tOjpFdmVudF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVu dF92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAw KQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+ cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgRXZlbnQg KmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBFdmVudCAoKnAucHRyXyk7CgogICAgICAgICAg aWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgRXZlbnQgKnRt cCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwogICAg ICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRlZXBfY29w eTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9Cgppbmxp bmUgY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudCAqClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zh cjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgppbmxp bmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudCAqClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zhcjo6b3Bl cmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50 Q29tbTo6RXZlbnRfdmFyOjpvcGVyYXRvciBjb25zdCA6OlJ0ZWNFdmVudENvbW06OkV2ZW50ICYo KSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6 RXZlbnRfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENvbW06OkV2ZW50ICYoKQp7CiAgcmV0dXJu ICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRfdmFyOjpvcGVyYXRv ciA6OlJ0ZWNFdmVudENvbW06OkV2ZW50ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJf Owp9CgoKaW5saW5lClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zhcjo6b3BlcmF0b3IgOjpSdGVjRXZl bnRDb21tOjpFdmVudCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0 IDo6UnRlY0V2ZW50Q29tbTo6RXZlbnQgJgpSdGVjRXZlbnRDb21tOjpFdmVudF92YXI6OmluICh2 b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRD b21tOjpFdmVudCAmClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zhcjo6aW5vdXQgKHZvaWQpCnsKICBy ZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudCAqJgpS dGVjRXZlbnRDb21tOjpFdmVudF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJf OwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVj RXZlbnRDb21tOjpFdmVudCAqClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zhcjo6X3JldG4gKHZvaWQp CnsKICA6OlJ0ZWNFdmVudENvbW06OkV2ZW50ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0 cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50ICoK UnRlY0V2ZW50Q29tbTo6RXZlbnRfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhp cy0+cHRyXzsKfQoKCgoKCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudF9vdXQ6OkV2ZW50X291 dCAoOjpSdGVjRXZlbnRDb21tOjpFdmVudCAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRy XyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudF9vdXQ6OkV2ZW50X291dCAoRXZl bnRfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0 aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudENvbW06OkV2ZW50X291dDo6RXZlbnRf b3V0IChjb25zdCA6OlJ0ZWNFdmVudENvbW06OkV2ZW50X291dCAmcCkKICA6IHB0cl8gKGNvbnN0 X2Nhc3Q8RXZlbnRfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgUnRlY0V2ZW50Q29tbTo6RXZl bnRfb3V0ICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6UnRl Y0V2ZW50Q29tbTo6RXZlbnRfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNvbnN0X2Nhc3Q8RXZl bnRfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUnRlY0V2ZW50Q29t bTo6RXZlbnRfb3V0ICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRfb3V0OjpvcGVyYXRvcj0gKEV2ZW50 ICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKUnRlY0V2 ZW50Q29tbTo6RXZlbnRfb3V0OjpvcGVyYXRvciA6OlJ0ZWNFdmVudENvbW06OkV2ZW50IComKCkK ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudCAq JgpSdGVjRXZlbnRDb21tOjpFdmVudF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5w dHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudCAqClJ0ZWNFdmVudENvbW06OkV2 ZW50X291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CiMgMzY3 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL1J0ZWNFdmVudENvbW1DLmkiCmlubGluZSBSdGVjRXZlbnRDb21tOjpFdmVudCAqClJ0 ZWNFdmVudENvbW06Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRT ZXQ6OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSkKCnsKICBSdGVjRXZlbnRDb21tOjpFdmVu dCAqcmV0dmFsID0gMDsKICBkbyB7IHRyeSB7IHJldHZhbCA9IG5ldyBSdGVjRXZlbnRDb21tOjpF dmVudFtzaXplXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9u ICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKICByZXR1cm4gcmV0dmFsOwp9Cgpp bmxpbmUgdm9pZCBSdGVjRXZlbnRDb21tOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZl bnRDb21tX0V2ZW50U2V0OjpmcmVlYnVmIChSdGVjRXZlbnRDb21tOjpFdmVudCAqYnVmZmVyKQoK ewogIGRlbGV0ZSBbXSBidWZmZXI7Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpfVEFPX1VuYm91 bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0OjpfVEFPX1VuYm91bmRlZF9TZXF1 ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0ICh2b2lkKQp7Cn0KCmlubGluZQpSdGVjRXZlbnRD b21tOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0OjpfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0IChDT1JCQTo6VUxvbmcg bWF4aW11bSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgX1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldDo6YWxsb2NidWYgKG1heGlt dW0pKQp7Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9S dGVjRXZlbnRDb21tX0V2ZW50U2V0OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRD b21tX0V2ZW50U2V0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICBDT1JCQTo6VUxvbmcgbGVuZ3Ro LAogIFJ0ZWNFdmVudENvbW06OkV2ZW50ICpkYXRhLAogIENPUkJBOjpCb29sZWFuIHJlbGVhc2Up CjogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBsZW5ndGgsIGRhdGEsIHJl bGVhc2UpCnsKfQoKaW5saW5lClJ0ZWNFdmVudENvbW06Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X1J0ZWNFdmVudENvbW1fRXZlbnRTZXQ6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVu dENvbW1fRXZlbnRTZXQgKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENv bW1fRXZlbnRTZXQgJnJocykKCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJocykK ewogIGlmIChyaHMuYnVmZmVyXyAhPSAwKQogIHsKICAgIFJ0ZWNFdmVudENvbW06OkV2ZW50ICp0 bXAxID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldDo6YWxs b2NidWYgKHRoaXMtPm1heGltdW1fKTsKICAgIFJ0ZWNFdmVudENvbW06OkV2ZW50ICogY29uc3Qg dG1wMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50Q29tbTo6RXZlbnQgKj4gKHJocy5idWZm ZXJfKTsKCiAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsr aSkKICAgICAgdG1wMVtpXSA9IHRtcDJbaV07CgogICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAg fQogIGVsc2UKICB7CiAgICB0aGlzLT5idWZmZXJfID0gMDsKICB9Cn0KCmlubGluZSBSdGVjRXZl bnRDb21tOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0ICYK UnRlY0V2ZW50Q29tbTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVu dFNldDo6b3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRD b21tX0V2ZW50U2V0ICZyaHMpCgp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAqdGhp czsKCiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogIHsKICAgIGlmICh0aGlzLT5tYXhpbXVtXyA8IHJo cy5tYXhpbXVtXykKICAgIHsKCiAgICAgIFJ0ZWNFdmVudENvbW06OkV2ZW50ICp0bXAgPSByZWlu dGVycHJldF9jYXN0PFJ0ZWNFdmVudENvbW06OkV2ZW50ICo+ICh0aGlzLT5idWZmZXJfKTsKICAg ICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldDo6ZnJlZWJ1 ZiAodG1wKTsKICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0 ZWNFdmVudENvbW1fRXZlbnRTZXQ6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgfQogIH0K ICBlbHNlCiAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2 ZW50Q29tbV9FdmVudFNldDo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CgogIFRBT19VbmJvdW5k ZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICBSdGVjRXZlbnRDb21tOjpFdmVu dCAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50Q29tbTo6RXZlbnQgKj4gKHRoaXMt PmJ1ZmZlcl8pOwogIFJ0ZWNFdmVudENvbW06OkV2ZW50ICogY29uc3QgdG1wMiA9IHJlaW50ZXJw cmV0X2Nhc3Q8UnRlY0V2ZW50Q29tbTo6RXZlbnQgKj4gKHJocy5idWZmZXJfKTsKCiAgZm9yIChD T1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICB0bXAxW2ldID0g dG1wMltpXTsKCiAgcmV0dXJuICp0aGlzOwp9CgoKaW5saW5lIFJ0ZWNFdmVudENvbW06OkV2ZW50 ICYKUnRlY0V2ZW50Q29tbTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9F dmVudFNldDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpCgp7CiAgZG8geyBpZighKGkgPCB0 aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgp OyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18t PnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz dmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaSIsIDQ1OSwgLTEsIF9fYWNlX2Vycm9yLCBhY2Vf X18tPnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxi YWNrICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGlu ZSAlbCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1f IiwgLTEpOyB9IH0gd2hpbGUgKDApOwogIFJ0ZWNFdmVudENvbW06OkV2ZW50KiB0bXAgPSByZWlu dGVycHJldF9jYXN0PFJ0ZWNFdmVudENvbW06OkV2ZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogIHJl dHVybiB0bXBbaV07Cn0KCmlubGluZSBjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudCAmClJ0ZWNF dmVudENvbW06Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRTZXQ6 Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25zdAoKewogIGRvIHsgaWYoIShpIDwgdGhp cy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsg QUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5z ZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zj cy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmkiLCA0NjgsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19f LT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFj ayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUg JWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIs IC0xKTsgfSB9IHdoaWxlICgwKTsKICBSdGVjRXZlbnRDb21tOjpFdmVudCAqIGNvbnN0IHRtcCA9 IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50Q29tbTo6RXZlbnQqPiAodGhpcy0+YnVmZmVyXyk7 CiAgcmV0dXJuIHRtcFtpXTsKfQoKCgppbmxpbmUgUnRlY0V2ZW50Q29tbTo6RXZlbnQgKgpSdGVj RXZlbnRDb21tOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0 OjpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCnsKICBSdGVjRXZlbnRDb21tOjpF dmVudCAqcmVzdWx0ID0gMDsKICBpZiAob3JwaGFuID09IDApCiAgewoKICAgIGlmICh0aGlzLT5i dWZmZXJfID09IDApCiAgICB7CiAgICAgIHJlc3VsdCA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X1J0ZWNFdmVudENvbW1fRXZlbnRTZXQ6OmFsbG9jYnVmICh0aGlzLT5sZW5ndGhfKTsKICAgICAg dGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgdGhpcy0+cmVsZWFzZV8gPSAxOwogICAgfQog ICAgZWxzZQogICAgewogICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PFJ0ZWNFdmVudENv bW06OkV2ZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgfQogIH0KICBlbHNlCiAgewogICAgaWYg KHRoaXMtPnJlbGVhc2VfICE9IDApCiAgICB7CgoKICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRf Y2FzdDxSdGVjRXZlbnRDb21tOjpFdmVudCo+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgdGhpcy0+ bWF4aW11bV8gPSAwOwogICAgICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgdGhpcy0+YnVmZmVy XyA9IDA7CiAgICAgIHRoaXMtPnJlbGVhc2VfID0gMDsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3Vs dDsKfQoKaW5saW5lIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50ICoKUnRlY0V2ZW50Q29tbTo6 X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldDo6Z2V0X2J1ZmZl ciAodm9pZCkgY29uc3QKewogIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFJ0ZWNFdmVu dENvbW06OkV2ZW50ICo+ICh0aGlzLT5idWZmZXJfKTsKfQoKaW5saW5lIHZvaWQKUnRlY0V2ZW50 Q29tbTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldDo6cmVw bGFjZSAoQ09SQkE6OlVMb25nIG1heCwKQ09SQkE6OlVMb25nIGxlbmd0aCwKUnRlY0V2ZW50Q29t bTo6RXZlbnQgKmRhdGEsCkNPUkJBOjpCb29sZWFuIHJlbGVhc2UpCnsKICB0aGlzLT5tYXhpbXVt XyA9IG1heDsKICB0aGlzLT5sZW5ndGhfID0gbGVuZ3RoOwogIGlmICh0aGlzLT5idWZmZXJfICYm IHRoaXMtPnJlbGVhc2VfID09IDEpCiAgewogICAgUnRlY0V2ZW50Q29tbTo6RXZlbnQgKnRtcCA9 IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50Q29tbTo6RXZlbnQqPiAodGhpcy0+YnVmZmVyXyk7 CiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0OjpmcmVl YnVmICh0bXApOwogIH0KICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICB0aGlzLT5yZWxlYXNlXyA9 IHJlbGVhc2U7Cn0KIyA1NDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaSIKaW5saW5lClJ0ZWNFdmVu dENvbW06OkV2ZW50U2V0X3Zhcjo6RXZlbnRTZXRfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30K CmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudFNldF92YXI6OkV2ZW50U2V0X3ZhciAoRXZlbnRT ZXQgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3Zh cjo6RXZlbnRTZXRfdmFyIChjb25zdCA6OlJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3ZhciAmcCkK ewogIGlmIChwLnB0cl8pCiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpSdGVjRXZl bnRDb21tOjpFdmVudFNldCAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgq X19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UK ICAgIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFy Ojp+RXZlbnRTZXRfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBS dGVjRXZlbnRDb21tOjpFdmVudFNldF92YXIgJgpSdGVjRXZlbnRDb21tOjpFdmVudFNldF92YXI6 Om9wZXJhdG9yPSAoRXZlbnRTZXQgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5w dHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50 U2V0X3ZhciAmClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6 OlJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAg ewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMt PnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICBFdmVudFNldCAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IEV2 ZW50U2V0ICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBFdmVudFNldCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAg ICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRt cDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OlJ0ZWNFdmVudENvbW06 OkV2ZW50U2V0ICoKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFyOjpvcGVyYXRvci0+ICh2b2lk KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06 OkV2ZW50U2V0ICoKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFyOjpvcGVyYXRvci0+ICh2b2lk KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudFNl dF92YXI6Om9wZXJhdG9yIGNvbnN0IDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgJigpIGNvbnN0 CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudFNl dF92YXI6Om9wZXJhdG9yIDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgJigpCnsKICByZXR1cm4g KnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudFNldF92YXI6Om9wZXJh dG9yIDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMt PnB0cl87Cn0KCgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFyOjpvcGVyYXRvciA6 OlJ0ZWNFdmVudENvbW06OkV2ZW50U2V0IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgpp bmxpbmUgUnRlY0V2ZW50Q29tbTo6RXZlbnQgJgpSdGVjRXZlbnRDb21tOjpFdmVudFNldF92YXI6 Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVybiB0aGlzLT5wdHJfLT5v cGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudCAm ClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGlu ZGV4KSBjb25zdAp7CiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgUnRlY0V2ZW50Q29tbTo6RXZl bnQgJj4gKHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGluZSBjb25zdCA6 OlJ0ZWNFdmVudENvbW06OkV2ZW50U2V0ICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFyOjpp biAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2 ZW50Q29tbTo6RXZlbnRTZXQgJgpSdGVjRXZlbnRDb21tOjpFdmVudFNldF92YXI6Omlub3V0ICh2 b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6UnRlY0V2ZW50Q29tbTo6 RXZlbnRTZXQgKiYKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFyOjpvdXQgKHZvaWQpCnsKICBk ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsK fQoKaW5saW5lIDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgKgpSdGVjRXZlbnRDb21tOjpFdmVu dFNldF92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpSdGVjRXZlbnRDb21tOjpFdmVudFNldCAqdG1w ID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdG1wOwp9CgppbmxpbmUg OjpSdGVjRXZlbnRDb21tOjpFdmVudFNldCAqClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3Zhcjo6 cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKUnRl Y0V2ZW50Q29tbTo6RXZlbnRTZXRfb3V0OjpFdmVudFNldF9vdXQgKEV2ZW50U2V0IComcCkKICA6 IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudENvbW06OkV2 ZW50U2V0X291dDo6RXZlbnRTZXRfb3V0IChFdmVudFNldF92YXIgJnApCiAgOiBwdHJfIChwLm91 dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUK UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfb3V0OjpFdmVudFNldF9vdXQgKGNvbnN0IDo6UnRlY0V2 ZW50Q29tbTo6RXZlbnRTZXRfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxFdmVudFNldF9v dXQmPiAocCkucHRyXykKe30KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X291dCAm ClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X291dDo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNFdmVu dENvbW06OkV2ZW50U2V0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PEV2ZW50 U2V0X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6UnRlY0V2ZW50 Q29tbTo6RXZlbnRTZXRfb3V0ICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfb3V0OjpvcGVyYXRv cj0gKEV2ZW50U2V0ICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9Cgpp bmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfb3V0OjpvcGVyYXRvciA6OlJ0ZWNFdmVudENv bW06OkV2ZW50U2V0IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVj RXZlbnRDb21tOjpFdmVudFNldCAqJgpSdGVjRXZlbnRDb21tOjpFdmVudFNldF9vdXQ6OnB0ciAo dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpF dmVudFNldCAqClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X291dDo6b3BlcmF0b3ItPiAodm9pZCkK ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgUnRlY0V2ZW50Q29tbTo6RXZlbnQgJgpS dGVjRXZlbnRDb21tOjpFdmVudFNldF9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRl eCkKewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KIyA3NTggIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2 Y3MvUnRlY0V2ZW50Q29tbUMuaSIKaW5saW5lClJ0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcjo6 UHVzaENvbnN1bWVyICgKICAgIFRBT19TdHViICpvYmpyZWYsCiAgICBDT1JCQTo6Qm9vbGVhbiBf dGFvX2NvbGxvY2F0ZWQsCiAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZhbnQKICAp CiAgOiBDT1JCQV9PYmplY3QgKG9ianJlZiwgX3Rhb19jb2xsb2NhdGVkLCBzZXJ2YW50KQp7CiAg dGhpcy0+UnRlY0V2ZW50Q29tbV9QdXNoQ29uc3VtZXJfc2V0dXBfY29sbG9jYXRpb24gKF90YW9f Y29sbG9jYXRlZCk7Cn0KIyA3NzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaSIKaW5saW5lClJ0ZWNF dmVudENvbW06OlB1c2hTdXBwbGllcjo6UHVzaFN1cHBsaWVyICgKICAgIFRBT19TdHViICpvYmpy ZWYsCiAgICBDT1JCQTo6Qm9vbGVhbiBfdGFvX2NvbGxvY2F0ZWQsCiAgICBUQU9fQWJzdHJhY3Rf U2VydmFudEJhc2UgKnNlcnZhbnQKICApCiAgOiBDT1JCQV9PYmplY3QgKG9ianJlZiwgX3Rhb19j b2xsb2NhdGVkLCBzZXJ2YW50KQp7CiAgdGhpcy0+UnRlY0V2ZW50Q29tbV9QdXNoU3VwcGxpZXJf c2V0dXBfY29sbG9jYXRpb24gKF90YW9fY29sbG9jYXRlZCk7Cn0KCgoKCmlubGluZSBDT1JCQTo6 Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBSdGVjRXZlbnRD b21tOjpFdmVudEhlYWRlciAmX3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBf dGFvX2FnZ3JlZ2F0ZS50eXBlKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuc291cmNl KSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUudHRsKSAmJgogICAgKHN0cm0gPDwgX3Rh b19hZ2dyZWdhdGUuY3JlYXRpb25fdGltZSkgJiYKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRl LmVjX3JlY3ZfdGltZSkgJiYKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLmVjX3NlbmRfdGlt ZSkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JC QTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIFJ0ZWNFdmVudENvbW06 OkV2ZW50SGVhZGVyICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtID4+IF90YW9f YWdncmVnYXRlLnR5cGUpICYmCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5zb3VyY2UpICYm CiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS50dGwpICYmCiAgICAoc3RybSA+PiBfdGFvX2Fn Z3JlZ2F0ZS5jcmVhdGlvbl90aW1lKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUuZWNf cmVjdl90aW1lKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUuZWNfc2VuZF90aW1lKQog ICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpC b29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IFJ0ZWNFdmVudENv bW06OkV2ZW50ICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtIDw8IF90YW9fYWdn cmVnYXRlLmhlYWRlcikgJiYKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLmRhdGEpCiAgKQog ICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgppbmxpbmUgQ09SQkE6OkJvb2xl YW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBSdGVjRXZlbnRDb21tOjpFdmVudCAm X3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5oZWFk ZXIpICYmCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5kYXRhKQogICkKICAgIHJldHVybiAx OwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKCgoKCkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwg KAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQg JgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAg ICBSdGVjRXZlbnRDb21tOjpFdmVudFNldCAmCiAgKTsKCgoKICAgICAgICAgICAgICAgICAgIENP UkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3Qg UnRlY0V2ZW50Q29tbTo6UHVzaENvbnN1bWVyX3B0cgogICk7CgogICAgICAgICAgICAgICAgICAg Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwKICAgIFJ0ZWNF dmVudENvbW06OlB1c2hDb25zdW1lcl9wdHIgJgogICk7CgogICAgICAgICAgICAgICAgICAgQ09S QkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBS dGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyCiAgKTsKCiAgICAgICAgICAgICAgICAgICBD T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgUnRlY0V2 ZW50Q29tbTo6UHVzaFN1cHBsaWVyX3B0ciAmCiAgKTsKIyAxMDM4ICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENv bW1DLmgiIDIKIyAxMDQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDEwNDkgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv UnRlY0V2ZW50Q29tbUMuaCIgMgojIDI5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TLmgiIDIKCgoKCgoK IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv cnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyLmgiIDEKIyAzNiAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21t Uy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L3Rhby9Qb3J0YWJsZVNlcnZlci9TZXJ2YW50X0Jhc2UuaCIgMQojIDM3ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVu dENvbW1TLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0NvbGxvY2F0ZWRfT2JqZWN0LmgiIDEKIyAzOCAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj cy9SdGVjRXZlbnRDb21tUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9UaHJ1UE9BX09iamVjdF9Qcm94eV9J bXBsLmgiIDEKIyAzOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9EaXJl Y3RfT2JqZWN0X1Byb3h5X0ltcGwuaCIgMQojIDQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TLmgiIDIK IyA1MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tUy5oIgpuYW1lc3BhY2UgUE9BX1J0ZWNFdmVudENvbW0K ewogIGNsYXNzIFB1c2hDb25zdW1lcjsKICB0eXBlZGVmIFB1c2hDb25zdW1lciAqUHVzaENvbnN1 bWVyX3B0cjsKCiAgY2xhc3MgX1RBT19QdXNoQ29uc3VtZXJfVGhydVBPQV9Qcm94eV9JbXBsOwog IGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlcjsKCiAgY2xh c3MgUHVzaENvbnN1bWVyIDogcHVibGljIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRC YXNlCiAgewogIHByb3RlY3RlZDoKICAgIFB1c2hDb25zdW1lciAodm9pZCk7CgogIHB1YmxpYzoK ICAgIFB1c2hDb25zdW1lciAoY29uc3QgUHVzaENvbnN1bWVyJiByaHMpOwogICAgdmlydHVhbCB+ UHVzaENvbnN1bWVyICh2b2lkKTsKCgogICAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfYSAo CiAgICAgICAgY29uc3QgY2hhciogbG9naWNhbF90eXBlX2lkLAogICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwoKICAgIHZpcnR1YWwgdm9pZCogX2Rvd25j YXN0ICgKICAgICAgICBjb25zdCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQKICAgICAgKTsKCiAgICBz dGF0aWMgdm9pZCBfaXNfYV9za2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAog ICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAg KTsKCiAgICBzdGF0aWMgdm9pZCBfbm9uX2V4aXN0ZW50X3NrZWwgKAogICAgICAgIFRBT19TZXJ2 ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRf dXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZQogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9pbnRlcmZhY2Vfc2tlbCAoCiAg ICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAg dm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgdmlydHVhbCB2b2lkIF9kaXNw YXRjaCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpfc2Vy dmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgOjpSdGVjRXZlbnRDb21tOjpQdXNoQ29uc3Vt ZXIgKl90aGlzICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAg ICAgKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAo dm9pZCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHB1c2ggKAogICAgICAgIGNvbnN0IFJ0ZWNF dmVudENvbW06OkV2ZW50U2V0ICYgZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24g KSA9IDA7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgcHVzaF9za2VsICgKICAgICAgICBUQU9fU2Vy dmVyUmVxdWVzdCAmX3Rhb19yZXEsCiAgICAgICAgdm9pZCAqX3Rhb19vYmosCiAgICAgICAgdm9p ZCAqX3Rhb19zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZGlz Y29ubmVjdF9wdXNoX2NvbnN1bWVyICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv bm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9 IDA7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgZGlzY29ubmVjdF9wdXNoX2NvbnN1bWVyX3NrZWwg KAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lkICpfdGFv X29iaiwKICAgICAgICB2b2lkICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKCiAg fTsKCgoKCgoKICBjbGFzcyBfVEFPX1B1c2hDb25zdW1lcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9r ZXIgOiBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENvbW06Ol9UQU9fUHVzaENvbnN1bWVyX1By b3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX1B1c2hDb25zdW1lcl9TdHJhdGVnaXpl ZF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHVzaENvbnN1bWVyX1N0 cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCA6OlJ0ZWNFdmVudENv bW06Ol9UQU9fUHVzaENvbnN1bWVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgIDo6 UnRlY0V2ZW50Q29tbTo6UHVzaENvbnN1bWVyICpvYmplY3QsCiAgICAgIENPUkJBX0Vudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKICBwcml2YXRlOgoK CiAgICB2b2lkIGNyZWF0ZV9wcm94eSAoCiAgICAgIGludCBjb2xsb2NhdGlvbl9zdHJhdGVneSwK ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl CiAgICApOwoKCgoKICAgIDo6UnRlY0V2ZW50Q29tbTo6X1RBT19QdXNoQ29uc3VtZXJfUHJveHlf SW1wbAogICAgKnByb3h5X2NhY2hlX1tUQU9fQ29sbG9jYXRpb25fU3RyYXRlZ2llczo6Q1NfTEFT VF07CgogICAgQUNFX01UX1NZTkNIOjpNVVRFWCBtdXRleF87CgoKCgogIHB1YmxpYzoKICAgIHN0 YXRpYyBfVEFPX1B1c2hDb25zdW1lcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9f UHVzaENvbnN1bWVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsKIyAxOTcg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y YnN2Y3MvUnRlY0V2ZW50Q29tbVMuaCIKICBjbGFzcyBfVEFPX1B1c2hDb25zdW1lcl9UaHJ1UE9B X1Byb3h5X0ltcGwgOgogICAgcHVibGljIHZpcnR1YWwgOjpSdGVjRXZlbnRDb21tOjpfVEFPX1B1 c2hDb25zdW1lcl9Qcm94eV9JbXBsLAogICAgcHVibGljIHZpcnR1YWwgVEFPX1RocnVQT0FfT2Jq ZWN0X1Byb3h5X0ltcGwKICB7CiAgcHVibGljOgogICAgX1RBT19QdXNoQ29uc3VtZXJfVGhydVBP QV9Qcm94eV9JbXBsICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX1B1c2hDb25zdW1lcl9UaHJ1 UE9BX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBwdXNoICgKICAgICAg ICBDT1JCQV9PYmplY3QgKl9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAgIGNvbnN0IFJ0 ZWNFdmVudENvbW06OkV2ZW50U2V0ICYgZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENP UkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0X3B1 c2hfY29uc3VtZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3Rhcmdl dF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoK CgogIH07CgoKCgoKCiAgY2xhc3MgUHVzaFN1cHBsaWVyOwogIHR5cGVkZWYgUHVzaFN1cHBsaWVy ICpQdXNoU3VwcGxpZXJfcHRyOwoKICBjbGFzcyBfVEFPX1B1c2hTdXBwbGllcl9UaHJ1UE9BX1By b3h5X0ltcGw7CiAgY2xhc3MgX1RBT19QdXNoU3VwcGxpZXJfU3RyYXRlZ2l6ZWRfUHJveHlfQnJv a2VyOwoKICBjbGFzcyBQdXNoU3VwcGxpZXIgOiBwdWJsaWMgdmlydHVhbCBQb3J0YWJsZVNlcnZl cjo6U2VydmFudEJhc2UKICB7CiAgcHJvdGVjdGVkOgogICAgUHVzaFN1cHBsaWVyICh2b2lkKTsK CiAgcHVibGljOgogICAgUHVzaFN1cHBsaWVyIChjb25zdCBQdXNoU3VwcGxpZXImIHJocyk7CiAg ICB2aXJ0dWFsIH5QdXNoU3VwcGxpZXIgKHZvaWQpOwoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29s ZWFuIF9pc19hICgKICAgICAgICBjb25zdCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQsCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgdmlydHVhbCB2 b2lkKiBfZG93bmNhc3QgKAogICAgICAgIGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9pZAogICAg ICApOwoKICAgIHN0YXRpYyB2b2lkIF9pc19hX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1 ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRfdXBjYWxs LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZQogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9ub25fZXhpc3RlbnRfc2tlbCAoCiAgICAg ICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAgdm9p ZCAqc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB X0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQgX2ludGVyZmFj ZV9za2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9i aiwKICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0dWFs IHZvaWQgX2Rpc3BhdGNoICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAg IHZvaWQgKl9zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICA6OlJ0ZWNFdmVudENvbW06 OlB1c2hTdXBwbGllciAqX3RoaXMgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKQogICAgICApOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBv c2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdF9wdXNo X3N1cHBsaWVyICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAg ICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICAg ICAgc3RhdGljIHZvaWQgZGlzY29ubmVjdF9wdXNoX3N1cHBsaWVyX3NrZWwgKAogICAgICAgIFRB T19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lkICpfdGFvX29iaiwKICAgICAg ICB2b2lkICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKCiAgfTsKCgoKCgoKICBj bGFzcyBfVEFPX1B1c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgOiBwdWJsaWMg dmlydHVhbCA6OlJ0ZWNFdmVudENvbW06Ol9UQU9fUHVzaFN1cHBsaWVyX1Byb3h5X0Jyb2tlcgog IHsKICBwdWJsaWM6CiAgICBfVEFPX1B1c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9r ZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHVzaFN1cHBsaWVyX1N0cmF0ZWdpemVkX1By b3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCA6OlJ0ZWNFdmVudENvbW06Ol9UQU9fUHVz aFN1cHBsaWVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgIDo6UnRlY0V2ZW50Q29t bTo6UHVzaFN1cHBsaWVyICpvYmplY3QsCiAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKICBwcml2YXRlOgoKCiAgICB2b2lkIGNy ZWF0ZV9wcm94eSAoCiAgICAgIGludCBjb2xsb2NhdGlvbl9zdHJhdGVneSwKICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKCgoK ICAgIDo6UnRlY0V2ZW50Q29tbTo6X1RBT19QdXNoU3VwcGxpZXJfUHJveHlfSW1wbAogICAgKnBy b3h5X2NhY2hlX1tUQU9fQ29sbG9jYXRpb25fU3RyYXRlZ2llczo6Q1NfTEFTVF07CgogICAgQUNF X01UX1NZTkNIOjpNVVRFWCBtdXRleF87CgoKCgogIHB1YmxpYzoKICAgIHN0YXRpYyBfVEFPX1B1 c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9fUHVzaFN1cHBsaWVy X1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsKIyAzNTkgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2 ZW50Q29tbVMuaCIKICBjbGFzcyBfVEFPX1B1c2hTdXBwbGllcl9UaHJ1UE9BX1Byb3h5X0ltcGwg OgogICAgcHVibGljIHZpcnR1YWwgOjpSdGVjRXZlbnRDb21tOjpfVEFPX1B1c2hTdXBwbGllcl9Q cm94eV9JbXBsLAogICAgcHVibGljIHZpcnR1YWwgVEFPX1RocnVQT0FfT2JqZWN0X1Byb3h5X0lt cGwKICB7CiAgcHVibGljOgogICAgX1RBT19QdXNoU3VwcGxpZXJfVGhydVBPQV9Qcm94eV9JbXBs ICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX1B1c2hTdXBwbGllcl9UaHJ1UE9BX1Byb3h5X0lt cGwgKHZvaWQpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0X3B1c2hfc3VwcGxpZXIg KAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAg ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCgogIH07CgoKCgoK Cn0KCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9v cmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVNfVC5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50 Q29tbVNfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TX1QuaCIgMgojIDM1ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz L1J0ZWNFdmVudENvbW1TX1QuaCIKbmFtZXNwYWNlIFBPQV9SdGVjRXZlbnRDb21tCnsKCiAgdGVt cGxhdGUgPGNsYXNzIFQ+CiAgY2xhc3MgUHVzaENvbnN1bWVyX3RpZSA6IHB1YmxpYyBQdXNoQ29u c3VtZXIKICB7CiAgcHVibGljOgogICAgUHVzaENvbnN1bWVyX3RpZSAoVCAmdCk7CgogICAgUHVz aENvbnN1bWVyX3RpZSAoVCAmdCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hKTsKCiAgICBQ dXNoQ29uc3VtZXJfdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAgICBQ dXNoQ29uc3VtZXJfdGllIChUICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBDT1JC QTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIH5QdXNoQ29uc3VtZXJfdGllICh2b2lkKTsKCgoK ICAgIFQgKl90aWVkX29iamVjdCAodm9pZCk7CgogICAgdm9pZCBfdGllZF9vYmplY3QgKFQgJm9i aik7CgogICAgdm9pZCBfdGllZF9vYmplY3QgKFQgKm9iaiwgQ09SQkE6OkJvb2xlYW4gcmVsZWFz ZT0xKTsKCiAgICBDT1JCQTo6Qm9vbGVhbiBfaXNfb3duZXIgKHZvaWQpOwoKICAgIHZvaWQgX2lz X293bmVyIChDT1JCQTo6Qm9vbGVhbiBiKTsKCgoKICAgIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRy IF9kZWZhdWx0X1BPQSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgp CiAgICAgICk7CiAgICB2b2lkIHB1c2ggKAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2 ZW50U2V0ICYgZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK ICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgICAg ICB2b2lkIGRpc2Nvbm5lY3RfcHVzaF9jb25zdW1lciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj ZXB0aW9uICk7CgoKCiAgICAgIHByaXZhdGU6CiAgICBUICpwdHJfOwogICAgUG9ydGFibGVTZXJ2 ZXI6OlBPQV92YXIgcG9hXzsKICAgIENPUkJBOjpCb29sZWFuIHJlbF87CgoKICAgIFB1c2hDb25z dW1lcl90aWUgKGNvbnN0IFB1c2hDb25zdW1lcl90aWUgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAo Y29uc3QgUHVzaENvbnN1bWVyX3RpZSAmKTsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAg Y2xhc3MgUHVzaFN1cHBsaWVyX3RpZSA6IHB1YmxpYyBQdXNoU3VwcGxpZXIKICB7CiAgcHVibGlj OgogICAgUHVzaFN1cHBsaWVyX3RpZSAoVCAmdCk7CgogICAgUHVzaFN1cHBsaWVyX3RpZSAoVCAm dCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hKTsKCiAgICBQdXNoU3VwcGxpZXJfdGllIChU ICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAgICBQdXNoU3VwcGxpZXJfdGllIChU ICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBDT1JCQTo6Qm9vbGVhbiByZWxlYXNl PTEpOwoKICAgIH5QdXNoU3VwcGxpZXJfdGllICh2b2lkKTsKCgoKICAgIFQgKl90aWVkX29iamVj dCAodm9pZCk7CgogICAgdm9pZCBfdGllZF9vYmplY3QgKFQgJm9iaik7CgogICAgdm9pZCBfdGll ZF9vYmplY3QgKFQgKm9iaiwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAgICBDT1JCQTo6 Qm9vbGVhbiBfaXNfb3duZXIgKHZvaWQpOwoKICAgIHZvaWQgX2lzX293bmVyIChDT1JCQTo6Qm9v bGVhbiBiKTsKCgoKICAgIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIF9kZWZhdWx0X1BPQSAoCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICB2b2lk IGRpc2Nvbm5lY3RfcHVzaF9zdXBwbGllciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u ICk7CgoKCiAgICAgIHByaXZhdGU6CiAgICBUICpwdHJfOwogICAgUG9ydGFibGVTZXJ2ZXI6OlBP QV92YXIgcG9hXzsKICAgIENPUkJBOjpCb29sZWFuIHJlbF87CgoKICAgIFB1c2hTdXBwbGllcl90 aWUgKGNvbnN0IFB1c2hTdXBwbGllcl90aWUgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3Qg UHVzaFN1cHBsaWVyX3RpZSAmKTsKICB9OwoKfQoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21t U19ULmkiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tU19ULmkiCnRlbXBsYXRlIDxjbGFzcyBU PiBpbmxpbmUKUE9BX1J0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcl90aWU8VD46OlB1c2hDb25z dW1lcl90aWUgKFQgJnQpCiAgICAgICAgOiBwdHJfICgmdCksCiAgICAgICAgICBwb2FfIChQb3J0 YWJsZVNlcnZlcjo6UE9BOjpfbmlsICgpKSwKICAgICAgICAgIHJlbF8gKDApCnt9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfdGllPFQ+ OjpQdXNoQ29uc3VtZXJfdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EpCiAg ICAgICAgOiBwdHJfICgmdCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNlcnZlcjo6UE9BOjpf ZHVwbGljYXRlIChwb2EpKSwKICAgICAgICAgIHJlbF8gKDApCnt9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4gaW5saW5lClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfdGllPFQ+OjpQdXNoQ29u c3VtZXJfdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICAgICAgICA6IHB0cl8g KHRwKSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwgKCkpLAogICAg ICAgICAgcmVsXyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0 ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcl90aWU8VD46OlB1c2hDb25zdW1lcl90aWUgKFQgKnRw LCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EsIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAg ICAgICAgOiBwdHJfICh0cCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNlcnZlcjo6UE9BOjpf ZHVwbGljYXRlIChwb2EpKSwKICAgICAgICAgIHJlbF8gKHJlbGVhc2UpCnt9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfdGllPFQ+Ojp+ UHVzaENvbnN1bWVyX3RpZSAodm9pZCkKewogIGlmICh0aGlzLT5yZWxfKSBkZWxldGUgdGhpcy0+ cHRyXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBUICoKUE9BX1J0ZWNFdmVudENvbW06 OlB1c2hDb25zdW1lcl90aWU8VD46Ol90aWVkX29iamVjdCAodm9pZCkKewogIHJldHVybiB0aGlz LT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENv bW06OlB1c2hDb25zdW1lcl90aWU8VD46Ol90aWVkX29iamVjdCAoVCAmb2JqKQp7CiAgaWYgKHRo aXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAmb2JqOwogIHRoaXMt PnJlbF8gPSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVu dENvbW06OlB1c2hDb25zdW1lcl90aWU8VD46Ol90aWVkX29iamVjdCAoVCAqb2JqLCBDT1JCQTo6 Qm9vbGVhbiByZWxlYXNlKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwog IHRoaXMtPnB0cl8gPSBvYmo7CiAgdGhpcy0+cmVsXyA9IHJlbGVhc2U7Cn0KCnRlbXBsYXRlIDxj bGFzcyBUPiBpbmxpbmUgQ09SQkE6OkJvb2xlYW4KUE9BX1J0ZWNFdmVudENvbW06OlB1c2hDb25z dW1lcl90aWU8VD46Ol9pc19vd25lciAodm9pZCkKewogIHJldHVybiB0aGlzLT5yZWxfOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENvbW06OlB1c2hDb25z dW1lcl90aWU8VD46Ol9pc19vd25lciAoQ09SQkE6OkJvb2xlYW4gYikKewogIHRoaXMtPnJlbF8g PSBiOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRy ClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfdGllPFQ+OjpfZGVmYXVsdF9QT0EgKENP UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkKewogIGlm ICghQ09SQkE6OmlzX25pbCAodGhpcy0+cG9hXy5pbiAoKSkpCiAgICByZXR1cm4gUG9ydGFibGVT ZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAodGhpcy0+cG9hXy5pbiAoKSk7CgogIHJldHVybiB0aGlz LT5QdXNoQ29uc3VtZXI6Ol9kZWZhdWx0X1BPQSAoX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKdm9pZCBQT0FfUnRlY0V2ZW50Q29t bTo6UHVzaENvbnN1bWVyX3RpZTxUPjo6cHVzaCAoCiAgICBjb25zdCBSdGVjRXZlbnRDb21tOjpF dmVudFNldCAmIGRhdGEsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkKCgp7 CiAgdGhpcy0+cHRyXy0+cHVzaCAoCmRhdGEsCiAgICBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlCiAgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQp2b2lkIFBPQV9SdGVjRXZl bnRDb21tOjpQdXNoQ29uc3VtZXJfdGllPFQ+OjpkaXNjb25uZWN0X3B1c2hfY29uc3VtZXIgKAog ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg KQogIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApCgoKewogIHRoaXMtPnB0cl8tPmRp c2Nvbm5lY3RfcHVzaF9jb25zdW1lciAoCl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUK ICApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDb21tOjpQdXNo U3VwcGxpZXJfdGllPFQ+OjpQdXNoU3VwcGxpZXJfdGllIChUICZ0KQogICAgICAgIDogcHRyXyAo JnQpLAogICAgICAgICAgcG9hXyAoUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X25pbCAoKSksCiAgICAg ICAgICByZWxfICgwKQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50 Q29tbTo6UHVzaFN1cHBsaWVyX3RpZTxUPjo6UHVzaFN1cHBsaWVyX3RpZSAoVCAmdCwgUG9ydGFi bGVTZXJ2ZXI6OlBPQV9wdHIgcG9hKQogICAgICAgIDogcHRyXyAoJnQpLAogICAgICAgICAgcG9h XyAoUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAocG9hKSksCiAgICAgICAgICByZWxf ICgwKQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q29tbTo6UHVz aFN1cHBsaWVyX3RpZTxUPjo6UHVzaFN1cHBsaWVyX3RpZSAoVCAqdHAsIENPUkJBOjpCb29sZWFu IHJlbGVhc2UpCiAgICAgICAgOiBwdHJfICh0cCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNl cnZlcjo6UE9BOjpfbmlsICgpKSwKICAgICAgICAgIHJlbF8gKHJlbGVhc2UpCnt9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+ OjpQdXNoU3VwcGxpZXJfdGllIChUICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBD T1JCQTo6Qm9vbGVhbiByZWxlYXNlKQogICAgICAgIDogcHRyXyAodHApLAogICAgICAgICAgcG9h XyAoUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAocG9hKSksCiAgICAgICAgICByZWxf IChyZWxlYXNlKQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q29t bTo6UHVzaFN1cHBsaWVyX3RpZTxUPjo6flB1c2hTdXBwbGllcl90aWUgKHZvaWQpCnsKICBpZiAo dGhpcy0+cmVsXykgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxp bmUgVCAqClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+OjpfdGllZF9vYmpl Y3QgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlu bGluZSB2b2lkClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+OjpfdGllZF9v YmplY3QgKFQgJm9iaikKewogIGlmICh0aGlzLT5yZWxfKSBkZWxldGUgdGhpcy0+cHRyXzsKICB0 aGlzLT5wdHJfID0gJm9iajsKICB0aGlzLT5yZWxfID0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+ IGlubGluZSB2b2lkClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+OjpfdGll ZF9vYmplY3QgKFQgKm9iaiwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKewogIGlmICh0aGlzLT5y ZWxfKSBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gb2JqOwogIHRoaXMtPnJlbF8g PSByZWxlYXNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIENPUkJBOjpCb29sZWFuClBP QV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+OjpfaXNfb3duZXIgKHZvaWQpCnsK ICByZXR1cm4gdGhpcy0+cmVsXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkClBP QV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+OjpfaXNfb3duZXIgKENPUkJBOjpC b29sZWFuIGIpCnsKICB0aGlzLT5yZWxfID0gYjsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGlu ZSBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0cgpQT0FfUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVy X3RpZTxUPjo6X2RlZmF1bHRfUE9BIChDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUpCnsKICBpZiAoIUNPUkJBOjppc19uaWwgKHRoaXMtPnBvYV8uaW4g KCkpKQogICAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHRoaXMtPnBv YV8uaW4gKCkpOwoKICByZXR1cm4gdGhpcy0+UHVzaFN1cHBsaWVyOjpfZGVmYXVsdF9QT0EgKF9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s aW5lCnZvaWQgUE9BX1J0ZWNFdmVudENvbW06OlB1c2hTdXBwbGllcl90aWU8VD46OmRpc2Nvbm5l Y3RfcHVzaF9zdXBwbGllciAoCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkK Cgp7CiAgdGhpcy0+cHRyXy0+ZGlzY29ubmVjdF9wdXNoX3N1cHBsaWVyICgKX0FDRV9DT1JCQV9F bnZpcm9ubWVudF92YXJpYWJsZQogICk7Cn0KIyAxNTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVNfVC5o IiAyCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVNfVC5jcHAiIDEKIyAyNSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj RXZlbnRDb21tU19ULmNwcCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TX1QuaCIgMQojIDI2ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJz dmNzL1J0ZWNFdmVudENvbW1TX1QuY3BwIiAyCiMgMTYwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TX1Qu aCIgMgojIDE3MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tU19ULmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE3MiAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj RXZlbnRDb21tU19ULmgiIDIKIyAzODggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVMuaCIgMgoKCiMgMSAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Ji c3Zjcy9SdGVjRXZlbnRDb21tUy5pIiAxCiMgMzkxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TLmgiIDIK IyA0MDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz dmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgNDAyICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENv bW1TLmgiIDIKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TLmgiIDIKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz L1J0ZWNCYXNlUy5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTLmgiCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl Y0Jhc2VTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNCYXNlQy5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VD LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3By ZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDEKIyAyNyAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj QmFzZUMuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9zdmNfdXRpbHNfZXhwb3J0LmgiIDEKIyAzMyAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj cy9SdGVjQmFzZUMuaCIgMgojIDU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNCYXNlQy5oIgpuYW1lc3BhY2UgUnRlY0Jh c2UKewogIGVudW0gRGVwZW5kZW5jeV9UeXBlX3QKICB7CiAgICBPTkVfV0FZX0NBTEwsCiAgICBU V09fV0FZX0NBTEwKICB9OwoKICB0eXBlZGVmIERlcGVuZGVuY3lfVHlwZV90ICZEZXBlbmRlbmN5 X1R5cGVfdF9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0RlcGVuZGVuY3lf VHlwZV90OwoKICB0eXBlZGVmIENPUkJBOjpMb25nIGhhbmRsZV90OwogIHR5cGVkZWYgQ09SQkE6 Okxvbmdfb3V0IGhhbmRsZV90X291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf aGFuZGxlX3Q7CgogIHN0cnVjdCBEZXBlbmRlbmN5X0luZm87CiAgY2xhc3MgRGVwZW5kZW5jeV9J bmZvX3ZhcjsKCiAgc3RydWN0IERlcGVuZGVuY3lfSW5mbwogIHsKCgogICAgdHlwZWRlZiBEZXBl bmRlbmN5X0luZm9fdmFyIF92YXJfdHlwZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVz dHJ1Y3RvciAodm9pZCopOwoKICAgIFJ0ZWNCYXNlOjpEZXBlbmRlbmN5X1R5cGVfdCBkZXBlbmRl bmN5X3R5cGU7CiAgICBDT1JCQTo6TG9uZyBudW1iZXJfb2ZfY2FsbHM7CiAgICBSdGVjQmFzZTo6 aGFuZGxlX3QgcnRfaW5mbzsKCiAgfTsKCiAgY2xhc3MgRGVwZW5kZW5jeV9JbmZvX3ZhcgogIHsK ICBwdWJsaWM6CiAgICBEZXBlbmRlbmN5X0luZm9fdmFyICh2b2lkKTsKICAgIERlcGVuZGVuY3lf SW5mb192YXIgKERlcGVuZGVuY3lfSW5mbyAqKTsKICAgIERlcGVuZGVuY3lfSW5mb192YXIgKGNv bnN0IERlcGVuZGVuY3lfSW5mb192YXIgJik7CgogICAgRGVwZW5kZW5jeV9JbmZvX3ZhciAoY29u c3QgRGVwZW5kZW5jeV9JbmZvICYpOwogICAgfkRlcGVuZGVuY3lfSW5mb192YXIgKHZvaWQpOwoK ICAgIERlcGVuZGVuY3lfSW5mb192YXIgJm9wZXJhdG9yPSAoRGVwZW5kZW5jeV9JbmZvICopOwog ICAgRGVwZW5kZW5jeV9JbmZvX3ZhciAmb3BlcmF0b3I9IChjb25zdCBEZXBlbmRlbmN5X0luZm9f dmFyICYpOwoKICAgIERlcGVuZGVuY3lfSW5mb192YXIgJm9wZXJhdG9yPSAoY29uc3QgRGVwZW5k ZW5jeV9JbmZvICYpOwogICAgRGVwZW5kZW5jeV9JbmZvICpvcGVyYXRvci0+ICh2b2lkKTsKICAg IGNvbnN0IERlcGVuZGVuY3lfSW5mbyAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3Bl cmF0b3IgY29uc3QgRGVwZW5kZW5jeV9JbmZvICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIERlcGVu ZGVuY3lfSW5mbyAmKCk7CiAgICBvcGVyYXRvciBEZXBlbmRlbmN5X0luZm8gJigpIGNvbnN0OwoK CiAgICBjb25zdCBEZXBlbmRlbmN5X0luZm8gJmluICh2b2lkKSBjb25zdDsKICAgIERlcGVuZGVu Y3lfSW5mbyAmaW5vdXQgKHZvaWQpOwogICAgRGVwZW5kZW5jeV9JbmZvICZvdXQgKHZvaWQpOwog ICAgRGVwZW5kZW5jeV9JbmZvIF9yZXRuICh2b2lkKTsKICAgIERlcGVuZGVuY3lfSW5mbyAqcHRy ICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIERlcGVuZGVuY3lfSW5mbyAqcHRyXzsKICB9 OwoKICB0eXBlZGVmIERlcGVuZGVuY3lfSW5mbyAmRGVwZW5kZW5jeV9JbmZvX291dDsKCiAgZXh0 ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0RlcGVuZGVuY3lfSW5mbzsKCiAgdHlwZWRlZiBD T1JCQTo6TG9uZyBPU19Qcmlvcml0eTsKICB0eXBlZGVmIENPUkJBOjpMb25nX291dCBPU19Qcmlv cml0eV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX09TX1ByaW9yaXR5OwoK ICB0eXBlZGVmIENPUkJBOjpMb25nIFByZWVtcHRpb25fU3VicHJpb3JpdHlfdDsKICB0eXBlZGVm IENPUkJBOjpMb25nX291dCBQcmVlbXB0aW9uX1N1YnByaW9yaXR5X3Rfb3V0OwogIGV4dGVybiBD T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19QcmVlbXB0aW9uX1N1YnByaW9yaXR5X3Q7CgogIHR5cGVk ZWYgQ09SQkE6OkxvbmcgUHJlZW1wdGlvbl9Qcmlvcml0eV90OwogIHR5cGVkZWYgQ09SQkE6Okxv bmdfb3V0IFByZWVtcHRpb25fUHJpb3JpdHlfdF9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29k ZV9wdHIgX3RjX1ByZWVtcHRpb25fUHJpb3JpdHlfdDsKCgp9CgoKICAgICAgICAgICAgICAgICAg ICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjQmFzZTo6RGVwZW5kZW5jeV9U eXBlX3QpOwogICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAo Y29uc3QgQ09SQkE6OkFueSAmLCBSdGVjQmFzZTo6RGVwZW5kZW5jeV9UeXBlX3QgJik7CiAgICAg ICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRl Y0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAmKTsKICAgICAgICAgICAgICAgICAgICAgdm9pZCBvcGVy YXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvKik7CiAgICAg ICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6 QW55ICYsIFJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm8gKiYpOwogICAgICAgICAgICAgICAgICAg ICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBS dGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvIComKTsKIyAxNjAgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VDLmgiCiMg MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mv b3Jic3Zjcy9SdGVjQmFzZUMuaSIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNCYXNlQy5pIgppbmxpbmUKUnRl Y0Jhc2U6OkRlcGVuZGVuY3lfSW5mb192YXI6OkRlcGVuZGVuY3lfSW5mb192YXIgKHZvaWQpCiAg OiBwdHJfICgwKQp7fQoKaW5saW5lClJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjpEZXBl bmRlbmN5X0luZm9fdmFyIChEZXBlbmRlbmN5X0luZm8gKnApCiAgOiBwdHJfIChwKQp7fQoKaW5s aW5lClJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjpEZXBlbmRlbmN5X0luZm9fdmFyIChj b25zdCA6OlJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyICZwKQp7CiAgaWYgKHAucHRyXykK ICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OlJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0lu Zm8gKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRp b24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJf ID0gMDsKfQoKCmlubGluZQpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvX3Zhcjo6RGVwZW5kZW5j eV9JbmZvX3ZhciAoY29uc3QgOjpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvICZwKQp7CiAgZG8g eyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAocCk7 IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsg cmV0dXJuOyB9IH0gd2hpbGUgKDApOwp9CgppbmxpbmUKUnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5m b192YXI6On5EZXBlbmRlbmN5X0luZm9fdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87 Cn0KCmlubGluZSBSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvX3ZhciAmClJ0ZWNCYXNlOjpEZXBl bmRlbmN5X0luZm9fdmFyOjpvcGVyYXRvcj0gKERlcGVuZGVuY3lfSW5mbyAqcCkKewogIGRlbGV0 ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l IDo6UnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mb192YXIgJgpSdGVjQmFzZTo6RGVwZW5kZW5jeV9J bmZvX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFy ICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAg ICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8g PSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIERlcGVuZGVuY3lf SW5mbyAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IERlcGVuZGVuY3lfSW5mbyAoKnAucHRy Xyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgRGVwZW5kZW5jeV9JbmZvICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAgICAgZGVl cF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1wOwogICAg ICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9 CgogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvX3Zh ciAmClJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6UnRl Y0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAmcCkKewogIGlmICh0aGlzLT5wdHJfICE9ICZwKQogIHsK ICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6 UnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAocCk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7 ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuICp0aGlzOyB9IH0gd2hpbGUgKDAp OwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OlJ0ZWNCYXNlOjpEZXBlbmRl bmN5X0luZm8gKgpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvX3Zhcjo6b3BlcmF0b3ItPiAodm9p ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjQmFzZTo6RGVw ZW5kZW5jeV9JbmZvICoKUnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mb192YXI6Om9wZXJhdG9yLT4g KHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNCYXNlOjpEZXBlbmRl bmN5X0luZm9fdmFyOjpvcGVyYXRvciBjb25zdCA6OlJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm8g JigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjQmFzZTo6RGVw ZW5kZW5jeV9JbmZvX3Zhcjo6b3BlcmF0b3IgOjpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvICYo KQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0Jhc2U6OkRlcGVuZGVuY3lf SW5mb192YXI6Om9wZXJhdG9yIDo6UnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAmKCkgY29uc3QK ewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IDo6UnRlY0Jhc2U6OkRlcGVu ZGVuY3lfSW5mbyAmClJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjppbiAodm9pZCkgY29u c3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0Jhc2U6OkRlcGVuZGVu Y3lfSW5mbyAmClJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjppbm91dCAodm9pZCkKewog IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OlJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0lu Zm8gJgpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvX3Zhcjo6b3V0ICh2b2lkKQp7CiAgcmV0dXJu ICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvClJ0ZWNC YXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjpfcmV0biAodm9pZCkKewogIHJldHVybiAqdGhpcy0+ cHRyXzsKfQoKaW5saW5lIDo6UnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAqClJ0ZWNCYXNlOjpE ZXBlbmRlbmN5X0luZm9fdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRy XzsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0 cm0sIGNvbnN0IFJ0ZWNCYXNlOjpEZXBlbmRlbmN5X1R5cGVfdCAmX3Rhb19lbnVtdmFsKQp7CiAg Q09SQkE6OlVMb25nIF90YW9fdGVtcCA9IF90YW9fZW51bXZhbDsKICByZXR1cm4gc3RybSA8PCBf dGFvX3RlbXA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRD RFIgJnN0cm0sIFJ0ZWNCYXNlOjpEZXBlbmRlbmN5X1R5cGVfdCAmX3Rhb19lbnVtdmFsKQp7CiAg Q09SQkE6OlVMb25nIF90YW9fdGVtcCA9IDA7CiAgQ09SQkE6OkJvb2xlYW4gX3Rhb19yZXN1bHQg PSBzdHJtID4+IF90YW9fdGVtcDsKCiAgaWYgKF90YW9fcmVzdWx0ID09IDEpCiAgICB7CiAgICAg IF90YW9fZW51bXZhbCA9IHN0YXRpY19jYXN0PFJ0ZWNCYXNlOjpEZXBlbmRlbmN5X1R5cGVfdD4g KF90YW9fdGVtcCk7CiAgICB9CgogIHJldHVybiBfdGFvX3Jlc3VsdDsKfQoKaW5saW5lIENPUkJB OjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IFJ0ZWNCYXNl OjpEZXBlbmRlbmN5X0luZm8gJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPDwg X3Rhb19hZ2dyZWdhdGUuZGVwZW5kZW5jeV90eXBlKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dy ZWdhdGUubnVtYmVyX29mX2NhbGxzKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUucnRf aW5mbykKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlubGluZSBD T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIFJ0ZWNCYXNlOjpE ZXBlbmRlbmN5X0luZm8gJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPj4gX3Rh b19hZ2dyZWdhdGUuZGVwZW5kZW5jeV90eXBlKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdh dGUubnVtYmVyX29mX2NhbGxzKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUucnRfaW5m bykKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KIyAxNjEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv UnRlY0Jhc2VDLmgiIDIKIyAxNzEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VDLmgiCiMgMSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE3MiAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9S dGVjQmFzZUMuaCIgMgojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNCYXNlUy5oIiAyCgoKCgoKCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZl ci9Qb3J0YWJsZVNlcnZlci5oIiAxCiMgMzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTLmgiIDIKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2Vy dmVyL1NlcnZhbnRfQmFzZS5oIiAxCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTLmgiIDIKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2Vy dmVyL0NvbGxvY2F0ZWRfT2JqZWN0LmgiIDEKIyAzNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVMuaCIgMgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFi bGVTZXJ2ZXIvVGhydVBPQV9PYmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMzcgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jh c2VTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vdGFvL1BvcnRhYmxlU2VydmVyL0RpcmVjdF9PYmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMzgg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y YnN2Y3MvUnRlY0Jhc2VTLmgiIDIKIyA0OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVMuaCIKbmFtZXNwYWNlIFBP QV9SdGVjQmFzZQp7Cn0KCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTX1QuaCIgMQojIDI1ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0 ZWNCYXNlU19ULmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTX1QuaCIgMgojIDM1ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0 ZWNCYXNlU19ULmgiCm5hbWVzcGFjZSBQT0FfUnRlY0Jhc2UKewp9CgoKCgoKIyAxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0 ZWNCYXNlU19ULmkiIDEKIyA0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVNfVC5oIiAyCgoKCgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv UnRlY0Jhc2VTX1QuY3BwIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTX1QuY3BwIgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv UnRlY0Jhc2VTX1QuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNCYXNlU19ULmNwcCIgMgojIDQ5ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz L1J0ZWNCYXNlU19ULmgiIDIKIyA2MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVNfVC5oIgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA2MSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj cy9SdGVjQmFzZVNfVC5oIiAyCiMgNTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTLmgiIDIKCgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv UnRlY0Jhc2VTLmkiIDEKIyA1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVMuaCIgMgojIDY4ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNC YXNlUy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj ZS9wb3N0LmgiIDEKIyA2OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVMuaCIgMgojIDI4ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVu dENoYW5uZWxBZG1pblMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIiAx CiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz dmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNF dmVudENoYW5uZWxBZG1pbkMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5u ZWxBZG1pbkMuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FdmVudC9ldmVudF9leHBvcnQuaCIgMQojIDMz ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29t bUMuaCIgMQojIDM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIgMgojIDEgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv UnRlY0Jhc2VDLmgiIDEKIyAzNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiIDIKIyA1 OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mv b3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCm5hbWVzcGFjZSBSdGVjRXZlbnRDaGFu bmVsQWRtaW4KewoKCgoKICBjbGFzcyBBbHJlYWR5Q29ubmVjdGVkIDogcHVibGljIENPUkJBOjpV c2VyRXhjZXB0aW9uCiAgewogIHB1YmxpYzoKCiAgICBBbHJlYWR5Q29ubmVjdGVkICh2b2lkKTsK CgogICAgQWxyZWFkeUNvbm5lY3RlZCAoY29uc3QgQWxyZWFkeUNvbm5lY3RlZCAmKTsKCgogICAg fkFscmVhZHlDb25uZWN0ZWQgKHZvaWQpOwoKCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0 cnVjdG9yICh2b2lkKik7CgogICAgQWxyZWFkeUNvbm5lY3RlZCAmb3BlcmF0b3I9IChjb25zdCBB bHJlYWR5Q29ubmVjdGVkICYpOwoKICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAg IHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAg ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lk IF90YW9fZGVjb2RlICgKICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJgogICAgICApOwoKICAgIHN0YXRpYyBBbHJlYWR5Q29ubmVjdGVkICpfZG93bmNh c3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAq X2FsbG9jICh2b2lkKTsKICAgIHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9p ZCkgY29uc3Q7CiAgfTsKCmV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19BbHJlYWR5Q29u bmVjdGVkOwojIDExMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgVHlw ZUVycm9yIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgewogIHB1YmxpYzoKCiAgICBU eXBlRXJyb3IgKHZvaWQpOwoKCiAgICBUeXBlRXJyb3IgKGNvbnN0IFR5cGVFcnJvciAmKTsKCgog ICAgflR5cGVFcnJvciAodm9pZCk7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0 b3IgKHZvaWQqKTsKCiAgICBUeXBlRXJyb3IgJm9wZXJhdG9yPSAoY29uc3QgVHlwZUVycm9yICYp OwoKICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgIHZpcnR1YWwgdm9pZCBfdGFv X2VuY29kZSAoCiAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAgIENPUkJBOjpFbnZpcm9u bWVudCAmCiAgICAgICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAg ICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAp OwoKICAgIHN0YXRpYyBUeXBlRXJyb3IgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsK CgoKICAgIHN0YXRpYyBDT1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwogICAgdmlydHVh bCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsKICB9OwoKZXh0ZXJuIENP UkJBOjpUeXBlQ29kZV9wdHIgX3RjX1R5cGVFcnJvcjsKCgoKCiAgc3RydWN0IERlcGVuZGVuY3k7 CiAgY2xhc3MgRGVwZW5kZW5jeV92YXI7CgogIHN0cnVjdCBEZXBlbmRlbmN5CiAgewoKCiAgICB0 eXBlZGVmIERlcGVuZGVuY3lfdmFyIF92YXJfdHlwZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19h bnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIFJ0ZWNFdmVudENvbW06OkV2ZW50IGV2ZW50Owog ICAgUnRlY0Jhc2U6OmhhbmRsZV90IHJ0X2luZm87CgogIH07CgogIGNsYXNzIERlcGVuZGVuY3lf dmFyCiAgewogIHB1YmxpYzoKICAgIERlcGVuZGVuY3lfdmFyICh2b2lkKTsKICAgIERlcGVuZGVu Y3lfdmFyIChEZXBlbmRlbmN5ICopOwogICAgRGVwZW5kZW5jeV92YXIgKGNvbnN0IERlcGVuZGVu Y3lfdmFyICYpOwogICAgfkRlcGVuZGVuY3lfdmFyICh2b2lkKTsKCiAgICBEZXBlbmRlbmN5X3Zh ciAmb3BlcmF0b3I9IChEZXBlbmRlbmN5ICopOwogICAgRGVwZW5kZW5jeV92YXIgJm9wZXJhdG9y PSAoY29uc3QgRGVwZW5kZW5jeV92YXIgJik7CiAgICBEZXBlbmRlbmN5ICpvcGVyYXRvci0+ICh2 b2lkKTsKICAgIGNvbnN0IERlcGVuZGVuY3kgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAg IG9wZXJhdG9yIGNvbnN0IERlcGVuZGVuY3kgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgRGVwZW5k ZW5jeSAmKCk7CiAgICBvcGVyYXRvciBEZXBlbmRlbmN5ICYoKSBjb25zdDsKCiAgICBvcGVyYXRv ciBEZXBlbmRlbmN5IComKCk7CgoKICAgIGNvbnN0IERlcGVuZGVuY3kgJmluICh2b2lkKSBjb25z dDsKICAgIERlcGVuZGVuY3kgJmlub3V0ICh2b2lkKTsKICAgIERlcGVuZGVuY3kgKiZvdXQgKHZv aWQpOwogICAgRGVwZW5kZW5jeSAqX3JldG4gKHZvaWQpOwogICAgRGVwZW5kZW5jeSAqcHRyICh2 b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIERlcGVuZGVuY3kgKnB0cl87CiAgfTsKCiAgY2xh c3MgRGVwZW5kZW5jeV9vdXQKICB7CiAgcHVibGljOgogICAgRGVwZW5kZW5jeV9vdXQgKERlcGVu ZGVuY3kgKiYpOwogICAgRGVwZW5kZW5jeV9vdXQgKERlcGVuZGVuY3lfdmFyICYpOwogICAgRGVw ZW5kZW5jeV9vdXQgKGNvbnN0IERlcGVuZGVuY3lfb3V0ICYpOwogICAgRGVwZW5kZW5jeV9vdXQg Jm9wZXJhdG9yPSAoY29uc3QgRGVwZW5kZW5jeV9vdXQgJik7CiAgICBEZXBlbmRlbmN5X291dCAm b3BlcmF0b3I9IChEZXBlbmRlbmN5ICopOwogICAgb3BlcmF0b3IgRGVwZW5kZW5jeSAqJigpOwog ICAgRGVwZW5kZW5jeSAqJnB0ciAodm9pZCk7CiAgICBEZXBlbmRlbmN5ICpvcGVyYXRvci0+ICh2 b2lkKTsKCiAgcHJpdmF0ZToKICAgIERlcGVuZGVuY3kgKiZwdHJfOwoKICAgIHZvaWQgb3BlcmF0 b3I9IChjb25zdCBEZXBlbmRlbmN5X3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6OlR5cGVD b2RlX3B0ciBfdGNfRGVwZW5kZW5jeTsKCgoKCgoKCiAgY2xhc3MgX1RBT19VbmJvdW5kZWRfU2Vx dWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQKICAgIDogcHVibGljIFRB T19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZQogIHsKICBwdWJsaWM6CgogICAgX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQgKHZvaWQpOwog ICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVu Y3lTZXQgKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsKICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5U2V0ICgKICAgICAgICBDT1JCQTo6VUxv bmcgbWF4aW11bSwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIERlcGVuZGVu Y3kgKmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICAgKTsKICAg IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5 U2V0ICgKICAgICAgICBjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFu bmVsQWRtaW5fRGVwZW5kZW5jeVNldCAmcmhzCiAgICAgICk7CiAgICBfVEFPX1VuYm91bmRlZF9T ZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldCAmb3BlcmF0b3I9ICgK ICAgICAgICBjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRt aW5fRGVwZW5kZW5jeVNldCAmcmhzCiAgICAgICk7CiAgICB2aXJ0dWFsIH5fVEFPX1VuYm91bmRl ZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldCAodm9pZCk7CgoK ICAgIERlcGVuZGVuY3kgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKTsKICAgIGNvbnN0IERl cGVuZGVuY3kgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25zdDsKCgogICAgc3RhdGlj IERlcGVuZGVuY3kgKmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSk7CiAgICBzdGF0aWMgdm9p ZCBmcmVlYnVmIChEZXBlbmRlbmN5ICpidWZmZXIpOwoKCiAgICB2aXJ0dWFsIHZvaWQgX2FsbG9j YXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgICB2aXJ0dWFsIHZvaWQgX2RlYWxs b2NhdGVfYnVmZmVyICh2b2lkKTsKICAgIERlcGVuZGVuY3kgKmdldF9idWZmZXIgKENPUkJBOjpC b29sZWFuIG9ycGhhbiA9IDApOwogICAgY29uc3QgRGVwZW5kZW5jeSAqZ2V0X2J1ZmZlciAodm9p ZCkgY29uc3Q7CiAgICB2b2lkIHJlcGxhY2UgKAogICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAg ICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBEZXBlbmRlbmN5ICpkYXRhLAogICAg ICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UKICAgICAgKTsKICB9OwojIDI3NiAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj RXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgRGVwZW5kZW5jeVNldDsKICBjbGFzcyBEZXBl bmRlbmN5U2V0X3ZhcjsKCgoKCgogIGNsYXNzIERlcGVuZGVuY3lTZXQgOiBwdWJsaWMKCiAgX1RB T19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQK CgoKICB7CiAgcHVibGljOgogICAgRGVwZW5kZW5jeVNldCAodm9pZCk7CiAgICBEZXBlbmRlbmN5 U2V0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgIERlcGVuZGVuY3lTZXQgKAogICAgICAgIENPUkJB OjpVTG9uZyBtYXgsCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBEZXBlbmRl bmN5ICpidWZmZXIsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICAgKTsK ICAgIERlcGVuZGVuY3lTZXQgKGNvbnN0IERlcGVuZGVuY3lTZXQgJik7CiAgICB+RGVwZW5kZW5j eVNldCAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7 CgoKICAgIHR5cGVkZWYgRGVwZW5kZW5jeVNldF92YXIgX3Zhcl90eXBlOwoKCgogIH07CiMgMzIw ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBEZXBlbmRlbmN5U2V0X3Zh cgogIHsKICBwdWJsaWM6CiAgICBEZXBlbmRlbmN5U2V0X3ZhciAodm9pZCk7CiAgICBEZXBlbmRl bmN5U2V0X3ZhciAoRGVwZW5kZW5jeVNldCAqKTsKICAgIERlcGVuZGVuY3lTZXRfdmFyIChjb25z dCBEZXBlbmRlbmN5U2V0X3ZhciAmKTsKICAgIH5EZXBlbmRlbmN5U2V0X3ZhciAodm9pZCk7Cgog ICAgRGVwZW5kZW5jeVNldF92YXIgJm9wZXJhdG9yPSAoRGVwZW5kZW5jeVNldCAqKTsKICAgIERl cGVuZGVuY3lTZXRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IERlcGVuZGVuY3lTZXRfdmFyICYpOwog ICAgRGVwZW5kZW5jeVNldCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBEZXBlbmRlbmN5 U2V0ICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBEZXBlbmRl bmN5U2V0ICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIERlcGVuZGVuY3lTZXQgJigpOwogICAgb3Bl cmF0b3IgRGVwZW5kZW5jeVNldCAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBEZXBlbmRlbmN5U2V0 IComKCk7CgogICAgRGVwZW5kZW5jeSAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7 CiAgICBjb25zdCBEZXBlbmRlbmN5ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBj b25zdDsKCgogICAgY29uc3QgRGVwZW5kZW5jeVNldCAmaW4gKHZvaWQpIGNvbnN0OwogICAgRGVw ZW5kZW5jeVNldCAmaW5vdXQgKHZvaWQpOwogICAgRGVwZW5kZW5jeVNldCAqJm91dCAodm9pZCk7 CiAgICBEZXBlbmRlbmN5U2V0ICpfcmV0biAodm9pZCk7CiAgICBEZXBlbmRlbmN5U2V0ICpwdHIg KHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgRGVwZW5kZW5jeVNldCAqcHRyXzsKICB9Owoj IDM1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgRGVwZW5kZW5jeVNl dF9vdXQKICB7CiAgcHVibGljOgogICAgRGVwZW5kZW5jeVNldF9vdXQgKERlcGVuZGVuY3lTZXQg KiYpOwogICAgRGVwZW5kZW5jeVNldF9vdXQgKERlcGVuZGVuY3lTZXRfdmFyICYpOwogICAgRGVw ZW5kZW5jeVNldF9vdXQgKGNvbnN0IERlcGVuZGVuY3lTZXRfb3V0ICYpOwogICAgRGVwZW5kZW5j eVNldF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgRGVwZW5kZW5jeVNldF9vdXQgJik7CiAgICBEZXBl bmRlbmN5U2V0X291dCAmb3BlcmF0b3I9IChEZXBlbmRlbmN5U2V0ICopOwogICAgb3BlcmF0b3Ig RGVwZW5kZW5jeVNldCAqJigpOwogICAgRGVwZW5kZW5jeVNldCAqJnB0ciAodm9pZCk7CiAgICBE ZXBlbmRlbmN5U2V0ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIERlcGVuZGVuY3kgJiBvcGVyYXRv cltdIChDT1JCQTo6VUxvbmcgaW5kZXgpOwoKICBwcml2YXRlOgogICAgRGVwZW5kZW5jeVNldCAq JnB0cl87CgogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IERlcGVuZGVuY3lTZXRfdmFyICYpOwog IH07CgoKCgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19EZXBlbmRlbmN5U2V0OwoK ICBzdHJ1Y3QgQ29uc3VtZXJRT1M7CiAgY2xhc3MgQ29uc3VtZXJRT1NfdmFyOwoKICBzdHJ1Y3Qg Q29uc3VtZXJRT1MKICB7CgoKICAgIHR5cGVkZWYgQ29uc3VtZXJRT1NfdmFyIF92YXJfdHlwZTsK CgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIFJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldCBkZXBlbmRlbmNpZXM7CiAgICBDT1JCQTo6 Qm9vbGVhbiBpc19nYXRld2F5OwoKICB9OwoKICBjbGFzcyBDb25zdW1lclFPU192YXIKICB7CiAg cHVibGljOgogICAgQ29uc3VtZXJRT1NfdmFyICh2b2lkKTsKICAgIENvbnN1bWVyUU9TX3ZhciAo Q29uc3VtZXJRT1MgKik7CiAgICBDb25zdW1lclFPU192YXIgKGNvbnN0IENvbnN1bWVyUU9TX3Zh ciAmKTsKICAgIH5Db25zdW1lclFPU192YXIgKHZvaWQpOwoKICAgIENvbnN1bWVyUU9TX3ZhciAm b3BlcmF0b3I9IChDb25zdW1lclFPUyAqKTsKICAgIENvbnN1bWVyUU9TX3ZhciAmb3BlcmF0b3I9 IChjb25zdCBDb25zdW1lclFPU192YXIgJik7CiAgICBDb25zdW1lclFPUyAqb3BlcmF0b3ItPiAo dm9pZCk7CiAgICBjb25zdCBDb25zdW1lclFPUyAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7Cgog ICAgb3BlcmF0b3IgY29uc3QgQ29uc3VtZXJRT1MgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgQ29u c3VtZXJRT1MgJigpOwogICAgb3BlcmF0b3IgQ29uc3VtZXJRT1MgJigpIGNvbnN0OwoKICAgIG9w ZXJhdG9yIENvbnN1bWVyUU9TIComKCk7CgoKICAgIGNvbnN0IENvbnN1bWVyUU9TICZpbiAodm9p ZCkgY29uc3Q7CiAgICBDb25zdW1lclFPUyAmaW5vdXQgKHZvaWQpOwogICAgQ29uc3VtZXJRT1Mg KiZvdXQgKHZvaWQpOwogICAgQ29uc3VtZXJRT1MgKl9yZXRuICh2b2lkKTsKICAgIENvbnN1bWVy UU9TICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgQ29uc3VtZXJRT1MgKnB0cl87 CiAgfTsKCiAgY2xhc3MgQ29uc3VtZXJRT1Nfb3V0CiAgewogIHB1YmxpYzoKICAgIENvbnN1bWVy UU9TX291dCAoQ29uc3VtZXJRT1MgKiYpOwogICAgQ29uc3VtZXJRT1Nfb3V0IChDb25zdW1lclFP U192YXIgJik7CiAgICBDb25zdW1lclFPU19vdXQgKGNvbnN0IENvbnN1bWVyUU9TX291dCAmKTsK ICAgIENvbnN1bWVyUU9TX291dCAmb3BlcmF0b3I9IChjb25zdCBDb25zdW1lclFPU19vdXQgJik7 CiAgICBDb25zdW1lclFPU19vdXQgJm9wZXJhdG9yPSAoQ29uc3VtZXJRT1MgKik7CiAgICBvcGVy YXRvciBDb25zdW1lclFPUyAqJigpOwogICAgQ29uc3VtZXJRT1MgKiZwdHIgKHZvaWQpOwogICAg Q29uc3VtZXJRT1MgKm9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgQ29uc3VtZXJR T1MgKiZwdHJfOwoKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDb25zdW1lclFPU192YXIgJik7 CiAgfTsKCiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0NvbnN1bWVyUU9TOwoKICBz dHJ1Y3QgUHVibGljYXRpb247CiAgY2xhc3MgUHVibGljYXRpb25fdmFyOwoKICBzdHJ1Y3QgUHVi bGljYXRpb24KICB7CgoKICAgIHR5cGVkZWYgUHVibGljYXRpb25fdmFyIF92YXJfdHlwZTsKCgog ICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIFJ0ZWNFdmVu dENvbW06OkV2ZW50IGV2ZW50OwogICAgUnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyBkZXBlbmRl bmN5X2luZm87CgogIH07CgogIGNsYXNzIFB1YmxpY2F0aW9uX3ZhcgogIHsKICBwdWJsaWM6CiAg ICBQdWJsaWNhdGlvbl92YXIgKHZvaWQpOwogICAgUHVibGljYXRpb25fdmFyIChQdWJsaWNhdGlv biAqKTsKICAgIFB1YmxpY2F0aW9uX3ZhciAoY29uc3QgUHVibGljYXRpb25fdmFyICYpOwogICAg flB1YmxpY2F0aW9uX3ZhciAodm9pZCk7CgogICAgUHVibGljYXRpb25fdmFyICZvcGVyYXRvcj0g KFB1YmxpY2F0aW9uICopOwogICAgUHVibGljYXRpb25fdmFyICZvcGVyYXRvcj0gKGNvbnN0IFB1 YmxpY2F0aW9uX3ZhciAmKTsKICAgIFB1YmxpY2F0aW9uICpvcGVyYXRvci0+ICh2b2lkKTsKICAg IGNvbnN0IFB1YmxpY2F0aW9uICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRv ciBjb25zdCBQdWJsaWNhdGlvbiAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQdWJsaWNhdGlvbiAm KCk7CiAgICBvcGVyYXRvciBQdWJsaWNhdGlvbiAmKCkgY29uc3Q7CgogICAgb3BlcmF0b3IgUHVi bGljYXRpb24gKiYoKTsKCgogICAgY29uc3QgUHVibGljYXRpb24gJmluICh2b2lkKSBjb25zdDsK ICAgIFB1YmxpY2F0aW9uICZpbm91dCAodm9pZCk7CiAgICBQdWJsaWNhdGlvbiAqJm91dCAodm9p ZCk7CiAgICBQdWJsaWNhdGlvbiAqX3JldG4gKHZvaWQpOwogICAgUHVibGljYXRpb24gKnB0ciAo dm9pZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBQdWJsaWNhdGlvbiAqcHRyXzsKICB9OwoKICBj bGFzcyBQdWJsaWNhdGlvbl9vdXQKICB7CiAgcHVibGljOgogICAgUHVibGljYXRpb25fb3V0IChQ dWJsaWNhdGlvbiAqJik7CiAgICBQdWJsaWNhdGlvbl9vdXQgKFB1YmxpY2F0aW9uX3ZhciAmKTsK ICAgIFB1YmxpY2F0aW9uX291dCAoY29uc3QgUHVibGljYXRpb25fb3V0ICYpOwogICAgUHVibGlj YXRpb25fb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFB1YmxpY2F0aW9uX291dCAmKTsKICAgIFB1Ymxp Y2F0aW9uX291dCAmb3BlcmF0b3I9IChQdWJsaWNhdGlvbiAqKTsKICAgIG9wZXJhdG9yIFB1Ymxp Y2F0aW9uIComKCk7CiAgICBQdWJsaWNhdGlvbiAqJnB0ciAodm9pZCk7CiAgICBQdWJsaWNhdGlv biAqb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBQdWJsaWNhdGlvbiAqJnB0cl87 CgogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFB1YmxpY2F0aW9uX3ZhciAmKTsKICB9OwoKICBl eHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUHVibGljYXRpb247CgoKCgoKCgogIGNsYXNz IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlv blNldAogICAgOiBwdWJsaWMgVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlCiAgewogIHB1Ymxp YzoKCiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVi bGljYXRpb25TZXQgKHZvaWQpOwogICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50 Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0IChDT1JCQTo6VUxvbmcgbWF4aW11bSk7CiAgICBf VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVibGljYXRpb25T ZXQgKAogICAgICAgIENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgIENPUkJBOjpVTG9uZyBs ZW5ndGgsCiAgICAgICAgUHVibGljYXRpb24gKmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4g cmVsZWFzZSA9IDAKICAgICAgKTsKICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVu dENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldCAoCiAgICAgICAgY29uc3QgX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0ICZyaHMKICAg ICAgKTsKICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9Q dWJsaWNhdGlvblNldCAmb3BlcmF0b3I9ICgKICAgICAgICBjb25zdCBfVEFPX1VuYm91bmRlZF9T ZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVibGljYXRpb25TZXQgJnJocwogICAgICAp OwogICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFk bWluX1B1YmxpY2F0aW9uU2V0ICh2b2lkKTsKCgogICAgUHVibGljYXRpb24gJm9wZXJhdG9yW10g KENPUkJBOjpVTG9uZyBpKTsKICAgIGNvbnN0IFB1YmxpY2F0aW9uICZvcGVyYXRvcltdIChDT1JC QTo6VUxvbmcgaSkgY29uc3Q7CgoKICAgIHN0YXRpYyBQdWJsaWNhdGlvbiAqYWxsb2NidWYgKENP UkJBOjpVTG9uZyBzaXplKTsKICAgIHN0YXRpYyB2b2lkIGZyZWVidWYgKFB1YmxpY2F0aW9uICpi dWZmZXIpOwoKCiAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25n IGxlbmd0aCk7CiAgICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKTsKICAg IFB1YmxpY2F0aW9uICpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICAg IGNvbnN0IFB1YmxpY2F0aW9uICpnZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKICAgIHZvaWQgcmVw bGFjZSAoCiAgICAgICAgQ09SQkE6OlVMb25nIG1heCwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVu Z3RoLAogICAgICAgIFB1YmxpY2F0aW9uICpkYXRhLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJl bGVhc2UKICAgICAgKTsKICB9OwojIDU3MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgi CiAgY2xhc3MgUHVibGljYXRpb25TZXQ7CiAgY2xhc3MgUHVibGljYXRpb25TZXRfdmFyOwoKCgoK CiAgY2xhc3MgUHVibGljYXRpb25TZXQgOiBwdWJsaWMKCiAgX1RBT19VbmJvdW5kZWRfU2VxdWVu Y2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0CgoKCiAgewogIHB1YmxpYzoK ICAgIFB1YmxpY2F0aW9uU2V0ICh2b2lkKTsKICAgIFB1YmxpY2F0aW9uU2V0IChDT1JCQTo6VUxv bmcgbWF4KTsKICAgIFB1YmxpY2F0aW9uU2V0ICgKICAgICAgICBDT1JCQTo6VUxvbmcgbWF4LAog ICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgUHVibGljYXRpb24gKmJ1ZmZlciwK ICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMAogICAgICApOwogICAgUHVibGljYXRp b25TZXQgKGNvbnN0IFB1YmxpY2F0aW9uU2V0ICYpOwogICAgflB1YmxpY2F0aW9uU2V0ICh2b2lk KTsKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgdHlw ZWRlZiBQdWJsaWNhdGlvblNldF92YXIgX3Zhcl90eXBlOwoKCgogIH07CiMgNjE3ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0 ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBQdWJsaWNhdGlvblNldF92YXIKICB7CiAg cHVibGljOgogICAgUHVibGljYXRpb25TZXRfdmFyICh2b2lkKTsKICAgIFB1YmxpY2F0aW9uU2V0 X3ZhciAoUHVibGljYXRpb25TZXQgKik7CiAgICBQdWJsaWNhdGlvblNldF92YXIgKGNvbnN0IFB1 YmxpY2F0aW9uU2V0X3ZhciAmKTsKICAgIH5QdWJsaWNhdGlvblNldF92YXIgKHZvaWQpOwoKICAg IFB1YmxpY2F0aW9uU2V0X3ZhciAmb3BlcmF0b3I9IChQdWJsaWNhdGlvblNldCAqKTsKICAgIFB1 YmxpY2F0aW9uU2V0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBQdWJsaWNhdGlvblNldF92YXIgJik7 CiAgICBQdWJsaWNhdGlvblNldCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBQdWJsaWNh dGlvblNldCAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgUHVi bGljYXRpb25TZXQgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgUHVibGljYXRpb25TZXQgJigpOwog ICAgb3BlcmF0b3IgUHVibGljYXRpb25TZXQgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgUHVibGlj YXRpb25TZXQgKiYoKTsKCiAgICBQdWJsaWNhdGlvbiAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9u ZyBpbmRleCk7CiAgICBjb25zdCBQdWJsaWNhdGlvbiAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9u ZyBpbmRleCkgY29uc3Q7CgoKICAgIGNvbnN0IFB1YmxpY2F0aW9uU2V0ICZpbiAodm9pZCkgY29u c3Q7CiAgICBQdWJsaWNhdGlvblNldCAmaW5vdXQgKHZvaWQpOwogICAgUHVibGljYXRpb25TZXQg KiZvdXQgKHZvaWQpOwogICAgUHVibGljYXRpb25TZXQgKl9yZXRuICh2b2lkKTsKICAgIFB1Ymxp Y2F0aW9uU2V0ICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgUHVibGljYXRpb25T ZXQgKnB0cl87CiAgfTsKIyA2NTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIgogIGNs YXNzIFB1YmxpY2F0aW9uU2V0X291dAogIHsKICBwdWJsaWM6CiAgICBQdWJsaWNhdGlvblNldF9v dXQgKFB1YmxpY2F0aW9uU2V0IComKTsKICAgIFB1YmxpY2F0aW9uU2V0X291dCAoUHVibGljYXRp b25TZXRfdmFyICYpOwogICAgUHVibGljYXRpb25TZXRfb3V0IChjb25zdCBQdWJsaWNhdGlvblNl dF9vdXQgJik7CiAgICBQdWJsaWNhdGlvblNldF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUHVibGlj YXRpb25TZXRfb3V0ICYpOwogICAgUHVibGljYXRpb25TZXRfb3V0ICZvcGVyYXRvcj0gKFB1Ymxp Y2F0aW9uU2V0ICopOwogICAgb3BlcmF0b3IgUHVibGljYXRpb25TZXQgKiYoKTsKICAgIFB1Ymxp Y2F0aW9uU2V0IComcHRyICh2b2lkKTsKICAgIFB1YmxpY2F0aW9uU2V0ICpvcGVyYXRvci0+ICh2 b2lkKTsKICAgIFB1YmxpY2F0aW9uICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsK CiAgcHJpdmF0ZToKICAgIFB1YmxpY2F0aW9uU2V0IComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9y PSAoY29uc3QgUHVibGljYXRpb25TZXRfdmFyICYpOwogIH07CgoKCgogIGV4dGVybiBDT1JCQTo6 VHlwZUNvZGVfcHRyIF90Y19QdWJsaWNhdGlvblNldDsKCiAgc3RydWN0IFN1cHBsaWVyUU9TOwog IGNsYXNzIFN1cHBsaWVyUU9TX3ZhcjsKCiAgc3RydWN0IFN1cHBsaWVyUU9TCiAgewoKCiAgICB0 eXBlZGVmIFN1cHBsaWVyUU9TX3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9f YW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1Ymxp Y2F0aW9uU2V0IHB1YmxpY2F0aW9uczsKICAgIENPUkJBOjpCb29sZWFuIGlzX2dhdGV3YXk7Cgog IH07CgogIGNsYXNzIFN1cHBsaWVyUU9TX3ZhcgogIHsKICBwdWJsaWM6CiAgICBTdXBwbGllclFP U192YXIgKHZvaWQpOwogICAgU3VwcGxpZXJRT1NfdmFyIChTdXBwbGllclFPUyAqKTsKICAgIFN1 cHBsaWVyUU9TX3ZhciAoY29uc3QgU3VwcGxpZXJRT1NfdmFyICYpOwogICAgflN1cHBsaWVyUU9T X3ZhciAodm9pZCk7CgogICAgU3VwcGxpZXJRT1NfdmFyICZvcGVyYXRvcj0gKFN1cHBsaWVyUU9T ICopOwogICAgU3VwcGxpZXJRT1NfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFN1cHBsaWVyUU9TX3Zh ciAmKTsKICAgIFN1cHBsaWVyUU9TICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IFN1cHBs aWVyUU9TICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBTdXBw bGllclFPUyAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBTdXBwbGllclFPUyAmKCk7CiAgICBvcGVy YXRvciBTdXBwbGllclFPUyAmKCkgY29uc3Q7CgogICAgb3BlcmF0b3IgU3VwcGxpZXJRT1MgKiYo KTsKCgogICAgY29uc3QgU3VwcGxpZXJRT1MgJmluICh2b2lkKSBjb25zdDsKICAgIFN1cHBsaWVy UU9TICZpbm91dCAodm9pZCk7CiAgICBTdXBwbGllclFPUyAqJm91dCAodm9pZCk7CiAgICBTdXBw bGllclFPUyAqX3JldG4gKHZvaWQpOwogICAgU3VwcGxpZXJRT1MgKnB0ciAodm9pZCkgY29uc3Q7 CgogIHByaXZhdGU6CiAgICBTdXBwbGllclFPUyAqcHRyXzsKICB9OwoKICBjbGFzcyBTdXBwbGll clFPU19vdXQKICB7CiAgcHVibGljOgogICAgU3VwcGxpZXJRT1Nfb3V0IChTdXBwbGllclFPUyAq Jik7CiAgICBTdXBwbGllclFPU19vdXQgKFN1cHBsaWVyUU9TX3ZhciAmKTsKICAgIFN1cHBsaWVy UU9TX291dCAoY29uc3QgU3VwcGxpZXJRT1Nfb3V0ICYpOwogICAgU3VwcGxpZXJRT1Nfb3V0ICZv cGVyYXRvcj0gKGNvbnN0IFN1cHBsaWVyUU9TX291dCAmKTsKICAgIFN1cHBsaWVyUU9TX291dCAm b3BlcmF0b3I9IChTdXBwbGllclFPUyAqKTsKICAgIG9wZXJhdG9yIFN1cHBsaWVyUU9TIComKCk7 CiAgICBTdXBwbGllclFPUyAqJnB0ciAodm9pZCk7CiAgICBTdXBwbGllclFPUyAqb3BlcmF0b3It PiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBTdXBwbGllclFPUyAqJnB0cl87CgogICAgdm9pZCBv cGVyYXRvcj0gKGNvbnN0IFN1cHBsaWVyUU9TX3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6 OlR5cGVDb2RlX3B0ciBfdGNfU3VwcGxpZXJRT1M7CgoKCgoKICBjbGFzcyBQcm94eVB1c2hTdXBw bGllcjsKICB0eXBlZGVmIFByb3h5UHVzaFN1cHBsaWVyICpQcm94eVB1c2hTdXBwbGllcl9wdHI7 CgoKCgoKCgogIGNsYXNzIFByb3h5UHVzaFN1cHBsaWVyX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92 YXIKICB7CiAgcHVibGljOgogICAgUHJveHlQdXNoU3VwcGxpZXJfdmFyICh2b2lkKTsKICAgIFBy b3h5UHVzaFN1cHBsaWVyX3ZhciAoUHJveHlQdXNoU3VwcGxpZXJfcHRyIHApIDogcHRyXyAocCkg e30KICAgIFByb3h5UHVzaFN1cHBsaWVyX3ZhciAoY29uc3QgUHJveHlQdXNoU3VwcGxpZXJfdmFy ICYpOwogICAgflByb3h5UHVzaFN1cHBsaWVyX3ZhciAodm9pZCk7CgogICAgUHJveHlQdXNoU3Vw cGxpZXJfdmFyICZvcGVyYXRvcj0gKFByb3h5UHVzaFN1cHBsaWVyX3B0cik7CiAgICBQcm94eVB1 c2hTdXBwbGllcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgUHJveHlQdXNoU3VwcGxpZXJfdmFyICYp OwogICAgUHJveHlQdXNoU3VwcGxpZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAg IG9wZXJhdG9yIGNvbnN0IFByb3h5UHVzaFN1cHBsaWVyX3B0ciAmKCkgY29uc3Q7CiAgICBvcGVy YXRvciBQcm94eVB1c2hTdXBwbGllcl9wdHIgJigpOwoKICAgIFByb3h5UHVzaFN1cHBsaWVyX3B0 ciBpbiAodm9pZCkgY29uc3Q7CiAgICBQcm94eVB1c2hTdXBwbGllcl9wdHIgJmlub3V0ICh2b2lk KTsKICAgIFByb3h5UHVzaFN1cHBsaWVyX3B0ciAmb3V0ICh2b2lkKTsKICAgIFByb3h5UHVzaFN1 cHBsaWVyX3B0ciBfcmV0biAodm9pZCk7CiAgICBQcm94eVB1c2hTdXBwbGllcl9wdHIgcHRyICh2 b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBQcm94eVB1c2hTdXBwbGllcl9wdHIgZHVwbGljYXRl IChQcm94eVB1c2hTdXBwbGllcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoUHJveHlQ dXNoU3VwcGxpZXJfcHRyKTsKICAgIHN0YXRpYyBQcm94eVB1c2hTdXBwbGllcl9wdHIgbmlsICh2 b2lkKTsKICAgIHN0YXRpYyBQcm94eVB1c2hTdXBwbGllcl9wdHIgbmFycm93ICgKICAgICAgICBD T1JCQTo6T2JqZWN0ICosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgKTsKICAg IHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAg UHJveHlQdXNoU3VwcGxpZXJfcHRyIHB0cl87CgogICAgUHJveHlQdXNoU3VwcGxpZXJfdmFyIChj b25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBQcm94eVB1c2hTdXBwbGllcl92YXIgJm9wZXJh dG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgODA2ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVu dENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBQcm94eVB1c2hTdXBwbGllcl9vdXQKICB7CiAgcHVi bGljOgogICAgUHJveHlQdXNoU3VwcGxpZXJfb3V0IChQcm94eVB1c2hTdXBwbGllcl9wdHIgJik7 CiAgICBQcm94eVB1c2hTdXBwbGllcl9vdXQgKFByb3h5UHVzaFN1cHBsaWVyX3ZhciAmKTsKICAg IFByb3h5UHVzaFN1cHBsaWVyX291dCAoY29uc3QgUHJveHlQdXNoU3VwcGxpZXJfb3V0ICYpOwog ICAgUHJveHlQdXNoU3VwcGxpZXJfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFByb3h5UHVzaFN1cHBs aWVyX291dCAmKTsKICAgIFByb3h5UHVzaFN1cHBsaWVyX291dCAmb3BlcmF0b3I9IChjb25zdCBQ cm94eVB1c2hTdXBwbGllcl92YXIgJik7CiAgICBQcm94eVB1c2hTdXBwbGllcl9vdXQgJm9wZXJh dG9yPSAoUHJveHlQdXNoU3VwcGxpZXJfcHRyKTsKICAgIG9wZXJhdG9yIFByb3h5UHVzaFN1cHBs aWVyX3B0ciAmKCk7CiAgICBQcm94eVB1c2hTdXBwbGllcl9wdHIgJnB0ciAodm9pZCk7CiAgICBQ cm94eVB1c2hTdXBwbGllcl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBQ cm94eVB1c2hTdXBwbGllcl9wdHIgJnB0cl87CiAgfTsKIyA4MzEgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hh bm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfSW1wbDsK ICBjbGFzcyBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1JlbW90ZV9Qcm94eV9JbXBsOwogIGNsYXNz IF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyOwogIGNsYXNzIF9UQU9fUHJveHlQ dXNoU3VwcGxpZXJfUmVtb3RlX1Byb3h5X0Jyb2tlcjsKCiAgY2xhc3MgUHJveHlQdXNoU3VwcGxp ZXIKICAgIDogcHVibGljIHZpcnR1YWwgUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVyCiAgewog IHB1YmxpYzoKCiAgICB0eXBlZGVmIFByb3h5UHVzaFN1cHBsaWVyX3B0ciBfcHRyX3R5cGU7CiAg ICB0eXBlZGVmIFByb3h5UHVzaFN1cHBsaWVyX3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMg UHJveHlQdXNoU3VwcGxpZXJfcHRyIF9kdXBsaWNhdGUgKFByb3h5UHVzaFN1cHBsaWVyX3B0ciBv YmopOwoKICAgIHN0YXRpYyBQcm94eVB1c2hTdXBwbGllcl9wdHIgX25hcnJvdyAoCiAgICAgICAg Q09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u bWVudCAoKQogICAgICApOwoKICAgIHN0YXRpYyBQcm94eVB1c2hTdXBwbGllcl9wdHIgX3VuY2hl Y2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICBzdGF0aWMgUHJveHlQ dXNoU3VwcGxpZXJfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKFByb3h5 UHVzaFN1cHBsaWVyX3B0cikwOwogICAgICB9CgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVz dHJ1Y3RvciAodm9pZCopOwoKICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0X3B1c2hfY29uc3VtZXIg KAogICAgICAgIFJ0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcl9wdHIgcHVzaF9jb25zdW1lciwK ICAgICAgICBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICYgcW9zLAog ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRo cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpBbHJl YWR5Q29ubmVjdGVkLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlR5cGVFcnJvciApOwoKCgoKCiAg ICB2aXJ0dWFsIHZvaWQgc3VzcGVuZF9jb25uZWN0aW9uICgKICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F eGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgdm9pZCByZXN1bWVfY29ubmVjdGlvbiAoCiAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K ICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cg KCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu IF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQg Kl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29u c3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0 ZToKICAgIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyICp0aGVfVEFPX1Byb3h5 UHVzaFN1cHBsaWVyX1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIFByb3h5UHVzaFN1 cHBsaWVyIChpbnQgY29sbG9jYXRlZCA9IDApOwoKCgogICAgdmlydHVhbCB2b2lkIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbl9Qcm94eVB1c2hTdXBwbGllcl9zZXR1cF9jb2xsb2NhdGlvbiAoaW50IGNv bGxvY2F0ZWQpOwoKICAgIFByb3h5UHVzaFN1cHBsaWVyICgKICAgICAgICBUQU9fU3R1YiAqb2Jq cmVmLAogICAgICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAg VEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlICpzZXJ2YW50ID0gMAogICAgICApOwoKICAgIGZyaWVu ZCBjbGFzcyBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1JlbW90ZV9Qcm94eV9JbXBsOwogICAgZnJp ZW5kIGNsYXNzIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfVGhydVBPQV9Qcm94eV9JbXBsOwogICAg ZnJpZW5kIGNsYXNzIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfRGlyZWN0X1Byb3h5X0ltcGw7Cgog ICAgdmlydHVhbCB+UHJveHlQdXNoU3VwcGxpZXIgKHZvaWQpOwoKICBwcml2YXRlOgogICAgUHJv eHlQdXNoU3VwcGxpZXIgKGNvbnN0IFByb3h5UHVzaFN1cHBsaWVyICYpOwogICAgdm9pZCBvcGVy YXRvcj0gKGNvbnN0IFByb3h5UHVzaFN1cHBsaWVyICYpOwogIH07CiMgOTQxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNF dmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1Byb3h5 X0ltcGwKICAgIDogcHVibGljIHZpcnR1YWwgUnRlY0V2ZW50Q29tbTo6X1RBT19QdXNoU3VwcGxp ZXJfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5fVEFPX1Byb3h5UHVzaFN1 cHBsaWVyX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmlydHVhbCB2b2lkIGNvbm5lY3RfcHVz aF9jb25zdW1lciAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0 XywKICAgICAgICBSdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfcHRyIHB1c2hfY29uc3VtZXIs CiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHFvcywK ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpU eXBlRXJyb3IgKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kX2Nvbm5lY3Rpb24g KAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAg ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmly dHVhbCB2b2lkIHJlc3VtZV9jb25uZWN0aW9uICgKICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xs b2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl bUV4Y2VwdGlvbiApID0gMDsKCgoKCiAgcHJvdGVjdGVkOgogICAgX1RBT19Qcm94eVB1c2hTdXBw bGllcl9Qcm94eV9JbXBsICh2b2lkKTsKICB9OwojIDk4OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVs QWRtaW5DLmgiCiAgY2xhc3MgX1RBT19Qcm94eVB1c2hTdXBwbGllcl9SZW1vdGVfUHJveHlfSW1w bAogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1Byb3h5X0ltcGws CiAgICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwsCiAgICAg IHB1YmxpYyB2aXJ0dWFsIFJ0ZWNFdmVudENvbW06Ol9UQU9fUHVzaFN1cHBsaWVyX1JlbW90ZV9Q cm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUmVtb3Rl X1Byb3h5X0ltcGwgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHJveHlQdXNoU3VwcGxpZXJf UmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmlydHVhbCB2b2lkIGNvbm5lY3RfcHVz aF9jb25zdW1lciAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0 XywKICAgICAgICBSdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfcHRyIHB1c2hfY29uc3VtZXIs CiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHFvcywK ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpU eXBlRXJyb3IgKTsKCgoKCgogICAgdmlydHVhbCB2b2lkIHN1c3BlbmRfY29ubmVjdGlvbiAoCiAg ICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQog ICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgdm9p ZCByZXN1bWVfY29ubmVjdGlvbiAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90 YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv bm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRp b24gKTsKCgoKCiAgfTsKIyAxMDQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAg IGNsYXNzIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoK ICAgIHZpcnR1YWwgfl9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyICh2b2lkKTsK ICAgIHZpcnR1YWwgX1RBT19Qcm94eVB1c2hTdXBwbGllcl9Qcm94eV9JbXBsICZzZWxlY3RfcHJv eHkgKAogICAgICAgIFByb3h5UHVzaFN1cHBsaWVyICpvYmplY3QsCiAgICAgICAgQ09SQkFfRW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9l bnZpcm9ubWVudCAoKQogICAgICApID0gMDsKCiAgcHJvdGVjdGVkOgogICAgX1RBT19Qcm94eVB1 c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICB9OwojIDEwNjUgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2 ZW50Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUmVtb3Rl X1Byb3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX1Byb3h5UHVzaFN1cHBsaWVy X1Byb3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1Jl bW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHJveHlQdXNoU3Vw cGxpZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCBfVEFPX1Byb3h5 UHVzaFN1cHBsaWVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgICAgUHJveHlQdXNo U3VwcGxpZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9F bnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICBwcml2YXRlOgogICAgX1RBT19Qcm94eVB1 c2hTdXBwbGllcl9SZW1vdGVfUHJveHlfSW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1Ymxp YzoKCgoKICAgIHN0YXRpYyBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1JlbW90ZV9Qcm94eV9Ccm9r ZXIgKnRoZV9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7 CiAgfTsKIyAxMDk1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBleHRlcm4gQ09S QkE6OlR5cGVDb2RlX3B0ciBfdGNfUHJveHlQdXNoU3VwcGxpZXI7CgoKCgoKICBjbGFzcyBQcm94 eVB1c2hDb25zdW1lcjsKICB0eXBlZGVmIFByb3h5UHVzaENvbnN1bWVyICpQcm94eVB1c2hDb25z dW1lcl9wdHI7CgoKCgoKCgogIGNsYXNzIFByb3h5UHVzaENvbnN1bWVyX3ZhciA6IHB1YmxpYyBU QU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgUHJveHlQdXNoQ29uc3VtZXJfdmFyICh2b2lk KTsKICAgIFByb3h5UHVzaENvbnN1bWVyX3ZhciAoUHJveHlQdXNoQ29uc3VtZXJfcHRyIHApIDog cHRyXyAocCkge30KICAgIFByb3h5UHVzaENvbnN1bWVyX3ZhciAoY29uc3QgUHJveHlQdXNoQ29u c3VtZXJfdmFyICYpOwogICAgflByb3h5UHVzaENvbnN1bWVyX3ZhciAodm9pZCk7CgogICAgUHJv eHlQdXNoQ29uc3VtZXJfdmFyICZvcGVyYXRvcj0gKFByb3h5UHVzaENvbnN1bWVyX3B0cik7CiAg ICBQcm94eVB1c2hDb25zdW1lcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgUHJveHlQdXNoQ29uc3Vt ZXJfdmFyICYpOwogICAgUHJveHlQdXNoQ29uc3VtZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNv bnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFByb3h5UHVzaENvbnN1bWVyX3B0ciAmKCkgY29uc3Q7 CiAgICBvcGVyYXRvciBQcm94eVB1c2hDb25zdW1lcl9wdHIgJigpOwoKICAgIFByb3h5UHVzaENv bnN1bWVyX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBQcm94eVB1c2hDb25zdW1lcl9wdHIgJmlu b3V0ICh2b2lkKTsKICAgIFByb3h5UHVzaENvbnN1bWVyX3B0ciAmb3V0ICh2b2lkKTsKICAgIFBy b3h5UHVzaENvbnN1bWVyX3B0ciBfcmV0biAodm9pZCk7CiAgICBQcm94eVB1c2hDb25zdW1lcl9w dHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBQcm94eVB1c2hDb25zdW1lcl9wdHIg ZHVwbGljYXRlIChQcm94eVB1c2hDb25zdW1lcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFz ZSAoUHJveHlQdXNoQ29uc3VtZXJfcHRyKTsKICAgIHN0YXRpYyBQcm94eVB1c2hDb25zdW1lcl9w dHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBQcm94eVB1c2hDb25zdW1lcl9wdHIgbmFycm93ICgK ICAgICAgICBDT1JCQTo6T2JqZWN0ICosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAg ICAgKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2 YXRlOgogICAgUHJveHlQdXNoQ29uc3VtZXJfcHRyIHB0cl87CgogICAgUHJveHlQdXNoQ29uc3Vt ZXJfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBQcm94eVB1c2hDb25zdW1lcl92 YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMTE1NiAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj cy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgUHJveHlQdXNoQ29uc3VtZXJfb3V0 CiAgewogIHB1YmxpYzoKICAgIFByb3h5UHVzaENvbnN1bWVyX291dCAoUHJveHlQdXNoQ29uc3Vt ZXJfcHRyICYpOwogICAgUHJveHlQdXNoQ29uc3VtZXJfb3V0IChQcm94eVB1c2hDb25zdW1lcl92 YXIgJik7CiAgICBQcm94eVB1c2hDb25zdW1lcl9vdXQgKGNvbnN0IFByb3h5UHVzaENvbnN1bWVy X291dCAmKTsKICAgIFByb3h5UHVzaENvbnN1bWVyX291dCAmb3BlcmF0b3I9IChjb25zdCBQcm94 eVB1c2hDb25zdW1lcl9vdXQgJik7CiAgICBQcm94eVB1c2hDb25zdW1lcl9vdXQgJm9wZXJhdG9y PSAoY29uc3QgUHJveHlQdXNoQ29uc3VtZXJfdmFyICYpOwogICAgUHJveHlQdXNoQ29uc3VtZXJf b3V0ICZvcGVyYXRvcj0gKFByb3h5UHVzaENvbnN1bWVyX3B0cik7CiAgICBvcGVyYXRvciBQcm94 eVB1c2hDb25zdW1lcl9wdHIgJigpOwogICAgUHJveHlQdXNoQ29uc3VtZXJfcHRyICZwdHIgKHZv aWQpOwogICAgUHJveHlQdXNoQ29uc3VtZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2 YXRlOgogICAgUHJveHlQdXNoQ29uc3VtZXJfcHRyICZwdHJfOwogIH07CiMgMTE4MSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9S dGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19Qcm94eVB1c2hDb25zdW1lcl9Q cm94eV9JbXBsOwogIGNsYXNzIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0lt cGw7CiAgY2xhc3MgX1RBT19Qcm94eVB1c2hDb25zdW1lcl9Qcm94eV9Ccm9rZXI7CiAgY2xhc3Mg X1RBT19Qcm94eVB1c2hDb25zdW1lcl9SZW1vdGVfUHJveHlfQnJva2VyOwoKICBjbGFzcyBQcm94 eVB1c2hDb25zdW1lcgogICAgOiBwdWJsaWMgdmlydHVhbCBSdGVjRXZlbnRDb21tOjpQdXNoQ29u c3VtZXIKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUHJveHlQdXNoQ29uc3VtZXJfcHRyIF9w dHJfdHlwZTsKICAgIHR5cGVkZWYgUHJveHlQdXNoQ29uc3VtZXJfdmFyIF92YXJfdHlwZTsKCgoK ICAgIHN0YXRpYyBQcm94eVB1c2hDb25zdW1lcl9wdHIgX2R1cGxpY2F0ZSAoUHJveHlQdXNoQ29u c3VtZXJfcHRyIG9iaik7CgogICAgc3RhdGljIFByb3h5UHVzaENvbnN1bWVyX3B0ciBfbmFycm93 ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3RhdGljIFByb3h5UHVzaENvbnN1bWVy X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAog ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwoKICAgIHN0 YXRpYyBQcm94eVB1c2hDb25zdW1lcl9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJl dHVybiAoUHJveHlQdXNoQ29uc3VtZXJfcHRyKTA7CiAgICAgIH0KCiAgICBzdGF0aWMgdm9pZCBf dGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgdmlydHVhbCB2b2lkIGNvbm5lY3RfcHVz aF9zdXBwbGllciAoCiAgICAgICAgUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVyX3B0ciBwdXNo X3N1cHBsaWVyLAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJR T1MgJiBxb3MsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAg ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVs QWRtaW46OkFscmVhZHlDb25uZWN0ZWQgKTsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu IF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQg Kl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29u c3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0 ZToKICAgIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyICp0aGVfVEFPX1Byb3h5 UHVzaENvbnN1bWVyX1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIFByb3h5UHVzaENv bnN1bWVyIChpbnQgY29sbG9jYXRlZCA9IDApOwoKCgogICAgdmlydHVhbCB2b2lkIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbl9Qcm94eVB1c2hDb25zdW1lcl9zZXR1cF9jb2xsb2NhdGlvbiAoaW50IGNv bGxvY2F0ZWQpOwoKICAgIFByb3h5UHVzaENvbnN1bWVyICgKICAgICAgICBUQU9fU3R1YiAqb2Jq cmVmLAogICAgICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAg VEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlICpzZXJ2YW50ID0gMAogICAgICApOwoKICAgIGZyaWVu ZCBjbGFzcyBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9JbXBsOwogICAgZnJp ZW5kIGNsYXNzIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfVGhydVBPQV9Qcm94eV9JbXBsOwogICAg ZnJpZW5kIGNsYXNzIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfRGlyZWN0X1Byb3h5X0ltcGw7Cgog ICAgdmlydHVhbCB+UHJveHlQdXNoQ29uc3VtZXIgKHZvaWQpOwoKICBwcml2YXRlOgogICAgUHJv eHlQdXNoQ29uc3VtZXIgKGNvbnN0IFByb3h5UHVzaENvbnN1bWVyICYpOwogICAgdm9pZCBvcGVy YXRvcj0gKGNvbnN0IFByb3h5UHVzaENvbnN1bWVyICYpOwogIH07CiMgMTI3NCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj RXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19Qcm94eVB1c2hDb25zdW1lcl9Qcm94 eV9JbXBsCiAgICA6IHB1YmxpYyB2aXJ0dWFsIFJ0ZWNFdmVudENvbW06Ol9UQU9fUHVzaENvbnN1 bWVyX1Byb3h5X0ltcGwKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB+X1RBT19Qcm94eVB1c2hD b25zdW1lcl9Qcm94eV9JbXBsICh2b2lkKSB7IH0KICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0X3B1 c2hfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3Rhcmdl dF8sCiAgICAgICAgUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVyX3B0ciBwdXNoX3N1cHBsaWVy LAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgJiBxb3Ms CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBSdGVjRXZl bnRDaGFubmVsQWRtaW46OkFscmVhZHlDb25uZWN0ZWQgKSA9IDA7CgoKCgoKICBwcm90ZWN0ZWQ6 CiAgICBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1Byb3h5X0ltcGwgKHZvaWQpOwogIH07CiMgMTMw NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mv b3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19Qcm94eVB1c2hD b25zdW1lcl9SZW1vdGVfUHJveHlfSW1wbAogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX1Byb3h5 UHVzaENvbnN1bWVyX1Byb3h5X0ltcGwsCiAgICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19SZW1vdGVf T2JqZWN0X1Byb3h5X0ltcGwsCiAgICAgIHB1YmxpYyB2aXJ0dWFsIFJ0ZWNFdmVudENvbW06Ol9U QU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIF9UQU9f UHJveHlQdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpOwoKICAgIHZpcnR1YWwg fl9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAg dmlydHVhbCB2b2lkIGNvbm5lY3RfcHVzaF9zdXBwbGllciAoCiAgICAgICAgQ09SQkFfT2JqZWN0 ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBSdGVjRXZlbnRDb21tOjpQdXNoU3Vw cGxpZXJfcHRyIHB1c2hfc3VwcGxpZXIsCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpTdXBwbGllclFPUyAmIHFvcywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpT eXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCAp OwoKCgoKCiAgfTsKIyAxMzQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNs YXNzIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAg IHZpcnR1YWwgfl9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyICh2b2lkKTsKICAg IHZpcnR1YWwgX1RBT19Qcm94eVB1c2hDb25zdW1lcl9Qcm94eV9JbXBsICZzZWxlY3RfcHJveHkg KAogICAgICAgIFByb3h5UHVzaENvbnN1bWVyICpvYmplY3QsCiAgICAgICAgQ09SQkFfRW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZp cm9ubWVudCAoKQogICAgICApID0gMDsKCiAgcHJvdGVjdGVkOgogICAgX1RBT19Qcm94eVB1c2hD b25zdW1lcl9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICB9OwojIDEzNjQgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50 Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUmVtb3RlX1By b3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1By b3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1JlbW90 ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHJveHlQdXNoQ29uc3Vt ZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCBfVEFPX1Byb3h5UHVz aENvbnN1bWVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgICAgUHJveHlQdXNoQ29u c3VtZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICBwcml2YXRlOgogICAgX1RBT19Qcm94eVB1c2hD b25zdW1lcl9SZW1vdGVfUHJveHlfSW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1YmxpYzoK CgoKICAgIHN0YXRpYyBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIg KnRoZV9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAg fTsKIyAxMzk0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v b3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBleHRlcm4gQ09SQkE6 OlR5cGVDb2RlX3B0ciBfdGNfUHJveHlQdXNoQ29uc3VtZXI7CgoKCgoKICBjbGFzcyBDb25zdW1l ckFkbWluOwogIHR5cGVkZWYgQ29uc3VtZXJBZG1pbiAqQ29uc3VtZXJBZG1pbl9wdHI7CgoKCgoK CgogIGNsYXNzIENvbnN1bWVyQWRtaW5fdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBw dWJsaWM6CiAgICBDb25zdW1lckFkbWluX3ZhciAodm9pZCk7CiAgICBDb25zdW1lckFkbWluX3Zh ciAoQ29uc3VtZXJBZG1pbl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgQ29uc3VtZXJBZG1pbl92 YXIgKGNvbnN0IENvbnN1bWVyQWRtaW5fdmFyICYpOwogICAgfkNvbnN1bWVyQWRtaW5fdmFyICh2 b2lkKTsKCiAgICBDb25zdW1lckFkbWluX3ZhciAmb3BlcmF0b3I9IChDb25zdW1lckFkbWluX3B0 cik7CiAgICBDb25zdW1lckFkbWluX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDb25zdW1lckFkbWlu X3ZhciAmKTsKICAgIENvbnN1bWVyQWRtaW5fcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoK ICAgIG9wZXJhdG9yIGNvbnN0IENvbnN1bWVyQWRtaW5fcHRyICYoKSBjb25zdDsKICAgIG9wZXJh dG9yIENvbnN1bWVyQWRtaW5fcHRyICYoKTsKCiAgICBDb25zdW1lckFkbWluX3B0ciBpbiAodm9p ZCkgY29uc3Q7CiAgICBDb25zdW1lckFkbWluX3B0ciAmaW5vdXQgKHZvaWQpOwogICAgQ29uc3Vt ZXJBZG1pbl9wdHIgJm91dCAodm9pZCk7CiAgICBDb25zdW1lckFkbWluX3B0ciBfcmV0biAodm9p ZCk7CiAgICBDb25zdW1lckFkbWluX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGlj IENvbnN1bWVyQWRtaW5fcHRyIGR1cGxpY2F0ZSAoQ29uc3VtZXJBZG1pbl9wdHIpOwogICAgc3Rh dGljIHZvaWQgcmVsZWFzZSAoQ29uc3VtZXJBZG1pbl9wdHIpOwogICAgc3RhdGljIENvbnN1bWVy QWRtaW5fcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgQ29uc3VtZXJBZG1pbl9wdHIgbmFycm93 ICgKICAgICAgICBDT1JCQTo6T2JqZWN0ICosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYK ICAgICAgKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBw cml2YXRlOgogICAgQ29uc3VtZXJBZG1pbl9wdHIgcHRyXzsKCiAgICBDb25zdW1lckFkbWluX3Zh ciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgQ29uc3VtZXJBZG1pbl92YXIgJm9wZXJh dG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMTQ1NSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZl bnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgQ29uc3VtZXJBZG1pbl9vdXQKICB7CiAgcHVibGlj OgogICAgQ29uc3VtZXJBZG1pbl9vdXQgKENvbnN1bWVyQWRtaW5fcHRyICYpOwogICAgQ29uc3Vt ZXJBZG1pbl9vdXQgKENvbnN1bWVyQWRtaW5fdmFyICYpOwogICAgQ29uc3VtZXJBZG1pbl9vdXQg KGNvbnN0IENvbnN1bWVyQWRtaW5fb3V0ICYpOwogICAgQ29uc3VtZXJBZG1pbl9vdXQgJm9wZXJh dG9yPSAoY29uc3QgQ29uc3VtZXJBZG1pbl9vdXQgJik7CiAgICBDb25zdW1lckFkbWluX291dCAm b3BlcmF0b3I9IChjb25zdCBDb25zdW1lckFkbWluX3ZhciAmKTsKICAgIENvbnN1bWVyQWRtaW5f b3V0ICZvcGVyYXRvcj0gKENvbnN1bWVyQWRtaW5fcHRyKTsKICAgIG9wZXJhdG9yIENvbnN1bWVy QWRtaW5fcHRyICYoKTsKICAgIENvbnN1bWVyQWRtaW5fcHRyICZwdHIgKHZvaWQpOwogICAgQ29u c3VtZXJBZG1pbl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBDb25zdW1l ckFkbWluX3B0ciAmcHRyXzsKICB9OwojIDE0ODAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWlu Qy5oIgogIGNsYXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9JbXBsOwogIGNsYXNzIF9UQU9f Q29uc3VtZXJBZG1pbl9SZW1vdGVfUHJveHlfSW1wbDsKICBjbGFzcyBfVEFPX0NvbnN1bWVyQWRt aW5fUHJveHlfQnJva2VyOwogIGNsYXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9SZW1vdGVfUHJveHlf QnJva2VyOwoKICBjbGFzcyBDb25zdW1lckFkbWluCiAgICA6IHB1YmxpYyB2aXJ0dWFsIENPUkJB X09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBDb25zdW1lckFkbWluX3B0ciBfcHRy X3R5cGU7CiAgICB0eXBlZGVmIENvbnN1bWVyQWRtaW5fdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0 YXRpYyBDb25zdW1lckFkbWluX3B0ciBfZHVwbGljYXRlIChDb25zdW1lckFkbWluX3B0ciBvYmop OwoKICAgIHN0YXRpYyBDb25zdW1lckFkbWluX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6 T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgp CiAgICAgICk7CgogICAgc3RhdGljIENvbnN1bWVyQWRtaW5fcHRyIF91bmNoZWNrZWRfbmFycm93 ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3RhdGljIENvbnN1bWVyQWRtaW5fcHRy IF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKENvbnN1bWVyQWRtaW5fcHRyKTA7 CiAgICAgIH0KCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7Cgog ICAgdmlydHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaFN1cHBsaWVyX3B0ciBv YnRhaW5fcHVzaF9zdXBwbGllciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoK CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6 Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK ICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0 aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5 X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIF9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94 eV9Ccm9rZXIgKnRoZV9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9Ccm9rZXJfOwoKICBwcm90ZWN0 ZWQ6CiAgICBDb25zdW1lckFkbWluIChpbnQgY29sbG9jYXRlZCA9IDApOwoKCgogICAgdmlydHVh bCB2b2lkIFJ0ZWNFdmVudENoYW5uZWxBZG1pbl9Db25zdW1lckFkbWluX3NldHVwX2NvbGxvY2F0 aW9uIChpbnQgY29sbG9jYXRlZCk7CgogICAgQ29uc3VtZXJBZG1pbiAoCiAgICAgICAgVEFPX1N0 dWIgKm9ianJlZiwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiBfdGFvX2NvbGxvY2F0ZWQgPSAwLAog ICAgICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAqc2VydmFudCA9IDAKICAgICAgKTsKCiAg ICBmcmllbmQgY2xhc3MgX1RBT19Db25zdW1lckFkbWluX1JlbW90ZV9Qcm94eV9JbXBsOwogICAg ZnJpZW5kIGNsYXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9UaHJ1UE9BX1Byb3h5X0ltcGw7CiAgICBm cmllbmQgY2xhc3MgX1RBT19Db25zdW1lckFkbWluX0RpcmVjdF9Qcm94eV9JbXBsOwoKICAgIHZp cnR1YWwgfkNvbnN1bWVyQWRtaW4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgQ29uc3VtZXJBZG1p biAoY29uc3QgQ29uc3VtZXJBZG1pbiAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDb25z dW1lckFkbWluICYpOwogIH07CiMgMTU3MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgi CiAgY2xhc3MgX1RBT19Db25zdW1lckFkbWluX1Byb3h5X0ltcGwKICAgIDogcHVibGljIHZpcnR1 YWwgVEFPX09iamVjdF9Qcm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9UQU9f Q29uc3VtZXJBZG1pbl9Qcm94eV9JbXBsICh2b2lkKSB7IH0KICAgIHZpcnR1YWwgUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl9wdHIgb2J0YWluX3B1c2hfc3VwcGxpZXIg KAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAg ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgoKICBwcm90 ZWN0ZWQ6CiAgICBfVEFPX0NvbnN1bWVyQWRtaW5fUHJveHlfSW1wbCAodm9pZCk7CiAgfTsKIyAx NTk3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zj cy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBfVEFPX0NvbnN1bWVy QWRtaW5fUmVtb3RlX1Byb3h5X0ltcGwKICAgIDogcHVibGljIHZpcnR1YWwgX1RBT19Db25zdW1l ckFkbWluX1Byb3h5X0ltcGwsCiAgICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19SZW1vdGVfT2JqZWN0 X1Byb3h5X0ltcGwKICB7CiAgcHVibGljOgogICAgX1RBT19Db25zdW1lckFkbWluX1JlbW90ZV9Q cm94eV9JbXBsICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX0NvbnN1bWVyQWRtaW5fUmVtb3Rl X1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmlydHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46 OlByb3h5UHVzaFN1cHBsaWVyX3B0ciBvYnRhaW5fcHVzaF9zdXBwbGllciAoCiAgICAgICAgQ09S QkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJv dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKCiAgfTsKIyAxNjMwICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNF dmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNsYXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9C cm9rZXIKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB+X1RBT19Db25zdW1lckFkbWluX1Byb3h5 X0Jyb2tlciAodm9pZCk7CiAgICB2aXJ0dWFsIF9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9JbXBs ICZzZWxlY3RfcHJveHkgKAogICAgICAgIENvbnN1bWVyQWRtaW4gKm9iamVjdCwKICAgICAgICBD T1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9IFRBT19k ZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkgPSAwOwoKICBwcm90ZWN0ZWQ6CiAgICBfVEFP X0NvbnN1bWVyQWRtaW5fUHJveHlfQnJva2VyICh2b2lkKTsKCiAgfTsKIyAxNjUzICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0 ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBfVEFPX0NvbnN1bWVyQWRtaW5fUmVtb3Rl X1Byb3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX0NvbnN1bWVyQWRtaW5fUHJv eHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAgIF9UQU9fQ29uc3VtZXJBZG1pbl9SZW1vdGVfUHJv eHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX0NvbnN1bWVyQWRtaW5fUmVtb3Rl X1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCBfVEFPX0NvbnN1bWVyQWRtaW5fUHJv eHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgICAgICBDb25zdW1lckFkbWluICpvYmplY3QsCiAg ICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUK ICAgICAgKTsKCiAgcHJpdmF0ZToKICAgIF9UQU9fQ29uc3VtZXJBZG1pbl9SZW1vdGVfUHJveHlf SW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1YmxpYzoKCgoKICAgIHN0YXRpYyBfVEFPX0Nv bnN1bWVyQWRtaW5fUmVtb3RlX1Byb3h5X0Jyb2tlciAqdGhlX1RBT19Db25zdW1lckFkbWluX1Jl bW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogIH07CiMgMTY4MyAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFu bmVsQWRtaW5DLmgiCiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0NvbnN1bWVyQWRt aW47CgoKCgoKICBjbGFzcyBTdXBwbGllckFkbWluOwogIHR5cGVkZWYgU3VwcGxpZXJBZG1pbiAq U3VwcGxpZXJBZG1pbl9wdHI7CgoKCgoKCgogIGNsYXNzIFN1cHBsaWVyQWRtaW5fdmFyIDogcHVi bGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBTdXBwbGllckFkbWluX3ZhciAodm9p ZCk7CiAgICBTdXBwbGllckFkbWluX3ZhciAoU3VwcGxpZXJBZG1pbl9wdHIgcCkgOiBwdHJfIChw KSB7fQogICAgU3VwcGxpZXJBZG1pbl92YXIgKGNvbnN0IFN1cHBsaWVyQWRtaW5fdmFyICYpOwog ICAgflN1cHBsaWVyQWRtaW5fdmFyICh2b2lkKTsKCiAgICBTdXBwbGllckFkbWluX3ZhciAmb3Bl cmF0b3I9IChTdXBwbGllckFkbWluX3B0cik7CiAgICBTdXBwbGllckFkbWluX3ZhciAmb3BlcmF0 b3I9IChjb25zdCBTdXBwbGllckFkbWluX3ZhciAmKTsKICAgIFN1cHBsaWVyQWRtaW5fcHRyIG9w ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFN1cHBsaWVyQWRtaW5f cHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFN1cHBsaWVyQWRtaW5fcHRyICYoKTsKCiAgICBT dXBwbGllckFkbWluX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBTdXBwbGllckFkbWluX3B0ciAm aW5vdXQgKHZvaWQpOwogICAgU3VwcGxpZXJBZG1pbl9wdHIgJm91dCAodm9pZCk7CiAgICBTdXBw bGllckFkbWluX3B0ciBfcmV0biAodm9pZCk7CiAgICBTdXBwbGllckFkbWluX3B0ciBwdHIgKHZv aWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFN1cHBsaWVyQWRtaW5fcHRyIGR1cGxpY2F0ZSAoU3Vw cGxpZXJBZG1pbl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoU3VwcGxpZXJBZG1pbl9w dHIpOwogICAgc3RhdGljIFN1cHBsaWVyQWRtaW5fcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMg U3VwcGxpZXJBZG1pbl9wdHIgbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0ICosCiAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0 ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgU3VwcGxpZXJBZG1pbl9wdHIgcHRy XzsKCiAgICBTdXBwbGllckFkbWluX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAg U3VwcGxpZXJBZG1pbl92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwog IH07CiMgMTc0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP L29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgU3VwcGxp ZXJBZG1pbl9vdXQKICB7CiAgcHVibGljOgogICAgU3VwcGxpZXJBZG1pbl9vdXQgKFN1cHBsaWVy QWRtaW5fcHRyICYpOwogICAgU3VwcGxpZXJBZG1pbl9vdXQgKFN1cHBsaWVyQWRtaW5fdmFyICYp OwogICAgU3VwcGxpZXJBZG1pbl9vdXQgKGNvbnN0IFN1cHBsaWVyQWRtaW5fb3V0ICYpOwogICAg U3VwcGxpZXJBZG1pbl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgU3VwcGxpZXJBZG1pbl9vdXQgJik7 CiAgICBTdXBwbGllckFkbWluX291dCAmb3BlcmF0b3I9IChjb25zdCBTdXBwbGllckFkbWluX3Zh ciAmKTsKICAgIFN1cHBsaWVyQWRtaW5fb3V0ICZvcGVyYXRvcj0gKFN1cHBsaWVyQWRtaW5fcHRy KTsKICAgIG9wZXJhdG9yIFN1cHBsaWVyQWRtaW5fcHRyICYoKTsKICAgIFN1cHBsaWVyQWRtaW5f cHRyICZwdHIgKHZvaWQpOwogICAgU3VwcGxpZXJBZG1pbl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7 CgogIHByaXZhdGU6CiAgICBTdXBwbGllckFkbWluX3B0ciAmcHRyXzsKICB9OwojIDE3NjkgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2 Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fU3VwcGxpZXJBZG1pbl9Q cm94eV9JbXBsOwogIGNsYXNzIF9UQU9fU3VwcGxpZXJBZG1pbl9SZW1vdGVfUHJveHlfSW1wbDsK ICBjbGFzcyBfVEFPX1N1cHBsaWVyQWRtaW5fUHJveHlfQnJva2VyOwogIGNsYXNzIF9UQU9fU3Vw cGxpZXJBZG1pbl9SZW1vdGVfUHJveHlfQnJva2VyOwoKICBjbGFzcyBTdXBwbGllckFkbWluCiAg ICA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRl ZiBTdXBwbGllckFkbWluX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFN1cHBsaWVyQWRtaW5f dmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBTdXBwbGllckFkbWluX3B0ciBfZHVwbGljYXRl IChTdXBwbGllckFkbWluX3B0ciBvYmopOwoKICAgIHN0YXRpYyBTdXBwbGllckFkbWluX3B0ciBf bmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3RhdGljIFN1cHBsaWVyQWRt aW5fcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmos CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAg c3RhdGljIFN1cHBsaWVyQWRtaW5fcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1 cm4gKFN1cHBsaWVyQWRtaW5fcHRyKTA7CiAgICAgIH0KCiAgICBzdGF0aWMgdm9pZCBfdGFvX2Fu eV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgdmlydHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46 OlByb3h5UHVzaENvbnN1bWVyX3B0ciBvYnRhaW5fcHVzaF9jb25zdW1lciAoCiAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC QTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19h ICgKICAgICAgICBjb25zdCBDT1JCQTo6Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9f UXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hh ciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAg IF9UQU9fU3VwcGxpZXJBZG1pbl9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9fU3VwcGxpZXJBZG1pbl9Q cm94eV9Ccm9rZXJfOwoKICBwcm90ZWN0ZWQ6CiAgICBTdXBwbGllckFkbWluIChpbnQgY29sbG9j YXRlZCA9IDApOwoKCgogICAgdmlydHVhbCB2b2lkIFJ0ZWNFdmVudENoYW5uZWxBZG1pbl9TdXBw bGllckFkbWluX3NldHVwX2NvbGxvY2F0aW9uIChpbnQgY29sbG9jYXRlZCk7CgogICAgU3VwcGxp ZXJBZG1pbiAoCiAgICAgICAgVEFPX1N0dWIgKm9ianJlZiwKICAgICAgICBDT1JCQTo6Qm9vbGVh biBfdGFvX2NvbGxvY2F0ZWQgPSAwLAogICAgICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAq c2VydmFudCA9IDAKICAgICAgKTsKCiAgICBmcmllbmQgY2xhc3MgX1RBT19TdXBwbGllckFkbWlu X1JlbW90ZV9Qcm94eV9JbXBsOwogICAgZnJpZW5kIGNsYXNzIF9UQU9fU3VwcGxpZXJBZG1pbl9U aHJ1UE9BX1Byb3h5X0ltcGw7CiAgICBmcmllbmQgY2xhc3MgX1RBT19TdXBwbGllckFkbWluX0Rp cmVjdF9Qcm94eV9JbXBsOwoKICAgIHZpcnR1YWwgflN1cHBsaWVyQWRtaW4gKHZvaWQpOwoKICBw cml2YXRlOgogICAgU3VwcGxpZXJBZG1pbiAoY29uc3QgU3VwcGxpZXJBZG1pbiAmKTsKICAgIHZv aWQgb3BlcmF0b3I9IChjb25zdCBTdXBwbGllckFkbWluICYpOwogIH07CiMgMTg1OSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9S dGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19TdXBwbGllckFkbWluX1Byb3h5 X0ltcGwKICAgIDogcHVibGljIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9JbXBsCiAgewogIHB1 YmxpYzoKICAgIHZpcnR1YWwgfl9UQU9fU3VwcGxpZXJBZG1pbl9Qcm94eV9JbXBsICh2b2lkKSB7 IH0KICAgIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hDb25zdW1lcl9w dHIgb2J0YWluX3B1c2hfY29uc3VtZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0 ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj ZXB0aW9uICkgPSAwOwoKCgoKICBwcm90ZWN0ZWQ6CiAgICBfVEFPX1N1cHBsaWVyQWRtaW5fUHJv eHlfSW1wbCAodm9pZCk7CiAgfTsKIyAxODg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMu aCIKICBjbGFzcyBfVEFPX1N1cHBsaWVyQWRtaW5fUmVtb3RlX1Byb3h5X0ltcGwKICAgIDogcHVi bGljIHZpcnR1YWwgX1RBT19TdXBwbGllckFkbWluX1Byb3h5X0ltcGwsCiAgICAgIHB1YmxpYyB2 aXJ0dWFsIFRBT19SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwKICB7CiAgcHVibGljOgogICAgX1RB T19TdXBwbGllckFkbWluX1JlbW90ZV9Qcm94eV9JbXBsICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5f VEFPX1N1cHBsaWVyQWRtaW5fUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmlydHVh bCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3B0ciBvYnRhaW5fcHVz aF9jb25zdW1lciAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0 XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoK CiAgfTsKIyAxOTE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNsYXNzIF9U QU9fU3VwcGxpZXJBZG1pbl9Qcm94eV9Ccm9rZXIKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB+ X1RBT19TdXBwbGllckFkbWluX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgICB2aXJ0dWFsIF9UQU9f U3VwcGxpZXJBZG1pbl9Qcm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgICAgIFN1cHBsaWVy QWRtaW4gKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSA9IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkgPSAw OwoKICBwcm90ZWN0ZWQ6CiAgICBfVEFPX1N1cHBsaWVyQWRtaW5fUHJveHlfQnJva2VyICh2b2lk KTsKCiAgfTsKIyAxOTQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy cy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBf VEFPX1N1cHBsaWVyQWRtaW5fUmVtb3RlX1Byb3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVh bCBfVEFPX1N1cHBsaWVyQWRtaW5fUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAgIF9UQU9f U3VwcGxpZXJBZG1pbl9SZW1vdGVfUHJveHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5f VEFPX1N1cHBsaWVyQWRtaW5fUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVh bCBfVEFPX1N1cHBsaWVyQWRtaW5fUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgICAgICBT dXBwbGllckFkbWluICpvYmplY3QsCiAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09S QkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgcHJpdmF0ZToKICAgIF9UQU9fU3Vw cGxpZXJBZG1pbl9SZW1vdGVfUHJveHlfSW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1Ymxp YzoKCgoKICAgIHN0YXRpYyBfVEFPX1N1cHBsaWVyQWRtaW5fUmVtb3RlX1Byb3h5X0Jyb2tlciAq dGhlX1RBT19TdXBwbGllckFkbWluX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogIH07CiMg MTk3MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgZXh0ZXJuIENPUkJBOjpUeXBl Q29kZV9wdHIgX3RjX1N1cHBsaWVyQWRtaW47CgoKCgoKICBjbGFzcyBPYnNlcnZlcjsKICB0eXBl ZGVmIE9ic2VydmVyICpPYnNlcnZlcl9wdHI7CgoKCgoKCgogIGNsYXNzIE9ic2VydmVyX3ZhciA6 IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgT2JzZXJ2ZXJfdmFyICh2b2lk KTsKICAgIE9ic2VydmVyX3ZhciAoT2JzZXJ2ZXJfcHRyIHApIDogcHRyXyAocCkge30KICAgIE9i c2VydmVyX3ZhciAoY29uc3QgT2JzZXJ2ZXJfdmFyICYpOwogICAgfk9ic2VydmVyX3ZhciAodm9p ZCk7CgogICAgT2JzZXJ2ZXJfdmFyICZvcGVyYXRvcj0gKE9ic2VydmVyX3B0cik7CiAgICBPYnNl cnZlcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgT2JzZXJ2ZXJfdmFyICYpOwogICAgT2JzZXJ2ZXJf cHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IE9ic2VydmVy X3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBPYnNlcnZlcl9wdHIgJigpOwoKICAgIE9ic2Vy dmVyX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBPYnNlcnZlcl9wdHIgJmlub3V0ICh2b2lkKTsK ICAgIE9ic2VydmVyX3B0ciAmb3V0ICh2b2lkKTsKICAgIE9ic2VydmVyX3B0ciBfcmV0biAodm9p ZCk7CiAgICBPYnNlcnZlcl9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBPYnNl cnZlcl9wdHIgZHVwbGljYXRlIChPYnNlcnZlcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFz ZSAoT2JzZXJ2ZXJfcHRyKTsKICAgIHN0YXRpYyBPYnNlcnZlcl9wdHIgbmlsICh2b2lkKTsKICAg IHN0YXRpYyBPYnNlcnZlcl9wdHIgbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0ICosCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgKTsKICAgIHN0YXRpYyBDT1JCQTo6T2Jq ZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgT2JzZXJ2ZXJfcHRyIHB0cl87 CgogICAgT2JzZXJ2ZXJfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBPYnNlcnZl cl92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMjAzMyAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Ji c3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgT2JzZXJ2ZXJfb3V0CiAgewog IHB1YmxpYzoKICAgIE9ic2VydmVyX291dCAoT2JzZXJ2ZXJfcHRyICYpOwogICAgT2JzZXJ2ZXJf b3V0IChPYnNlcnZlcl92YXIgJik7CiAgICBPYnNlcnZlcl9vdXQgKGNvbnN0IE9ic2VydmVyX291 dCAmKTsKICAgIE9ic2VydmVyX291dCAmb3BlcmF0b3I9IChjb25zdCBPYnNlcnZlcl9vdXQgJik7 CiAgICBPYnNlcnZlcl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgT2JzZXJ2ZXJfdmFyICYpOwogICAg T2JzZXJ2ZXJfb3V0ICZvcGVyYXRvcj0gKE9ic2VydmVyX3B0cik7CiAgICBvcGVyYXRvciBPYnNl cnZlcl9wdHIgJigpOwogICAgT2JzZXJ2ZXJfcHRyICZwdHIgKHZvaWQpOwogICAgT2JzZXJ2ZXJf cHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgT2JzZXJ2ZXJfcHRyICZwdHJf OwogIH07CiMgMjA1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RB T19PYnNlcnZlcl9Qcm94eV9JbXBsOwogIGNsYXNzIF9UQU9fT2JzZXJ2ZXJfUmVtb3RlX1Byb3h5 X0ltcGw7CiAgY2xhc3MgX1RBT19PYnNlcnZlcl9Qcm94eV9Ccm9rZXI7CiAgY2xhc3MgX1RBT19P YnNlcnZlcl9SZW1vdGVfUHJveHlfQnJva2VyOwoKICBjbGFzcyBPYnNlcnZlcgogICAgOiBwdWJs aWMgdmlydHVhbCBDT1JCQV9PYmplY3QKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgT2JzZXJ2 ZXJfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgT2JzZXJ2ZXJfdmFyIF92YXJfdHlwZTsKCgoK ICAgIHN0YXRpYyBPYnNlcnZlcl9wdHIgX2R1cGxpY2F0ZSAoT2JzZXJ2ZXJfcHRyIG9iaik7Cgog ICAgc3RhdGljIE9ic2VydmVyX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0 ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50 X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7 CgogICAgc3RhdGljIE9ic2VydmVyX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09S QkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu dCAoKQogICAgICApOwoKICAgIHN0YXRpYyBPYnNlcnZlcl9wdHIgX25pbCAodm9pZCkKICAgICAg ewogICAgICAgIHJldHVybiAoT2JzZXJ2ZXJfcHRyKTA7CiAgICAgIH0KCiAgICBzdGF0aWMgdm9p ZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgdmlydHVhbCB2b2lkIHVwZGF0ZV9j b25zdW1lciAoCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFP UyAmIHN1YiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAg KQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwg dm9pZCB1cGRhdGVfc3VwcGxpZXIgKAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6U3VwcGxpZXJRT1MgJiBwdWIsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoK CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6 Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK ICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0 aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5 X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIF9UQU9fT2JzZXJ2ZXJfUHJveHlfQnJv a2VyICp0aGVfVEFPX09ic2VydmVyX1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIE9i c2VydmVyIChpbnQgY29sbG9jYXRlZCA9IDApOwoKCgogICAgdmlydHVhbCB2b2lkIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbl9PYnNlcnZlcl9zZXR1cF9jb2xsb2NhdGlvbiAoaW50IGNvbGxvY2F0ZWQp OwoKICAgIE9ic2VydmVyICgKICAgICAgICBUQU9fU3R1YiAqb2JqcmVmLAogICAgICAgIENPUkJB OjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAgVEFPX0Fic3RyYWN0X1NlcnZh bnRCYXNlICpzZXJ2YW50ID0gMAogICAgICApOwoKICAgIGZyaWVuZCBjbGFzcyBfVEFPX09ic2Vy dmVyX1JlbW90ZV9Qcm94eV9JbXBsOwogICAgZnJpZW5kIGNsYXNzIF9UQU9fT2JzZXJ2ZXJfVGhy dVBPQV9Qcm94eV9JbXBsOwogICAgZnJpZW5kIGNsYXNzIF9UQU9fT2JzZXJ2ZXJfRGlyZWN0X1By b3h5X0ltcGw7CgogICAgdmlydHVhbCB+T2JzZXJ2ZXIgKHZvaWQpOwoKICBwcml2YXRlOgogICAg T2JzZXJ2ZXIgKGNvbnN0IE9ic2VydmVyICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IE9i c2VydmVyICYpOwogIH07CiMgMjE1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAg Y2xhc3MgX1RBT19PYnNlcnZlcl9Qcm94eV9JbXBsCiAgICA6IHB1YmxpYyB2aXJ0dWFsIFRBT19P YmplY3RfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5fVEFPX09ic2VydmVy X1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmlydHVhbCB2b2lkIHVwZGF0ZV9jb25zdW1lciAo CiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBj b25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICYgc3ViLAogICAgICAgIENP UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICAp CiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1 YWwgdm9pZCB1cGRhdGVfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0 ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBw bGllclFPUyAmIHB1YiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24gKSA9IDA7CgoKCgogIHByb3RlY3RlZDoKICAgIF9UQU9fT2JzZXJ2ZXJfUHJveHlfSW1w bCAodm9pZCk7CiAgfTsKIyAyMTk1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBj bGFzcyBfVEFPX09ic2VydmVyX1JlbW90ZV9Qcm94eV9JbXBsCiAgICA6IHB1YmxpYyB2aXJ0dWFs IF9UQU9fT2JzZXJ2ZXJfUHJveHlfSW1wbCwKICAgICAgcHVibGljIHZpcnR1YWwgVEFPX1JlbW90 ZV9PYmplY3RfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICBfVEFPX09ic2VydmVyX1JlbW90 ZV9Qcm94eV9JbXBsICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX09ic2VydmVyX1JlbW90ZV9Q cm94eV9JbXBsICh2b2lkKSB7IH0KICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVfY29uc3VtZXIgKAog ICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgY29u c3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHN1YiwKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQog ICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgdm9p ZCB1cGRhdGVfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFv X3RhcmdldF8sCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFP UyAmIHB1YiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24g KTsKCgoKCiAgfTsKIyAyMjM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNs YXNzIF9UQU9fT2JzZXJ2ZXJfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwg fl9UQU9fT2JzZXJ2ZXJfUHJveHlfQnJva2VyICh2b2lkKTsKICAgIHZpcnR1YWwgX1RBT19PYnNl cnZlcl9Qcm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgICAgIE9ic2VydmVyICpvYmplY3Qs CiAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApID0gMDsKCiAgcHJvdGVjdGVk OgogICAgX1RBT19PYnNlcnZlcl9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICB9OwojIDIyNjEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2 Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fT2JzZXJ2ZXJfUmVtb3Rl X1Byb3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX09ic2VydmVyX1Byb3h5X0Jy b2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX09ic2VydmVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIg KHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fT2JzZXJ2ZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAo dm9pZCk7CgogICAgdmlydHVhbCBfVEFPX09ic2VydmVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94 eSAoCiAgICAgICAgT2JzZXJ2ZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICBwcml2YXRlOgogICAg X1RBT19PYnNlcnZlcl9SZW1vdGVfUHJveHlfSW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1 YmxpYzoKCgoKICAgIHN0YXRpYyBfVEFPX09ic2VydmVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKnRo ZV9UQU9fT2JzZXJ2ZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsKIyAyMjkxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJz dmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0 ciBfdGNfT2JzZXJ2ZXI7CgogIHR5cGVkZWYgQ09SQkE6OlVMb25nIE9ic2VydmVyX0hhbmRsZTsK ICB0eXBlZGVmIENPUkJBOjpVTG9uZ19vdXQgT2JzZXJ2ZXJfSGFuZGxlX291dDsKICBleHRlcm4g Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfT2JzZXJ2ZXJfSGFuZGxlOwoKCgoKCiAgY2xhc3MgRXZl bnRDaGFubmVsOwogIHR5cGVkZWYgRXZlbnRDaGFubmVsICpFdmVudENoYW5uZWxfcHRyOwoKCgoK CgoKICBjbGFzcyBFdmVudENoYW5uZWxfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBw dWJsaWM6CiAgICBFdmVudENoYW5uZWxfdmFyICh2b2lkKTsKICAgIEV2ZW50Q2hhbm5lbF92YXIg KEV2ZW50Q2hhbm5lbF9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgRXZlbnRDaGFubmVsX3ZhciAo Y29uc3QgRXZlbnRDaGFubmVsX3ZhciAmKTsKICAgIH5FdmVudENoYW5uZWxfdmFyICh2b2lkKTsK CiAgICBFdmVudENoYW5uZWxfdmFyICZvcGVyYXRvcj0gKEV2ZW50Q2hhbm5lbF9wdHIpOwogICAg RXZlbnRDaGFubmVsX3ZhciAmb3BlcmF0b3I9IChjb25zdCBFdmVudENoYW5uZWxfdmFyICYpOwog ICAgRXZlbnRDaGFubmVsX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRv ciBjb25zdCBFdmVudENoYW5uZWxfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIEV2ZW50Q2hh bm5lbF9wdHIgJigpOwoKICAgIEV2ZW50Q2hhbm5lbF9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAg RXZlbnRDaGFubmVsX3B0ciAmaW5vdXQgKHZvaWQpOwogICAgRXZlbnRDaGFubmVsX3B0ciAmb3V0 ICh2b2lkKTsKICAgIEV2ZW50Q2hhbm5lbF9wdHIgX3JldG4gKHZvaWQpOwogICAgRXZlbnRDaGFu bmVsX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIEV2ZW50Q2hhbm5lbF9wdHIg ZHVwbGljYXRlIChFdmVudENoYW5uZWxfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKEV2 ZW50Q2hhbm5lbF9wdHIpOwogICAgc3RhdGljIEV2ZW50Q2hhbm5lbF9wdHIgbmlsICh2b2lkKTsK ICAgIHN0YXRpYyBFdmVudENoYW5uZWxfcHRyIG5hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVj dCAqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICk7CiAgICBzdGF0aWMgQ09S QkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIEV2ZW50Q2hhbm5l bF9wdHIgcHRyXzsKCiAgICBFdmVudENoYW5uZWxfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJo cyk7CiAgICBFdmVudENoYW5uZWxfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAm cmhzKTsKICB9OwojIDIzNTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNz IEV2ZW50Q2hhbm5lbF9vdXQKICB7CiAgcHVibGljOgogICAgRXZlbnRDaGFubmVsX291dCAoRXZl bnRDaGFubmVsX3B0ciAmKTsKICAgIEV2ZW50Q2hhbm5lbF9vdXQgKEV2ZW50Q2hhbm5lbF92YXIg Jik7CiAgICBFdmVudENoYW5uZWxfb3V0IChjb25zdCBFdmVudENoYW5uZWxfb3V0ICYpOwogICAg RXZlbnRDaGFubmVsX291dCAmb3BlcmF0b3I9IChjb25zdCBFdmVudENoYW5uZWxfb3V0ICYpOwog ICAgRXZlbnRDaGFubmVsX291dCAmb3BlcmF0b3I9IChjb25zdCBFdmVudENoYW5uZWxfdmFyICYp OwogICAgRXZlbnRDaGFubmVsX291dCAmb3BlcmF0b3I9IChFdmVudENoYW5uZWxfcHRyKTsKICAg IG9wZXJhdG9yIEV2ZW50Q2hhbm5lbF9wdHIgJigpOwogICAgRXZlbnRDaGFubmVsX3B0ciAmcHRy ICh2b2lkKTsKICAgIEV2ZW50Q2hhbm5lbF9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZh dGU6CiAgICBFdmVudENoYW5uZWxfcHRyICZwdHJfOwogIH07CiMgMjM4MSAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZl bnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19FdmVudENoYW5uZWxfUHJveHlfSW1wbDsK ICBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9SZW1vdGVfUHJveHlfSW1wbDsKICBjbGFzcyBfVEFP X0V2ZW50Q2hhbm5lbF9Qcm94eV9Ccm9rZXI7CiAgY2xhc3MgX1RBT19FdmVudENoYW5uZWxfUmVt b3RlX1Byb3h5X0Jyb2tlcjsKCiAgY2xhc3MgRXZlbnRDaGFubmVsCiAgICA6IHB1YmxpYyB2aXJ0 dWFsIENPUkJBX09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBFdmVudENoYW5uZWxf cHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgRXZlbnRDaGFubmVsX3ZhciBfdmFyX3R5cGU7CgoK CiAgICBzdGF0aWMgRXZlbnRDaGFubmVsX3B0ciBfZHVwbGljYXRlIChFdmVudENoYW5uZWxfcHRy IG9iaik7CgogICAgc3RhdGljIEV2ZW50Q2hhbm5lbF9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09S QkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu dCAoKQogICAgICApOwoKICAgIHN0YXRpYyBFdmVudENoYW5uZWxfcHRyIF91bmNoZWNrZWRfbmFy cm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19k ZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3RhdGljIEV2ZW50Q2hhbm5lbF9w dHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoRXZlbnRDaGFubmVsX3B0cikw OwogICAgICB9CgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoK CgoKCiAgICBjbGFzcyBTWU5DSFJPTklaQVRJT05fRVJST1IgOiBwdWJsaWMgQ09SQkE6OlVzZXJF eGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIFNZTkNIUk9OSVpBVElPTl9FUlJPUiAo dm9pZCk7CgoKICAgICAgU1lOQ0hST05JWkFUSU9OX0VSUk9SIChjb25zdCBTWU5DSFJPTklaQVRJ T05fRVJST1IgJik7CgoKICAgICAgflNZTkNIUk9OSVpBVElPTl9FUlJPUiAodm9pZCk7CgoKICAg ICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgICAgU1lOQ0hS T05JWkFUSU9OX0VSUk9SICZvcGVyYXRvcj0gKGNvbnN0IFNZTkNIUk9OSVpBVElPTl9FUlJPUiAm KTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgICAgdmlydHVhbCB2b2lk IF90YW9fZW5jb2RlICgKICAgICAgICAgIFRBT19PdXRwdXRDRFIgJiwKICAgICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmCiAgICAgICAgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFv X2RlY29kZSAoCiAgICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmCiAgICAgICAgKTsKCiAgICAgIHN0YXRpYyBTWU5DSFJPTklaQVRJT05fRVJST1Ig Kl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCgoKICAgICAgc3RhdGljIENPUkJBOjpF eGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICAgIHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0 ciBfdHlwZSAodm9pZCkgY29uc3Q7CiAgICB9OwoKc3RhdGljIENPUkJBOjpUeXBlQ29kZV9wdHIg X3RjX1NZTkNIUk9OSVpBVElPTl9FUlJPUjsKIyAyNDY3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxB ZG1pbkMuaCIKICAgIGNsYXNzIFFPU19FUlJPUiA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlv bgogICAgewogICAgcHVibGljOgoKICAgICAgUU9TX0VSUk9SICh2b2lkKTsKCgogICAgICBRT1Nf RVJST1IgKGNvbnN0IFFPU19FUlJPUiAmKTsKCgogICAgICB+UU9TX0VSUk9SICh2b2lkKTsKCgog ICAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgICBRT1Nf RVJST1IgJm9wZXJhdG9yPSAoY29uc3QgUU9TX0VSUk9SICYpOwoKICAgICAgdmlydHVhbCB2b2lk IF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAg ICAgVEFPX091dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAg ICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRB T19JbnB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoK ICAgICAgc3RhdGljIFFPU19FUlJPUiAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoK CgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgICAgdmly dHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsKICAgIH07CgpzdGF0 aWMgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUU9TX0VSUk9SOwojIDI1MTMgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2 ZW50Q2hhbm5lbEFkbWluQy5oIgogICAgY2xhc3MgU1VCU0NSSVBUSU9OX0VSUk9SIDogcHVibGlj IENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBTVUJTQ1JJUFRJ T05fRVJST1IgKHZvaWQpOwoKCiAgICAgIFNVQlNDUklQVElPTl9FUlJPUiAoY29uc3QgU1VCU0NS SVBUSU9OX0VSUk9SICYpOwoKCiAgICAgIH5TVUJTQ1JJUFRJT05fRVJST1IgKHZvaWQpOwoKCiAg ICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICAgIFNVQlND UklQVElPTl9FUlJPUiAmb3BlcmF0b3I9IChjb25zdCBTVUJTQ1JJUFRJT05fRVJST1IgJik7Cgog ICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFv X2VuY29kZSAoCiAgICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJgogICAgICAgICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNv ZGUgKAogICAgICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJgogICAgICAgICk7CgogICAgICBzdGF0aWMgU1VCU0NSSVBUSU9OX0VSUk9SICpfZG93bmNh c3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAgICAgIHN0YXRpYyBDT1JCQTo6RXhjZXB0aW9u ICpfYWxsb2MgKHZvaWQpOwogICAgICB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUg KHZvaWQpIGNvbnN0OwogICAgfTsKCnN0YXRpYyBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TVUJT Q1JJUFRJT05fRVJST1I7CiMgMjU1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAg ICBjbGFzcyBDT1JSRUxBVElPTl9FUlJPUiA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgog ICAgewogICAgcHVibGljOgoKICAgICAgQ09SUkVMQVRJT05fRVJST1IgKHZvaWQpOwoKCiAgICAg IENPUlJFTEFUSU9OX0VSUk9SIChjb25zdCBDT1JSRUxBVElPTl9FUlJPUiAmKTsKCgogICAgICB+ Q09SUkVMQVRJT05fRVJST1IgKHZvaWQpOwoKCiAgICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rl c3RydWN0b3IgKHZvaWQqKTsKCiAgICAgIENPUlJFTEFUSU9OX0VSUk9SICZvcGVyYXRvcj0gKGNv bnN0IENPUlJFTEFUSU9OX0VSUk9SICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9p ZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1 dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoK ICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAm LAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGlj IENPUlJFTEFUSU9OX0VSUk9SICpfZG93bmNhc3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAg ICAgIHN0YXRpYyBDT1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwogICAgICB2aXJ0dWFs IENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OwogICAgfTsKCnN0YXRpYyBD T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19DT1JSRUxBVElPTl9FUlJPUjsKIyAyNjA1ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0 ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNsYXNzIERJU1BBVENIX0VSUk9SIDogcHVibGlj IENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBESVNQQVRDSF9F UlJPUiAodm9pZCk7CgoKICAgICAgRElTUEFUQ0hfRVJST1IgKGNvbnN0IERJU1BBVENIX0VSUk9S ICYpOwoKCiAgICAgIH5ESVNQQVRDSF9FUlJPUiAodm9pZCk7CgoKICAgICAgc3RhdGljIHZvaWQg X3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgICAgRElTUEFUQ0hfRVJST1IgJm9wZXJh dG9yPSAoY29uc3QgRElTUEFUQ0hfRVJST1IgJik7CgogICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNl ICh2b2lkKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgICBUQU9f T3V0cHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICkgY29u c3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgICAgVEFPX0lucHV0 Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICk7CgogICAgICBz dGF0aWMgRElTUEFUQ0hfRVJST1IgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCgoK ICAgICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICAgIHZpcnR1 YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7CiAgICB9OwoKc3RhdGlj IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0RJU1BBVENIX0VSUk9SOwojIDI2NTEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl Y0V2ZW50Q2hhbm5lbEFkbWluQy5oIgogICAgY2xhc3MgQ0FOVF9BUFBFTkRfT0JTRVJWRVIgOiBw dWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIENBTlRf QVBQRU5EX09CU0VSVkVSICh2b2lkKTsKCgogICAgICBDQU5UX0FQUEVORF9PQlNFUlZFUiAoY29u c3QgQ0FOVF9BUFBFTkRfT0JTRVJWRVIgJik7CgoKICAgICAgfkNBTlRfQVBQRU5EX09CU0VSVkVS ICh2b2lkKTsKCgogICAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7 CgogICAgICBDQU5UX0FQUEVORF9PQlNFUlZFUiAmb3BlcmF0b3I9IChjb25zdCBDQU5UX0FQUEVO RF9PQlNFUlZFUiAmKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgICAg dmlydHVhbCB2b2lkIF90YW9fZW5jb2RlICgKICAgICAgICAgIFRBT19PdXRwdXRDRFIgJiwKICAg ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICAgKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgdm9pZCBfdGFvX2RlY29kZSAoCiAgICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICAg IENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICAgKTsKCiAgICAgIHN0YXRpYyBDQU5UX0FQUEVO RF9PQlNFUlZFUiAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0 aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgICAgdmlydHVhbCBDT1JCQTo6 VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsKICAgIH07CgpzdGF0aWMgQ09SQkE6OlR5 cGVDb2RlX3B0ciBfdGNfQ0FOVF9BUFBFTkRfT0JTRVJWRVI7CiMgMjY5NyAiL2hvbWUvcnJwL3Nj aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZl bnRDaGFubmVsQWRtaW5DLmgiCiAgICBjbGFzcyBDQU5UX1JFTU9WRV9PQlNFUlZFUiA6IHB1Ymxp YyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKICAgICAgQ0FOVF9SRU1P VkVfT0JTRVJWRVIgKHZvaWQpOwoKCiAgICAgIENBTlRfUkVNT1ZFX09CU0VSVkVSIChjb25zdCBD QU5UX1JFTU9WRV9PQlNFUlZFUiAmKTsKCgogICAgICB+Q0FOVF9SRU1PVkVfT0JTRVJWRVIgKHZv aWQpOwoKCiAgICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAg ICAgIENBTlRfUkVNT1ZFX09CU0VSVkVSICZvcGVyYXRvcj0gKGNvbnN0IENBTlRfUkVNT1ZFX09C U0VSVkVSICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0 dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2 b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIENBTlRfUkVNT1ZFX09C U0VSVkVSICpfZG93bmNhc3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAgICAgIHN0YXRpYyBD T1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwogICAgICB2aXJ0dWFsIENPUkJBOjpUeXBl Q29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OwogICAgfTsKCnN0YXRpYyBDT1JCQTo6VHlwZUNv ZGVfcHRyIF90Y19DQU5UX1JFTU9WRV9PQlNFUlZFUjsKCgoKCiAgICB2aXJ0dWFsIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIgZm9yX2NvbnN1bWVycyAoCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD T1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6U3VwcGxpZXJBZG1pbl9wdHIgZm9yX3N1cHBsaWVycyAoCiAgICAgICAgQ09SQkE6OkVu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lz dGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSAoCiAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC QTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6T2JzZXJ2ZXJfSGFuZGxlIGFwcGVuZF9vYnNlcnZlciAoCiAgICAgICAgUnRlY0V2ZW50Q2hh bm5lbEFkbWluOjpPYnNlcnZlcl9wdHIgZ3csCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u LCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lOQ0hST05JWkFUSU9OX0VS Uk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q0FOVF9BUFBFTkRfT0JT RVJWRVIgKTsKCgoKCgogICAgdmlydHVhbCB2b2lkIHJlbW92ZV9vYnNlcnZlciAoCiAgICAgICAg UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl9IYW5kbGUgZ3csCiAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6 U3lzdGVtRXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lO Q0hST05JWkFUSU9OX0VSUk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6 Q0FOVF9SRU1PVkVfT0JTRVJWRVIgKTsKCgoKCgogICAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBf aXNfYSAoCiAgICAgICAgY29uc3QgQ09SQkE6OkNoYXIgKnR5cGVfaWQsCiAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgdmlydHVhbCB2b2lkICpf dGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0 IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByaXZhdGU6 CiAgICBfVEFPX0V2ZW50Q2hhbm5lbF9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9fRXZlbnRDaGFubmVs X1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIEV2ZW50Q2hhbm5lbCAoaW50IGNvbGxv Y2F0ZWQgPSAwKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBSdGVjRXZlbnRDaGFubmVsQWRtaW5fRXZl bnRDaGFubmVsX3NldHVwX2NvbGxvY2F0aW9uIChpbnQgY29sbG9jYXRlZCk7CgogICAgRXZlbnRD aGFubmVsICgKICAgICAgICBUQU9fU3R1YiAqb2JqcmVmLAogICAgICAgIENPUkJBOjpCb29sZWFu IF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAgVEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlICpz ZXJ2YW50ID0gMAogICAgICApOwoKICAgIGZyaWVuZCBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9S ZW1vdGVfUHJveHlfSW1wbDsKICAgIGZyaWVuZCBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9UaHJ1 UE9BX1Byb3h5X0ltcGw7CiAgICBmcmllbmQgY2xhc3MgX1RBT19FdmVudENoYW5uZWxfRGlyZWN0 X1Byb3h5X0ltcGw7CgogICAgdmlydHVhbCB+RXZlbnRDaGFubmVsICh2b2lkKTsKCiAgcHJpdmF0 ZToKICAgIEV2ZW50Q2hhbm5lbCAoY29uc3QgRXZlbnRDaGFubmVsICYpOwogICAgdm9pZCBvcGVy YXRvcj0gKGNvbnN0IEV2ZW50Q2hhbm5lbCAmKTsKICB9OwojIDI4MzEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50 Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fRXZlbnRDaGFubmVsX1Byb3h5X0ltcGwKICAg IDogcHVibGljIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAg IHZpcnR1YWwgfl9UQU9fRXZlbnRDaGFubmVsX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmly dHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fcHRyIGZvcl9jb25zdW1l cnMgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg ICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAg dmlydHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyQWRtaW5fcHRyIGZvcl9zdXBw bGllcnMgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl CiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgog ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3kgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0 ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj ZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46Ok9ic2Vy dmVyX0hhbmRsZSBhcHBlbmRfb2JzZXJ2ZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxv Y2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZl cl9wdHIgZ3csCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u LCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lOQ0hST05JWkFUSU9OX0VS Uk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q0FOVF9BUFBFTkRfT0JT RVJWRVIgKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVfb2JzZXJ2ZXIgKAogICAg ICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl9IYW5kbGUgZ3csCiAgICAgICAgQ09SQkE6OkVudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhy b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50 Q2hhbm5lbDo6U1lOQ0hST05JWkFUSU9OX0VSUk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2 ZW50Q2hhbm5lbDo6Q0FOVF9SRU1PVkVfT0JTRVJWRVIgKSA9IDA7CgoKCgoKCiAgcHJvdGVjdGVk OgogICAgX1RBT19FdmVudENoYW5uZWxfUHJveHlfSW1wbCAodm9pZCk7CiAgfTsKIyAyODk2ICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJz dmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9S ZW1vdGVfUHJveHlfSW1wbAogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX0V2ZW50Q2hhbm5lbF9Q cm94eV9JbXBsLAogICAgICBwdWJsaWMgdmlydHVhbCBUQU9fUmVtb3RlX09iamVjdF9Qcm94eV9J bXBsCiAgewogIHB1YmxpYzoKICAgIF9UQU9fRXZlbnRDaGFubmVsX1JlbW90ZV9Qcm94eV9JbXBs ICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX0V2ZW50Q2hhbm5lbF9SZW1vdGVfUHJveHlfSW1w bCAodm9pZCkgeyB9CiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJB ZG1pbl9wdHIgZm9yX2NvbnN1bWVycyAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRl ZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24gKTsKCgoKICAgIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFk bWluX3B0ciBmb3Jfc3VwcGxpZXJzICgKICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xsb2NhdGVk X3Rhb190YXJnZXRfLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2Vw dGlvbiApOwoKCgogICAgdmlydHVhbCB2b2lkIGRlc3Ryb3kgKAogICAgICAgIENPUkJBX09iamVj dCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC QTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6T2JzZXJ2ZXJfSGFuZGxlIGFwcGVuZF9vYnNlcnZlciAoCiAgICAgICAgQ09SQkFfT2JqZWN0 ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBSdGVjRXZlbnRDaGFubmVsQWRtaW46 Ok9ic2VydmVyX3B0ciBndywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F eGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpTWU5DSFJPTkla QVRJT05fRVJST1IsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpDQU5UX0FQ UEVORF9PQlNFUlZFUiApOwoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlX29ic2VydmVyICgK ICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAgIFJ0 ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfSGFuZGxlIGd3LAogICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApCiAgICAg IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpF dmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9FUlJPUiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpFdmVudENoYW5uZWw6OkNBTlRfUkVNT1ZFX09CU0VSVkVSICk7CgoKCgoKCiAgfTsKIyAyOTY3 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNsYXNzIF9UQU9fRXZlbnRDaGFu bmVsX1Byb3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5fVEFPX0V2ZW50Q2hh bm5lbF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogICAgdmlydHVhbCBfVEFPX0V2ZW50Q2hhbm5lbF9Q cm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgICAgIEV2ZW50Q2hhbm5lbCAqb2JqZWN0LAog ICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0gVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKSA9IDA7CgogIHByb3RlY3RlZDoK ICAgIF9UQU9fRXZlbnRDaGFubmVsX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogIH07CiMgMjk5MCAi L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Ji c3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19FdmVudENoYW5uZWxf UmVtb3RlX1Byb3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX0V2ZW50Q2hhbm5l bF9Qcm94eV9Ccm9rZXIKICB7CiAgcHVibGljOgogICAgX1RBT19FdmVudENoYW5uZWxfUmVtb3Rl X1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19FdmVudENoYW5uZWxfUmVt b3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCBfVEFPX0V2ZW50Q2hhbm5lbF9Q cm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgICAgIEV2ZW50Q2hhbm5lbCAqb2JqZWN0LAog ICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl CiAgICAgICk7CgogIHByaXZhdGU6CiAgICBfVEFPX0V2ZW50Q2hhbm5lbF9SZW1vdGVfUHJveHlf SW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1YmxpYzoKCgoKICAgIHN0YXRpYyBfVEFPX0V2 ZW50Q2hhbm5lbF9SZW1vdGVfUHJveHlfQnJva2VyICp0aGVfVEFPX0V2ZW50Q2hhbm5lbF9SZW1v dGVfUHJveHlfQnJva2VyICh2b2lkKTsKICB9OwojIDMwMjAgIi9ob21lL3JycC9zY2hvb2wvdGhl c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5l bEFkbWluQy5oIgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19FdmVudENoYW5uZWw7 CgoKfQoKCgoKZXh0ZXJuClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19Qcm94eVB1c2hTdXBw bGllcl9Qcm94eV9Ccm9rZXIgKgooKlJ0ZWNFdmVudENoYW5uZWxBZG1pbl9fVEFPX1Byb3h5UHVz aFN1cHBsaWVyX1Byb3h5X0Jyb2tlcl9GYWN0b3J5X2Z1bmN0aW9uX3BvaW50ZXIpICgKICAgIENP UkJBOjpPYmplY3RfcHRyIG9iagogICk7CgpleHRlcm4KUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpf VEFPX1Byb3h5UHVzaENvbnN1bWVyX1Byb3h5X0Jyb2tlciAqCigqUnRlY0V2ZW50Q2hhbm5lbEFk bWluX19UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyX0ZhY3RvcnlfZnVuY3Rpb25f cG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAgKTsKCmV4dGVybgpSdGVjRXZl bnRDaGFubmVsQWRtaW46Ol9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9Ccm9rZXIgKgooKlJ0ZWNF dmVudENoYW5uZWxBZG1pbl9fVEFPX0NvbnN1bWVyQWRtaW5fUHJveHlfQnJva2VyX0ZhY3Rvcnlf ZnVuY3Rpb25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAgKTsKCmV4dGVy bgpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fU3VwcGxpZXJBZG1pbl9Qcm94eV9Ccm9rZXIg KgooKlJ0ZWNFdmVudENoYW5uZWxBZG1pbl9fVEFPX1N1cHBsaWVyQWRtaW5fUHJveHlfQnJva2Vy X0ZhY3RvcnlfZnVuY3Rpb25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAg KTsKCmV4dGVybgpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fT2JzZXJ2ZXJfUHJveHlfQnJv a2VyICoKKCpSdGVjRXZlbnRDaGFubmVsQWRtaW5fX1RBT19PYnNlcnZlcl9Qcm94eV9Ccm9rZXJf RmFjdG9yeV9mdW5jdGlvbl9wb2ludGVyKSAoCiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmoKICAp OwoKZXh0ZXJuClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19FdmVudENoYW5uZWxfUHJveHlf QnJva2VyICoKKCpSdGVjRXZlbnRDaGFubmVsQWRtaW5fX1RBT19FdmVudENoYW5uZWxfUHJveHlf QnJva2VyX0ZhY3RvcnlfZnVuY3Rpb25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIg b2JqCiAgKTsKCiAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55 ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCAmKTsKICAg ICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpBbHJlYWR5Q29ubmVjdGVkKik7CiAgICAgICAgICAgICAgICAgICBDT1JC QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFu bmVsQWRtaW46OkFscmVhZHlDb25uZWN0ZWQgKiYpOwogICAgICAgICAgICAgICAgICAgQ09SQkE6 OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpBbHJlYWR5Q29ubmVjdGVkIComKTsKICAgICAgICAgICAgICAgICAgIHZv aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpUeXBlRXJyb3IgJik7CiAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JC QTo6QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6VHlwZUVycm9yKik7CiAgICAgICAgICAg ICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBS dGVjRXZlbnRDaGFubmVsQWRtaW46OlR5cGVFcnJvciAqJik7CiAgICAgICAgICAgICAgICAgICBD T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBSdGVj RXZlbnRDaGFubmVsQWRtaW46OlR5cGVFcnJvciAqJik7CiAgICAgICAgICAgICAgICAgICB2b2lk IG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 RGVwZW5kZW5jeSAmKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJB OjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5Kik7CiAgICAgICAgICAg ICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBS dGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3kgKiYpOwogICAgICAgICAgICAgICAgICAg Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5IComKTsKICAgICAgICAgICAgICAgICAgIHZv aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpEZXBlbmRlbmN5U2V0ICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo Q09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXQqKTsKICAg ICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6 QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldCAqJik7CiAgICAgICAg ICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAm LCBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXQgKiYpOwogICAgICAg ICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZl bnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBv cGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVy UU9TKik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29u c3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TIComKTsK ICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JC QTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgKiYpOwog ICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBS dGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICYpOwogICAgICAgICAgICAgICAgICAg dm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1 YmxpY2F0aW9uKik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9u IComKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25z dCBDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24g KiYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBj b25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0ICYpOwogICAgICAgICAg ICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVs QWRtaW46OlB1YmxpY2F0aW9uU2V0Kik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVh biBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46 OlB1YmxpY2F0aW9uU2V0IComKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9w ZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6UHVibGljYXRpb25TZXQgKiYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8 PSAoQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9T ICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBS dGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TKik7CiAgICAgICAgICAgICAgICAgICBD T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRD aGFubmVsQWRtaW46OlN1cHBsaWVyUU9TIComKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpC b29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENo YW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgKiYpOwoKICAgICAgICAgICAgICAgICAgIHZvaWQgb3Bl cmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hT dXBwbGllcl9wdHIpOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+ Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hT dXBwbGllciAqJik7CgogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6 OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3B0cik7CiAg ICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6 OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyIComKTsKCiAg ICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIpOwogICAgICAgICAgICAgICAgICAgQ09S QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hh bm5lbEFkbWluOjpDb25zdW1lckFkbWluIComKTsKCiAgICAgICAgICAgICAgICAgICB2b2lkIG9w ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJB ZG1pbl9wdHIpOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0g KGNvbnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWlu IComKTsKCiAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYs IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfcHRyKTsKICAgICAgICAgICAgICAgICAg IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXIgKiYpOwoKICAgICAgICAgICAgICAgICAgIHZvaWQgb3Bl cmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5u ZWxfcHRyKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChj b25zdCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsICom KTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29u c3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9F UlJPUiAmKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkg JiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9F UlJPUiopOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNv bnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZ TkNIUk9OSVpBVElPTl9FUlJPUiAqJik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVh biBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDaGFubmVs QWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lOQ0hST05JWkFUSU9OX0VSUk9SIComKTsKICAgICAgICAg ICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlFPU19FUlJPUiAmKTsKICAgICAgICAgICAgICAg ICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpFdmVudENoYW5uZWw6OlFPU19FUlJPUiopOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpFdmVudENoYW5uZWw6OlFPU19FUlJPUiAqJik7CiAgICAgICAgICAgICAgICAgICBDT1JC QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZl bnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6UU9TX0VSUk9SIComKTsKICAgICAgICAgICAg ICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q2hh bm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNVQlNDUklQVElPTl9FUlJPUiAmKTsKICAgICAgICAg ICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpFdmVudENoYW5uZWw6OlNVQlNDUklQVElPTl9FUlJPUiopOwogICAgICAgICAgICAg ICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNVQlNDUklQVElPTl9FUlJPUiAqJik7 CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S QkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1VC U0NSSVBUSU9OX0VSUk9SIComKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0g KENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6 OkNPUlJFTEFUSU9OX0VSUk9SICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8 PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q09S UkVMQVRJT05fRVJST1IqKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJh dG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRD aGFubmVsOjpDT1JSRUxBVElPTl9FUlJPUiAqJik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6 Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRD aGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q09SUkVMQVRJT05fRVJST1IgKiYpOwogICAgICAg ICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZl bnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6RElTUEFUQ0hfRVJST1IgJik7CiAgICAgICAg ICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENoYW5u ZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpESVNQQVRDSF9FUlJPUiopOwogICAgICAgICAgICAgICAg ICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkRJU1BBVENIX0VSUk9SIComKTsKICAgICAg ICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55 ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpESVNQQVRDSF9F UlJPUiAqJik7CiAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55 ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpDQU5UX0FQUEVO RF9PQlNFUlZFUiAmKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJB OjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfQVBQRU5E X09CU0VSVkVSKik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5l bDo6Q0FOVF9BUFBFTkRfT0JTRVJWRVIgKiYpOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q2hh bm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfQVBQRU5EX09CU0VSVkVSIComKTsKICAgICAg ICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfUkVNT1ZFX09CU0VSVkVSICYpOwog ICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZl bnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q0FOVF9SRU1PVkVfT0JTRVJWRVIqKTsKICAg ICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6 QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpDQU5UX1JFTU9WRV9P QlNFUlZFUiAqJik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50 Q2hhbm5lbDo6Q0FOVF9SRU1PVkVfT0JTRVJWRVIgKiYpOwojIDMyMjcgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50 Q2hhbm5lbEFkbWluQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5pIiAxCiMg MzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNz L29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5pIgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpEZXBlbmRlbmN5X3Zhcjo6RGVwZW5kZW5jeV92YXIgKHZvaWQpCiAgOiBwdHJfICgw KQp7fQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV92YXI6OkRlcGVu ZGVuY3lfdmFyIChEZXBlbmRlbmN5ICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpSdGVjRXZl bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyOjpEZXBlbmRlbmN5X3ZhciAoY29uc3QgOjpS dGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyICZwKQp7CiAgaWYgKHAucHRyXykK ICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 RGVwZW5kZW5jeSAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJu b19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRo aXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5 X3Zhcjo6fkRlcGVuZGVuY3lfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlu bGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyICYKUnRlY0V2ZW50Q2hh bm5lbEFkbWluOjpEZXBlbmRlbmN5X3Zhcjo6b3BlcmF0b3I9IChEZXBlbmRlbmN5ICpwKQp7CiAg ZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9Cgpp bmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyICYKUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5X3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAg IHsKICAgICAgaWYgKHAucHRyXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlz LT5wdHJfOwogICAgICAgICAgdGhpcy0+cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAg ICAgICAgewogICAgICAgICAgRGVwZW5kZW5jeSAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3 IERlcGVuZGVuY3kgKCpwLnB0cl8pOwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIERlcGVuZGVuY3kgKnRtcCA9IGRlZXBfY29weTsKICAg ICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwogICAgICAgICAgICAgIHRoaXMtPnB0 cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRlZXBfY29weTsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3QgOjpSdGVjRXZl bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3kgKgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVu ZGVuY3lfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87 Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqClJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1 cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5j eV92YXI6Om9wZXJhdG9yIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5 ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hh bm5lbEFkbWluOjpEZXBlbmRlbmN5X3Zhcjo6b3BlcmF0b3IgOjpSdGVjRXZlbnRDaGFubmVsQWRt aW46OkRlcGVuZGVuY3kgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVj RXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENo YW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsK fQoKCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyOjpvcGVyYXRv ciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqJigpCnsKICByZXR1cm4gdGhp cy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRl bmN5ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5X3Zhcjo6aW4gKHZvaWQpIGNv bnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6RGVwZW5kZW5jeSAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV92YXI6 Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6UnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5IComClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVw ZW5kZW5jeV92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0 cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVs QWRtaW46OkRlcGVuZGVuY3kgKgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFy OjpfcmV0biAodm9pZCkKewogIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICp0 bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGlu ZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqClJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6RGVwZW5kZW5jeV92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5w dHJfOwp9CgoKCgoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV9vdXQ6 OkRlcGVuZGVuY3lfb3V0ICg6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqJnAp CiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFu bmVsQWRtaW46OkRlcGVuZGVuY3lfb3V0OjpEZXBlbmRlbmN5X291dCAoRGVwZW5kZW5jeV92YXIg JnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0 cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5X291dDo6 RGVwZW5kZW5jeV9vdXQgKGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5 X291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8RGVwZW5kZW5jeV9vdXQmPiAocCkucHRyXykK e30KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfb3V0ICYKUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5X291dDo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29u c3RfY2FzdDxEZXBlbmRlbmN5X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5s aW5lIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV9vdXQgJgpSdGVjRXZlbnRDaGFu bmVsQWRtaW46OkRlcGVuZGVuY3lfb3V0OjpvcGVyYXRvcj0gKERlcGVuZGVuY3kgKnApCnsKICB0 aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVs QWRtaW46OkRlcGVuZGVuY3lfb3V0OjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 RGVwZW5kZW5jeSAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5IComClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVw ZW5kZW5jeV9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg OjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3kgKgpSdGVjRXZlbnRDaGFubmVsQWRt aW46OkRlcGVuZGVuY3lfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0 cl87Cn0KIyAyMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5pIgppbmxpbmUgUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldDo6 YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQoKewogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 RGVwZW5kZW5jeSAqcmV0dmFsID0gMDsKICBkbyB7IHRyeSB7IHJldHZhbCA9IG5ldyBSdGVjRXZl bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lbc2l6ZV07IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9j KSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGlsZSAoMCk7 CiAgcmV0dXJuIHJldHZhbDsKfQoKaW5saW5lIHZvaWQgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpf VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNl dDo6ZnJlZWJ1ZiAoUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICpidWZmZXIpCgp7 CiAgZGVsZXRlIFtdIGJ1ZmZlcjsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RB T19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQ6 Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5 U2V0ICh2b2lkKQp7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5U2V0OjpfVEFPX1Vu Ym91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldCAoQ09S QkE6OlVMb25nIG1heGltdW0pCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGlt dW0sIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRl bmN5U2V0OjphbGxvY2J1ZiAobWF4aW11bSkpCnsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVu ZGVuY3lTZXQ6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9E ZXBlbmRlbmN5U2V0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICBDT1JCQTo6VUxvbmcgbGVuZ3Ro LAogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqZGF0YSwKICBDT1JCQTo6Qm9v bGVhbiByZWxlYXNlKQo6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVu Z3RoLCBkYXRhLCByZWxlYXNlKQp7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9U QU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5U2V0 OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5j eVNldCAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWlu X0RlcGVuZGVuY3lTZXQgJnJocykKCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJo cykKewogIGlmIChyaHMuYnVmZmVyXyAhPSAwKQogIHsKICAgIFJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6RGVwZW5kZW5jeSAqdG1wMSA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENo YW5uZWxBZG1pbl9EZXBlbmRlbmN5U2V0OjphbGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAg UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICogY29uc3QgdG1wMiA9IHJlaW50ZXJw cmV0X2Nhc3Q8UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICo+IChyaHMuYnVmZmVy Xyk7CgogICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kp CiAgICAgIHRtcDFbaV0gPSB0bXAyW2ldOwoKICAgIHRoaXMtPmJ1ZmZlcl8gPSB0bXAxOwogIH0K ICBlbHNlCiAgewogICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgfQp9CgppbmxpbmUgUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRt aW5fRGVwZW5kZW5jeVNldCAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19VbmJvdW5kZWRf U2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQ6Om9wZXJhdG9yPSAo Y29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVu ZGVuY3lTZXQgJnJocykKCnsKICBpZiAodGhpcyA9PSAmcmhzKQogICAgcmV0dXJuICp0aGlzOwoK ICBpZiAodGhpcy0+cmVsZWFzZV8pCiAgewogICAgaWYgKHRoaXMtPm1heGltdW1fIDwgcmhzLm1h eGltdW1fKQogICAgewoKICAgICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICp0 bXAgPSByZWludGVycHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAq PiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVu dENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5U2V0OjpmcmVlYnVmICh0bXApOwogICAgICB0aGlzLT5i dWZmZXJfID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0Rl cGVuZGVuY3lTZXQ6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgfQogIH0KICBlbHNlCiAg ICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5l bEFkbWluX0RlcGVuZGVuY3lTZXQ6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICBUQU9fVW5i b3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpEZXBlbmRlbmN5ICp0bXAxID0gcmVpbnRlcnByZXRfY2FzdDxSdGVjRXZlbnRDaGFu bmVsQWRtaW46OkRlcGVuZGVuY3kgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIFJ0ZWNFdmVudENoYW5u ZWxBZG1pbjo6RGVwZW5kZW5jeSAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PFJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqPiAocmhzLmJ1ZmZlcl8pOwoKICBmb3IgKENP UkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgIHRtcDFbaV0gPSB0 bXAyW2ldOwoKICByZXR1cm4gKnRoaXM7Cn0KCgppbmxpbmUgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpEZXBlbmRlbmN5ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1 ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldDo6b3BlcmF0b3JbXSAoQ09S QkE6OlVMb25nIGkpCgp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9f YWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0g QUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hh bm5lbEFkbWluQy5pIiwgMzIyLCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwg YWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18t PmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBm YWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGls ZSAoMCk7CiAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5KiB0bXAgPSByZWludGVy cHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSo+ICh0aGlzLT5idWZm ZXJfKTsKICByZXR1cm4gdG1wW2ldOwp9CgppbmxpbmUgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpEZXBlbmRlbmN5ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9T ZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldDo6b3BlcmF0b3JbXSAo Q09SQkE6OlVMb25nIGkpIGNvbnN0Cgp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykp IHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAq YWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl Y0V2ZW50Q2hhbm5lbEFkbWluQy5pIiwgMzMxLCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVz dGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkp OyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFz c2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7 IH0gfSB3aGlsZSAoMCk7CiAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICogY29u c3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVu Y3kqPiAodGhpcy0+YnVmZmVyXyk7CiAgcmV0dXJuIHRtcFtpXTsKfQoKCgppbmxpbmUgUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFP X1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldDo6 Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQp7CiAgUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpEZXBlbmRlbmN5ICpyZXN1bHQgPSAwOwogIGlmIChvcnBoYW4gPT0gMCkKICB7CgogICAg aWYgKHRoaXMtPmJ1ZmZlcl8gPT0gMCkKICAgIHsKICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQ6OmFsbG9jYnVm ICh0aGlzLT5sZW5ndGhfKTsKICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgdGhp cy0+cmVsZWFzZV8gPSAxOwogICAgfQogICAgZWxzZQogICAgewogICAgICByZXN1bHQgPSByZWlu dGVycHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSo+ICh0aGlzLT5i dWZmZXJfKTsKICAgIH0KICB9CiAgZWxzZQogIHsKICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAw KQogICAgewoKCiAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpEZXBlbmRlbmN5Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICB0aGlzLT5tYXhpbXVt XyA9IDA7CiAgICAgIHRoaXMtPmxlbmd0aF8gPSAwOwogICAgICB0aGlzLT5idWZmZXJfID0gMDsK ICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9Cgpp bmxpbmUgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICoKUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRt aW5fRGVwZW5kZW5jeVNldDo6Z2V0X2J1ZmZlciAodm9pZCkgY29uc3QKewogIHJldHVybiByZWlu dGVycHJldF9jYXN0PGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqPiAo dGhpcy0+YnVmZmVyXyk7Cn0KCmlubGluZSB2b2lkClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RB T19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQ6 OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCkNPUkJBOjpVTG9uZyBsZW5ndGgsClJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqZGF0YSwKQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkK ewogIHRoaXMtPm1heGltdW1fID0gbWF4OwogIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgaWYg KHRoaXMtPmJ1ZmZlcl8gJiYgdGhpcy0+cmVsZWFzZV8gPT0gMSkKICB7CiAgICBSdGVjRXZlbnRD aGFubmVsQWRtaW46OkRlcGVuZGVuY3kgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgX1RBT19VbmJv dW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQ6OmZyZWVi dWYgKHRtcCk7CiAgfQogIHRoaXMtPmJ1ZmZlcl8gPSBkYXRhOwogIHRoaXMtPnJlbGVhc2VfID0g cmVsZWFzZTsKfQojIDQwNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmkiCmlubGluZQpS dGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfdmFyOjpEZXBlbmRlbmN5U2V0X3Zh ciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpE ZXBlbmRlbmN5U2V0X3Zhcjo6RGVwZW5kZW5jeVNldF92YXIgKERlcGVuZGVuY3lTZXQgKnApCiAg OiBwdHJfIChwKQp7fQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNl dF92YXI6OkRlcGVuZGVuY3lTZXRfdmFyIChjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 RGVwZW5kZW5jeVNldF92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlz LT5wdHJfID0gbmV3IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0ICgqcC5w dHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9 IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0K CmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfdmFyOjp+RGVwZW5k ZW5jeVNldF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIFJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXIgJgpSdGVjRXZlbnRDaGFubmVsQWRt aW46OkRlcGVuZGVuY3lTZXRfdmFyOjpvcGVyYXRvcj0gKERlcGVuZGVuY3lTZXQgKnApCnsKICBk ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlu bGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXIgJgpSdGVjRXZl bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6UnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0X3ZhciAmcCkKewogIGlmICh0aGlzICE9 ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVs ZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAg IGVsc2UKICAgICAgICB7CiAgICAgICAgICBEZXBlbmRlbmN5U2V0ICpkZWVwX2NvcHkgPQogICAg ICAgICAgICBuZXcgRGVwZW5kZW5jeVNldCAoKnAucHRyXyk7CgogICAgICAgICAgaWYgKGRlZXBf Y29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgRGVwZW5kZW5jeVNldCAqdG1w ID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAg ICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGlu ZSBjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldCAqClJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0 CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpEZXBlbmRlbmN5U2V0ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0X3Zh cjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0X3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpS dGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXQgJigpIGNvbnN0CnsKICByZXR1cm4g KnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lT ZXRfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldCAm KCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6RGVwZW5kZW5jeVNldF92YXI6Om9wZXJhdG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpE ZXBlbmRlbmN5U2V0ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5l ClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXI6Om9wZXJhdG9yIDo6UnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0IComKCkKewogIHJldHVybiB0aGlzLT5w dHJfOwp9CgppbmxpbmUgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICYKUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0X3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVM b25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQoK aW5saW5lIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAmClJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9u ZyBpbmRleCkgY29uc3QKewogIHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFJ0ZWNFdmVudENoYW5u ZWxBZG1pbjo6RGVwZW5kZW5jeSAmPiAodGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpKTsK fQoKaW5saW5lIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0ICYK UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0X3Zhcjo6aW4gKHZvaWQpIGNvbnN0 CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6RGVwZW5kZW5jeVNldCAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92 YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6UnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0IComClJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6RGVwZW5kZW5jeVNldF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwog IHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZl bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXQgKgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRl cGVuZGVuY3lTZXRfdmFyOjpfcmV0biAodm9pZCkKewogIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpEZXBlbmRlbmN5U2V0ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJl dHVybiB0bXA7Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNl dCAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXI6OnB0ciAodm9pZCkg Y29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lClJ0ZWNFdmVudENoYW5u ZWxBZG1pbjo6RGVwZW5kZW5jeVNldF9vdXQ6OkRlcGVuZGVuY3lTZXRfb3V0IChEZXBlbmRlbmN5 U2V0IComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF9vdXQ6OkRlcGVuZGVuY3lTZXRfb3V0IChE ZXBlbmRlbmN5U2V0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMt PnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46 OkRlcGVuZGVuY3lTZXRfb3V0OjpEZXBlbmRlbmN5U2V0X291dCAoY29uc3QgOjpSdGVjRXZlbnRD aGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxE ZXBlbmRlbmN5U2V0X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpEZXBlbmRlbmN5U2V0X291dCAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5k ZW5jeVNldF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRl cGVuZGVuY3lTZXRfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNvbnN0X2Nhc3Q8RGVwZW5kZW5j eVNldF9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OlJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF9vdXQgJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46 OkRlcGVuZGVuY3lTZXRfb3V0OjpvcGVyYXRvcj0gKERlcGVuZGVuY3lTZXQgKnApCnsKICB0aGlz LT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRt aW46OkRlcGVuZGVuY3lTZXRfb3V0OjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 RGVwZW5kZW5jeVNldCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0IComClJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6RGVwZW5kZW5jeVNldF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9 CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXQgKgpSdGVjRXZl bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAg cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVu ZGVuY3kgJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfb3V0OjpvcGVyYXRv cltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3Jb XSAoaW5kZXgpOwp9CiMgNjIxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaSIKaW5saW5l ClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjpDb25zdW1lclFPU192YXIg KHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29u c3VtZXJRT1NfdmFyOjpDb25zdW1lclFPU192YXIgKENvbnN1bWVyUU9TICpwKQogIDogcHRyXyAo cCkKe30KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TX3Zhcjo6Q29u c3VtZXJRT1NfdmFyIChjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1Nf dmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6 OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgKCpwLnB0cl8pOyB9IGNhdGNoIChz dGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9 IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjp+Q29uc3VtZXJRT1NfdmFyICh2b2lkKQp7 CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNv bnN1bWVyUU9TX3ZhciAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjpv cGVyYXRvcj0gKENvbnN1bWVyUU9TICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+ cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRt aW46OkNvbnN1bWVyUU9TX3ZhciAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1Nf dmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFP U192YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAw KQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+ cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgQ29uc3Vt ZXJRT1MgKmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBDb25zdW1lclFPUyAoKnAucHRyXyk7 CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgQ29uc3VtZXJRT1MgKnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkg PSB0aGlzLT5wdHJfOwogICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAg ICAgZGVsZXRlIGRlZXBfY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0 dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3QgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1 bWVyUU9TICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU192YXI6Om9wZXJhdG9y LT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29u c3VtZXJRT1NfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0K CmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TX3Zhcjo6b3BlcmF0b3Ig Y29uc3QgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICYoKSBjb25zdAp7CiAg cmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25z dW1lclFPU192YXI6Om9wZXJhdG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFP UyAmKCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 Q29uc3VtZXJRT1MgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUK UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU192YXI6Om9wZXJhdG9yIDo6UnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsK fQoKaW5saW5lIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmClJ0 ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjppbiAodm9pZCkgY29uc3QKewog IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpD b25zdW1lclFPUyAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjppbm91 dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OlJ0ZWNFdmVudENo YW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgKiYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1l clFPU192YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8g PSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRt aW46OkNvbnN1bWVyUU9TICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU192YXI6 Ol9yZXRuICh2b2lkKQp7CiAgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICp0 bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGlu ZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgKgpSdGVjRXZlbnRDaGFubmVs QWRtaW46OkNvbnN1bWVyUU9TX3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMt PnB0cl87Cn0KCgoKCgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU19v dXQ6OkNvbnN1bWVyUU9TX291dCAoOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9T IComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1Nfb3V0OjpDb25zdW1lclFPU19vdXQgKENvbnN1bWVy UU9TX3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAg dGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVy UU9TX291dDo6Q29uc3VtZXJRT1Nfb3V0IChjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 Q29uc3VtZXJRT1Nfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxDb25zdW1lclFPU19vdXQm PiAocCkucHRyXykKe30KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9T X291dCAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1Nfb3V0OjpvcGVyYXRvcj0g KGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU19vdXQgJnApCnsKICB0 aGlzLT5wdHJfID0gY29uc3RfY2FzdDxDb25zdW1lclFPU19vdXQmPiAocCkucHRyXzsKICByZXR1 cm4gKnRoaXM7Cn0KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TX291 dCAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1Nfb3V0OjpvcGVyYXRvcj0gKENv bnN1bWVyUU9TICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9Cgppbmxp bmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU19vdXQ6Om9wZXJhdG9yIDo6UnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRy XzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAqJgpSdGVj RXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TX291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJu IHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJR T1MgKgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TX291dDo6b3BlcmF0b3ItPiAo dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lClJ0ZWNFdmVudENoYW5u ZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjpQdWJsaWNhdGlvbl92YXIgKHZvaWQpCiAgOiBwdHJf ICgwKQp7fQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjpQ dWJsaWNhdGlvbl92YXIgKFB1YmxpY2F0aW9uICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpS dGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX3Zhcjo6UHVibGljYXRpb25fdmFyIChj b25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyICZwKQp7CiAgaWYg KHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OlJ0ZWNFdmVudENoYW5u ZWxBZG1pbjo6UHVibGljYXRpb24gKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykg eyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBl bHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 UHVibGljYXRpb25fdmFyOjp+UHVibGljYXRpb25fdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMt PnB0cl87Cn0KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX3ZhciAm ClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjpvcGVyYXRvcj0gKFB1Ymxp Y2F0aW9uICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0 dXJuICp0aGlzOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9u X3ZhciAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjpvcGVyYXRvcj0g KGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl92YXIgJnApCnsKICBp ZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAwKQogICAgICAgIHsKICAg ICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+cHRyXyA9IDA7CiAgICAg ICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgUHVibGljYXRpb24gKmRlZXBfY29w eSA9CiAgICAgICAgICAgIG5ldyBQdWJsaWNhdGlvbiAoKnAucHRyXyk7CgogICAgICAgICAgaWYg KGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgUHVibGljYXRpb24g KnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwog ICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRlZXBf Y29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9Cgpp bmxpbmUgY29uc3QgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICoKUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0 CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpQdWJsaWNhdGlvbiAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjpv cGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZl bnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpSdGVjRXZl bnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w dHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl92YXI6Om9w ZXJhdG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAmKCkKewogIHJldHVy biAqdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRp b25fdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gJigp IGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpQdWJsaWNhdGlvbl92YXI6Om9wZXJhdG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpQdWJsaWNhdGlvbiAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0 IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAmClJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6UHVibGljYXRpb25fdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+ cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAmClJ0 ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjppbm91dCAodm9pZCkKewogIHJl dHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVi bGljYXRpb24gKiYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl92YXI6Om91dCAo dm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9u ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl92YXI6Ol9yZXRuICh2b2lkKQp7 CiAgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICp0bXAgPSB0aGlzLT5wdHJf OwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENo YW5uZWxBZG1pbjo6UHVibGljYXRpb24gKgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0 aW9uX3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgpp bmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl9vdXQ6OlB1YmxpY2F0aW9u X291dCAoOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uIComcCkKICA6IHB0cl8g KHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 UHVibGljYXRpb25fb3V0OjpQdWJsaWNhdGlvbl9vdXQgKFB1YmxpY2F0aW9uX3ZhciAmcCkKICA6 IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7 Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX291dDo6UHVibGlj YXRpb25fb3V0IChjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fb3V0 ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxQdWJsaWNhdGlvbl9vdXQmPiAocCkucHRyXykKe30K CmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX291dCAmClJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6UnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29u c3RfY2FzdDxQdWJsaWNhdGlvbl9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlu bGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX291dCAmClJ0ZWNFdmVudENo YW5uZWxBZG1pbjo6UHVibGljYXRpb25fb3V0OjpvcGVyYXRvcj0gKFB1YmxpY2F0aW9uICpwKQp7 CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hh bm5lbEFkbWluOjpQdWJsaWNhdGlvbl9vdXQ6Om9wZXJhdG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpQdWJsaWNhdGlvbiAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6 UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAqJgpSdGVjRXZlbnRDaGFubmVsQWRt aW46OlB1YmxpY2F0aW9uX291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0K CmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gKgpSdGVjRXZlbnRD aGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVy biB0aGlzLT5wdHJfOwp9CiMgMTAxMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmkiCmlu bGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICoKUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVi bGljYXRpb25TZXQ6OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSkKCnsKICBSdGVjRXZlbnRD aGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICpyZXR2YWwgPSAwOwogIGRvIHsgdHJ5IHsgcmV0dmFs ID0gbmV3IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25bc2l6ZV07IH0gY2F0Y2gg KHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7 IH0gfSB3aGlsZSAoMCk7CiAgcmV0dXJuIHJldHZhbDsKfQoKaW5saW5lIHZvaWQgUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRt aW5fUHVibGljYXRpb25TZXQ6OmZyZWVidWYgKFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGlj YXRpb24gKmJ1ZmZlcikKCnsKICBkZWxldGUgW10gYnVmZmVyOwp9CgppbmxpbmUKUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRt aW5fUHVibGljYXRpb25TZXQ6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5u ZWxBZG1pbl9QdWJsaWNhdGlvblNldCAodm9pZCkKewp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVi bGljYXRpb25TZXQ6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1p bl9QdWJsaWNhdGlvblNldCAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgOiBUQU9fVW5ib3VuZGVk X0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVu dENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldDo6YWxsb2NidWYgKG1heGltdW0pKQp7Cn0KCmlu bGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNF dmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf UnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0IChDT1JCQTo6VUxvbmcgbWF4aW11 bSwKICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGlj YXRpb24gKmRhdGEsCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKOiBUQU9fVW5ib3VuZGVkX0Jh c2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkKewp9CgppbmxpbmUK UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRD aGFubmVsQWRtaW5fUHVibGljYXRpb25TZXQ6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNF dmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldCAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2Vx dWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0ICZyaHMpCgogIDogVEFP X1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsKICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkK ICB7CiAgICBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICp0bXAxID0gX1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0Ojph bGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJs aWNhdGlvbiAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6UHVibGljYXRpb24gKj4gKHJocy5idWZmZXJfKTsKCiAgICBmb3IgKENPUkJBOjpVTG9u ZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgdG1wMVtpXSA9IHRtcDJbaV07 CgogICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgfQogIGVsc2UKICB7CiAgICB0aGlzLT5idWZm ZXJfID0gMDsKICB9Cn0KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fVW5ib3Vu ZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldCAmClJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5l bEFkbWluX1B1YmxpY2F0aW9uU2V0OjpvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1Nl cXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldCAmcmhzKQoKewogIGlm ICh0aGlzID09ICZyaHMpCiAgICByZXR1cm4gKnRoaXM7CgogIGlmICh0aGlzLT5yZWxlYXNlXykK ICB7CiAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAgICB7CgogICAgICBS dGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICp0bXAgPSByZWludGVycHJldF9jYXN0 PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gKj4gKHRoaXMtPmJ1ZmZlcl8pOwog ICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVibGlj YXRpb25TZXQ6OmZyZWVidWYgKHRtcCk7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91 bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVibGljYXRpb25TZXQ6OmFsbG9j YnVmIChyaHMubWF4aW11bV8pOwogICAgfQogIH0KICBlbHNlCiAgICB0aGlzLT5idWZmZXJfID0g X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9u U2V0OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKCiAgVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVl bmNlOjpvcGVyYXRvcj0gKHJocyk7CgogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRp b24gKnRtcDEgPSByZWludGVycHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGlj YXRpb24gKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGlj YXRpb24gKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxSdGVjRXZlbnRDaGFubmVsQWRt aW46OlB1YmxpY2F0aW9uICo+IChyaHMuYnVmZmVyXyk7CgogIGZvciAoQ09SQkE6OlVMb25nIGkg PSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgdG1wMVtpXSA9IHRtcDJbaV07CgogIHJl dHVybiAqdGhpczsKfQoKCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9u ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZl bnRDaGFubmVsQWRtaW5fUHVibGljYXRpb25TZXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBp KQoKewogIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9 IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNn OjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMu aSIsIDExMDIsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1z Z19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9F UlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3Ig JyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICBS dGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uKiB0bXAgPSByZWludGVycHJldF9jYXN0 PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24qPiAodGhpcy0+YnVmZmVyXyk7CiAg cmV0dXJuIHRtcFtpXTsKfQoKaW5saW5lIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVi bGljYXRpb24gJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl X1J0ZWNFdmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldDo6b3BlcmF0b3JbXSAoQ09SQkE6 OlVMb25nIGkpIGNvbnN0Cgp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50 IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50 Q2hhbm5lbEFkbWluQy5pIiwgMTExMSwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQg KCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNl X19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRp b24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEpOyB9IH0g d2hpbGUgKDApOwogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gKiBjb25zdCB0 bXAgPSByZWludGVycHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24q PiAodGhpcy0+YnVmZmVyXyk7CiAgcmV0dXJuIHRtcFtpXTsKfQoKCgppbmxpbmUgUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19V bmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0Ojpn ZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCnsKICBSdGVjRXZlbnRDaGFubmVsQWRt aW46OlB1YmxpY2F0aW9uICpyZXN1bHQgPSAwOwogIGlmIChvcnBoYW4gPT0gMCkKICB7CgogICAg aWYgKHRoaXMtPmJ1ZmZlcl8gPT0gMCkKICAgIHsKICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5k ZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0OjphbGxvY2J1 ZiAodGhpcy0+bGVuZ3RoXyk7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7CiAgICAgIHRo aXMtPnJlbGVhc2VfID0gMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgcmVzdWx0ID0gcmVp bnRlcnByZXRfY2FzdDxSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uKj4gKHRoaXMt PmJ1ZmZlcl8pOwogICAgfQogIH0KICBlbHNlCiAgewogICAgaWYgKHRoaXMtPnJlbGVhc2VfICE9 IDApCiAgICB7CgoKICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxSdGVjRXZlbnRDaGFu bmVsQWRtaW46OlB1YmxpY2F0aW9uKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICB0aGlzLT5tYXhp bXVtXyA9IDA7CiAgICAgIHRoaXMtPmxlbmd0aF8gPSAwOwogICAgICB0aGlzLT5idWZmZXJfID0g MDsKICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9 CgppbmxpbmUgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAqClJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5l bEFkbWluX1B1YmxpY2F0aW9uU2V0OjpnZXRfYnVmZmVyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJu IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlv biAqPiAodGhpcy0+YnVmZmVyXyk7Cn0KCmlubGluZSB2b2lkClJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0 aW9uU2V0OjpyZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LApDT1JCQTo6VUxvbmcgbGVuZ3RoLApS dGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICpkYXRhLApDT1JCQTo6Qm9vbGVhbiBy ZWxlYXNlKQp7CiAgdGhpcy0+bWF4aW11bV8gPSBtYXg7CiAgdGhpcy0+bGVuZ3RoXyA9IGxlbmd0 aDsKICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQogIHsKICAgIFJ0 ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8 UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbio+ICh0aGlzLT5idWZmZXJfKTsKICAg IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlv blNldDo6ZnJlZWJ1ZiAodG1wKTsKICB9CiAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAgdGhpcy0+ cmVsZWFzZV8gPSByZWxlYXNlOwp9CiMgMTE4NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5D LmkiCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6UHVi bGljYXRpb25TZXRfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30KCmlubGluZQpSdGVjRXZlbnRD aGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6UHVibGljYXRpb25TZXRfdmFyIChQdWJs aWNhdGlvblNldCAqcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpQdWJsaWNhdGlvblNldF92YXI6OlB1YmxpY2F0aW9uU2V0X3ZhciAoY29uc3QgOjpSdGVj RXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3ZhciAmcCkKewogIGlmIChwLnB0cl8p CiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46 OlB1YmxpY2F0aW9uU2V0ICgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpf X2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQog ICAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1Ymxp Y2F0aW9uU2V0X3Zhcjo6flB1YmxpY2F0aW9uU2V0X3ZhciAodm9pZCkKewogIGRlbGV0ZSB0aGlz LT5wdHJfOwp9CgppbmxpbmUgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldF92 YXIgJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6b3BlcmF0b3I9 IChQdWJsaWNhdGlvblNldCAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8g PSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQ dWJsaWNhdGlvblNldF92YXIgJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0 X3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRp b25TZXRfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8g PT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRo aXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIFB1 YmxpY2F0aW9uU2V0ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgUHVibGljYXRpb25TZXQg KCpwLnB0cl8pOwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIFB1YmxpY2F0aW9uU2V0ICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAg ICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1w OwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpQdWJsaWNhdGlvblNldCAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRp b25TZXRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87 Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXQgKgpSdGVj RXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkK ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQ dWJsaWNhdGlvblNldF92YXI6Om9wZXJhdG9yIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpQdWJsaWNhdGlvblNldCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5s aW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfdmFyOjpvcGVyYXRvciA6 OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXQgJigpCnsKICByZXR1cm4gKnRo aXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0 X3Zhcjo6b3BlcmF0b3IgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0ICYo KSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lClJ0ZWNFdmVudENoYW5u ZWxBZG1pbjo6UHVibGljYXRpb25TZXRfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6UHVibGljYXRpb25TZXQgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGlu ZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICYKUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpQdWJsaWNhdGlvblNldF92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkK ewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25z dCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICYKUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpQdWJsaWNhdGlvblNldF92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkg Y29uc3QKewogIHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 UHVibGljYXRpb24gJj4gKHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGlu ZSBjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXQgJgpSdGVjRXZl bnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICBy ZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVi bGljYXRpb25TZXQgJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6 aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgOjpSdGVjRXZl bnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0IComClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 UHVibGljYXRpb25TZXRfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0 aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldCAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVi bGljYXRpb25TZXRfdmFyOjpfcmV0biAodm9pZCkKewogIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpQdWJsaWNhdGlvblNldCAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICBy ZXR1cm4gdG1wOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9u U2V0ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldF92YXI6OnB0ciAodm9p ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lClJ0ZWNFdmVudENo YW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfb3V0OjpQdWJsaWNhdGlvblNldF9vdXQgKFB1Ymxp Y2F0aW9uU2V0IComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5l ClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfb3V0OjpQdWJsaWNhdGlvblNl dF9vdXQgKFB1YmxpY2F0aW9uU2V0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVs ZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFu bmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X291dDo6UHVibGljYXRpb25TZXRfb3V0IChjb25zdCA6 OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfb3V0ICZwKQogIDogcHRyXyAo Y29uc3RfY2FzdDxQdWJsaWNhdGlvblNldF9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSA6OlJ0 ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfb3V0ICYKUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpQdWJsaWNhdGlvblNldF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVjRXZlbnRD aGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25z dF9jYXN0PFB1YmxpY2F0aW9uU2V0X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoK aW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldF9vdXQgJgpSdGVj RXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X291dDo6b3BlcmF0b3I9IChQdWJsaWNh dGlvblNldCAqcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l ClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfb3V0OjpvcGVyYXRvciA6OlJ0 ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXQgKiYoKQp7CiAgcmV0dXJuIHRoaXMt PnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXQg KiYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldF9vdXQ6OnB0ciAodm9pZCkK ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46 OlB1YmxpY2F0aW9uU2V0ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldF9v dXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFJ0 ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46 OlB1YmxpY2F0aW9uU2V0X291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAg cmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDE0MDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl Y0V2ZW50Q2hhbm5lbEFkbWluQy5pIgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBw bGllclFPU192YXI6OlN1cHBsaWVyUU9TX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9Cgppbmxp bmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192YXI6OlN1cHBsaWVyUU9TX3Zh ciAoU3VwcGxpZXJRT1MgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lClJ0ZWNFdmVudENoYW5u ZWxBZG1pbjo6U3VwcGxpZXJRT1NfdmFyOjpTdXBwbGllclFPU192YXIgKGNvbnN0IDo6UnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAg ZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBw bGllclFPUyAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19s b2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMt PnB0cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192 YXI6On5TdXBwbGllclFPU192YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5s aW5lIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1NfdmFyICYKUnRlY0V2ZW50Q2hh bm5lbEFkbWluOjpTdXBwbGllclFPU192YXI6Om9wZXJhdG9yPSAoU3VwcGxpZXJRT1MgKnApCnsK ICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0K CmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1NfdmFyICYKUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVj RXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZw KQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRl IHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICBTdXBwbGllclFPUyAqZGVlcF9jb3B5ID0KICAgICAgICAg ICAgbmV3IFN1cHBsaWVyUU9TICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9 IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBTdXBwbGllclFPUyAqdG1wID0gZGVlcF9j b3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAg dGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6 OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgKgpSdGVjRXZlbnRDaGFubmVsQWRt aW46OlN1cHBsaWVyUU9TX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0 aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9T ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192YXI6Om9wZXJhdG9yLT4gKHZv aWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6U3VwcGxpZXJRT1NfdmFyOjpvcGVyYXRvciBjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6U3VwcGxpZXJRT1MgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGlu ZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TX3Zhcjo6b3BlcmF0b3IgOjpSdGVj RXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJf Owp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192YXI6Om9wZXJh dG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAmKCkgY29uc3QKewogIHJl dHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBs aWVyUU9TX3Zhcjo6b3BlcmF0b3IgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9T IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpSdGVjRXZlbnRD aGFubmVsQWRtaW46OlN1cHBsaWVyUU9TICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGll clFPU192YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgppbmxp bmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TICYKUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpTdXBwbGllclFPU192YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5w dHJfOwp9CgoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAqJgpS dGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TX3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVs ZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0K CmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgKgpSdGVjRXZlbnRD aGFubmVsQWRtaW46OlN1cHBsaWVyUU9TX3Zhcjo6X3JldG4gKHZvaWQpCnsKICA6OlJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRy XyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpT dXBwbGllclFPUyAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1NfdmFyOjpwdHIg KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpSdGVjRXZl bnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TX291dDo6U3VwcGxpZXJRT1Nfb3V0ICg6OlJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMt PnB0cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU19v dXQ6OlN1cHBsaWVyUU9TX291dCAoU3VwcGxpZXJRT1NfdmFyICZwKQogIDogcHRyXyAocC5vdXQg KCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0 ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1Nfb3V0OjpTdXBwbGllclFPU19vdXQgKGNv bnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU19vdXQgJnApCiAgOiBwdHJf IChjb25zdF9jYXN0PFN1cHBsaWVyUU9TX291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIFJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1Nfb3V0ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpTdXBwbGllclFPU19vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVjRXZlbnRDaGFubmVsQWRt aW46OlN1cHBsaWVyUU9TX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFN1cHBs aWVyUU9TX291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1Nfb3V0ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpT dXBwbGllclFPU19vdXQ6Om9wZXJhdG9yPSAoU3VwcGxpZXJRT1MgKnApCnsKICB0aGlzLT5wdHJf ID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1 cHBsaWVyUU9TX291dDo6b3BlcmF0b3IgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVy UU9TIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFu bmVsQWRtaW46OlN1cHBsaWVyUU9TIComClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJR T1Nfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 U3VwcGxpZXJRT1Nfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87 Cn0KCgoKCgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcjo6 UHJveHlQdXNoU3VwcGxpZXIgKAogICAgVEFPX1N0dWIgKm9ianJlZiwKICAgIENPUkJBOjpCb29s ZWFuIF90YW9fY29sbG9jYXRlZCwKICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAqc2VydmFu dAogICkKICA6IENPUkJBX09iamVjdCAob2JqcmVmLCBfdGFvX2NvbGxvY2F0ZWQsIHNlcnZhbnQp CnsKICB0aGlzLT5SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHJveHlQdXNoU3VwcGxpZXJfc2V0dXBf Y29sbG9jYXRpb24gKF90YW9fY29sbG9jYXRlZCk7Cn0KIyAxNjEyICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENo YW5uZWxBZG1pbkMuaSIKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29u c3VtZXI6OlByb3h5UHVzaENvbnN1bWVyICgKICAgIFRBT19TdHViICpvYmpyZWYsCiAgICBDT1JC QTo6Qm9vbGVhbiBfdGFvX2NvbGxvY2F0ZWQsCiAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2Ug KnNlcnZhbnQKICApCiAgOiBDT1JCQV9PYmplY3QgKG9ianJlZiwgX3Rhb19jb2xsb2NhdGVkLCBz ZXJ2YW50KQp7CiAgdGhpcy0+UnRlY0V2ZW50Q2hhbm5lbEFkbWluX1Byb3h5UHVzaENvbnN1bWVy X3NldHVwX2NvbGxvY2F0aW9uIChfdGFvX2NvbGxvY2F0ZWQpOwp9CiMgMTYzMCAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj RXZlbnRDaGFubmVsQWRtaW5DLmkiCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1 bWVyQWRtaW46OkNvbnN1bWVyQWRtaW4gKAogICAgVEFPX1N0dWIgKm9ianJlZiwKICAgIENPUkJB OjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCwKICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAq c2VydmFudAogICkKICA6IENPUkJBX09iamVjdCAob2JqcmVmLCBfdGFvX2NvbGxvY2F0ZWQsIHNl cnZhbnQpCnsKICB0aGlzLT5SdGVjRXZlbnRDaGFubmVsQWRtaW5fQ29uc3VtZXJBZG1pbl9zZXR1 cF9jb2xsb2NhdGlvbiAoX3Rhb19jb2xsb2NhdGVkKTsKfQojIDE2NDggIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50 Q2hhbm5lbEFkbWluQy5pIgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFk bWluOjpTdXBwbGllckFkbWluICgKICAgIFRBT19TdHViICpvYmpyZWYsCiAgICBDT1JCQTo6Qm9v bGVhbiBfdGFvX2NvbGxvY2F0ZWQsCiAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZh bnQKICApCiAgOiBDT1JCQV9PYmplY3QgKG9ianJlZiwgX3Rhb19jb2xsb2NhdGVkLCBzZXJ2YW50 KQp7CiAgdGhpcy0+UnRlY0V2ZW50Q2hhbm5lbEFkbWluX1N1cHBsaWVyQWRtaW5fc2V0dXBfY29s bG9jYXRpb24gKF90YW9fY29sbG9jYXRlZCk7Cn0KIyAxNjY2ICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5u ZWxBZG1pbkMuaSIKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXI6Ok9ic2Vy dmVyICgKICAgIFRBT19TdHViICpvYmpyZWYsCiAgICBDT1JCQTo6Qm9vbGVhbiBfdGFvX2NvbGxv Y2F0ZWQsCiAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZhbnQKICApCiAgOiBDT1JC QV9PYmplY3QgKG9ianJlZiwgX3Rhb19jb2xsb2NhdGVkLCBzZXJ2YW50KQp7CiAgdGhpcy0+UnRl Y0V2ZW50Q2hhbm5lbEFkbWluX09ic2VydmVyX3NldHVwX2NvbGxvY2F0aW9uIChfdGFvX2NvbGxv Y2F0ZWQpOwp9CiMgMTcxMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmkiCmlubGluZQpS dGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6RXZlbnRDaGFubmVsICgKICAgIFRB T19TdHViICpvYmpyZWYsCiAgICBDT1JCQTo6Qm9vbGVhbiBfdGFvX2NvbGxvY2F0ZWQsCiAgICBU QU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZhbnQKICApCiAgOiBDT1JCQV9PYmplY3QgKG9i anJlZiwgX3Rhb19jb2xsb2NhdGVkLCBzZXJ2YW50KQp7CiAgdGhpcy0+UnRlY0V2ZW50Q2hhbm5l bEFkbWluX0V2ZW50Q2hhbm5lbF9zZXR1cF9jb2xsb2NhdGlvbiAoX3Rhb19jb2xsb2NhdGVkKTsK fQoKCgoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0 cm0sIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCAmX3Rhb19h Z2dyZWdhdGUpCnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuX2lkICgpKQogICAgcmV0 dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVy YXRvcj4+IChUQU9fSW5wdXRDRFIgJixSdGVjRXZlbnRDaGFubmVsQWRtaW46OkFscmVhZHlDb25u ZWN0ZWQmKQp7CiAgcmV0dXJuIDE7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8 IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlR5cGVF cnJvciAmX3Rhb19hZ2dyZWdhdGUpCnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuX2lk ICgpKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6 Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJixSdGVjRXZlbnRDaGFubmVsQWRtaW46 OlR5cGVFcnJvciYpCnsKICByZXR1cm4gMTsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJh dG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 RGVwZW5kZW5jeSAmX3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2Fn Z3JlZ2F0ZS5ldmVudCkgJiYKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLnJ0X2luZm8pCiAg KQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgppbmxpbmUgQ09SQkE6OkJv b2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBSdGVjRXZlbnRDaGFubmVsQWRt aW46OkRlcGVuZGVuY3kgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPj4gX3Rh b19hZ2dyZWdhdGUuZXZlbnQpICYmCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5ydF9pbmZv KQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKCgoKCkNPUkJBOjpC b29sZWFuIG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0ICYKICApOwpDT1JCQTo6Qm9vbGVhbiBvcGVy YXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpE ZXBlbmRlbmN5U2V0ICYKICApOwoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAo VEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1l clFPUyAmX3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0 ZS5kZXBlbmRlbmNpZXMpICYmCiAgICAoc3RybSA8PCBDT1JCQTo6QW55Ojpmcm9tX2Jvb2xlYW4g KF90YW9fYWdncmVnYXRlLmlzX2dhdGV3YXkpKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAg IHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1 dENEUiAmc3RybSwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmX3Rhb19hZ2dy ZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5kZXBlbmRlbmNpZXMp ICYmCiAgICAoc3RybSA+PiBDT1JCQTo6QW55Ojp0b19ib29sZWFuIChfdGFvX2FnZ3JlZ2F0ZS5p c19nYXRld2F5KSkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlu bGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25z dCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICZfdGFvX2FnZ3JlZ2F0ZSkKewog IGlmICgKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLmV2ZW50KSAmJgogICAgKHN0cm0gPDwg X3Rhb19hZ2dyZWdhdGUuZGVwZW5kZW5jeV9pbmZvKQogICkKICAgIHJldHVybiAxOwogIGVsc2UK ICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19J bnB1dENEUiAmc3RybSwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAmX3Rhb19h Z2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5ldmVudCkgJiYK ICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLmRlcGVuZGVuY3lfaW5mbykKICApCiAgICByZXR1 cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv cjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6UHVibGljYXRpb25TZXQgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAg VEFPX0lucHV0Q0RSICYsCiAgICBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0 ICYKICApOwoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENE UiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAmX3Rhb19h Z2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5wdWJsaWNhdGlv bnMpICYmCiAgICAoc3RybSA8PCBDT1JCQTo6QW55Ojpmcm9tX2Jvb2xlYW4gKF90YW9fYWdncmVn YXRlLmlzX2dhdGV3YXkpKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoK fQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwg UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAmX3Rhb19hZ2dyZWdhdGUpCnsKICBp ZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5wdWJsaWNhdGlvbnMpICYmCiAgICAoc3Ry bSA+PiBDT1JCQTo6QW55Ojp0b19ib29sZWFuIChfdGFvX2FnZ3JlZ2F0ZS5pc19nYXRld2F5KSkK ICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCiAgICAgICAgICAgICAg ICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAg IGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfcHRyCiAgKTsK CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19J bnB1dENEUiAmLAogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl9w dHIgJgogICk7CgogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAo CiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlBy b3h5UHVzaENvbnN1bWVyX3B0cgogICk7CgogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xl YW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwKICAgIFJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfcHRyICYKICApOwoKICAgICAgICAgICAgICAgICAgIENP UkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3Qg UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lckFkbWluX3B0cgogICk7CgogICAgICAgICAg ICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwK ICAgIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIgJgogICk7CgogICAg ICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0 Q0RSICYsCiAgICBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyQWRtaW5fcHRy CiAgKTsKCiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAg IFRBT19JbnB1dENEUiAmLAogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWlu X3B0ciAmCiAgKTsKCiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8 ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 T2JzZXJ2ZXJfcHRyCiAgKTsKCiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVy YXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpP YnNlcnZlcl9wdHIgJgogICk7CgogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3Bl cmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBSdGVjRXZlbnRDaGFubmVs QWRtaW46OkV2ZW50Q2hhbm5lbF9wdHIKICApOwoKICAgICAgICAgICAgICAgICAgIENPUkJBOjpC b29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAgICBSdGVjRXZlbnRDaGFu bmVsQWRtaW46OkV2ZW50Q2hhbm5lbF9wdHIgJgogICk7CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4g b3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9FUlJPUiAmX3Rhb19hZ2dyZWdhdGUp CnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuX2lkICgpKQogICAgcmV0dXJuIDE7CiAg ZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChU QU9fSW5wdXRDRFIgJixSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lOQ0hS T05JWkFUSU9OX0VSUk9SJikKewogIHJldHVybiAxOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4g b3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpFdmVudENoYW5uZWw6OlFPU19FUlJPUiAmX3Rhb19hZ2dyZWdhdGUpCnsKCiAgaWYgKHN0 cm0gPDwgX3Rhb19hZ2dyZWdhdGUuX2lkICgpKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0 dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIg JixSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6UU9TX0VSUk9SJikKewogIHJl dHVybiAxOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENE UiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNVQlND UklQVElPTl9FUlJPUiAmX3Rhb19hZ2dyZWdhdGUpCnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dy ZWdhdGUuX2lkICgpKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGlu ZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJixSdGVjRXZlbnRDaGFu bmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1VCU0NSSVBUSU9OX0VSUk9SJikKewogIHJldHVybiAx Owp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3Ry bSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNPUlJFTEFUSU9O X0VSUk9SICZfdGFvX2FnZ3JlZ2F0ZSkKewoKICBpZiAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5f aWQgKCkpCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKaW5saW5lIENPUkJB OjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmLFJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6RXZlbnRDaGFubmVsOjpDT1JSRUxBVElPTl9FUlJPUiYpCnsKICByZXR1cm4gMTsKfQoKaW5s aW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0 IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpESVNQQVRDSF9FUlJPUiAmX3Rh b19hZ2dyZWdhdGUpCnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuX2lkICgpKQogICAg cmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBv cGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJixSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hh bm5lbDo6RElTUEFUQ0hfRVJST1ImKQp7CiAgcmV0dXJuIDE7Cn0KCmlubGluZSBDT1JCQTo6Qm9v bGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBSdGVjRXZlbnRDaGFu bmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q0FOVF9BUFBFTkRfT0JTRVJWRVIgJl90YW9fYWdncmVn YXRlKQp7CgogIGlmIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLl9pZCAoKSkKICAgIHJldHVybiAx OwogIGVsc2UKICAgIHJldHVybiAwOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+ PiAoVEFPX0lucHV0Q0RSICYsUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNB TlRfQVBQRU5EX09CU0VSVkVSJikKewogIHJldHVybiAxOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xl YW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfUkVNT1ZFX09CU0VSVkVSICZfdGFvX2FnZ3JlZ2F0 ZSkKewoKICBpZiAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5faWQgKCkpCiAgICByZXR1cm4gMTsK ICBlbHNlCiAgICByZXR1cm4gMDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4g KFRBT19JbnB1dENEUiAmLFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpDQU5U X1JFTU9WRV9PQlNFUlZFUiYpCnsKICByZXR1cm4gMTsKfQojIDMyMjggIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50 Q2hhbm5lbEFkbWluQy5oIiAyCiMgMzIzOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgi CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3Qu aCIgMQojIDMyMzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB Ty9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIiAyCiMgMjkgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv UnRlY0V2ZW50Q2hhbm5lbEFkbWluUy5oIiAyCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNl cnZlci5oIiAxCiMgMzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluUy5oIiAyCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNl cnZlci9TZXJ2YW50X0Jhc2UuaCIgMQojIDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pblMu aCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90 YW8vUG9ydGFibGVTZXJ2ZXIvQ29sbG9jYXRlZF9PYmplY3QuaCIgMQojIDM4ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNF dmVudENoYW5uZWxBZG1pblMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvVGhydVBPQV9PYmplY3RfUHJveHlf SW1wbC5oIiAxCiMgMzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluUy5oIiAyCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNl cnZlci9EaXJlY3RfT2JqZWN0X1Byb3h5X0ltcGwuaCIgMQojIDQwICIvaG9tZS9ycnAvc2Nob29s L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENo YW5uZWxBZG1pblMuaCIgMgojIDUxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pblMuaCIKbmFt ZXNwYWNlIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW4KewogIGNsYXNzIFByb3h5UHVzaFN1cHBs aWVyOwogIHR5cGVkZWYgUHJveHlQdXNoU3VwcGxpZXIgKlByb3h5UHVzaFN1cHBsaWVyX3B0cjsK CiAgY2xhc3MgX1RBT19Qcm94eVB1c2hTdXBwbGllcl9UaHJ1UE9BX1Byb3h5X0ltcGw7CiAgY2xh c3MgX1RBT19Qcm94eVB1c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXI7CgogIGNs YXNzIFByb3h5UHVzaFN1cHBsaWVyIDogcHVibGljIHZpcnR1YWwgUE9BX1J0ZWNFdmVudENvbW06 OlB1c2hTdXBwbGllcgogIHsKICBwcm90ZWN0ZWQ6CiAgICBQcm94eVB1c2hTdXBwbGllciAodm9p ZCk7CgogIHB1YmxpYzoKICAgIFByb3h5UHVzaFN1cHBsaWVyIChjb25zdCBQcm94eVB1c2hTdXBw bGllciYgcmhzKTsKICAgIHZpcnR1YWwgflByb3h5UHVzaFN1cHBsaWVyICh2b2lkKTsKCgogICAg dmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfYSAoCiAgICAgICAgY29uc3QgY2hhciogbG9naWNh bF90eXBlX2lkLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg ICApOwoKICAgIHZpcnR1YWwgdm9pZCogX2Rvd25jYXN0ICgKICAgICAgICBjb25zdCBjaGFyKiBs b2dpY2FsX3R5cGVfaWQKICAgICAgKTsKCiAgICBzdGF0aWMgdm9pZCBfaXNfYV9za2VsICgKICAg ICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2 b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09S QkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICBzdGF0aWMgdm9pZCBfbm9uX2V4 aXN0ZW50X3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9p ZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHN0 YXRpYyB2b2lkIF9pbnRlcmZhY2Vfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJl cSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAgdm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg ICAgICk7CgogICAgdmlydHVhbCB2b2lkIF9kaXNwYXRjaCAoCiAgICAgICAgVEFPX1NlcnZlclJl cXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpfc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7Cgog ICAgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaFN1cHBsaWVyICpfdGhpcyAoCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgdmly dHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoK ICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0X3B1c2hfY29uc3VtZXIgKAogICAgICAgIFJ0ZWNFdmVu dENvbW06OlB1c2hDb25zdW1lcl9wdHIgcHVzaF9jb25zdW1lciwKICAgICAgICBjb25zdCBSdGVj RXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICYgcW9zLAogICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl bUV4Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpBbHJlYWR5Q29ubmVjdGVkLCBSdGVj RXZlbnRDaGFubmVsQWRtaW46OlR5cGVFcnJvciApID0gMDsKCgoKCgogICAgICAgIHN0YXRpYyB2 b2lkIGNvbm5lY3RfcHVzaF9jb25zdW1lcl9za2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVz dCAmX3Rhb19yZXEsCiAgICAgICAgdm9pZCAqX3Rhb19vYmosCiAgICAgICAgdm9pZCAqX3Rhb19z ZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZF9jb25u ZWN0aW9uICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAg KQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICAgICAg c3RhdGljIHZvaWQgc3VzcGVuZF9jb25uZWN0aW9uX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJS ZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lkICpf dGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHZpcnR1YWwgdm9pZCByZXN1bWVf Y29ubmVjdGlvbiAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAg ICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAg ICAgIHN0YXRpYyB2b2lkIHJlc3VtZV9jb25uZWN0aW9uX3NrZWwgKAogICAgICAgIFRBT19TZXJ2 ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lk ICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIGRpc2Nv bm5lY3RfcHVzaF9zdXBwbGllcl9za2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVx LAogICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpjb250ZXh0LAogICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwoKCiAgfTsKCgoKCgoKICBjbGFz cyBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciA6IHB1Ymxp YyB2aXJ0dWFsIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1Byb3h5UHVzaFN1cHBsaWVy X1Byb3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1N0 cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19Qcm94eVB1 c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwg OjpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfSW1w bCAmc2VsZWN0X3Byb3h5ICgKICAgICAgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVz aFN1cHBsaWVyICpvYmplY3QsCiAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKICBwcml2YXRlOgoKCiAgICB2b2lkIGNyZWF0ZV9w cm94eSAoCiAgICAgIGludCBjb2xsb2NhdGlvbl9zdHJhdGVneSwKICAgICAgQ09SQkE6OkVudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKCgoKICAgIDo6 UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1Byb3h5X0ltcGwK ICAgICpwcm94eV9jYWNoZV9bVEFPX0NvbGxvY2F0aW9uX1N0cmF0ZWdpZXM6OkNTX0xBU1RdOwoK ICAgIEFDRV9NVF9TWU5DSDo6TVVURVggbXV0ZXhfOwoKCgoKICBwdWJsaWM6CiAgICBzdGF0aWMg X1RBT19Qcm94eVB1c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9f UHJveHlQdXNoU3VwcGxpZXJfU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKICB9Owoj IDIyMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TLmgiCiAgY2xhc3MgX1RBT19Qcm94eVB1 c2hTdXBwbGllcl9UaHJ1UE9BX1Byb3h5X0ltcGwgOgogICAgcHVibGljIHZpcnR1YWwgOjpSdGVj RXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfSW1wbCwKICAg IHB1YmxpYyB2aXJ0dWFsIFRBT19UaHJ1UE9BX09iamVjdF9Qcm94eV9JbXBsLAogICAgcHVibGlj IHZpcnR1YWwgOjpQT0FfUnRlY0V2ZW50Q29tbTo6X1RBT19QdXNoU3VwcGxpZXJfVGhydVBPQV9Q cm94eV9JbXBsCgogIHsKICBwdWJsaWM6CiAgICBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1RocnVQ T0FfUHJveHlfSW1wbCAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19Qcm94eVB1c2hTdXBwbGll cl9UaHJ1UE9BX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0 X3B1c2hfY29uc3VtZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3Rh cmdldF8sCiAgICAgICAgUnRlY0V2ZW50Q29tbTo6UHVzaENvbnN1bWVyX3B0ciBwdXNoX2NvbnN1 bWVyLAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgJiBx b3MsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBSdGVj RXZlbnRDaGFubmVsQWRtaW46OkFscmVhZHlDb25uZWN0ZWQsIFJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6VHlwZUVycm9yICk7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kX2Nvbm5lY3Rpb24g KAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAg ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFs IHZvaWQgcmVzdW1lX2Nvbm5lY3Rpb24gKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0 ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj ZXB0aW9uICk7CgoKCgogIH07CgoKCgoKCiAgY2xhc3MgUHJveHlQdXNoQ29uc3VtZXI7CiAgdHlw ZWRlZiBQcm94eVB1c2hDb25zdW1lciAqUHJveHlQdXNoQ29uc3VtZXJfcHRyOwoKICBjbGFzcyBf VEFPX1Byb3h5UHVzaENvbnN1bWVyX1RocnVQT0FfUHJveHlfSW1wbDsKICBjbGFzcyBfVEFPX1By b3h5UHVzaENvbnN1bWVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlcjsKCiAgY2xhc3MgUHJveHlQ dXNoQ29uc3VtZXIgOiBwdWJsaWMgdmlydHVhbCBQT0FfUnRlY0V2ZW50Q29tbTo6UHVzaENvbnN1 bWVyCiAgewogIHByb3RlY3RlZDoKICAgIFByb3h5UHVzaENvbnN1bWVyICh2b2lkKTsKCiAgcHVi bGljOgogICAgUHJveHlQdXNoQ29uc3VtZXIgKGNvbnN0IFByb3h5UHVzaENvbnN1bWVyJiByaHMp OwogICAgdmlydHVhbCB+UHJveHlQdXNoQ29uc3VtZXIgKHZvaWQpOwoKCiAgICB2aXJ0dWFsIENP UkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgICBjb25zdCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQs CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAg dmlydHVhbCB2b2lkKiBfZG93bmNhc3QgKAogICAgICAgIGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlw ZV9pZAogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9pc19hX3NrZWwgKAogICAgICAgIFRBT19T ZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZh bnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9ub25fZXhpc3RlbnRfc2tl bCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpvYmosCiAg ICAgICAgdm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQg X2ludGVyZmFjZV9za2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAg IHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6 RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAg ICB2aXJ0dWFsIHZvaWQgX2Rpc3BhdGNoICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVx LAogICAgICAgIHZvaWQgKl9zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICA6OlJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXIgKl90aGlzICgKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIGNvbnN0 IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogICAgdmlydHVh bCB2b2lkIGNvbm5lY3RfcHVzaF9zdXBwbGllciAoCiAgICAgICAgUnRlY0V2ZW50Q29tbTo6UHVz aFN1cHBsaWVyX3B0ciBwdXNoX3N1cHBsaWVyLAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5u ZWxBZG1pbjo6U3VwcGxpZXJRT1MgJiBxb3MsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u LCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkFscmVhZHlDb25uZWN0ZWQgKSA9IDA7CgoKCgogICAg ICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RfcHVzaF9zdXBwbGllcl9za2VsICgKICAgICAgICBUQU9f U2VydmVyUmVxdWVzdCAmX3Rhb19yZXEsCiAgICAgICAgdm9pZCAqX3Rhb19vYmosCiAgICAgICAg dm9pZCAqX3Rhb19zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICBzdGF0aWMgdm9pZCBw dXNoX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAq b2JqLAogICAgICAgIHZvaWQgKmNvbnRleHQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu dmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQgZGlzY29ubmVjdF9wdXNoX2Nv bnN1bWVyX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9p ZCAqb2JqLAogICAgICAgIHZvaWQgKmNvbnRleHQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0 X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgoKICB9OwoKCgoKCgogIGNsYXNzIF9UQU9fUHJveHlQ dXNoQ29uc3VtZXJfU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyIDogcHVibGljIHZpcnR1YWwgOjpS dGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfQnJva2Vy CiAgewogIHB1YmxpYzoKICAgIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfU3RyYXRlZ2l6ZWRfUHJv eHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX1Byb3h5UHVzaENvbnN1bWVyX1N0 cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCA6OlJ0ZWNFdmVudENo YW5uZWxBZG1pbjo6X1RBT19Qcm94eVB1c2hDb25zdW1lcl9Qcm94eV9JbXBsICZzZWxlY3RfcHJv eHkgKAogICAgICA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXIgKm9i amVjdCwKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUKICAgICk7CgogIHByaXZhdGU6CgoKICAgIHZvaWQgY3JlYXRlX3Byb3h5ICgKICAgICAg aW50IGNvbGxvY2F0aW9uX3N0cmF0ZWd5LAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7CgoKCgogICAgOjpSdGVjRXZlbnRDaGFu bmVsQWRtaW46Ol9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfSW1wbAogICAgKnByb3h5X2Nh Y2hlX1tUQU9fQ29sbG9jYXRpb25fU3RyYXRlZ2llczo6Q1NfTEFTVF07CgogICAgQUNFX01UX1NZ TkNIOjpNVVRFWCBtdXRleF87CgoKCgogIHB1YmxpYzoKICAgIHN0YXRpYyBfVEFPX1Byb3h5UHVz aENvbnN1bWVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAqdGhlX1RBT19Qcm94eVB1c2hDb25z dW1lcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogIH07CiMgNDE3ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0 ZWNFdmVudENoYW5uZWxBZG1pblMuaCIKICBjbGFzcyBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1Ro cnVQT0FfUHJveHlfSW1wbCA6CiAgICBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6X1RBT19Qcm94eVB1c2hDb25zdW1lcl9Qcm94eV9JbXBsLAogICAgcHVibGljIHZpcnR1 YWwgVEFPX1RocnVQT0FfT2JqZWN0X1Byb3h5X0ltcGwsCiAgICBwdWJsaWMgdmlydHVhbCA6OlBP QV9SdGVjRXZlbnRDb21tOjpfVEFPX1B1c2hDb25zdW1lcl9UaHJ1UE9BX1Byb3h5X0ltcGwKCiAg ewogIHB1YmxpYzoKICAgIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfVGhydVBPQV9Qcm94eV9JbXBs ICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX1Byb3h5UHVzaENvbnN1bWVyX1RocnVQT0FfUHJv eHlfSW1wbCAodm9pZCkgeyB9CgogICAgdmlydHVhbCB2b2lkIGNvbm5lY3RfcHVzaF9zdXBwbGll ciAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAg ICBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyIHB1c2hfc3VwcGxpZXIsCiAgICAgICAg Y29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAmIHFvcywKICAgICAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAg KQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCApOwoKCgoKCiAgfTsKCgoKCgoKICBjbGFzcyBDb25zdW1l ckFkbWluOwogIHR5cGVkZWYgQ29uc3VtZXJBZG1pbiAqQ29uc3VtZXJBZG1pbl9wdHI7CgogIGNs YXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9UaHJ1UE9BX1Byb3h5X0ltcGw7CiAgY2xhc3MgX1RBT19D b25zdW1lckFkbWluX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlcjsKCiAgY2xhc3MgQ29uc3VtZXJB ZG1pbiA6IHB1YmxpYyB2aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50QmFzZQogIHsKICBw cm90ZWN0ZWQ6CiAgICBDb25zdW1lckFkbWluICh2b2lkKTsKCiAgcHVibGljOgogICAgQ29uc3Vt ZXJBZG1pbiAoY29uc3QgQ29uc3VtZXJBZG1pbiYgcmhzKTsKICAgIHZpcnR1YWwgfkNvbnN1bWVy QWRtaW4gKHZvaWQpOwoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAg ICBjb25zdCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0 X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgdmlydHVhbCB2b2lkKiBfZG93bmNhc3QgKAog ICAgICAgIGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9pZAogICAgICApOwoKICAgIHN0YXRpYyB2 b2lkIF9pc19hX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAg dm9pZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAg IHN0YXRpYyB2b2lkIF9ub25fZXhpc3RlbnRfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVl c3QgJnJlcSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAgdm9pZCAqc2VydmFudF91cGNhbGws CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh YmxlCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQgX2ludGVyZmFjZV9za2VsICgKICAgICAgICBU QU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpz ZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgX2Rpc3BhdGNoICgK ICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKl9zZXJ2YW50X3Vw Y2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUKICAgICAgKTsKCiAgICA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJB ZG1pbiAqX3RoaXMgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog ICAgICApOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lk ICh2b2lkKSBjb25zdDsKCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQ dXNoU3VwcGxpZXJfcHRyIG9idGFpbl9wdXNoX3N1cHBsaWVyICgKICAgICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0 ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgb2J0YWluX3B1c2hfc3Vw cGxpZXJfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJl90YW9fcmVxLAogICAgICAg IHZvaWQgKl90YW9fb2JqLAogICAgICAgIHZvaWQgKl90YW9fc2VydmFudF91cGNhbGwsCiAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg ICAgICk7CgoKICB9OwoKCgoKCgogIGNsYXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9TdHJhdGVnaXpl ZF9Qcm94eV9Ccm9rZXIgOiBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 X1RBT19Db25zdW1lckFkbWluX1Byb3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX0Nv bnN1bWVyQWRtaW5fU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0dWFs IH5fVEFPX0NvbnN1bWVyQWRtaW5fU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKCiAg ICB2aXJ0dWFsIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX0NvbnN1bWVyQWRtaW5fUHJv eHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgICAgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNv bnN1bWVyQWRtaW4gKm9iamVjdCwKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf RW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7CgogIHByaXZhdGU6CgoKICAgIHZvaWQgY3JlYXRl X3Byb3h5ICgKICAgICAgaW50IGNvbGxvY2F0aW9uX3N0cmF0ZWd5LAogICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7CgoKCgogICAg OjpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9JbXBsCiAg ICAqcHJveHlfY2FjaGVfW1RBT19Db2xsb2NhdGlvbl9TdHJhdGVnaWVzOjpDU19MQVNUXTsKCiAg ICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIG11dGV4XzsKCgoKCiAgcHVibGljOgogICAgc3RhdGljIF9U QU9fQ29uc3VtZXJBZG1pbl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9fQ29uc3Vt ZXJBZG1pbl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogIH07CiMgNTc1ICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz L1J0ZWNFdmVudENoYW5uZWxBZG1pblMuaCIKICBjbGFzcyBfVEFPX0NvbnN1bWVyQWRtaW5fVGhy dVBPQV9Qcm94eV9JbXBsIDoKICAgIHB1YmxpYyB2aXJ0dWFsIDo6UnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpfVEFPX0NvbnN1bWVyQWRtaW5fUHJveHlfSW1wbCwKICAgIHB1YmxpYyB2aXJ0dWFsIFRB T19UaHJ1UE9BX09iamVjdF9Qcm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIF9UQU9fQ29uc3Vt ZXJBZG1pbl9UaHJ1UE9BX1Byb3h5X0ltcGwgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fQ29u c3VtZXJBZG1pbl9UaHJ1UE9BX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICAgIHZpcnR1YWwgUnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl9wdHIgb2J0YWluX3B1c2hfc3Vw cGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl CiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCgogIH07 CgoKCgoKCiAgY2xhc3MgU3VwcGxpZXJBZG1pbjsKICB0eXBlZGVmIFN1cHBsaWVyQWRtaW4gKlN1 cHBsaWVyQWRtaW5fcHRyOwoKICBjbGFzcyBfVEFPX1N1cHBsaWVyQWRtaW5fVGhydVBPQV9Qcm94 eV9JbXBsOwogIGNsYXNzIF9UQU9fU3VwcGxpZXJBZG1pbl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9r ZXI7CgogIGNsYXNzIFN1cHBsaWVyQWRtaW4gOiBwdWJsaWMgdmlydHVhbCBQb3J0YWJsZVNlcnZl cjo6U2VydmFudEJhc2UKICB7CiAgcHJvdGVjdGVkOgogICAgU3VwcGxpZXJBZG1pbiAodm9pZCk7 CgogIHB1YmxpYzoKICAgIFN1cHBsaWVyQWRtaW4gKGNvbnN0IFN1cHBsaWVyQWRtaW4mIHJocyk7 CiAgICB2aXJ0dWFsIH5TdXBwbGllckFkbWluICh2b2lkKTsKCgogICAgdmlydHVhbCBDT1JCQTo6 Qm9vbGVhbiBfaXNfYSAoCiAgICAgICAgY29uc3QgY2hhciogbG9naWNhbF90eXBlX2lkLAogICAg ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9 CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwoKICAgIHZpcnR1 YWwgdm9pZCogX2Rvd25jYXN0ICgKICAgICAgICBjb25zdCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQK ICAgICAgKTsKCiAgICBzdGF0aWMgdm9pZCBfaXNfYV9za2VsICgKICAgICAgICBUQU9fU2VydmVy UmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpzZXJ2YW50X3Vw Y2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUKICAgICAgKTsKCiAgICBzdGF0aWMgdm9pZCBfbm9uX2V4aXN0ZW50X3NrZWwgKAog ICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAqb2JqLAogICAgICAg IHZvaWQgKnNlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9pbnRl cmZhY2Vfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lk ICpvYmosCiAgICAgICAgdm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgdmly dHVhbCB2b2lkIF9kaXNwYXRjaCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAg ICAgICB2b2lkICpfc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgOjpSdGVjRXZlbnRD aGFubmVsQWRtaW46OlN1cHBsaWVyQWRtaW4gKl90aGlzICgKICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9p bnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogICAgdmlydHVhbCBSdGVjRXZl bnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3B0ciBvYnRhaW5fcHVzaF9jb25zdW1l ciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAg ICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgICAgIHN0YXRp YyB2b2lkIG9idGFpbl9wdXNoX2NvbnN1bWVyX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1 ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lkICpfdGFv X3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9F bnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKCiAgfTsKCgoKCgoKICBjbGFzcyBfVEFPX1N1 cHBsaWVyQWRtaW5fU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyIDogcHVibGljIHZpcnR1YWwgOjpS dGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fU3VwcGxpZXJBZG1pbl9Qcm94eV9Ccm9rZXIKICB7 CiAgcHVibGljOgogICAgX1RBT19TdXBwbGllckFkbWluX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tl ciAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19TdXBwbGllckFkbWluX1N0cmF0ZWdpemVkX1By b3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 X1RBT19TdXBwbGllckFkbWluX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgIDo6UnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWluICpvYmplY3QsCiAgICAgIENPUkJBX0Vu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKICBwcml2 YXRlOgoKCiAgICB2b2lkIGNyZWF0ZV9wcm94eSAoCiAgICAgIGludCBjb2xsb2NhdGlvbl9zdHJh dGVneSwKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlCiAgICApOwoKCgoKICAgIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1N1cHBs aWVyQWRtaW5fUHJveHlfSW1wbAogICAgKnByb3h5X2NhY2hlX1tUQU9fQ29sbG9jYXRpb25fU3Ry YXRlZ2llczo6Q1NfTEFTVF07CgogICAgQUNFX01UX1NZTkNIOjpNVVRFWCBtdXRleF87CgoKCgog IHB1YmxpYzoKICAgIHN0YXRpYyBfVEFPX1N1cHBsaWVyQWRtaW5fU3RyYXRlZ2l6ZWRfUHJveHlf QnJva2VyICp0aGVfVEFPX1N1cHBsaWVyQWRtaW5fU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2 b2lkKTsKICB9OwojIDcyOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TLmgiCiAgY2xhc3Mg X1RBT19TdXBwbGllckFkbWluX1RocnVQT0FfUHJveHlfSW1wbCA6CiAgICBwdWJsaWMgdmlydHVh bCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19TdXBwbGllckFkbWluX1Byb3h5X0ltcGws CiAgICBwdWJsaWMgdmlydHVhbCBUQU9fVGhydVBPQV9PYmplY3RfUHJveHlfSW1wbAogIHsKICBw dWJsaWM6CiAgICBfVEFPX1N1cHBsaWVyQWRtaW5fVGhydVBPQV9Qcm94eV9JbXBsICh2b2lkKTsK CiAgICB2aXJ0dWFsIH5fVEFPX1N1cHBsaWVyQWRtaW5fVGhydVBPQV9Qcm94eV9JbXBsICh2b2lk KSB7IH0KCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3Vt ZXJfcHRyIG9idGFpbl9wdXNoX2NvbnN1bWVyICgKICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xs b2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl bUV4Y2VwdGlvbiApOwoKCgoKICB9OwoKCgoKCgogIGNsYXNzIE9ic2VydmVyOwogIHR5cGVkZWYg T2JzZXJ2ZXIgKk9ic2VydmVyX3B0cjsKCiAgY2xhc3MgX1RBT19PYnNlcnZlcl9UaHJ1UE9BX1By b3h5X0ltcGw7CiAgY2xhc3MgX1RBT19PYnNlcnZlcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXI7 CgogIGNsYXNzIE9ic2VydmVyIDogcHVibGljIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZh bnRCYXNlCiAgewogIHByb3RlY3RlZDoKICAgIE9ic2VydmVyICh2b2lkKTsKCiAgcHVibGljOgog ICAgT2JzZXJ2ZXIgKGNvbnN0IE9ic2VydmVyJiByaHMpOwogICAgdmlydHVhbCB+T2JzZXJ2ZXIg KHZvaWQpOwoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgICBjb25z dCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly b25tZW50ICgpCiAgICAgICk7CgogICAgdmlydHVhbCB2b2lkKiBfZG93bmNhc3QgKAogICAgICAg IGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9pZAogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9p c19hX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAq b2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9u bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHN0YXRp YyB2b2lkIF9ub25fZXhpc3RlbnRfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJl cSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAgdm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg ICAgICk7CgogICAgc3RhdGljIHZvaWQgX2ludGVyZmFjZV9za2VsICgKICAgICAgICBUQU9fU2Vy dmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpzZXJ2YW50 X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l bnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgX2Rpc3BhdGNoICgKICAgICAg ICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKl9zZXJ2YW50X3VwY2FsbCwK ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUKICAgICAgKTsKCiAgICA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXIgKl90aGlz ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAg ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29u c3Q7CgogICAgdmlydHVhbCB2b2lkIHVwZGF0ZV9jb25zdW1lciAoCiAgICAgICAgY29uc3QgUnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHN1YiwKICAgICAgICBDT1JCQTo6RW52 aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0 ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlX2NvbnN1bWVy X3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lk ICpfdGFvX29iaiwKICAgICAgICB2b2lkICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENP UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICAp OwoKICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVfc3VwcGxpZXIgKAogICAgICAgIGNvbnN0IFJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgJiBwdWIsCiAgICAgICAgQ09SQkE6OkVudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19k ZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVt RXhjZXB0aW9uICkgPSAwOwoKCgogICAgICAgIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdXBwbGllcl9z a2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmX3Rhb19yZXEsCiAgICAgICAgdm9pZCAq X3Rhb19vYmosCiAgICAgICAgdm9pZCAqX3Rhb19zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JC QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsK CgogIH07CgoKCgoKCiAgY2xhc3MgX1RBT19PYnNlcnZlcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9r ZXIgOiBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19PYnNlcnZl cl9Qcm94eV9Ccm9rZXIKICB7CiAgcHVibGljOgogICAgX1RBT19PYnNlcnZlcl9TdHJhdGVnaXpl ZF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fT2JzZXJ2ZXJfU3RyYXRl Z2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0dWFsIDo6UnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpfVEFPX09ic2VydmVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgIDo6 UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlciAqb2JqZWN0LAogICAgICBDT1JCQV9FbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgKTsKCiAgcHJpdmF0 ZToKCgogICAgdm9pZCBjcmVhdGVfcHJveHkgKAogICAgICBpbnQgY29sbG9jYXRpb25fc3RyYXRl Z3ksCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZQogICAgKTsKCgoKCiAgICA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19PYnNlcnZl cl9Qcm94eV9JbXBsCiAgICAqcHJveHlfY2FjaGVfW1RBT19Db2xsb2NhdGlvbl9TdHJhdGVnaWVz OjpDU19MQVNUXTsKCiAgICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIG11dGV4XzsKCgoKCiAgcHVibGlj OgogICAgc3RhdGljIF9UQU9fT2JzZXJ2ZXJfU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICp0aGVf VEFPX09ic2VydmVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsKIyA4OTgg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y YnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluUy5oIgogIGNsYXNzIF9UQU9fT2JzZXJ2ZXJfVGhy dVBPQV9Qcm94eV9JbXBsIDoKICAgIHB1YmxpYyB2aXJ0dWFsIDo6UnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpfVEFPX09ic2VydmVyX1Byb3h5X0ltcGwsCiAgICBwdWJsaWMgdmlydHVhbCBUQU9fVGhy dVBPQV9PYmplY3RfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICBfVEFPX09ic2VydmVyX1Ro cnVQT0FfUHJveHlfSW1wbCAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19PYnNlcnZlcl9UaHJ1 UE9BX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVfY29uc3Vt ZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAg ICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHN1YiwKICAgICAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAg ICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1 YWwgdm9pZCB1cGRhdGVfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0 ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBw bGllclFPUyAmIHB1YiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24gKTsKCgoKCiAgfTsKCgoKCgoKICBjbGFzcyBFdmVudENoYW5uZWw7CiAgdHlwZWRlZiBF dmVudENoYW5uZWwgKkV2ZW50Q2hhbm5lbF9wdHI7CgogIGNsYXNzIF9UQU9fRXZlbnRDaGFubmVs X1RocnVQT0FfUHJveHlfSW1wbDsKICBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9TdHJhdGVnaXpl ZF9Qcm94eV9Ccm9rZXI7CgogIGNsYXNzIEV2ZW50Q2hhbm5lbCA6IHB1YmxpYyB2aXJ0dWFsIFBv cnRhYmxlU2VydmVyOjpTZXJ2YW50QmFzZQogIHsKICBwcm90ZWN0ZWQ6CiAgICBFdmVudENoYW5u ZWwgKHZvaWQpOwoKICBwdWJsaWM6CiAgICBFdmVudENoYW5uZWwgKGNvbnN0IEV2ZW50Q2hhbm5l bCYgcmhzKTsKICAgIHZpcnR1YWwgfkV2ZW50Q2hhbm5lbCAodm9pZCk7CgoKICAgIHZpcnR1YWwg Q09SQkE6OkJvb2xlYW4gX2lzX2EgKAogICAgICAgIGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9p ZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAg ICB2aXJ0dWFsIHZvaWQqIF9kb3duY2FzdCAoCiAgICAgICAgY29uc3QgY2hhciogbG9naWNhbF90 eXBlX2lkCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQgX2lzX2Ffc2tlbCAoCiAgICAgICAgVEFP X1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAgdm9pZCAqc2Vy dmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQgX25vbl9leGlzdGVudF9z a2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9iaiwK ICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICBzdGF0aWMgdm9p ZCBfaW50ZXJmYWNlX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAg ICAgdm9pZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoK ICAgIHZpcnR1YWwgdm9pZCBfZGlzcGF0Y2ggKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZy ZXEsCiAgICAgICAgdm9pZCAqX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9u bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIDo6UnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWwgKl90aGlzICgKICAgICAgICBDT1JCQTo6 RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAg VEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNo YXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogICAgdmlydHVhbCBS dGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fcHRyIGZvcl9jb25zdW1lcnMgKAog ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRo cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgICAgICBzdGF0aWMgdm9p ZCBmb3JfY29uc3VtZXJzX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3Jl cSwKICAgICAgICB2b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lkICpfdGFvX3NlcnZhbnRfdXBj YWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZQogICAgICApOwoKICAgIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBw bGllckFkbWluX3B0ciBmb3Jfc3VwcGxpZXJzICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRf ZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRp b24gKSA9IDA7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgZm9yX3N1cHBsaWVyc19za2VsICgKICAg ICAgICBUQU9fU2VydmVyUmVxdWVzdCAmX3Rhb19yZXEsCiAgICAgICAgdm9pZCAqX3Rhb19vYmos CiAgICAgICAgdm9pZCAqX3Rhb19zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0 dWFsIHZvaWQgZGVzdHJveSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB X0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50 ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoK CgogICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJl cXVlc3QgJl90YW9fcmVxLAogICAgICAgIHZvaWQgKl90YW9fb2JqLAogICAgICAgIHZvaWQgKl90 YW9fc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB X0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgdmlydHVhbCBSdGVjRXZlbnRDaGFu bmVsQWRtaW46Ok9ic2VydmVyX0hhbmRsZSBhcHBlbmRfb2JzZXJ2ZXIgKAogICAgICAgIFJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfcHRyIGd3LAogICAgICAgIENPUkJBOjpFbnZpcm9u bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVm YXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4 Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpB VElPTl9FUlJPUiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfQVBQ RU5EX09CU0VSVkVSICkgPSAwOwoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgYXBwZW5kX29ic2Vy dmVyX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2 b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lkICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAg IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAg ICApOwoKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVfb2JzZXJ2ZXIgKAogICAgICAgIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfSGFuZGxlIGd3LAogICAgICAgIENPUkJBOjpFbnZpcm9u bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVm YXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4 Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpB VElPTl9FUlJPUiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfUkVN T1ZFX09CU0VSVkVSICkgPSAwOwoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlX29ic2Vy dmVyX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2 b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lkICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAg IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAg ICApOwoKCiAgfTsKCgoKCgoKICBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9TdHJhdGVnaXplZF9Q cm94eV9Ccm9rZXIgOiBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RB T19FdmVudENoYW5uZWxfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAgIF9UQU9fRXZlbnRD aGFubmVsX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCB+X1RB T19FdmVudENoYW5uZWxfU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0 dWFsIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX0V2ZW50Q2hhbm5lbF9Qcm94eV9JbXBs ICZzZWxlY3RfcHJveHkgKAogICAgICA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFu bmVsICpvYmplY3QsCiAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlCiAgICApOwoKICBwcml2YXRlOgoKCiAgICB2b2lkIGNyZWF0ZV9wcm94eSAo CiAgICAgIGludCBjb2xsb2NhdGlvbl9zdHJhdGVneSwKICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKCgoKICAgIDo6UnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpfVEFPX0V2ZW50Q2hhbm5lbF9Qcm94eV9JbXBsCiAgICAqcHJveHlf Y2FjaGVfW1RBT19Db2xsb2NhdGlvbl9TdHJhdGVnaWVzOjpDU19MQVNUXTsKCiAgICBBQ0VfTVRf U1lOQ0g6Ok1VVEVYIG11dGV4XzsKCgoKCiAgcHVibGljOgogICAgc3RhdGljIF9UQU9fRXZlbnRD aGFubmVsX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAqdGhlX1RBT19FdmVudENoYW5uZWxfU3Ry YXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKICB9OwojIDExMjcgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50 Q2hhbm5lbEFkbWluUy5oIgogIGNsYXNzIF9UQU9fRXZlbnRDaGFubmVsX1RocnVQT0FfUHJveHlf SW1wbCA6CiAgICBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19F dmVudENoYW5uZWxfUHJveHlfSW1wbCwKICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19UaHJ1UE9BX09i amVjdF9Qcm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIF9UQU9fRXZlbnRDaGFubmVsX1RocnVQ T0FfUHJveHlfSW1wbCAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19FdmVudENoYW5uZWxfVGhy dVBPQV9Qcm94eV9JbXBsICh2b2lkKSB7IH0KCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIgZm9yX2NvbnN1bWVycyAoCiAgICAgICAgQ09SQkFfT2Jq ZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENP UkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpTdXBwbGllckFkbWluX3B0ciBmb3Jfc3VwcGxpZXJzICgKICAgICAgICBDT1JCQV9PYmpl Y3QgKl9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApCiAgICAgIHRocm93ICggQ09S QkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgogICAgdmlydHVhbCB2b2lkIGRlc3Ryb3kgKAogICAg ICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6 OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAg ICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIFJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfSGFuZGxlIGFwcGVuZF9vYnNlcnZlciAoCiAgICAg ICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBSdGVjRXZl bnRDaGFubmVsQWRtaW46Ok9ic2VydmVyX3B0ciBndywKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAo IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFu bmVsOjpTWU5DSFJPTklaQVRJT05fRVJST1IsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRD aGFubmVsOjpDQU5UX0FQUEVORF9PQlNFUlZFUiApOwoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVt b3ZlX29ic2VydmVyICgKICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xsb2NhdGVkX3Rhb190YXJn ZXRfLAogICAgICAgIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfSGFuZGxlIGd3LAog ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs ZQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9FUlJPUiwgUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfUkVNT1ZFX09CU0VSVkVSICk7CgoK CgoKCiAgfTsKCgoKCgoKfQoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TX1QuaCIg MQojIDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Ji c3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pblNfVC5oIgojIDEgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0 ZWNFdmVudENoYW5uZWxBZG1pblNfVC5oIiAyCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFk bWluU19ULmgiCm5hbWVzcGFjZSBQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluCnsKCiAgdGVtcGxh dGUgPGNsYXNzIFQ+CiAgY2xhc3MgUHJveHlQdXNoU3VwcGxpZXJfdGllIDogcHVibGljIFByb3h5 UHVzaFN1cHBsaWVyCiAgewogIHB1YmxpYzoKICAgIFByb3h5UHVzaFN1cHBsaWVyX3RpZSAoVCAm dCk7CgogICAgUHJveHlQdXNoU3VwcGxpZXJfdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6UE9B X3B0ciBwb2EpOwoKICAgIFByb3h5UHVzaFN1cHBsaWVyX3RpZSAoVCAqdHAsIENPUkJBOjpCb29s ZWFuIHJlbGVhc2U9MSk7CgogICAgUHJveHlQdXNoU3VwcGxpZXJfdGllIChUICp0cCwgUG9ydGFi bGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIH5Q cm94eVB1c2hTdXBwbGllcl90aWUgKHZvaWQpOwoKCgogICAgVCAqX3RpZWRfb2JqZWN0ICh2b2lk KTsKCiAgICB2b2lkIF90aWVkX29iamVjdCAoVCAmb2JqKTsKCiAgICB2b2lkIF90aWVkX29iamVj dCAoVCAqb2JqLCBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIENPUkJBOjpCb29sZWFu IF9pc19vd25lciAodm9pZCk7CgogICAgdm9pZCBfaXNfb3duZXIgKENPUkJBOjpCb29sZWFuIGIp OwoKCgogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgX2RlZmF1bHRfUE9BICgKICAgICAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg ICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHZvaWQgY29ubmVj dF9wdXNoX2NvbnN1bWVyICgKICAgICAgICBSdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfcHRy IHB1c2hfY29uc3VtZXIsCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25z dW1lclFPUyAmIHFvcywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK ICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENo YW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpUeXBl RXJyb3IgKTsKCgoKCgogICAgICAgIHZvaWQgc3VzcGVuZF9jb25uZWN0aW9uICgKICAgICAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg ICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENP UkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgICAgICB2b2lkIHJlc3VtZV9jb25uZWN0aW9u ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAg ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgICAgICB2b2lkIGRpc2Nv bm5lY3RfcHVzaF9zdXBwbGllciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoK CiAgICAgIHByaXZhdGU6CiAgICBUICpwdHJfOwogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV92YXIg cG9hXzsKICAgIENPUkJBOjpCb29sZWFuIHJlbF87CgoKICAgIFByb3h5UHVzaFN1cHBsaWVyX3Rp ZSAoY29uc3QgUHJveHlQdXNoU3VwcGxpZXJfdGllICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNv bnN0IFByb3h5UHVzaFN1cHBsaWVyX3RpZSAmKTsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIFQ+ CiAgY2xhc3MgUHJveHlQdXNoQ29uc3VtZXJfdGllIDogcHVibGljIFByb3h5UHVzaENvbnN1bWVy CiAgewogIHB1YmxpYzoKICAgIFByb3h5UHVzaENvbnN1bWVyX3RpZSAoVCAmdCk7CgogICAgUHJv eHlQdXNoQ29uc3VtZXJfdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EpOwoK ICAgIFByb3h5UHVzaENvbnN1bWVyX3RpZSAoVCAqdHAsIENPUkJBOjpCb29sZWFuIHJlbGVhc2U9 MSk7CgogICAgUHJveHlQdXNoQ29uc3VtZXJfdGllIChUICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBP QV9wdHIgcG9hLCBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIH5Qcm94eVB1c2hDb25z dW1lcl90aWUgKHZvaWQpOwoKCgogICAgVCAqX3RpZWRfb2JqZWN0ICh2b2lkKTsKCiAgICB2b2lk IF90aWVkX29iamVjdCAoVCAmb2JqKTsKCiAgICB2b2lkIF90aWVkX29iamVjdCAoVCAqb2JqLCBD T1JCQTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIENPUkJBOjpCb29sZWFuIF9pc19vd25lciAo dm9pZCk7CgogICAgdm9pZCBfaXNfb3duZXIgKENPUkJBOjpCb29sZWFuIGIpOwoKCgogICAgUG9y dGFibGVTZXJ2ZXI6OlBPQV9wdHIgX2RlZmF1bHRfUE9BICgKICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHZvaWQgY29ubmVjdF9wdXNoX3N1cHBs aWVyICgKICAgICAgICBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyIHB1c2hfc3VwcGxp ZXIsCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAmIHFv cywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAg ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 QWxyZWFkeUNvbm5lY3RlZCApOwoKCgoKICAgICAgICB2b2lkIHB1c2ggKAogICAgICAgIGNvbnN0 IFJ0ZWNFdmVudENvbW06OkV2ZW50U2V0ICYgZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1 bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl cHRpb24gKTsKCgoKICAgICAgICB2b2lkIGRpc2Nvbm5lY3RfcHVzaF9jb25zdW1lciAoCiAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K ICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cg KCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICAgIHByaXZhdGU6CiAgICBUICpwdHJf OwogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV92YXIgcG9hXzsKICAgIENPUkJBOjpCb29sZWFuIHJl bF87CgoKICAgIFByb3h5UHVzaENvbnN1bWVyX3RpZSAoY29uc3QgUHJveHlQdXNoQ29uc3VtZXJf dGllICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFByb3h5UHVzaENvbnN1bWVyX3RpZSAm KTsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgY2xhc3MgQ29uc3VtZXJBZG1pbl90aWUg OiBwdWJsaWMgQ29uc3VtZXJBZG1pbgogIHsKICBwdWJsaWM6CiAgICBDb25zdW1lckFkbWluX3Rp ZSAoVCAmdCk7CgogICAgQ29uc3VtZXJBZG1pbl90aWUgKFQgJnQsIFBvcnRhYmxlU2VydmVyOjpQ T0FfcHRyIHBvYSk7CgogICAgQ29uc3VtZXJBZG1pbl90aWUgKFQgKnRwLCBDT1JCQTo6Qm9vbGVh biByZWxlYXNlPTEpOwoKICAgIENvbnN1bWVyQWRtaW5fdGllIChUICp0cCwgUG9ydGFibGVTZXJ2 ZXI6OlBPQV9wdHIgcG9hLCBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIH5Db25zdW1l ckFkbWluX3RpZSAodm9pZCk7CgoKCiAgICBUICpfdGllZF9vYmplY3QgKHZvaWQpOwoKICAgIHZv aWQgX3RpZWRfb2JqZWN0IChUICZvYmopOwoKICAgIHZvaWQgX3RpZWRfb2JqZWN0IChUICpvYmos IENPUkJBOjpCb29sZWFuIHJlbGVhc2U9MSk7CgogICAgQ09SQkE6OkJvb2xlYW4gX2lzX293bmVy ICh2b2lkKTsKCiAgICB2b2lkIF9pc19vd25lciAoQ09SQkE6OkJvb2xlYW4gYik7CgoKCiAgICBQ b3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBfZGVmYXVsdF9QT0EgKAogICAgICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpQcm94eVB1c2hTdXBwbGllcl9wdHIgb2J0YWluX3B1c2hfc3VwcGxpZXIgKAogICAgICAgIENP UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAg ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09S QkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgogICAgICBwcml2YXRlOgogICAgVCAqcHRyXzsKICAg IFBvcnRhYmxlU2VydmVyOjpQT0FfdmFyIHBvYV87CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxfOwoK CiAgICBDb25zdW1lckFkbWluX3RpZSAoY29uc3QgQ29uc3VtZXJBZG1pbl90aWUgJik7CiAgICB2 b2lkIG9wZXJhdG9yPSAoY29uc3QgQ29uc3VtZXJBZG1pbl90aWUgJik7CiAgfTsKCgogIHRlbXBs YXRlIDxjbGFzcyBUPgogIGNsYXNzIFN1cHBsaWVyQWRtaW5fdGllIDogcHVibGljIFN1cHBsaWVy QWRtaW4KICB7CiAgcHVibGljOgogICAgU3VwcGxpZXJBZG1pbl90aWUgKFQgJnQpOwoKICAgIFN1 cHBsaWVyQWRtaW5fdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EpOwoKICAg IFN1cHBsaWVyQWRtaW5fdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAg ICBTdXBwbGllckFkbWluX3RpZSAoVCAqdHAsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSwg Q09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAgICB+U3VwcGxpZXJBZG1pbl90aWUgKHZvaWQp OwoKCgogICAgVCAqX3RpZWRfb2JqZWN0ICh2b2lkKTsKCiAgICB2b2lkIF90aWVkX29iamVjdCAo VCAmb2JqKTsKCiAgICB2b2lkIF90aWVkX29iamVjdCAoVCAqb2JqLCBDT1JCQTo6Qm9vbGVhbiBy ZWxlYXNlPTEpOwoKICAgIENPUkJBOjpCb29sZWFuIF9pc19vd25lciAodm9pZCk7CgogICAgdm9p ZCBfaXNfb3duZXIgKENPUkJBOjpCb29sZWFuIGIpOwoKCgogICAgUG9ydGFibGVTZXJ2ZXI6OlBP QV9wdHIgX2RlZmF1bHRfUE9BICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09S QkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1l bnQgKCkKICAgICAgKTsKICAgIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3Vt ZXJfcHRyIG9idGFpbl9wdXNoX2NvbnN1bWVyICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRf ZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRp b24gKTsKCgoKICAgICAgcHJpdmF0ZToKICAgIFQgKnB0cl87CiAgICBQb3J0YWJsZVNlcnZlcjo6 UE9BX3ZhciBwb2FfOwogICAgQ09SQkE6OkJvb2xlYW4gcmVsXzsKCgogICAgU3VwcGxpZXJBZG1p bl90aWUgKGNvbnN0IFN1cHBsaWVyQWRtaW5fdGllICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNv bnN0IFN1cHBsaWVyQWRtaW5fdGllICYpOwogIH07CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBj bGFzcyBPYnNlcnZlcl90aWUgOiBwdWJsaWMgT2JzZXJ2ZXIKICB7CiAgcHVibGljOgogICAgT2Jz ZXJ2ZXJfdGllIChUICZ0KTsKCiAgICBPYnNlcnZlcl90aWUgKFQgJnQsIFBvcnRhYmxlU2VydmVy OjpQT0FfcHRyIHBvYSk7CgogICAgT2JzZXJ2ZXJfdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4g cmVsZWFzZT0xKTsKCiAgICBPYnNlcnZlcl90aWUgKFQgKnRwLCBQb3J0YWJsZVNlcnZlcjo6UE9B X3B0ciBwb2EsIENPUkJBOjpCb29sZWFuIHJlbGVhc2U9MSk7CgogICAgfk9ic2VydmVyX3RpZSAo dm9pZCk7CgoKCiAgICBUICpfdGllZF9vYmplY3QgKHZvaWQpOwoKICAgIHZvaWQgX3RpZWRfb2Jq ZWN0IChUICZvYmopOwoKICAgIHZvaWQgX3RpZWRfb2JqZWN0IChUICpvYmosIENPUkJBOjpCb29s ZWFuIHJlbGVhc2U9MSk7CgogICAgQ09SQkE6OkJvb2xlYW4gX2lzX293bmVyICh2b2lkKTsKCiAg ICB2b2lkIF9pc19vd25lciAoQ09SQkE6OkJvb2xlYW4gYik7CgoKCiAgICBQb3J0YWJsZVNlcnZl cjo6UE9BX3B0ciBfZGVmYXVsdF9QT0EgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZp cm9ubWVudCAoKQogICAgICApOwogICAgdm9pZCB1cGRhdGVfY29uc3VtZXIgKAogICAgICAgIGNv bnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgJiBzdWIsCiAgICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC QTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICAgICAgdm9pZCB1cGRhdGVfc3VwcGxpZXIgKAog ICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgJiBwdWIsCiAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhy b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICAgIHByaXZhdGU6CiAgICBUICpw dHJfOwogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV92YXIgcG9hXzsKICAgIENPUkJBOjpCb29sZWFu IHJlbF87CgoKICAgIE9ic2VydmVyX3RpZSAoY29uc3QgT2JzZXJ2ZXJfdGllICYpOwogICAgdm9p ZCBvcGVyYXRvcj0gKGNvbnN0IE9ic2VydmVyX3RpZSAmKTsKICB9OwoKCiAgdGVtcGxhdGUgPGNs YXNzIFQ+CiAgY2xhc3MgRXZlbnRDaGFubmVsX3RpZSA6IHB1YmxpYyBFdmVudENoYW5uZWwKICB7 CiAgcHVibGljOgogICAgRXZlbnRDaGFubmVsX3RpZSAoVCAmdCk7CgogICAgRXZlbnRDaGFubmVs X3RpZSAoVCAmdCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hKTsKCiAgICBFdmVudENoYW5u ZWxfdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAgICBFdmVudENoYW5u ZWxfdGllIChUICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBDT1JCQTo6Qm9vbGVh biByZWxlYXNlPTEpOwoKICAgIH5FdmVudENoYW5uZWxfdGllICh2b2lkKTsKCgoKICAgIFQgKl90 aWVkX29iamVjdCAodm9pZCk7CgogICAgdm9pZCBfdGllZF9vYmplY3QgKFQgJm9iaik7CgogICAg dm9pZCBfdGllZF9vYmplY3QgKFQgKm9iaiwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAg ICBDT1JCQTo6Qm9vbGVhbiBfaXNfb3duZXIgKHZvaWQpOwoKICAgIHZvaWQgX2lzX293bmVyIChD T1JCQTo6Qm9vbGVhbiBiKTsKCgoKICAgIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIF9kZWZhdWx0 X1BPQSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50 X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7 CiAgICBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fcHRyIGZvcl9jb25zdW1l cnMgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAg ICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgogICAgICAgIFJ0ZWNFdmVu dENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1pbl9wdHIgZm9yX3N1cHBsaWVycyAoCiAgICAgICAg Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD T1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICAgICAgdm9pZCBkZXN0cm95ICgKICAgICAg ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAo IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgICAgICBSdGVjRXZlbnRDaGFubmVsQWRt aW46Ok9ic2VydmVyX0hhbmRsZSBhcHBlbmRfb2JzZXJ2ZXIgKAogICAgICAgIFJ0ZWNFdmVudENo YW5uZWxBZG1pbjo6T2JzZXJ2ZXJfcHRyIGd3LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9l bnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlv biwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9F UlJPUiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfQVBQRU5EX09C U0VSVkVSICk7CgoKCgoKICAgICAgICB2b2lkIHJlbW92ZV9vYnNlcnZlciAoCiAgICAgICAgUnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl9IYW5kbGUgZ3csCiAgICAgICAgQ09SQkE6OkVu dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lz dGVtRXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lOQ0hS T05JWkFUSU9OX0VSUk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q0FO VF9SRU1PVkVfT0JTRVJWRVIgKTsKCgoKCgogICAgICBwcml2YXRlOgogICAgVCAqcHRyXzsKICAg IFBvcnRhYmxlU2VydmVyOjpQT0FfdmFyIHBvYV87CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxfOwoK CiAgICBFdmVudENoYW5uZWxfdGllIChjb25zdCBFdmVudENoYW5uZWxfdGllICYpOwogICAgdm9p ZCBvcGVyYXRvcj0gKGNvbnN0IEV2ZW50Q2hhbm5lbF90aWUgJik7CiAgfTsKCn0KCgoKCgojIDEg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y YnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluU19ULmkiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRD aGFubmVsQWRtaW5TX1QuaSIKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl90aWU8VD46OlByb3h5UHVzaFN1cHBsaWVy X3RpZSAoVCAmdCkKICAgICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxl U2VydmVyOjpQT0E6Ol9uaWwgKCkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBsYXRlIDxj bGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoU3VwcGxp ZXJfdGllPFQ+OjpQcm94eVB1c2hTdXBwbGllcl90aWUgKFQgJnQsIFBvcnRhYmxlU2VydmVyOjpQ T0FfcHRyIHBvYSkKICAgICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxl U2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHBvYSkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRl bXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQ dXNoU3VwcGxpZXJfdGllPFQ+OjpQcm94eVB1c2hTdXBwbGllcl90aWUgKFQgKnRwLCBDT1JCQTo6 Qm9vbGVhbiByZWxlYXNlKQogICAgICAgIDogcHRyXyAodHApLAogICAgICAgICAgcG9hXyAoUG9y dGFibGVTZXJ2ZXI6OlBPQTo6X25pbCAoKSksCiAgICAgICAgICByZWxfIChyZWxlYXNlKQp7fQoK dGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94 eVB1c2hTdXBwbGllcl90aWU8VD46OlByb3h5UHVzaFN1cHBsaWVyX3RpZSAoVCAqdHAsIFBvcnRh YmxlU2VydmVyOjpQT0FfcHRyIHBvYSwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICAgICAgICA6 IHB0cl8gKHRwKSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNh dGUgKHBvYSkpLAogICAgICAgICAgcmVsXyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBU PiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfdGll PFQ+Ojp+UHJveHlQdXNoU3VwcGxpZXJfdGllICh2b2lkKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRl bGV0ZSB0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgKgpQT0FfUnRl Y0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl90aWU8VD46Ol90aWVkX29iamVj dCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s aW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfdGll PFQ+OjpfdGllZF9vYmplY3QgKFQgJm9iaikKewogIGlmICh0aGlzLT5yZWxfKSBkZWxldGUgdGhp cy0+cHRyXzsKICB0aGlzLT5wdHJfID0gJm9iajsKICB0aGlzLT5yZWxfID0gMDsKfQoKdGVtcGxh dGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5 UHVzaFN1cHBsaWVyX3RpZTxUPjo6X3RpZWRfb2JqZWN0IChUICpvYmosIENPUkJBOjpCb29sZWFu IHJlbGVhc2UpCnsKICBpZiAodGhpcy0+cmVsXykgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+ cHRyXyA9IG9iajsKICB0aGlzLT5yZWxfID0gcmVsZWFzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+ IGlubGluZSBDT1JCQTo6Qm9vbGVhbgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1 c2hTdXBwbGllcl90aWU8VD46Ol9pc19vd25lciAodm9pZCkKewogIHJldHVybiB0aGlzLT5yZWxf Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxB ZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfdGllPFQ+OjpfaXNfb3duZXIgKENPUkJBOjpCb29sZWFu IGIpCnsKICB0aGlzLT5yZWxfID0gYjsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBQb3J0 YWJsZVNlcnZlcjo6UE9BX3B0cgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hT dXBwbGllcl90aWU8VD46Ol9kZWZhdWx0X1BPQSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgaWYgKCFDT1JCQTo6aXNfbmlsICh0aGlzLT5w b2FfLmluICgpKSkKICAgIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlICh0 aGlzLT5wb2FfLmluICgpKTsKCiAgcmV0dXJuIHRoaXMtPlByb3h5UHVzaFN1cHBsaWVyOjpfZGVm YXVsdF9QT0EgKF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4gaW5saW5lCnZvaWQgUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNo U3VwcGxpZXJfdGllPFQ+Ojpjb25uZWN0X3B1c2hfY29uc3VtZXIgKAogICAgUnRlY0V2ZW50Q29t bTo6UHVzaENvbnN1bWVyX3B0ciBwdXNoX2NvbnN1bWVyLAogICAgY29uc3QgUnRlY0V2ZW50Q2hh bm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHFvcywKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F eGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCwgUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpUeXBlRXJyb3IgKQoKCgoKewogIHRoaXMtPnB0cl8tPmNvbm5lY3Rf cHVzaF9jb25zdW1lciAoCnB1c2hfY29uc3VtZXIsCiAgICBxb3MsCiAgICBfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlCiAgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQp2b2lk IFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaFN1cHBsaWVyX3RpZTxUPjo6c3Vz cGVuZF9jb25uZWN0aW9uICgKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKQoK CnsKICB0aGlzLT5wdHJfLT5zdXNwZW5kX2Nvbm5lY3Rpb24gKApfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlCiAgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQp2b2lkIFBPQV9S dGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaFN1cHBsaWVyX3RpZTxUPjo6cmVzdW1lX2Nv bm5lY3Rpb24gKAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50 X3ZhcmlhYmxlCiAgKQogIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApCgoKewogIHRo aXMtPnB0cl8tPnJlc3VtZV9jb25uZWN0aW9uICgKX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZQogICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKdm9pZCBQT0FfUnRlY0V2ZW50 Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl90aWU8VD46OmRpc2Nvbm5lY3RfcHVzaF9z dXBwbGllciAoCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkKCgp7CiAgdGhp cy0+cHRyXy0+ZGlzY29ubmVjdF9wdXNoX3N1cHBsaWVyICgKX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZQogICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVu dENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfdGllPFQ+OjpQcm94eVB1c2hDb25zdW1l cl90aWUgKFQgJnQpCiAgICAgICAgOiBwdHJfICgmdCksCiAgICAgICAgICBwb2FfIChQb3J0YWJs ZVNlcnZlcjo6UE9BOjpfbmlsICgpKSwKICAgICAgICAgIHJlbF8gKDApCnt9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1 bWVyX3RpZTxUPjo6UHJveHlQdXNoQ29uc3VtZXJfdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6 UE9BX3B0ciBwb2EpCiAgICAgICAgOiBwdHJfICgmdCksCiAgICAgICAgICBwb2FfIChQb3J0YWJs ZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlIChwb2EpKSwKICAgICAgICAgIHJlbF8gKDApCnt9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5 UHVzaENvbnN1bWVyX3RpZTxUPjo6UHJveHlQdXNoQ29uc3VtZXJfdGllIChUICp0cCwgQ09SQkE6 OkJvb2xlYW4gcmVsZWFzZSkKICAgICAgICA6IHB0cl8gKHRwKSwKICAgICAgICAgIHBvYV8gKFBv cnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwgKCkpLAogICAgICAgICAgcmVsXyAocmVsZWFzZSkKe30K CnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJv eHlQdXNoQ29uc3VtZXJfdGllPFQ+OjpQcm94eVB1c2hDb25zdW1lcl90aWUgKFQgKnRwLCBQb3J0 YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EsIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgICAgICAg OiBwdHJfICh0cCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGlj YXRlIChwb2EpKSwKICAgICAgICAgIHJlbF8gKHJlbGVhc2UpCnt9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4gaW5saW5lClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3Rp ZTxUPjo6flByb3h5UHVzaENvbnN1bWVyX3RpZSAodm9pZCkKewogIGlmICh0aGlzLT5yZWxfKSBk ZWxldGUgdGhpcy0+cHRyXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBUICoKUE9BX1J0 ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfdGllPFQ+OjpfdGllZF9vYmpl Y3QgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlu bGluZSB2b2lkClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3Rp ZTxUPjo6X3RpZWRfb2JqZWN0IChUICZvYmopCnsKICBpZiAodGhpcy0+cmVsXykgZGVsZXRlIHRo aXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9ICZvYmo7CiAgdGhpcy0+cmVsXyA9IDA7Cn0KCnRlbXBs YXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZApQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94 eVB1c2hDb25zdW1lcl90aWU8VD46Ol90aWVkX29iamVjdCAoVCAqb2JqLCBDT1JCQTo6Qm9vbGVh biByZWxlYXNlKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMt PnB0cl8gPSBvYmo7CiAgdGhpcy0+cmVsXyA9IHJlbGVhc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBU PiBpbmxpbmUgQ09SQkE6OkJvb2xlYW4KUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQ dXNoQ29uc3VtZXJfdGllPFQ+OjpfaXNfb3duZXIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cmVs XzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkClBPQV9SdGVjRXZlbnRDaGFubmVs QWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3RpZTxUPjo6X2lzX293bmVyIChDT1JCQTo6Qm9vbGVh biBiKQp7CiAgdGhpcy0+cmVsXyA9IGI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgUG9y dGFibGVTZXJ2ZXI6OlBPQV9wdHIKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNo Q29uc3VtZXJfdGllPFQ+OjpfZGVmYXVsdF9QT0EgKENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkKewogIGlmICghQ09SQkE6OmlzX25pbCAodGhpcy0+ cG9hXy5pbiAoKSkpCiAgICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAo dGhpcy0+cG9hXy5pbiAoKSk7CgogIHJldHVybiB0aGlzLT5Qcm94eVB1c2hDb25zdW1lcjo6X2Rl ZmF1bHRfUE9BIChfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKdGVtcGxhdGUg PGNsYXNzIFQ+IGlubGluZQp2b2lkIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVz aENvbnN1bWVyX3RpZTxUPjo6Y29ubmVjdF9wdXNoX3N1cHBsaWVyICgKICAgIFJ0ZWNFdmVudENv bW06OlB1c2hTdXBwbGllcl9wdHIgcHVzaF9zdXBwbGllciwKICAgIGNvbnN0IFJ0ZWNFdmVudENo YW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgJiBxb3MsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVt RXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkFscmVhZHlDb25uZWN0ZWQgKQoKCgp7 CiAgdGhpcy0+cHRyXy0+Y29ubmVjdF9wdXNoX3N1cHBsaWVyICgKcHVzaF9zdXBwbGllciwKICAg IHFvcywKICAgIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gaW5saW5lCnZvaWQgUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQ dXNoQ29uc3VtZXJfdGllPFQ+OjpwdXNoICgKICAgIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50 U2V0ICYgZGF0YSwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKQoKCnsKICB0 aGlzLT5wdHJfLT5wdXNoICgKZGF0YSwKICAgIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUKICApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lCnZvaWQgUE9BX1J0ZWNFdmVudENo YW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfdGllPFQ+OjpkaXNjb25uZWN0X3B1c2hfY29u c3VtZXIgKAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlCiAgKQogIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApCgoKewogIHRoaXMt PnB0cl8tPmRpc2Nvbm5lY3RfcHVzaF9jb25zdW1lciAoCl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf dmFyaWFibGUKICApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRD aGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fdGllPFQ+OjpDb25zdW1lckFkbWluX3RpZSAoVCAm dCkKICAgICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQ T0E6Ol9uaWwgKCkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBp bmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl90aWU8VD46OkNv bnN1bWVyQWRtaW5fdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EpCiAgICAg ICAgOiBwdHJfICgmdCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNlcnZlcjo6UE9BOjpfZHVw bGljYXRlIChwb2EpKSwKICAgICAgICAgIHJlbF8gKDApCnt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4g aW5saW5lClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fdGllPFQ+OjpD b25zdW1lckFkbWluX3RpZSAoVCAqdHAsIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgICAgICAg OiBwdHJfICh0cCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNlcnZlcjo6UE9BOjpfbmlsICgp KSwKICAgICAgICAgIHJlbF8gKHJlbGVhc2UpCnt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5l ClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fdGllPFQ+OjpDb25zdW1l ckFkbWluX3RpZSAoVCAqdHAsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSwgQ09SQkE6OkJv b2xlYW4gcmVsZWFzZSkKICAgICAgICA6IHB0cl8gKHRwKSwKICAgICAgICAgIHBvYV8gKFBvcnRh YmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHBvYSkpLAogICAgICAgICAgcmVsXyAocmVsZWFz ZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1p bjo6Q29uc3VtZXJBZG1pbl90aWU8VD46On5Db25zdW1lckFkbWluX3RpZSAodm9pZCkKewogIGlm ICh0aGlzLT5yZWxfKSBkZWxldGUgdGhpcy0+cHRyXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlu bGluZSBUICoKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl90aWU8VD46 Ol90aWVkX29iamVjdCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJB ZG1pbl90aWU8VD46Ol90aWVkX29iamVjdCAoVCAmb2JqKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRl bGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAmb2JqOwogIHRoaXMtPnJlbF8gPSAwOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1p bjo6Q29uc3VtZXJBZG1pbl90aWU8VD46Ol90aWVkX29iamVjdCAoVCAqb2JqLCBDT1JCQTo6Qm9v bGVhbiByZWxlYXNlKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRo aXMtPnB0cl8gPSBvYmo7CiAgdGhpcy0+cmVsXyA9IHJlbGVhc2U7Cn0KCnRlbXBsYXRlIDxjbGFz cyBUPiBpbmxpbmUgQ09SQkE6OkJvb2xlYW4KUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29u c3VtZXJBZG1pbl90aWU8VD46Ol9pc19vd25lciAodm9pZCkKewogIHJldHVybiB0aGlzLT5yZWxf Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxB ZG1pbjo6Q29uc3VtZXJBZG1pbl90aWU8VD46Ol9pc19vd25lciAoQ09SQkE6OkJvb2xlYW4gYikK ewogIHRoaXMtPnJlbF8gPSBiOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFBvcnRhYmxl U2VydmVyOjpQT0FfcHRyClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5f dGllPFQ+OjpfZGVmYXVsdF9QT0EgKENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp cm9ubWVudF92YXJpYWJsZSkKewogIGlmICghQ09SQkE6OmlzX25pbCAodGhpcy0+cG9hXy5pbiAo KSkpCiAgICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAodGhpcy0+cG9h Xy5pbiAoKSk7CgogIHJldHVybiB0aGlzLT5Db25zdW1lckFkbWluOjpfZGVmYXVsdF9QT0EgKF9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s aW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfcHRyIFBPQV9SdGVj RXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fdGllPFQ+OjpvYnRhaW5fcHVzaF9zdXBw bGllciAoCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkKCgp7CiAgcmV0dXJu IHRoaXMtPnB0cl8tPm9idGFpbl9wdXNoX3N1cHBsaWVyICgKX0FDRV9DT1JCQV9FbnZpcm9ubWVu dF92YXJpYWJsZQogICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVu dENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1pbl90aWU8VD46OlN1cHBsaWVyQWRtaW5fdGllIChU ICZ0KQogICAgICAgIDogcHRyXyAoJnQpLAogICAgICAgICAgcG9hXyAoUG9ydGFibGVTZXJ2ZXI6 OlBPQTo6X25pbCAoKSksCiAgICAgICAgICByZWxfICgwKQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+ IGlubGluZQpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWluX3RpZTxUPjo6 U3VwcGxpZXJBZG1pbl90aWUgKFQgJnQsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSkKICAg ICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9k dXBsaWNhdGUgKHBvYSkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBsYXRlIDxjbGFzcyBU PiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1pbl90aWU8VD46 OlN1cHBsaWVyQWRtaW5fdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICAgICAg ICA6IHB0cl8gKHRwKSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwg KCkpLAogICAgICAgICAgcmVsXyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxp bmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1pbl90aWU8VD46OlN1cHBs aWVyQWRtaW5fdGllIChUICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBDT1JCQTo6 Qm9vbGVhbiByZWxlYXNlKQogICAgICAgIDogcHRyXyAodHApLAogICAgICAgICAgcG9hXyAoUG9y dGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAocG9hKSksCiAgICAgICAgICByZWxfIChyZWxl YXNlKQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpTdXBwbGllckFkbWluX3RpZTxUPjo6flN1cHBsaWVyQWRtaW5fdGllICh2b2lkKQp7CiAg aWYgKHRoaXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4g aW5saW5lIFQgKgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWluX3RpZTxU Pjo6X3RpZWRfb2JqZWN0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCnRlbXBsYXRl IDxjbGFzcyBUPiBpbmxpbmUgdm9pZApQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGll ckFkbWluX3RpZTxUPjo6X3RpZWRfb2JqZWN0IChUICZvYmopCnsKICBpZiAodGhpcy0+cmVsXykg ZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9ICZvYmo7CiAgdGhpcy0+cmVsXyA9IDA7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZApQT0FfUnRlY0V2ZW50Q2hhbm5lbEFk bWluOjpTdXBwbGllckFkbWluX3RpZTxUPjo6X3RpZWRfb2JqZWN0IChUICpvYmosIENPUkJBOjpC b29sZWFuIHJlbGVhc2UpCnsKICBpZiAodGhpcy0+cmVsXykgZGVsZXRlIHRoaXMtPnB0cl87CiAg dGhpcy0+cHRyXyA9IG9iajsKICB0aGlzLT5yZWxfID0gcmVsZWFzZTsKfQoKdGVtcGxhdGUgPGNs YXNzIFQ+IGlubGluZSBDT1JCQTo6Qm9vbGVhbgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpT dXBwbGllckFkbWluX3RpZTxUPjo6X2lzX293bmVyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnJl bF87Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZApQT0FfUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpTdXBwbGllckFkbWluX3RpZTxUPjo6X2lzX293bmVyIChDT1JCQTo6Qm9vbGVhbiBi KQp7CiAgdGhpcy0+cmVsXyA9IGI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgUG9ydGFi bGVTZXJ2ZXI6OlBPQV9wdHIKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1p bl90aWU8VD46Ol9kZWZhdWx0X1BPQSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgaWYgKCFDT1JCQTo6aXNfbmlsICh0aGlzLT5wb2FfLmlu ICgpKSkKICAgIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlICh0aGlzLT5w b2FfLmluICgpKTsKCiAgcmV0dXJuIHRoaXMtPlN1cHBsaWVyQWRtaW46Ol9kZWZhdWx0X1BPQSAo X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBp bmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hDb25zdW1lcl9wdHIgUE9BX1J0 ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1pbl90aWU8VD46Om9idGFpbl9wdXNoX2Nv bnN1bWVyICgKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKQoKCnsKICByZXR1 cm4gdGhpcy0+cHRyXy0+b2J0YWluX3B1c2hfY29uc3VtZXIgKApfQUNFX0NPUkJBX0Vudmlyb25t ZW50X3ZhcmlhYmxlCiAgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl90aWU8VD46Ok9ic2VydmVyX3RpZSAoVCAmdCkKICAg ICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9u aWwgKCkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUK UE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfdGllPFQ+OjpPYnNlcnZlcl90aWUg KFQgJnQsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSkKICAgICAgICA6IHB0cl8gKCZ0KSwK ICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHBvYSkpLAog ICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNF dmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfdGllPFQ+OjpPYnNlcnZlcl90aWUgKFQgKnRwLCBD T1JCQTo6Qm9vbGVhbiByZWxlYXNlKQogICAgICAgIDogcHRyXyAodHApLAogICAgICAgICAgcG9h XyAoUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X25pbCAoKSksCiAgICAgICAgICByZWxfIChyZWxlYXNl KQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpPYnNlcnZlcl90aWU8VD46Ok9ic2VydmVyX3RpZSAoVCAqdHAsIFBvcnRhYmxlU2VydmVyOjpQ T0FfcHRyIHBvYSwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICAgICAgICA6IHB0cl8gKHRwKSwK ICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHBvYSkpLAog ICAgICAgICAgcmVsXyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9B X1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfdGllPFQ+Ojp+T2JzZXJ2ZXJfdGllICh2 b2lkKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4gaW5saW5lIFQgKgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl90 aWU8VD46Ol90aWVkX29iamVjdCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2Jz ZXJ2ZXJfdGllPFQ+OjpfdGllZF9vYmplY3QgKFQgJm9iaikKewogIGlmICh0aGlzLT5yZWxfKSBk ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gJm9iajsKICB0aGlzLT5yZWxfID0gMDsK fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkClBPQV9SdGVjRXZlbnRDaGFubmVsQWRt aW46Ok9ic2VydmVyX3RpZTxUPjo6X3RpZWRfb2JqZWN0IChUICpvYmosIENPUkJBOjpCb29sZWFu IHJlbGVhc2UpCnsKICBpZiAodGhpcy0+cmVsXykgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+ cHRyXyA9IG9iajsKICB0aGlzLT5yZWxfID0gcmVsZWFzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+ IGlubGluZSBDT1JCQTo6Qm9vbGVhbgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZl cl90aWU8VD46Ol9pc19vd25lciAodm9pZCkKewogIHJldHVybiB0aGlzLT5yZWxfOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2Jz ZXJ2ZXJfdGllPFQ+OjpfaXNfb3duZXIgKENPUkJBOjpCb29sZWFuIGIpCnsKICB0aGlzLT5yZWxf ID0gYjsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0 cgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl90aWU8VD46Ol9kZWZhdWx0X1BP QSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7 CiAgaWYgKCFDT1JCQTo6aXNfbmlsICh0aGlzLT5wb2FfLmluICgpKSkKICAgIHJldHVybiBQb3J0 YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlICh0aGlzLT5wb2FfLmluICgpKTsKCiAgcmV0dXJu IHRoaXMtPk9ic2VydmVyOjpfZGVmYXVsdF9QT0EgKF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy aWFibGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lCnZvaWQgUE9BX1J0ZWNFdmVudENo YW5uZWxBZG1pbjo6T2JzZXJ2ZXJfdGllPFQ+Ojp1cGRhdGVfY29uc3VtZXIgKAogICAgY29uc3Qg UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHN1YiwKICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKICB0aHJvdyAoIENP UkJBOjpTeXN0ZW1FeGNlcHRpb24gKQoKCnsKICB0aGlzLT5wdHJfLT51cGRhdGVfY29uc3VtZXIg KApzdWIsCiAgICBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKTsKfQoKdGVtcGxh dGUgPGNsYXNzIFQ+IGlubGluZQp2b2lkIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46Ok9ic2Vy dmVyX3RpZTxUPjo6dXBkYXRlX3N1cHBsaWVyICgKICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxB ZG1pbjo6U3VwcGxpZXJRT1MgJiBwdWIsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09S QkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0 aW9uICkKCgp7CiAgdGhpcy0+cHRyXy0+dXBkYXRlX3N1cHBsaWVyICgKcHViLAogICAgX0FDRV9D T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxp bmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxUPjo6RXZlbnRD aGFubmVsX3RpZSAoVCAmdCkKICAgICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBv cnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwgKCkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBs YXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFu bmVsX3RpZTxUPjo6RXZlbnRDaGFubmVsX3RpZSAoVCAmdCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9w dHIgcG9hKQogICAgICAgIDogcHRyXyAoJnQpLAogICAgICAgICAgcG9hXyAoUG9ydGFibGVTZXJ2 ZXI6OlBPQTo6X2R1cGxpY2F0ZSAocG9hKSksCiAgICAgICAgICByZWxfICgwKQp7fQoKdGVtcGxh dGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5u ZWxfdGllPFQ+OjpFdmVudENoYW5uZWxfdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFz ZSkKICAgICAgICA6IHB0cl8gKHRwKSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQ T0E6Ol9uaWwgKCkpLAogICAgICAgICAgcmVsXyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFz cyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxU Pjo6RXZlbnRDaGFubmVsX3RpZSAoVCAqdHAsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSwg Q09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICAgICAgICA6IHB0cl8gKHRwKSwKICAgICAgICAgIHBv YV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHBvYSkpLAogICAgICAgICAgcmVs XyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENo YW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxUPjo6fkV2ZW50Q2hhbm5lbF90aWUgKHZvaWQp CnsKICBpZiAodGhpcy0+cmVsXykgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCnRlbXBsYXRlIDxjbGFz cyBUPiBpbmxpbmUgVCAqClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbF90 aWU8VD46Ol90aWVkX29iamVjdCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZl bnRDaGFubmVsX3RpZTxUPjo6X3RpZWRfb2JqZWN0IChUICZvYmopCnsKICBpZiAodGhpcy0+cmVs XykgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9ICZvYmo7CiAgdGhpcy0+cmVsXyA9 IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZApQT0FfUnRlY0V2ZW50Q2hhbm5l bEFkbWluOjpFdmVudENoYW5uZWxfdGllPFQ+OjpfdGllZF9vYmplY3QgKFQgKm9iaiwgQ09SQkE6 OkJvb2xlYW4gcmVsZWFzZSkKewogIGlmICh0aGlzLT5yZWxfKSBkZWxldGUgdGhpcy0+cHRyXzsK ICB0aGlzLT5wdHJfID0gb2JqOwogIHRoaXMtPnJlbF8gPSByZWxlYXNlOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4gaW5saW5lIENPUkJBOjpCb29sZWFuClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46 OkV2ZW50Q2hhbm5lbF90aWU8VD46Ol9pc19vd25lciAodm9pZCkKewogIHJldHVybiB0aGlzLT5y ZWxfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5u ZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxUPjo6X2lzX293bmVyIChDT1JCQTo6Qm9vbGVhbiBi KQp7CiAgdGhpcy0+cmVsXyA9IGI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgUG9ydGFi bGVTZXJ2ZXI6OlBPQV9wdHIKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVs X3RpZTxUPjo6X2RlZmF1bHRfUE9BIChDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUpCnsKICBpZiAoIUNPUkJBOjppc19uaWwgKHRoaXMtPnBvYV8uaW4g KCkpKQogICAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHRoaXMtPnBv YV8uaW4gKCkpOwoKICByZXR1cm4gdGhpcy0+RXZlbnRDaGFubmVsOjpfZGVmYXVsdF9QT0EgKF9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s aW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIgUE9BX1J0ZWNFdmVu dENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxUPjo6Zm9yX2NvbnN1bWVycyAoCiAgICBD T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCiAg dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkKCgp7CiAgcmV0dXJuIHRoaXMtPnB0cl8t PmZvcl9jb25zdW1lcnMgKApfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKTsKfQoK dGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVy QWRtaW5fcHRyIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbF90aWU8VD46 OmZvcl9zdXBwbGllcnMgKAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly b25tZW50X3ZhcmlhYmxlCiAgKQogIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApCgoK ewogIHJldHVybiB0aGlzLT5wdHJfLT5mb3Jfc3VwcGxpZXJzICgKX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZQogICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKdm9pZCBQT0Ff UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWxfdGllPFQ+OjpkZXN0cm95ICgKICAg IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkK ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKQoKCnsKICB0aGlzLT5wdHJfLT5kZXN0 cm95ICgKX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBUPiBpbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl9IYW5kbGUgUE9B X1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxUPjo6YXBwZW5kX29ic2Vy dmVyICgKICAgIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfcHRyIGd3LAogICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQogIHRo cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVu dENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9FUlJPUiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpF dmVudENoYW5uZWw6OkNBTlRfQVBQRU5EX09CU0VSVkVSICkKCgoKCnsKICByZXR1cm4gdGhpcy0+ cHRyXy0+YXBwZW5kX29ic2VydmVyICgKZ3csCiAgICBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh cmlhYmxlCiAgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQp2b2lkIFBPQV9SdGVjRXZl bnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbF90aWU8VD46OnJlbW92ZV9vYnNlcnZlciAoCiAg ICBSdGVjRXZlbnRDaGFubmVsQWRtaW46Ok9ic2VydmVyX0hhbmRsZSBndywKICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKICB0aHJvdyAo IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFu bmVsOjpTWU5DSFJPTklaQVRJT05fRVJST1IsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRD aGFubmVsOjpDQU5UX1JFTU9WRV9PQlNFUlZFUiApCgoKCgp7CiAgdGhpcy0+cHRyXy0+cmVtb3Zl X29ic2VydmVyICgKZ3csCiAgICBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKTsK fQojIDQ0NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y YnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TX1QuaCIgMgoKCgoKIyAxICIvaG9t ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz L1J0ZWNFdmVudENoYW5uZWxBZG1pblNfVC5jcHAiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFu bmVsQWRtaW5TX1QuY3BwIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluU19ULmgiIDEK IyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2 Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TX1QuY3BwIiAyCiMgNDUxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0 ZWNFdmVudENoYW5uZWxBZG1pblNfVC5oIiAyCiMgNDYyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxB ZG1pblNfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L2FjZS9wb3N0LmgiIDEKIyA0NjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluU19ULmgiIDIK IyAxMTk0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Ji c3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pblMuaCIgMgoKCiMgMSAiL2hvbWUvcnJw L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj RXZlbnRDaGFubmVsQWRtaW5TLmkiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5T LmkiCmlubGluZSB2b2lkIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaFN1cHBs aWVyOjpkaXNjb25uZWN0X3B1c2hfc3VwcGxpZXJfc2tlbCAoCiAgICBUQU9fU2VydmVyUmVxdWVz dCAmcmVxLAogICAgdm9pZCAqb2JqLAogICAgdm9pZCAqY29udGV4dCwKICAgIENPUkJBOjpFbnZp cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIFBPQV9SdGVj RXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyIGltcGwgPSAoUE9BX1J0ZWNFdmVudENoYW5uZWxB ZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfcHRyKSBvYmo7CiAgUE9BX1J0ZWNFdmVudENvbW06OlB1 c2hTdXBwbGllcjo6ZGlzY29ubmVjdF9wdXNoX3N1cHBsaWVyX3NrZWwgKAogICAgICByZXEsCiAg ICAgIChQT0FfUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVyX3B0cikgaW1wbCwKICAgICAgY29u dGV4dCwKICAgICAgIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7Cn0KaW5s aW5lIHZvaWQgUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXI6OnB1 c2hfc2tlbCAoCiAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgdm9pZCAqb2JqLAogICAg dm9pZCAqY29udGV4dCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZQogICkKewogIFBPQV9SdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfcHRy IGltcGwgPSAoUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfcHRy KSBvYmo7CiAgUE9BX1J0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcjo6cHVzaF9za2VsICgKICAg ICAgcmVxLAogICAgICAoUE9BX1J0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcl9wdHIpIGltcGws CiAgICAgIGNvbnRleHQsCiAgICAgICBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg ICApOwp9CmlubGluZSB2b2lkIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENv bnN1bWVyOjpkaXNjb25uZWN0X3B1c2hfY29uc3VtZXJfc2tlbCAoCiAgICBUQU9fU2VydmVyUmVx dWVzdCAmcmVxLAogICAgdm9pZCAqb2JqLAogICAgdm9pZCAqY29udGV4dCwKICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIFBPQV9S dGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfcHRyIGltcGwgPSAoUE9BX1J0ZWNFdmVudENoYW5u ZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfcHRyKSBvYmo7CiAgUE9BX1J0ZWNFdmVudENvbW06 OlB1c2hDb25zdW1lcjo6ZGlzY29ubmVjdF9wdXNoX2NvbnN1bWVyX3NrZWwgKAogICAgICByZXEs CiAgICAgIChQT0FfUnRlY0V2ZW50Q29tbTo6UHVzaENvbnN1bWVyX3B0cikgaW1wbCwKICAgICAg Y29udGV4dCwKICAgICAgIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7Cn0K IyAxMTk3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Ji c3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pblMuaCIgMgojIDEyMDcgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl Y0V2ZW50Q2hhbm5lbEFkbWluUy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxMjA4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxB ZG1pblMuaCIgMgojIDIwICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmgiIDIKIyAxICIvaG9tZS9y cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0V2 ZW50L0VDX0ZpbHRlci5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmgiCiMgMSAiL2hv bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTgg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y YnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIiAx CiMgMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz dmNzL29yYnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0V2ZW50L2V2ZW50X2V4 cG9ydC5oIiAxCiMgMjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz L1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmgiIDIKCgoKCgpjbGFzcyBUQU9f RUNfUU9TX0luZm87CiMgNDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw ZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmgiCmNsYXNzIFRBT19FQ19G aWx0ZXIKewpwdWJsaWM6CgogIFRBT19FQ19GaWx0ZXIgKHZvaWQpOwoKCiAgdmlydHVhbCB+VEFP X0VDX0ZpbHRlciAodm9pZCk7CgoKICBUQU9fRUNfRmlsdGVyKiBwYXJlbnQgKHZvaWQpIGNvbnN0 OwoKCiAgdm9pZCBhZG9wdF9jaGlsZCAoVEFPX0VDX0ZpbHRlciogY2hpbGQpOwoKCgogIHN0YXRp YyBpbnQgbWF0Y2hlcyAoY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXImIHJocywKICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyJiBsaHMp OwoKICB0eXBlZGVmIFRBT19FQ19GaWx0ZXIqIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBUQU9fRUNf RmlsdGVyKiBjb25zdCBjb25zdF92YWx1ZV90eXBlOwogIHR5cGVkZWYgY29uc3RfdmFsdWVfdHlw ZSogQ2hpbGRyZW5JdGVyYXRvcjsKCgoKCgoKCiAgdmlydHVhbCBDaGlsZHJlbkl0ZXJhdG9yIGJl Z2luICh2b2lkKSBjb25zdDsKICB2aXJ0dWFsIENoaWxkcmVuSXRlcmF0b3IgZW5kICh2b2lkKSBj b25zdDsKICB2aXJ0dWFsIGludCBzaXplICh2b2lkKSBjb25zdDsKCgoKCgoKCiAgdmlydHVhbCBp bnQgZmlsdGVyIChjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudFNldCYgZXZlbnQsCiAgICAgICAg ICAgICAgICAgICAgICBUQU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAg ICAgICAgQ09SQkE6OkVudmlyb25tZW50JiBlbnYpID0gMDsKICB2aXJ0dWFsIGludCBmaWx0ZXJf bm9jb3B5IChSdGVjRXZlbnRDb21tOjpFdmVudFNldCYgZXZlbnQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVEFPX0VDX1FPU19JbmZvJiBxb3NfaW5mbywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQmIGVudikgPSAwOwoKCgoKCgoKICB2aXJ0dWFs IHZvaWQgcHVzaCAoY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQmIGV2ZW50LAogICAgICAg ICAgICAgICAgICAgICBUQU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAg ICAgICBDT1JCQTo6RW52aXJvbm1lbnQmIGVudikgPSAwOwogIHZpcnR1YWwgdm9pZCBwdXNoX25v Y29weSAoUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQmIGV2ZW50LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgVEFPX0VDX1FPU19JbmZvJiBxb3NfaW5mbywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCYgZW52KSA9IDA7CgoKCiAgdmlydHVhbCB2b2lkIGNs ZWFyICh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIENPUkJBOjpVTG9uZyBtYXhfZXZlbnRfc2l6ZSAo dm9pZCkgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIGludCBjYW5fbWF0Y2ggKGNvbnN0IFJ0 ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyJiBoZWFkZXIpIGNvbnN0ID0gMDsKIyAxMzUgIi9ob21l L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv RXZlbnQvRUNfRmlsdGVyLmgiCiAgdmlydHVhbCBpbnQgYWRkX2RlcGVuZGVuY2llcyAoY29uc3Qg UnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXImIGhlYWRlciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBUQU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIHZvaWQgZ2V0X3Fvc19pbmZvIChU QU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENP UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cgpwcml2 YXRlOgoKICBUQU9fRUNfRmlsdGVyKiBwYXJlbnRfOwp9OwojIDE2OCAiL2hvbWUvcnJwL3NjaG9v bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FdmVudC9FQ19G aWx0ZXIuaCIKY2xhc3MgVEFPX0VDX051bGxfRmlsdGVyIDogcHVibGljIFRBT19FQ19GaWx0ZXIK ewpwdWJsaWM6CgogIFRBT19FQ19OdWxsX0ZpbHRlciAodm9pZCk7CgoKCiAgdmlydHVhbCBpbnQg ZmlsdGVyIChjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudFNldCYgZXZlbnQsCiAgICAgICAgICAg ICAgICAgICAgICBUQU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAgICAg ICAgQ09SQkE6OkVudmlyb25tZW50JiBlbnYpOwogIHZpcnR1YWwgaW50IGZpbHRlcl9ub2NvcHkg KFJ0ZWNFdmVudENvbW06OkV2ZW50U2V0JiBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUQU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENPUkJBOjpFbnZpcm9ubWVudCYgZW52KTsKICB2aXJ0dWFsIHZvaWQgcHVzaCAoY29uc3Qg UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQmIGV2ZW50LAogICAgICAgICAgICAgICAgICAgICBUQU9f RUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQmIGVudik7CiAgdmlydHVhbCB2b2lkIHB1c2hfbm9jb3B5IChSdGVjRXZlbnRDb21tOjpF dmVudFNldCYgZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fRUNfUU9TX0lu Zm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25t ZW50JiBlbnYpOwogIHZpcnR1YWwgdm9pZCBjbGVhciAodm9pZCk7CiAgdmlydHVhbCBDT1JCQTo6 VUxvbmcgbWF4X2V2ZW50X3NpemUgKHZvaWQpIGNvbnN0OwogIHZpcnR1YWwgaW50IGNhbl9tYXRj aCAoY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXImIGhlYWRlcikgY29uc3Q7CiAgdmly dHVhbCBpbnQgYWRkX2RlcGVuZGVuY2llcyAoY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFk ZXImIGhlYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUQU9fRUNf UU9TX0luZm8gJnFvc19pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn07CiMgMjA4 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL0V2ZW50L0VDX0ZpbHRlci5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmkiIDEK CgppbmxpbmUKVEFPX0VDX0ZpbHRlcjo6VEFPX0VDX0ZpbHRlciAodm9pZCkKICA6IHBhcmVudF8g KDApCnsKfQoKaW5saW5lIFRBT19FQ19GaWx0ZXIqClRBT19FQ19GaWx0ZXI6OnBhcmVudCAodm9p ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wYXJlbnRfOwp9CgppbmxpbmUgaW50ClRBT19FQ19G aWx0ZXI6Om1hdGNoZXMgKGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyJiByaHMsCiAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyJiBs aHMpCnsKICBpZiAoKHJocy5zb3VyY2UgPT0gMCAmJiByaHMudHlwZSA9PSAwKQogICAgICB8fCAo bGhzLnNvdXJjZSA9PSAwICYmIGxocy50eXBlID09IDApKQogICAgcmV0dXJuIDE7CgogIGlmIChy aHMuc291cmNlID09IDAgfHwgbGhzLnNvdXJjZSA9PSAwKQogICAgcmV0dXJuIHJocy50eXBlID09 IGxocy50eXBlOwoKICBpZiAocmhzLnR5cGUgPT0gMCB8fCBsaHMudHlwZSA9PSAwKQogICAgcmV0 dXJuIHJocy5zb3VyY2UgPT0gbGhzLnNvdXJjZTsKCiAgcmV0dXJuIChyaHMudHlwZSA9PSBsaHMu dHlwZSAmJiByaHMuc291cmNlID09IGxocy5zb3VyY2UpOwp9CgoKCmlubGluZQpUQU9fRUNfTnVs bF9GaWx0ZXI6OlRBT19FQ19OdWxsX0ZpbHRlciAodm9pZCkKewp9CiMgMjA5ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0V2ZW50 L0VDX0ZpbHRlci5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93 cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMjEyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0V2ZW50L0VDX0ZpbHRlci5oIiAyCiMg MjEgIkV2ZW50L0VDX1Byb3h5Q29uc3VtZXIuaCIgMgoKCgoKCmNsYXNzIFRBT19FQ19FdmVudF9D aGFubmVsOwpjbGFzcyBUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXI7CmNsYXNzIFRBT19FQ19TdXBw bGllcl9GaWx0ZXI7CiMgNTIgIkV2ZW50L0VDX1Byb3h5Q29uc3VtZXIuaCIKY2xhc3MgVEFPX0VD X1Byb3h5UHVzaENvbnN1bWVyIDogcHVibGljIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlBy b3h5UHVzaENvbnN1bWVyCnsKcHVibGljOgogIHR5cGVkZWYgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu OjpQcm94eVB1c2hDb25zdW1lciBJbnRlcmZhY2U7CiAgdHlwZWRlZiBSdGVjRXZlbnRDaGFubmVs QWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3ZhciBfdmFyX3R5cGU7CgoKICBUQU9fRUNfUHJveHlQ dXNoQ29uc3VtZXIgKFRBT19FQ19FdmVudF9DaGFubmVsKiBldmVudF9jaGFubmVsKTsKCgogIHZp cnR1YWwgflRBT19FQ19Qcm94eVB1c2hDb25zdW1lciAodm9pZCk7CgoKICB2aXJ0dWFsIFJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfcHRyIGFjdGl2YXRlIChDT1JCQTo6 RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpIHRocm93IChDT1JC QTo6U3lzdGVtRXhjZXB0aW9uKTsKCgogIHZvaWQgZGVhY3RpdmF0ZSAoQ09SQkE6OkVudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCgogIENPUkJBOjpCb29sZWFu IGlzX2Nvbm5lY3RlZCAodm9pZCkgY29uc3Q7CgoKCiAgUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBs aWVyX3B0ciBzdXBwbGllciAodm9pZCkgY29uc3Q7CgoKICBjb25zdCBSdGVjRXZlbnRDaGFubmVs QWRtaW46OlN1cHBsaWVyUU9TJiBwdWJsaWNhdGlvbnMgKHZvaWQpIGNvbnN0OwoKCgoKCgogIENP UkJBOjpCb29sZWFuIHN1cHBsaWVyX25vbl9leGlzdGVudCAoQ09SQkE6OkJvb2xlYW5fb3V0IGRp c2Nvbm5lY3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CgoKCiAgdmly dHVhbCB2b2lkIGNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyKiBzdXBwbGllciwK ICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJmVudik7CiAgdmly dHVhbCB2b2lkIHJlY29ubmVjdGVkIChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqIHN1cHBsaWVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZlbnYpOwog IHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0ZWQgKFRBT19FQ19Qcm94eVB1c2hTdXBwbGllciogc3Vw cGxpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZl bnYpOwoKCgogIHZpcnR1YWwgdm9pZCBjb25uZWN0ZWQgKFRBT19FQ19Qcm94eVB1c2hDb25zdW1l ciogY29uc3VtZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZlbnYpOwogIHZpcnR1YWwgdm9pZCByZWNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaENvbnN1 bWVyKiBjb25zdW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9u bWVudCAmZW52KTsKICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdGVkIChUQU9fRUNfUHJveHlQdXNo Q29uc3VtZXIqIGNvbnN1bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmZW52KTsKCgogIHZpcnR1YWwgdm9pZCBzaHV0ZG93biAoQ09SQkE6OkVudmly b25tZW50Jik7CgoKCiAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyYg cHVibGljYXRpb25zX2kgKHZvaWQpIGNvbnN0OwoKCiAgQ09SQkE6OlVMb25nIF9pbmNyX3JlZmNu dCAodm9pZCk7CiAgQ09SQkE6OlVMb25nIF9kZWNyX3JlZmNudCAodm9pZCk7CgoKICB2aXJ0dWFs IHZvaWQgY29ubmVjdF9wdXNoX3N1cHBsaWVyICgKICAgICAgICAgICAgICAgIFJ0ZWNFdmVudENv bW06OlB1c2hTdXBwbGllcl9wdHIgcHVzaF9zdXBwbGllciwKICAgICAgICAgICAgICAgIGNvbnN0 IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MmIHFvcywKICAgICAgICAgICAgICAg IENPUkJBOjpFbnZpcm9ubWVudCAmKQogICAgICB0aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlv biwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpBbHJlYWR5Q29ubmVjdGVkKTsKCiAgdmlydHVhbCB2 b2lkIHB1c2ggKGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50U2V0JiBldmVudCwKICAgICAgICAg ICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYpCiAgICAgIHRocm93IChDT1JCQTo6U3lz dGVtRXhjZXB0aW9uKTsKICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdF9wdXNoX2NvbnN1bWVyIChD T1JCQTo6RW52aXJvbm1lbnQgJikKICAgICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24p OwoKCiAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBfZGVmYXVsdF9QT0EgKENPUkJB OjpFbnZpcm9ubWVudCYgZW52KTsKICB2aXJ0dWFsIHZvaWQgX2FkZF9yZWYgKENPUkJBX0Vudmly b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CiAgdmlydHVhbCB2b2lk IF9yZW1vdmVfcmVmIChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92 YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52 aXJvbm1lbnQgKCkpOwoKcHJvdGVjdGVkOgoKCiAgdm9pZCBzdXBwbGllciAoUnRlY0V2ZW50Q29t bTo6UHVzaFN1cHBsaWVyX3B0ciBzdXBwbGllcik7CiAgdm9pZCBzdXBwbGllcl9pIChSdGVjRXZl bnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyIHN1cHBsaWVyKTsKCiAgZnJpZW5kIGNsYXNzIFRBT19F Q19Qcm94eVB1c2hDb25zdW1lcl9HdWFyZDsKCgoKICBDT1JCQTo6Qm9vbGVhbiBpc19jb25uZWN0 ZWRfaSAodm9pZCkgY29uc3Q7CgoKICBUQU9fRUNfU3VwcGxpZXJfRmlsdGVyICpmaWx0ZXJfaSAo dm9pZCkgY29uc3Q7CgoKICB2b2lkIGNsZWFudXBfaSAodm9pZCk7Cgpwcml2YXRlOgoKICBUQU9f RUNfRXZlbnRfQ2hhbm5lbCogZXZlbnRfY2hhbm5lbF87CgoKICBBQ0VfTG9jayogbG9ja187CgoK ICBDT1JCQTo6VUxvbmcgcmVmY291bnRfOwoKCiAgUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVy X3ZhciBzdXBwbGllcl87CgoKCiAgaW50IGNvbm5lY3RlZF87CgoKICBSdGVjRXZlbnRDaGFubmVs QWRtaW46OlN1cHBsaWVyUU9TIHFvc187CgoKICBQb3J0YWJsZVNlcnZlcjo6UE9BX3ZhciBkZWZh dWx0X1BPQV87CgoKICBUQU9fRUNfU3VwcGxpZXJfRmlsdGVyKiBmaWx0ZXJfOwp9OwojIDE5NCAi RXZlbnQvRUNfUHJveHlDb25zdW1lci5oIgpjbGFzcyBUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXJf R3VhcmQKewpwdWJsaWM6CgogIFRBT19FQ19Qcm94eVB1c2hDb25zdW1lcl9HdWFyZCAoQUNFX0xv Y2sgKmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcg JnJlZmNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX0VDX0V2ZW50 X0NoYW5uZWwgKmVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX0VDX1By b3h5UHVzaENvbnN1bWVyICpwcm94eSk7CgoKICB+VEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyX0d1 YXJkICh2b2lkKTsKCgogIGludCBsb2NrZWQgKHZvaWQpIGNvbnN0OwoKICBUQU9fRUNfU3VwcGxp ZXJfRmlsdGVyICpmaWx0ZXI7Cgpwcml2YXRlOgoKICBBQ0VfTG9jayAqbG9ja187CgoKICBDT1JC QTo6VUxvbmcgJnJlZmNvdW50XzsKCgogIFRBT19FQ19FdmVudF9DaGFubmVsICpldmVudF9jaGFu bmVsXzsKCgogIFRBT19FQ19Qcm94eVB1c2hDb25zdW1lciAqcHJveHlfOwoKCgogIGludCBsb2Nr ZWRfOwp9OwoKCiMgMSAiRXZlbnQvRUNfUHJveHlDb25zdW1lci5pIiAxCgoKaW5saW5lIENPUkJB OjpCb29sZWFuClRBT19FQ19Qcm94eVB1c2hDb25zdW1lcjo6aXNfY29ubmVjdGVkX2kgKHZvaWQp IGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y29ubmVjdGVkXzsKfQoKaW5saW5lIENPUkJBOjpCb29s ZWFuClRBT19FQ19Qcm94eVB1c2hDb25zdW1lcjo6aXNfY29ubmVjdGVkICh2b2lkKSBjb25zdAp7 CiAgQUNFX0d1YXJkPCBBQ0VfTG9jayA+IGFjZV9tb24gKCp0aGlzLT5sb2NrXyk7IGlmIChhY2Vf bW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gMDs7CgogIHJldHVybiB0aGlzLT5pc19jb25uZWN0 ZWRfaSAoKTsKfQoKaW5saW5lIFJ0ZWNFdmVudENvbW06OlB1c2hTdXBwbGllcl9wdHIKVEFPX0VD X1Byb3h5UHVzaENvbnN1bWVyOjpzdXBwbGllciAodm9pZCkgY29uc3QKewogIEFDRV9HdWFyZDwg QUNFX0xvY2sgPiBhY2VfbW9uICgqdGhpcy0+bG9ja18pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkg PT0gMCkgcmV0dXJuIDA7OwogIHJldHVybiBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXI6Ol9k dXBsaWNhdGUgKHRoaXMtPnN1cHBsaWVyXy5pbiAoKSk7Cn0KCmlubGluZSB2b2lkClRBT19FQ19Q cm94eVB1c2hDb25zdW1lcjo6c3VwcGxpZXJfaSAoUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVy X3B0ciBzdXBwbGllcikKewogIHRoaXMtPnN1cHBsaWVyXyA9IHN1cHBsaWVyOwp9CgppbmxpbmUg dm9pZApUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6OnN1cHBsaWVyIChSdGVjRXZlbnRDb21tOjpQ dXNoU3VwcGxpZXJfcHRyIHN1cHBsaWVyKQp7CiAgQUNFX0d1YXJkPCBBQ0VfTG9jayA+IGFjZV9t b24gKCp0aGlzLT5sb2NrXyk7IGlmIChhY2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm47OwoK ICB0aGlzLT5zdXBwbGllcl9pIChzdXBwbGllcik7Cn0KCmlubGluZSBjb25zdCBSdGVjRXZlbnRD aGFubmVsQWRtaW46OlN1cHBsaWVyUU9TJgpUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6OnB1Ymxp Y2F0aW9ucyAodm9pZCkgY29uc3QKewoKICBBQ0VfR3VhcmQ8IEFDRV9Mb2NrID4gYWNlX21vbiAo KnRoaXMtPmxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVybiB0aGlzLT5x b3NfOzsKCiAgcmV0dXJuIHRoaXMtPnFvc187Cn0KCmlubGluZSBjb25zdCBSdGVjRXZlbnRDaGFu bmVsQWRtaW46OlN1cHBsaWVyUU9TJgpUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6OnB1YmxpY2F0 aW9uc19pICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnFvc187Cn0KCmlubGluZSBUQU9f RUNfU3VwcGxpZXJfRmlsdGVyICoKVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyOjpmaWx0ZXJfaSAo dm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5maWx0ZXJfOwp9CgoKCmlubGluZSBpbnQKVEFP X0VDX1Byb3h5UHVzaENvbnN1bWVyX0d1YXJkOjpsb2NrZWQgKHZvaWQpIGNvbnN0CnsKICByZXR1 cm4gdGhpcy0+bG9ja2VkXzsKfQojIDIzMSAiRXZlbnQvRUNfUHJveHlDb25zdW1lci5oIiAyCgoK IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5o IiAxCiMgMjM0ICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmgiIDIKIyA0ICJFdmVudC9FQ19Qcm94 eUNvbnN1bWVyLmNwcCIgMgojIDEgIkV2ZW50L0VDX0V2ZW50X0NoYW5uZWwuaCIgMQojIDE3ICJF dmVudC9FQ19FdmVudF9DaGFubmVsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTggIkV2ZW50L0VDX0V2ZW50X0NoYW5uZWwu aCIgMgoKIyAxICJFdmVudC9FQ19GYWN0b3J5LmgiIDEKIyAxNyAiRXZlbnQvRUNfRmFjdG9yeS5o IgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUu aCIgMQojIDE4ICJFdmVudC9FQ19GYWN0b3J5LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FdmVudC9ldmVudF9l eHBvcnQuaCIgMQojIDIwICJFdmVudC9FQ19GYWN0b3J5LmgiIDIKCgoKCgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMQojIDI2 ICJFdmVudC9FQ19GYWN0b3J5LmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvU2VydmljZV9PYmplY3QuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2VydmljZV9PYmplY3QuaCIKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAx NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NlcnZpY2Vf T2JqZWN0LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvYWNlL1NoYXJlZF9PYmplY3QuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w cm9qL0FDRV93cmFwcGVycy9hY2UvU2hhcmVkX09iamVjdC5oIgojIDEgIi9ob21lL3JycC9zY2hv b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE4ICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2hhcmVkX09iamVjdC5oIiAyCgoj IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIg MQojIDIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2hh cmVkX09iamVjdC5oIiAyCiMgMzEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy YXBwZXJzL2FjZS9TaGFyZWRfT2JqZWN0LmgiCmNsYXNzIEFDRV9TaGFyZWRfT2JqZWN0CnsKcHVi bGljOgogIEFDRV9TaGFyZWRfT2JqZWN0ICh2b2lkKTsKCgogIHZpcnR1YWwgaW50IGluaXQgKGlu dCBhcmdjLCBBQ0VfVENIQVIgKmFyZ3ZbXSk7CgoKICB2aXJ0dWFsIGludCBmaW5pICh2b2lkKTsK CgogIHZpcnR1YWwgaW50IGluZm8gKEFDRV9UQ0hBUiAqKmluZm9fc3RyaW5nLCBzaXplX3QgbGVu Z3RoID0gMCkgY29uc3Q7CgogIHZpcnR1YWwgfkFDRV9TaGFyZWRfT2JqZWN0ICh2b2lkKTsKfTsK CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TaGFy ZWRfT2JqZWN0LmkiIDEKCgoKCgppbmxpbmUKQUNFX1NoYXJlZF9PYmplY3Q6OkFDRV9TaGFyZWRf T2JqZWN0ICh2b2lkKQp7Cn0KIyA1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf d3JhcHBlcnMvYWNlL1NoYXJlZF9PYmplY3QuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDUzICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2hhcmVkX09iamVjdC5oIiAyCiMgMTkg Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TZXJ2aWNlX09i amVjdC5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvRXZlbnRfSGFuZGxlci5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TZXJ2aWNlX09iamVjdC5oIiAyCiMgMzggIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TZXJ2aWNlX09iamVjdC5oIgpj bGFzcyBBQ0VfU2VydmljZV9PYmplY3QgOiBwdWJsaWMgQUNFX0V2ZW50X0hhbmRsZXIsIHB1Ymxp YyBBQ0VfU2hhcmVkX09iamVjdAp7CnB1YmxpYzoKCgogIEFDRV9TZXJ2aWNlX09iamVjdCAoQUNF X1JlYWN0b3IgKiA9IDApOwoKCiAgdmlydHVhbCB+QUNFX1NlcnZpY2VfT2JqZWN0ICh2b2lkKTsK CgogIHZpcnR1YWwgaW50IHN1c3BlbmQgKHZvaWQpOwoKCiAgdmlydHVhbCBpbnQgcmVzdW1lICh2 b2lkKTsKfTsKCgpjbGFzcyBBQ0VfU2VydmljZV9UeXBlX0ltcGw7CiMgNjYgIi9ob21lL3JycC9z Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TZXJ2aWNlX09iamVjdC5oIgpjbGFz cyBBQ0VfU2VydmljZV9UeXBlCnsKcHVibGljOgogIGVudW0KICB7CgogICAgREVMRVRFX09CSiA9 IDEsCgoKICAgIERFTEVURV9USElTID0gMgogIH07CgoKICBBQ0VfU2VydmljZV9UeXBlIChjb25z dCBBQ0VfVENIQVIgKm4sCiAgICAgICAgICAgICAgICAgICAgQUNFX1NlcnZpY2VfVHlwZV9JbXBs ICpvLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9TSExJQl9IQU5ETEUgaGFuZGxlLAog ICAgICAgICAgICAgICAgICAgIGludCBhY3RpdmUpOwogIH5BQ0VfU2VydmljZV9UeXBlICh2b2lk KTsKCiAgY29uc3QgQUNFX1RDSEFSICpuYW1lICh2b2lkKSBjb25zdDsKICB2b2lkIG5hbWUgKGNv bnN0IEFDRV9UQ0hBUiAqKTsKCiAgY29uc3QgQUNFX1NlcnZpY2VfVHlwZV9JbXBsICp0eXBlICh2 b2lkKSBjb25zdDsKICB2b2lkIHR5cGUgKGNvbnN0IEFDRV9TZXJ2aWNlX1R5cGVfSW1wbCAqLAog ICAgICAgICAgICAgaW50IGFjdGl2ZSA9IDEpOwoKICBBQ0VfU0hMSUJfSEFORExFIGhhbmRsZSAo dm9pZCkgY29uc3Q7CiAgdm9pZCBoYW5kbGUgKGNvbnN0IEFDRV9TSExJQl9IQU5ETEUpOwoKICB2 b2lkIHN1c3BlbmQgKHZvaWQpIGNvbnN0OwogIHZvaWQgcmVzdW1lICh2b2lkKSBjb25zdDsKICBp bnQgYWN0aXZlICh2b2lkKSBjb25zdDsKICB2b2lkIGFjdGl2ZSAoaW50KTsKCgogIHZvaWQgZmlu aSAodm9pZCk7CgoKICBpbnQgZmluaV9jYWxsZWQgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBkdW1w ICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZhdGU6CgogIGNvbnN0IEFD RV9UQ0hBUiAqbmFtZV87CgoKICBjb25zdCBBQ0VfU2VydmljZV9UeXBlX0ltcGwgKnR5cGVfOwoK CiAgQUNFX1NITElCX0hBTkRMRSBoYW5kbGVfOwoKCiAgaW50IGFjdGl2ZV87CgoKICBpbnQgZmlu aV9hbHJlYWR5X2NhbGxlZF87Cn07CiMgMTQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q L0FDRV93cmFwcGVycy9hY2UvU2VydmljZV9PYmplY3QuaCIKY2xhc3MgQUNFX1NlcnZpY2VfT2Jq ZWN0X1B0cgp7CnB1YmxpYzoKCgogIEFDRV9TZXJ2aWNlX09iamVjdF9QdHIgKEFDRV9TZXJ2aWNl X09iamVjdCAqc28pOwoKCiAgfkFDRV9TZXJ2aWNlX09iamVjdF9QdHIgKHZvaWQpOwoKCiAgQUNF X1NlcnZpY2VfT2JqZWN0ICpvcGVyYXRvci0+ICgpOwoKcHJpdmF0ZToKCiAgQUNFX1NlcnZpY2Vf T2JqZWN0ICpzZXJ2aWNlX29iamVjdF87Cn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2VydmljZV9PYmplY3QuaSIgMQoKCgoKCmlubGluZSBB Q0VfU2VydmljZV9PYmplY3RfUHRyOjpBQ0VfU2VydmljZV9PYmplY3RfUHRyIChBQ0VfU2Vydmlj ZV9PYmplY3QgKnNvKQogIDogc2VydmljZV9vYmplY3RfIChzbykKewp9CgppbmxpbmUgQUNFX1Nl cnZpY2VfT2JqZWN0X1B0cjo6fkFDRV9TZXJ2aWNlX09iamVjdF9QdHIgKHZvaWQpCnsKICB0aGlz LT5zZXJ2aWNlX29iamVjdF8tPmZpbmkgKCk7CiAgZGVsZXRlIHRoaXMtPnNlcnZpY2Vfb2JqZWN0 XzsKfQoKaW5saW5lIEFDRV9TZXJ2aWNlX09iamVjdCAqCkFDRV9TZXJ2aWNlX09iamVjdF9QdHI6 Om9wZXJhdG9yLT4gKCkKewogIHJldHVybiB0aGlzLT5zZXJ2aWNlX29iamVjdF87Cn0KCmlubGlu ZSBjb25zdCBBQ0VfVENIQVIgKgpBQ0VfU2VydmljZV9UeXBlOjpuYW1lICh2b2lkKSBjb25zdAp7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5u YW1lXzsKfQoKaW5saW5lIGNvbnN0IEFDRV9TZXJ2aWNlX1R5cGVfSW1wbCAqCkFDRV9TZXJ2aWNl X1R5cGU6OnR5cGUgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnR5cGVfOwp9CgppbmxpbmUgQUNFX1NITElCX0hBTkRM RQpBQ0VfU2VydmljZV9UeXBlOjpoYW5kbGUgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+aGFuZGxlXzsKfQoKaW5s aW5lIHZvaWQKQUNFX1NlcnZpY2VfVHlwZTo6bmFtZSAoY29uc3QgQUNFX1RDSEFSICpuKQp7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBkZWxldGUgW10gKEFDRV9U Q0hBUiAqKSB0aGlzLT5uYW1lXzsKICB0aGlzLT5uYW1lXyA9IEFDRTo6c3RybmV3IChuKTsKfQoK aW5saW5lIHZvaWQKQUNFX1NlcnZpY2VfVHlwZTo6dHlwZSAoY29uc3QgQUNFX1NlcnZpY2VfVHlw ZV9JbXBsICpvLCBpbnQgZW5hYmxlZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICB0aGlzLT50eXBlXyA9IG87CiAgKChBQ0VfU2VydmljZV9UeXBlICopIHRoaXMp LT5hY3RpdmVfID0gZW5hYmxlZDsKfQoKaW5saW5lIHZvaWQKQUNFX1NlcnZpY2VfVHlwZTo6aGFu ZGxlIChjb25zdCBBQ0VfU0hMSUJfSEFORExFIGgpCnsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICB0aGlzLT5oYW5kbGVfID0gaDsKfQoKaW5saW5lIGludApBQ0Vf U2VydmljZV9UeXBlOjphY3RpdmUgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YWN0aXZlXyAhPSAwOwp9Cgppbmxp bmUgdm9pZApBQ0VfU2VydmljZV9UeXBlOjphY3RpdmUgKGludCB0dXJub24pCnsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT5hY3RpdmVfID0gdHVybm9u Owp9CgppbmxpbmUgaW50CkFDRV9TZXJ2aWNlX1R5cGU6OmZpbmlfY2FsbGVkICh2b2lkKSBjb25z dAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1 cm4gdGhpcy0+ZmluaV9hbHJlYWR5X2NhbGxlZF87Cn0KIyAxNjIgIi9ob21lL3JycC9zY2hvb2wv dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TZXJ2aWNlX09iamVjdC5oIiAyCgoKIyAxICIv aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMg MTY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2Vydmlj ZV9PYmplY3QuaCIgMgojIDI3ICJFdmVudC9FQ19GYWN0b3J5LmgiIDIKCmNsYXNzIEFDRV9Mb2Nr OwoKY2xhc3MgVEFPX0VDX0V2ZW50X0NoYW5uZWw7CgpjbGFzcyBUQU9fRUNfRGlzcGF0Y2hpbmc7 CmNsYXNzIFRBT19FQ19GaWx0ZXJfQnVpbGRlcjsKY2xhc3MgVEFPX0VDX1N1cHBsaWVyX0ZpbHRl cl9CdWlsZGVyOwpjbGFzcyBUQU9fRUNfQ29uc3VtZXJBZG1pbjsKY2xhc3MgVEFPX0VDX1N1cHBs aWVyQWRtaW47CmNsYXNzIFRBT19FQ19Qcm94eVB1c2hDb25zdW1lcjsKY2xhc3MgVEFPX0VDX1By b3h5UHVzaFN1cHBsaWVyOwpjbGFzcyBUQU9fRUNfT2JzZXJ2ZXJTdHJhdGVneTsKdGVtcGxhdGU8 Y2xhc3MgUFJPWFk+IGNsYXNzIFRBT19FU0ZfUHJveHlfQ29sbGVjdGlvbjsKY2xhc3MgVEFPX0VD X1RpbWVvdXRfR2VuZXJhdG9yOwpjbGFzcyBUQU9fRUNfU2NoZWR1bGluZ19TdHJhdGVneTsKY2xh c3MgVEFPX0VDX0NvbnN1bWVyQ29udHJvbDsKY2xhc3MgVEFPX0VDX1N1cHBsaWVyQ29udHJvbDsK CnR5cGVkZWYgVEFPX0VTRl9Qcm94eV9Db2xsZWN0aW9uPFRBT19FQ19Qcm94eVB1c2hDb25zdW1l cj4gVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyX0NvbGxlY3Rpb247CnR5cGVkZWYgVEFPX0VTRl9Q cm94eV9Db2xsZWN0aW9uPFRBT19FQ19Qcm94eVB1c2hTdXBwbGllcj4gVEFPX0VDX1Byb3h5UHVz aFN1cHBsaWVyX0NvbGxlY3Rpb247CiMgNjIgIkV2ZW50L0VDX0ZhY3RvcnkuaCIKY2xhc3MgVEFP X0VDX0ZhY3RvcnkgOiBwdWJsaWMgQUNFX1NlcnZpY2VfT2JqZWN0CnsKcHVibGljOgoKICB2aXJ0 dWFsIH5UQU9fRUNfRmFjdG9yeSAodm9pZCk7CgoKICB2aXJ0dWFsIFRBT19FQ19EaXNwYXRjaGlu ZyoKICAgICAgY3JlYXRlX2Rpc3BhdGNoaW5nIChUQU9fRUNfRXZlbnRfQ2hhbm5lbCopID0gMDsK ICB2aXJ0dWFsIHZvaWQKICAgICAgZGVzdHJveV9kaXNwYXRjaGluZyAoVEFPX0VDX0Rpc3BhdGNo aW5nKikgPSAwOwoKCiAgdmlydHVhbCBUQU9fRUNfRmlsdGVyX0J1aWxkZXIqCiAgICAgIGNyZWF0 ZV9maWx0ZXJfYnVpbGRlciAoVEFPX0VDX0V2ZW50X0NoYW5uZWwqKSA9IDA7CiAgdmlydHVhbCB2 b2lkCiAgICAgIGRlc3Ryb3lfZmlsdGVyX2J1aWxkZXIgKFRBT19FQ19GaWx0ZXJfQnVpbGRlciop ID0gMDsKCgogIHZpcnR1YWwgVEFPX0VDX1N1cHBsaWVyX0ZpbHRlcl9CdWlsZGVyKgogICAgICBj cmVhdGVfc3VwcGxpZXJfZmlsdGVyX2J1aWxkZXIgKFRBT19FQ19FdmVudF9DaGFubmVsKikgPSAw OwogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95X3N1cHBsaWVyX2ZpbHRlcl9idWlsZGVyIChU QU9fRUNfU3VwcGxpZXJfRmlsdGVyX0J1aWxkZXIqKSA9IDA7CgoKICB2aXJ0dWFsIFRBT19FQ19D b25zdW1lckFkbWluKgogICAgICBjcmVhdGVfY29uc3VtZXJfYWRtaW4gKFRBT19FQ19FdmVudF9D aGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95X2NvbnN1bWVyX2FkbWlu IChUQU9fRUNfQ29uc3VtZXJBZG1pbiopID0gMDsKCgogIHZpcnR1YWwgVEFPX0VDX1N1cHBsaWVy QWRtaW4qCiAgICAgIGNyZWF0ZV9zdXBwbGllcl9hZG1pbiAoVEFPX0VDX0V2ZW50X0NoYW5uZWwq KSA9IDA7CiAgdmlydHVhbCB2b2lkCiAgICAgIGRlc3Ryb3lfc3VwcGxpZXJfYWRtaW4gKFRBT19F Q19TdXBwbGllckFkbWluKikgPSAwOwoKCiAgdmlydHVhbCBUQU9fRUNfUHJveHlQdXNoU3VwcGxp ZXIqCiAgICAgIGNyZWF0ZV9wcm94eV9wdXNoX3N1cHBsaWVyIChUQU9fRUNfRXZlbnRfQ2hhbm5l bCopID0gMDsKICB2aXJ0dWFsIHZvaWQKICAgICAgZGVzdHJveV9wcm94eV9wdXNoX3N1cHBsaWVy IChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqKSA9IDA7CgoKICB2aXJ0dWFsIFRBT19FQ19Qcm94 eVB1c2hDb25zdW1lcioKICAgICAgY3JlYXRlX3Byb3h5X3B1c2hfY29uc3VtZXIgKFRBT19FQ19F dmVudF9DaGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95X3Byb3h5X3B1 c2hfY29uc3VtZXIgKFRBT19FQ19Qcm94eVB1c2hDb25zdW1lciopID0gMDsKCgogIHZpcnR1YWwg VEFPX0VDX1RpbWVvdXRfR2VuZXJhdG9yKgogICAgICBjcmVhdGVfdGltZW91dF9nZW5lcmF0b3Ig KFRBT19FQ19FdmVudF9DaGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95 X3RpbWVvdXRfZ2VuZXJhdG9yIChUQU9fRUNfVGltZW91dF9HZW5lcmF0b3IqKSA9IDA7CgoKICB2 aXJ0dWFsIFRBT19FQ19PYnNlcnZlclN0cmF0ZWd5KgogICAgICBjcmVhdGVfb2JzZXJ2ZXJfc3Ry YXRlZ3kgKFRBT19FQ19FdmVudF9DaGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAgICBk ZXN0cm95X29ic2VydmVyX3N0cmF0ZWd5IChUQU9fRUNfT2JzZXJ2ZXJTdHJhdGVneSopID0gMDsK CgogIHZpcnR1YWwgVEFPX0VDX1NjaGVkdWxpbmdfU3RyYXRlZ3kqCiAgICAgIGNyZWF0ZV9zY2hl ZHVsaW5nX3N0cmF0ZWd5IChUQU9fRUNfRXZlbnRfQ2hhbm5lbCopID0gMDsKICB2aXJ0dWFsIHZv aWQKICAgICAgZGVzdHJveV9zY2hlZHVsaW5nX3N0cmF0ZWd5IChUQU9fRUNfU2NoZWR1bGluZ19T dHJhdGVneSopID0gMDsKCgogIHZpcnR1YWwgVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyX0NvbGxl Y3Rpb24qCiAgICAgIGNyZWF0ZV9wcm94eV9wdXNoX2NvbnN1bWVyX2NvbGxlY3Rpb24gKFRBT19F Q19FdmVudF9DaGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95X3Byb3h5 X3B1c2hfY29uc3VtZXJfY29sbGVjdGlvbiAoVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyX0NvbGxl Y3Rpb24qKSA9IDA7CgoKICB2aXJ0dWFsIFRBT19FQ19Qcm94eVB1c2hTdXBwbGllcl9Db2xsZWN0 aW9uKgogICAgICBjcmVhdGVfcHJveHlfcHVzaF9zdXBwbGllcl9jb2xsZWN0aW9uIChUQU9fRUNf RXZlbnRfQ2hhbm5lbCopID0gMDsKICB2aXJ0dWFsIHZvaWQKICAgICAgZGVzdHJveV9wcm94eV9w dXNoX3N1cHBsaWVyX2NvbGxlY3Rpb24gKFRBT19FQ19Qcm94eVB1c2hTdXBwbGllcl9Db2xsZWN0 aW9uKikgPSAwOwoKCgogIHZpcnR1YWwgQUNFX0xvY2sqIGNyZWF0ZV9jb25zdW1lcl9sb2NrICh2 b2lkKSA9IDA7CiAgdmlydHVhbCB2b2lkIGRlc3Ryb3lfY29uc3VtZXJfbG9jayAoQUNFX0xvY2sq KSA9IDA7CiAgdmlydHVhbCBBQ0VfTG9jayogY3JlYXRlX3N1cHBsaWVyX2xvY2sgKHZvaWQpID0g MDsKICB2aXJ0dWFsIHZvaWQgZGVzdHJveV9zdXBwbGllcl9sb2NrIChBQ0VfTG9jayopID0gMDsK CgoKICB2aXJ0dWFsIFRBT19FQ19Db25zdW1lckNvbnRyb2wqCiAgICAgIGNyZWF0ZV9jb25zdW1l cl9jb250cm9sIChUQU9fRUNfRXZlbnRfQ2hhbm5lbCopID0gMDsKICB2aXJ0dWFsIHZvaWQKICAg ICAgZGVzdHJveV9jb25zdW1lcl9jb250cm9sIChUQU9fRUNfQ29uc3VtZXJDb250cm9sKikgPSAw OwogIHZpcnR1YWwgVEFPX0VDX1N1cHBsaWVyQ29udHJvbCoKICAgICAgY3JlYXRlX3N1cHBsaWVy X2NvbnRyb2wgKFRBT19FQ19FdmVudF9DaGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAg ICBkZXN0cm95X3N1cHBsaWVyX2NvbnRyb2wgKFRBT19FQ19TdXBwbGllckNvbnRyb2wqKSA9IDA7 Cn07CgoKIyAxICJFdmVudC9FQ19GYWN0b3J5LmkiIDEKIyAxNjEgIkV2ZW50L0VDX0ZhY3Rvcnku aCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl L3Bvc3QuaCIgMQojIDE2NCAiRXZlbnQvRUNfRmFjdG9yeS5oIiAyCiMgMjAgIkV2ZW50L0VDX0V2 ZW50X0NoYW5uZWwuaCIgMgoKCgoKCiMgMSAiRXZlbnQvRUNfRGVmYXVsdHMuaCIgMQojIDIwICJF dmVudC9FQ19EZWZhdWx0cy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF X3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIxICJFdmVudC9FQ19EZWZhdWx0cy5oIiAyCiMgMTM2 ICJFdmVudC9FQ19EZWZhdWx0cy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov QUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxMzcgIkV2ZW50L0VDX0RlZmF1bHRzLmgiIDIK IyAyNiAiRXZlbnQvRUNfRXZlbnRfQ2hhbm5lbC5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90 aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFu bmVsQWRtaW5TLmgiIDEKIyAyNyAiRXZlbnQvRUNfRXZlbnRfQ2hhbm5lbC5oIiAyCiMgNDQgIkV2 ZW50L0VDX0V2ZW50X0NoYW5uZWwuaCIKY2xhc3MgVEFPX0VDX0V2ZW50X0NoYW5uZWxfQXR0cmli dXRlcwp7CnB1YmxpYzoKCgoKCgogIFRBT19FQ19FdmVudF9DaGFubmVsX0F0dHJpYnV0ZXMgKFBv cnRhYmxlU2VydmVyOjpQT0FfcHRyIHN1cHBsaWVyX3BvYSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBjb25zdW1lcl9wb2EpOwoKCgoK CiAgaW50IGNvbnN1bWVyX3JlY29ubmVjdDsKICBpbnQgc3VwcGxpZXJfcmVjb25uZWN0OwojIDcx ICJFdmVudC9FQ19FdmVudF9DaGFubmVsLmgiCiAgaW50IGRpc2Nvbm5lY3RfY2FsbGJhY2tzOwoK CiAgaW50IGJ1c3lfaHdtOwogIGludCBtYXhfd3JpdGVfZGVsYXk7CgoKCgoKCiAgQ09SQkE6Ok9i amVjdF9wdHIgc2NoZWR1bGVyOwoKcHJpdmF0ZToKCiAgZnJpZW5kIGNsYXNzIFRBT19FQ19FdmVu dF9DaGFubmVsOwoKCiAgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgc3VwcGxpZXJfcG9hOwogIFBv cnRhYmxlU2VydmVyOjpQT0FfcHRyIGNvbnN1bWVyX3BvYTsKfTsKIyAxMDUgIkV2ZW50L0VDX0V2 ZW50X0NoYW5uZWwuaCIKY2xhc3MgVEFPX0VDX0V2ZW50X0NoYW5uZWwgOiBwdWJsaWMgUE9BX1J0 ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsCnsKcHVibGljOgoKCgoKCgogIFRBT19F Q19FdmVudF9DaGFubmVsIChjb25zdCBUQU9fRUNfRXZlbnRfQ2hhbm5lbF9BdHRyaWJ1dGVzJiBh dHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBUQU9fRUNfRmFjdG9yeSogZmFjdG9y eSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBvd25fZmFjdG9yeSA9IDApOwoKCiAg dmlydHVhbCB+VEFPX0VDX0V2ZW50X0NoYW5uZWwgKHZvaWQpOwoKCgogIHZpcnR1YWwgdm9pZCBh Y3RpdmF0ZSAoQ09SQkE6OkVudmlyb25tZW50ICZlbnYgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu dCAoKSk7CgoKCiAgdmlydHVhbCB2b2lkIHNodXRkb3duIChDT1JCQTo6RW52aXJvbm1lbnQgJmVu diA9IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgogIFRBT19FQ19EaXNwYXRjaGluZyog ZGlzcGF0Y2hpbmcgKHZvaWQpIGNvbnN0OwoKCiAgVEFPX0VDX0ZpbHRlcl9CdWlsZGVyKiBmaWx0 ZXJfYnVpbGRlciAodm9pZCkgY29uc3Q7CgoKICBUQU9fRUNfU3VwcGxpZXJfRmlsdGVyX0J1aWxk ZXIqIHN1cHBsaWVyX2ZpbHRlcl9idWlsZGVyICh2b2lkKSBjb25zdDsKCgoKICBUQU9fRUNfQ29u c3VtZXJBZG1pbiogY29uc3VtZXJfYWRtaW4gKHZvaWQpIGNvbnN0OwoKCgogIFRBT19FQ19TdXBw bGllckFkbWluKiBzdXBwbGllcl9hZG1pbiAodm9pZCkgY29uc3Q7CgoKICBUQU9fRUNfVGltZW91 dF9HZW5lcmF0b3IqIHRpbWVvdXRfZ2VuZXJhdG9yICh2b2lkKSBjb25zdDsKCgogIFRBT19FQ19T Y2hlZHVsaW5nX1N0cmF0ZWd5KiBzY2hlZHVsaW5nX3N0cmF0ZWd5ICh2b2lkKSBjb25zdDsKCgog IFRBT19FQ19Db25zdW1lckNvbnRyb2wgKmNvbnN1bWVyX2NvbnRyb2wgKHZvaWQpIGNvbnN0Owog IFRBT19FQ19TdXBwbGllckNvbnRyb2wgKnN1cHBsaWVyX2NvbnRyb2wgKHZvaWQpIGNvbnN0OwoK CgogIHZvaWQgY3JlYXRlX3Byb3h5IChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqJik7CiAgdm9p ZCBkZXN0cm95X3Byb3h5IChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqKTsKCgogIHZvaWQgY3Jl YXRlX3Byb3h5IChUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIqJik7CiAgdm9pZCBkZXN0cm95X3By b3h5IChUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIqKTsKCgoKCiAgdm9pZCBjcmVhdGVfcHJveHlf Y29sbGVjdGlvbiAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyX0NvbGxlY3Rpb24qJik7CiAgdm9p ZCBkZXN0cm95X3Byb3h5X2NvbGxlY3Rpb24gKFRBT19FQ19Qcm94eVB1c2hTdXBwbGllcl9Db2xs ZWN0aW9uKik7CgoKCgogIHZvaWQgY3JlYXRlX3Byb3h5X2NvbGxlY3Rpb24gKFRBT19FQ19Qcm94 eVB1c2hDb25zdW1lcl9Db2xsZWN0aW9uKiYpOwogIHZvaWQgZGVzdHJveV9wcm94eV9jb2xsZWN0 aW9uIChUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXJfQ29sbGVjdGlvbiopOwoKCiAgUG9ydGFibGVT ZXJ2ZXI6OlBPQV9wdHIgc3VwcGxpZXJfcG9hICh2b2lkKTsKICBQb3J0YWJsZVNlcnZlcjo6UE9B X3B0ciBjb25zdW1lcl9wb2EgKHZvaWQpOwoKCgogIEFDRV9Mb2NrKiBjcmVhdGVfY29uc3VtZXJf bG9jayAodm9pZCk7CiAgdm9pZCBkZXN0cm95X2NvbnN1bWVyX2xvY2sgKEFDRV9Mb2NrKik7CiAg QUNFX0xvY2sqIGNyZWF0ZV9zdXBwbGllcl9sb2NrICh2b2lkKTsKICB2b2lkIGRlc3Ryb3lfc3Vw cGxpZXJfbG9jayAoQUNFX0xvY2sqKTsKCgoKICB2aXJ0dWFsIHZvaWQgY29ubmVjdGVkIChUQU9f RUNfUHJveHlQdXNoQ29uc3VtZXIqLAogICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCYpOwogIHZpcnR1YWwgdm9pZCByZWNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVz aENvbnN1bWVyKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVu dCYpOwogIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0ZWQgKFRBT19FQ19Qcm94eVB1c2hDb25zdW1l ciosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50Jik7CgoK CiAgdmlydHVhbCB2b2lkIGNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQmKTsKICB2aXJ0dWFsIHZv aWQgcmVjb25uZWN0ZWQgKFRBT19FQ19Qcm94eVB1c2hTdXBwbGllciosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQmKTsKICB2aXJ0dWFsIHZvaWQgZGlzY29u bmVjdGVkIChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCYpOwoKCgoKCiAgaW50IGNvbnN1bWVyX3JlY29ubmVj dCAodm9pZCkgY29uc3Q7CgoKICBpbnQgc3VwcGxpZXJfcmVjb25uZWN0ICh2b2lkKSBjb25zdDsK CgoKICBpbnQgZGlzY29ubmVjdF9jYWxsYmFja3MgKHZvaWQpIGNvbnN0OwoKCiAgQ09SQkE6Ok9i amVjdF9wdHIgc2NoZWR1bGVyICh2b2lkKTsKCgoKICBpbnQgYnVzeV9od20gKHZvaWQpIGNvbnN0 OwogIGludCBtYXhfd3JpdGVfZGVsYXkgKHZvaWQpIGNvbnN0OwoKCgoKICB2aXJ0dWFsIFJ0ZWNF dmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIKICAgICAgZm9yX2NvbnN1bWVycyAo Q09SQkE6OkVudmlyb25tZW50JiBlbnYpCiAgICAgICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNl cHRpb24pOwoKCgogIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWlu X3B0cgogICAgICBmb3Jfc3VwcGxpZXJzIChDT1JCQTo6RW52aXJvbm1lbnQmIGVudikKICAgICAg ICB0aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7CgoKICB2aXJ0dWFsIHZvaWQgZGVzdHJv eSAoQ09SQkE6OkVudmlyb25tZW50ICZlbnYpCiAgICB0aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2Vw dGlvbik7CgogIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl9IYW5kbGUK ICAgICAgYXBwZW5kX29ic2VydmVyIChSdGVjRXZlbnRDaGFubmVsQWRtaW46Ok9ic2VydmVyX3B0 ciwKICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJmVudikKICAgICAg dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2 ZW50Q2hhbm5lbDo6U1lOQ0hST05JWkFUSU9OX0VSUk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46 OkV2ZW50Q2hhbm5lbDo6Q0FOVF9BUFBFTkRfT0JTRVJWRVIpOwoKCgogIHZpcnR1YWwgdm9pZAog ICAgICByZW1vdmVfb2JzZXJ2ZXIgKFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfSGFu ZGxlLAogICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmZW52KQogICAg ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 RXZlbnRDaGFubmVsOjpTWU5DSFJPTklaQVRJT05fRVJST1IsIFJ0ZWNFdmVudENoYW5uZWxBZG1p bjo6RXZlbnRDaGFubmVsOjpDQU5UX1JFTU9WRV9PQlNFUlZFUik7CgoKCgpwcml2YXRlOgoKCiAg UG9ydGFibGVTZXJ2ZXI6OlBPQV92YXIgc3VwcGxpZXJfcG9hXzsKICBQb3J0YWJsZVNlcnZlcjo6 UE9BX3ZhciBjb25zdW1lcl9wb2FfOwoKCgoKCgogIFRBT19FQ19GYWN0b3J5ICpmYWN0b3J5XzsK CgogIGludCBvd25fZmFjdG9yeV87CgoKICBUQU9fRUNfRGlzcGF0Y2hpbmcgKmRpc3BhdGNoaW5n XzsKCgogIFRBT19FQ19GaWx0ZXJfQnVpbGRlciAqZmlsdGVyX2J1aWxkZXJfOwoKCiAgVEFPX0VD X1N1cHBsaWVyX0ZpbHRlcl9CdWlsZGVyICpzdXBwbGllcl9maWx0ZXJfYnVpbGRlcl87CgoKICBU QU9fRUNfQ29uc3VtZXJBZG1pbiAqY29uc3VtZXJfYWRtaW5fOwoKCiAgVEFPX0VDX1N1cHBsaWVy QWRtaW4gKnN1cHBsaWVyX2FkbWluXzsKCgogIFRBT19FQ19UaW1lb3V0X0dlbmVyYXRvciAqdGlt ZW91dF9nZW5lcmF0b3JfOwoKCiAgVEFPX0VDX09ic2VydmVyU3RyYXRlZ3kgKm9ic2VydmVyX3N0 cmF0ZWd5XzsKCgogIENPUkJBOjpPYmplY3RfdmFyIHNjaGVkdWxlcl87CgoKICBUQU9fRUNfU2No ZWR1bGluZ19TdHJhdGVneSAqc2NoZWR1bGluZ19zdHJhdGVneV87CgoKICBpbnQgY29uc3VtZXJf cmVjb25uZWN0XzsKICBpbnQgc3VwcGxpZXJfcmVjb25uZWN0XzsKCgogIGludCBkaXNjb25uZWN0 X2NhbGxiYWNrc187CgoKCiAgaW50IGJ1c3lfaHdtXzsKICBpbnQgbWF4X3dyaXRlX2RlbGF5XzsK CgoKICBUQU9fRUNfQ29uc3VtZXJDb250cm9sICpjb25zdW1lcl9jb250cm9sXzsKICBUQU9fRUNf U3VwcGxpZXJDb250cm9sICpzdXBwbGllcl9jb250cm9sXzsKfTsKCgojIDEgIkV2ZW50L0VDX0V2 ZW50X0NoYW5uZWwuaSIgMQoKCmlubGluZQpUQU9fRUNfRXZlbnRfQ2hhbm5lbF9BdHRyaWJ1dGVz OjoKVEFPX0VDX0V2ZW50X0NoYW5uZWxfQXR0cmlidXRlcyAoUG9ydGFibGVTZXJ2ZXI6OlBPQV9w dHIgc19wb2EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRhYmxlU2VydmVy OjpQT0FfcHRyIGNfcG9hKQogIDogY29uc3VtZXJfcmVjb25uZWN0ICgwKSwKICAgICBzdXBwbGll cl9yZWNvbm5lY3QgKDApLAogICAgIGRpc2Nvbm5lY3RfY2FsbGJhY2tzICgwKSwKICAgICBidXN5 X2h3bSAoMTAyNCksCiAgICAgbWF4X3dyaXRlX2RlbGF5ICgyMDQ4KSwKICAgICBzY2hlZHVsZXIg KENPUkJBOjpPYmplY3Q6Ol9uaWwgKCkpLAogICAgIHN1cHBsaWVyX3BvYSAoc19wb2EpLAogICAg IGNvbnN1bWVyX3BvYSAoY19wb2EpCnsKfQoKaW5saW5lIFRBT19FQ19EaXNwYXRjaGluZyoKVEFP X0VDX0V2ZW50X0NoYW5uZWw6OmRpc3BhdGNoaW5nICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRo aXMtPmRpc3BhdGNoaW5nXzsKfQoKaW5saW5lIFRBT19FQ19GaWx0ZXJfQnVpbGRlcioKVEFPX0VD X0V2ZW50X0NoYW5uZWw6OmZpbHRlcl9idWlsZGVyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRo aXMtPmZpbHRlcl9idWlsZGVyXzsKfQoKaW5saW5lIFRBT19FQ19TdXBwbGllcl9GaWx0ZXJfQnVp bGRlcioKVEFPX0VDX0V2ZW50X0NoYW5uZWw6OnN1cHBsaWVyX2ZpbHRlcl9idWlsZGVyICh2b2lk KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnN1cHBsaWVyX2ZpbHRlcl9idWlsZGVyXzsKfQoKaW5s aW5lIFRBT19FQ19Db25zdW1lckFkbWluKgpUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y29uc3VtZXJf YWRtaW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y29uc3VtZXJfYWRtaW5fOwp9Cgpp bmxpbmUgVEFPX0VDX1N1cHBsaWVyQWRtaW4qClRBT19FQ19FdmVudF9DaGFubmVsOjpzdXBwbGll cl9hZG1pbiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5zdXBwbGllcl9hZG1pbl87Cn0K CmlubGluZSBUQU9fRUNfVGltZW91dF9HZW5lcmF0b3IqClRBT19FQ19FdmVudF9DaGFubmVsOjp0 aW1lb3V0X2dlbmVyYXRvciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT50aW1lb3V0X2dl bmVyYXRvcl87Cn0KCmlubGluZSBUQU9fRUNfU2NoZWR1bGluZ19TdHJhdGVneSoKVEFPX0VDX0V2 ZW50X0NoYW5uZWw6OnNjaGVkdWxpbmdfc3RyYXRlZ3kgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g dGhpcy0+c2NoZWR1bGluZ19zdHJhdGVneV87Cn0KCmlubGluZSBUQU9fRUNfQ29uc3VtZXJDb250 cm9sKgpUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y29uc3VtZXJfY29udHJvbCAodm9pZCkgY29uc3QK ewogIHJldHVybiB0aGlzLT5jb25zdW1lcl9jb250cm9sXzsKfQoKaW5saW5lIFRBT19FQ19TdXBw bGllckNvbnRyb2wqClRBT19FQ19FdmVudF9DaGFubmVsOjpzdXBwbGllcl9jb250cm9sICh2b2lk KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnN1cHBsaWVyX2NvbnRyb2xfOwp9CgppbmxpbmUgdm9p ZApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y3JlYXRlX3Byb3h5IChUQU9fRUNfUHJveHlQdXNoU3Vw cGxpZXIqJiB4KQp7CiAgeCA9IHRoaXMtPmZhY3RvcnlfLT5jcmVhdGVfcHJveHlfcHVzaF9zdXBw bGllciAodGhpcyk7Cn0KCmlubGluZSB2b2lkClRBT19FQ19FdmVudF9DaGFubmVsOjpkZXN0cm95 X3Byb3h5IChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqIHN1cHBsaWVyKQp7CiAgdGhpcy0+ZmFj dG9yeV8tPmRlc3Ryb3lfcHJveHlfcHVzaF9zdXBwbGllciAoc3VwcGxpZXIpOwp9CgppbmxpbmUg dm9pZApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y3JlYXRlX3Byb3h5IChUQU9fRUNfUHJveHlQdXNo Q29uc3VtZXIqJiB4KQp7CiAgeCA9IHRoaXMtPmZhY3RvcnlfLT5jcmVhdGVfcHJveHlfcHVzaF9j b25zdW1lciAodGhpcyk7Cn0KCmlubGluZSB2b2lkClRBT19FQ19FdmVudF9DaGFubmVsOjpkZXN0 cm95X3Byb3h5IChUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIqIGNvbnN1bWVyKQp7CiAgdGhpcy0+ ZmFjdG9yeV8tPmRlc3Ryb3lfcHJveHlfcHVzaF9jb25zdW1lciAoY29uc3VtZXIpOwp9Cgppbmxp bmUgdm9pZApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y3JlYXRlX3Byb3h5X2NvbGxlY3Rpb24gKFRB T19FQ19Qcm94eVB1c2hDb25zdW1lcl9Db2xsZWN0aW9uKiYgeCkKewogIHggPSB0aGlzLT5mYWN0 b3J5Xy0+Y3JlYXRlX3Byb3h5X3B1c2hfY29uc3VtZXJfY29sbGVjdGlvbiAodGhpcyk7Cn0KCmlu bGluZSB2b2lkClRBT19FQ19FdmVudF9DaGFubmVsOjpkZXN0cm95X3Byb3h5X2NvbGxlY3Rpb24g KFRBT19FQ19Qcm94eVB1c2hDb25zdW1lcl9Db2xsZWN0aW9uKiB4KQp7CiAgdGhpcy0+ZmFjdG9y eV8tPmRlc3Ryb3lfcHJveHlfcHVzaF9jb25zdW1lcl9jb2xsZWN0aW9uICh4KTsKfQoKaW5saW5l IHZvaWQKVEFPX0VDX0V2ZW50X0NoYW5uZWw6OmNyZWF0ZV9wcm94eV9jb2xsZWN0aW9uIChUQU9f RUNfUHJveHlQdXNoU3VwcGxpZXJfQ29sbGVjdGlvbiomIHgpCnsKICB4ID0gdGhpcy0+ZmFjdG9y eV8tPmNyZWF0ZV9wcm94eV9wdXNoX3N1cHBsaWVyX2NvbGxlY3Rpb24gKHRoaXMpOwp9Cgppbmxp bmUgdm9pZApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6ZGVzdHJveV9wcm94eV9jb2xsZWN0aW9uIChU QU9fRUNfUHJveHlQdXNoU3VwcGxpZXJfQ29sbGVjdGlvbiogeCkKewogIHRoaXMtPmZhY3Rvcnlf LT5kZXN0cm95X3Byb3h5X3B1c2hfc3VwcGxpZXJfY29sbGVjdGlvbiAoeCk7Cn0KCmlubGluZSBQ b3J0YWJsZVNlcnZlcjo6UE9BX3B0cgpUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6c3VwcGxpZXJfcG9h ICh2b2lkKQp7CiAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHRoaXMt PnN1cHBsaWVyX3BvYV8uaW4gKCkpOwp9CgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIK VEFPX0VDX0V2ZW50X0NoYW5uZWw6OmNvbnN1bWVyX3BvYSAodm9pZCkKewogIHJldHVybiBQb3J0 YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlICh0aGlzLT5jb25zdW1lcl9wb2FfLmluICgpKTsK fQoKaW5saW5lIEFDRV9Mb2NrKgpUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y3JlYXRlX2NvbnN1bWVy X2xvY2sgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+ZmFjdG9yeV8tPmNyZWF0ZV9jb25zdW1lcl9s b2NrICgpOwp9CgppbmxpbmUgdm9pZApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6ZGVzdHJveV9jb25z dW1lcl9sb2NrIChBQ0VfTG9jayogeCkKewogIHRoaXMtPmZhY3RvcnlfLT5kZXN0cm95X2NvbnN1 bWVyX2xvY2sgKHgpOwp9CgppbmxpbmUgQUNFX0xvY2sqClRBT19FQ19FdmVudF9DaGFubmVsOjpj cmVhdGVfc3VwcGxpZXJfbG9jayAodm9pZCkKewogIHJldHVybiB0aGlzLT5mYWN0b3J5Xy0+Y3Jl YXRlX3N1cHBsaWVyX2xvY2sgKCk7Cn0KCmlubGluZSB2b2lkClRBT19FQ19FdmVudF9DaGFubmVs OjpkZXN0cm95X3N1cHBsaWVyX2xvY2sgKEFDRV9Mb2NrKiB4KQp7CiAgdGhpcy0+ZmFjdG9yeV8t PmRlc3Ryb3lfc3VwcGxpZXJfbG9jayAoeCk7Cn0KCmlubGluZSBpbnQKVEFPX0VDX0V2ZW50X0No YW5uZWw6OmNvbnN1bWVyX3JlY29ubmVjdCAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5j b25zdW1lcl9yZWNvbm5lY3RfOwp9CgppbmxpbmUgaW50ClRBT19FQ19FdmVudF9DaGFubmVsOjpz dXBwbGllcl9yZWNvbm5lY3QgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+c3VwcGxpZXJf cmVjb25uZWN0XzsKfQoKaW5saW5lIGludApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6ZGlzY29ubmVj dF9jYWxsYmFja3MgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+ZGlzY29ubmVjdF9jYWxs YmFja3NfOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdF9wdHIKVEFPX0VDX0V2ZW50X0NoYW5uZWw6 OnNjaGVkdWxlciAodm9pZCkKewogIHJldHVybiBDT1JCQTo6T2JqZWN0OjpfZHVwbGljYXRlICh0 aGlzLT5zY2hlZHVsZXJfLmluICgpKTsKfQoKaW5saW5lIGludApUQU9fRUNfRXZlbnRfQ2hhbm5l bDo6YnVzeV9od20gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+YnVzeV9od21fOwp9Cgpp bmxpbmUgaW50ClRBT19FQ19FdmVudF9DaGFubmVsOjptYXhfd3JpdGVfZGVsYXkgKHZvaWQpIGNv bnN0CnsKICByZXR1cm4gdGhpcy0+bWF4X3dyaXRlX2RlbGF5XzsKfQojIDMyMiAiRXZlbnQvRUNf RXZlbnRfQ2hhbm5lbC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD RV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMzI1ICJFdmVudC9FQ19FdmVudF9DaGFubmVsLmgi IDIKIyA1ICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmNwcCIgMgojIDEgIkV2ZW50L0VDX1N1cHBs aWVyX0ZpbHRlci5oIiAxCiMgMTcgIkV2ZW50L0VDX1N1cHBsaWVyX0ZpbHRlci5oIgojIDEgIi9o b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE4 ICJFdmVudC9FQ19TdXBwbGllcl9GaWx0ZXIuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1D LmgiIDEKIyAyMCAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVyLmgiIDIKIyAxICIvaG9tZS9ycnAv c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0VTRi9F U0ZfV29ya2VyLmgiIDEKIyAxNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FU0YvRVNGX1dvcmtlci5oIgojIDEgIi9ob21lL3Jy cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMQojIDE2 ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v cmJzdmNzL0VTRi9FU0ZfV29ya2VyLmgiIDIKIyAzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FU0YvRVNGX1dvcmtlci5oIgp0 ZW1wbGF0ZTxjbGFzcyBPYmplY3Q+CmNsYXNzIFRBT19FU0ZfV29ya2VyCnsKcHVibGljOgogIHZp cnR1YWwgflRBT19FU0ZfV29ya2VyICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCB3b3JrIChPYmpl Y3QgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKSA9IDA7Cn07CgoKIyAxICIvaG9tZS9ycnAvc2No b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0VTRi9FU0Zf V29ya2VyLmkiIDEKIyA0MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FU0YvRVNGX1dvcmtlci5oIiAyCgoKCiMgMSAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9F U0YvRVNGX1dvcmtlci5jcHAiIDEKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By b2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRVNGL0VTRl9Xb3JrZXIuaCIgMQoj IDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNz L29yYnN2Y3MvRVNGL0VTRl9Xb3JrZXIuY3BwIiAyCgoKCgoKaW5saW5lIGNvbnN0IGNoYXIqIGdl dF9yY3NpZF9FU0ZfRVNGX1dvcmtlciAoY29uc3QgY2hhciopIHsgcmV0dXJuICJFU0ZfV29ya2Vy LmNwcCx2IDEuMiAyMDAwLzA0LzAyIDE5OjIyOjQxIGNvcnlhbiBFeHAiIDsgfSBzdGF0aWMgY29u c3QgY2hhciogcmNzaWRfRVNGX0VTRl9Xb3JrZXIgPSBnZXRfcmNzaWRfRVNGX0VTRl9Xb3JrZXIg KCByY3NpZF9FU0ZfRVNGX1dvcmtlciApIDsKCnRlbXBsYXRlPGNsYXNzIE9iamVjdD4KVEFPX0VT Rl9Xb3JrZXI8T2JqZWN0Pjo6flRBT19FU0ZfV29ya2VyICh2b2lkKQp7Cn0KIyA0NyAiL2hvbWUv cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9F U0YvRVNGX1dvcmtlci5oIiAyCiMgMjEgIkV2ZW50L0VDX1N1cHBsaWVyX0ZpbHRlci5oIiAyCiMg MSAiRXZlbnQvZXZlbnRfZXhwb3J0LmgiIDEKIyAyMiAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVy LmgiIDIKCgoKCgpjbGFzcyBUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXI7CmNsYXNzIFRBT19FQ19Q cm94eVB1c2hDb25zdW1lcjsKY2xhc3MgVEFPX0VDX0V2ZW50X0NoYW5uZWw7CmNsYXNzIFRBT19F Q19RT1NfSW5mbzsKIyA2NCAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVyLmgiCmNsYXNzIFRBT19F Q19TdXBwbGllcl9GaWx0ZXIKewpwdWJsaWM6CgogIHZpcnR1YWwgflRBT19FQ19TdXBwbGllcl9G aWx0ZXIgKHZvaWQpOwojIDc3ICJFdmVudC9FQ19TdXBwbGllcl9GaWx0ZXIuaCIKICB2aXJ0dWFs IHZvaWQgYmluZCAoVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyKiBjb25zdW1lcikgPSAwOwojIDg4 ICJFdmVudC9FQ19TdXBwbGllcl9GaWx0ZXIuaCIKICB2aXJ0dWFsIHZvaWQgdW5iaW5kIChUQU9f RUNfUHJveHlQdXNoQ29uc3VtZXIqIGNvbnN1bWVyKSA9IDA7CgoKCiAgdmlydHVhbCB2b2lkIGNv bm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyICpzdXBwbGllciwKICAgICAgICAgICAg ICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJmVudikgPSAwOwogIHZpcnR1YWwgdm9p ZCByZWNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyICpzdXBwbGllciwKICAgICAg ICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJmVudikgPSAwOwogIHZpcnR1 YWwgdm9pZCBkaXNjb25uZWN0ZWQgKFRBT19FQ19Qcm94eVB1c2hTdXBwbGllciAqc3VwcGxpZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZlbnYpID0g MDsKCgogIHZpcnR1YWwgdm9pZCBzaHV0ZG93biAoQ09SQkE6OkVudmlyb25tZW50ICZlbnYpID0g MDsKCgoKICB2aXJ0dWFsIHZvaWQgcHVzaCAoY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQg JmV2ZW50LAogICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJikgPSAwOwoK CgogIHZpcnR1YWwgQ09SQkE6OlVMb25nIF9pbmNyX3JlZmNudCAodm9pZCkgPSAwOwogIHZpcnR1 YWwgQ09SQkE6OlVMb25nIF9kZWNyX3JlZmNudCAodm9pZCkgPSAwOwp9OwoKCgpjbGFzcyBUQU9f RUNfRmlsdGVyX1dvcmtlciA6IHB1YmxpYyBUQU9fRVNGX1dvcmtlcjxUQU9fRUNfUHJveHlQdXNo U3VwcGxpZXI+CnsKcHVibGljOgogIFRBT19FQ19GaWx0ZXJfV29ya2VyIChSdGVjRXZlbnRDb21t OjpFdmVudFNldCAmZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRBT19FQ19R T1NfSW5mbyAmZXZlbnRfaW5mbyk7CgogIHZpcnR1YWwgdm9pZCB3b3JrIChUQU9fRUNfUHJveHlQ dXNoU3VwcGxpZXIgKnN1cHBsaWVyLAogICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKcHJpdmF0ZToKCiAgUnRl Y0V2ZW50Q29tbTo6RXZlbnRTZXQgJmV2ZW50XzsKCgogIGNvbnN0IFRBT19FQ19RT1NfSW5mbyAm ZXZlbnRfaW5mb187Cn07CgoKIyAxICJFdmVudC9FQ19TdXBwbGllcl9GaWx0ZXIuaSIgMQoKCmlu bGluZQpUQU9fRUNfRmlsdGVyX1dvcmtlcjo6VEFPX0VDX0ZpbHRlcl9Xb3JrZXIgKFJ0ZWNFdmVu dENvbW06OkV2ZW50U2V0ICZldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBUQU9fRUNfUU9TX0luZm8gJmV2ZW50X2luZm8pCiAgOiBldmVudF8g KGV2ZW50KSwKICAgICBldmVudF9pbmZvXyAoZXZlbnRfaW5mbykKewp9CiMgMTM0ICJFdmVudC9F Q19TdXBwbGllcl9GaWx0ZXIuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv ai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDEzNyAiRXZlbnQvRUNfU3VwcGxpZXJfRmls dGVyLmgiIDIKIyA2ICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmNwcCIgMgojIDEgIkV2ZW50L0VD X1N1cHBsaWVyX0ZpbHRlcl9CdWlsZGVyLmgiIDEKIyAxNyAiRXZlbnQvRUNfU3VwcGxpZXJfRmls dGVyX0J1aWxkZXIuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw cGVycy9hY2UvcHJlLmgiIDEKIyAxOCAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVyX0J1aWxkZXIu aCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v b3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIgMQojIDIwICJFdmVudC9F Q19TdXBwbGllcl9GaWx0ZXJfQnVpbGRlci5oIiAyCiMgMSAiRXZlbnQvZXZlbnRfZXhwb3J0Lmgi IDEKIyAyMSAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVyX0J1aWxkZXIuaCIgMgoKCgoKCmNsYXNz IFRBT19FQ19TdXBwbGllcl9GaWx0ZXI7CmNsYXNzIFRBT19FQ19Qcm94eVB1c2hDb25zdW1lcjsK IyAzNyAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVyX0J1aWxkZXIuaCIKY2xhc3MgVEFPX0VDX1N1 cHBsaWVyX0ZpbHRlcl9CdWlsZGVyCnsKcHVibGljOgoKICB2aXJ0dWFsIH5UQU9fRUNfU3VwcGxp ZXJfRmlsdGVyX0J1aWxkZXIgKHZvaWQpOwoKCgoKCgogIHZpcnR1YWwgVEFPX0VDX1N1cHBsaWVy X0ZpbHRlcioKICAgICAgY3JlYXRlIChSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9T JiBxb3MpID0gMDsKCgogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95IChUQU9fRUNfU3VwcGxp ZXJfRmlsdGVyICpmaWx0ZXIpID0gMDsKfTsKCgoKCiMgMSAiRXZlbnQvRUNfU3VwcGxpZXJfRmls dGVyX0J1aWxkZXIuaSIgMQojIDYwICJFdmVudC9FQ19TdXBwbGllcl9GaWx0ZXJfQnVpbGRlci5o IiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv cG9zdC5oIiAxCiMgNjMgIkV2ZW50L0VDX1N1cHBsaWVyX0ZpbHRlcl9CdWlsZGVyLmgiIDIKIyA3 ICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmNwcCIgMgoKCgoKCmlubGluZSBjb25zdCBjaGFyKiBn ZXRfcmNzaWRfRXZlbnRfRUNfUHJveHlDb25zdW1lciAoY29uc3QgY2hhciopIHsgcmV0dXJuICJF Q19Qcm94eUNvbnN1bWVyLmNwcCx2IDEuMzEgMjAwMS8wNS8xMSAxNzoxODo0MCBiYWxhIEV4cCIg OyB9IHN0YXRpYyBjb25zdCBjaGFyKiByY3NpZF9FdmVudF9FQ19Qcm94eUNvbnN1bWVyID0gZ2V0 X3Jjc2lkX0V2ZW50X0VDX1Byb3h5Q29uc3VtZXIgKCByY3NpZF9FdmVudF9FQ19Qcm94eUNvbnN1 bWVyICkgOwoKdHlwZWRlZiBBQ0VfUmV2ZXJzZV9Mb2NrPEFDRV9Mb2NrPiBUQU9fRUNfVW5sb2Nr OwoKVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyOjoKICAgIFRBT19FQ19Qcm94eVB1c2hDb25zdW1l ciAoVEFPX0VDX0V2ZW50X0NoYW5uZWwqIGVjKQogIDogZXZlbnRfY2hhbm5lbF8gKGVjKSwKICAg IHJlZmNvdW50XyAoMSksCiAgICBjb25uZWN0ZWRfICgwKSwKICAgIGZpbHRlcl8gKDApCnsKICB0 aGlzLT5sb2NrXyA9CiAgICB0aGlzLT5ldmVudF9jaGFubmVsXy0+Y3JlYXRlX2NvbnN1bWVyX2xv Y2sgKCk7CgogIHRoaXMtPmRlZmF1bHRfUE9BXyA9CiAgICB0aGlzLT5ldmVudF9jaGFubmVsXy0+ Y29uc3VtZXJfcG9hICgpOwoKICB0aGlzLT5xb3NfLmlzX2dhdGV3YXkgPSAwOwp9CgpUQU9fRUNf UHJveHlQdXNoQ29uc3VtZXI6On5UQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIgKHZvaWQpCnsKICB0 aGlzLT5ldmVudF9jaGFubmVsXy0+ZGVzdHJveV9jb25zdW1lcl9sb2NrICh0aGlzLT5sb2NrXyk7 CiAgdGhpcy0+Y2xlYW51cF9pICgpOwp9CgoKQ09SQkE6OkJvb2xlYW4KVEFPX0VDX1Byb3h5UHVz aENvbnN1bWVyOjpzdXBwbGllcl9ub25fZXhpc3RlbnQgKAogICAgICBDT1JCQTo6Qm9vbGVhbl9v dXQgZGlzY29ubmVjdGVkLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUpCnsKICBDT1JCQTo6T2JqZWN0X3ZhciBzdXBwbGllcjsKICB7CiAg ICBBQ0VfR3VhcmQ8IEFDRV9Mb2NrID4gYWNlX21vbiAoKnRoaXMtPmxvY2tfKTsgaWYgKGFjZV9t b24ubG9ja2VkICgpID09IDApIGRvIHsgZG8geyB9IHdoaWxlICgmX0FDRV9DT1JCQV9FbnZpcm9u bWVudF92YXJpYWJsZSA9PSAwKTsgdGhyb3cgQ09SQkE6OklOVEVSTkFMICgpOyB9IHdoaWxlICgw KTs7CgoKICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgIGRpc2Nvbm5lY3RlZCA9IDA7CiAg ICBpZiAodGhpcy0+aXNfY29ubmVjdGVkX2kgKCkgPT0gMCkKICAgICAgewogICAgICAgIGRpc2Nv bm5lY3RlZCA9IDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgIGlmIChDT1JCQTo6aXNf bmlsICh0aGlzLT5zdXBwbGllcl8uaW4gKCkpKQogICAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAg ICAgIH0KICAgIHN1cHBsaWVyID0gQ09SQkE6Ok9iamVjdDo6X2R1cGxpY2F0ZSAodGhpcy0+c3Vw cGxpZXJfLmluICgpKTsKICB9CgoKICByZXR1cm4gc3VwcGxpZXItPl9ub25fZXhpc3RlbnQgKF9B Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKCgp9Cgp2b2lkClRBT19FQ19Qcm94eVB1 c2hDb25zdW1lcjo6Y29ubmVjdGVkIChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqIHN1cHBsaWVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50 ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgVEFPX0VDX1Byb3h5UHVzaENv bnN1bWVyX0d1YXJkIGFjZV9tb24gKHRoaXMtPmxvY2tfLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0aGlzLT5yZWZjb3VudF8sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmV2ZW50X2NoYW5uZWxfLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKTsKICBpZiAoIWFjZV9tb24ubG9ja2Vk ICgpKQogICAgcmV0dXJuOwoKICBhY2VfbW9uLmZpbHRlci0+Y29ubmVjdGVkIChzdXBwbGllciwg X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCnZvaWQKVEFPX0VDX1Byb3h5UHVz aENvbnN1bWVyOjpyZWNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyKiBzdXBwbGll ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25t ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgVEFPX0VDX1Byb3h5UHVz aENvbnN1bWVyX0d1YXJkIGFjZV9tb24gKHRoaXMtPmxvY2tfLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5yZWZjb3VudF8sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmV2ZW50X2NoYW5uZWxfLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKTsKICBpZiAoIWFjZV9tb24ubG9j a2VkICgpKQogICAgcmV0dXJuOwoKICBhY2VfbW9uLmZpbHRlci0+cmVjb25uZWN0ZWQgKHN1cHBs aWVyLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKdm9pZApUQU9fRUNfUHJv eHlQdXNoQ29uc3VtZXI6OmRpc2Nvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyKiBz dXBwbGllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpF bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkKewogIFRBT19FQ19Q cm94eVB1c2hDb25zdW1lcl9HdWFyZCBhY2VfbW9uICh0aGlzLT5sb2NrXywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+cmVmY291bnRfLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5ldmVudF9jaGFubmVsXywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyk7CiAgaWYgKCFhY2Vf bW9uLmxvY2tlZCAoKSkKICAgIHJldHVybjsKCiAgYWNlX21vbi5maWx0ZXItPmRpc2Nvbm5lY3Rl ZCAoc3VwcGxpZXIsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgp2b2lkClRB T19FQ19Qcm94eVB1c2hDb25zdW1lcjo6Y29ubmVjdGVkIChUQU9fRUNfUHJveHlQdXNoQ29uc3Vt ZXIqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25t ZW50ICYpCnsKfQoKdm9pZApUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6OnJlY29ubmVjdGVkIChU QU9fRUNfUHJveHlQdXNoQ29uc3VtZXIqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJikKewp9Cgp2b2lkClRBT19FQ19Qcm94eVB1c2hD b25zdW1lcjo6ZGlzY29ubmVjdGVkIChUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYpCnsK fQoKdm9pZApUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6OnNodXRkb3duIChDT1JCQTo6RW52aXJv bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpCnsKICBSdGVjRXZlbnRDb21t OjpQdXNoU3VwcGxpZXJfdmFyIHN1cHBsaWVyOwoKICB7CiAgICBBQ0VfR3VhcmQ8IEFDRV9Mb2Nr ID4gYWNlX21vbiAoKnRoaXMtPmxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIGRv IHsgZG8geyB9IHdoaWxlICgmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9PSAwKTsg dGhyb3cgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElP Tl9FUlJPUiAoKTsgfSB3aGlsZSAoMCk7OwoKCiAgICAgICAgICAgICA7CgogICAgc3VwcGxpZXIg PSB0aGlzLT5zdXBwbGllcl8uX3JldG4gKCk7CiAgICB0aGlzLT5jb25uZWN0ZWRfID0gMDsKCiAg ICBpZiAodGhpcy0+ZmlsdGVyXyAhPSAwKQogICAgICB7CiAgICAgICAgdGhpcy0+ZmlsdGVyXy0+ c2h1dGRvd24gKF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwogICAgICAgICAgICAg ICAgIDsKCiAgICAgICAgdGhpcy0+Y2xlYW51cF9pICgpOwogICAgICB9CiAgfQoKICB0aGlzLT5k ZWFjdGl2YXRlIChfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKICAgICAgICAgICA7 CgogIGlmIChDT1JCQTo6aXNfbmlsIChzdXBwbGllci5pbiAoKSkpCiAgICByZXR1cm47CgogIGRv IHsgdHJ5IHsKICAgIHsKICAgICAgc3VwcGxpZXItPmRpc2Nvbm5lY3RfcHVzaF9zdXBwbGllciAo X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICA7CiAg ICB9CiAgfSBjYXRjaCAoQ09SQkE6OkV4Y2VwdGlvbiAmIGV4KSB7IGRvIHsgfSB3aGlsZSAoJmV4 ID09IDApOwogICAgewoKCiAgICB9CiAgfSB9IHdoaWxlICgwKTsKfQoKdm9pZApUQU9fRUNfUHJv eHlQdXNoQ29uc3VtZXI6OmNsZWFudXBfaSAodm9pZCkKewogIHRoaXMtPnN1cHBsaWVyXyA9CiAg ICBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXI6Ol9uaWwgKCk7CiAgdGhpcy0+Y29ubmVjdGVk XyA9IDA7CgogIGlmICh0aGlzLT5maWx0ZXJfICE9IDApCiAgICB7CiAgICAgIHRoaXMtPmZpbHRl cl8tPnVuYmluZCAodGhpcyk7CiAgICAgIHRoaXMtPmZpbHRlcl8tPl9kZWNyX3JlZmNudCAoKTsK ICAgICAgdGhpcy0+ZmlsdGVyXyA9IDA7CiAgICB9Cn0KClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 UHJveHlQdXNoQ29uc3VtZXJfcHRyClRBT19FQ19Qcm94eVB1c2hDb25zdW1lcjo6YWN0aXZhdGUg KENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkKICB0 aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbikKewogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6 UHJveHlQdXNoQ29uc3VtZXJfdmFyIHJlc3VsdDsKICBkbyB7IHRyeSB7CiAgICB7CiAgICAgIHJl c3VsdCA9CiAgICAgICAgdGhpcy0+X3RoaXMgKF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUpOwogICAgICAgICAgICAgICAgICAgOwogICAgfQogIH0gY2F0Y2ggKENPUkJBOjpFeGNlcHRp b24gJiBleCkgeyBkbyB7IH0gd2hpbGUgKCZleCA9PSAwKTsKICAgIHsKCiAgICB9CiAgfSB9IHdo aWxlICgwKTsKICByZXR1cm4gcmVzdWx0Ll9yZXRuICgpOwp9Cgp2b2lkClRBT19FQ19Qcm94eVB1 c2hDb25zdW1lcjo6ZGVhY3RpdmF0ZSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgZG8geyB0cnkgewogICAgewogICAgICBQb3J0YWJsZVNl cnZlcjo6UE9BX3ZhciBwb2EgPQogICAgICAgIHRoaXMtPl9kZWZhdWx0X1BPQSAoX0FDRV9DT1JC QV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICA7CiAgICAgIFBvcnRh YmxlU2VydmVyOjpPYmplY3RJZF92YXIgaWQgPQogICAgICAgIHBvYS0+c2VydmFudF90b19pZCAo dGhpcywgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAg ICA7CiAgICAgIHBvYS0+ZGVhY3RpdmF0ZV9vYmplY3QgKGlkLmluICgpLCBfQUNFX0NPUkJBX0Vu dmlyb25tZW50X3ZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgIDsKICAgIH0KICB9IGNhdGNo IChDT1JCQTo6RXhjZXB0aW9uICYgZXgpIHsgZG8geyB9IHdoaWxlICgmZXggPT0gMCk7CiAgICB7 CgoKCgogICAgfQogIH0gfSB3aGlsZSAoMCk7Cn0KCkNPUkJBOjpVTG9uZwpUQU9fRUNfUHJveHlQ dXNoQ29uc3VtZXI6Ol9pbmNyX3JlZmNudCAodm9pZCkKewogIEFDRV9HdWFyZDwgQUNFX0xvY2sg PiBhY2VfbW9uICgqdGhpcy0+bG9ja18pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0 dXJuIDA7OwogIHJldHVybiB0aGlzLT5yZWZjb3VudF8rKzsKfQoKQ09SQkE6OlVMb25nClRBT19F Q19Qcm94eVB1c2hDb25zdW1lcjo6X2RlY3JfcmVmY250ICh2b2lkKQp7CiAgewogICAgQUNFX0d1 YXJkPCBBQ0VfTG9jayA+IGFjZV9tb24gKCp0aGlzLT5sb2NrXyk7IGlmIChhY2VfbW9uLmxvY2tl ZCAoKSA9PSAwKSByZXR1cm4gMDs7CiAgICB0aGlzLT5yZWZjb3VudF8tLTsKICAgIGlmICh0aGlz LT5yZWZjb3VudF8gIT0gMCkKICAgICAgcmV0dXJuIHRoaXMtPnJlZmNvdW50XzsKICB9CgoKICB0 aGlzLT5ldmVudF9jaGFubmVsXy0+ZGVzdHJveV9wcm94eSAodGhpcyk7CiAgcmV0dXJuIDA7Cn0K CnZvaWQKVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyOjpjb25uZWN0X3B1c2hfc3VwcGxpZXIgKAog ICAgICBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyIHB1c2hfc3VwcGxpZXIsCiAgICAg IGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MmIHFvcywKICAgICAgQ09S QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQogICAgdGhy b3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6QWxyZWFk eUNvbm5lY3RlZCkKCnsKICB7CiAgICBBQ0VfR3VhcmQ8IEFDRV9Mb2NrID4gYWNlX21vbiAoKnRo aXMtPmxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIGRvIHsgZG8geyB9IHdoaWxl ICgmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9PSAwKTsgdGhyb3cgQ09SQkE6OklO VEVSTkFMICgpOyB9IHdoaWxlICgwKTs7CgoKCiAgICAgICAgICAgICA7CgogICAgaWYgKHRoaXMt PmlzX2Nvbm5lY3RlZF9pICgpKQogICAgICB7CiAgICAgICAgaWYgKHRoaXMtPmV2ZW50X2NoYW5u ZWxfLT5zdXBwbGllcl9yZWNvbm5lY3QgKCkgPT0gMCkKICAgICAgICAgIGRvIHsgZG8geyB9IHdo aWxlICgmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9PSAwKTsgdGhyb3cgUnRlY0V2 ZW50Q2hhbm5lbEFkbWluOjpBbHJlYWR5Q29ubmVjdGVkICgpOyB9IHdoaWxlICgwKTsKCgoKICAg ICAgICB0aGlzLT5jbGVhbnVwX2kgKCk7CgoKCiAgICAgICAgVEFPX0VDX1VubG9jayByZXZlcnNl X2xvY2sgKCp0aGlzLT5sb2NrXyk7CgogICAgICAgIHsKICAgICAgICAgIEFDRV9HdWFyZDwgVEFP X0VDX1VubG9jayA+IGFjZV9tb24gKHJldmVyc2VfbG9jayk7IGlmIChhY2VfbW9uLmxvY2tlZCAo KSA9PSAwKSBkbyB7IGRvIHsgfSB3aGlsZSAoJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi bGUgPT0gMCk7IHRocm93IENPUkJBOjpJTlRFUk5BTCAoKTsgfSB3aGlsZSAoMCk7OwoKCgogICAg ICAgICAgICAgICAgICAgOwoKICAgICAgICAgIHRoaXMtPmV2ZW50X2NoYW5uZWxfLT5yZWNvbm5l Y3RlZCAodGhpcywgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CiAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgfQoKCgoKICAgICAgICBpZiAodGhpcy0+aXNfY29ubmVjdGVkX2kg KCkpCiAgICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICB0aGlzLT5zdXBwbGllcl8gPQogICAg ICBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXI6Ol9kdXBsaWNhdGUgKHB1c2hfc3VwcGxpZXIp OwogICAgdGhpcy0+Y29ubmVjdGVkXyA9IDE7CiAgICB0aGlzLT5xb3NfID0gcW9zOwoKCgoKCiAg ICB0aGlzLT5maWx0ZXJfID0KICAgICAgdGhpcy0+ZXZlbnRfY2hhbm5lbF8tPnN1cHBsaWVyX2Zp bHRlcl9idWlsZGVyICgpLT5jcmVhdGUgKHRoaXMtPnFvc18pOwogICAgdGhpcy0+ZmlsdGVyXy0+ YmluZCAodGhpcyk7CiAgfQoKCiAgdGhpcy0+ZXZlbnRfY2hhbm5lbF8tPmNvbm5lY3RlZCAodGhp cywgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCnZvaWQKVEFPX0VDX1Byb3h5 UHVzaENvbnN1bWVyOjpwdXNoIChjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudFNldCYgZXZlbnQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNl cHRpb24pCnsKICBUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXJfR3VhcmQgYWNlX21vbiAodGhpcy0+ bG9ja18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnJl ZmNvdW50XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+ ZXZlbnRfY2hhbm5lbF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXMpOwogIGlmICghYWNlX21vbi5sb2NrZWQgKCkpCiAgICByZXR1cm47CgoKCiAgYWNlX21v bi5maWx0ZXItPnB1c2ggKGV2ZW50LCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsK ICAgICAgICAgICA7Cn0KCnZvaWQKVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyOjpkaXNjb25uZWN0 X3B1c2hfY29uc3VtZXIgKAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52 aXJvbm1lbnRfdmFyaWFibGUpCiAgICB0aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbikKewog IFJ0ZWNFdmVudENvbW06OlB1c2hTdXBwbGllcl92YXIgc3VwcGxpZXI7CiAgaW50IGNvbm5lY3Rl ZCA9IDA7CgogIHsKICAgIEFDRV9HdWFyZDwgQUNFX0xvY2sgPiBhY2VfbW9uICgqdGhpcy0+bG9j a18pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgZG8geyBkbyB7IH0gd2hpbGUgKCZfQUNF X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID09IDApOyB0aHJvdyBDT1JCQTo6SU5URVJOQUwg KCk7IH0gd2hpbGUgKDApOzsKCgoKICAgICAgICAgICAgIDsKCiAgICBjb25uZWN0ZWQgPSB0aGlz LT5pc19jb25uZWN0ZWRfaSAoKTsKICAgIHN1cHBsaWVyID0gdGhpcy0+c3VwcGxpZXJfLl9yZXRu ICgpOwogICAgdGhpcy0+Y29ubmVjdGVkXyA9IDA7CgogICAgaWYgKGNvbm5lY3RlZCkKICAgICAg dGhpcy0+Y2xlYW51cF9pICgpOwogIH0KCgogIHRoaXMtPmV2ZW50X2NoYW5uZWxfLT5kaXNjb25u ZWN0ZWQgKHRoaXMsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwogICAgICAgICAg IDsKCiAgaWYgKENPUkJBOjppc19uaWwgKHN1cHBsaWVyLmluICgpKSkKICAgIHsKICAgICAgcmV0 dXJuOwogICAgfQoKICBpZiAodGhpcy0+ZXZlbnRfY2hhbm5lbF8tPmRpc2Nvbm5lY3RfY2FsbGJh Y2tzICgpKQogICAgewogICAgICBkbyB7IHRyeSB7CiAgICAgICAgewogICAgICAgICAgc3VwcGxp ZXItPmRpc2Nvbm5lY3RfcHVzaF9zdXBwbGllciAoX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAo Q09SQkE6OkV4Y2VwdGlvbiAmIGV4KSB7IGRvIHsgfSB3aGlsZSAoJmV4ID09IDApOwogICAgICAg IHsKCgogICAgICAgIH0KICAgICAgfSB9IHdoaWxlICgwKTsKICAgIH0KfQoKUG9ydGFibGVTZXJ2 ZXI6OlBPQV9wdHIKVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyOjpfZGVmYXVsdF9QT0EgKENPUkJB OjpFbnZpcm9ubWVudCYpCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0 ZSAodGhpcy0+ZGVmYXVsdF9QT0FfLmluICgpKTsKfQoKdm9pZApUQU9fRUNfUHJveHlQdXNoQ29u c3VtZXI6Ol9hZGRfcmVmIChDT1JCQTo6RW52aXJvbm1lbnQgJikKewogIHRoaXMtPl9pbmNyX3Jl ZmNudCAoKTsKfQoKdm9pZApUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6Ol9yZW1vdmVfcmVmIChD T1JCQTo6RW52aXJvbm1lbnQgJikKewogIHRoaXMtPl9kZWNyX3JlZmNudCAoKTsKfQoKCgpUQU9f RUNfUHJveHlQdXNoQ29uc3VtZXJfR3VhcmQ6OgogICAgVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVy X0d1YXJkIChBQ0VfTG9jayAqbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQ09SQkE6OlVMb25nICZyZWZjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVEFPX0VDX0V2ZW50X0NoYW5uZWwgKmVjLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIgKnByb3h5KQogOiBsb2NrXyAobG9j ayksCiAgICAgcmVmY291bnRfIChyZWZjb3VudCksCiAgICAgZXZlbnRfY2hhbm5lbF8gKGVjKSwK ICAgICBwcm94eV8gKHByb3h5KSwKICAgICBsb2NrZWRfICgwKQp7CiAgQUNFX0d1YXJkPEFDRV9M b2NrPiBhY2VfbW9uICgqdGhpcy0+bG9ja18pOwoKCgoKCgoKICBpZiAocHJveHktPmlzX2Nvbm5l Y3RlZF9pICgpID09IDApCiAgICByZXR1cm47CgogIHRoaXMtPmZpbHRlciA9IHRoaXMtPnByb3h5 Xy0+ZmlsdGVyX2kgKCk7CiAgdGhpcy0+ZmlsdGVyLT5faW5jcl9yZWZjbnQgKCk7CgogIHRoaXMt PmxvY2tlZF8gPSAxOwogIHRoaXMtPnJlZmNvdW50XysrOwp9CgpUQU9fRUNfUHJveHlQdXNoQ29u c3VtZXJfR3VhcmQ6OgogICAgflRBT19FQ19Qcm94eVB1c2hDb25zdW1lcl9HdWFyZCAodm9pZCkK ewoKCiAgaWYgKCF0aGlzLT5sb2NrZWRfKQogICAgcmV0dXJuOwoKICB7CiAgICBBQ0VfR3VhcmQ8 QUNFX0xvY2s+IGFjZV9tb24gKCp0aGlzLT5sb2NrXyk7CgoKCgoKCgogICAgdGhpcy0+ZmlsdGVy LT5fZGVjcl9yZWZjbnQgKCk7CgogICAgdGhpcy0+cmVmY291bnRfLS07CiAgICBpZiAodGhpcy0+ cmVmY291bnRfICE9IDApCiAgICAgIHJldHVybjsKICB9CiAgdGhpcy0+ZXZlbnRfY2hhbm5lbF8t PmRlc3Ryb3lfcHJveHkgKHRoaXMtPnByb3h5Xyk7Cn0K