From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752082AbcGFFIq (ORCPT ); Wed, 6 Jul 2016 01:08:46 -0400 Received: from mail-pf0-f173.google.com ([209.85.192.173]:33772 "EHLO mail-pf0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750752AbcGFFId (ORCPT ); Wed, 6 Jul 2016 01:08:33 -0400 Subject: Re: porting kcov to android To: Kuthonuzo Luruo References: Cc: syzkaller , Dmitry Vyukov , aryabinin@virtuozzo.com, linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org From: Baozeng Ding Message-ID: <7156fdff-2ad9-b1f9-ff13-eb51e22e9261@gmail.com> Date: Wed, 6 Jul 2016 13:08:17 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------D749C89E1B1801D4F95CE083" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --------------D749C89E1B1801D4F95CE083 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit + attachment for the patch. On 2016/7/6 12:57, Baozeng wrote: > Hello all, > I backported KASAN to 3.10.102 stable kerenl (ca1199fccf14540e86f6da955333e31d6fec5f3e), based on Andrey Ryabinin's work (backport KASAN to RHEL7-based (3.10 based) OpenVZ kernel). I met the following kernel panic when starting the kernel using the following command: > > qemu-system-x86_64 -hda ./wheezy.img -snapshot -m 2048 -net nic -net user,host=10.0.2.10,hostfwd=tcp::51727-:22 -nographic -enable-kvm -numa node,nodeid=0,cpus=0-1 -numa node,nodeid=1,cpus=2-3 -smp sockets=2,cores=2,threads=1 -usb -usbdevice mouse -usbdevice tablet -soundhw all -kernel ./bzImage -append console=ttyS0 root=/dev/sda debug earlyprintk=serial slub_debug=UZ > > any suggestions? > > ================================================================== > BUG: KASan: out of bounds access in usage_match+0x63/0x70 at addr ffff88002c81ff40 > Read of size 8 by task khubd/923 > ============================================================================= > BUG kmalloc-4096 (Not tainted): kasan: bad access detected > ----------------------------------------------------------------------------- > > Disabling lock debugging due to kernel taint > INFO: Allocated in input_dev_pm_ops+0x520/0x5e0 age=131944943344261 cpu=0 pid=-536871936 > 0x41b58ab3 > [< none >] vsock_dgram_ops+0x337bd3/0x3a5a50 ??:? > [< none >] sysfs_new_dirent+0x0/0x410 /linux-stable/fs/sysfs/dir.c:1027 > 0xffff88002c8209d8 > 0xffffed000590413c > 0xdffffc0000000000 > 0xffff88002c8209e0 > 0xffff88002c820920 > [< none >] mutex_unlock+0x15/0x20 /linux-stable/kernel/mutex.c:252 > 0x1ffff1000590412f > 0xffff88002c820958 > [< none >] sysfs_attr_ns+0x162/0x260 /linux-stable/fs/sysfs/file.c:522 > 0x1ffff1000590412f > 0xffff88002c820a18 > [< none >] dev_attr_uniq+0x0/0x60 arch/x86/crypto/sha512-avx2-asm.o:? > 0xffff8800280feae0 > INFO: Freed in sysfs_add_file_mode+0x141/0x2d0 age=6421765850 cpu=746719736 pid=-30720 > 0x1242cf991f0 > 0xffffffff00000002 > 0x41b58ab3 > [< none >] vsock_dgram_ops+0x337b87/0x3a5a50 ??:? > [< none >] sysfs_add_file_mode+0x0/0x2d0 /linux-stable/fs/sysfs/file.c:693 > 0xffff88002cf998c8 > INFO: Slab 0xffffea0000b20600 objects=7 used=0 fp=0xffff88002c818000 flags=0x1fc000000004080 > INFO: Object 0xffff88002c81f8c0 @offset=30912 fp=0x0000000000000002 > > > Redzone ffff88002c8208c0: 1a 41 90 05 00 f1 ff 1f .A...... > Padding ffff88002c8209f8: 40 0a 82 2c 00 88 ff ff @..,.... > CPU: 0 PID: 923 Comm: khubd Tainted: G B 3.10.102+ #2 > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.8.2-0-g33fbe13 by qemu-project.org 04/01/2014 > ffff88002c818000 ffff88002c81fc60 ffffffff850cbe98 ffff88002c81fc90 > ffffffff81584f48 ffff88002d806f40 ffffea0000b20600 ffff88002c81f8c0 > 0000000000000000 ffff88002c81fcb8 ffffffff8158b731 ffffed0005903fe8 > Call Trace: > Memory state around the buggy address: > ffff88002c81fe00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc > ffff88002c81fe80: fc fc f1 f1 f1 f1 00 f4 f4 f4 f2 f2 f2 f2 00 f4 >>ffff88002c81ff00: f4 f4 f2 f2 f2 f2 fc fc fc fc fc fc fc fc f2 f2 > ^ > ffff88002c81ff80: f2 f2 fc fc fc fc fc fc fc fc f3 f3 f3 f3 fc fc > ffff88002c820000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > ================================================================== > kasan: CONFIG_KASAN_INLINE enabled > kasan: GPF could be caused by NULL-ptr deref or user memory accessgeneral protection fault: 0000 [#1] SMP KASAN > Modules linked in: > CPU: 0 PID: 923 Comm: khubd Tainted: G B 3.10.102+ #2 > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.8.2-0-g33fbe13 by qemu-project.org 04/01/2014 > task: ffff88002cf991f0 ti: ffff88002c820000 task.ti: ffff88002c820000 > RIP: 0010:[] [] cpuacct_charge+0x1ab/0x490 > RSP: 0000:ffff88002de03be0 EFLAGS: 00010046 > RAX: dffffc001d5585dc RBX: 000000000000c5a0 RCX: 00000000eaac2ee0 > RDX: ffffffff869c2c60 RSI: 1ffffffff0c1a6c0 RDI: ffffffff860d3600 > RBP: ffff88002de03c28 R08: 0000000000000001 R09: 0000000000000001 > R10: 0000000000000020 R11: ffffed000fffb001 R12: ffffffff860d35a0 > R13: dffffc0000000000 R14: 00000000134c2dae R15: 000000002c820050 > FS: 0000000000000000(0000) GS:ffff88002de00000(0000) knlGS:0000000000000000 > CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b > CR2: 00000000ffffffff CR3: 000000000600d000 CR4: 00000000000006f0 > DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 > Stack: > ffffffff81343182 00000000146efbea ffff88007ffd8008 ffff88007ffd801c > ffff88002cf99238 ffff88002de124a8 0000000ee4d60d04 00000000134c2dae > ffff88002cf99278 ffff88002de03c78 ffffffff81317811 ffffffff8119be42 > Call Trace: > > [< inline >] ? __rcu_read_lock /linux-stable/include/linux/rcupdate.h:198 > [< inline >] ? rcu_read_lock /linux-stable/include/linux/rcupdate.h:776 > [] ? cpuacct_charge+0xa2/0x490 /linux-stable/kernel/sched/cpuacct.c:253 > [] update_curr+0x291/0x610 /linux-stable/kernel/sched/fair.c:711 > [] ? kvm_clock_read+0x62/0xc0 /linux-stable/arch/x86/kernel/kvmclock.c:88 > [< inline >] entity_tick /linux-stable/kernel/sched/fair.c:1987 > [] task_tick_fair+0x60/0x1430 /linux-stable/kernel/sched/fair.c:5778 > [] ? sched_clock_cpu+0x108/0x1b0 /linux-stable/kernel/sched/clock.c:258 > [] scheduler_tick+0x29a/0x510 /linux-stable/kernel/sched/core.c:2748 > [] update_process_times+0xa1/0xc0 /linux-stable/kernel/timer.c:1362 > [] tick_sched_handle.isra.14+0xb8/0xf0 /linux-stable/kernel/time/tick-sched.c:146 > [] tick_sched_timer+0x70/0xa0 /linux-stable/kernel/time/tick-sched.c:1100 > [] __run_hrtimer+0x127/0xd90 /linux-stable/kernel/hrtimer.c:1276 > [] ? tick_sched_handle.isra.14+0xf0/0xf0 /linux-stable/kernel/time/tick-sched.c:143 > [] hrtimer_interrupt+0x32d/0x780 /linux-stable/kernel/hrtimer.c:1365 > [] ? hrtimer_get_next_event+0x150/0x150 /linux-stable/kernel/hrtimer.c:1183 > [] ? trace_hardirqs_off+0x12/0x20 /linux-stable/kernel/lockdep.c:2642 > [] ? rcu_irq_enter+0xb9/0x120 /linux-stable/kernel/rcutree.c:627 > [< inline >] local_apic_timer_interrupt /linux-stable/arch/x86/kernel/apic/apic.c:911 > [] smp_apic_timer_interrupt+0xe7/0x180 /linux-stable/arch/x86/kernel/apic/apic.c:938 > [] apic_timer_interrupt+0x72/0x80 /linux-stable/arch/x86/kernel/entry_64.S:1188 > > [< inline >] ? arch_local_irq_restore /linux-stable/arch/x86/include/asm/paravirt.h:829 > [< inline >] ? buffered_rmqueue /linux-stable/mm/page_alloc.c:1536 > [] ? get_page_from_freelist+0x91e/0x19b0 /linux-stable/mm/page_alloc.c:1974 > [] ? check_chain_key+0x2b9/0x4d0 /linux-stable/kernel/lockdep.c:2177 > [] ? check_chain_key+0x2b9/0x4d0 /linux-stable/kernel/lockdep.c:2177 > [] ? free_reserved_area+0x1a0/0x1a0 /linux-stable/arch/x86/include/asm/page_64.h:17 > [< inline >] ? arch_local_irq_restore /linux-stable/arch/x86/include/asm/paravirt.h:829 > [] ? lock_is_held+0x153/0x1c0 /linux-stable/kernel/lockdep.c:3640 > [] __alloc_pages_nodemask+0x28e/0x14e0 /linux-stable/mm/page_alloc.c:2663 > [] ? debug_show_all_locks+0x480/0x480 /linux-stable/kernel/lockdep.c:4162 > [] ? check_chain_key+0x2b9/0x4d0 /linux-stable/kernel/lockdep.c:2177 > [] ? __module_text_address+0x13/0x150 /linux-stable/kernel/module.c:3845 > [] ? __asan_report_store8_noabort+0x17/0x20 /linux-stable/mm/kasan/report.c:272 > [] ? __alloc_pages_direct_compact+0x590/0x590 /linux-stable/include/linux/compaction.h:59 > [] ? __lock_acquire+0xac8/0x49c0 /linux-stable/kernel/lockdep.c:3081 > [< inline >] ? debug_spin_unlock /linux-stable/lib/spinlock_debug.c:102 > [] ? do_raw_spin_unlock+0x100/0x260 /linux-stable/lib/spinlock_debug.c:158 > [] ? debug_show_all_locks+0x480/0x480 /linux-stable/kernel/lockdep.c:4162 > [] ? check_chain_key+0x2b9/0x4d0 /linux-stable/kernel/lockdep.c:2177 > [] ? __lock_acquire+0xac8/0x49c0 /linux-stable/kernel/lockdep.c:3081 > [] alloc_pages_current+0x181/0x390 /linux-stable/mm/mempolicy.c:2051 > [< inline >] ? allocate_slab /linux-stable/mm/slub.c:1312 > [] ? new_slab+0x2e5/0x370 /linux-stable/mm/slub.c:1386 > [< inline >] alloc_pages /linux-stable/include/linux/gfp.h:334 > [< inline >] alloc_slab_page /linux-stable/mm/slub.c:1298 > [< inline >] allocate_slab /linux-stable/mm/slub.c:1322 > [] new_slab+0x30c/0x370 /linux-stable/mm/slub.c:1386 > [< inline >] new_slab_objects /linux-stable/mm/slub.c:2162 > [] __slab_alloc+0x4b4/0x5d0 /linux-stable/mm/slub.c:2323 > [< inline >] ? kmem_cache_zalloc /linux-stable/include/linux/slab.h:509 > [] ? sysfs_new_dirent+0xf8/0x410 /linux-stable/fs/sysfs/dir.c:381 > [< inline >] ? kmem_cache_zalloc /linux-stable/include/linux/slab.h:509 > [] ? sysfs_new_dirent+0xf8/0x410 /linux-stable/fs/sysfs/dir.c:381 > [< inline >] ? arch_local_irq_restore /linux-stable/arch/x86/include/asm/paravirt.h:829 > [] ? lock_is_held+0x153/0x1c0 /linux-stable/kernel/lockdep.c:3640 > [< inline >] ? kmem_cache_zalloc /linux-stable/include/linux/slab.h:509 > [] ? sysfs_new_dirent+0xf8/0x410 /linux-stable/fs/sysfs/dir.c:381 > [< inline >] slab_alloc_node /linux-stable/mm/slub.c:2397 > [< inline >] slab_alloc /linux-stable/mm/slub.c:2437 > [] kmem_cache_alloc+0x1e3/0x220 /linux-stable/mm/slub.c:2442 > [< inline >] ? __mutex_unlock_common_slowpath /linux-stable/kernel/mutex.c:479 > [] ? __mutex_unlock_slowpath+0x257/0x410 /linux-stable/kernel/mutex.c:488 > [< inline >] kmem_cache_zalloc /linux-stable/include/linux/slab.h:509 > [] sysfs_new_dirent+0xf8/0x410 /linux-stable/fs/sysfs/dir.c:381 > [] ? sysfs_readdir+0x7d0/0x7d0 /linux-stable/fs/sysfs/dir.c:1027 > [] ? mutex_unlock+0x15/0x20 /linux-stable/kernel/mutex.c:252 > [] ? sysfs_attr_ns+0x162/0x260 /linux-stable/fs/sysfs/file.c:522 > [] sysfs_add_file_mode+0x141/0x2d0 /linux-stable/fs/sysfs/file.c:539 > [] ? sysfs_remove_file_from_group+0x170/0x170 /linux-stable/fs/sysfs/file.c:693 > [< inline >] ? __mutex_unlock_common_slowpath /linux-stable/kernel/mutex.c:479 > [] ? __mutex_unlock_slowpath+0x257/0x410 /linux-stable/kernel/mutex.c:488 > [] ? trace_hardirqs_on_caller+0x30a/0x690 /linux-stable/kernel/lockdep.c:2598 > [] ? trace_hardirqs_on+0x12/0x20 /linux-stable/kernel/lockdep.c:2604 > [] ? __mutex_unlock_slowpath+0x267/0x410 /linux-stable/kernel/mutex.c:489 > [< inline >] create_files /linux-stable/fs/sysfs/group.c:48 > [] internal_create_group+0x31f/0x7b0 /linux-stable/fs/sysfs/group.c:82 > [] ? unmap_bin_file+0x1b0/0x1b0 ??:? > [] ? sysfs_rename_link+0x2d0/0x2d0 /linux-stable/fs/sysfs/symlink.c:214 > [] sysfs_create_group+0x1f/0x30 /linux-stable/fs/sysfs/group.c:104 > [] device_add_groups+0xab/0x150 /linux-stable/drivers/base/core.c:472 > [< inline >] device_add_attrs /linux-stable/drivers/base/core.c:510 > [] device_add+0xd1b/0x1710 /linux-stable/drivers/base/core.c:1080 > [] ? device_private_init+0x190/0x190 /linux-stable/drivers/base/core.c:975 > [< inline >] ? do_init_timer /linux-stable/kernel/timer.c:634 > [] ? init_timer_key+0x157/0x4b0 /linux-stable/kernel/timer.c:652 > [] input_register_device+0x503/0xc90 /linux-stable/drivers/input/input.c:2085 > [] hidinput_connect+0xe4a/0xb550 /linux-stable/drivers/hid/hid-input.c:1385 > [] ? hid_map_usage_clear.constprop.5+0x160/0x160 /linux-stable/include/linux/hid.h:817 > [] ? hid_irq_out+0x2e0/0x2e0 /linux-stable/drivers/hid/usbhid/hid-core.c:458 > [] ? wake_up_bit+0xf0/0xf0 /linux-stable/include/linux/list.h:188 > [] ? trace_hardirqs_on+0x12/0x20 /linux-stable/kernel/lockdep.c:2604 > [< inline >] ? __raw_spin_unlock_irqrestore /linux-stable/include/linux/spinlock_api_smp.h:162 > [] ? _raw_spin_unlock_irqrestore+0x4b/0xb0 /linux-stable/kernel/spinlock.c:177 > [< inline >] ? spin_unlock_irqrestore /linux-stable/include/linux/spinlock.h:348 > [] ? usbhid_submit_report+0x6e/0x80 /linux-stable/drivers/hid/usbhid/hid-core.c:648 > [] hid_connect+0x923/0xc70 /linux-stable/drivers/hid/hid-core.c:1479 > [] ? memset+0x31/0x40 /linux-stable/mm/kasan/kasan.c:278 > [] ? extract+0xc0/0xc0 /linux-stable/drivers/hid/hid-core.c:998 > [< inline >] hid_hw_start /linux-stable/include/linux/hid.h:886 > [] hid_device_probe+0x301/0x500 /linux-stable/drivers/hid/hid-core.c:1955 > [] ? hid_add_device+0x9e0/0x9e0 /linux-stable/drivers/hid/hid-core.c:685 > [< inline >] really_probe /linux-stable/drivers/base/dd.c:302 > [] driver_probe_device+0x15a/0xad0 /linux-stable/drivers/base/dd.c:399 > [] ? driver_probe_device+0xad0/0xad0 /linux-stable/drivers/base/dd.c:313 > [] __device_attach+0x90/0xc0 /linux-stable/drivers/base/dd.c:412 > [] bus_for_each_drv+0x13a/0x1d0 /linux-stable/drivers/base/bus.c:451 > [] ? bus_rescan_devices+0x30/0x30 /linux-stable/drivers/base/bus.c:797 > [] device_attach+0x12b/0x180 /linux-stable/drivers/base/dd.c:447 > [] bus_probe_device+0x1e6/0x2d0 /linux-stable/drivers/base/bus.c:541 > [] device_add+0xf3a/0x1710 /linux-stable/drivers/base/core.c:1099 > [] ? mutex_unlock+0x15/0x20 /linux-stable/kernel/mutex.c:252 > [] ? device_private_init+0x190/0x190 /linux-stable/drivers/base/core.c:975 > [] ? debugfs_create_file+0x51/0x70 /linux-stable/fs/debugfs/inode.c:403 > [] hid_add_device+0x2eb/0x9e0 /linux-stable/drivers/hid/hid-core.c:2406 > [] ? hid_ignore+0x80/0x80 /linux-stable/drivers/hid/hid-core.c:2295 > [] usbhid_probe+0xb1a/0x1100 /linux-stable/drivers/hid/usbhid/hid-core.c:1364 > [] usb_probe_interface+0x319/0x6e0 /linux-stable/drivers/usb/core/driver.c:335 > [] ? usb_match_dynamic_id+0x100/0x100 /linux-stable/drivers/usb/core/driver.c:202 > [< inline >] really_probe /linux-stable/drivers/base/dd.c:302 > [] driver_probe_device+0x15a/0xad0 /linux-stable/drivers/base/dd.c:399 > [] ? driver_probe_device+0xad0/0xad0 /linux-stable/drivers/base/dd.c:313 > [] __device_attach+0x90/0xc0 /linux-stable/drivers/base/dd.c:412 > [] bus_for_each_drv+0x13a/0x1d0 /linux-stable/drivers/base/bus.c:451 > [] ? bus_rescan_devices+0x30/0x30 /linux-stable/drivers/base/bus.c:797 > [] device_attach+0x12b/0x180 /linux-stable/drivers/base/dd.c:447 > [] bus_probe_device+0x1e6/0x2d0 /linux-stable/drivers/base/bus.c:541 > [] device_add+0xf3a/0x1710 /linux-stable/drivers/base/core.c:1099 > [< inline >] ? __mutex_unlock_common_slowpath /linux-stable/kernel/mutex.c:479 > [] ? __mutex_unlock_slowpath+0x257/0x410 /linux-stable/kernel/mutex.c:488 > [] ? device_private_init+0x190/0x190 /linux-stable/drivers/base/core.c:975 > [] ? mutex_unlock+0x15/0x20 /linux-stable/kernel/mutex.c:252 > [< inline >] ? usb_device_supports_ltm /linux-stable/include/linux/usb.h:699 > [] ? usb_enable_ltm+0x97/0x350 /linux-stable/drivers/usb/core/hub.c:2855 > [] usb_set_configuration+0xce9/0x17c0 /linux-stable/drivers/usb/core/message.c:1898 > [] generic_probe+0x6c/0xe0 /linux-stable/drivers/usb/core/generic.c:171 > [] usb_probe_device+0x6f/0xc0 /linux-stable/drivers/usb/core/driver.c:231 > [] ? usb_register_device_driver+0x2a0/0x2a0 /linux-stable/drivers/usb/core/driver.c:841 > [< inline >] really_probe /linux-stable/drivers/base/dd.c:302 > [] driver_probe_device+0x15a/0xad0 /linux-stable/drivers/base/dd.c:399 > [] ? driver_probe_device+0xad0/0xad0 /linux-stable/drivers/base/dd.c:313 > [] __device_attach+0x90/0xc0 /linux-stable/drivers/base/dd.c:412 > [] bus_for_each_drv+0x13a/0x1d0 /linux-stable/drivers/base/bus.c:451 > [] ? bus_rescan_devices+0x30/0x30 /linux-stable/drivers/base/bus.c:797 > [] device_attach+0x12b/0x180 /linux-stable/drivers/base/dd.c:447 > [] bus_probe_device+0x1e6/0x2d0 /linux-stable/drivers/base/bus.c:541 > [] device_add+0xf3a/0x1710 /linux-stable/drivers/base/core.c:1099 > [] ? dev_notice+0xf0/0xf0 /linux-stable/drivers/base/core.c:2039 > [] ? add_device_randomness+0xe5/0x130 /linux-stable/drivers/char/random.c:651 > [] ? device_private_init+0x190/0x190 /linux-stable/drivers/base/core.c:975 > [< inline >] ? slab_free /linux-stable/mm/slub.c:2661 > [] ? kfree+0x271/0x290 /linux-stable/mm/slub.c:3411 > [] ? dev_get_drvdata+0x6a/0x90 /linux-stable/drivers/base/dd.c:598 > [] usb_new_device+0x76d/0xd20 /linux-stable/drivers/usb/core/hub.c:2399 > [< inline >] hub_port_connect_change /linux-stable/drivers/usb/core/hub.c:4604 > [< inline >] hub_events /linux-stable/drivers/usb/core/hub.c:4893 > [] hub_thread+0x138b/0x3ea0 /linux-stable/drivers/usb/core/hub.c:4953 > [] ? hub_port_debounce+0x310/0x310 /linux-stable/drivers/usb/core/hub.c:3965 > [< inline >] ? arch_local_irq_restore /linux-stable/arch/x86/include/asm/paravirt.h:829 > [] ? lock_acquire+0x1b0/0x520 /linux-stable/kernel/lockdep.c:3604 > [] ? idle_balance+0x45b/0x6e0 /linux-stable/kernel/sched/fair.c:5306 > [< inline >] ? debug_spin_lock_after /linux-stable/lib/spinlock_debug.c:91 > [] ? do_raw_spin_lock+0x20b/0x400 /linux-stable/lib/spinlock_debug.c:138 > [] ? perf_trace_sched_process_exec+0x460/0x460 /linux-stable/arch/x86/include/asm/stacktrace.h:112 > [] ? check_chain_key+0x2b9/0x4d0 /linux-stable/kernel/lockdep.c:2177 > [] ? mark_held_locks+0x2ad/0x330 /linux-stable/kernel/lockdep.c:2525 > [< inline >] ? __raw_spin_unlock_irq /linux-stable/include/linux/spinlock_api_smp.h:169 > [] ? _raw_spin_unlock_irq+0x2c/0x80 /linux-stable/kernel/spinlock.c:185 > [] ? trace_hardirqs_on_caller+0x30a/0x690 /linux-stable/kernel/lockdep.c:2598 > [] ? trace_hardirqs_on+0x12/0x20 /linux-stable/kernel/lockdep.c:2604 > [< inline >] ? __raw_spin_unlock_irq /linux-stable/include/linux/spinlock_api_smp.h:169 > [] ? _raw_spin_unlock_irq+0x2c/0x80 /linux-stable/kernel/spinlock.c:185 > [< inline >] ? finish_lock_switch /linux-stable/kernel/sched/sched.h:848 > [] ? finish_task_switch+0xf9/0x260 /linux-stable/kernel/sched/core.c:1900 > [< inline >] ? finish_lock_switch /linux-stable/kernel/sched/sched.h:839 > [] ? finish_task_switch+0xcd/0x260 /linux-stable/kernel/sched/core.c:1900 > [] ? wake_up_bit+0xf0/0xf0 /linux-stable/include/linux/list.h:188 > [] ? __kthread_parkme+0xed/0x170 /linux-stable/kernel/kthread.c:162 > [] ? hub_port_debounce+0x310/0x310 /linux-stable/drivers/usb/core/hub.c:3965 > [] kthread+0x1d3/0x240 /linux-stable/drivers/block/aoe/aoecmd.c:1303 > [] ? kthread_worker_fn+0x530/0x530 /linux-stable/include/linux/list.h:27 > [] ? schedule_tail+0x31/0x210 /linux-stable/kernel/sched/core.c:1963 > [] ? kthread_worker_fn+0x530/0x530 /linux-stable/include/linux/list.h:27 > [] ret_from_fork+0x58/0x90 /linux-stable/arch/x86/kernel/entry_64.S:573 > [] ? kthread_worker_fn+0x530/0x530 /linux-stable/include/linux/list.h:27 > Code: 0f 85 17 02 00 00 4c 8b 63 68 4d 85 e4 74 77 49 8d 7c 24 60 48 89 fe 48 c1 ee 03 42 80 3c 2e 00 0f 85 2d 02 00 00 49 8b 5c 24 60 <80> 38 00 0f 85 b7 02 00 00 4a 03 1c fa 48 89 de 48 c1 ee 03 42 > RIP [] cpuacct_charge+0x1ab/0x490 /linux-stable/kernel/sched/cpuacct.c:258 > RSP > ---[ end trace 4d690b5b318b4d40 ]--- > Kernel panic - not syncing: Fatal exception in interrupt > > > > 2016-06-20 22:06 GMT+08:00 Kuthonuzo Luruo >: > > Heh, I backported KASAN to 2.6.32 kernel. Biggest difficulty was shadow memory inititialization due to differences in early boot code with 4.x kernel. > > Kuthonuzo > > > On Mon, Jun 20, 2016 at 7:10 PM, 'Alexander Potapenko' via syzkaller > wrote: > > Hi, > > On Mon, Jun 20, 2016 at 3:36 PM, Baozeng > wrote: > > Hello all, > > As we know syzkaller could use KASAN to find more memory bugs. Has > > anyone ported KASAN to older version of kernel, for instance 3.10 ? (Most > > of current android's kernel version is 3.10 or evern older). Thanks. > > I've ported KASAN to 3.14 and 3.18, but I wouldn't call that a > pleasant experience. Feel free to ask your questions though. > > Best Regards, > > Baozeng > > > > 2016-06-15 17:02 GMT+08:00 Alexander Potapenko >: > >> > >> Baozeng, > >> > >> In order to use ConsoleDev you'll need a serial port support in the > >> kernel, and an external serial port attached to the Android device. > >> If you don't have a serial port, you'll probably need to change adb.go > >> to read the dmesg output from adb shell. > >> > >> HTH, > >> Alex > >> > >> On Wed, Jun 15, 2016 at 2:46 AM, Baozeng > wrote: > >> > Thank you Alexander. We will have a try. > >> > Dmitry, I have another stupid question. I took a look at the adb.go, and > >> > find a ConsoleDev config. Could you give me an example how to use it? > >> > how > >> > to use a "cat " command to get the log from the console device. Does it > >> > need > >> > to install any other tool to debug the android device, like this > >> > https://developer.chrome.com/devtools/docs/remote-debugging? Thank you > >> > in > >> > advance. > >> > > >> > 2016-06-14 21:32 GMT+08:00 Alexander Potapenko >: > >> >> > >> >> Hi Baozeng, > >> >> > >> >> You may want to take a look at the discussion at > >> >> > >> >> > >> >> http://lists.infradead.org/pipermail/linux-arm-kernel/2016-March/419034.html, > >> >> namely at the list of files for which kcov instrumentation should be > >> >> disabled. > >> >> If your kernel doesn't boot, try carpet-disabling arch/arm64/boot/* > >> >> and arch/arm64/kernel/*, and then you can bisect further. > >> >> > >> >> Alex > >> >> > >> >> On Tue, Jun 14, 2016 at 11:31 AM, Dmitry Vyukov > > >> >> wrote: > >> >> > On Tue, Jun 14, 2016 at 11:21 AM, Baozeng > > >> >> > wrote: > >> >> >> Hi Dmitry, > >> >> >> We've ported kcov to arm64 android kernel (nexus 6P device). > >> >> >> But > >> >> >> it > >> >> >> cannot boot. The size of the kernel is 1.3 M larger than the origin > >> >> >> one > >> >> >> without kcov. Does this affect the booting of the android device? > >> >> > > >> >> > +syzkaller mailing list > >> >> > > >> >> > Hi Baozeng, > >> >> > > >> >> > We've ported kcov to arm64 and use it with some Android devices. > >> >> > +Alexander knows more. Did we mail the patches upstream? > >> >> > > >> >> > The boot issue is most likely to bad interaction of kcov > >> >> > instrumentation with some early bootstrap files. Most likely you need > >> >> > to disable instrumentation of some boot files. > >> >> > > >> >> > -- > >> >> > You received this message because you are subscribed to the Google > >> >> > Groups "syzkaller" group. > >> >> > To unsubscribe from this group and stop receiving emails from it, > >> >> > send > >> >> > an email to syzkaller+unsubscribe@googlegroups.com . > >> >> > For more options, visit https://groups.google.com/d/optout. > >> >> > >> >> > >> >> > >> >> -- > >> >> Alexander Potapenko > >> >> Software Engineer > >> >> > >> >> Google Germany GmbH > >> >> Erika-Mann-Straße, 33 > >> >> 80636 München > >> >> > >> >> Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle > >> >> Registergericht und -nummer: Hamburg, HRB 86891 > >> >> Sitz der Gesellschaft: Hamburg > >> > > >> > > >> > > >> > > >> > -- > >> > Best Regards, > >> > Baozeng Ding > >> > > >> > >> > >> > >> -- > >> Alexander Potapenko > >> Software Engineer > >> > >> Google Germany GmbH > >> Erika-Mann-Straße, 33 > >> 80636 München > >> > >> Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle > >> Registergericht und -nummer: Hamburg, HRB 86891 > >> Sitz der Gesellschaft: Hamburg > > > > > > > > > > -- > > Best Regards, > > Baozeng Ding > > > > > > -- > Alexander Potapenko > Software Engineer > > Google Germany GmbH > Erika-Mann-Straße, 33 > 80636 München > > Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle > Registergericht und -nummer: Hamburg, HRB 86891 > Sitz der Gesellschaft: Hamburg > > -- > You received this message because you are subscribed to the Google Groups "syzkaller" group. > To unsubscribe from this group and stop receiving emails from it, send an email to syzkaller+unsubscribe@googlegroups.com . > For more options, visit https://groups.google.com/d/optout. > > > > > > -- > Best Regards, > Baozeng Ding > --------------D749C89E1B1801D4F95CE083 Content-Type: text/plain; charset=UTF-8; name="KASAN_3.10.102_x86_64.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="KASAN_3.10.102_x86_64.patch" Y29tbWl0IDVjYTQ3ZGZlZDIyZTViYWU1OGQ2YzYxZjBhNDg0ODc5NzBkMWU3ZWQKQXV0aG9y OiBCYW96ZW5nIERpbmcgPHNwbG92aW5nMUBnbWFpbC5jb20+CkRhdGU6ICAgU3VuIEp1bCAz IDEyOjAxOjE5IDIwMTYgKzA4MDAKCiAgICAzLjEwLjEwMis6IFN1cHBvcnQgS0FTQU4gZm9y IHg4Nl82NAogICAgCiAgICBCb3Jyb3dlZCBBbmRyZXkgUnlhYmluaW4ncyB3b3JrOiBLQVNB TiBiYWNrcG9ydCBmb3IgdnprZXJuZWw6CiAgICBodHRwczovL2xpc3RzLm9wZW52ei5vcmcv cGlwZXJtYWlsL2RldmVsLzIwMTUtQXVndXN0LzA2NjM3OS5odG1sCiAgICBUaGlzIHBhdGNo IGFkZHMgc3VwcG9ydCBLQVNBTiBmb3IgMy4xMC4xMDIyKyAoeDg2XzY0KQoKZGlmZiAtLWdp dCBhL0RvY3VtZW50YXRpb24va2FzYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9rYXNhbi50eHQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzNmVmMQotLS0gL2Rldi9u dWxsCisrKyBiL0RvY3VtZW50YXRpb24va2FzYW4udHh0CkBAIC0wLDAgKzEsMTY5IEBACitL ZXJuZWwgYWRkcmVzcyBzYW5pdGl6ZXIKKz09PT09PT09PT09PT09PT0KKworMC4gT3ZlcnZp ZXcKKz09PT09PT09PT09CisKK0tlcm5lbCBBZGRyZXNzIHNhbml0aXplciAoS0FTYW4pIGlz IGEgZHluYW1pYyBtZW1vcnkgZXJyb3IgZGV0ZWN0b3IuIEl0IHByb3ZpZGVzCithIGZhc3Qg YW5kIGNvbXByZWhlbnNpdmUgc29sdXRpb24gZm9yIGZpbmRpbmcgdXNlLWFmdGVyLWZyZWUg YW5kIG91dC1vZi1ib3VuZHMKK2J1Z3MuCisKK0tBU2FuIHVzZXMgY29tcGlsZS10aW1lIGlu c3RydW1lbnRhdGlvbiBmb3IgY2hlY2tpbmcgZXZlcnkgbWVtb3J5IGFjY2VzcywKK3RoZXJl Zm9yZSB5b3Ugd2lsbCBuZWVkIGEgY2VydGFpbiB2ZXJzaW9uIG9mIEdDQyA+IDQuOS4yCisK K0N1cnJlbnRseSBLQVNhbiBpcyBzdXBwb3J0ZWQgb25seSBmb3IgeDg2XzY0IGFyY2hpdGVj dHVyZSBhbmQgcmVxdWlyZXMgdGhhdCB0aGUKK2tlcm5lbCBiZSBidWlsdCB3aXRoIHRoZSBT TFVCIGFsbG9jYXRvci4KKworMS4gVXNhZ2UKKz09PT09PT09PQorCitUbyBlbmFibGUgS0FT QU4gY29uZmlndXJlIGtlcm5lbCB3aXRoOgorCisJICBDT05GSUdfS0FTQU4gPSB5CisKK2Fu ZCBjaG9vc2UgYmV0d2VlbiBDT05GSUdfS0FTQU5fT1VUTElORSBhbmQgQ09ORklHX0tBU0FO X0lOTElORS4gT3V0bGluZS9pbmxpbmUKK2lzIGNvbXBpbGVyIGluc3RydW1lbnRhdGlvbiB0 eXBlcy4gVGhlIGZvcm1lciBwcm9kdWNlcyBzbWFsbGVyIGJpbmFyeSB0aGUKK2xhdHRlciBp cyAxLjEgLSAyIHRpbWVzIGZhc3Rlci4gSW5saW5lIGluc3RydW1lbnRhdGlvbiByZXF1aXJl cyBHQ0MgNS4wIG9yCitsYXR0ZXIuCisKK0N1cnJlbnRseSBLQVNBTiB3b3JrcyBvbmx5IHdp dGggdGhlIFNMVUIgbWVtb3J5IGFsbG9jYXRvci4KK0ZvciBiZXR0ZXIgYnVnIGRldGVjdGlv biBhbmQgbmljZXIgcmVwb3J0IGFuZCBlbmFibGUgQ09ORklHX1NUQUNLVFJBQ0UuCisKK1Rv IGRpc2FibGUgaW5zdHJ1bWVudGF0aW9uIGZvciBzcGVjaWZpYyBmaWxlcyBvciBkaXJlY3Rv cmllcywgYWRkIGEgbGluZQorc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIHRvIHRoZSByZXNw ZWN0aXZlIGtlcm5lbCBNYWtlZmlsZToKKworICAgICAgICBGb3IgYSBzaW5nbGUgZmlsZSAo ZS5nLiBtYWluLm8pOgorICAgICAgICAgICAgICAgIEtBU0FOX1NBTklUSVpFX21haW4ubyA6 PSBuCisKKyAgICAgICAgRm9yIGFsbCBmaWxlcyBpbiBvbmUgZGlyZWN0b3J5OgorICAgICAg ICAgICAgICAgIEtBU0FOX1NBTklUSVpFIDo9IG4KKworMS4xIEVycm9yIHJlcG9ydHMKKz09 PT09PT09PT0KKworQSB0eXBpY2FsIG91dCBvZiBib3VuZHMgYWNjZXNzIHJlcG9ydCBsb29r cyBsaWtlIHRoaXM6CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQlVHOiBBZGRyZXNzU2FuaXRpemVyOiBv dXQgb2YgYm91bmRzIGFjY2VzcyBpbiBrbWFsbG9jX29vYl9yaWdodCsweDY1LzB4NzUgW3Rl c3Rfa2FzYW5dIGF0IGFkZHIgZmZmZjg4MDA2OTNiYzVkMworV3JpdGUgb2Ygc2l6ZSAxIGJ5 IHRhc2sgbW9kcHJvYmUvMTY4OQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0JVRyBrbWFs bG9jLTEyOCAoTm90IHRhaW50ZWQpOiBrYXNhbiBlcnJvcgorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKworRGlzYWJsaW5nIGxvY2sgZGVidWdnaW5nIGR1ZSB0byBrZXJuZWwgdGFpbnQK K0lORk86IEFsbG9jYXRlZCBpbiBrbWFsbG9jX29vYl9yaWdodCsweDNkLzB4NzUgW3Rlc3Rf a2FzYW5dIGFnZT0wIGNwdT0wIHBpZD0xNjg5CisgX19zbGFiX2FsbG9jKzB4NGI0LzB4NGYw Cisga21lbV9jYWNoZV9hbGxvY190cmFjZSsweDEwYi8weDE5MAorIGttYWxsb2Nfb29iX3Jp Z2h0KzB4M2QvMHg3NSBbdGVzdF9rYXNhbl0KKyBpbml0X21vZHVsZSsweDkvMHg0NyBbdGVz dF9rYXNhbl0KKyBkb19vbmVfaW5pdGNhbGwrMHg5OS8weDIwMAorIGxvYWRfbW9kdWxlKzB4 MmNiMy8weDNiMjAKKyBTeVNfZmluaXRfbW9kdWxlKzB4NzYvMHg4MAorIHN5c3RlbV9jYWxs X2Zhc3RwYXRoKzB4MTIvMHgxNworSU5GTzogU2xhYiAweGZmZmZlYTAwMDFhNGVmMDAgb2Jq ZWN0cz0xNyB1c2VkPTcgZnA9MHhmZmZmODgwMDY5M2JkNzI4IGZsYWdzPTB4MTAwMDAwMDAw MDA0MDgwCitJTkZPOiBPYmplY3QgMHhmZmZmODgwMDY5M2JjNTU4IEBvZmZzZXQ9MTM2OCBm cD0weGZmZmY4ODAwNjkzYmM3MjAKKworQnl0ZXMgYjQgZmZmZjg4MDA2OTNiYzU0ODogMDAg MDAgMDAgMDAgMDAgMDAgMDAgMDAgNWEgNWEgNWEgNWEgNWEgNWEgNWEgNWEgIC4uLi4uLi4u WlpaWlpaWloKK09iamVjdCBmZmZmODgwMDY5M2JjNTU4OiA2YiA2YiA2YiA2YiA2YiA2YiA2 YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiAga2tra2tra2tra2tra2traworT2JqZWN0 IGZmZmY4ODAwNjkzYmM1Njg6IDZiIDZiIDZiIDZiIDZiIDZiIDZiIDZiIDZiIDZiIDZiIDZi IDZiIDZiIDZiIDZiICBra2tra2tra2tra2tra2trCitPYmplY3QgZmZmZjg4MDA2OTNiYzU3 ODogNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgIGtr a2tra2tra2tra2tra2sKK09iamVjdCBmZmZmODgwMDY5M2JjNTg4OiA2YiA2YiA2YiA2YiA2 YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiAga2tra2tra2tra2tra2trawor T2JqZWN0IGZmZmY4ODAwNjkzYmM1OTg6IDZiIDZiIDZiIDZiIDZiIDZiIDZiIDZiIDZiIDZi IDZiIDZiIDZiIDZiIDZiIDZiICBra2tra2tra2tra2tra2trCitPYmplY3QgZmZmZjg4MDA2 OTNiYzVhODogNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIgNmIg NmIgIGtra2tra2tra2tra2tra2sKK09iamVjdCBmZmZmODgwMDY5M2JjNWI4OiA2YiA2YiA2 YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiA2YiAga2tra2tra2tra2tr a2traworT2JqZWN0IGZmZmY4ODAwNjkzYmM1Yzg6IDZiIDZiIDZiIDZiIDZiIDZiIDZiIDZi IDZiIDZiIDZiIDZiIDZiIDZiIDZiIGE1ICBra2tra2tra2tra2tra2suCitSZWR6b25lIGZm ZmY4ODAwNjkzYmM1ZDg6IGNjIGNjIGNjIGNjIGNjIGNjIGNjIGNjICAgICAgICAgICAgICAg ICAgICAgICAgICAuLi4uLi4uLgorUGFkZGluZyBmZmZmODgwMDY5M2JjNzE4OiA1YSA1YSA1 YSA1YSA1YSA1YSA1YSA1YSAgICAgICAgICAgICAgICAgICAgICAgICAgWlpaWlpaWloKK0NQ VTogMCBQSUQ6IDE2ODkgQ29tbTogbW9kcHJvYmUgVGFpbnRlZDogRyAgICBCICAgICAgICAg IDMuMTguMC1yYzEtbW0xKyAjOTgKK0hhcmR3YXJlIG5hbWU6IFFFTVUgU3RhbmRhcmQgUEMg KGk0NDBGWCArIFBJSVgsIDE5OTYpLCBCSU9TIHJlbC0xLjcuNS0wLWdlNTE0ODhjLTIwMTQw NjAyXzE2NDYxMi1uaWxzc29uLmhvbWUua3JheGVsLm9yZyAwNC8wMS8yMDE0CisgZmZmZjg4 MDA2OTNiYzAwMCAwMDAwMDAwMDAwMDAwMDAwIGZmZmY4ODAwNjkzYmM1NTggZmZmZjg4MDA2 OTIzYmI3OAorIGZmZmZmZmZmODFjYzY4YWUgMDAwMDAwMDAwMDAwMDBmMyBmZmZmODgwMDZk NDA3NjAwIGZmZmY4ODAwNjkyM2JiYTgKKyBmZmZmZmZmZjgxMWZkODQ4IGZmZmY4ODAwNmQ0 MDc2MDAgZmZmZmVhMDAwMWE0ZWYwMCBmZmZmODgwMDY5M2JjNTU4CitDYWxsIFRyYWNlOgor IFs8ZmZmZmZmZmY4MWNjNjhhZT5dIGR1bXBfc3RhY2srMHg0Ni8weDU4CisgWzxmZmZmZmZm ZjgxMWZkODQ4Pl0gcHJpbnRfdHJhaWxlcisweGY4LzB4MTYwCisgWzxmZmZmZmZmZmEwMDAy NmE3Pl0gPyBrbWVtX2NhY2hlX29vYisweGMzLzB4YzMgW3Rlc3Rfa2FzYW5dCisgWzxmZmZm ZmZmZjgxMWZmMGY1Pl0gb2JqZWN0X2VycisweDM1LzB4NDAKKyBbPGZmZmZmZmZmYTAwMDIw NjU+XSA/IGttYWxsb2Nfb29iX3JpZ2h0KzB4NjUvMHg3NSBbdGVzdF9rYXNhbl0KKyBbPGZm ZmZmZmZmODEyMGI5ZmE+XSBrYXNhbl9yZXBvcnRfZXJyb3IrMHgzOGEvMHgzZjAKKyBbPGZm ZmZmZmZmODEyMGE3OWY+XSA/IGthc2FuX3BvaXNvbl9zaGFkb3crMHgyZi8weDQwCisgWzxm ZmZmZmZmZjgxMjBiMzQ0Pl0gPyBrYXNhbl91bnBvaXNvbl9zaGFkb3crMHgxNC8weDQwCisg WzxmZmZmZmZmZjgxMjBhNzlmPl0gPyBrYXNhbl9wb2lzb25fc2hhZG93KzB4MmYvMHg0MAor IFs8ZmZmZmZmZmZhMDAwMjZhNz5dID8ga21lbV9jYWNoZV9vb2IrMHhjMy8weGMzIFt0ZXN0 X2thc2FuXQorIFs8ZmZmZmZmZmY4MTIwYTk5NT5dIF9fYXNhbl9zdG9yZTErMHg3NS8weGIw CisgWzxmZmZmZmZmZmEwMDAyNjAxPl0gPyBrbWVtX2NhY2hlX29vYisweDFkLzB4YzMgW3Rl c3Rfa2FzYW5dCisgWzxmZmZmZmZmZmEwMDAyMDY1Pl0gPyBrbWFsbG9jX29vYl9yaWdodCsw eDY1LzB4NzUgW3Rlc3Rfa2FzYW5dCisgWzxmZmZmZmZmZmEwMDAyMDY1Pl0ga21hbGxvY19v b2JfcmlnaHQrMHg2NS8weDc1IFt0ZXN0X2thc2FuXQorIFs8ZmZmZmZmZmZhMDAwMjZiMD5d IGluaXRfbW9kdWxlKzB4OS8weDQ3IFt0ZXN0X2thc2FuXQorIFs8ZmZmZmZmZmY4MTAwMDJk OT5dIGRvX29uZV9pbml0Y2FsbCsweDk5LzB4MjAwCisgWzxmZmZmZmZmZjgxMWU0ZTVjPl0g PyBfX3Z1bm1hcCsweGVjLzB4MTYwCisgWzxmZmZmZmZmZjgxMTE0ZjYzPl0gbG9hZF9tb2R1 bGUrMHgyY2IzLzB4M2IyMAorIFs8ZmZmZmZmZmY4MTEwZmQ3MD5dID8gbV9zaG93KzB4MjQw LzB4MjQwCisgWzxmZmZmZmZmZjgxMTE1ZjA2Pl0gU3lTX2Zpbml0X21vZHVsZSsweDc2LzB4 ODAKKyBbPGZmZmZmZmZmODFjZDMxMjk+XSBzeXN0ZW1fY2FsbF9mYXN0cGF0aCsweDEyLzB4 MTcKK01lbW9yeSBzdGF0ZSBhcm91bmQgdGhlIGJ1Z2d5IGFkZHJlc3M6CisgZmZmZjg4MDA2 OTNiYzMwMDogZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMg ZmMKKyBmZmZmODgwMDY5M2JjMzgwOiBmYyBmYyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw MCAwMCAwMCAwMCAwMCBmYworIGZmZmY4ODAwNjkzYmM0MDA6IGZjIGZjIGZjIGZjIGZjIGZj IGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjCisgZmZmZjg4MDA2OTNiYzQ4MDogZmMg ZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMKKyBmZmZmODgw MDY5M2JjNTAwOiBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYyAwMCAwMCAwMCAw MCAwMAorPmZmZmY4ODAwNjkzYmM1ODA6IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAw IDAzIGZjIGZjIGZjIGZjIGZjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXgorIGZmZmY4ODAwNjkzYmM2MDA6IGZjIGZjIGZjIGZjIGZjIGZj IGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjCisgZmZmZjg4MDA2OTNiYzY4MDogZmMg ZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMKKyBmZmZmODgw MDY5M2JjNzAwOiBmYyBmYyBmYyBmYyBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBm YiBmYgorIGZmZmY4ODAwNjkzYmM3ODA6IGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZi IGZiIGZiIGZiIGZiIGZiIGZiCisgZmZmZjg4MDA2OTNiYzgwMDogZmIgZmIgZmIgZmIgZmIg ZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIKKz09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXJz dCBzZWN0aW9ucyBkZXNjcmliZSBzbHViIG9iamVjdCB3aGVyZSBiYWQgYWNjZXNzIGhhcHBl bmVkLgorU2VlICdTTFVCIERlYnVnIG91dHB1dCcgc2VjdGlvbiBpbiBEb2N1bWVudGF0aW9u L3ZtL3NsdWIudHh0IGZvciBkZXRhaWxzLgorCitJbiB0aGUgbGFzdCBzZWN0aW9uIHRoZSBy ZXBvcnQgc2hvd3MgbWVtb3J5IHN0YXRlIGFyb3VuZCB0aGUgYWNjZXNzZWQgYWRkcmVzcy4K K1JlYWRpbmcgdGhpcyBwYXJ0IHJlcXVpcmVzIHNvbWUgbW9yZSB1bmRlcnN0YW5kaW5nIG9m IGhvdyBLQVNBTiB3b3Jrcy4KKworRWFjaCA4IGJ5dGVzIG9mIG1lbW9yeSBhcmUgZW5jb2Rl ZCBpbiBvbmUgc2hhZG93IGJ5dGUgYXMgYWNjZXNzaWJsZSwKK3BhcnRpYWxseSBhY2Nlc3Np YmxlLCBmcmVlZCBvciB0aGV5IGNhbiBiZSBwYXJ0IG9mIGEgcmVkem9uZS4KK1dlIHVzZSB0 aGUgZm9sbG93aW5nIGVuY29kaW5nIGZvciBlYWNoIHNoYWRvdyBieXRlOiAwIG1lYW5zIHRo YXQgYWxsIDggYnl0ZXMKK29mIHRoZSBjb3JyZXNwb25kaW5nIG1lbW9yeSByZWdpb24gYXJl IGFjY2Vzc2libGU7IG51bWJlciBOICgxIDw9IE4gPD0gNykgbWVhbnMKK3RoYXQgdGhlIGZp cnN0IE4gYnl0ZXMgYXJlIGFjY2Vzc2libGUsIGFuZCBvdGhlciAoOCAtIE4pIGJ5dGVzIGFy ZSBub3Q7CithbnkgbmVnYXRpdmUgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIGVudGlyZSA4 LWJ5dGUgd29yZCBpcyBpbmFjY2Vzc2libGUuCitXZSB1c2UgZGlmZmVyZW50IG5lZ2F0aXZl IHZhbHVlcyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCBraW5kcyBvZgoraW5h Y2Nlc3NpYmxlIG1lbW9yeSBsaWtlIHJlZHpvbmVzIG9yIGZyZWVkIG1lbW9yeSAoc2VlIG1t L2thc2FuL2thc2FuLmgpLgorCitJbiB0aGUgcmVwb3J0IGFib3ZlIHRoZSBhcnJvd3MgcG9p bnQgdG8gdGhlIHNoYWRvdyBieXRlIDAzLCB3aGljaCBtZWFucyB0aGF0Cit0aGUgYWNjZXNz ZWQgYWRkcmVzcyBpcyBwYXJ0aWFsbHkgYWNjZXNzaWJsZS4KKworCisyLiBJbXBsZW1lbnRh dGlvbiBkZXRhaWxzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRnJvbSBhIGhpZ2gg bGV2ZWwsIG91ciBhcHByb2FjaCB0byBtZW1vcnkgZXJyb3IgZGV0ZWN0aW9uIGlzIHNpbWls YXIgdG8gdGhhdAorb2Yga21lbWNoZWNrOiB1c2Ugc2hhZG93IG1lbW9yeSB0byByZWNvcmQg d2hldGhlciBlYWNoIGJ5dGUgb2YgbWVtb3J5IGlzIHNhZmUKK3RvIGFjY2VzcywgYW5kIHVz ZSBjb21waWxlLXRpbWUgaW5zdHJ1bWVudGF0aW9uIHRvIGNoZWNrIHNoYWRvdyBtZW1vcnkg b24gZWFjaAorbWVtb3J5IGFjY2Vzcy4KKworQWRkcmVzc1Nhbml0aXplciBkZWRpY2F0ZXMg MS84IG9mIGtlcm5lbCBtZW1vcnkgdG8gaXRzIHNoYWRvdyBtZW1vcnkKKyhlLmcuIDE2VEIg dG8gY292ZXIgMTI4VEIgb24geDg2XzY0KSBhbmQgdXNlcyBkaXJlY3QgbWFwcGluZyB3aXRo IGEgc2NhbGUgYW5kCitvZmZzZXQgdG8gdHJhbnNsYXRlIGEgbWVtb3J5IGFkZHJlc3MgdG8g aXRzIGNvcnJlc3BvbmRpbmcgc2hhZG93IGFkZHJlc3MuCisKK0hlcmUgaXMgdGhlIGZ1bmN0 aW9uIHdpdGNoIHRyYW5zbGF0ZSBhbiBhZGRyZXNzIHRvIGl0cyBjb3JyZXNwb25kaW5nIHNo YWRvdworYWRkcmVzczoKKworc3RhdGljIGlubGluZSB2b2lkICprYXNhbl9tZW1fdG9fc2hh ZG93KGNvbnN0IHZvaWQgKmFkZHIpCit7CisJcmV0dXJuICgodW5zaWduZWQgbG9uZylhZGRy ID4+IEtBU0FOX1NIQURPV19TQ0FMRV9TSElGVCkKKwkJKyBLQVNBTl9TSEFET1dfT0ZGU0VU OworfQorCit3aGVyZSBLQVNBTl9TSEFET1dfU0NBTEVfU0hJRlQgPSAzLgorCitDb21waWxl LXRpbWUgaW5zdHJ1bWVudGF0aW9uIHVzZWQgZm9yIGNoZWNraW5nIG1lbW9yeSBhY2Nlc3Nl cy4gQ29tcGlsZXIgaW5zZXJ0cworZnVuY3Rpb24gY2FsbHMgKF9fYXNhbl9sb2FkKihhZGRy KSwgX19hc2FuX3N0b3JlKihhZGRyKSkgYmVmb3JlIGVhY2ggbWVtb3J5CithY2Nlc3Mgb2Yg c2l6ZSAxLCAyLCA0LCA4IG9yIDE2LiBUaGVzZSBmdW5jdGlvbnMgY2hlY2sgd2hldGhlciBt ZW1vcnkgYWNjZXNzIGlzCit2YWxpZCBvciBub3QgYnkgY2hlY2tpbmcgY29ycmVzcG9uZGlu ZyBzaGFkb3cgbWVtb3J5LgorCitHQ0MgNS4wIGhhcyBwb3NzaWJpbGl0eSB0byBwZXJmb3Jt IGlubGluZSBpbnN0cnVtZW50YXRpb24uIEluc3RlYWQgb2YgbWFraW5nCitmdW5jdGlvbiBj YWxscyBHQ0MgZGlyZWN0bHkgaW5zZXJ0cyB0aGUgY29kZSB0byBjaGVjayB0aGUgc2hhZG93 IG1lbW9yeS4KK1RoaXMgb3B0aW9uIHNpZ25pZmljYW50bHkgZW5sYXJnZXMga2VybmVsIGJ1 dCBpdCBnaXZlcyB4MS4xLXgyIHBlcmZvcm1hbmNlCitib29zdCBvdmVyIG91dGxpbmUgaW5z dHJ1bWVudGVkIGtlcm5lbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L3g4Nl82 NC9tbS50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvbW0udHh0CmluZGV4IGJkNDM3 MDQuLmIwNTQ0NDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9tbS50 eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L21tLnR4dApAQCAtMTQsNiArMTQs OSBAQCBmZmZmZWEwMDAwMDAwMDAwIC0gZmZmZmVhZmZmZmZmZmZmZiAoPTQwIGJpdHMpIHZp cnR1YWwgbWVtb3J5IG1hcCAoMVRCKQogLi4uIHVudXNlZCBob2xlIC4uLgogZmZmZmZmMDAw MDAwMDAwMCAtIGZmZmZmZjdmZmZmZmZmZmYgKD0zOSBiaXRzKSAlZXNwIGZpeHVwIHN0YWNr cwogLi4uIHVudXNlZCBob2xlIC4uLgorIC4uLiB1bnVzZWQgaG9sZSAuLi4KK2ZmZmZlYzAw MDAwMDAwMDAgLSBmZmZmZmMwMDAwMDAwMDAwICg9NDQgYml0cykga2FzYW4gc2hhZG93IG1l bW9yeSAoMTZUQikKKy4uLiB1bnVzZWQgaG9sZSAuLi4KIGZmZmZmZmZmODAwMDAwMDAgLSBm ZmZmZmZmZmEwMDAwMDAwICg9NTEyIE1CKSAga2VybmVsIHRleHQgbWFwcGluZywgZnJvbSBw aHlzIDAKIGZmZmZmZmZmYTAwMDAwMDAgLSBmZmZmZmZmZmZmNWZmZmZmICg9MTUyNSBNQikg bW9kdWxlIG1hcHBpbmcgc3BhY2UKIGZmZmZmZmZmZmY2MDAwMDAgLSBmZmZmZmZmZmZmZGZm ZmZmICg9OCBNQikgdnN5c2NhbGxzCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxl CmluZGV4IDg2ODA5M2MuLjczY2ZmMWMgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01h a2VmaWxlCkBAIC0zOTQsNyArMzk0LDcgQEAgZXhwb3J0IE1BS0UgQVdLIEdFTktTWU1TIElO U1RBTExLRVJORUwgUEVSTCBVVFNfTUFDSElORQogZXhwb3J0IEhPU1RDWFggSE9TVENYWEZM QUdTIExERkxBR1NfTU9EVUxFIENIRUNLIENIRUNLRkxBR1MKIAogZXhwb3J0IEtCVUlMRF9D UFBGTEFHUyBOT1NURElOQ19GTEFHUyBMSU5VWElOQ0xVREUgT0JKQ09QWUZMQUdTIExERkxB R1MKLWV4cG9ydCBLQlVJTERfQ0ZMQUdTIENGTEFHU19LRVJORUwgQ0ZMQUdTX01PRFVMRSBD RkxBR1NfR0NPVgorZXhwb3J0IEtCVUlMRF9DRkxBR1MgQ0ZMQUdTX0tFUk5FTCBDRkxBR1Nf TU9EVUxFIENGTEFHU19HQ09WIENGTEFHU19LQVNBTgogZXhwb3J0IEtCVUlMRF9BRkxBR1Mg QUZMQUdTX0tFUk5FTCBBRkxBR1NfTU9EVUxFCiBleHBvcnQgS0JVSUxEX0FGTEFHU19NT0RV TEUgS0JVSUxEX0NGTEFHU19NT0RVTEUgS0JVSUxEX0xERkxBR1NfTU9EVUxFCiBleHBvcnQg S0JVSUxEX0FGTEFHU19LRVJORUwgS0JVSUxEX0NGTEFHU19LRVJORUwKQEAgLTY3MSw2ICs2 NzEsOCBAQCBpZmVxICgkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3Njcmlw dHMvZ2NjLWdvdG8uc2ggJChDQykpLCB5KQogCUtCVUlMRF9DRkxBR1MgKz0gLURDQ19IQVZF X0FTTV9HT1RPCiBlbmRpZgogCitpbmNsdWRlICQoc3JjdHJlZSkvc2NyaXB0cy9NYWtlZmls ZS5rYXNhbgorCiAjIEFkZCB1c2VyIHN1cHBsaWVkIENQUEZMQUdTLCBBRkxBR1MgYW5kIENG TEFHUyBhcyB0aGUgbGFzdCBhc3NpZ25tZW50cwogS0JVSUxEX0NQUEZMQUdTICs9ICQoS0NQ UEZMQUdTKQogS0JVSUxEX0FGTEFHUyArPSAkKEtBRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNo L2FybS9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKaW5kZXgg YWY2MDQ3OC4uMjgyNDk1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5j CisrKyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwpAQCAtNDAsNyArNDAsNyBAQAogdm9p ZCAqbW9kdWxlX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXR1cm4gX192bWFs bG9jX25vZGVfcmFuZ2Uoc2l6ZSwgMSwgTU9EVUxFU19WQUREUiwgTU9EVUxFU19FTkQsCi0J CQkJR0ZQX0tFUk5FTCwgUEFHRV9LRVJORUxfRVhFQywgLTEsCisJCQkJR0ZQX0tFUk5FTCwg UEFHRV9LRVJORUxfRVhFQywgMCwgTlVNQV9OT19OT0RFLAogCQkJCV9fYnVpbHRpbl9yZXR1 cm5fYWRkcmVzcygwKSk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2Vy bmVsL21vZHVsZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggY2EwZTNk NS4uYzdiYzNlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMKKysr IGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMKQEAgLTI5LDggKzI5LDggQEAKIHZvaWQg Km1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJcmV0dXJuIF9fdm1hbGxv Y19ub2RlX3JhbmdlKHNpemUsIDEsIE1PRFVMRVNfVkFERFIsIE1PRFVMRVNfRU5ELAotCQkJ CSAgICBHRlBfS0VSTkVMLCBQQUdFX0tFUk5FTF9FWEVDLCAtMSwKLQkJCQkgICAgX19idWls dGluX3JldHVybl9hZGRyZXNzKDApKTsKKwkJCQkgICAgR0ZQX0tFUk5FTCwgUEFHRV9LRVJO RUxfRVhFQywgMCwKKwkJCQkgICAgTlVNQV9OT19OT0RFLCBfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MoMCkpOwogfQogCiBlbnVtIGFhcmNoNjRfcmVsb2Nfb3AgewpkaWZmIC0tZ2l0IGEv YXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMK aW5kZXggOTc3YTYyMy4uMTgzM2Y1MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9t b2R1bGUuYworKysgYi9hcmNoL21pcHMva2VybmVsL21vZHVsZS5jCkBAIC0yMyw2ICsyMyw3 IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CiAjaW5jbHVkZSA8bGludXgv ZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+ CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K ICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtNDYsNyArNDcsNyBAQCBzdGF0aWMgREVGSU5F X1NQSU5MT0NLKGRiZV9sb2NrKTsKIHZvaWQgKm1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25n IHNpemUpCiB7CiAJcmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlKHNpemUsIDEsIE1PRFVM RV9TVEFSVCwgTU9EVUxFX0VORCwKLQkJCQlHRlBfS0VSTkVMLCBQQUdFX0tFUk5FTCwgLTEs CisJCQkJR0ZQX0tFUk5FTCwgUEFHRV9LRVJORUwsIDAsIE5VTUFfTk9fTk9ERSwKIAkJCQlf X2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9h cmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxl LmMKaW5kZXggMmE2MjVmYi4uMGQ0OThlZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2Vy bmVsL21vZHVsZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjE5 LDcgKzIxOSw3IEBAIHZvaWQgKm1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCiAJ ICogaW5pdF9kYXRhIGNvcnJlY3RseSAqLwogCXJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5n ZShzaXplLCAxLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKIAkJCQkgICAgR0ZQX0tF Uk5FTCB8IF9fR0ZQX0hJR0hNRU0sCi0JCQkJICAgIFBBR0VfS0VSTkVMX1JXWCwgLTEsCisJ CQkJICAgIFBBR0VfS0VSTkVMX1JXWCwgMCwgTlVNQV9OT19OT0RFLAogCQkJCSAgICBfX2J1 aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAv a2VybmVsL21vZHVsZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYwppbmRleCA3ODQ1 ZTE1Li40MTFhN2VlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCisr KyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCAq bW9kdWxlX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIAlpZiAoUEFHRV9BTElHTihzaXpl KSA+IE1PRFVMRVNfTEVOKQogCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gX192bWFsbG9jX25v ZGVfcmFuZ2Uoc2l6ZSwgMSwgTU9EVUxFU19WQUREUiwgTU9EVUxFU19FTkQsCi0JCQkJICAg IEdGUF9LRVJORUwsIFBBR0VfS0VSTkVMLCAtMSwKKwkJCQkgICAgR0ZQX0tFUk5FTCwgUEFH RV9LRVJORUwsIDAsIE5VTUFfTk9fTk9ERSwKIAkJCQkgICAgX19idWlsdGluX3JldHVybl9h ZGRyZXNzKDApKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwv bW9kdWxlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYwppbmRleCA0NDM1NDg4Li4x OTJhNjE3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYworKysgYi9h cmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjksNyArMjksNyBAQCBzdGF0aWMgdm9p ZCAqbW9kdWxlX21hcCh1bnNpZ25lZCBsb25nIHNpemUpCiAJaWYgKFBBR0VfQUxJR04oc2l6 ZSkgPiBNT0RVTEVTX0xFTikKIAkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIF9fdm1hbGxvY19u b2RlX3JhbmdlKHNpemUsIDEsIE1PRFVMRVNfVkFERFIsIE1PRFVMRVNfRU5ELAotCQkJCUdG UF9LRVJORUwsIFBBR0VfS0VSTkVMLCAtMSwKKwkJCQlHRlBfS0VSTkVMLCBQQUdFX0tFUk5F TCwgMCwgTlVNQV9OT19OT0RFLAogCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7 CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tj b25maWcKaW5kZXggMTA1YWUzMC4uYzhkZTY4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2Nv bmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC03Nyw2ICs3Nyw3IEBAIGNvbmZpZyBY ODYKIAlzZWxlY3QgSEFWRV9DTVBYQ0hHX0xPQ0FMCiAJc2VsZWN0IEhBVkVfQ01QWENIR19E T1VCTEUKIAlzZWxlY3QgSEFWRV9BUkNIX0tNRU1DSEVDSworCXNlbGVjdCBIQVZFX0FSQ0hf S0FTQU4gaWYgWDg2XzY0ICYmIFNQQVJTRU1FTV9WTUVNTUFQCiAJc2VsZWN0IEhBVkVfVVNF Ul9SRVRVUk5fTk9USUZJRVIKIAlzZWxlY3QgQVJDSF9CSU5GTVRfRUxGX1JBTkRPTUlaRV9Q SUUKIAlzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUwKZGlmZiAtLWdpdCBhL2FyY2gveDg2 L2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCmluZGV4IDZjZjAxMTEu LjI2MmVlYzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJj aC94ODYvYm9vdC9NYWtlZmlsZQpAQCAtMTQsNiArMTQsOCBAQAogIyBTZXQgaXQgdG8gLURT VkdBX01PREU9Tk9STUFMX1ZHQSBpZiB5b3UganVzdCB3YW50IHRoZSBFR0EvVkdBIG1vZGUu CiAjIFRoZSBudW1iZXIgaXMgdGhlIHNhbWUgYXMgeW91IHdvdWxkIG9yZGluYXJpbHkgcHJl c3MgYXQgYm9vdHVwLgogCitLQVNBTl9TQU5JVElaRSA6PSBuCisKIFNWR0FfTU9ERQk6PSAt RFNWR0FfTU9ERT1OT1JNQUxfVkdBCiAKIHRhcmdldHMJCTo9IHZtbGludXguYmluIHNldHVw LmJpbiBzZXR1cC5lbGYgYnpJbWFnZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21w cmVzc2VkL01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmlu ZGV4IDcxOTRkOWYuLmUxMjZmNmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJl c3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUK QEAgLTE4LDYgKzE4LDcgQEAgS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1m bm8tc3RhY2stcHJvdGVjdG9yKQogCiBLQlVJTERfQUZMQUdTICA6PSAkKEtCVUlMRF9DRkxB R1MpIC1EX19BU1NFTUJMWV9fCiBHQ09WX1BST0ZJTEUgOj0gbgorS0FTQU5fU0FOSVRJWkUg Oj0gbgogCiBMREZMQUdTIDo9IC1tIGVsZl8kKFVUU19NQUNISU5FKQogTERGTEFHU192bWxp bnV4IDo9IC1UCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3Qu YyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5jCmluZGV4IDEzMDhiZWUuLjJh NjQwNjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5jCisr KyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5jCkBAIC03LDE0ICs3LDE1IEBA CiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorI2luY2x1ZGUgIm1pc2MuaCIKKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgIi4uL3N0cmluZy5oIgogI2luY2x1 ZGUgPGxpbnV4L2VmaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFz bS9lZmkuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5o PgogCi0jdW5kZWYgbWVtY3B5CQkJLyogVXNlIG1lbWNweSBmcm9tIG1pc2MuYyAqLwotCiAj aW5jbHVkZSAiZWJvb3QuaCIKIAogc3RhdGljIGVmaV9zeXN0ZW1fdGFibGVfdCAqc3lzX3Rh YmxlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaCBiL2Fy Y2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmgKaW5kZXggNjc0MDE5ZC4uNzY4Yjg4OSAx MDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaAorKysgYi9hcmNo L3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oCkBAIC03LDYgKzcsNyBAQAogICogd2UganVz dCBrZWVwIGl0IGZyb20gaGFwcGVuaW5nCiAgKi8KICN1bmRlZiBDT05GSUdfUEFSQVZJUlQK KyN1bmRlZiBDT05GSUdfS0FTQU4KICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjZGVmaW5lIF9B U01fWDg2X0RFU0NfSCAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUv YXNtL2thc2FuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rYXNhbi5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YTJhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9h cmNoL3g4Ni9pbmNsdWRlL2FzbS9rYXNhbi5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYg X0FTTV9YODZfS0FTQU5fSAorI2RlZmluZSBfQVNNX1g4Nl9LQVNBTl9ICisKKy8qCisgKiBD b21waWxlciB1c2VzIHNoYWRvdyBvZmZzZXQgYXNzdW1pbmcgdGhhdCBhZGRyZXNzZXMgc3Rh cnQKKyAqIGZyb20gMC4gS2VybmVsIGFkZHJlc3NlcyBkb24ndCBzdGFydCBmcm9tIDAsIHNv IHNoYWRvdworICogZm9yIGtlcm5lbCByZWFsbHkgc3RhcnRzIGZyb20gY29tcGlsZXIncyBz aGFkb3cgb2Zmc2V0ICsKKyAqICdrZXJuZWwgYWRkcmVzcyBzcGFjZSBzdGFydCcgPj4gS0FT QU5fU0hBRE9XX1NDQUxFX1NISUZUCisgKi8KKyNkZWZpbmUgS0FTQU5fU0hBRE9XX1NUQVJU ICAgICAgKEtBU0FOX1NIQURPV19PRkZTRVQgKyBcCisJCQkJCSgweGZmZmY4MDAwMDAwMDAw MDBVTEwgPj4gMykpCisvKiA0NyBiaXRzIGZvciBrZXJuZWwgYWRkcmVzcyAtPiAoNDcgLSAz KSBiaXRzIGZvciBzaGFkb3cgKi8KKyNkZWZpbmUgS0FTQU5fU0hBRE9XX0VORCAgICAgICAg KEtBU0FOX1NIQURPV19TVEFSVCArICgxVUxMIDw8ICg0NyAtIDMpKSkKKworI2lmbmRlZiBf X0FTU0VNQkxZX18KKworI2lmZGVmIENPTkZJR19LQVNBTgordm9pZCBfX2luaXQga2FzYW5f ZWFybHlfaW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IGthc2FuX2luaXQodm9pZCk7CisjZWxz ZQorc3RhdGljIGlubGluZSB2b2lkIGthc2FuX2Vhcmx5X2luaXQodm9pZCkgeyB9CitzdGF0 aWMgaW5saW5lIHZvaWQga2FzYW5faW5pdCh2b2lkKSB7IH0KKyNlbmRpZgorCisjZW5kaWYK KworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQu aCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCmluZGV4IDE5ZTJjNDYuLmU0 NjYxMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCisr KyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCkBAIC0yNywxMSArMjcsMTIg QEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2lubGluZV9tZW1jcHkodm9pZCAq dG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdAogICAgZnVuY3Rpb24uICovCiAKICNkZWZp bmUgX19IQVZFX0FSQ0hfTUVNQ1BZIDEKK2V4dGVybiB2b2lkICpfX21lbWNweSh2b2lkICp0 bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGxlbik7CisKICNpZm5kZWYgQ09ORklHX0tN RU1DSEVDSwogI2lmIChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8 IF9fR05VQ19fID4gNAogZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICp0bywgY29uc3Qgdm9p ZCAqZnJvbSwgc2l6ZV90IGxlbik7CiAjZWxzZQotZXh0ZXJuIHZvaWQgKl9fbWVtY3B5KHZv aWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgbGVuKTsKICNkZWZpbmUgbWVtY3B5 KGRzdCwgc3JjLCBsZW4pCQkJCQlcCiAoewkJCQkJCQkJXAogCXNpemVfdCBfX2xlbiA9IChs ZW4pOwkJCQkJXApAQCAtNTMsOSArNTQsMTEgQEAgZXh0ZXJuIHZvaWQgKl9fbWVtY3B5KHZv aWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgbGVuKTsKIAogI2RlZmluZSBfX0hB VkVfQVJDSF9NRU1TRVQKIHZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4p Owordm9pZCAqX19tZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIAogI2RlZmlu ZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCiB2b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0 IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KTsKK3ZvaWQgKl9fbWVtbW92ZSh2b2lkICpkZXN0 LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjb3VudCk7CiAKIGludCBtZW1jbXAoY29uc3Qg dm9pZCAqY3MsIGNvbnN0IHZvaWQgKmN0LCBzaXplX3QgY291bnQpOwogc2l6ZV90IHN0cmxl bihjb25zdCBjaGFyICpzKTsKQEAgLTYzLDYgKzY2LDE5IEBAIGNoYXIgKnN0cmNweShjaGFy ICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOwogY2hhciAqc3RyY2F0KGNoYXIgKmRlc3QsIGNv bnN0IGNoYXIgKnNyYyk7CiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFy ICpjdCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19LQVNBTikgJiYgIWRlZmluZWQoX19TQU5J VElaRV9BRERSRVNTX18pCisKKy8qCisgKiBGb3IgZmlsZXMgdGhhdCBub3QgaW5zdHJ1bWVu dGVkIChlLmcuIG1tL3NsdWIuYykgd2UKKyAqIHNob3VsZCB1c2Ugbm90IGluc3RydW1lbnRl ZCB2ZXJzaW9uIG9mIG1lbSogZnVuY3Rpb25zLgorICovCisKKyN1bmRlZiBtZW1jcHkKKyNk ZWZpbmUgbWVtY3B5KGRzdCwgc3JjLCBsZW4pIF9fbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisj ZGVmaW5lIG1lbW1vdmUoZHN0LCBzcmMsIGxlbikgX19tZW1tb3ZlKGRzdCwgc3JjLCBsZW4p CisjZGVmaW5lIG1lbXNldChzLCBjLCBuKSBfX21lbXNldChzLCBjLCBuKQorI2VuZGlmCisK ICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9TVFJJTkdf NjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIv YXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDVlZTI2ODcuLjg1NGIwNDgg MTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNo L3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTUsNiArNSw3IEBACiAgKi8KICNpbmNs dWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5j bHVkZSA8bGludXgva2FzYW4tY2hlY2tzLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2lu Zm8uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+ CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmggYi9hcmNo L3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKaW5kZXggMzRkZjVjMi4uYTJlMTg0NCAx MDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2Fy Y2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaApAQCAtNyw2ICs3LDcgQEAKICNpbmNs dWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5j bHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGxpbnV4L2thc2FuLWNoZWNrcy5o PgogI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0 dXJlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTU5LDYgKzYwLDcgQEAgc3RhdGlj IGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjb3B5X2Zyb21fdXNlcih2b2lk ICp0bywKIAlpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKIAogCW1p Z2h0X2ZhdWx0KCk7CisJa2FzYW5fY2hlY2tfd3JpdGUodG8sIG4pOwogCWlmIChsaWtlbHko c3ogPT0gLTEgfHwgc3ogPj0gbikpCiAJCW4gPSBfY29weV9mcm9tX3VzZXIodG8sIGZyb20s IG4pOwogI2lmZGVmIENPTkZJR19ERUJVR19WTQpAQCAtNzIsNyArNzQsNyBAQCBzdGF0aWMg X19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjawogaW50IGNvcHlfdG9fdXNlcih2b2lkIF9f dXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIHNpemUpCiB7CiAJbWlnaHRf ZmF1bHQoKTsKLQorCWthc2FuX2NoZWNrX3JlYWQoc3JjLCBzaXplKTsKIAlyZXR1cm4gX2Nv cHlfdG9fdXNlcihkc3QsIHNyYywgc2l6ZSk7CiB9CiAKQEAgLTEyMiw2ICsxMjQsNyBAQCBp bnQgX19jb3B5X2Zyb21fdXNlcl9ub2NoZWNrKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3Vz ZXIgKnNyYywgdW5zaWduZWQgc2l6ZSkKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0 X2NoZWNrCiBpbnQgX19jb3B5X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191 c2VyICpzcmMsIHVuc2lnbmVkIHNpemUpCiB7CisJa2FzYW5fY2hlY2tfcmVhZChzcmMsIHNp emUpOwogCW1pZ2h0X2ZhdWx0KCk7CiAJcmV0dXJuIF9fY29weV9mcm9tX3VzZXJfbm9jaGVj ayhkc3QsIHNyYywgc2l6ZSk7CiB9CkBAIC0xODEsNiArMTg0LDcgQEAgaW50IF9fY29weV9p bl91c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2ln bmVkIHNpemUpCiB7CiAJaW50IHJldCA9IDA7CiAKKwlrYXNhbl9jaGVja193cml0ZShkc3Qs IHNpemUpOwogCW1pZ2h0X2ZhdWx0KCk7CiAJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChz aXplKSkKIAkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKChfX2ZvcmNlIHZvaWQgKilkc3Qs CkBAIC0yMzIsMTIgKzIzNiwxNCBAQCBpbnQgX19jb3B5X2luX3VzZXIodm9pZCBfX3VzZXIg KmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdW5zaWduZWQgc2l6ZSkKIHN0YXRpYyBf X211c3RfY2hlY2sgX19hbHdheXNfaW5saW5lIGludAogX19jb3B5X2Zyb21fdXNlcl9pbmF0 b21pYyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUp CiB7CisJa2FzYW5fY2hlY2tfd3JpdGUoZHN0LCBzaXplKTsKIAlyZXR1cm4gX19jb3B5X2Zy b21fdXNlcl9ub2NoZWNrKGRzdCwgKF9fZm9yY2UgY29uc3Qgdm9pZCAqKXNyYywgc2l6ZSk7 CiB9CiAKIHN0YXRpYyBfX211c3RfY2hlY2sgX19hbHdheXNfaW5saW5lIGludAogX19jb3B5 X3RvX3VzZXJfaW5hdG9taWModm9pZCBfX3VzZXIgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1 bnNpZ25lZCBzaXplKQogeworCWthc2FuX2NoZWNrX3JlYWQoc3JjLCBzaXplKTsKIAlyZXR1 cm4gX19jb3B5X3RvX3VzZXJfbm9jaGVjaygoX19mb3JjZSB2b2lkICopZHN0LCBzcmMsIHNp emUpOwogfQogCkBAIC0yNDgsNiArMjU0LDcgQEAgc3RhdGljIGlubGluZSBpbnQKIF9fY29w eV9mcm9tX3VzZXJfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMs IHVuc2lnbmVkIHNpemUpCiB7CiAJbWlnaHRfc2xlZXAoKTsKKwlrYXNhbl9jaGVja193cml0 ZShkc3QsIHNpemUpOwogCXJldHVybiBfX2NvcHlfdXNlcl9ub2NhY2hlKGRzdCwgc3JjLCBz aXplLCAxKTsKIH0KIApAQCAtMjU1LDYgKzI2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50CiBf X2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lk IF9fdXNlciAqc3JjLAogCQkJCSAgdW5zaWduZWQgc2l6ZSkKIHsKKwlrYXNhbl9jaGVja193 cml0ZShkc3QsIHNpemUpOwogCXJldHVybiBfX2NvcHlfdXNlcl9ub2NhY2hlKGRzdCwgc3Jj LCBzaXplLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxl IGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDExMWViMzUuLmM2ZmQwOTIgMTAw NjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJu ZWwvTWFrZWZpbGUKQEAgLTMsNiArMyw5IEBACiAjCiAKIGV4dHJhLXkgICAgICAgICAgICAg ICAgOj0gaGVhZF8kKEJJVFMpLm8gaGVhZCQoQklUUykubyBoZWFkLm8gdm1saW51eC5sZHMK K0tBU0FOX1NBTklUSVpFX2hlYWQkKEJJVFMpLm8gOj0gbgorS0FTQU5fU0FOSVRJWkVfZHVt cHN0YWNrLm8gOj0gbgorS0FTQU5fU0FOSVRJWkVfZHVtcHN0YWNrXyQoQklUUykubyA6PSBu CiAKIENQUEZMQUdTX3ZtbGludXgubGRzICs9IC1VJChVVFNfTUFDSElORSkKIApkaWZmIC0t Z2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jIGIvYXJjaC94ODYva2VybmVsL2R1 bXBzdGFjay5jCmluZGV4IGRlYjY0MjEuLmIxMGY3MGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2 L2tlcm5lbC9kdW1wc3RhY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMK QEAgLTI1OCw3ICsyNTgsMTAgQEAgaW50IF9fa3Byb2JlcyBfX2RpZShjb25zdCBjaGFyICpz dHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikKIAlwcmludGsoIlNNUCAiKTsK ICNlbmRpZgogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLQlwcmludGsoIkRFQlVH X1BBR0VBTExPQyIpOworCXByaW50aygiREVCVUdfUEFHRUFMTE9DICIpOworI2VuZGlmCisj aWZkZWYgQ09ORklHX0tBU0FOCisJcHJpbnRrKCJLQVNBTiIpOwogI2VuZGlmCiAJcHJpbnRr KCJcbiIpOwogCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIGVyciwKZGlm ZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9o ZWFkNjQuYwppbmRleCAzYjg2MWI3Li41NWI3YjA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9r ZXJuZWwvaGVhZDY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCkBAIC0yNyw2 ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2Jpb3NfZWJkYS5oPgogI2luY2x1ZGUgPGFzbS9i b290cGFyYW1fdXRpbHMuaD4KICNpbmNsdWRlIDxhc20vbWljcm9jb2RlLmg+CisjaW5jbHVk ZSA8YXNtL2thc2FuLmg+CiAKIC8qCiAgKiBNYW5hZ2UgcGFnZSB0YWJsZXMgdmVyeSBlYXJs eSBvbi4KQEAgLTQ2LDcgKzQ3LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHJlc2V0X2Vhcmx5 X3BhZ2VfdGFibGVzKHZvaWQpCiAKIAluZXh0X2Vhcmx5X3BndCA9IDA7CiAKLQl3cml0ZV9j cjMoX19wYShlYXJseV9sZXZlbDRfcGd0KSk7CisJd3JpdGVfY3IzKF9fcGFfbm9kZWJ1Zyhl YXJseV9sZXZlbDRfcGd0KSk7CiB9CiAKIC8qIENyZWF0ZSBhIG5ldyBQTUQgZW50cnkgKi8K QEAgLTU5LDcgKzYwLDcgQEAgaW50IF9faW5pdCBlYXJseV9tYWtlX3BndGFibGUodW5zaWdu ZWQgbG9uZyBhZGRyZXNzKQogCXBtZHZhbF90IHBtZCwgKnBtZF9wOwogCiAJLyogSW52YWxp ZCBhZGRyZXNzIG9yIGVhcmx5IHBndCBpcyBkb25lID8gICovCi0JaWYgKHBoeXNhZGRyID49 IE1BWE1FTSB8fCByZWFkX2NyMygpICE9IF9fcGEoZWFybHlfbGV2ZWw0X3BndCkpCisJaWYg KHBoeXNhZGRyID49IE1BWE1FTSB8fCByZWFkX2NyMygpICE9IF9fcGFfbm9kZWJ1ZyhlYXJs eV9sZXZlbDRfcGd0KSkKIAkJcmV0dXJuIC0xOwogCiBhZ2FpbjoKQEAgLTE1OCw5ICsxNTks MTIgQEAgdm9pZCBfX2luaXQgeDg2XzY0X3N0YXJ0X2tlcm5lbChjaGFyICogcmVhbF9tb2Rl X2RhdGEpCiAJLyogS2lsbCBvZmYgdGhlIGlkZW50aXR5LW1hcCB0cmFtcG9saW5lICovCiAJ cmVzZXRfZWFybHlfcGFnZV90YWJsZXMoKTsKIAotCS8qIGNsZWFyIGJzcyBiZWZvcmUgc2V0 X2ludHJfZ2F0ZSB3aXRoIGVhcmx5X2lkdF9oYW5kbGVyICovCiAJY2xlYXJfYnNzKCk7CiAK KwljbGVhcl9wYWdlKGluaXRfbGV2ZWw0X3BndCk7CisKKwlrYXNhbl9lYXJseV9pbml0KCk7 CisKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VYQ0VQVElPTl9WRUNUT1JTOyBpKyspCiAJCXNl dF9pbnRyX2dhdGUoaSwgJmVhcmx5X2lkdF9oYW5kbGVyX2FycmF5W2ldKTsKIAlsb2FkX2lk dCgoY29uc3Qgc3RydWN0IGRlc2NfcHRyICopJmlkdF9kZXNjcik7CkBAIC0xNzUsNyArMTc5 LDYgQEAgdm9pZCBfX2luaXQgeDg2XzY0X3N0YXJ0X2tlcm5lbChjaGFyICogcmVhbF9tb2Rl X2RhdGEpCiAJaWYgKGNvbnNvbGVfbG9nbGV2ZWwgPT0gMTApCiAJCWVhcmx5X3ByaW50aygi S2VybmVsIGFsaXZlXG4iKTsKIAotCWNsZWFyX3BhZ2UoaW5pdF9sZXZlbDRfcGd0KTsKIAkv KiBzZXQgaW5pdF9sZXZlbDRfcGd0IGtlcm5lbCBoaWdoIG1hcHBpbmcqLwogCWluaXRfbGV2 ZWw0X3BndFs1MTFdID0gZWFybHlfbGV2ZWw0X3BndFs1MTFdOwogCmRpZmYgLS1naXQgYS9h cmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUwpp bmRleCA1NGJmOWMyLi44NDhlMTFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVh ZF82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKQEAgLTUzOCwzICs1Mzgs NCBAQCBFTlRSWShubWlfaWR0X3RhYmxlKQogCV9fUEFHRV9BTElHTkVEX0JTUwogTkVYVF9Q QUdFKGVtcHR5X3plcm9fcGFnZSkKIAkuc2tpcCBQQUdFX1NJWkUKKwpkaWZmIC0tZ2l0IGEv YXJjaC94ODYva2VybmVsL21vZHVsZS5jIGIvYXJjaC94ODYva2VybmVsL21vZHVsZS5jCmlu ZGV4IDIxNmE0ZDcuLjVhN2MxY2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tb2R1 bGUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlLmMKQEAgLTI0LDYgKzI0LDcgQEAK ICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2thc2FuLmg+CiAjaW5j bHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxs aW51eC9nZnAuaD4KQEAgLTQ1LDExICs0NiwxOCBAQCBkbyB7CQkJCQkJCVwKIAogdm9pZCAq bW9kdWxlX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKKwl2b2lkICpwOworCiAJaWYg KFBBR0VfQUxJR04oc2l6ZSkgPiBNT0RVTEVTX0xFTikKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0 dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlKHNpemUsIDEsIE1PRFVMRVNfVkFERFIsIE1PRFVM RVNfRU5ELAorCXAgPSAgX192bWFsbG9jX25vZGVfcmFuZ2Uoc2l6ZSwgTU9EVUxFX0FMSUdO LCBNT0RVTEVTX1ZBRERSLCBNT0RVTEVTX0VORCwKIAkJCQlHRlBfS0VSTkVMIHwgX19HRlBf SElHSE1FTSwgUEFHRV9LRVJORUxfRVhFQywKLQkJCQktMSwgX19idWlsdGluX3JldHVybl9h ZGRyZXNzKDApKTsKKwkJCQkwLCBOVU1BX05PX05PREUsIF9fYnVpbHRpbl9yZXR1cm5fYWRk cmVzcygwKSk7CisJaWYgKHAgJiYgKGthc2FuX21vZHVsZV9hbGxvYyhwLCBzaXplKSA8IDAp KSB7CisJCXZmcmVlKHApOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHA7CiB9CiAK ICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0 dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDkzNWFmZjMuLmNlM2NiNjYg MTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tl cm5lbC9zZXR1cC5jCkBAIC04OSw2ICs4OSw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1 c2guaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2J1Z3Mu aD4KKyNpbmNsdWRlIDxhc20va2FzYW4uaD4KIAogI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5o PgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KQEAgLTExNDQsNiArMTE0NSw4IEBAIHZvaWQgX19p bml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIAogCXg4Nl9pbml0LnBhZ2luZy5w YWdldGFibGVfaW5pdCgpOwogCisJa2FzYW5faW5pdCgpOworCiAJaWYgKGJvb3RfY3B1X2Rh dGEuY3B1aWRfbGV2ZWwgPj0gMCkgewogCQkvKiBBIENQVSBoYXMgJWNyNCBpZiBhbmQgb25s eSBpZiBpdCBoYXMgQ1BVSUQgKi8KIAkJbW11X2NyNF9mZWF0dXJlcyA9IHJlYWRfY3I0KCk7 CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYyBiL2FyY2gv eDg2L2tlcm5lbC94ODY2NF9rc3ltc182NC5jCmluZGV4IGIwMTRkOTQuLjljOTA3OWMgMTAw NjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC94ODY2NF9rc3ltc182NC5jCisrKyBiL2FyY2gv eDg2L2tlcm5lbC94ODY2NF9rc3ltc182NC5jCkBAIC01MCwxMyArNTAsMTkgQEAgRVhQT1JU X1NZTUJPTChjc3VtX3BhcnRpYWwpOwogI3VuZGVmIG1lbXNldAogI3VuZGVmIG1lbW1vdmUK IAorZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3Qp OworZXh0ZXJuIHZvaWQgKl9fbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5l bF9zaXplX3QpOworZXh0ZXJuIHZvaWQgKl9fbWVtbW92ZSh2b2lkICosIGNvbnN0IHZvaWQg KiwgX19rZXJuZWxfc2l6ZV90KTsKIGV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQs IF9fa2VybmVsX3NpemVfdCk7CiBleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKiwgY29uc3Qg dm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOwotZXh0ZXJuIHZvaWQgKl9fbWVtY3B5KHZvaWQg KiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOworZXh0ZXJuIHZvaWQgKm1lbW1v dmUodm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CisKK0VYUE9SVF9T WU1CT0woX19tZW1zZXQpOworRVhQT1JUX1NZTUJPTChfX21lbWNweSk7CitFWFBPUlRfU1lN Qk9MKF9fbWVtbW92ZSk7CiAKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKIEVYUE9SVF9TWU1C T0wobWVtY3B5KTsKLUVYUE9SVF9TWU1CT0woX19tZW1jcHkpOwogRVhQT1JUX1NZTUJPTCht ZW1tb3ZlKTsKIAogI2lmbmRlZiBDT05GSUdfREVCVUdfVklSVFVBTApkaWZmIC0tZ2l0IGEv YXJjaC94ODYvbGliL21lbWNweV82NC5TIGIvYXJjaC94ODYvbGliL21lbWNweV82NC5TCmlu ZGV4IDU2MzEzYTMuLjg5YjUzYzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1jcHlf NjQuUworKysgYi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKQEAgLTUzLDYgKzUzLDggQEAK IC5MbWVtY3B5X2VfZToKIAkucHJldmlvdXMKIAorLndlYWsgbWVtY3B5CisKIEVOVFJZKF9f bWVtY3B5KQogRU5UUlkobWVtY3B5KQogCUNGSV9TVEFSVFBST0MKQEAgLTE5OSw4ICsyMDEs OCBAQCBFTkRQUk9DKF9fbWVtY3B5KQogCSAqIG9ubHkgb3V0Y29tZS4uLgogCSAqLwogCS5z ZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgotCWFsdGluc3RydWN0aW9uX2VudHJ5IG1l bWNweSwuTG1lbWNweV9jLFg4Nl9GRUFUVVJFX1JFUF9HT09ELFwKKwlhbHRpbnN0cnVjdGlv bl9lbnRyeSBfX21lbWNweSwuTG1lbWNweV9jLFg4Nl9GRUFUVVJFX1JFUF9HT09ELFwKIAkJ CSAgICAgLkxtZW1jcHlfZS0uTG1lbWNweV9jLC5MbWVtY3B5X2UtLkxtZW1jcHlfYwotCWFs dGluc3RydWN0aW9uX2VudHJ5IG1lbWNweSwuTG1lbWNweV9jX2UsWDg2X0ZFQVRVUkVfRVJN UywgXAorCWFsdGluc3RydWN0aW9uX2VudHJ5IF9fbWVtY3B5LC5MbWVtY3B5X2NfZSxYODZf RkVBVFVSRV9FUk1TLCBcCiAJCQkgICAgIC5MbWVtY3B5X2VfZS0uTG1lbWNweV9jX2UsLkxt ZW1jcHlfZV9lLS5MbWVtY3B5X2NfZQogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94 ODYvbGliL21lbW1vdmVfNjQuUyBiL2FyY2gveDg2L2xpYi9tZW1tb3ZlXzY0LlMKaW5kZXgg NjUyNjhhNi4uOWM0YjUzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL21lbW1vdmVfNjQu UworKysgYi9hcmNoL3g4Ni9saWIvbWVtbW92ZV82NC5TCkBAIC0yNCw3ICsyNCwxMCBAQAog ICogT3V0cHV0OgogICogcmF4OiBkZXN0CiAgKi8KKy53ZWFrIG1lbW1vdmUKKwogRU5UUlko bWVtbW92ZSkKK0VOVFJZKF9fbWVtbW92ZSkKIAlDRklfU1RBUlRQUk9DCiAKIAkvKiBIYW5k bGUgbW9yZSAzMiBieXRlcyBpbiBsb29wICovCkBAIC0yMjAsNCArMjIzLDUgQEAgRU5UUlko bWVtbW92ZSkKIAkJLkxtZW1tb3ZlX2VuZF9mb3J3YXJkLS5MbWVtbW92ZV9iZWdpbl9mb3J3 YXJkLAlcCiAJCS5MbWVtbW92ZV9lbmRfZm9yd2FyZF9lZnMtLkxtZW1tb3ZlX2JlZ2luX2Zv cndhcmRfZWZzCiAJLnByZXZpb3VzCitFTkRQUk9DKF9fbWVtbW92ZSkKIEVORFBST0MobWVt bW92ZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUyBiL2FyY2gveDg2 L2xpYi9tZW1zZXRfNjQuUwppbmRleCAyZGNiMzgwLi42ZjQ0OTM1IDEwMDY0NAotLS0gYS9h cmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKKysrIGIvYXJjaC94ODYvbGliL21lbXNldF82NC5T CkBAIC01Niw2ICs1Niw4IEBACiAuTG1lbXNldF9lX2U6CiAJLnByZXZpb3VzCiAKKy53ZWFr IG1lbXNldAorCiBFTlRSWShtZW1zZXQpCiBFTlRSWShfX21lbXNldCkKIAlDRklfU1RBUlRQ Uk9DCkBAIC0xNDcsOCArMTQ5LDggQEAgRU5EUFJPQyhfX21lbXNldCkKICAgICAgICAgICog ZmVhdHVyZSB0byBpbXBsZW1lbnQgdGhlIHJpZ2h0IHBhdGNoIG9yZGVyLgogCSAqLwogCS5z ZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsImEiCi0JYWx0aW5zdHJ1Y3Rpb25fZW50cnkgbWVt c2V0LC5MbWVtc2V0X2MsWDg2X0ZFQVRVUkVfUkVQX0dPT0QsXAotCQkJICAgICAuTGZpbmFs LW1lbXNldCwuTG1lbXNldF9lLS5MbWVtc2V0X2MKLQlhbHRpbnN0cnVjdGlvbl9lbnRyeSBt ZW1zZXQsLkxtZW1zZXRfY19lLFg4Nl9GRUFUVVJFX0VSTVMsIFwKLQkJCSAgICAgLkxmaW5h bC1tZW1zZXQsLkxtZW1zZXRfZV9lLS5MbWVtc2V0X2NfZQorCWFsdGluc3RydWN0aW9uX2Vu dHJ5IF9fbWVtc2V0LC5MbWVtc2V0X2MsWDg2X0ZFQVRVUkVfUkVQX0dPT0QsXAorCQkJICAg ICAuTGZpbmFsLV9fbWVtc2V0LC5MbWVtc2V0X2UtLkxtZW1zZXRfYworCWFsdGluc3RydWN0 aW9uX2VudHJ5IF9fbWVtc2V0LC5MbWVtc2V0X2NfZSxYODZfRkVBVFVSRV9FUk1TLCBcCisJ CQkgICAgIC5MZmluYWwtX19tZW1zZXQsLkxtZW1zZXRfZV9lLS5MbWVtc2V0X2NfZQogCS5w cmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9t bS9NYWtlZmlsZQppbmRleCAyM2Q4ZTVmLi45Y2VjOTM0IDEwMDY0NAotLS0gYS9hcmNoL3g4 Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMTgsNiArMTgs OSBAQCBvYmotJChDT05GSUdfSElHSE1FTSkJCSs9IGhpZ2htZW1fMzIubwogCiBvYmotJChD T05GSUdfS01FTUNIRUNLKQkJKz0ga21lbWNoZWNrLwogCitLQVNBTl9TQU5JVElaRV9rYXNh bl9pbml0XyQoQklUUykubyA6PSBuCitvYmotJChDT05GSUdfS0FTQU4pCQkrPSBrYXNhbl9p bml0XyQoQklUUykubworCiBvYmotJChDT05GSUdfTU1JT1RSQUNFKQkJKz0gbW1pb3RyYWNl Lm8KIG1taW90cmFjZS15CQkJOj0ga21taW8ubyBwZl9pbi5vIG1taW8tbW9kLm8KIG9iai0k KENPTkZJR19NTUlPVFJBQ0VfVEVTVCkJKz0gdGVzdG1taW90cmFjZS5vCmRpZmYgLS1naXQg YS9hcmNoL3g4Ni9tbS9rYXNhbl9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9rYXNhbl9pbml0 XzY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmYjA4ZQotLS0g L2Rldi9udWxsCisrKyBiL2FyY2gveDg2L21tL2thc2FuX2luaXRfNjQuYwpAQCAtMCwwICsx LDI0MyBAQAorI2RlZmluZSBwcl9mbXQoZm10KSAia2FzYW46ICIgZm10CisjaW5jbHVkZSA8 bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2thc2FuLmg+CisjaW5jbHVkZSA8 bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51 eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGFz bS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorCitleHRlcm4gcGdk X3QgZWFybHlfbGV2ZWw0X3BndFtQVFJTX1BFUl9QR0RdOworZXh0ZXJuIHN0cnVjdCByYW5n ZSBwZm5fbWFwcGVkW0U4MjBfWF9NQVhdOworCitzdGF0aWMgcHVkX3Qga2FzYW5femVyb19w dWRbUFRSU19QRVJfUFVEXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CitzdGF0aWMgcG1kX3Qga2Fz YW5femVyb19wbWRbUFRSU19QRVJfUE1EXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CitzdGF0aWMg cHRlX3Qga2FzYW5femVyb19wdGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZF9ic3M7 CisKKy8qCisgKiBUaGlzIHBhZ2UgdXNlZCBhcyBlYXJseSBzaGFkb3cuIFdlIGRvbid0IHVz ZSBlbXB0eV96ZXJvX3BhZ2UKKyAqIGF0IGVhcmx5IHN0YWdlcywgc3RhY2sgaW5zdHJ1bWVu dGF0aW9uIGNvdWxkIHdyaXRlIHNvbWUgZ2FyYmFnZQorICogdG8gdGhpcyBwYWdlLgorICog TGF0dGVyIHdlIHJldXNlIGl0IGFzIHplcm8gc2hhZG93IGZvciBsYXJnZSByYW5nZXMgb2Yg bWVtb3J5CisgKiB0aGF0IGFsbG93ZWQgdG8gYWNjZXNzLCBidXQgbm90IGluc3RydW1lbnRl ZCBieSBrYXNhbgorICogKHZtYWxsb2Mvdm1lbW1hcCAuLi4pLgorICovCitzdGF0aWMgdW5z aWduZWQgY2hhciBrYXNhbl96ZXJvX3BhZ2VbUEFHRV9TSVpFXSBfX3BhZ2VfYWxpZ25lZF9i c3M7CisKK3N0YXRpYyBpbnQgX19pbml0IG1hcF9yYW5nZShzdHJ1Y3QgcmFuZ2UgKnJhbmdl KQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisKKwlz dGFydCA9ICh1bnNpZ25lZCBsb25nKWthc2FuX21lbV90b19zaGFkb3cocGZuX3RvX2thZGRy KHJhbmdlLT5zdGFydCkpOworCWVuZCA9ICh1bnNpZ25lZCBsb25nKWthc2FuX21lbV90b19z aGFkb3cocGZuX3RvX2thZGRyKHJhbmdlLT5lbmQpKTsKKworCS8qCisJICogZW5kICsgMSBo ZXJlIGlzIGludGVudGlvbmFsLiBXZSBjaGVjayBzZXZlcmFsIHNoYWRvdyBieXRlcyBpbiBh ZHZhbmNlCisJICogdG8gc2xpZ2h0bHkgc3BlZWQgdXAgZmFzdHBhdGguIEluIHNvbWUgcmFy ZSBjYXNlcyB3ZSBjb3VsZCBjcm9zcworCSAqIGJvdW5kYXJ5IG9mIG1hcHBlZCBzaGFkb3cs IHNvIHdlIGp1c3QgbWFwIHNvbWUgbW9yZSBoZXJlLgorCSAqLworCXJldHVybiB2bWVtbWFw X3BvcHVsYXRlKHN0YXJ0LCBlbmQgKyAxLCBwZm5fdG9fbmlkKHJhbmdlLT5zdGFydCkpOwor fQorCitzdGF0aWMgdm9pZCBfX2luaXQgY2xlYXJfcGdkcyh1bnNpZ25lZCBsb25nIHN0YXJ0 LAorCQkJdW5zaWduZWQgbG9uZyBlbmQpCit7CisJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFy dCArPSBQR0RJUl9TSVpFKQorCQlwZ2RfY2xlYXIocGdkX29mZnNldF9rKHN0YXJ0KSk7Cit9 CisKK3N0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9tYXBfZWFybHlfc2hhZG93KHBnZF90ICpw Z2QpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IEtBU0FOX1NIQURPV19T VEFSVDsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IEtBU0FOX1NIQURPV19FTkQ7CisKKwlmb3Ig KGkgPSBwZ2RfaW5kZXgoc3RhcnQpOyBzdGFydCA8IGVuZDsgaSsrKSB7CisJCXBnZFtpXSA9 IF9fcGdkKF9fcGFfbm9kZWJ1ZyhrYXNhbl96ZXJvX3B1ZCkKKwkJCQl8IF9LRVJOUEdfVEFC TEUpOworCQlzdGFydCArPSBQR0RJUl9TSVpFOworCX0KK30KKworc3RhdGljIGludCBfX2lu aXQgemVyb19wdGVfcG9wdWxhdGUocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAor CQkJCXVuc2lnbmVkIGxvbmcgZW5kKQoreworCXB0ZV90ICpwdGUgPSBwdGVfb2Zmc2V0X2tl cm5lbChwbWQsIGFkZHIpOworCisJd2hpbGUgKGFkZHIgKyBQQUdFX1NJWkUgPD0gZW5kKSB7 CisJCVdBUk5fT04oIXB0ZV9ub25lKCpwdGUpKTsKKwkJc2V0X3B0ZShwdGUsIF9fcHRlKF9f cGFfbm9kZWJ1ZyhrYXNhbl96ZXJvX3BhZ2UpCisJCQkJCXwgX19QQUdFX0tFUk5FTF9STykp OworCQlhZGRyICs9IFBBR0VfU0laRTsKKwkJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1k LCBhZGRyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHplcm9f cG1kX3BvcHVsYXRlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQl1bnNp Z25lZCBsb25nIGVuZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlwbWRfdCAqcG1kID0gcG1kX29m ZnNldChwdWQsIGFkZHIpOworCisJd2hpbGUgKElTX0FMSUdORUQoYWRkciwgUE1EX1NJWkUp ICYmIGFkZHIgKyBQTURfU0laRSA8PSBlbmQpIHsKKwkJV0FSTl9PTighcG1kX25vbmUoKnBt ZCkpOworCQlzZXRfcG1kKHBtZCwgX19wbWQoX19wYV9ub2RlYnVnKGthc2FuX3plcm9fcHRl KQorCQkJCQl8IF9LRVJOUEdfVEFCTEUpKTsKKwkJYWRkciArPSBQTURfU0laRTsKKwkJcG1k ID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCX0KKwlpZiAoYWRkciA8IGVuZCkgeworCQlp ZiAocG1kX25vbmUoKnBtZCkpIHsKKwkJCXZvaWQgKnAgPSB2bWVtbWFwX2FsbG9jX2Jsb2Nr KFBBR0VfU0laRSwgMCk7CisJCQlpZiAoIXApCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlz ZXRfcG1kKHBtZCwgX19wbWQoX19wYV9ub2RlYnVnKHApIHwgX0tFUk5QR19UQUJMRSkpOwor CQl9CisJCXJldCA9IHplcm9fcHRlX3BvcHVsYXRlKHBtZCwgYWRkciwgZW5kKTsKKwl9CisJ cmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCB6ZXJvX3B1ZF9wb3B1bGF0 ZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJdW5zaWduZWQgbG9uZyBl bmQpCit7CisJaW50IHJldCA9IDA7CisJcHVkX3QgKnB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBh ZGRyKTsKKworCXdoaWxlIChJU19BTElHTkVEKGFkZHIsIFBVRF9TSVpFKSAmJiBhZGRyICsg UFVEX1NJWkUgPD0gZW5kKSB7CisJCVdBUk5fT04oIXB1ZF9ub25lKCpwdWQpKTsKKwkJc2V0 X3B1ZChwdWQsIF9fcHVkKF9fcGFfbm9kZWJ1ZyhrYXNhbl96ZXJvX3BtZCkKKwkJCQkJfCBf S0VSTlBHX1RBQkxFKSk7CisJCWFkZHIgKz0gUFVEX1NJWkU7CisJCXB1ZCA9IHB1ZF9vZmZz ZXQocGdkLCBhZGRyKTsKKwl9CisKKwlpZiAoYWRkciA8IGVuZCkgeworCQlpZiAocHVkX25v bmUoKnB1ZCkpIHsKKwkJCXZvaWQgKnAgPSB2bWVtbWFwX2FsbG9jX2Jsb2NrKFBBR0VfU0la RSwgMCk7CisJCQlpZiAoIXApCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlzZXRfcHVkKHB1 ZCwgX19wdWQoX19wYV9ub2RlYnVnKHApIHwgX0tFUk5QR19UQUJMRSkpOworCQl9CisJCXJl dCA9IHplcm9fcG1kX3BvcHVsYXRlKHB1ZCwgYWRkciwgZW5kKTsKKwl9CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBfX2luaXQgemVyb19wZ2RfcG9wdWxhdGUodW5zaWduZWQg bG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlwZ2Rf dCAqcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOworCisJd2hpbGUgKElTX0FMSUdORUQoYWRk ciwgUEdESVJfU0laRSkgJiYgYWRkciArIFBHRElSX1NJWkUgPD0gZW5kKSB7CisJCVdBUk5f T04oIXBnZF9ub25lKCpwZ2QpKTsKKwkJc2V0X3BnZChwZ2QsIF9fcGdkKF9fcGFfbm9kZWJ1 ZyhrYXNhbl96ZXJvX3B1ZCkKKwkJCQkJfCBfS0VSTlBHX1RBQkxFKSk7CisJCWFkZHIgKz0g UEdESVJfU0laRTsKKwkJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOworCX0KKworCWlmIChh ZGRyIDwgZW5kKSB7CisJCWlmIChwZ2Rfbm9uZSgqcGdkKSkgeworCQkJdm9pZCAqcCA9IHZt ZW1tYXBfYWxsb2NfYmxvY2soUEFHRV9TSVpFLCAwKTsKKwkJCWlmICghcCkKKwkJCQlyZXR1 cm4gLUVOT01FTTsKKwkJCXNldF9wZ2QocGdkLCBfX3BnZChfX3BhX25vZGVidWcocCkgfCBf S0VSTlBHX1RBQkxFKSk7CisJCX0KKwkJcmV0ID0gemVyb19wdWRfcG9wdWxhdGUocGdkLCBh ZGRyLCBlbmQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIF9faW5p dCBwb3B1bGF0ZV96ZXJvX3NoYWRvdyhjb25zdCB2b2lkICpzdGFydCwgY29uc3Qgdm9pZCAq ZW5kKQoreworCWlmICh6ZXJvX3BnZF9wb3B1bGF0ZSgodW5zaWduZWQgbG9uZylzdGFydCwg KHVuc2lnbmVkIGxvbmcpZW5kKSkKKwkJcGFuaWMoImthc2FuOiB1bmFibGUgdG8gbWFwIHpl cm8gc2hhZG93ISIpOworfQorCisKKyNpZmRlZiBDT05GSUdfS0FTQU5fSU5MSU5FCitzdGF0 aWMgaW50IGthc2FuX2RpZV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwK KwkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJ aWYgKHZhbCA9PSBESUVfR1BGKSB7CisJCXByX2VtZXJnKCJDT05GSUdfS0FTQU5fSU5MSU5F IGVuYWJsZWQiKTsKKwkJcHJfZW1lcmcoIkdQRiBjb3VsZCBiZSBjYXVzZWQgYnkgTlVMTC1w dHIgZGVyZWYgb3IgdXNlciBtZW1vcnkgYWNjZXNzIik7CisJfQorCXJldHVybiBOT1RJRllf T0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2FzYW5fZGllX25vdGlm aWVyID0geworCS5ub3RpZmllcl9jYWxsID0ga2FzYW5fZGllX2hhbmRsZXIsCit9OworI2Vu ZGlmCisKK3ZvaWQgX19pbml0IGthc2FuX2Vhcmx5X2luaXQodm9pZCkKK3sKKwlpbnQgaTsK KwlwdGV2YWxfdCBwdGVfdmFsID0gX19wYV9ub2RlYnVnKGthc2FuX3plcm9fcGFnZSkgfCBf X1BBR0VfS0VSTkVMOworCXBtZHZhbF90IHBtZF92YWwgPSBfX3BhX25vZGVidWcoa2FzYW5f emVyb19wdGUpIHwgX0tFUk5QR19UQUJMRTsKKwlwdWR2YWxfdCBwdWRfdmFsID0gX19wYV9u b2RlYnVnKGthc2FuX3plcm9fcG1kKSB8IF9LRVJOUEdfVEFCTEU7CisKKwlmb3IgKGkgPSAw OyBpIDwgUFRSU19QRVJfUFRFOyBpKyspCisJCWthc2FuX3plcm9fcHRlW2ldID0gX19wdGUo cHRlX3ZhbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUE1EOyBpKyspCisJCWth c2FuX3plcm9fcG1kW2ldID0gX19wbWQocG1kX3ZhbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwg UFRSU19QRVJfUFVEOyBpKyspCisJCWthc2FuX3plcm9fcHVkW2ldID0gX19wdWQocHVkX3Zh bCk7CisKKwlrYXNhbl9tYXBfZWFybHlfc2hhZG93KGVhcmx5X2xldmVsNF9wZ3QpOworCWth c2FuX21hcF9lYXJseV9zaGFkb3coaW5pdF9sZXZlbDRfcGd0KTsKK30KKwordm9pZCBfX2lu aXQga2FzYW5faW5pdCh2b2lkKQoreworCWludCBpOworCisjaWZkZWYgQ09ORklHX0tBU0FO X0lOTElORQorCXJlZ2lzdGVyX2RpZV9ub3RpZmllcigma2FzYW5fZGllX25vdGlmaWVyKTsK KyNlbmRpZgorCisJbWVtY3B5KGVhcmx5X2xldmVsNF9wZ3QsIGluaXRfbGV2ZWw0X3BndCwg c2l6ZW9mKGVhcmx5X2xldmVsNF9wZ3QpKTsKKwlsb2FkX2NyMyhlYXJseV9sZXZlbDRfcGd0 KTsKKwlfX2ZsdXNoX3RsYl9hbGwoKTsKKworCWNsZWFyX3BnZHMoS0FTQU5fU0hBRE9XX1NU QVJULCBLQVNBTl9TSEFET1dfRU5EKTsKKworCXBvcHVsYXRlX3plcm9fc2hhZG93KCh2b2lk ICopS0FTQU5fU0hBRE9XX1NUQVJULAorCQkJa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAq KVBBR0VfT0ZGU0VUKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRTgyMF9YX01BWDsgaSsrKSB7 CisJCWlmIChwZm5fbWFwcGVkW2ldLmVuZCA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKG1h cF9yYW5nZSgmcGZuX21hcHBlZFtpXSkpCisJCQlwYW5pYygia2FzYW46IHVuYWJsZSB0byBh bGxvY2F0ZSBzaGFkb3chIik7CisJfQorCXBvcHVsYXRlX3plcm9fc2hhZG93KGthc2FuX21l bV90b19zaGFkb3coKHZvaWQgKilQQUdFX09GRlNFVCArIE1BWE1FTSksCisJCQlrYXNhbl9t ZW1fdG9fc2hhZG93KCh2b2lkICopX19TVEFSVF9LRVJORUxfbWFwKSk7CisKKwl2bWVtbWFw X3BvcHVsYXRlKCh1bnNpZ25lZCBsb25nKWthc2FuX21lbV90b19zaGFkb3coX3N0ZXh0KSwK KwkJCSh1bnNpZ25lZCBsb25nKWthc2FuX21lbV90b19zaGFkb3coX2VuZCksCisJCQkwKTsK KworCXBvcHVsYXRlX3plcm9fc2hhZG93KGthc2FuX21lbV90b19zaGFkb3coKHZvaWQgKilN T0RVTEVTX0VORCksCisJCQkodm9pZCAqKUtBU0FOX1NIQURPV19FTkQpOworCisJbWVtc2V0 KGthc2FuX3plcm9fcGFnZSwgMCwgUEFHRV9TSVpFKTsKKworCWxvYWRfY3IzKGluaXRfbGV2 ZWw0X3BndCk7CisJX19mbHVzaF90bGJfYWxsKCk7CisJaW5pdF90YXNrLmthc2FuX2RlcHRo ID0gMDsKKworCXByX2luZm8oIktlcm5lbCBhZGRyZXNzIHNhbml0aXplciBpbml0aWFsaXpl ZFxuIik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9yZWFsbW9kZS9NYWtlZmlsZSBiL2Fy Y2gveDg2L3JlYWxtb2RlL01ha2VmaWxlCmluZGV4IDk0ZjdmYmUuLmUwMmMyYzYgMTAwNjQ0 Ci0tLSBhL2FyY2gveDg2L3JlYWxtb2RlL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L3JlYWxt b2RlL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogIyBmb3IgbW9yZSBkZXRhaWxzLgogIwog IwotCitLQVNBTl9TQU5JVElaRSA6PSBuCiBzdWJkaXItIDo9IHJtCiAKIG9iai15ICs9IGlu aXQubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcmVhbG1vZGUvcm0vTWFrZWZpbGUgYi9hcmNo L3g4Ni9yZWFsbW9kZS9ybS9NYWtlZmlsZQppbmRleCA5Y2FjODI1Li41M2M2YjY1IDEwMDY0 NAotLS0gYS9hcmNoL3g4Ni9yZWFsbW9kZS9ybS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9y ZWFsbW9kZS9ybS9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKICMgZm9yIG1vcmUgZGV0YWls cy4KICMKICMKK0tBU0FOX1NBTklUSVpFIDo9IG4KIAogYWx3YXlzIDo9IHJlYWxtb2RlLmJp biByZWFsbW9kZS5yZWxvY3MKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby9NYWtlZmls ZSBiL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUKaW5kZXggZmQxNGJlMS4uZDIxMTc3MiAxMDA2 NDQKLS0tIGEvYXJjaC94ODYvdmRzby9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni92ZHNvL01h a2VmaWxlCkBAIC0xODMsNiArMTgzLDcgQEAgcXVpZXRfY21kX3Zkc28gPSBWRFNPICAgICRA CiAKIFZEU09fTERGTEFHUyA9IC1mUElDIC1zaGFyZWQgJChjYWxsIGNjLWxkb3B0aW9uLCAt V2wkKGNvbW1hKS0taGFzaC1zdHlsZT1zeXN2KQogR0NPVl9QUk9GSUxFIDo9IG4KK0tBU0FO X1NBTklUSVpFIDo9IG4KIAogIwogIyBJbnN0YWxsIHRoZSB1bnN0cmlwcGVkIGNvcHkgb2Yg dmRzbyouc28gbGlzdGVkIGluICQodmRzby1pbnN0YWxsLXkpLgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0 L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMKaW5kZXggODhlODVjYi4uN2FlNWE4 YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21h aW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5j CkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYWVyLmg+CiAKIE1PRFVMRV9W RVJTSU9OKERSVl9WRVIpOwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlX2Rldl9pZHMp OwogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDICIgIiBEUlZfVkVSKTsKIE1PRFVMRV9B VVRIT1IoIkVtdWxleCBDb3Jwb3JhdGlvbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYyBiL2RyaXZlcnMv c2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKaW5kZXggYTY4M2E4My4uNDMwMGZkMiAxMDA2NDQK LS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYworKysgYi9kcml2ZXJzL3Nj c2kvYmUyaXNjc2kvYmVfbWFpbi5jCkBAIC00OCw3ICs0OCw2IEBAIHN0YXRpYyB1bnNpZ25l ZCBpbnQgYmVfaW9wb2xsX2J1ZGdldCA9IDEwOwogc3RhdGljIHVuc2lnbmVkIGludCBiZV9t YXhfcGh5c19zaXplID0gNjQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGVuYWJsZV9tc2l4ID0g MTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsK IE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyAiICIgQlVJTERfU1RSKTsKIE1PRFVMRV9W RVJTSU9OKEJVSUxEX1NUUik7CiBNT0RVTEVfQVVUSE9SKCJFbXVsZXggQ29ycG9yYXRpb24i KTsKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggMTcyMjJm YS4uMWQwNDkxNCAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMK QEAgLTM1LDExICszNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNs dWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0X2Js Lmg+CisjaW5jbHVkZSA8bGludXgva2FzYW4uaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRj aC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgImludGVybmFs LmgiCiAjaW5jbHVkZSAibW91bnQuaCIKIAorCiAvKgogICogVXNhZ2U6CiAgKiBkY2FjaGUt PmRfaW5vZGUtPmlfbG9jayBwcm90ZWN0czoKQEAgLTEyNjMsNiArMTI2NSwxMSBAQCBzdHJ1 Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3Ry dWN0IHFzdHIgKm5hbWUpCiAJCQlrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50 cnkpOyAKIAkJCXJldHVybiBOVUxMOwogCQl9CisJCWlmIChJU19FTkFCTEVEKENPTkZJR19E Q0FDSEVfV09SRF9BQ0NFU1MpKQorCQkJa2FzYW5fdW5wb2lzb25fc2hhZG93KGRuYW1lLAor CQkJCQlyb3VuZF91cChuYW1lLT5sZW4gKyAxLAorCQkJCQkJc2l6ZW9mKHVuc2lnbmVkIGxv bmcpKSk7CisKIAl9IGVsc2UgIHsKIAkJZG5hbWUgPSBkZW50cnktPmRfaW5hbWU7CiAJfQkK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmggYi9pbmNsdWRlL2xp bnV4L2NvbXBpbGVyLWdjYy5oCmluZGV4IDk1M2NkMTIxLi4wODJjMGVjIDEwMDY0NAotLS0g YS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYy5oCisrKyBiL2luY2x1ZGUvbGludXgvY29t cGlsZXItZ2NjLmgKQEAgLTY2LDYgKzY2LDcgQEAKICNkZWZpbmUgX19kZXByZWNhdGVkCQkJ X19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCkpCiAjZGVmaW5lIF9fcGFja2VkCQkJX19hdHRy aWJ1dGVfXygocGFja2VkKSkKICNkZWZpbmUgX193ZWFrCQkJCV9fYXR0cmlidXRlX18oKHdl YWspKQorI2RlZmluZSBfX2FsaWFzKHN5bWJvbCkJCV9fYXR0cmlidXRlX18oKGFsaWFzKCNz eW1ib2wpKSkKIAogLyoKICAqIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBvbiBBUk0gKGN1cnJl bnRseSB0aGUgb25seSB1c2VyIG9mIF9fbmFrZWQpIHRvIHRyYWNlCmRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzMuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIt Z2NjMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKZGlm ZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmggYi9pbmNsdWRlL2xpbnV4L2lu aXRfdGFzay5oCmluZGV4IDk5OGY0ZGYuLmI3MTY4OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUv bGludXgvaW5pdF90YXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaApAQCAt MTU1LDYgKzE1NSwxMyBAQCBleHRlcm4gc3RydWN0IHRhc2tfZ3JvdXAgcm9vdF90YXNrX2dy b3VwOwogCiAjZGVmaW5lIElOSVRfVEFTS19DT01NICJzd2FwcGVyIgogCisjaWZkZWYgQ09O RklHX0tBU0FOCisjIGRlZmluZSBJTklUX0tBU0FOKHRzaykJCQkJCQlcCisJLmthc2FuX2Rl cHRoID0gMSwKKyNlbHNlCisjIGRlZmluZSBJTklUX0tBU0FOKHRzaykKKyNlbmRpZgorCiAv KgogICogIElOSVRfVEFTSyBpcyB1c2VkIHRvIHNldCB1cCB0aGUgZmlyc3QgdGFzayB0YWJs ZSwgdG91Y2ggYXQKICAqIHlvdXIgb3duIHJpc2shLiBCYXNlPTAsIGxpbWl0PTB4MWZmZmZm ICg9Mk1CKQpAQCAtMjI0LDYgKzIzMSw3IEBAIGV4dGVybiBzdHJ1Y3QgdGFza19ncm91cCBy b290X3Rhc2tfZ3JvdXA7CiAJSU5JVF9UQVNLX1JDVV9QUkVFTVBUKHRzaykJCQkJCVwKIAlJ TklUX0NQVVNFVF9TRVEJCQkJCQkJXAogCUlOSVRfVlRJTUUodHNrKQkJCQkJCQlcCisJSU5J VF9LQVNBTih0c2spCQkJCQkJCVwKIH0KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L2thc2FuLWNoZWNrcy5oIGIvaW5jbHVkZS9saW51eC9rYXNhbi1jaGVja3MuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2Y4YWNlCi0tLSAvZGV2L251bGwKKysr IGIvaW5jbHVkZS9saW51eC9rYXNhbi1jaGVja3MuaApAQCAtMCwwICsxLDEyIEBACisjaWZu ZGVmIF9MSU5VWF9LQVNBTl9DSEVDS1NfSAorI2RlZmluZSBfTElOVVhfS0FTQU5fQ0hFQ0tT X0gKKworI2lmZGVmIENPTkZJR19LQVNBTgordm9pZCBrYXNhbl9jaGVja19yZWFkKGNvbnN0 IHZvaWQgKnAsIHVuc2lnbmVkIGludCBzaXplKTsKK3ZvaWQga2FzYW5fY2hlY2tfd3JpdGUo Y29uc3Qgdm9pZCAqcCwgdW5zaWduZWQgaW50IHNpemUpOworI2Vsc2UKK3N0YXRpYyBpbmxp bmUgdm9pZCBrYXNhbl9jaGVja19yZWFkKGNvbnN0IHZvaWQgKnAsIHVuc2lnbmVkIGludCBz aXplKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9jaGVja193cml0ZShjb25zdCB2 b2lkICpwLCB1bnNpZ25lZCBpbnQgc2l6ZSkgeyB9CisjZW5kaWYKKworI2VuZGlmCmRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L2thc2FuLmggYi9pbmNsdWRlL2xpbnV4L2thc2FuLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiMDc0NAotLS0gL2Rldi9u dWxsCisrKyBiL2luY2x1ZGUvbGludXgva2FzYW4uaApAQCAtMCwwICsxLDg2IEBACisjaWZu ZGVmIF9MSU5VWF9LQVNBTl9ICisjZGVmaW5lIF9MSU5VWF9LQVNBTl9ICisKKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qga21lbV9jYWNoZTsKK3N0cnVjdCBwYWdlOwor c3RydWN0IHZtX3N0cnVjdDsKKworI2lmZGVmIENPTkZJR19LQVNBTgorCisjZGVmaW5lIEtB U0FOX1NIQURPV19TQ0FMRV9TSElGVCAzCisjZGVmaW5lIEtBU0FOX1NIQURPV19PRkZTRVQg X0FDKENPTkZJR19LQVNBTl9TSEFET1dfT0ZGU0VULCBVTCkKKworI2luY2x1ZGUgPGFzbS9r YXNhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCAqa2FzYW5fbWVtX3RvX3NoYWRvdyhjb25zdCB2b2lkICphZGRyKQoreworCXJldHVybiAo dm9pZCAqKSgodW5zaWduZWQgbG9uZylhZGRyID4+IEtBU0FOX1NIQURPV19TQ0FMRV9TSElG VCkKKwkJKyBLQVNBTl9TSEFET1dfT0ZGU0VUOworfQorCisvKiBFbmFibGUgcmVwb3J0aW5n IGJ1Z3MgYWZ0ZXIga2FzYW5fZGlzYWJsZV9jdXJyZW50KCkgKi8KK3N0YXRpYyBpbmxpbmUg dm9pZCBrYXNhbl9lbmFibGVfY3VycmVudCh2b2lkKQoreworCWN1cnJlbnQtPmthc2FuX2Rl cHRoKys7Cit9CisKKy8qIERpc2FibGUgcmVwb3J0aW5nIGJ1Z3MgZm9yIGN1cnJlbnQgdGFz ayAqLworc3RhdGljIGlubGluZSB2b2lkIGthc2FuX2Rpc2FibGVfY3VycmVudCh2b2lkKQor eworCWN1cnJlbnQtPmthc2FuX2RlcHRoLS07Cit9CisKK3ZvaWQga2FzYW5fdW5wb2lzb25f c2hhZG93KGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplKTsKKwordm9pZCBrYXNh bl9hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsK K3ZvaWQga2FzYW5fZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50 IG9yZGVyKTsKKwordm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3QgcGFnZSAqcGFnZSk7 Cit2b2lkIGthc2FuX3VucG9pc29uX29iamVjdF9kYXRhKHN0cnVjdCBrbWVtX2NhY2hlICpj YWNoZSwgdm9pZCAqb2JqZWN0KTsKK3ZvaWQga2FzYW5fcG9pc29uX29iamVjdF9kYXRhKHN0 cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KTsKKwordm9pZCBrYXNhbl9r bWFsbG9jX2xhcmdlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOwordm9pZCBrYXNh bl9rZnJlZV9sYXJnZShjb25zdCB2b2lkICpwdHIpOwordm9pZCBrYXNhbl9rbWFsbG9jKHN0 cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCB2b2lkICpvYmplY3QsIHNpemVfdCBzaXplKTsK K3ZvaWQga2FzYW5fa3JlYWxsb2MoY29uc3Qgdm9pZCAqb2JqZWN0LCBzaXplX3QgbmV3X3Np emUpOworCit2b2lkIGthc2FuX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIHZv aWQgKm9iamVjdCk7Cit2b2lkIGthc2FuX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAq cywgdm9pZCAqb2JqZWN0KTsKKworaW50IGthc2FuX21vZHVsZV9hbGxvYyh2b2lkICphZGRy LCBzaXplX3Qgc2l6ZSk7Cit2b2lkIGthc2FuX2ZyZWVfc2hhZG93KGNvbnN0IHN0cnVjdCB2 bV9zdHJ1Y3QgKnZtKTsKKworI2Vsc2UgLyogQ09ORklHX0tBU0FOICovCisKK3N0YXRpYyBp bmxpbmUgdm9pZCBrYXNhbl91bnBvaXNvbl9zaGFkb3coY29uc3Qgdm9pZCAqYWRkcmVzcywg c2l6ZV90IHNpemUpIHt9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9lbmFibGVfY3Vy cmVudCh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGthc2FuX2Rpc2FibGVfY3VycmVu dCh2b2lkKSB7fQorCitzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fYWxsb2NfcGFnZXMoc3Ry dWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikge30KK3N0YXRpYyBpbmxpbmUg dm9pZCBrYXNhbl9mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQg b3JkZXIpIHt9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1 Y3QgcGFnZSAqcGFnZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl91bnBvaXNvbl9v YmplY3RfZGF0YShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCisJCQkJCXZvaWQgKm9iamVj dCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fb2JqZWN0X2RhdGEoc3Ry dWN0IGttZW1fY2FjaGUgKmNhY2hlLAorCQkJCQl2b2lkICpvYmplY3QpIHt9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBrYXNhbl9rbWFsbG9jX2xhcmdlKHZvaWQgKnB0ciwgc2l6ZV90IHNp emUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fa2ZyZWVfbGFyZ2UoY29uc3Qgdm9p ZCAqcHRyKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGthc2FuX2ttYWxsb2Moc3RydWN0IGtt ZW1fY2FjaGUgKnMsIGNvbnN0IHZvaWQgKm9iamVjdCwKKwkJCQlzaXplX3Qgc2l6ZSkge30K K3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9rcmVhbGxvYyhjb25zdCB2b2lkICpvYmplY3Qs IHNpemVfdCBuZXdfc2l6ZSkge30KKworc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3NsYWJf YWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCkge30KK3N0YXRpYyBp bmxpbmUgdm9pZCBrYXNhbl9zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQg Km9iamVjdCkge30KKworc3RhdGljIGlubGluZSBpbnQga2FzYW5fbW9kdWxlX2FsbG9jKHZv aWQgKmFkZHIsIHNpemVfdCBzaXplKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZv aWQga2FzYW5fZnJlZV9zaGFkb3coY29uc3Qgc3RydWN0IHZtX3N0cnVjdCAqdm0pIHt9CisK KyNlbmRpZiAvKiBDT05GSUdfS0FTQU4gKi8KKworI2VuZGlmIC8qIExJTlVYX0tBU0FOX0gg Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4 L21vZHVsZS5oCmluZGV4IDc2MWRjMjguLmYwYjg3NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUv bGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtODQsNyAr ODQsNyBAQCB2b2lkIHRyaW1faW5pdF9leHRhYmxlKHN0cnVjdCBtb2R1bGUgKm0pOwogCiAj aWZkZWYgTU9EVUxFCiAjZGVmaW5lIE1PRFVMRV9HRU5FUklDX1RBQkxFKGd0eXBlLG5hbWUp CQkJXAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBndHlwZSMjX2lkIF9fbW9kXyMjZ3R5cGUjI190 YWJsZQkJXAorZXh0ZXJuIGNvbnN0IHR5cGVvZihuYW1lKSBfX21vZF8jI2d0eXBlIyNfdGFi bGUJCQlcCiAgIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIGFsaWFzKF9fc3RyaW5naWZ5KG5h bWUpKSkpCiAKICNlbHNlICAvKiAhTU9EVUxFICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xp bnV4L21vZHVsZWxvYWRlci5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVsb2FkZXIuaAppbmRl eCA1NjBjYTUzLi44NDA1NzY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZWxv YWRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmgKQEAgLTgwLDQgKzgw LDExIEBAIGludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwKIC8qIEFu eSBjbGVhbnVwIG5lZWRlZCB3aGVuIG1vZHVsZSBsZWF2ZXMuICovCiB2b2lkIG1vZHVsZV9h cmNoX2NsZWFudXAoc3RydWN0IG1vZHVsZSAqbW9kKTsKIAorI2lmZGVmIENPTkZJR19LQVNB TgorI2luY2x1ZGUgPGxpbnV4L2thc2FuLmg+CisjZGVmaW5lIE1PRFVMRV9BTElHTiAoUEFH RV9TSVpFIDw8IEtBU0FOX1NIQURPV19TQ0FMRV9TSElGVCkKKyNlbHNlCisjZGVmaW5lIE1P RFVMRV9BTElHTiBQQUdFX1NJWkUKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA0Nzgx MzMyLi44NDNlOTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIv aW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xMzgzLDYgKzEzODMsOSBAQCBzdHJ1Y3QgdGFz a19zdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgdGltZXJfc2xhY2tfbnM7CiAJdW5zaWduZWQg bG9uZyBkZWZhdWx0X3RpbWVyX3NsYWNrX25zOwogCisjaWZkZWYgQ09ORklHX0tBU0FOCisJ dW5zaWduZWQgaW50IGthc2FuX2RlcHRoOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZVTkNU SU9OX0dSQVBIX1RSQUNFUgogCS8qIEluZGV4IG9mIGN1cnJlbnQgc3RvcmVkIGFkZHJlc3Mg aW4gcmV0X3N0YWNrICovCiAJaW50IGN1cnJfcmV0X3N0YWNrOwpkaWZmIC0tZ2l0IGEvaW5j bHVkZS9saW51eC9zbHViX2RlZi5oIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCmluZGV4 IDAyNzI3NmYuLmQ4ZmRlNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYu aAorKysgYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKQEAgLTIwOCw0ICsyMDgsMjMgQEAg c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUs IGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIH0KICNlbmRpZgogCisKKy8qKgorICogdmlydF90 b19vYmogLSByZXR1cm5zIGFkZHJlc3Mgb2YgdGhlIGJlZ2lubmluZyBvZiBvYmplY3QuCisg KiBAczogb2JqZWN0J3Mga21lbV9jYWNoZQorICogQHNsYWJfcGFnZTogYWRkcmVzcyBvZiBz bGFiIHBhZ2UKKyAqIEB4OiBhZGRyZXNzIHdpdGhpbiBvYmplY3QgbWVtb3J5IHJhbmdlCisg KgorICogUmV0dXJucyBhZGRyZXNzIG9mIHRoZSBiZWdpbm5pbmcgb2Ygb2JqZWN0CisgKi8K K3N0YXRpYyBpbmxpbmUgdm9pZCAqdmlydF90b19vYmooc3RydWN0IGttZW1fY2FjaGUgKnMs CisJCQkJY29uc3Qgdm9pZCAqc2xhYl9wYWdlLAorCQkJCWNvbnN0IHZvaWQgKngpCit7CisJ cmV0dXJuICh2b2lkICopeCAtICgoeCAtIHNsYWJfcGFnZSkgJSBzLT5zaXplKTsKK30KKwor dm9pZCBvYmplY3RfZXJyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFn ZSwKKwkJdTggKm9iamVjdCwgY2hhciAqcmVhc29uKTsKKwogI2VuZGlmIC8qIF9MSU5VWF9T TFVCX0RFRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCBiL2lu Y2x1ZGUvbGludXgvdm1hbGxvYy5oCmluZGV4IDdkNTc3M2EuLjYzOGM2NzMgMTAwNjQ0Ci0t LSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1hbGxv Yy5oCkBAIC0xNiw2ICsxNiw4IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsJCS8qIHZtYSBk ZWZpbmluZyB1c2VyIG1hcHBpbmcgaW4gbW1fdHlwZXMuaCAqLwogI2RlZmluZSBWTV9VU0VS TUFQCTB4MDAwMDAwMDgJLyogc3VpdGFibGUgZm9yIHJlbWFwX3ZtYWxsb2NfcmFuZ2UgKi8K ICNkZWZpbmUgVk1fVlBBR0VTCTB4MDAwMDAwMTAJLyogYnVmZmVyIGZvciBwYWdlcyB3YXMg dm1hbGxvYydlZCAqLwogI2RlZmluZSBWTV9VTkxJU1QJMHgwMDAwMDAyMAkvKiB2bV9zdHJ1 Y3QgaXMgbm90IGxpc3RlZCBpbiB2bWxpc3QgKi8KKyNkZWZpbmUgVk1fTk9fR1VBUkQJMHgw MDAwMDA0MCAgICAgIC8qIGRvbid0IGFkZCBndWFyZCBwYWdlICovCisjZGVmaW5lIFZNX0tB U0FOCTB4MDAwMDAwODAgICAgICAvKiBoYXMgYWxsb2NhdGVkIGthc2FuIHNoYWRvdyBtZW1v cnkgKi8KIC8qIGJpdHMgWzIwLi4zMl0gcmVzZXJ2ZWQgZm9yIGFyY2ggc3BlY2lmaWMgaW9y ZW1hcCBpbnRlcm5hbHMgKi8KIAogLyoKQEAgLTc1LDcgKzc3LDkgQEAgZXh0ZXJuIHZvaWQg KnZtYWxsb2NfMzJfdXNlcih1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIHZvaWQgKl9f dm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBw cm90KTsKIGV4dGVybiB2b2lkICpfX3ZtYWxsb2Nfbm9kZV9yYW5nZSh1bnNpZ25lZCBsb25n IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1 bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQlwZ3Byb3RfdCBwcm90LCBp bnQgbm9kZSwgY29uc3Qgdm9pZCAqY2FsbGVyKTsKKwkJCXBncHJvdF90IHByb3QsIHVuc2ln bmVkIGxvbmcgdm1fZmxhZ3MsIGludCBub2RlLAorCQkJY29uc3Qgdm9pZCAqY2FsbGVyKTsK KwogZXh0ZXJuIHZvaWQgdmZyZWUoY29uc3Qgdm9pZCAqYWRkcik7CiAKIGV4dGVybiB2b2lk ICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCwKQEAgLTky LDggKzk2LDEyIEBAIHZvaWQgdm1hbGxvY19zeW5jX2FsbCh2b2lkKTsKIAogc3RhdGljIGlu bGluZSBzaXplX3QgZ2V0X3ZtX2FyZWFfc2l6ZShjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICph cmVhKQogewotCS8qIHJldHVybiBhY3R1YWwgc2l6ZSB3aXRob3V0IGd1YXJkIHBhZ2UgKi8K LQlyZXR1cm4gYXJlYS0+c2l6ZSAtIFBBR0VfU0laRTsKKwlpZiAoIShhcmVhLT5mbGFncyAm IFZNX05PX0dVQVJEKSkKKwkJLyogcmV0dXJuIGFjdHVhbCBzaXplIHdpdGhvdXQgZ3VhcmQg cGFnZSAqLworCQlyZXR1cm4gYXJlYS0+c2l6ZSAtIFBBR0VfU0laRTsKKwllbHNlCisJCXJl dHVybiBhcmVhLT5zaXplOworCiB9CiAKIGV4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRf dm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwpkaWZm IC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCA3 NGZkYzVjLi44MThiZjFjIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9s aWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMTQ4MSw2ICsxNDgxLDggQEAgc291cmNlICJsaWIvS2Nv bmZpZy5rZ2RiIgogCiBzb3VyY2UgImxpYi9LY29uZmlnLmttZW1jaGVjayIKIAorc291cmNl ICJsaWIvS2NvbmZpZy5rYXNhbiIKKwogY29uZmlnIFRFU1RfU1RSSU5HX0hFTFBFUlMKIAl0 cmlzdGF0ZSAiVGVzdCBmdW5jdGlvbnMgbG9jYXRlZCBpbiB0aGUgc3RyaW5nX2hlbHBlcnMg bW9kdWxlIGF0IHJ1bnRpbWUiCiAKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmthc2FuIGIv bGliL0tjb25maWcua2FzYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NGZlY2FlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvS2NvbmZpZy5rYXNhbgpAQCAtMCww ICsxLDU0IEBACitjb25maWcgSEFWRV9BUkNIX0tBU0FOCisJYm9vbAorCitpZiBIQVZFX0FS Q0hfS0FTQU4KKworY29uZmlnIEtBU0FOCisJYm9vbCAiS0FTYW46IHJ1bnRpbWUgbWVtb3J5 IGRlYnVnZ2VyIgorCWRlcGVuZHMgb24gU0xVQl9ERUJVRworCXNlbGVjdCBDT05TVFJVQ1RP UlMKKwloZWxwCisJICBFbmFibGVzIGtlcm5lbCBhZGRyZXNzIHNhbml0aXplciAtIHJ1bnRp bWUgbWVtb3J5IGRlYnVnZ2VyLAorCSAgZGVzaWduZWQgdG8gZmluZCBvdXQtb2YtYm91bmRz IGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLgorCSAgVGhpcyBpcyBzdHJpY3Rs eSBkZWJ1Z2dpbmcgZmVhdHVyZS4gSXQgY29uc3VtZXMgYWJvdXQgMS84CisJICBvZiBhdmFp bGFibGUgbWVtb3J5IGFuZCBicmluZ3MgYWJvdXQgfngzIHBlcmZvcm1hbmNlIHNsb3dkb3du LgorCSAgRm9yIGJldHRlciBlcnJvciBkZXRlY3Rpb24gZW5hYmxlIENPTkZJR19TVEFDS1RS QUNFLAorCSAgYW5kIGFkZCBzbHViX2RlYnVnPVUgdG8gYm9vdCBjbWRsaW5lLgorCitjb25m aWcgS0FTQU5fU0hBRE9XX09GRlNFVAorCWhleAorCWRlZmF1bHQgMHhkZmZmZmMwMDAwMDAw MDAwIGlmIFg4Nl82NAorCitjaG9pY2UKKwlwcm9tcHQgIkluc3RydW1lbnRhdGlvbiB0eXBl IgorCWRlcGVuZHMgb24gS0FTQU4KKwlkZWZhdWx0IEtBU0FOX09VVExJTkUKKworY29uZmln IEtBU0FOX09VVExJTkUKKwlib29sICJPdXRsaW5lIGluc3RydW1lbnRhdGlvbiIKKwloZWxw CisJICBCZWZvcmUgZXZlcnkgbWVtb3J5IGFjY2VzcyBjb21waWxlciBpbnNlcnQgZnVuY3Rp b24gY2FsbAorCSAgX19hc2FuX2xvYWQqL19fYXNhbl9zdG9yZSouIFRoZXNlIGZ1bmN0aW9u cyBwZXJmb3JtcyBjaGVjaworCSAgb2Ygc2hhZG93IG1lbW9yeS4gVGhpcyBpcyBzbG93ZXIg dGhhbiBpbmxpbmUgaW5zdHJ1bWVudGF0aW9uLAorCSAgaG93ZXZlciBpdCBkb2Vzbid0IGJs b2F0IHNpemUgb2Yga2VybmVsJ3MgLnRleHQgc2VjdGlvbiBzbworCSAgbXVjaCBhcyBpbmxp bmUgZG9lcy4KKworY29uZmlnIEtBU0FOX0lOTElORQorCWJvb2wgIklubGluZSBpbnN0cnVt ZW50YXRpb24iCisJaGVscAorCSAgQ29tcGlsZXIgZGlyZWN0bHkgaW5zZXJ0cyBjb2RlIGNo ZWNraW5nIHNoYWRvdyBtZW1vcnkgYmVmb3JlCisJICBtZW1vcnkgYWNjZXNzZXMuIFRoaXMg aXMgZmFzdGVyIHRoYW4gb3V0bGluZSAoaW4gc29tZSB3b3JrbG9hZHMKKwkgIGl0IGdpdmVz IGFib3V0IHgyIGJvb3N0IG92ZXIgb3V0bGluZSBpbnN0cnVtZW50YXRpb24pLCBidXQKKwkg IG1ha2Uga2VybmVsJ3MgLnRleHQgc2l6ZSBtdWNoIGJpZ2dlci4KKworZW5kY2hvaWNlCisK K2NvbmZpZyBURVNUX0tBU0FOCisJdHJpc3RhdGUgIk1vZHVsZSBmb3IgdGVzdGluZyBrYXNh biBmb3IgYnVnIGRldGVjdGlvbiIKKwlkZXBlbmRzIG9uIG0gJiYgS0FTQU4KKwloZWxwCisJ ICBUaGlzIGlzIGEgdGVzdCBtb2R1bGUgZG9pbmcgdmFyaW91cyBuYXN0eSB0aGluZ3MgbGlr ZQorCSAgb3V0IG9mIGJvdW5kcyBhY2Nlc3NlcywgdXNlIGFmdGVyIGZyZWUuIEl0IGlzIHVz ZWZ1bCBmb3IgdGVzdGluZworCSAga2VybmVsIGRlYnVnZ2luZyBmZWF0dXJlcyBsaWtlIGtl cm5lbCBhZGRyZXNzIHNhbml0aXplci4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9NYWtl ZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCA5ZWZlNDgwLi44YmQzMzJhIDEwMDY0NAotLS0g YS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw3IEBAIG9i ai15ICs9IHN0cmluZ19oZWxwZXJzLm8KIG9iai0kKENPTkZJR19URVNUX1NUUklOR19IRUxQ RVJTKSArPSB0ZXN0LXN0cmluZ19oZWxwZXJzLm8KIG9iai15ICs9IGtzdHJ0b3gubwogb2Jq LSQoQ09ORklHX1RFU1RfS1NUUlRPWCkgKz0gdGVzdC1rc3RydG94Lm8KK29iai0kKENPTkZJ R19URVNUX0tBU0FOKSArPSB0ZXN0X2thc2FuLm8KIAogaWZlcSAoJChDT05GSUdfREVCVUdf S09CSkVDVCkseSkKIENGTEFHU19rb2JqZWN0Lm8gKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEv bGliL2lkci5jIGIvbGliL2lkci5jCmluZGV4IGEzYmZkZTguLmRkMDZjY2IgMTAwNjQ0Ci0t LSBhL2xpYi9pZHIuYworKysgYi9saWIvaWRyLmMKQEAgLTYxOCwyNiArNjE4LDI3IEBAIHZv aWQgX19pZHJfcmVtb3ZlX2FsbChzdHJ1Y3QgaWRyICppZHApCiAJc3RydWN0IGlkcl9sYXll ciAqKnBhYSA9ICZwYVswXTsKIAogCW4gPSBpZHAtPmxheWVycyAqIElEUl9CSVRTOwotCXAg PSBpZHAtPnRvcDsKKwkqcGFhID0gaWRwLT50b3A7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGlk cC0+dG9wLCBOVUxMKTsKIAltYXggPSBpZHJfbWF4KGlkcC0+bGF5ZXJzKTsKIAogCWlkID0g MDsKIAl3aGlsZSAoaWQgPj0gMCAmJiBpZCA8PSBtYXgpIHsKKwkJcCA9ICpwYWE7CiAJCXdo aWxlIChuID4gSURSX0JJVFMgJiYgcCkgewogCQkJbiAtPSBJRFJfQklUUzsKLQkJCSpwYWEr KyA9IHA7CiAJCQlwID0gcC0+YXJ5WyhpZCA+PiBuKSAmIElEUl9NQVNLXTsKKwkJCSorK3Bh YSA9IHA7CiAJCX0KIAogCQlidF9tYXNrID0gaWQ7CiAJCWlkICs9IDEgPDwgbjsKIAkJLyog R2V0IHRoZSBoaWdoZXN0IGJpdCB0aGF0IHRoZSBhYm92ZSBhZGQgY2hhbmdlZCBmcm9tIDAt PjEuICovCiAJCXdoaWxlIChuIDwgZmxzKGlkIF4gYnRfbWFzaykpIHsKLQkJCWlmIChwKQot CQkJCWZyZWVfbGF5ZXIoaWRwLCBwKTsKKwkJCWlmICgqcGFhKQorCQkJCWZyZWVfbGF5ZXIo aWRwLCAqcGFhKTsKIAkJCW4gKz0gSURSX0JJVFM7Ci0JCQlwID0gKi0tcGFhOworCQkJLS1w YWE7CiAJCX0KIAl9CiAJaWRwLT5sYXllcnMgPSAwOwpAQCAtNzIxLDE1ICs3MjIsMTYgQEAg aW50IGlkcl9mb3JfZWFjaChzdHJ1Y3QgaWRyICppZHAsCiAJc3RydWN0IGlkcl9sYXllciAq KnBhYSA9ICZwYVswXTsKIAogCW4gPSBpZHAtPmxheWVycyAqIElEUl9CSVRTOwotCXAgPSBy Y3VfZGVyZWZlcmVuY2VfcmF3KGlkcC0+dG9wKTsKKwkqcGFhID0gcmN1X2RlcmVmZXJlbmNl X3JhdyhpZHAtPnRvcCk7CiAJbWF4ID0gaWRyX21heChpZHAtPmxheWVycyk7CiAKIAlpZCA9 IDA7CiAJd2hpbGUgKGlkID49IDAgJiYgaWQgPD0gbWF4KSB7CisJCXAgPSAqcGFhOwogCQl3 aGlsZSAobiA+IDAgJiYgcCkgewogCQkJbiAtPSBJRFJfQklUUzsKLQkJCSpwYWErKyA9IHA7 CiAJCQlwID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhwLT5hcnlbKGlkID4+IG4pICYgSURSX01B U0tdKTsKKwkJCSorK3BhYSA9IHA7CiAJCX0KIAogCQlpZiAocCkgewpAQCAtNzQxLDcgKzc0 Myw3IEBAIGludCBpZHJfZm9yX2VhY2goc3RydWN0IGlkciAqaWRwLAogCQlpZCArPSAxIDw8 IG47CiAJCXdoaWxlIChuIDwgZmxzKGlkKSkgewogCQkJbiArPSBJRFJfQklUUzsKLQkJCXAg PSAqLS1wYWE7CisJCQktLXBhYTsKIAkJfQogCX0KIApAQCAtNzY5LDE3ICs3NzEsMTggQEAg dm9pZCAqaWRyX2dldF9uZXh0KHN0cnVjdCBpZHIgKmlkcCwgaW50ICpuZXh0aWRwKQogCWlu dCBuLCBtYXg7CiAKIAkvKiBmaW5kIGZpcnN0IGVudCAqLwotCXAgPSByY3VfZGVyZWZlcmVu Y2VfcmF3KGlkcC0+dG9wKTsKKwlwID0gKnBhYSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaWRw LT50b3ApOwogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiAJbiA9IChwLT5sYXllciArIDEp ICogSURSX0JJVFM7CiAJbWF4ID0gaWRyX21heChwLT5sYXllciArIDEpOwogCiAJd2hpbGUg KGlkID49IDAgJiYgaWQgPD0gbWF4KSB7CisJCXAgPSAqcGFhOwogCQl3aGlsZSAobiA+IDAg JiYgcCkgewogCQkJbiAtPSBJRFJfQklUUzsKLQkJCSpwYWErKyA9IHA7CiAJCQlwID0gcmN1 X2RlcmVmZXJlbmNlX3JhdyhwLT5hcnlbKGlkID4+IG4pICYgSURSX01BU0tdKTsKKwkJCSor K3BhYSA9IHA7CiAJCX0KIAogCQlpZiAocCkgewpAQCAtNzk3LDcgKzgwMCw3IEBAIHZvaWQg Kmlkcl9nZXRfbmV4dChzdHJ1Y3QgaWRyICppZHAsIGludCAqbmV4dGlkcCkKIAkJaWQgPSBy b3VuZF91cChpZCArIDEsIDEgPDwgbik7CiAJCXdoaWxlIChuIDwgZmxzKGlkKSkgewogCQkJ biArPSBJRFJfQklUUzsKLQkJCXAgPSAqLS1wYWE7CisJCQktLXBhYTsKIAkJfQogCX0KIAly ZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2xpYi9zdHJuY3B5X2Zyb21fdXNlci5jIGIvbGli L3N0cm5jcHlfZnJvbV91c2VyLmMKaW5kZXggYmIyYjIwMS4uYjVlMmFkOCAxMDA2NDQKLS0t IGEvbGliL3N0cm5jcHlfZnJvbV91c2VyLmMKKysrIGIvbGliL3N0cm5jcHlfZnJvbV91c2Vy LmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVk ZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2thc2FuLWNoZWNrcy5oPgog I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAK QEAgLTEwNiw2ICsxMDcsNyBAQCBsb25nIHN0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwg Y29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCkKIAlzcmNfYWRkciA9ICh1bnNp Z25lZCBsb25nKXNyYzsKIAlpZiAobGlrZWx5KHNyY19hZGRyIDwgbWF4X2FkZHIpKSB7CiAJ CXVuc2lnbmVkIGxvbmcgbWF4ID0gbWF4X2FkZHIgLSBzcmNfYWRkcjsKKwkJa2FzYW5fY2hl Y2tfd3JpdGUoZHN0LCBjb3VudCk7CiAJCXJldHVybiBkb19zdHJuY3B5X2Zyb21fdXNlcihk c3QsIHNyYywgY291bnQsIG1heCk7CiAJfQogCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0 IGEvbGliL3Rlc3Rfa2FzYW4uYyBiL2xpYi90ZXN0X2thc2FuLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0MGNhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi90 ZXN0X2thc2FuLmMKQEAgLTAsMCArMSwyNzcgQEAKKy8qCisgKgorICogQ29weXJpZ2h0IChj KSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKiBBdXRob3I6IEFuZHJl eSBSeWFiaW5pbiA8YS5yeWFiaW5pbiBhdCBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJrYXNh biB0ZXN0OiAlcyAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgorI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K KyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K Kworc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGttYWxsb2Nfb29iX3JpZ2h0KHZvaWQp Cit7CisJY2hhciAqcHRyOworCXNpemVfdCBzaXplID0gMTIzOworCisJcHJfaW5mbygib3V0 LW9mLWJvdW5kcyB0byByaWdodFxuIik7CisJcHRyID0ga21hbGxvYyhzaXplLCBHRlBfS0VS TkVMKTsKKwlpZiAoIXB0cikgeworCQlwcl9lcnIoIkFsbG9jYXRpb24gZmFpbGVkXG4iKTsK KwkJcmV0dXJuOworCX0KKworCXB0cltzaXplXSA9ICd4JzsKKwlrZnJlZShwdHIpOworfQor CitzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQga21hbGxvY19vb2JfbGVmdCh2b2lkKQor eworCWNoYXIgKnB0cjsKKwlzaXplX3Qgc2l6ZSA9IDE1OworCisJcHJfaW5mbygib3V0LW9m LWJvdW5kcyB0byBsZWZ0XG4iKTsKKwlwdHIgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwp OworCWlmICghcHRyKSB7CisJCXByX2VycigiQWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQly ZXR1cm47CisJfQorCisJKnB0ciA9ICoocHRyIC0gMSk7CisJa2ZyZWUocHRyKTsKK30KKwor c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGttYWxsb2Nfbm9kZV9vb2JfcmlnaHQodm9p ZCkKK3sKKwljaGFyICpwdHI7CisJc2l6ZV90IHNpemUgPSA0MDk2OworCisJcHJfaW5mbygi a21hbGxvY19ub2RlKCk6IG91dC1vZi1ib3VuZHMgdG8gcmlnaHRcbiIpOworCXB0ciA9IGtt YWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMLCAwKTsKKwlpZiAoIXB0cikgeworCQlwcl9l cnIoIkFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXB0cltzaXpl XSA9IDA7CisJa2ZyZWUocHRyKTsKK30KKworc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0 IGttYWxsb2NfbGFyZ2Vfb29iX3JpZ3RoKHZvaWQpCit7CisJY2hhciAqcHRyOworCXNpemVf dCBzaXplID0gS01BTExPQ19NQVhfQ0FDSEVfU0laRSArIDEwOworCisJcHJfaW5mbygia21h bGxvYyBsYXJnZSBhbGxvY2F0aW9uOiBvdXQtb2YtYm91bmRzIHRvIHJpZ2h0XG4iKTsKKwlw dHIgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghcHRyKSB7CisJCXByX2Vy cigiQWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJcHRyW3NpemVd ID0gMDsKKwlrZnJlZShwdHIpOworfQorCitzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQg a21hbGxvY19vb2Jfa3JlYWxsb2NfbW9yZSh2b2lkKQoreworCWNoYXIgKnB0cjEsICpwdHIy OworCXNpemVfdCBzaXplMSA9IDE3OworCXNpemVfdCBzaXplMiA9IDE5OworCisJcHJfaW5m bygib3V0LW9mLWJvdW5kcyBhZnRlciBrcmVhbGxvYyBtb3JlXG4iKTsKKwlwdHIxID0ga21h bGxvYyhzaXplMSwgR0ZQX0tFUk5FTCk7CisJcHRyMiA9IGtyZWFsbG9jKHB0cjEsIHNpemUy LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXB0cjEgfHwgIXB0cjIpIHsKKwkJcHJfZXJyKCJBbGxv Y2F0aW9uIGZhaWxlZFxuIik7CisJCWtmcmVlKHB0cjEpOworCQlyZXR1cm47CisJfQorCisJ cHRyMltzaXplMl0gPSAneCc7CisJa2ZyZWUocHRyMik7Cit9CisKK3N0YXRpYyBub2lubGlu ZSB2b2lkIF9faW5pdCBrbWFsbG9jX29vYl9rcmVhbGxvY19sZXNzKHZvaWQpCit7CisJY2hh ciAqcHRyMSwgKnB0cjI7CisJc2l6ZV90IHNpemUxID0gMTc7CisJc2l6ZV90IHNpemUyID0g MTU7CisKKwlwcl9pbmZvKCJvdXQtb2YtYm91bmRzIGFmdGVyIGtyZWFsbG9jIGxlc3NcbiIp OworCXB0cjEgPSBrbWFsbG9jKHNpemUxLCBHRlBfS0VSTkVMKTsKKwlwdHIyID0ga3JlYWxs b2MocHRyMSwgc2l6ZTIsIEdGUF9LRVJORUwpOworCWlmICghcHRyMSB8fCAhcHRyMikgewor CQlwcl9lcnIoIkFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJa2ZyZWUocHRyMSk7CisJCXJl dHVybjsKKwl9CisJcHRyMltzaXplMV0gPSAneCc7CisJa2ZyZWUocHRyMik7Cit9CisKK3N0 YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBrbWFsbG9jX29vYl8xNih2b2lkKQoreworCXN0 cnVjdCB7CisJCXU2NCB3b3Jkc1syXTsKKwl9ICpwdHIxLCAqcHRyMjsKKworCXByX2luZm8o ImttYWxsb2Mgb3V0LW9mLWJvdW5kcyBmb3IgMTYtYnl0ZXMgYWNjZXNzXG4iKTsKKwlwdHIx ID0ga21hbGxvYyhzaXplb2YoKnB0cjEpIC0gMywgR0ZQX0tFUk5FTCk7CisJcHRyMiA9IGtt YWxsb2Moc2l6ZW9mKCpwdHIyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwdHIxIHx8ICFwdHIy KSB7CisJCXByX2VycigiQWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlrZnJlZShwdHIxKTsK KwkJa2ZyZWUocHRyMik7CisJCXJldHVybjsKKwl9CisJKnB0cjEgPSAqcHRyMjsKKwlrZnJl ZShwdHIxKTsKKwlrZnJlZShwdHIyKTsKK30KKworc3RhdGljIG5vaW5saW5lIHZvaWQgX19p bml0IGttYWxsb2Nfb29iX2luX21lbXNldCh2b2lkKQoreworCWNoYXIgKnB0cjsKKwlzaXpl X3Qgc2l6ZSA9IDY2NjsKKworCXByX2luZm8oIm91dC1vZi1ib3VuZHMgaW4gbWVtc2V0XG4i KTsKKwlwdHIgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghcHRyKSB7CisJ CXByX2VycigiQWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJbWVt c2V0KHB0ciwgMCwgc2l6ZSs1KTsKKwlrZnJlZShwdHIpOworfQorCitzdGF0aWMgbm9pbmxp bmUgdm9pZCBfX2luaXQga21hbGxvY191YWYodm9pZCkKK3sKKwljaGFyICpwdHI7CisJc2l6 ZV90IHNpemUgPSAxMDsKKworCXByX2luZm8oInVzZS1hZnRlci1mcmVlXG4iKTsKKwlwdHIg PSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghcHRyKSB7CisJCXByX2Vycigi QWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJa2ZyZWUocHRyKTsK KwkqKHB0ciArIDgpID0gJ3gnOworfQorCitzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQg a21hbGxvY191YWZfbWVtc2V0KHZvaWQpCit7CisJY2hhciAqcHRyOworCXNpemVfdCBzaXpl ID0gMzM7CisKKwlwcl9pbmZvKCJ1c2UtYWZ0ZXItZnJlZSBpbiBtZW1zZXRcbiIpOworCXB0 ciA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwdHIpIHsKKwkJcHJfZXJy KCJBbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlrZnJlZShwdHIp OworCW1lbXNldChwdHIsIDAsIHNpemUpOworfQorCitzdGF0aWMgbm9pbmxpbmUgdm9pZCBf X2luaXQga21hbGxvY191YWYyKHZvaWQpCit7CisJY2hhciAqcHRyMSwgKnB0cjI7CisJc2l6 ZV90IHNpemUgPSA0MzsKKworCXByX2luZm8oInVzZS1hZnRlci1mcmVlIGFmdGVyIGFub3Ro ZXIga21hbGxvY1xuIik7CisJcHRyMSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFwdHIxKSB7CisJCXByX2VycigiQWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1 cm47CisJfQorCisJa2ZyZWUocHRyMSk7CisJcHRyMiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFwdHIyKSB7CisJCXByX2VycigiQWxsb2NhdGlvbiBmYWlsZWRcbiIp OworCQlyZXR1cm47CisJfQorCisJcHRyMVs0MF0gPSAneCc7CisJa2ZyZWUocHRyMik7Cit9 CisKK3N0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBrbWVtX2NhY2hlX29vYih2b2lkKQor eworCWNoYXIgKnA7CisJc2l6ZV90IHNpemUgPSAyMDA7CisJc3RydWN0IGttZW1fY2FjaGUg KmNhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInRlc3RfY2FjaGUiLAorCQkJCQkJc2l6ZSwg MCwKKwkJCQkJCTAsIE5VTEwpOworCWlmICghY2FjaGUpIHsKKwkJcHJfZXJyKCJDYWNoZSBh bGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisJcHJfaW5mbygib3V0LW9m LWJvdW5kcyBpbiBrbWVtX2NhY2hlX2FsbG9jXG4iKTsKKwlwID0ga21lbV9jYWNoZV9hbGxv YyhjYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKSB7CisJCXByX2VycigiQWxsb2NhdGlv biBmYWlsZWRcbiIpOworCQlrbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGUpOworCQlyZXR1cm47 CisJfQorCisJKnAgPSBwW3NpemVdOworCWttZW1fY2FjaGVfZnJlZShjYWNoZSwgcCk7CisJ a21lbV9jYWNoZV9kZXN0cm95KGNhY2hlKTsKK30KKworc3RhdGljIGNoYXIgZ2xvYmFsX2Fy cmF5WzEwXTsKKworc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGthc2FuX2dsb2JhbF9v b2Iodm9pZCkKK3sKKwl2b2xhdGlsZSBpbnQgaSA9IDM7CisJY2hhciAqcCA9ICZnbG9iYWxf YXJyYXlbQVJSQVlfU0laRShnbG9iYWxfYXJyYXkpICsgaV07CisKKwlwcl9pbmZvKCJvdXQt b2YtYm91bmRzIGdsb2JhbCB2YXJpYWJsZVxuIik7CisJKih2b2xhdGlsZSBjaGFyICopcDsK K30KKworc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGthc2FuX3N0YWNrX29vYih2b2lk KQoreworCWNoYXIgc3RhY2tfYXJyYXlbMTBdOworCXZvbGF0aWxlIGludCBpID0gMDsKKwlj aGFyICpwID0gJnN0YWNrX2FycmF5W0FSUkFZX1NJWkUoc3RhY2tfYXJyYXkpICsgaV07CisK Kwlwcl9pbmZvKCJvdXQtb2YtYm91bmRzIG9uIHN0YWNrXG4iKTsKKwkqKHZvbGF0aWxlIGNo YXIgKilwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBrbWFsbG9jX3Rlc3RzX2luaXQodm9p ZCkKK3sKKwlrbWFsbG9jX29vYl9yaWdodCgpOworCWttYWxsb2Nfb29iX2xlZnQoKTsKKwlr bWFsbG9jX25vZGVfb29iX3JpZ2h0KCk7CisJa21hbGxvY19sYXJnZV9vb2JfcmlndGgoKTsK KwlrbWFsbG9jX29vYl9rcmVhbGxvY19tb3JlKCk7CisJa21hbGxvY19vb2Jfa3JlYWxsb2Nf bGVzcygpOworCWttYWxsb2Nfb29iXzE2KCk7CisJa21hbGxvY19vb2JfaW5fbWVtc2V0KCk7 CisJa21hbGxvY191YWYoKTsKKwlrbWFsbG9jX3VhZl9tZW1zZXQoKTsKKwlrbWFsbG9jX3Vh ZjIoKTsKKwlrbWVtX2NhY2hlX29vYigpOworCWthc2FuX3N0YWNrX29vYigpOworCWthc2Fu X2dsb2JhbF9vb2IoKTsKKwlyZXR1cm4gLUVBR0FJTjsKK30KKworbW9kdWxlX2luaXQoa21h bGxvY190ZXN0c19pbml0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBh L21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggNzJjNWFjYi4uYTRjNzA2YSAxMDA2 NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTIsNiArMiw5IEBA CiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXggbWVtb3J5IG1hbmFnZXIuCiAjCiAKK0tBU0FO X1NBTklUSVpFX3NsYWJfY29tbW9uLm8gOj0gbgorS0FTQU5fU0FOSVRJWkVfc2x1Yi5vIDo9 IG4KKwogbW11LXkJCQk6PSBub21tdS5vCiBtbXUtJChDT05GSUdfTU1VKQk6PSBmcmVtYXAu byBoaWdobWVtLm8gbWFkdmlzZS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcCiAJCQkgICBtbG9j ay5vIG1tYXAubyBtcHJvdGVjdC5vIG1yZW1hcC5vIG1zeW5jLm8gcm1hcC5vIFwKQEAgLTQ0 LDYgKzQ3LDcgQEAgb2JqLSQoQ09ORklHX1BBR0VfUE9JU09OSU5HKSArPSBkZWJ1Zy1wYWdl YWxsb2Mubwogb2JqLSQoQ09ORklHX1NMQUIpICs9IHNsYWIubwogb2JqLSQoQ09ORklHX1NM VUIpICs9IHNsdWIubwogb2JqLSQoQ09ORklHX0tNRU1DSEVDSykgKz0ga21lbWNoZWNrLm8K K29iai0kKENPTkZJR19LQVNBTikJKz0ga2FzYW4vCiBvYmotJChDT05GSUdfRkFJTFNMQUIp ICs9IGZhaWxzbGFiLm8KIG9iai0kKENPTkZJR19NRU1PUllfSE9UUExVRykgKz0gbWVtb3J5 X2hvdHBsdWcubwogb2JqLSQoQ09ORklHX0ZTX1hJUCkgKz0gZmlsZW1hcF94aXAubwpkaWZm IC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jCmluZGV4IGVlYWFh OTIuLmVhNGEzMDAgMTAwNjQ0Ci0tLSBhL21tL2NvbXBhY3Rpb24uYworKysgYi9tbS9jb21w YWN0aW9uLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgog I2luY2x1ZGUgPGxpbnV4L2JhbGxvb25fY29tcGFjdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4 L3BhZ2UtaXNvbGF0aW9uLmg+CisjaW5jbHVkZSA8bGludXgva2FzYW4uaD4KICNpbmNsdWRl ICJpbnRlcm5hbC5oIgogCiAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT04KQEAgLTU5LDYgKzYw LDcgQEAgc3RhdGljIHZvaWQgbWFwX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiAJ bGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCBsaXN0LCBscnUpIHsKIAkJYXJjaF9hbGxvY19w YWdlKHBhZ2UsIDApOwogCQlrZXJuZWxfbWFwX3BhZ2VzKHBhZ2UsIDEsIDEpOworCQlrYXNh bl9hbGxvY19wYWdlcyhwYWdlLCAwKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL21tL2thc2Fu L01ha2VmaWxlIGIvbW0va2FzYW4vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYmQ4MzdiOAotLS0gL2Rldi9udWxsCisrKyBiL21tL2thc2FuL01ha2Vm aWxlCkBAIC0wLDAgKzEsOCBAQAorS0FTQU5fU0FOSVRJWkUgOj0gbgorCitDRkxBR1NfUkVN T1ZFX2thc2FuLm8gPSAtcGcKKyMgRnVuY3Rpb24gc3BsaXR0ZXIgY2F1c2VzIHVubmVjZXNz YXJ5IHNwbGl0cyBpbiBfX2FzYW5fbG9hZDEvX19hc2FuX3N0b3JlMQorIyBzZWU6IGh0dHBz Oi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTYzNTMzCitDRkxBR1Nf a2FzYW4ubyA6PSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLWNvbnNlcnZlLXN0YWNrIC1mbm8t c3RhY2stcHJvdGVjdG9yKQorCitvYmoteSA6PSBrYXNhbi5vIHJlcG9ydC5vCmRpZmYgLS1n aXQgYS9tbS9rYXNhbi9rYXNhbi5jIGIvbW0va2FzYW4va2FzYW4uYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY5MWNjCi0tLSAvZGV2L251bGwKKysrIGIvbW0v a2FzYW4va2FzYW4uYwpAQCAtMCwwICsxLDUzMiBAQAorLyoKKyAqIFRoaXMgZmlsZSBjb250 YWlucyBzaGFkb3cgbWVtb3J5IG1hbmlwdWxhdGlvbiBjb2RlLgorICoKKyAqIENvcHlyaWdo dCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQXV0aG9yOiBB bmRyZXkgUnlhYmluaW4gPGEucnlhYmluaW4gYXQgc2Ftc3VuZy5jb20+CisgKgorICogU29t ZSBvZiBjb2RlIGJvcnJvd2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3hhaXJ5L2xpbnV4 IGJ5CisgKiAgICAgICAgQW5kcmV5IEtvbm92YWxvdiA8YWRlY2guZm8gYXQgZ21haWwuY29t PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNkZWZpbmUg cHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKyNkZWZpbmUgRElTQUJMRV9C UkFOQ0hfUFJPRklMSU5HCisKKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRl IDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8 bGludXgvbWVtYmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRl IDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxp bnV4L3ByaW50ay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KKyNpbmNsdWRlIDxs aW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxp bnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9rYXNhbi5oPgorCisjaW5jbHVkZSAi a2FzYW4uaCIKKyNpbmNsdWRlICIuLi9zbGFiLmgiCisKKy8qCisgKiBQb2lzb25zIHRoZSBz aGFkb3cgbWVtb3J5IGZvciAnc2l6ZScgYnl0ZXMgc3RhcnRpbmcgZnJvbSAnYWRkcicuCisg KiBNZW1vcnkgYWRkcmVzc2VzIHNob3VsZCBiZSBhbGlnbmVkIHRvIEtBU0FOX1NIQURPV19T Q0FMRV9TSVpFLgorICovCitzdGF0aWMgdm9pZCBrYXNhbl9wb2lzb25fc2hhZG93KGNvbnN0 IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplLCB1OCB2YWx1ZSkKK3sKKwl2b2lkICpzaGFk b3dfc3RhcnQsICpzaGFkb3dfZW5kOworCisJc2hhZG93X3N0YXJ0ID0ga2FzYW5fbWVtX3Rv X3NoYWRvdyhhZGRyZXNzKTsKKwlzaGFkb3dfZW5kID0ga2FzYW5fbWVtX3RvX3NoYWRvdyhh ZGRyZXNzICsgc2l6ZSk7CisKKwltZW1zZXQoc2hhZG93X3N0YXJ0LCB2YWx1ZSwgc2hhZG93 X2VuZCAtIHNoYWRvd19zdGFydCk7Cit9CisKK3ZvaWQga2FzYW5fdW5wb2lzb25fc2hhZG93 KGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplKQoreworCWthc2FuX3BvaXNvbl9z aGFkb3coYWRkcmVzcywgc2l6ZSwgMCk7CisKKwlpZiAoc2l6ZSAmIEtBU0FOX1NIQURPV19N QVNLKSB7CisJCXU4ICpzaGFkb3cgPSAodTggKilrYXNhbl9tZW1fdG9fc2hhZG93KGFkZHJl c3MgKyBzaXplKTsKKwkJKnNoYWRvdyA9IHNpemUgJiBLQVNBTl9TSEFET1dfTUFTSzsKKwl9 Cit9CisKKworLyoKKyAqIEFsbCBmdW5jdGlvbnMgYmVsb3cgYWx3YXlzIGlubGluZWQgc28g Y29tcGlsZXIgY291bGQKKyAqIHBlcmZvcm0gYmV0dGVyIG9wdGltaXphdGlvbnMgaW4gZWFj aCBvZiBfX2FzYW5fbG9hZFgvX19hc3NuX3N0b3JlWAorICogZGVwZW5kaW5nIG9uIG1lbW9y eSBhY2Nlc3Mgc2l6ZSBYLgorICovCisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBt ZW1vcnlfaXNfcG9pc29uZWRfMSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJczggc2hhZG93 X3ZhbHVlID0gKihzOCAqKWthc2FuX21lbV90b19zaGFkb3coKHZvaWQgKilhZGRyKTsKKwor CWlmICh1bmxpa2VseShzaGFkb3dfdmFsdWUpKSB7CisJCXM4IGxhc3RfYWNjZXNzaWJsZV9i eXRlID0gYWRkciAmIEtBU0FOX1NIQURPV19NQVNLOworCQlyZXR1cm4gdW5saWtlbHkobGFz dF9hY2Nlc3NpYmxlX2J5dGUgPj0gc2hhZG93X3ZhbHVlKTsKKwl9CisKKwlyZXR1cm4gZmFs c2U7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBtZW1vcnlfaXNfcG9pc29u ZWRfMih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTE2ICpzaGFkb3dfYWRkciA9ICh1MTYg KilrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopYWRkcik7CisKKwlpZiAodW5saWtlbHko KnNoYWRvd19hZGRyKSkgeworCQlpZiAobWVtb3J5X2lzX3BvaXNvbmVkXzEoYWRkciArIDEp KQorCQkJcmV0dXJuIHRydWU7CisKKwkJaWYgKGxpa2VseSgoKGFkZHIgKyAxKSAmIEtBU0FO X1NIQURPV19NQVNLKSAhPSAwKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlyZXR1cm4gdW5s aWtlbHkoKih1OCAqKXNoYWRvd19hZGRyKTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK K3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBtZW1vcnlfaXNfcG9pc29uZWRfNCh1bnNp Z25lZCBsb25nIGFkZHIpCit7CisJdTE2ICpzaGFkb3dfYWRkciA9ICh1MTYgKilrYXNhbl9t ZW1fdG9fc2hhZG93KCh2b2lkICopYWRkcik7CisKKwlpZiAodW5saWtlbHkoKnNoYWRvd19h ZGRyKSkgeworCQlpZiAobWVtb3J5X2lzX3BvaXNvbmVkXzEoYWRkciArIDMpKQorCQkJcmV0 dXJuIHRydWU7CisKKwkJaWYgKGxpa2VseSgoKGFkZHIgKyAzKSAmIEtBU0FOX1NIQURPV19N QVNLKSA+PSAzKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlyZXR1cm4gdW5saWtlbHkoKih1 OCAqKXNoYWRvd19hZGRyKTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBf X2Fsd2F5c19pbmxpbmUgYm9vbCBtZW1vcnlfaXNfcG9pc29uZWRfOCh1bnNpZ25lZCBsb25n IGFkZHIpCit7CisJdTE2ICpzaGFkb3dfYWRkciA9ICh1MTYgKilrYXNhbl9tZW1fdG9fc2hh ZG93KCh2b2lkICopYWRkcik7CisKKwlpZiAodW5saWtlbHkoKnNoYWRvd19hZGRyKSkgewor CQlpZiAobWVtb3J5X2lzX3BvaXNvbmVkXzEoYWRkciArIDcpKQorCQkJcmV0dXJuIHRydWU7 CisKKwkJaWYgKGxpa2VseSgoKGFkZHIgKyA3KSAmIEtBU0FOX1NIQURPV19NQVNLKSA+PSA3 KSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlyZXR1cm4gdW5saWtlbHkoKih1OCAqKXNoYWRv d19hZGRyKTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19p bmxpbmUgYm9vbCBtZW1vcnlfaXNfcG9pc29uZWRfMTYodW5zaWduZWQgbG9uZyBhZGRyKQor eworCXUzMiAqc2hhZG93X2FkZHIgPSAodTMyICopa2FzYW5fbWVtX3RvX3NoYWRvdygodm9p ZCAqKWFkZHIpOworCisJaWYgKHVubGlrZWx5KCpzaGFkb3dfYWRkcikpIHsKKwkJdTE2IHNo YWRvd19maXJzdF9ieXRlcyA9ICoodTE2ICopc2hhZG93X2FkZHI7CisJCXM4IGxhc3RfYnl0 ZSA9IChhZGRyICsgMTUpICYgS0FTQU5fU0hBRE9XX01BU0s7CisKKwkJaWYgKHVubGlrZWx5 KHNoYWRvd19maXJzdF9ieXRlcykpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlpZiAobGlrZWx5 KCFsYXN0X2J5dGUpKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXJldHVybiBtZW1vcnlfaXNf cG9pc29uZWRfMShhZGRyICsgMTUpOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3Rh dGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIGJ5dGVzX2lzX3plcm8oY29uc3Qg dTggKnN0YXJ0LAorCQkJCQlzaXplX3Qgc2l6ZSkKK3sKKwl3aGlsZSAoc2l6ZSkgeworCQlp ZiAodW5saWtlbHkoKnN0YXJ0KSkKKwkJCXJldHVybiAodW5zaWduZWQgbG9uZylzdGFydDsK KwkJc3RhcnQrKzsKKwkJc2l6ZS0tOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg X19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2lzX3plcm8oY29uc3Qgdm9p ZCAqc3RhcnQsCisJCQkJCQljb25zdCB2b2lkICplbmQpCit7CisJdW5zaWduZWQgaW50IHdv cmRzOworCXVuc2lnbmVkIGxvbmcgcmV0OworCXVuc2lnbmVkIGludCBwcmVmaXggPSAodW5z aWduZWQgbG9uZylzdGFydCAlIDg7CisKKwlpZiAoZW5kIC0gc3RhcnQgPD0gMTYpCisJCXJl dHVybiBieXRlc19pc196ZXJvKHN0YXJ0LCBlbmQgLSBzdGFydCk7CisKKwlpZiAocHJlZml4 KSB7CisJCXByZWZpeCA9IDggLSBwcmVmaXg7CisJCXJldCA9IGJ5dGVzX2lzX3plcm8oc3Rh cnQsIHByZWZpeCk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKKwkJ c3RhcnQgKz0gcHJlZml4OworCX0KKworCXdvcmRzID0gKGVuZCAtIHN0YXJ0KSAvIDg7CisJ d2hpbGUgKHdvcmRzKSB7CisJCWlmICh1bmxpa2VseSgqKHU2NCAqKXN0YXJ0KSkKKwkJCXJl dHVybiBieXRlc19pc196ZXJvKHN0YXJ0LCA4KTsKKwkJc3RhcnQgKz0gODsKKwkJd29yZHMt LTsKKwl9CisKKwlyZXR1cm4gYnl0ZXNfaXNfemVybyhzdGFydCwgKGVuZCAtIHN0YXJ0KSAl IDgpOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbWVtb3J5X2lzX3BvaXNv bmVkX24odW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkJc2l6ZV90IHNpemUpCit7CisJdW5z aWduZWQgbG9uZyByZXQ7CisKKwlyZXQgPSBtZW1vcnlfaXNfemVybyhrYXNhbl9tZW1fdG9f c2hhZG93KCh2b2lkICopYWRkciksCisJCQlrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICop YWRkciArIHNpemUgLSAxKSArIDEpOworCisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJdW5z aWduZWQgbG9uZyBsYXN0X2J5dGUgPSBhZGRyICsgc2l6ZSAtIDE7CisJCXM4ICpsYXN0X3No YWRvdyA9IChzOCAqKWthc2FuX21lbV90b19zaGFkb3coKHZvaWQgKilsYXN0X2J5dGUpOwor CisJCWlmICh1bmxpa2VseShyZXQgIT0gKHVuc2lnbmVkIGxvbmcpbGFzdF9zaGFkb3cgfHwK KwkJCSgobGFzdF9ieXRlICYgS0FTQU5fU0hBRE9XX01BU0spID49ICpsYXN0X3NoYWRvdykp KQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIF9f YWx3YXlzX2lubGluZSBib29sIG1lbW9yeV9pc19wb2lzb25lZCh1bnNpZ25lZCBsb25nIGFk ZHIsIHNpemVfdCBzaXplKQoreworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkg eworCQlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIG1lbW9yeV9pc19w b2lzb25lZF8xKGFkZHIpOworCQljYXNlIDI6CisJCQlyZXR1cm4gbWVtb3J5X2lzX3BvaXNv bmVkXzIoYWRkcik7CisJCWNhc2UgNDoKKwkJCXJldHVybiBtZW1vcnlfaXNfcG9pc29uZWRf NChhZGRyKTsKKwkJY2FzZSA4OgorCQkJcmV0dXJuIG1lbW9yeV9pc19wb2lzb25lZF84KGFk ZHIpOworCQljYXNlIDE2OgorCQkJcmV0dXJuIG1lbW9yeV9pc19wb2lzb25lZF8xNihhZGRy KTsKKwkJZGVmYXVsdDoKKwkJCUJVSUxEX0JVRygpOworCQl9CisJfQorCisJcmV0dXJuIG1l bW9yeV9pc19wb2lzb25lZF9uKGFkZHIsIHNpemUpOworfQorCitzdGF0aWMgX19hbHdheXNf aW5saW5lIHZvaWQgY2hlY2tfbWVtb3J5X3JlZ2lvbl9pbmxpbmUodW5zaWduZWQgbG9uZyBh ZGRyLAorCQkJCQkJc2l6ZV90IHNpemUsIGJvb2wgd3JpdGUsCisJCQkJCQl1bnNpZ25lZCBs b25nIHJldF9pcCkKK3sKKwlpZiAodW5saWtlbHkoc2l6ZSA9PSAwKSkKKwkJcmV0dXJuOwor CisJaWYgKHVubGlrZWx5KCh2b2lkICopYWRkciA8CisJCWthc2FuX3NoYWRvd190b19tZW0o KHZvaWQgKilLQVNBTl9TSEFET1dfU1RBUlQpKSkgeworCQlrYXNhbl9yZXBvcnQoYWRkciwg c2l6ZSwgd3JpdGUsIHJldF9pcCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobGlrZWx5KCFt ZW1vcnlfaXNfcG9pc29uZWQoYWRkciwgc2l6ZSkpKQorCQlyZXR1cm47CisKKwlrYXNhbl9y ZXBvcnQoYWRkciwgc2l6ZSwgd3JpdGUsIHJldF9pcCk7Cit9CisKK3N0YXRpYyB2b2lkIGNo ZWNrX21lbW9yeV9yZWdpb24odW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCXNpemVfdCBzaXpl LCBib29sIHdyaXRlLAorCQkJCXVuc2lnbmVkIGxvbmcgcmV0X2lwKQoreworCWNoZWNrX21l bW9yeV9yZWdpb25faW5saW5lKGFkZHIsIHNpemUsIHdyaXRlLCByZXRfaXApOworfQorCit2 b2lkIGthc2FuX2NoZWNrX3JlYWQoY29uc3Qgdm9pZCAqcCwgdW5zaWduZWQgaW50IHNpemUp Cit7CisJY2hlY2tfbWVtb3J5X3JlZ2lvbigodW5zaWduZWQgbG9uZylwLCBzaXplLCBmYWxz ZSwgX1JFVF9JUF8pOworfQorRVhQT1JUX1NZTUJPTChrYXNhbl9jaGVja19yZWFkKTsKKwor dm9pZCBrYXNhbl9jaGVja193cml0ZShjb25zdCB2b2lkICpwLCB1bnNpZ25lZCBpbnQgc2l6 ZSkKK3sKKwljaGVja19tZW1vcnlfcmVnaW9uKCh1bnNpZ25lZCBsb25nKXAsIHNpemUsIHRy dWUsIF9SRVRfSVBfKTsKK30KK0VYUE9SVF9TWU1CT0woa2FzYW5fY2hlY2tfd3JpdGUpOwor CisjdW5kZWYgbWVtc2V0Cit2b2lkICptZW1zZXQodm9pZCAqYWRkciwgaW50IGMsIHNpemVf dCBsZW4pCit7CisJY2hlY2tfbWVtb3J5X3JlZ2lvbigodW5zaWduZWQgbG9uZylhZGRyLCBs ZW4sIHRydWUsIF9SRVRfSVBfKTsKKworCXJldHVybiBfX21lbXNldChhZGRyLCBjLCBsZW4p OworfQorCisjdW5kZWYgbWVtbW92ZQordm9pZCAqbWVtbW92ZSh2b2lkICpkZXN0LCBjb25z dCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCit7CisJY2hlY2tfbWVtb3J5X3JlZ2lvbigodW5z aWduZWQgbG9uZylzcmMsIGxlbiwgZmFsc2UsIF9SRVRfSVBfKTsKKwljaGVja19tZW1vcnlf cmVnaW9uKCh1bnNpZ25lZCBsb25nKWRlc3QsIGxlbiwgdHJ1ZSwgX1JFVF9JUF8pOworCisJ cmV0dXJuIF9fbWVtbW92ZShkZXN0LCBzcmMsIGxlbik7Cit9CisKKyN1bmRlZiBtZW1jcHkK K3ZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4p Cit7CisJY2hlY2tfbWVtb3J5X3JlZ2lvbigodW5zaWduZWQgbG9uZylzcmMsIGxlbiwgZmFs c2UsIF9SRVRfSVBfKTsKKwljaGVja19tZW1vcnlfcmVnaW9uKCh1bnNpZ25lZCBsb25nKWRl c3QsIGxlbiwgdHJ1ZSwgX1JFVF9JUF8pOworCisJcmV0dXJuIF9fbWVtY3B5KGRlc3QsIHNy YywgbGVuKTsKK30KKwordm9pZCBrYXNhbl9hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFn ZSwgdW5zaWduZWQgaW50IG9yZGVyKQoreworCWlmIChsaWtlbHkoIVBhZ2VIaWdoTWVtKHBh Z2UpKSkKKwkJa2FzYW5fdW5wb2lzb25fc2hhZG93KHBhZ2VfYWRkcmVzcyhwYWdlKSwgUEFH RV9TSVpFIDw8IG9yZGVyKTsKK30KKwordm9pZCBrYXNhbl9mcmVlX3BhZ2VzKHN0cnVjdCBw YWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJaWYgKGxpa2VseSghUGFnZUhp Z2hNZW0ocGFnZSkpKQorCQlrYXNhbl9wb2lzb25fc2hhZG93KHBhZ2VfYWRkcmVzcyhwYWdl KSwKKwkJCQlQQUdFX1NJWkUgPDwgb3JkZXIsCisJCQkJS0FTQU5fRlJFRV9QQUdFKTsKK30K Kwordm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlrYXNh bl9wb2lzb25fc2hhZG93KHBhZ2VfYWRkcmVzcyhwYWdlKSwKKwkJCVBBR0VfU0laRSA8PCBj b21wb3VuZF9vcmRlcihwYWdlKSwKKwkJCUtBU0FOX0tNQUxMT0NfUkVEWk9ORSk7Cit9CisK K3ZvaWQga2FzYW5fdW5wb2lzb25fb2JqZWN0X2RhdGEoc3RydWN0IGttZW1fY2FjaGUgKmNh Y2hlLCB2b2lkICpvYmplY3QpCit7CisJa2FzYW5fdW5wb2lzb25fc2hhZG93KG9iamVjdCwg Y2FjaGUtPm9iamVjdF9zaXplKTsKK30KKwordm9pZCBrYXNhbl9wb2lzb25fb2JqZWN0X2Rh dGEoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpCit7CisJa2FzYW5f cG9pc29uX3NoYWRvdyhvYmplY3QsCisJCQlyb3VuZF91cChjYWNoZS0+b2JqZWN0X3NpemUs IEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFKSwKKwkJCUtBU0FOX0tNQUxMT0NfUkVEWk9ORSk7 Cit9CisKK3ZvaWQga2FzYW5fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUs IHZvaWQgKm9iamVjdCkKK3sKKwlrYXNhbl9rbWFsbG9jKGNhY2hlLCBvYmplY3QsIGNhY2hl LT5vYmplY3Rfc2l6ZSk7Cit9CisKK3ZvaWQga2FzYW5fc2xhYl9mcmVlKHN0cnVjdCBrbWVt X2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9 IGNhY2hlLT5vYmplY3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHJvdW5kZWRfdXBfc2l6ZSA9 IHJvdW5kX3VwKHNpemUsIEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFKTsKKworCS8qIFJDVSBz bGFicyBjb3VsZCBiZSBsZWdhbGx5IHVzZWQgYWZ0ZXIgZnJlZSB3aXRoaW4gdGhlIFJDVSBw ZXJpb2QgKi8KKwlpZiAodW5saWtlbHkoY2FjaGUtPmZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZ X1JDVSkpCisJCXJldHVybjsKKworCWthc2FuX3BvaXNvbl9zaGFkb3cob2JqZWN0LCByb3Vu ZGVkX3VwX3NpemUsIEtBU0FOX0tNQUxMT0NfRlJFRSk7Cit9CisKK3ZvaWQga2FzYW5fa21h bGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIGNvbnN0IHZvaWQgKm9iamVjdCwgc2l6 ZV90IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyByZWR6b25lX3N0YXJ0OworCXVuc2lnbmVk IGxvbmcgcmVkem9uZV9lbmQ7CisKKwlpZiAodW5saWtlbHkob2JqZWN0ID09IE5VTEwpKQor CQlyZXR1cm47CisKKwlyZWR6b25lX3N0YXJ0ID0gcm91bmRfdXAoKHVuc2lnbmVkIGxvbmcp KG9iamVjdCArIHNpemUpLAorCQkJCUtBU0FOX1NIQURPV19TQ0FMRV9TSVpFKTsKKwlyZWR6 b25lX2VuZCA9IHJvdW5kX3VwKCh1bnNpZ25lZCBsb25nKW9iamVjdCArIGNhY2hlLT5vYmpl Y3Rfc2l6ZSwKKwkJCQlLQVNBTl9TSEFET1dfU0NBTEVfU0laRSk7CisKKwlrYXNhbl91bnBv aXNvbl9zaGFkb3cob2JqZWN0LCBzaXplKTsKKwlrYXNhbl9wb2lzb25fc2hhZG93KCh2b2lk ICopcmVkem9uZV9zdGFydCwgcmVkem9uZV9lbmQgLSByZWR6b25lX3N0YXJ0LAorCQlLQVNB Tl9LTUFMTE9DX1JFRFpPTkUpOworfQorRVhQT1JUX1NZTUJPTChrYXNhbl9rbWFsbG9jKTsK Kwordm9pZCBrYXNhbl9rbWFsbG9jX2xhcmdlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNp emUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyByZWR6b25lX3N0 YXJ0OworCXVuc2lnbmVkIGxvbmcgcmVkem9uZV9lbmQ7CisKKwlpZiAodW5saWtlbHkocHRy ID09IE5VTEwpKQorCQlyZXR1cm47CisKKwlwYWdlID0gdmlydF90b19wYWdlKHB0cik7CisJ cmVkem9uZV9zdGFydCA9IHJvdW5kX3VwKCh1bnNpZ25lZCBsb25nKShwdHIgKyBzaXplKSwK KwkJCQlLQVNBTl9TSEFET1dfU0NBTEVfU0laRSk7CisJcmVkem9uZV9lbmQgPSAodW5zaWdu ZWQgbG9uZylwdHIgKyAoUEFHRV9TSVpFIDw8IGNvbXBvdW5kX29yZGVyKHBhZ2UpKTsKKwor CWthc2FuX3VucG9pc29uX3NoYWRvdyhwdHIsIHNpemUpOworCWthc2FuX3BvaXNvbl9zaGFk b3coKHZvaWQgKilyZWR6b25lX3N0YXJ0LCByZWR6b25lX2VuZCAtIHJlZHpvbmVfc3RhcnQs CisJCUtBU0FOX1BBR0VfUkVEWk9ORSk7Cit9CisKK3ZvaWQga2FzYW5fa3JlYWxsb2MoY29u c3Qgdm9pZCAqb2JqZWN0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsK KworCWlmICh1bmxpa2VseShvYmplY3QgPT0gWkVST19TSVpFX1BUUikpCisJCXJldHVybjsK KworCXBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZShvYmplY3QpOworCisJaWYgKHVubGlrZWx5 KCFQYWdlU2xhYihwYWdlKSkpCisJCWthc2FuX2ttYWxsb2NfbGFyZ2Uob2JqZWN0LCBzaXpl KTsKKwllbHNlCisJCWthc2FuX2ttYWxsb2MocGFnZS0+c2xhYl9jYWNoZSwgb2JqZWN0LCBz aXplKTsKK30KKwordm9pZCBrYXNhbl9rZnJlZV9sYXJnZShjb25zdCB2b2lkICpwdHIpCit7 CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocHRyKTsKKworCWthc2FuX3Bv aXNvbl9zaGFkb3cocHRyLCBQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSksCisJ CQlLQVNBTl9GUkVFX1BBR0UpOworfQorCitpbnQga2FzYW5fbW9kdWxlX2FsbG9jKHZvaWQg KmFkZHIsIHNpemVfdCBzaXplKQoreworCXZvaWQgKnJldDsKKwlzaXplX3Qgc2hhZG93X3Np emU7CisJdW5zaWduZWQgbG9uZyBzaGFkb3dfc3RhcnQ7CisKKwlzaGFkb3dfc3RhcnQgPSAo dW5zaWduZWQgbG9uZylrYXNhbl9tZW1fdG9fc2hhZG93KGFkZHIpOworCXNoYWRvd19zaXpl ID0gcm91bmRfdXAoc2l6ZSA+PiBLQVNBTl9TSEFET1dfU0NBTEVfU0hJRlQsCisJCQlQQUdF X1NJWkUpOworCisKKwlyZXQgPSBfX3ZtYWxsb2Nfbm9kZV9yYW5nZShzaGFkb3dfc2l6ZSwg MSwgc2hhZG93X3N0YXJ0LAorCQkJc2hhZG93X3N0YXJ0ICsgc2hhZG93X3NpemUsCisJCQlH RlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX1pFUk8sCisJCQlQQUdFX0tFUk5F TCwgVk1fTk9fR1VBUkQsIE5VTUFfTk9fTk9ERSwKKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRk cmVzcygwKSk7CisKKwlpZiAocmV0KSB7CisJCWZpbmRfdm1fYXJlYShhZGRyKS0+ZmxhZ3Mg fD0gVk1fS0FTQU47CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU5PTUVNOworfQor Cit2b2lkIGthc2FuX2ZyZWVfc2hhZG93KGNvbnN0IHN0cnVjdCB2bV9zdHJ1Y3QgKnZtKQor eworCWlmICh2bS0+ZmxhZ3MgJiBWTV9LQVNBTikKKwkJdmZyZWUoa2FzYW5fbWVtX3RvX3No YWRvdyh2bS0+YWRkcikpOworfQorCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9nbG9iYWwoc3Ry dWN0IGthc2FuX2dsb2JhbCAqZ2xvYmFsKQoreworCXNpemVfdCBhbGlnbmVkX3NpemUgPSBy b3VuZF91cChnbG9iYWwtPnNpemUsIEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFKTsKKworCWth c2FuX3VucG9pc29uX3NoYWRvdyhnbG9iYWwtPmJlZywgZ2xvYmFsLT5zaXplKTsKKworCWth c2FuX3BvaXNvbl9zaGFkb3coZ2xvYmFsLT5iZWcgKyBhbGlnbmVkX3NpemUsCisJCWdsb2Jh bC0+c2l6ZV93aXRoX3JlZHpvbmUgLSBhbGlnbmVkX3NpemUsCisJCUtBU0FOX0dMT0JBTF9S RURaT05FKTsKK30KKwordm9pZCBfX2FzYW5fcmVnaXN0ZXJfZ2xvYmFscyhzdHJ1Y3Qga2Fz YW5fZ2xvYmFsICpnbG9iYWxzLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgaTsKKworCWZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspCisJCXJlZ2lzdGVyX2dsb2JhbCgmZ2xvYmFsc1tpXSk7 Cit9CitFWFBPUlRfU1lNQk9MKF9fYXNhbl9yZWdpc3Rlcl9nbG9iYWxzKTsKKwordm9pZCBf X2FzYW5fdW5yZWdpc3Rlcl9nbG9iYWxzKHN0cnVjdCBrYXNhbl9nbG9iYWwgKmdsb2JhbHMs IHNpemVfdCBzaXplKQoreworfQorRVhQT1JUX1NZTUJPTChfX2FzYW5fdW5yZWdpc3Rlcl9n bG9iYWxzKTsKKworI2RlZmluZSBERUZJTkVfQVNBTl9MT0FEX1NUT1JFKHNpemUpCQkJCQlc CisJdm9pZCBfX2FzYW5fbG9hZCMjc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIpCQkJXAorCXsJ CQkJCQkJCVwKKwkJY2hlY2tfbWVtb3J5X3JlZ2lvbl9pbmxpbmUoYWRkciwgc2l6ZSwgZmFs c2UsIF9SRVRfSVBfKTtcCisJfQkJCQkJCQkJXAorCUVYUE9SVF9TWU1CT0woX19hc2FuX2xv YWQjI3NpemUpOwkJCQlcCisJX19hbGlhcyhfX2FzYW5fbG9hZCMjc2l6ZSkJCQkJCVwKKwl2 b2lkIF9fYXNhbl9sb2FkIyNzaXplIyNfbm9hYm9ydCh1bnNpZ25lZCBsb25nKTsJCVwKKwlF WFBPUlRfU1lNQk9MKF9fYXNhbl9sb2FkIyNzaXplIyNfbm9hYm9ydCk7CQkJXAorCXZvaWQg X19hc2FuX3N0b3JlIyNzaXplKHVuc2lnbmVkIGxvbmcgYWRkcikJCQlcCisJewkJCQkJCQkJ XAorCQljaGVja19tZW1vcnlfcmVnaW9uX2lubGluZShhZGRyLCBzaXplLCB0cnVlLCBfUkVU X0lQXyk7CVwKKwl9CQkJCQkJCQlcCisJRVhQT1JUX1NZTUJPTChfX2FzYW5fc3RvcmUjI3Np emUpOwkJCQlcCisJX19hbGlhcyhfX2FzYW5fc3RvcmUjI3NpemUpCQkJCQlcCisJdm9pZCBf X2FzYW5fc3RvcmUjI3NpemUjI19ub2Fib3J0KHVuc2lnbmVkIGxvbmcpOwkJXAorCUVYUE9S VF9TWU1CT0woX19hc2FuX3N0b3JlIyNzaXplIyNfbm9hYm9ydCkKKworREVGSU5FX0FTQU5f TE9BRF9TVE9SRSgxKTsKK0RFRklORV9BU0FOX0xPQURfU1RPUkUoMik7CitERUZJTkVfQVNB Tl9MT0FEX1NUT1JFKDQpOworREVGSU5FX0FTQU5fTE9BRF9TVE9SRSg4KTsKK0RFRklORV9B U0FOX0xPQURfU1RPUkUoMTYpOworCit2b2lkIF9fYXNhbl9sb2FkTih1bnNpZ25lZCBsb25n IGFkZHIsIHNpemVfdCBzaXplKQoreworCWNoZWNrX21lbW9yeV9yZWdpb24oYWRkciwgc2l6 ZSwgZmFsc2UsIF9SRVRfSVBfKTsKK30KK0VYUE9SVF9TWU1CT0woX19hc2FuX2xvYWROKTsK KworX19hbGlhcyhfX2FzYW5fbG9hZE4pCit2b2lkIF9fYXNhbl9sb2FkTl9ub2Fib3J0KHVu c2lnbmVkIGxvbmcsIHNpemVfdCk7CitFWFBPUlRfU1lNQk9MKF9fYXNhbl9sb2FkTl9ub2Fi b3J0KTsKKwordm9pZCBfX2FzYW5fc3RvcmVOKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90 IHNpemUpCit7CisJY2hlY2tfbWVtb3J5X3JlZ2lvbihhZGRyLCBzaXplLCB0cnVlLCBfUkVU X0lQXyk7Cit9CitFWFBPUlRfU1lNQk9MKF9fYXNhbl9zdG9yZU4pOworCitfX2FsaWFzKF9f YXNhbl9zdG9yZU4pCit2b2lkIF9fYXNhbl9zdG9yZU5fbm9hYm9ydCh1bnNpZ25lZCBsb25n LCBzaXplX3QpOworRVhQT1JUX1NZTUJPTChfX2FzYW5fc3RvcmVOX25vYWJvcnQpOworCisv KiB0byBzaHV0IHVwIGNvbXBpbGVyIGNvbXBsYWludHMgKi8KK3ZvaWQgX19hc2FuX2hhbmRs ZV9ub19yZXR1cm4odm9pZCkge30KK0VYUE9SVF9TWU1CT0woX19hc2FuX2hhbmRsZV9ub19y ZXR1cm4pOworCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCitzdGF0aWMgaW50IGth c2FuX21lbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJdW5zaWdu ZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIChhY3Rpb24gPT0gTUVN X0dPSU5HX09OTElORSkgPyBOT1RJRllfQkFEIDogTk9USUZZX09LOworfQorCitzdGF0aWMg aW50IF9faW5pdCBrYXNhbl9tZW1ob3RwbHVnX2luaXQodm9pZCkKK3sKKwlwcl9lcnIoIldB Uk5JTkc6IEtBU2FuIGRvZXNuJ3Qgc3VwcG9ydCBtZW1vcnkgaG90LWFkZFxuIik7CisJcHJf ZXJyKCJNZW1vcnkgaG90LWFkZCB3aWxsIGJlIGRpc2FibGVkXG4iKTsKKworCWhvdHBsdWdf bWVtb3J5X25vdGlmaWVyKGthc2FuX21lbV9ub3RpZmllciwgMCk7CisKKwlyZXR1cm4gMDsK K30KKworbW9kdWxlX2luaXQoa2FzYW5fbWVtaG90cGx1Z19pbml0KTsKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvbW0va2FzYW4va2FzYW4uaCBiL21tL2thc2FuL2thc2FuLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjZGZmMwotLS0gL2Rldi9udWxsCisrKyBi L21tL2thc2FuL2thc2FuLmgKQEAgLTAsMCArMSw3MiBAQAorI2lmbmRlZiBfX01NX0tBU0FO X0tBU0FOX0gKKyNkZWZpbmUgX19NTV9LQVNBTl9LQVNBTl9ICisKKyNpbmNsdWRlIDxsaW51 eC9rYXNhbi5oPgorCisjZGVmaW5lIEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFICgxVUwgPDwg S0FTQU5fU0hBRE9XX1NDQUxFX1NISUZUKQorI2RlZmluZSBLQVNBTl9TSEFET1dfTUFTSyAg ICAgICAoS0FTQU5fU0hBRE9XX1NDQUxFX1NJWkUgLSAxKQorCisjZGVmaW5lIEtBU0FOX0ZS RUVfUEFHRSAgICAgICAgIDB4RkYgIC8qIHBhZ2Ugd2FzIGZyZWVkICovCisjZGVmaW5lIEtB U0FOX0ZSRUVfUEFHRSAgICAgICAgIDB4RkYgIC8qIHBhZ2Ugd2FzIGZyZWVkICovCisjZGVm aW5lIEtBU0FOX1BBR0VfUkVEWk9ORSAgICAgIDB4RkUgIC8qIHJlZHpvbmUgZm9yIGttYWxs b2NfbGFyZ2UgYWxsb2NhdGlvbnMgKi8KKyNkZWZpbmUgS0FTQU5fS01BTExPQ19SRURaT05F ICAgMHhGQyAgLyogcmVkem9uZSBpbnNpZGUgc2x1YiBvYmplY3QgKi8KKyNkZWZpbmUgS0FT QU5fS01BTExPQ19GUkVFICAgICAgMHhGQiAgLyogb2JqZWN0IHdhcyBmcmVlZCAoa21lbV9j YWNoZV9mcmVlL2tmcmVlKSAqLworI2RlZmluZSBLQVNBTl9HTE9CQUxfUkVEWk9ORSAgICAw eEZBICAvKiByZWR6b25lIGZvciBnbG9iYWwgdmFyaWFibGUgKi8KKworLyoKKyAqIFN0YWNr IHJlZHpvbmUgc2hhZG93IHZhbHVlcworICogKFRob3NlIGFyZSBjb21waWxlcidzIEFCSSwg ZG9uJ3QgY2hhbmdlIHRoZW0pCisgKi8KKyNkZWZpbmUgS0FTQU5fU1RBQ0tfTEVGVCAgICAg ICAgMHhGMQorI2RlZmluZSBLQVNBTl9TVEFDS19NSUQgICAgICAgICAweEYyCisjZGVmaW5l IEtBU0FOX1NUQUNLX1JJR0hUICAgICAgIDB4RjMKKyNkZWZpbmUgS0FTQU5fU1RBQ0tfUEFS VElBTCAgICAgMHhGNAorCisvKiBEb24ndCBicmVhayByYW5kY29uZmlnL2FsbCpjb25maWcg YnVpbGRzICovCisjaWZuZGVmIEtBU0FOX0FCSV9WRVJTSU9OCisjZGVmaW5lIEtBU0FOX0FC SV9WRVJTSU9OIDEKKyNlbmRpZgorCitzdHJ1Y3Qga2FzYW5fYWNjZXNzX2luZm8geworCWNv bnN0IHZvaWQgKmFjY2Vzc19hZGRyOworCWNvbnN0IHZvaWQgKmZpcnN0X2JhZF9hZGRyOwor CXNpemVfdCBhY2Nlc3Nfc2l6ZTsKKwlib29sIGlzX3dyaXRlOworCXVuc2lnbmVkIGxvbmcg aXA7Cit9OworCisvKiBUaGUgbGF5b3V0IG9mIHN0cnVjdCBkaWN0YXRlZCBieSBjb21waWxl ciAqLworc3RydWN0IGthc2FuX3NvdXJjZV9sb2NhdGlvbiB7CisJY29uc3QgY2hhciAqZmls ZW5hbWU7CisJaW50IGxpbmVfbm87CisJaW50IGNvbHVtbl9ubzsKK307CisKKy8qIFRoZSBs YXlvdXQgb2Ygc3RydWN0IGRpY3RhdGVkIGJ5IGNvbXBpbGVyICovCitzdHJ1Y3Qga2FzYW5f Z2xvYmFsIHsKKwljb25zdCB2b2lkICpiZWc7CQkvKiBBZGRyZXNzIG9mIHRoZSBiZWdpbm5p bmcgb2YgdGhlIGdsb2JhbCB2YXJpYWJsZS4gKi8KKwlzaXplX3Qgc2l6ZTsJCQkvKiBTaXpl IG9mIHRoZSBnbG9iYWwgdmFyaWFibGUuICovCisJc2l6ZV90IHNpemVfd2l0aF9yZWR6b25l OwkvKiBTaXplIG9mIHRoZSB2YXJpYWJsZSArIHNpemUgb2YgdGhlIHJlZCB6b25lLiAzMiBi eXRlcyBhbGlnbmVkICovCisJY29uc3Qgdm9pZCAqbmFtZTsKKwljb25zdCB2b2lkICptb2R1 bGVfbmFtZTsJLyogTmFtZSBvZiB0aGUgbW9kdWxlIHdoZXJlIHRoZSBnbG9iYWwgdmFyaWFi bGUgaXMgZGVjbGFyZWQuICovCisJdW5zaWduZWQgbG9uZyBoYXNfZHluYW1pY19pbml0Owkv KiBUaGlzIG5lZWRlZCBmb3IgQysrICovCisjaWYgS0FTQU5fQUJJX1ZFUlNJT04gPj0gNAor CXN0cnVjdCBrYXNhbl9zb3VyY2VfbG9jYXRpb24gKmxvY2F0aW9uOworI2VuZGlmCit9Owor CitzdGF0aWMgaW5saW5lIGNvbnN0IHZvaWQgKmthc2FuX3NoYWRvd190b19tZW0oY29uc3Qg dm9pZCAqc2hhZG93X2FkZHIpCit7CisJcmV0dXJuICh2b2lkICopKCgodW5zaWduZWQgbG9u ZylzaGFkb3dfYWRkciAtIEtBU0FOX1NIQURPV19PRkZTRVQpCisJCTw8IEtBU0FOX1NIQURP V19TQ0FMRV9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl9lbmFibGVk KHZvaWQpCit7CisJcmV0dXJuICFjdXJyZW50LT5rYXNhbl9kZXB0aDsKK30KKwordm9pZCBr YXNhbl9yZXBvcnQodW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJYm9vbCBp c193cml0ZSwgdW5zaWduZWQgbG9uZyBpcCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0v a2FzYW4vcmVwb3J0LmMgYi9tbS9rYXNhbi9yZXBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi42NmVjNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvbW0va2FzYW4v cmVwb3J0LmMKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMg ZXJyb3IgcmVwb3J0aW5nIGNvZGUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFNhbXN1 bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKiBBdXRob3I6IEFuZHJleSBSeWFiaW5pbiA8 YS5yeWFiaW5pbiBhdCBzYW1zdW5nLmNvbT4KKyAqCisgKiBTb21lIG9mIGNvZGUgYm9ycm93 ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20veGFpcnkvbGludXggYnkKKyAqICAgICAgICBB bmRyZXkgS29ub3ZhbG92IDxhZGVjaC5mbyBhdCBnbWFpbC5jb20+CisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+Cisj aW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5j bHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgor I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2FzYW4uaD4KKwor I2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorCisjaW5jbHVkZSAia2FzYW4uaCIKKyNpbmNs dWRlICIuLi9zbGFiLmgiCisKKy8qIFNoYWRvdyBsYXlvdXQgY3VzdG9taXphdGlvbi4gKi8K KyNkZWZpbmUgU0hBRE9XX0JZVEVTX1BFUl9CTE9DSyAxCisjZGVmaW5lIFNIQURPV19CTE9D S1NfUEVSX1JPVyAxNgorI2RlZmluZSBTSEFET1dfQllURVNfUEVSX1JPVyAoU0hBRE9XX0JM T0NLU19QRVJfUk9XICogU0hBRE9XX0JZVEVTX1BFUl9CTE9DSykKKyNkZWZpbmUgU0hBRE9X X1JPV1NfQVJPVU5EX0FERFIgMgorCitzdGF0aWMgY29uc3Qgdm9pZCAqZmluZF9maXJzdF9i YWRfYWRkcihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKK3sKKwl1OCBzaGFkb3df dmFsID0gKih1OCAqKWthc2FuX21lbV90b19zaGFkb3coYWRkcik7CisJY29uc3Qgdm9pZCAq Zmlyc3RfYmFkX2FkZHIgPSBhZGRyOworCisJd2hpbGUgKCFzaGFkb3dfdmFsICYmIGZpcnN0 X2JhZF9hZGRyIDwgYWRkciArIHNpemUpIHsKKwkJZmlyc3RfYmFkX2FkZHIgKz0gS0FTQU5f U0hBRE9XX1NDQUxFX1NJWkU7CisJCXNoYWRvd192YWwgPSAqKHU4ICopa2FzYW5fbWVtX3Rv X3NoYWRvdyhmaXJzdF9iYWRfYWRkcik7CisJfQorCXJldHVybiBmaXJzdF9iYWRfYWRkcjsK K30KKworc3RhdGljIHZvaWQgcHJpbnRfZXJyb3JfZGVzY3JpcHRpb24oc3RydWN0IGthc2Fu X2FjY2Vzc19pbmZvICppbmZvKQoreworCWNvbnN0IGNoYXIgKmJ1Z190eXBlID0gInVua25v d24gY3Jhc2giOworCXU4IHNoYWRvd192YWw7CisKKwlpbmZvLT5maXJzdF9iYWRfYWRkciA9 IGZpbmRfZmlyc3RfYmFkX2FkZHIoaW5mby0+YWNjZXNzX2FkZHIsCisJCQkJCQlpbmZvLT5h Y2Nlc3Nfc2l6ZSk7CisKKwlzaGFkb3dfdmFsID0gKih1OCAqKWthc2FuX21lbV90b19zaGFk b3coaW5mby0+Zmlyc3RfYmFkX2FkZHIpOworCisJc3dpdGNoIChzaGFkb3dfdmFsKSB7CisJ Y2FzZSBLQVNBTl9GUkVFX1BBR0U6CisJY2FzZSBLQVNBTl9LTUFMTE9DX0ZSRUU6CisJCWJ1 Z190eXBlID0gInVzZSBhZnRlciBmcmVlIjsKKwkJYnJlYWs7CisJY2FzZSBLQVNBTl9QQUdF X1JFRFpPTkU6CisJY2FzZSBLQVNBTl9LTUFMTE9DX1JFRFpPTkU6CisJY2FzZSBLQVNBTl9H TE9CQUxfUkVEWk9ORToKKwljYXNlIDAgLi4uIEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFIC0g MToKKwkJYnVnX3R5cGUgPSAib3V0IG9mIGJvdW5kcyBhY2Nlc3MiOworCQlicmVhazsKKwlj YXNlIEtBU0FOX1NUQUNLX0xFRlQ6CisJY2FzZSBLQVNBTl9TVEFDS19NSUQ6CisJY2FzZSBL QVNBTl9TVEFDS19SSUdIVDoKKwljYXNlIEtBU0FOX1NUQUNLX1BBUlRJQUw6CisJCWJ1Z190 eXBlID0gIm91dCBvZiBib3VuZHMgb24gc3RhY2siOworCQlicmVhazsKKwl9CisKKwlwcl9l cnIoIkJVRzogS0FTYW46ICVzIGluICVwUyBhdCBhZGRyICVwXG4iLAorCQlidWdfdHlwZSwg KHZvaWQgKilpbmZvLT5pcCwKKwkJaW5mby0+YWNjZXNzX2FkZHIpOworCXByX2VycigiJXMg b2Ygc2l6ZSAlenUgYnkgdGFzayAlcy8lZFxuIiwKKwkJaW5mby0+aXNfd3JpdGUgPyAiV3Jp dGUiIDogIlJlYWQiLAorCQlpbmZvLT5hY2Nlc3Nfc2l6ZSwgY3VycmVudC0+Y29tbSwgdGFz a19waWRfbnIoY3VycmVudCkpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wga2VybmVsX29y X21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIChhZGRyID49ICh2 b2lkICopX3N0ZXh0ICYmIGFkZHIgPCAodm9pZCAqKV9lbmQpCisJCXx8IChhZGRyID49ICh2 b2lkICopTU9EVUxFU19WQUREUgorCQkJJiYgYWRkciA8ICh2b2lkICopTU9EVUxFU19FTkQp OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaW5pdF90YXNrX3N0YWNrX2FkZHIoY29uc3Qg dm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gYWRkciA+PSAodm9pZCAqKSZpbml0X3RocmVhZF91 bmlvbi5zdGFjayAmJgorCQkoYWRkciA8PSAodm9pZCAqKSZpbml0X3RocmVhZF91bmlvbi5z dGFjayArCisJCQlzaXplb2YoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spKTsKK30KKworc3Rh dGljIHZvaWQgcHJpbnRfYWRkcmVzc19kZXNjcmlwdGlvbihzdHJ1Y3Qga2FzYW5fYWNjZXNz X2luZm8gKmluZm8pCit7CisJY29uc3Qgdm9pZCAqYWRkciA9IGluZm8tPmFjY2Vzc19hZGRy OworCisJaWYgKChhZGRyID49ICh2b2lkICopUEFHRV9PRkZTRVQpICYmCisJCShhZGRyIDwg aGlnaF9tZW1vcnkpKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19oZWFkX3Bh Z2UoYWRkcik7CisKKwkJaWYgKFBhZ2VTbGFiKHBhZ2UpKSB7CisJCQl2b2lkICpvYmplY3Q7 CisJCQlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUgPSBwYWdlLT5zbGFiX2NhY2hlOworCQkJ dm9pZCAqbGFzdF9vYmplY3Q7CisKKwkJCW9iamVjdCA9IHZpcnRfdG9fb2JqKGNhY2hlLCBw YWdlX2FkZHJlc3MocGFnZSksIGFkZHIpOworCQkJbGFzdF9vYmplY3QgPSBwYWdlX2FkZHJl c3MocGFnZSkgKworCQkJCXBhZ2UtPm9iamVjdHMgKiBjYWNoZS0+c2l6ZTsKKworCQkJaWYg KHVubGlrZWx5KG9iamVjdCA+IGxhc3Rfb2JqZWN0KSkKKwkJCQlvYmplY3QgPSBsYXN0X29i amVjdDsgLyogd2UgaGl0IGludG8gcGFkZGluZyAqLworCisJCQlvYmplY3RfZXJyKGNhY2hl LCBwYWdlLCBvYmplY3QsCisJCQkJImthc2FuOiBiYWQgYWNjZXNzIGRldGVjdGVkIik7CisJ CQlyZXR1cm47CisJCX0KKwkJZHVtcF9wYWdlKHBhZ2UpOworCX0KKworCWlmIChrZXJuZWxf b3JfbW9kdWxlX2FkZHIoYWRkcikpIHsKKwkJaWYgKCFpbml0X3Rhc2tfc3RhY2tfYWRkcihh ZGRyKSkKKwkJCXByX2VycigiQWRkcmVzcyBiZWxvbmdzIHRvIHZhcmlhYmxlICVwU1xuIiwg YWRkcik7CisJfQorCisJZHVtcF9zdGFjaygpOworfQorCitzdGF0aWMgYm9vbCByb3dfaXNf Z3VpbHR5KGNvbnN0IHZvaWQgKnJvdywgY29uc3Qgdm9pZCAqZ3VpbHR5KQoreworCXJldHVy biAocm93IDw9IGd1aWx0eSkgJiYgKGd1aWx0eSA8IHJvdyArIFNIQURPV19CWVRFU19QRVJf Uk9XKTsKK30KKworc3RhdGljIGludCBzaGFkb3dfcG9pbnRlcl9vZmZzZXQoY29uc3Qgdm9p ZCAqcm93LCBjb25zdCB2b2lkICpzaGFkb3cpCit7CisJLyogVGhlIGxlbmd0aCBvZiAiPmZm MDBmZjAwZmYwMGZmMDA6ICIgaXMKKwkgKiAgICAzICsgKEJJVFNfUEVSX0xPTkcvOCkqMiBj aGFycy4KKwkgKi8KKwlyZXR1cm4gMyArIChCSVRTX1BFUl9MT05HLzgpKjIgKyAoc2hhZG93 IC0gcm93KSoyICsKKwkJKHNoYWRvdyAtIHJvdykgLyBTSEFET1dfQllURVNfUEVSX0JMT0NL ICsgMTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc2hhZG93X2Zvcl9hZGRyZXNzKGNvbnN0 IHZvaWQgKmFkZHIpCit7CisJaW50IGk7CisJY29uc3Qgdm9pZCAqc2hhZG93ID0ga2FzYW5f bWVtX3RvX3NoYWRvdyhhZGRyKTsKKwljb25zdCB2b2lkICpzaGFkb3dfcm93OworCisJc2hh ZG93X3JvdyA9ICh2b2lkICopcm91bmRfZG93bigodW5zaWduZWQgbG9uZylzaGFkb3csCisJ CQkJCVNIQURPV19CWVRFU19QRVJfUk9XKQorCQktIFNIQURPV19ST1dTX0FST1VORF9BRERS ICogU0hBRE9XX0JZVEVTX1BFUl9ST1c7CisKKwlwcl9lcnIoIk1lbW9yeSBzdGF0ZSBhcm91 bmQgdGhlIGJ1Z2d5IGFkZHJlc3M6XG4iKTsKKworCWZvciAoaSA9IC1TSEFET1dfUk9XU19B Uk9VTkRfQUREUjsgaSA8PSBTSEFET1dfUk9XU19BUk9VTkRfQUREUjsgaSsrKSB7CisJCWNv bnN0IHZvaWQgKmthZGRyID0ga2FzYW5fc2hhZG93X3RvX21lbShzaGFkb3dfcm93KTsKKwkJ Y2hhciBidWZmZXJbNCArIChCSVRTX1BFUl9MT05HLzgpKjJdOworCisJCXNucHJpbnRmKGJ1 ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisJCQkoaSA9PSAwKSA/ICI+JXA6ICIgOiAiICVwOiAi LCBrYWRkcik7CisKKwkJa2FzYW5fZGlzYWJsZV9jdXJyZW50KCk7CisJCXByaW50X2hleF9k dW1wKEtFUk5fRVJSLCBidWZmZXIsCisJCQlEVU1QX1BSRUZJWF9OT05FLCBTSEFET1dfQllU RVNfUEVSX1JPVywgMSwKKwkJCXNoYWRvd19yb3csIFNIQURPV19CWVRFU19QRVJfUk9XLCAw KTsKKwkJa2FzYW5fZW5hYmxlX2N1cnJlbnQoKTsKKworCQlpZiAocm93X2lzX2d1aWx0eShz aGFkb3dfcm93LCBzaGFkb3cpKQorCQkJcHJfZXJyKCIlKmNcbiIsCisJCQkJc2hhZG93X3Bv aW50ZXJfb2Zmc2V0KHNoYWRvd19yb3csIHNoYWRvdyksCisJCQkJJ14nKTsKKworCQlzaGFk b3dfcm93ICs9IFNIQURPV19CWVRFU19QRVJfUk9XOworCX0KK30KKworc3RhdGljIERFRklO RV9TUElOTE9DSyhyZXBvcnRfbG9jayk7CisKK3N0YXRpYyB2b2lkIGthc2FuX3JlcG9ydF9l cnJvcihzdHJ1Y3Qga2FzYW5fYWNjZXNzX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKwljb25zdCBjaGFyICpidWdfdHlwZTsKKworCXNwaW5fbG9ja19pcnFzYXZl KCZyZXBvcnRfbG9jaywgZmxhZ3MpOworCXByX2VycigiPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09IgorCQkiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4i KTsKKwlpZiAoaW5mby0+YWNjZXNzX2FkZHIgPAorCQkJa2FzYW5fc2hhZG93X3RvX21lbSgo dm9pZCAqKUtBU0FOX1NIQURPV19TVEFSVCkpIHsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKWlu Zm8tPmFjY2Vzc19hZGRyIDwgUEFHRV9TSVpFKQorCQkJYnVnX3R5cGUgPSAibnVsbC1wdHIt ZGVyZWYiOworCQllbHNlIGlmICgodW5zaWduZWQgbG9uZylpbmZvLT5hY2Nlc3NfYWRkciA8 IFRBU0tfU0laRSkKKwkJCWJ1Z190eXBlID0gInVzZXItbWVtb3J5LWFjY2VzcyI7CisJCWVs c2UKKwkJCWJ1Z190eXBlID0gIndpbGQtbWVtb3J5LWFjY2VzcyI7CisJCXByX2VycigiQlVH OiBLQVNhbjogJXMgb24gYWRkcmVzcyAlcFxuIiwKKwkJCWJ1Z190eXBlLCBpbmZvLT5hY2Nl c3NfYWRkcik7CisJCXByX2VycigiJXMgb2Ygc2l6ZSAlenUgYnkgdGFzayAlcy8lZFxuIiwK KwkJCWluZm8tPmlzX3dyaXRlID8gIldyaXRlIiA6ICJSZWFkIiwKKwkJCWluZm8tPmFjY2Vz c19zaXplLCBjdXJyZW50LT5jb21tLAorCQkJdGFza19waWRfbnIoY3VycmVudCkpOworCQlk dW1wX3N0YWNrKCk7CisJfSBlbHNlIHsKKwkJcHJpbnRfZXJyb3JfZGVzY3JpcHRpb24oaW5m byk7CisJCXByaW50X2FkZHJlc3NfZGVzY3JpcHRpb24oaW5mbyk7CisJCXByaW50X3NoYWRv d19mb3JfYWRkcmVzcyhpbmZvLT5maXJzdF9iYWRfYWRkcik7CisJfQorCXByX2VycigiPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorCQkiPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09XG4iKTsKKwlhZGRfdGFpbnQoVEFJTlRfQkFEX1BBR0UsIExPQ0tE RVBfTk9XX1VOUkVMSUFCTEUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJlcG9ydF9s b2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBib29sIHByaW50X3RpbGxfZGVhdGg7CitzdGF0 aWMgaW50IF9faW5pdCBrYXNhbl9zZXR1cChjaGFyICphcmcpCit7CisJcHJpbnRfdGlsbF9k ZWF0aCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CitfX3NldHVwKCJrYXNhbl9wcmludF90aWxs X2RlYXRoIiwga2FzYW5fc2V0dXApOworCit2b2lkIGthc2FuX3JlcG9ydCh1bnNpZ25lZCBs b25nIGFkZHIsIHNpemVfdCBzaXplLAorCQlib29sIGlzX3dyaXRlLCB1bnNpZ25lZCBsb25n IGlwKQoreworCXN0cnVjdCBrYXNhbl9hY2Nlc3NfaW5mbyBpbmZvOworCXN0YXRpYyBib29s IHJlcG9ydGVkID0gZmFsc2U7CisKKwlpZiAobGlrZWx5KCFrYXNhbl9lbmFibGVkKCkpKQor CQlyZXR1cm47CisKKwlpZiAobGlrZWx5KCFwcmludF90aWxsX2RlYXRoKSkgeworCQlpZiAo cmVwb3J0ZWQpCisJCQlyZXR1cm47CisJCXJlcG9ydGVkID0gdHJ1ZTsKKwl9CisJaW5mby5h Y2Nlc3NfYWRkciA9ICh2b2lkICopYWRkcjsKKwlpbmZvLmFjY2Vzc19zaXplID0gc2l6ZTsK KwlpbmZvLmlzX3dyaXRlID0gaXNfd3JpdGU7CisJaW5mby5pcCA9IGlwOworCisJa2FzYW5f cmVwb3J0X2Vycm9yKCZpbmZvKTsKK30KKworCisjZGVmaW5lIERFRklORV9BU0FOX1JFUE9S VF9MT0FEKHNpemUpICAgICAgICAgICAgICAgICAgICAgXAordm9pZCBfX2FzYW5fcmVwb3J0 X2xvYWQjI3NpemUjI19ub2Fib3J0KHVuc2lnbmVkIGxvbmcgYWRkcikgXAoreyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlr YXNhbl9yZXBvcnQoYWRkciwgc2l6ZSwgZmFsc2UsIF9SRVRfSVBfKTsJICBcCit9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor RVhQT1JUX1NZTUJPTChfX2FzYW5fcmVwb3J0X2xvYWQjI3NpemUjI19ub2Fib3J0KQorCisj ZGVmaW5lIERFRklORV9BU0FOX1JFUE9SVF9TVE9SRShzaXplKSAgICAgICAgICAgICAgICAg ICAgIFwKK3ZvaWQgX19hc2FuX3JlcG9ydF9zdG9yZSMjc2l6ZSMjX25vYWJvcnQodW5zaWdu ZWQgbG9uZyBhZGRyKSBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKwlrYXNhbl9yZXBvcnQoYWRkciwgc2l6ZSwgdHJ1 ZSwgX1JFVF9JUF8pOwkgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0VYUE9SVF9TWU1CT0woX19hc2FuX3JlcG9y dF9zdG9yZSMjc2l6ZSMjX25vYWJvcnQpCisKK0RFRklORV9BU0FOX1JFUE9SVF9MT0FEKDEp OworREVGSU5FX0FTQU5fUkVQT1JUX0xPQUQoMik7CitERUZJTkVfQVNBTl9SRVBPUlRfTE9B RCg0KTsKK0RFRklORV9BU0FOX1JFUE9SVF9MT0FEKDgpOworREVGSU5FX0FTQU5fUkVQT1JU X0xPQUQoMTYpOworREVGSU5FX0FTQU5fUkVQT1JUX1NUT1JFKDEpOworREVGSU5FX0FTQU5f UkVQT1JUX1NUT1JFKDIpOworREVGSU5FX0FTQU5fUkVQT1JUX1NUT1JFKDQpOworREVGSU5F X0FTQU5fUkVQT1JUX1NUT1JFKDgpOworREVGSU5FX0FTQU5fUkVQT1JUX1NUT1JFKDE2KTsK Kwordm9pZCBfX2FzYW5fcmVwb3J0X2xvYWRfbl9ub2Fib3J0KHVuc2lnbmVkIGxvbmcgYWRk ciwgc2l6ZV90IHNpemUpCit7CisJa2FzYW5fcmVwb3J0KGFkZHIsIHNpemUsIGZhbHNlLCBf UkVUX0lQXyk7Cit9CitFWFBPUlRfU1lNQk9MKF9fYXNhbl9yZXBvcnRfbG9hZF9uX25vYWJv cnQpOworCit2b2lkIF9fYXNhbl9yZXBvcnRfc3RvcmVfbl9ub2Fib3J0KHVuc2lnbmVkIGxv bmcgYWRkciwgc2l6ZV90IHNpemUpCit7CisJa2FzYW5fcmVwb3J0KGFkZHIsIHNpemUsIHRy dWUsIF9SRVRfSVBfKTsKK30KK0VYUE9SVF9TWU1CT0woX19hc2FuX3JlcG9ydF9zdG9yZV9u X25vYWJvcnQpOwpkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmMK aW5kZXggYzhkN2YzMS4uN2RjYTFlZiAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWsuYworKysg Yi9tbS9rbWVtbGVhay5jCkBAIC05OCw2ICs5OCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nl c3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogCisjaW5jbHVkZSA8bGludXgv a2FzYW4uaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KICNpbmNsdWRlIDxsaW51 eC9rbWVtbGVhay5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9yeV9ob3RwbHVnLmg+CkBAIC0x MDc2LDcgKzEwNzcsMTAgQEAgc3RhdGljIGJvb2wgdXBkYXRlX2NoZWNrc3VtKHN0cnVjdCBr bWVtbGVha19vYmplY3QgKm9iamVjdCkKIAlpZiAoIWttZW1jaGVja19pc19vYmpfaW5pdGlh bGl6ZWQob2JqZWN0LT5wb2ludGVyLCBvYmplY3QtPnNpemUpKQogCQlyZXR1cm4gZmFsc2U7 CiAKKwlrYXNhbl9kaXNhYmxlX2N1cnJlbnQoKTsKIAlvYmplY3QtPmNoZWNrc3VtID0gY3Jj MzIoMCwgKHZvaWQgKilvYmplY3QtPnBvaW50ZXIsIG9iamVjdC0+c2l6ZSk7CisJa2FzYW5f ZW5hYmxlX2N1cnJlbnQoKTsKKwogCXJldHVybiBvYmplY3QtPmNoZWNrc3VtICE9IG9sZF9j c3VtOwogfQogCkBAIC0xMTI3LDcgKzExMzEsOSBAQCBzdGF0aWMgdm9pZCBzY2FuX2Jsb2Nr KHZvaWQgKl9zdGFydCwgdm9pZCAqX2VuZCwKIAkJCQkJCSAgQllURVNfUEVSX1BPSU5URVIp KQogCQkJY29udGludWU7CiAKKwkJa2FzYW5fZGlzYWJsZV9jdXJyZW50KCk7CiAJCXBvaW50 ZXIgPSAqcHRyOworCQlrYXNhbl9lbmFibGVfY3VycmVudCgpOwogCiAJCW9iamVjdCA9IGZp bmRfYW5kX2dldF9vYmplY3QocG9pbnRlciwgMSk7CiAJCWlmICghb2JqZWN0KQpkaWZmIC0t Z2l0IGEvbW0vbWVtcG9vbC5jIGIvbW0vbWVtcG9vbC5jCmluZGV4IDU0OTkwNDcuLmRiMTQ2 YWQgMTAwNjQ0Ci0tLSBhL21tL21lbXBvb2wuYworKysgYi9tbS9tZW1wb29sLmMKQEAgLTYs MjUgKzYsMTE1IEBACiAgKiAgZXh0cmVtZSBWTSBsb2FkLgogICoKICAqICBzdGFydGVkIGJ5 IEluZ28gTW9sbmFyLCBDb3B5cmlnaHQgKEMpIDIwMDEKKyAqICBkZWJ1Z2dpbmcgYnkgRGF2 aWQgUmllbnRqZXMsIENvcHlyaWdodCAoQykgMjAxNQogICovCiAKICNpbmNsdWRlIDxsaW51 eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2hp Z2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgogI2luY2x1ZGUgPGxpbnV4 L2V4cG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KICNpbmNsdWRlIDxsaW51 eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KIAorI2lmIGRlZmlu ZWQoQ09ORklHX0RFQlVHX1NMQUIpIHx8IGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUdfT04p CitzdGF0aWMgdm9pZCBwb2lzb25fZXJyb3IobWVtcG9vbF90ICpwb29sLCB2b2lkICplbGVt ZW50LCBzaXplX3Qgc2l6ZSwKKwkJCSBzaXplX3QgYnl0ZSkKK3sKKwljb25zdCBpbnQgbnIg PSBwb29sLT5jdXJyX25yOworCWNvbnN0IGludCBzdGFydCA9IG1heF90KGludCwgYnl0ZSAt IChCSVRTX1BFUl9MT05HIC8gOCksIDApOworCWNvbnN0IGludCBlbmQgPSBtaW5fdChpbnQs IGJ5dGUgKyAoQklUU19QRVJfTE9ORyAvIDgpLCBzaXplKTsKKwlpbnQgaTsKKworCXByX2Vy cigiQlVHOiBtZW1wb29sIGVsZW1lbnQgcG9pc29uIG1pc21hdGNoXG4iKTsKKwlwcl9lcnIo Ik1lbXBvb2wgJXAgc2l6ZSAlenVcbiIsIHBvb2wsIHNpemUpOworCXByX2VycigiIG5yPSVk IEAgJXA6ICVzMHgiLCBuciwgZWxlbWVudCwgc3RhcnQgPiAwID8gIi4uLiAiIDogIiIpOwor CWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspCisJCXByX2NvbnQoIiV4ICIsICoodTgg KikoZWxlbWVudCArIGkpKTsKKwlwcl9jb250KCIlc1xuIiwgZW5kIDwgc2l6ZSA/ICIuLi4i IDogIiIpOworCWR1bXBfc3RhY2soKTsKK30KKworc3RhdGljIHZvaWQgX19jaGVja19lbGVt ZW50KG1lbXBvb2xfdCAqcG9vbCwgdm9pZCAqZWxlbWVudCwgc2l6ZV90IHNpemUpCit7CisJ dTggKm9iaiA9IGVsZW1lbnQ7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6 ZTsgaSsrKSB7CisJCXU4IGV4cCA9IChpIDwgc2l6ZSAtIDEpID8gUE9JU09OX0ZSRUUgOiBQ T0lTT05fRU5EOworCisJCWlmIChvYmpbaV0gIT0gZXhwKSB7CisJCQlwb2lzb25fZXJyb3Io cG9vbCwgZWxlbWVudCwgc2l6ZSwgaSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJbWVtc2V0 KG9iaiwgUE9JU09OX0lOVVNFLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZWxl bWVudChtZW1wb29sX3QgKnBvb2wsIHZvaWQgKmVsZW1lbnQpCit7CisJLyogTWVtcG9vbHMg YmFja2VkIGJ5IHNsYWIgYWxsb2NhdG9yICovCisJaWYgKHBvb2wtPmZyZWUgPT0gbWVtcG9v bF9mcmVlX3NsYWIgfHwgcG9vbC0+ZnJlZSA9PSBtZW1wb29sX2tmcmVlKQorCQlfX2NoZWNr X2VsZW1lbnQocG9vbCwgZWxlbWVudCwga3NpemUoZWxlbWVudCkpOworCisJLyogTWVtcG9v bHMgYmFja2VkIGJ5IHBhZ2UgYWxsb2NhdG9yICovCisJaWYgKHBvb2wtPmZyZWUgPT0gbWVt cG9vbF9mcmVlX3BhZ2VzKSB7CisJCWludCBvcmRlciA9IChpbnQpKGxvbmcpcG9vbC0+cG9v bF9kYXRhOworCQl2b2lkICphZGRyID0ga21hcF9hdG9taWMoKHN0cnVjdCBwYWdlICopZWxl bWVudCk7CisKKwkJX19jaGVja19lbGVtZW50KHBvb2wsIGFkZHIsIDFVTCA8PCAoUEFHRV9T SElGVCArIG9yZGVyKSk7CisJCWt1bm1hcF9hdG9taWMoYWRkcik7CisJfQorfQorCitzdGF0 aWMgdm9pZCBfX3BvaXNvbl9lbGVtZW50KHZvaWQgKmVsZW1lbnQsIHNpemVfdCBzaXplKQor eworCXU4ICpvYmogPSBlbGVtZW50OworCisJbWVtc2V0KG9iaiwgUE9JU09OX0ZSRUUsIHNp emUgLSAxKTsKKwlvYmpbc2l6ZSAtIDFdID0gUE9JU09OX0VORDsKK30KKworc3RhdGljIHZv aWQgcG9pc29uX2VsZW1lbnQobWVtcG9vbF90ICpwb29sLCB2b2lkICplbGVtZW50KQorewor CS8qIE1lbXBvb2xzIGJhY2tlZCBieSBzbGFiIGFsbG9jYXRvciAqLworCWlmIChwb29sLT5h bGxvYyA9PSBtZW1wb29sX2FsbG9jX3NsYWIgfHwgcG9vbC0+YWxsb2MgPT0gbWVtcG9vbF9r bWFsbG9jKQorCQlfX3BvaXNvbl9lbGVtZW50KGVsZW1lbnQsIGtzaXplKGVsZW1lbnQpKTsK KworCS8qIE1lbXBvb2xzIGJhY2tlZCBieSBwYWdlIGFsbG9jYXRvciAqLworCWlmIChwb29s LT5hbGxvYyA9PSBtZW1wb29sX2FsbG9jX3BhZ2VzKSB7CisJCWludCBvcmRlciA9IChpbnQp KGxvbmcpcG9vbC0+cG9vbF9kYXRhOworCQl2b2lkICphZGRyID0ga21hcF9hdG9taWMoKHN0 cnVjdCBwYWdlICopZWxlbWVudCk7CisKKwkJX19wb2lzb25fZWxlbWVudChhZGRyLCAxVUwg PDwgKFBBR0VfU0hJRlQgKyBvcmRlcikpOworCQlrdW5tYXBfYXRvbWljKGFkZHIpOworCX0K K30KKyNlbHNlIC8qIENPTkZJR19ERUJVR19TTEFCIHx8IENPTkZJR19TTFVCX0RFQlVHX09O ICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfZWxlbWVudChtZW1wb29sX3QgKnBvb2ws IHZvaWQgKmVsZW1lbnQpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcG9pc29uX2VsZW1l bnQobWVtcG9vbF90ICpwb29sLCB2b2lkICplbGVtZW50KQoreworfQorI2VuZGlmIC8qIENP TkZJR19ERUJVR19TTEFCIHx8IENPTkZJR19TTFVCX0RFQlVHX09OICovCisKIHN0YXRpYyB2 b2lkIGFkZF9lbGVtZW50KG1lbXBvb2xfdCAqcG9vbCwgdm9pZCAqZWxlbWVudCkKIHsKIAlC VUdfT04ocG9vbC0+Y3Vycl9uciA+PSBwb29sLT5taW5fbnIpOworCXBvaXNvbl9lbGVtZW50 KHBvb2wsIGVsZW1lbnQpOwogCXBvb2wtPmVsZW1lbnRzW3Bvb2wtPmN1cnJfbnIrK10gPSBl bGVtZW50OwogfQogCiBzdGF0aWMgdm9pZCAqcmVtb3ZlX2VsZW1lbnQobWVtcG9vbF90ICpw b29sKQogewotCUJVR19PTihwb29sLT5jdXJyX25yIDw9IDApOwotCXJldHVybiBwb29sLT5l bGVtZW50c1stLXBvb2wtPmN1cnJfbnJdOworCXZvaWQgKmVsZW1lbnQgPSBwb29sLT5lbGVt ZW50c1stLXBvb2wtPmN1cnJfbnJdOworCisJQlVHX09OKHBvb2wtPmN1cnJfbnIgPCAwKTsK KwljaGVja19lbGVtZW50KHBvb2wsIGVsZW1lbnQpOworCXJldHVybiBlbGVtZW50OwogfQog CiAvKioKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwpp bmRleCA0OTRhMDgxLi44NzJlOGNjIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysr IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgv Y29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51 eC9rbWVtY2hlY2suaD4KKyNpbmNsdWRlIDxsaW51eC9rYXNhbi5oPgogI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxs aW51eC9wYWdldmVjLmg+CkBAIC03MDYsNiArNzA3LDcgQEAgc3RhdGljIGJvb2wgZnJlZV9w YWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiAK IAl0cmFjZV9tbV9wYWdlX2ZyZWUocGFnZSwgb3JkZXIpOwogCWttZW1jaGVja19mcmVlX3No YWRvdyhwYWdlLCBvcmRlcik7CisJa2FzYW5fZnJlZV9wYWdlcyhwYWdlLCBvcmRlcik7CiAK IAlpZiAoUGFnZUFub24ocGFnZSkpCiAJCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwpAQCAtODcx LDYgKzg3Myw3IEBAIHN0YXRpYyBpbnQgcHJlcF9uZXdfcGFnZShzdHJ1Y3QgcGFnZSAqcGFn ZSwgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpCiAKIAlhcmNoX2FsbG9jX3BhZ2UocGFn ZSwgb3JkZXIpOwogCWtlcm5lbF9tYXBfcGFnZXMocGFnZSwgMSA8PCBvcmRlciwgMSk7CisJ a2FzYW5fYWxsb2NfcGFnZXMocGFnZSwgb3JkZXIpOwogCiAJaWYgKGdmcF9mbGFncyAmIF9f R0ZQX1pFUk8pCiAJCXByZXBfemVyb19wYWdlKHBhZ2UsIG9yZGVyLCBnZnBfZmxhZ3MpOwpk aWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IGJkODg0MTEuLmRkOGY4 NDQgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTM2MzcsNiAr MzYzNyw3IEBAIGttZW1fY2FjaGVfYWxsb2NfdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKmNh Y2hlcCwgZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplKQogCiAJdHJhY2Vfa21hbGxvYyhfUkVU X0lQXywgcmV0LAogCQkgICAgICBzaXplLCBjYWNoZXAtPnNpemUsIGZsYWdzKTsKKwlrYXNh bl9rbWFsbG9jKGNhY2hlcCwgcmV0LCBzaXplKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JU X1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX3RyYWNlKTsKQEAgLTM2NjgsNiArMzY2OSw3IEBA IHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAq Y2FjaGVwLAogCXRyYWNlX2ttYWxsb2Nfbm9kZShfUkVUX0lQXywgcmV0LAogCQkJICAgc2l6 ZSwgY2FjaGVwLT5zaXplLAogCQkJICAgZmxhZ3MsIG5vZGVpZCk7CisJa2FzYW5fa21hbGxv YyhjYWNoZXAsIHJldCwgc2l6ZSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wo a21lbV9jYWNoZV9hbGxvY19ub2RlX3RyYWNlKTsKZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBi L21tL3NsYWIuaAppbmRleCA0ZDZkODM2Li44ODdlYjRjIDEwMDY0NAotLS0gYS9tbS9zbGFi LmgKKysrIGIvbW0vc2xhYi5oCkBAIC0yMjcsNyArMjI3LDcgQEAgc3RhdGljIGlubGluZSBz dHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVfZnJvbV9vYmooc3RydWN0IGttZW1fY2FjaGUgKnMs IHZvaWQgKngpCiAJICogdG8gbm90IGRvIGV2ZW4gdGhlIGFzc2lnbm1lbnQuIEluIHRoYXQg Y2FzZSwgc2xhYl9lcXVhbF9vcl9yb290CiAJICogd2lsbCBhbHNvIGJlIGEgY29uc3RhbnQu CiAJICovCi0JaWYgKCFtZW1jZ19rbWVtX2VuYWJsZWQoKSAmJiAhdW5saWtlbHkocy0+Zmxh Z3MgJiBTTEFCX0RFQlVHX0ZSRUUpKQorCWlmICghdW5saWtlbHkocy0+ZmxhZ3MgJiBTTEFC X0RFQlVHX0ZSRUUpKQogCQlyZXR1cm4gczsKIAogCXBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFn ZSh4KTsKZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5j CmluZGV4IDdkMjFkM2YuLmRkMTg0N2YgMTAwNjQ0Ci0tLSBhL21tL3NsYWJfY29tbW9uLmMK KysrIGIvbW0vc2xhYl9jb21tb24uYwpAQCAtMjAsNiArMjAsMTAgQEAKICNpbmNsdWRlIDxh c20vcGFnZS5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KIAorI2RlZmluZSBD UkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2ttZW0uaD4KKwor I2luY2x1ZGUgPGxpbnV4L2thc2FuLmg+CiAjaW5jbHVkZSAic2xhYi5oIgogCiBlbnVtIHNs YWJfc3RhdGUgc2xhYl9zdGF0ZTsKQEAgLTY0MCwzICs2NDQsMTA0IEBAIHN0YXRpYyBpbnQg X19pbml0IHNsYWJfcHJvY19pbml0KHZvaWQpCiB9CiBtb2R1bGVfaW5pdChzbGFiX3Byb2Nf aW5pdCk7CiAjZW5kaWYgLyogQ09ORklHX1NMQUJJTkZPICovCisKK3N0YXRpYyBfX2Fsd2F5 c19pbmxpbmUgdm9pZCAqX19kb19rcmVhbGxvYyhjb25zdCB2b2lkICpwLCBzaXplX3QgbmV3 X3NpemUsCisJCQkJCSAgIGdmcF90IGZsYWdzKQoreworCXZvaWQgKnJldDsKKwlzaXplX3Qg a3MgPSAwOworCisJaWYgKHApCisJCWtzID0ga3NpemUocCk7CisKKwlpZiAoa3MgPj0gbmV3 X3NpemUpIHsKKwkJa2FzYW5fa3JlYWxsb2MoKHZvaWQgKilwLCBuZXdfc2l6ZSk7CisJCXJl dHVybiAodm9pZCAqKXA7CisJfQorCisJcmV0ID0ga21hbGxvY190cmFja19jYWxsZXIobmV3 X3NpemUsIGZsYWdzKTsKKwlpZiAocmV0ICYmIHApCisJCW1lbWNweShyZXQsIHAsIGtzKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogX19rcmVhbGxvYyAtIGxpa2Uga3JlYWxs b2MoKSBidXQgZG9uJ3QgZnJlZSBAcC4KKyAqIEBwOiBvYmplY3QgdG8gcmVhbGxvY2F0ZSBt ZW1vcnkgZm9yLgorICogQG5ld19zaXplOiBob3cgbWFueSBieXRlcyBvZiBtZW1vcnkgYXJl IHJlcXVpcmVkLgorICogQGZsYWdzOiB0aGUgdHlwZSBvZiBtZW1vcnkgdG8gYWxsb2NhdGUu CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGtyZWFsbG9jKCkgZXhjZXB0IGl0IG5l dmVyIGZyZWVzIHRoZSBvcmlnaW5hbGx5CisgKiBhbGxvY2F0ZWQgYnVmZmVyLiBVc2UgdGhp cyBpZiB5b3UgZG9uJ3Qgd2FudCB0byBmcmVlIHRoZSBidWZmZXIgaW1tZWRpYXRlbHkKKyAq IGxpa2UsIGZvciBleGFtcGxlLCB3aXRoIFJDVS4KKyAqLwordm9pZCAqX19rcmVhbGxvYyhj b25zdCB2b2lkICpwLCBzaXplX3QgbmV3X3NpemUsIGdmcF90IGZsYWdzKQoreworCWlmICh1 bmxpa2VseSghbmV3X3NpemUpKQorCQlyZXR1cm4gWkVST19TSVpFX1BUUjsKKworCXJldHVy biBfX2RvX2tyZWFsbG9jKHAsIG5ld19zaXplLCBmbGFncyk7CisKK30KK0VYUE9SVF9TWU1C T0woX19rcmVhbGxvYyk7CisKKy8qKgorICoga3JlYWxsb2MgLSByZWFsbG9jYXRlIG1lbW9y eS4gVGhlIGNvbnRlbnRzIHdpbGwgcmVtYWluIHVuY2hhbmdlZC4KKyAqIEBwOiBvYmplY3Qg dG8gcmVhbGxvY2F0ZSBtZW1vcnkgZm9yLgorICogQG5ld19zaXplOiBob3cgbWFueSBieXRl cyBvZiBtZW1vcnkgYXJlIHJlcXVpcmVkLgorICogQGZsYWdzOiB0aGUgdHlwZSBvZiBtZW1v cnkgdG8gYWxsb2NhdGUuCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoZSBvYmplY3QgcG9p bnRlZCB0byBhcmUgcHJlc2VydmVkIHVwIHRvIHRoZQorICogbGVzc2VyIG9mIHRoZSBuZXcg YW5kIG9sZCBzaXplcy4gIElmIEBwIGlzICVOVUxMLCBrcmVhbGxvYygpCisgKiBiZWhhdmVz IGV4YWN0bHkgbGlrZSBrbWFsbG9jKCkuICBJZiBAbmV3X3NpemUgaXMgMCBhbmQgQHAgaXMg bm90IGEKKyAqICVOVUxMIHBvaW50ZXIsIHRoZSBvYmplY3QgcG9pbnRlZCB0byBpcyBmcmVl ZC4KKyAqLwordm9pZCAqa3JlYWxsb2MoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IG5ld19zaXpl LCBnZnBfdCBmbGFncykKK3sKKwl2b2lkICpyZXQ7CisKKwlpZiAodW5saWtlbHkoIW5ld19z aXplKSkgeworCQlrZnJlZShwKTsKKwkJcmV0dXJuIFpFUk9fU0laRV9QVFI7CisJfQorCisJ cmV0ID0gX19kb19rcmVhbGxvYyhwLCBuZXdfc2l6ZSwgZmxhZ3MpOworCWlmIChyZXQgJiYg cCAhPSByZXQpCisJCWtmcmVlKHApOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1C T0woa3JlYWxsb2MpOworCisvKioKKyAqIGt6ZnJlZSAtIGxpa2Uga2ZyZWUgYnV0IHplcm8g bWVtb3J5CisgKiBAcDogb2JqZWN0IHRvIGZyZWUgbWVtb3J5IG9mCisgKgorICogVGhlIG1l bW9yeSBvZiB0aGUgb2JqZWN0IEBwIHBvaW50cyB0byBpcyB6ZXJvZWQgYmVmb3JlIGZyZWVk LgorICogSWYgQHAgaXMgJU5VTEwsIGt6ZnJlZSgpIGRvZXMgbm90aGluZy4KKyAqCisgKiBO b3RlOiB0aGlzIGZ1bmN0aW9uIHplcm9lcyB0aGUgd2hvbGUgYWxsb2NhdGVkIGJ1ZmZlciB3 aGljaCBjYW4gYmUgYSBnb29kCisgKiBkZWFsIGJpZ2dlciB0aGFuIHRoZSByZXF1ZXN0ZWQg YnVmZmVyIHNpemUgcGFzc2VkIHRvIGttYWxsb2MoKS4gU28gYmUKKyAqIGNhcmVmdWwgd2hl biB1c2luZyB0aGlzIGZ1bmN0aW9uIGluIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSBjb2RlLgor ICovCit2b2lkIGt6ZnJlZShjb25zdCB2b2lkICpwKQoreworCXNpemVfdCBrczsKKwl2b2lk ICptZW0gPSAodm9pZCAqKXA7CisKKwlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUiht ZW0pKSkKKwkJcmV0dXJuOworCWtzID0ga3NpemUobWVtKTsKKwltZW1zZXQobWVtLCAwLCBr cyk7CisJa2ZyZWUobWVtKTsKK30KK0VYUE9SVF9TWU1CT0woa3pmcmVlKTsKKworLyogVHJh Y2Vwb2ludHMgZGVmaW5pdGlvbnMuICovCitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa21h bGxvYyk7CitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvYyk7CitF WFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa21hbGxvY19ub2RlKTsKK0VYUE9SVF9UUkFDRVBP SU5UX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX25vZGUpOworRVhQT1JUX1RSQUNFUE9JTlRf U1lNQk9MKGtmcmVlKTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2Zy ZWUpOwpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IGRlYWVkN2Iu LjEzMjBiYTIgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYworKysgYi9tbS9zbHViLmMKQEAgLTIw LDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGlu dXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUg PGxpbnV4L2thc2FuLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWNoZWNrLmg+CiAjaW5jbHVk ZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+CkBAIC00NDQsNiAr NDQ1LDggQEAgc3RhdGljIHZvaWQgZ2V0X21hcChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3Ry dWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgKm1hcCkKICAqLwogI2lmZGVmIENPTkZJ R19TTFVCX0RFQlVHX09OCiBzdGF0aWMgaW50IHNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxU X0ZMQUdTOworI2VsaWYgZGVmaW5lZCAoQ09ORklHX0tBU0FOKQorc3RhdGljIGludCBzbHVi X2RlYnVnID0gU0xBQl9TVE9SRV9VU0VSOwogI2Vsc2UKIHN0YXRpYyBpbnQgc2x1Yl9kZWJ1 ZzsKICNlbmRpZgpAQCAtNDUyLDEyICs0NTUsMzAgQEAgc3RhdGljIGNoYXIgKnNsdWJfZGVi dWdfc2xhYnM7CiBzdGF0aWMgaW50IGRpc2FibGVfaGlnaGVyX29yZGVyX2RlYnVnOwogCiAv KgorICogc2x1YiBpcyBhYm91dCB0byBtYW5pcHVsYXRlIGludGVybmFsIG9iamVjdCBtZXRh ZGF0YS4gIFRoaXMgbWVtb3J5IGxpZXMKKyAqIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBh bGxvY2F0ZWQgb2JqZWN0LCBzbyBhY2Nlc3NpbmcgaXQgd291bGQgbm9ybWFsbHkKKyAqIGJl IHJlcG9ydGVkIGJ5IGthc2FuIGFzIGEgYm91bmRzIGVycm9yLiAgbWV0YWRhdGFfYWNjZXNz X2VuYWJsZSgpIGlzIHVzZWQKKyAqIHRvIHRlbGwga2FzYW4gdGhhdCB0aGVzZSBhY2Nlc3Nl cyBhcmUgT0suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZXRhZGF0YV9hY2Nlc3NfZW5h YmxlKHZvaWQpCit7CisJa2FzYW5fZGlzYWJsZV9jdXJyZW50KCk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBtZXRhZGF0YV9hY2Nlc3NfZGlzYWJsZSh2b2lkKQoreworCWthc2FuX2Vu YWJsZV9jdXJyZW50KCk7Cit9CisKKy8qCiAgKiBPYmplY3QgZGVidWdnaW5nCiAgKi8KIHN0 YXRpYyB2b2lkIHByaW50X3NlY3Rpb24oY2hhciAqdGV4dCwgdTggKmFkZHIsIHVuc2lnbmVk IGludCBsZW5ndGgpCiB7CisJbWV0YWRhdGFfYWNjZXNzX2VuYWJsZSgpOwogCXByaW50X2hl eF9kdW1wKEtFUk5fRVJSLCB0ZXh0LCBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgMSwgYWRk ciwKIAkJCWxlbmd0aCwgMSk7CisJbWV0YWRhdGFfYWNjZXNzX2Rpc2FibGUoKTsKIH0KIAog c3RhdGljIHN0cnVjdCB0cmFjayAqZ2V0X3RyYWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2 b2lkICpvYmplY3QsCkBAIC00ODcsNyArNTA4LDkgQEAgc3RhdGljIHZvaWQgc2V0X3RyYWNr KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsCiAJCXRyYWNlLm1heF9lbnRy aWVzID0gVFJBQ0tfQUREUlNfQ09VTlQ7CiAJCXRyYWNlLmVudHJpZXMgPSBwLT5hZGRyczsK IAkJdHJhY2Uuc2tpcCA9IDM7CisJCW1ldGFkYXRhX2FjY2Vzc19lbmFibGUoKTsKIAkJc2F2 ZV9zdGFja190cmFjZSgmdHJhY2UpOworCQltZXRhZGF0YV9hY2Nlc3NfZGlzYWJsZSgpOwog CiAJCS8qIFNlZSByYW50IGluIGxvY2tkZXAuYyAqLwogCQlpZiAodHJhY2UubnJfZW50cmll cyAhPSAwICYmCkBAIC02MTMsNyArNjM2LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfdHJhaWxl cihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsIHU4ICpwKQogCWR1 bXBfc3RhY2soKTsKIH0KIAotc3RhdGljIHZvaWQgb2JqZWN0X2VycihzdHJ1Y3Qga21lbV9j YWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCit2b2lkIG9iamVjdF9lcnIoc3RydWN0IGtt ZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJdTggKm9iamVjdCwgY2hhciAq cmVhc29uKQogewogCXNsYWJfYnVnKHMsICIlcyIsIHJlYXNvbik7CkBAIC02NjAsNyArNjgz LDkgQEAgc3RhdGljIGludCBjaGVja19ieXRlc19hbmRfcmVwb3J0KHN0cnVjdCBrbWVtX2Nh Y2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAl1OCAqZmF1bHQ7CiAJdTggKmVuZDsKIAor CW1ldGFkYXRhX2FjY2Vzc19lbmFibGUoKTsKIAlmYXVsdCA9IG1lbWNocl9pbnYoc3RhcnQs IHZhbHVlLCBieXRlcyk7CisJbWV0YWRhdGFfYWNjZXNzX2Rpc2FibGUoKTsKIAlpZiAoIWZh dWx0KQogCQlyZXR1cm4gMTsKIApAQCAtNzUzLDcgKzc3OCw5IEBAIHN0YXRpYyBpbnQgc2xh Yl9wYWRfY2hlY2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlKQog CWlmICghcmVtYWluZGVyKQogCQlyZXR1cm4gMTsKIAorCW1ldGFkYXRhX2FjY2Vzc19lbmFi bGUoKTsKIAlmYXVsdCA9IG1lbWNocl9pbnYoZW5kIC0gcmVtYWluZGVyLCBQT0lTT05fSU5V U0UsIHJlbWFpbmRlcik7CisJbWV0YWRhdGFfYWNjZXNzX2Rpc2FibGUoKTsKIAlpZiAoIWZh dWx0KQogCQlyZXR1cm4gMTsKIAl3aGlsZSAoZW5kID4gZmF1bHQgJiYgZW5kWy0xXSA9PSBQ T0lTT05fSU5VU0UpCkBAIC05MzMsNiArOTYwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNs YWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywg dm9pZAogCWZsYWdzICY9IGdmcF9hbGxvd2VkX21hc2s7CiAJa21lbWNoZWNrX3NsYWJfYWxs b2MocywgZmxhZ3MsIG9iamVjdCwgc2xhYl9rc2l6ZShzKSk7CiAJa21lbWxlYWtfYWxsb2Nf cmVjdXJzaXZlKG9iamVjdCwgcy0+b2JqZWN0X3NpemUsIDEsIHMtPmZsYWdzLCBmbGFncyk7 CisJa2FzYW5fc2xhYl9hbGxvYyhzLCBvYmplY3QpOwogfQogCiBzdGF0aWMgaW5saW5lIHZv aWQgc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKngpCkBAIC05 NTYsNiArOTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNsYWJfZnJlZV9ob29rKHN0cnVj dCBrbWVtX2NhY2hlICpzLCB2b2lkICp4KQogI2VuZGlmCiAJaWYgKCEocy0+ZmxhZ3MgJiBT TEFCX0RFQlVHX09CSkVDVFMpKQogCQlkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQoeCwgcy0+ b2JqZWN0X3NpemUpOworCisJa2FzYW5fc2xhYl9mcmVlKHMsIHgpOwogfQogCiAvKgpAQCAt MTMzNiw4ICsxMzY2LDExIEBAIHN0YXRpYyB2b2lkIHNldHVwX29iamVjdChzdHJ1Y3Qga21l bV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJdm9pZCAqb2JqZWN0KQogewog CXNldHVwX29iamVjdF9kZWJ1ZyhzLCBwYWdlLCBvYmplY3QpOwotCWlmICh1bmxpa2VseShz LT5jdG9yKSkKKwlpZiAodW5saWtlbHkocy0+Y3RvcikpIHsKKwkJa2FzYW5fdW5wb2lzb25f b2JqZWN0X2RhdGEocywgb2JqZWN0KTsKIAkJcy0+Y3RvcihvYmplY3QpOworCQlrYXNhbl9w b2lzb25fb2JqZWN0X2RhdGEocywgb2JqZWN0KTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qg cGFnZSAqbmV3X3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBpbnQg bm9kZSkKQEAgLTEzNjgsNiArMTQwMSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbmV3X3Ns YWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIAlpZiAo dW5saWtlbHkocy0+ZmxhZ3MgJiBTTEFCX1BPSVNPTikpCiAJCW1lbXNldChzdGFydCwgUE9J U09OX0lOVVNFLCBQQUdFX1NJWkUgPDwgb3JkZXIpOwogCisJa2FzYW5fcG9pc29uX3NsYWIo cGFnZSk7CisKIAlsYXN0ID0gc3RhcnQ7CiAJZm9yX2VhY2hfb2JqZWN0KHAsIHMsIHN0YXJ0 LCBwYWdlLT5vYmplY3RzKSB7CiAJCXNldHVwX29iamVjdChzLCBwYWdlLCBsYXN0KTsKQEAg LTI0MTcsNiArMjQ1Miw3IEBAIHZvaWQgKmttZW1fY2FjaGVfYWxsb2NfdHJhY2Uoc3RydWN0 IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBzaXplX3Qgc2l6ZSkKIHsKIAl2b2lk ICpyZXQgPSBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBfUkVUX0lQXyk7CiAJdHJhY2Vfa21h bGxvYyhfUkVUX0lQXywgcmV0LCBzaXplLCBzLT5zaXplLCBnZnBmbGFncyk7CisJa2FzYW5f a21hbGxvYyhzLCByZXQsIHNpemUpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9M KGttZW1fY2FjaGVfYWxsb2NfdHJhY2UpOwpAQCAtMjQ1MSw2ICsyNDg3LDggQEAgdm9pZCAq a21lbV9jYWNoZV9hbGxvY19ub2RlX3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCiAJ dHJhY2Vfa21hbGxvY19ub2RlKF9SRVRfSVBfLCByZXQsCiAJCQkgICBzaXplLCBzLT5zaXpl LCBnZnBmbGFncywgbm9kZSk7CisKKwlrYXNhbl9rbWFsbG9jKHMsIHJldCwgc2l6ZSk7CiAJ cmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlX3Ry YWNlKTsKQEAgLTI4MzgsNiArMjg3Niw3IEBAIHN0YXRpYyB2b2lkIGVhcmx5X2ttZW1fY2Fj aGVfbm9kZV9hbGxvYyhpbnQgbm9kZSkKIAlpbml0X29iamVjdChrbWVtX2NhY2hlX25vZGUs IG4sIFNMVUJfUkVEX0FDVElWRSk7CiAJaW5pdF90cmFja2luZyhrbWVtX2NhY2hlX25vZGUs IG4pOwogI2VuZGlmCisJa2FzYW5fa21hbGxvYyhrbWVtX2NhY2hlX25vZGUsIG4sIHNpemVv ZihzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlKSk7CiAJaW5pdF9rbWVtX2NhY2hlX25vZGUobik7 CiAJaW5jX3NsYWJzX25vZGUoa21lbV9jYWNoZV9ub2RlLCBub2RlLCBwYWdlLT5vYmplY3Rz KTsKIApAQCAtMzIzNSw2ICszMjc0LDggQEAgdm9pZCAqX19rbWFsbG9jKHNpemVfdCBzaXpl LCBnZnBfdCBmbGFncykKIAogCXRyYWNlX2ttYWxsb2MoX1JFVF9JUF8sIHJldCwgc2l6ZSwg cy0+c2l6ZSwgZmxhZ3MpOwogCisJa2FzYW5fa21hbGxvYyhzLCByZXQsIHNpemUpOworCiAJ cmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woX19rbWFsbG9jKTsKQEAgLTMyNTEsNiAr MzI5Miw3IEBAIHN0YXRpYyB2b2lkICprbWFsbG9jX2xhcmdlX25vZGUoc2l6ZV90IHNpemUs IGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIAkJcHRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwog CiAJa21lbWxlYWtfYWxsb2MocHRyLCBzaXplLCAxLCBmbGFncyk7CisJa2FzYW5fa21hbGxv Y19sYXJnZShwdHIsIHNpemUpOwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTMyNzgsMTIgKzMz MjAsMTQgQEAgdm9pZCAqX19rbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdz LCBpbnQgbm9kZSkKIAogCXRyYWNlX2ttYWxsb2Nfbm9kZShfUkVUX0lQXywgcmV0LCBzaXpl LCBzLT5zaXplLCBmbGFncywgbm9kZSk7CiAKKwlrYXNhbl9rbWFsbG9jKHMsIHJldCwgc2l6 ZSk7CisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9kZSk7 CiAjZW5kaWYKIAotc2l6ZV90IGtzaXplKGNvbnN0IHZvaWQgKm9iamVjdCkKK3N0YXRpYyBz aXplX3QgX19rc2l6ZShjb25zdCB2b2lkICpvYmplY3QpCiB7CiAJc3RydWN0IHBhZ2UgKnBh Z2U7CiAKQEAgLTMyOTksNiArMzM0MywxNSBAQCBzaXplX3Qga3NpemUoY29uc3Qgdm9pZCAq b2JqZWN0KQogCiAJcmV0dXJuIHNsYWJfa3NpemUocGFnZS0+c2xhYl9jYWNoZSk7CiB9CisK K3NpemVfdCBrc2l6ZShjb25zdCB2b2lkICpvYmplY3QpCit7CisJc2l6ZV90IHNpemUgPSBf X2tzaXplKG9iamVjdCk7CisJLyogV2UgYXNzdW1lIHRoYXQga3NpemUgY2FsbGVycyBjb3Vs ZCB1c2Ugd2hvbGUgYWxsb2NhdGVkIGFyZWEsCisJICAgc28gd2UgbmVlZCB1bnBvaXNvbiB0 aGlzIGFyZWEuICovCisJa2FzYW5fa3JlYWxsb2Mob2JqZWN0LCBzaXplKTsKKwlyZXR1cm4g c2l6ZTsKK30KIEVYUE9SVF9TWU1CT0woa3NpemUpOwogCiAjaWZkZWYgQ09ORklHX1NMVUJf REVCVUcKQEAgLTMzNTEsNiArMzQwNCw3IEBAIHZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqeCkK IAlpZiAodW5saWtlbHkoIVBhZ2VTbGFiKHBhZ2UpKSkgewogCQlCVUdfT04oIVBhZ2VDb21w b3VuZChwYWdlKSk7CiAJCWttZW1sZWFrX2ZyZWUoeCk7CisJCWthc2FuX2tmcmVlX2xhcmdl KHgpOwogCQlfX2ZyZWVfbWVtY2dfa21lbV9wYWdlcyhwYWdlLCBjb21wb3VuZF9vcmRlcihw YWdlKSk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGls LmMKaW5kZXggMGIxNzI1Mi4uNGIzYzg4YiAxMDA2NDQKLS0tIGEvbW0vdXRpbC5jCisrKyBi L21tL3V0aWwuYwpAQCAtMTEsOSArMTEsNiBAQAogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIK IAotI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCi0jaW5jbHVkZSA8dHJhY2UvZXZlbnRz L2ttZW0uaD4KLQogLyoqCiAgKiBrc3RyZHVwIC0gYWxsb2NhdGUgc3BhY2UgZm9yIGFuZCBj b3B5IGFuIGV4aXN0aW5nIHN0cmluZwogICogQHM6IHRoZSBzdHJpbmcgdG8gZHVwbGljYXRl CkBAIC0xMDcsOTcgKzEwNCw2IEBAIHZvaWQgKm1lbWR1cF91c2VyKGNvbnN0IHZvaWQgX191 c2VyICpzcmMsIHNpemVfdCBsZW4pCiB9CiBFWFBPUlRfU1lNQk9MKG1lbWR1cF91c2VyKTsK IAotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2RvX2tyZWFsbG9jKGNvbnN0IHZv aWQgKnAsIHNpemVfdCBuZXdfc2l6ZSwKLQkJCQkJICAgZ2ZwX3QgZmxhZ3MpCi17Ci0Jdm9p ZCAqcmV0OwotCXNpemVfdCBrcyA9IDA7Ci0KLQlpZiAocCkKLQkJa3MgPSBrc2l6ZShwKTsK LQotCWlmIChrcyA+PSBuZXdfc2l6ZSkKLQkJcmV0dXJuICh2b2lkICopcDsKLQotCXJldCA9 IGttYWxsb2NfdHJhY2tfY2FsbGVyKG5ld19zaXplLCBmbGFncyk7Ci0JaWYgKHJldCAmJiBw KQotCQltZW1jcHkocmV0LCBwLCBrcyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAq IF9fa3JlYWxsb2MgLSBsaWtlIGtyZWFsbG9jKCkgYnV0IGRvbid0IGZyZWUgQHAuCi0gKiBA cDogb2JqZWN0IHRvIHJlYWxsb2NhdGUgbWVtb3J5IGZvci4KLSAqIEBuZXdfc2l6ZTogaG93 IG1hbnkgYnl0ZXMgb2YgbWVtb3J5IGFyZSByZXF1aXJlZC4KLSAqIEBmbGFnczogdGhlIHR5 cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgbGlr ZSBrcmVhbGxvYygpIGV4Y2VwdCBpdCBuZXZlciBmcmVlcyB0aGUgb3JpZ2luYWxseQotICog YWxsb2NhdGVkIGJ1ZmZlci4gVXNlIHRoaXMgaWYgeW91IGRvbid0IHdhbnQgdG8gZnJlZSB0 aGUgYnVmZmVyIGltbWVkaWF0ZWx5Ci0gKiBsaWtlLCBmb3IgZXhhbXBsZSwgd2l0aCBSQ1Uu Ci0gKi8KLXZvaWQgKl9fa3JlYWxsb2MoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IG5ld19zaXpl LCBnZnBfdCBmbGFncykKLXsKLQlpZiAodW5saWtlbHkoIW5ld19zaXplKSkKLQkJcmV0dXJu IFpFUk9fU0laRV9QVFI7Ci0KLQlyZXR1cm4gX19kb19rcmVhbGxvYyhwLCBuZXdfc2l6ZSwg ZmxhZ3MpOwotCi19Ci1FWFBPUlRfU1lNQk9MKF9fa3JlYWxsb2MpOwotCi0vKioKLSAqIGty ZWFsbG9jIC0gcmVhbGxvY2F0ZSBtZW1vcnkuIFRoZSBjb250ZW50cyB3aWxsIHJlbWFpbiB1 bmNoYW5nZWQuCi0gKiBAcDogb2JqZWN0IHRvIHJlYWxsb2NhdGUgbWVtb3J5IGZvci4KLSAq IEBuZXdfc2l6ZTogaG93IG1hbnkgYnl0ZXMgb2YgbWVtb3J5IGFyZSByZXF1aXJlZC4KLSAq IEBmbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLgotICoKLSAqIFRoZSBj b250ZW50cyBvZiB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYXJlIHByZXNlcnZlZCB1cCB0byB0 aGUKLSAqIGxlc3NlciBvZiB0aGUgbmV3IGFuZCBvbGQgc2l6ZXMuICBJZiBAcCBpcyAlTlVM TCwga3JlYWxsb2MoKQotICogYmVoYXZlcyBleGFjdGx5IGxpa2Uga21hbGxvYygpLiAgSWYg QG5ld19zaXplIGlzIDAgYW5kIEBwIGlzIG5vdCBhCi0gKiAlTlVMTCBwb2ludGVyLCB0aGUg b2JqZWN0IHBvaW50ZWQgdG8gaXMgZnJlZWQuCi0gKi8KLXZvaWQgKmtyZWFsbG9jKGNvbnN0 IHZvaWQgKnAsIHNpemVfdCBuZXdfc2l6ZSwgZ2ZwX3QgZmxhZ3MpCi17Ci0Jdm9pZCAqcmV0 OwotCi0JaWYgKHVubGlrZWx5KCFuZXdfc2l6ZSkpIHsKLQkJa2ZyZWUocCk7Ci0JCXJldHVy biBaRVJPX1NJWkVfUFRSOwotCX0KLQotCXJldCA9IF9fZG9fa3JlYWxsb2MocCwgbmV3X3Np emUsIGZsYWdzKTsKLQlpZiAocmV0ICYmIHAgIT0gcmV0KQotCQlrZnJlZShwKTsKLQotCXJl dHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGtyZWFsbG9jKTsKLQotLyoqCi0gKiBremZy ZWUgLSBsaWtlIGtmcmVlIGJ1dCB6ZXJvIG1lbW9yeQotICogQHA6IG9iamVjdCB0byBmcmVl IG1lbW9yeSBvZgotICoKLSAqIFRoZSBtZW1vcnkgb2YgdGhlIG9iamVjdCBAcCBwb2ludHMg dG8gaXMgemVyb2VkIGJlZm9yZSBmcmVlZC4KLSAqIElmIEBwIGlzICVOVUxMLCBremZyZWUo KSBkb2VzIG5vdGhpbmcuCi0gKgotICogTm90ZTogdGhpcyBmdW5jdGlvbiB6ZXJvZXMgdGhl IHdob2xlIGFsbG9jYXRlZCBidWZmZXIgd2hpY2ggY2FuIGJlIGEgZ29vZAotICogZGVhbCBi aWdnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplIHBhc3NlZCB0byBrbWFsbG9j KCkuIFNvIGJlCi0gKiBjYXJlZnVsIHdoZW4gdXNpbmcgdGhpcyBmdW5jdGlvbiBpbiBwZXJm b3JtYW5jZSBzZW5zaXRpdmUgY29kZS4KLSAqLwotdm9pZCBremZyZWUoY29uc3Qgdm9pZCAq cCkKLXsKLQlzaXplX3Qga3M7Ci0Jdm9pZCAqbWVtID0gKHZvaWQgKilwOwotCi0JaWYgKHVu bGlrZWx5KFpFUk9fT1JfTlVMTF9QVFIobWVtKSkpCi0JCXJldHVybjsKLQlrcyA9IGtzaXpl KG1lbSk7Ci0JbWVtc2V0KG1lbSwgMCwga3MpOwotCWtmcmVlKG1lbSk7Ci19Ci1FWFBPUlRf U1lNQk9MKGt6ZnJlZSk7Ci0KIC8qCiAgKiBzdHJuZHVwX3VzZXIgLSBkdXBsaWNhdGUgYW4g ZXhpc3Rpbmcgc3RyaW5nIGZyb20gdXNlciBzcGFjZQogICogQHM6IFRoZSBzdHJpbmcgdG8g ZHVwbGljYXRlCkBAIC00MDAsOSArMzA2LDMgQEAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKnBh Z2VfbWFwcGluZyhzdHJ1Y3QgcGFnZSAqcGFnZSkKIH0KIAogLyogVHJhY2Vwb2ludHMgZGVm aW5pdGlvbnMuICovCi1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa21hbGxvYyk7Ci1FWFBP UlRfVFJBQ0VQT0lOVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvYyk7Ci1FWFBPUlRfVFJBQ0VQ T0lOVF9TWU1CT0woa21hbGxvY19ub2RlKTsKLUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChr bWVtX2NhY2hlX2FsbG9jX25vZGUpOwotRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGtmcmVl KTsKLUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpOwpkaWZmIC0t Z2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGQ0NTY1NjAuLjBjMmU4 ZjggMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTMx LDcgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90 bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgotCisjaW5jbHVkZSA8bGlu dXgva2FzYW4uaD4KIHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCB7CiAJc3RydWN0IGxsaXN0X2hl YWQgbGlzdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3E7CkBAIC0xMjg1LDcgKzEyODUsNyBA QCB2b2lkIHVubWFwX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVk IGxvbmcgc2l6ZSkKIGludCBtYXBfdm1fYXJlYShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBw Z3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKIHsKIAl1bnNpZ25lZCBsb25n IGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOwotCXVuc2lnbmVkIGxvbmcgZW5k ID0gYWRkciArIGFyZWEtPnNpemUgLSBQQUdFX1NJWkU7CisJdW5zaWduZWQgbG9uZyBlbmQg PSBhZGRyICsgZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKTsKIAlpbnQgZXJyOwogCiAJZXJyID0g dm1hcF9wYWdlX3JhbmdlKGFkZHIsIGVuZCwgcHJvdCwgKnBhZ2VzKTsKQEAgLTEzNTYsMTAg KzEzNTYsOCBAQCBzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9ub2Rl KHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAlpZiAodW5saWtlbHkoIWFyZWEpKQogCQlyZXR1cm4g TlVMTDsKIAotCS8qCi0JICogV2UgYWx3YXlzIGFsbG9jYXRlIGEgZ3VhcmQgcGFnZS4KLQkg Ki8KLQlzaXplICs9IFBBR0VfU0laRTsKKwlpZiAoIShmbGFncyAmIFZNX05PX0dVQVJEKSkK KwkJc2l6ZSArPSBQQUdFX1NJWkU7CiAKIAl2YSA9IGFsbG9jX3ZtYXBfYXJlYShzaXplLCBh bGlnbiwgc3RhcnQsIGVuZCwgbm9kZSwgZ2ZwX21hc2spOwogCWlmIChJU19FUlIodmEpKSB7 CkBAIC0xNDYxLDYgKzE0NTksNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJl YShjb25zdCB2b2lkICphZGRyKQogCQlzcGluX3VubG9jaygmdm1hcF9hcmVhX2xvY2spOwog CiAJCXZtYXBfZGVidWdfZnJlZV9yYW5nZSh2YS0+dmFfc3RhcnQsIHZhLT52YV9lbmQpOwor CQlrYXNhbl9mcmVlX3NoYWRvdyh2bSk7CiAJCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsK IAkJdm0tPnNpemUgLT0gUEFHRV9TSVpFOwogCkBAIC0xNjA2LDcgKzE2MDUsNyBAQCBzdGF0 aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBn ZnBfdCBnZnBfbWFzaywKIAl1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIGFycmF5X3NpemUsIGk7 CiAJZ2ZwX3QgbmVzdGVkX2dmcCA9IChnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0spIHwg X19HRlBfWkVSTzsKIAotCW5yX3BhZ2VzID0gKGFyZWEtPnNpemUgLSBQQUdFX1NJWkUpID4+ IFBBR0VfU0hJRlQ7CisJbnJfcGFnZXMgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpID4+IFBB R0VfU0hJRlQ7CiAJYXJyYXlfc2l6ZSA9IChucl9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFn ZSAqKSk7CiAKIAlhcmVhLT5ucl9wYWdlcyA9IG5yX3BhZ2VzOwpAQCAtMTY2Myw2ICsxNjYy LDcgQEAgZmFpbDoKICAqCUBlbmQ6CQl2bSBhcmVhIHJhbmdlIGVuZAogICoJQGdmcF9tYXNr OglmbGFncyBmb3IgdGhlIHBhZ2UgbGV2ZWwgYWxsb2NhdG9yCiAgKglAcHJvdDoJCXByb3Rl Y3Rpb24gbWFzayBmb3IgdGhlIGFsbG9jYXRlZCBwYWdlcworICoJQHZtX2ZsYWdzOglhZGRp dGlvbmFsIHZtIGFyZWEgZmxhZ3MgKGUuZy4gJVZNX05PX0dVQVJEKQogICoJQG5vZGU6CQlu b2RlIHRvIHVzZSBmb3IgYWxsb2NhdGlvbiBvciBOVU1BX05PX05PREUKICAqCUBjYWxsZXI6 CWNhbGxlcidzIHJldHVybiBhZGRyZXNzCiAgKgpAQCAtMTY3Miw3ICsxNjcyLDggQEAgZmFp bDoKICAqLwogdm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXpl LCB1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWdu ZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrLAotCQkJcGdwcm90X3QgcHJvdCwgaW50IG5v ZGUsIGNvbnN0IHZvaWQgKmNhbGxlcikKKwkJCXBncHJvdF90IHByb3QsIHVuc2lnbmVkIGxv bmcgdm1fZmxhZ3MsIGludCBub2RlLAorCQkJY29uc3Qgdm9pZCAqY2FsbGVyKQogewogCXN0 cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdm9pZCAqYWRkcjsKQEAgLTE2ODIsOCArMTY4Myw4 IEBAIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5z aWduZWQgbG9uZyBhbGlnbiwKIAlpZiAoIXNpemUgfHwgKHNpemUgPj4gUEFHRV9TSElGVCkg PiB0b3RhbHJhbV9wYWdlcykKIAkJZ290byBmYWlsOwogCi0JYXJlYSA9IF9fZ2V0X3ZtX2Fy ZWFfbm9kZShzaXplLCBhbGlnbiwgVk1fQUxMT0MgfCBWTV9VTkxJU1QsCi0JCQkJICBzdGFy dCwgZW5kLCBub2RlLCBnZnBfbWFzaywgY2FsbGVyKTsKKwlhcmVhID0gX19nZXRfdm1fYXJl YV9ub2RlKHNpemUsIGFsaWduLCBWTV9BTExPQyB8IFZNX1VOTElTVCB8CisJCQkJdm1fZmxh Z3MsIHN0YXJ0LCBlbmQsIG5vZGUsIGdmcF9tYXNrLCBjYWxsZXIpOwogCWlmICghYXJlYSkK IAkJZ290byBmYWlsOwogCkBAIC0xNzMyLDcgKzE3MzMsNyBAQCBzdGF0aWMgdm9pZCAqX192 bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAog CQkJICAgIGludCBub2RlLCBjb25zdCB2b2lkICpjYWxsZXIpCiB7CiAJcmV0dXJuIF9fdm1h bGxvY19ub2RlX3JhbmdlKHNpemUsIGFsaWduLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VO RCwKLQkJCQlnZnBfbWFzaywgcHJvdCwgbm9kZSwgY2FsbGVyKTsKKwkJCQlnZnBfbWFzaywg cHJvdCwgMCwgbm9kZSwgY2FsbGVyKTsKIH0KIAogdm9pZCAqX192bWFsbG9jKHVuc2lnbmVk IGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QpCkBAIC0yMDM4LDcg KzIwMzksNyBAQCBsb25nIHZyZWFkKGNoYXIgKmJ1ZiwgY2hhciAqYWRkciwgdW5zaWduZWQg bG9uZyBjb3VudCkKIAogCQl2bSA9IHZhLT52bTsKIAkJdmFkZHIgPSAoY2hhciAqKSB2bS0+ YWRkcjsKLQkJaWYgKGFkZHIgPj0gdmFkZHIgKyB2bS0+c2l6ZSAtIFBBR0VfU0laRSkKKwkJ aWYgKGFkZHIgPj0gdmFkZHIgKyBnZXRfdm1fYXJlYV9zaXplKHZtKSkKIAkJCWNvbnRpbnVl OwogCQl3aGlsZSAoYWRkciA8IHZhZGRyKSB7CiAJCQlpZiAoY291bnQgPT0gMCkKQEAgLTIw NDgsNyArMjA0OSw3IEBAIGxvbmcgdnJlYWQoY2hhciAqYnVmLCBjaGFyICphZGRyLCB1bnNp Z25lZCBsb25nIGNvdW50KQogCQkJYWRkcisrOwogCQkJY291bnQtLTsKIAkJfQotCQluID0g dmFkZHIgKyB2bS0+c2l6ZSAtIFBBR0VfU0laRSAtIGFkZHI7CisJCW4gPSB2YWRkciArIGdl dF92bV9hcmVhX3NpemUodm0pIC0gYWRkcjsKIAkJaWYgKG4gPiBjb3VudCkKIAkJCW4gPSBj b3VudDsKIAkJaWYgKCEodm0tPmZsYWdzICYgVk1fSU9SRU1BUCkpCkBAIC0yMTIwLDcgKzIx MjEsNyBAQCBsb25nIHZ3cml0ZShjaGFyICpidWYsIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxv bmcgY291bnQpCiAKIAkJdm0gPSB2YS0+dm07CiAJCXZhZGRyID0gKGNoYXIgKikgdm0tPmFk ZHI7Ci0JCWlmIChhZGRyID49IHZhZGRyICsgdm0tPnNpemUgLSBQQUdFX1NJWkUpCisJCWlm IChhZGRyID49IHZhZGRyICsgZ2V0X3ZtX2FyZWFfc2l6ZSh2bSkpCiAJCQljb250aW51ZTsK IAkJd2hpbGUgKGFkZHIgPCB2YWRkcikgewogCQkJaWYgKGNvdW50ID09IDApCkBAIC0yMTI5 LDcgKzIxMzAsNyBAQCBsb25nIHZ3cml0ZShjaGFyICpidWYsIGNoYXIgKmFkZHIsIHVuc2ln bmVkIGxvbmcgY291bnQpCiAJCQlhZGRyKys7CiAJCQljb3VudC0tOwogCQl9Ci0JCW4gPSB2 YWRkciArIHZtLT5zaXplIC0gUEFHRV9TSVpFIC0gYWRkcjsKKwkJbiA9IHZhZGRyICsgZ2V0 X3ZtX2FyZWFfc2l6ZSh2bSkgLSBhZGRyOwogCQlpZiAobiA+IGNvdW50KQogCQkJbiA9IGNv dW50OwogCQlpZiAoISh2bS0+ZmxhZ3MgJiBWTV9JT1JFTUFQKSkgewpkaWZmIC0tZ2l0IGEv c2NyaXB0cy9NYWtlZmlsZS5rYXNhbiBiL3NjcmlwdHMvTWFrZWZpbGUua2FzYW4KbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4NzRkMgotLS0gL2Rldi9udWxsCisr KyBiL3NjcmlwdHMvTWFrZWZpbGUua2FzYW4KQEAgLTAsMCArMSwyOSBAQAoraWZkZWYgQ09O RklHX0tBU0FOCitpZmRlZiBDT05GSUdfS0FTQU5fSU5MSU5FCisJY2FsbF90aHJlc2hvbGQg Oj0gMTAwMDAKK2Vsc2UKKwljYWxsX3RocmVzaG9sZCA6PSAwCitlbmRpZgorCitDRkxBR1Nf S0FTQU5fTUlOSU1BTCA6PSAtZnNhbml0aXplPWtlcm5lbC1hZGRyZXNzCisKK0NGTEFHU19L QVNBTiA6PSAkKGNhbGwgY2Mtb3B0aW9uLCAtZnNhbml0aXplPWtlcm5lbC1hZGRyZXNzIFwK KwkJLWZhc2FuLXNoYWRvdy1vZmZzZXQ9JChDT05GSUdfS0FTQU5fU0hBRE9XX09GRlNFVCkg XAorCQktLXBhcmFtIGFzYW4tc3RhY2s9MSAtLXBhcmFtIGFzYW4tZ2xvYmFscz0xIFwKKwkJ LS1wYXJhbSBhc2FuLWluc3RydW1lbnRhdGlvbi13aXRoLWNhbGwtdGhyZXNob2xkPSQoY2Fs bF90aHJlc2hvbGQpKQorCitpZmVxICgkKGNhbGwgY2Mtb3B0aW9uLCAkKENGTEFHU19LQVNB Tl9NSU5JTUFMKSAtV2Vycm9yKSwpCisgICBpZm5lcSAoJChDT05GSUdfQ09NUElMRV9URVNU KSx5KQorICAgICAgICAkKHdhcm5pbmcgQ2Fubm90IHVzZSBDT05GSUdfS0FTQU46IFwKKyAg ICAgICAgICAgIC1mc2FuaXRpemU9a2VybmVsLWFkZHJlc3MgaXMgbm90IHN1cHBvcnRlZCBi eSBjb21waWxlcikKKyAgIGVuZGlmCitlbHNlCisgICAgaWZlcSAoJChDRkxBR1NfS0FTQU4p LCkKKyAgICAgICAgaWZuZXEgKCQoQ09ORklHX0NPTVBJTEVfVEVTVCkseSkKKyAgICAgICAg ICAgICQod2FybmluZyBDT05GSUdfS0FTQU46IGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQg YWxsIG9wdGlvbnMuXAorICAgICAgICAgICAgICAgIFRyeWluZyBtaW5pbWFsIGNvbmZpZ3Vy YXRpb24pCisgICAgICAgIGVuZGlmCisgICAgICAgIENGTEFHU19LQVNBTiA6PSAkKENGTEFH U19LQVNBTl9NSU5JTUFMKQorICAgIGVuZGlmCitlbmRpZgorZW5kaWYKZGlmZiAtLWdpdCBh L3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggZjk3 ODY5Zi4uYjE4ODE3MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIv c2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTExOSw2ICsxMTksMTYgQEAgX2NfZmxhZ3MgKz0g JChpZiAkKHBhdHN1YnN0IG4lLCwgXAogCQkkKENGTEFHU19HQ09WKSkKIGVuZGlmCiAKKyMK KyMgRW5hYmxlIGFkZHJlc3Mgc2FuaXRpemVyIGZsYWdzIGZvciBrZXJuZWwgZXhjZXB0IHNv bWUgZmlsZXMgb3IgZGlyZWN0b3JpZXMKKyMgd2UgZG9uJ3Qgd2FudCB0byBjaGVjayAoZGVw ZW5kcyBvbiB2YXJpYWJsZXMgS0FTQU5fU0FOSVRJWkVfb2JqLm8sIEtBU0FOX1NBTklUSVpF KQorIworaWZlcSAoJChDT05GSUdfS0FTQU4pLHkpCitfY19mbGFncyArPSAkKGlmICQocGF0 c3Vic3QgbiUsLCBcCisJCSQoS0FTQU5fU0FOSVRJWkVfJChiYXNldGFyZ2V0KS5vKSQoS0FT QU5fU0FOSVRJWkUpeSksIFwKKwkJJChDRkxBR1NfS0FTQU4pKQorZW5kaWYKKwogIyBJZiBi dWlsZGluZyB0aGUga2VybmVsIGluIGEgc2VwYXJhdGUgb2JqdHJlZSBleHBhbmQgYWxsIG9j Y3VycmVuY2VzCiAjIG9mIC1JZGlyIHRvIC1JJChzcmN0cmVlKS9kaXIgZXhjZXB0IGZvciBh YnNvbHV0ZSBwYXRocyAoc3RhcnRpbmcgd2l0aCAnLycpLgogCmRpZmYgLS1naXQgYS9zY3Jp cHRzL21vZHVsZS1jb21tb24ubGRzIGIvc2NyaXB0cy9tb2R1bGUtY29tbW9uLmxkcwppbmRl eCAwODY1YjNlLi4xMGZhOGJmIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZHVsZS1jb21tb24u bGRzCisrKyBiL3NjcmlwdHMvbW9kdWxlLWNvbW1vbi5sZHMKQEAgLTE2LDQgKzE2LDggQEAg U0VDVElPTlMgewogCV9fa2NyY3RhYl91bnVzZWQJOiB7ICooU09SVChfX19rY3JjdGFiX3Vu dXNlZCsqKSkgfQogCV9fa2NyY3RhYl91bnVzZWRfZ3BsCTogeyAqKFNPUlQoX19fa2NyY3Rh Yl91bnVzZWRfZ3BsKyopKSB9CiAJX19rY3JjdGFiX2dwbF9mdXR1cmUJOiB7ICooU09SVChf X19rY3JjdGFiX2dwbF9mdXR1cmUrKikpIH0KKworCisJLiA9IEFMSUdOKDgpOworCS5pbml0 X2FycmF5CQkwIDogeyAqKFNPUlQoLmluaXRfYXJyYXkuKikpICooLmluaXRfYXJyYXkpIH0K IH0K --------------D749C89E1B1801D4F95CE083--