Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Aug 1995 15:03:37 PDT
From:      Voradesh Yenbut <yenbut@cs.washington.edu>
To:        joerg_wunsch@uriah.heep.sax.de (Joerg Wunsch)
Cc:        freebsd-hackers@FreeBSD.org (FreeBSD hackers)
Subject:   Re: Changing DEV_BSIZE 
Message-ID:  <199508252203.PAA00106@vetch.cs.washington.edu>
In-Reply-To: Your message of "Wed, 23 Aug 1995 23:35:44 %2B0200." <199508232135.XAA20050@uriah.heep.sax.de> 

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multipart MIME message.

--===_0_Fri_Aug_25_13:23:48_PDT_1995
Content-Type: text/plain

I made mods to both 1.1.5 and 2.0-RELEASE for non-512 block media.
The mods are not specific to 512 and 1024 block sizes but I've
never tested any thing beyond the two block sizes.

Files being modified are:

./sys/i386/i386/autoconf.c
./sys/kern/kern_physio.c
./sys/kern/vfs_cluster.c
./sys/miscfs/specfs/spec_vnops.c
./sys/scsi/sd.c
./sys/scsi/scsiconf.c
./sys/ufs/ffs/ffs_vfsops.c
./sys/ufs/ffs/ffs_inode.c
./sys/ufs/ffs/ffs_alloc.c
./sys/ufs/ufs/ufs_disksubr.c
./sys/ufs/ufs/ufs_readwrite.c
./sys/vm/vm_swap.c
./sys/vm/vnode_pager.c

I haven't used disklabel to write a label on a 1024-byte block size
under 2.0-RELEASE yet (I modified it under 1.1.5.).  I suspect it
might need modifying also.

The mods are in no way accurate.  They are in many places I are not
sure if "sector" mentioned in comment is supposed to be 512-byte
sector or disk sector whose size is not 512 bytes.  I hope someone
will verify before the code is used.

The attached files below are disklabel, swapinfo, dmesg output and the
patches.  The system runs entirely on one 1024-byte media.  There are
two #ifdef's in the patches: DBSIZEne512 for non-512, and SARSIAM for
my special treatment on swap filesystem -- I would like to be able to
remove an optical disk media when it is configured in the kernel for
swap but swapon has not issued on it yet.

Enjoy,

Voradesh Yenbut


--===_0_Fri_Aug_25_13:23:48_PDT_1995
Content-Type: text/plain
Content-Description: disklabel

# /dev/rsd0c:
type: SCSI
disk: 3M 33019
label: 
flags:
bytes/sector: 1024
sectors/track: 17
tracks/cylinder: 1
sectors/cylinder: 17
cylinders: 37473
rpm: 3375
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0		# milliseconds
track-to-track seek: 0	# milliseconds
drivedata: 0 

5 partitions:
#        size   offset    fstype   [fsize bsize   cpg]
  a:    17000       17    4.2BSD     1024  8192   320 	# (Cyl.    1 - 1000)
  b:    34000    17017    4.2BSD     1024  8192   320 	# (Cyl. 1001 - 3000)
  c:   637024       17    4.2BSD     1024  8192   320 	# (Cyl.    1 - 37472)
  d:   637041        0    4.2BSD     1024  8192   320 	# (Cyl.    0 - 37472)
  e:   586024    51017    4.2BSD     1024  8192   320 	# (Cyl. 3001 - 37472)


Device      1K-blocks       Used  Available   Capacity
/dev/sd0b       33984       2460      31524       7%
/dev/wd0b           0  *** not available for swapping ***
/dev/sd1b           0  *** not available for swapping ***
/dev/sd2b           0  *** not available for swapping ***

--===_0_Fri_Aug_25_13:23:48_PDT_1995
Content-Type: text/plain
Content-Description: dmesg

FreeBSD 2.0-RELEASE #0: Sat Feb 11 21:46:05 PST 1995
    yenbut@sarsiam:/usr/src/sys/compile/SARSIAM.bpf
CPU: i486DX (486-class CPU)
real memory  = 16384000 (4000 pages)
avail memory = 15118336 (3691 pages)
using 290 buffers containing 2379776 bytes of memory
Probing for devices on the ISA bus:
sc0 at 0x60-0x6f irq 1 on motherboard
sc0: VGA color <4 virtual consoles>
ed0 at 0x280-0x29f irq 3 maddr 0xe8000 msize 16384 on isa
ed0: address 00:00:c0:a1:3d:81, type SMC8216/SMC8216C (16 bit) 
bpf: ed0 attached
sio0 at 0x3f8-0x3ff irq 4 on isa
sio0: type 16550A
sio1 not found at 0x2f8
sio2 not found at 0x3e8
sio3 at 0x2e8-0x2ef irq 9 on isa
sio3: type 16550A
lpt0 at 0x378-0x37f irq 7 on isa
lpt0: Interrupt-driven port
lp0: TCP/IP capable interface
lpt1 not found at 0xffffffff
lpt2 not found at 0xffffffff
fdc0 at 0x3f0-0x3f7 irq 6 drq 2 on isa
fdc0: [0: fd0: 1.2MB 5.25in] [1: fd1: 1.44MB 3.5in]
wdc0 at 0x1f0-0x1f7 irq 14 on isa
wdc0: unit 0 (wd0): <UltraStor Ultra-12>
wd0: 144MB (296514 total sec), 969 cyl, 9 head, 34 sec, bytes/sec 512
aha0: 1542C/CF detected, unlocking mailbox
aha0: reading board settings, dma=5 int=11  (bus speed defaulted)
aha0 at 0x330-0x333 irq 11 drq 5 on isa
aha0 waiting for scsi devices to settle
aha0 targ 0 lun 0: type 0(direct) removable SCSI2
aha0 targ 0 lun 0: <MaxoptixT3-1304         11ba>
sdattach 0
sd0: 622MB (637041 total sec), 37594 cyl, 1 head, 16 sec, bytes/sec 1024
npx0 on motherboard
changing root device to sd0a
sdopen: dev=0x403 (unit 0 (of 4),partition 3)
bpf: lo0 attached
bpf: ppp0 attached
bpf: sl0 attached
bpf: sl1 attached
sdopen: dev=0x400 (unit 0 (of 4),partition 0)
ffs_mountfs 1024 nspf 1
WARNING: no swap space found

--===_0_Fri_Aug_25_13:23:48_PDT_1995
Content-Type: text/plain
Content-Description: patch for non-512-byte blocksize
Content-Transfer-Encoding: base64

KioqIDEuMQkxOTk0LzExLzI2IDEyOjQ4OjA4Ci0tLSAuL3N5cy9pMzg2L2kzODYvYXV0b2Nv
bmYuYwkxOTk0LzExLzI2IDEyOjQ4OjQ5CioqKioqKioqKioqKioqKgoqKiogMTMzLDE0MyAq
KioqCi0tLSAxMzMsMTQ1IC0tLS0KICAKICAJCWlmIChkID4gbmJsa2RldikgYnJlYWs7CiAg
CQlpZiAoYmRldnN3W2RdLmRfcHNpemUpIHsKKyAjaWZuZGVmIFNBUlNJQU0KICAJCQluYmxr
cyA9ICgqYmRldnN3W2RdLmRfcHNpemUpKHN3cC0+c3dfZGV2KTsKICAJCQlpZiAobmJsa3Mg
PiAwICYmCiAgCQkJICAgIChzd3AtPnN3X25ibGtzID09IDAgfHwgc3dwLT5zd19uYmxrcyA+
IG5ibGtzKSkKICAJCQkJc3dwLT5zd19uYmxrcyA9IG5ibGtzOwogIAkJCWVsc2UKKyAjZW5k
aWYgLyogU0FSU0lBTSAqLwogIAkJCQlzd3AtPnN3X25ibGtzID0gMDsKICAJCX0KICAJCXN3
cC0+c3dfbmJsa3MgPSBjdG9kKGR0b2Moc3dwLT5zd19uYmxrcykpOwoqKiogMS4xCTE5OTQv
MTEvMjYgMTI6NDg6MTAKLS0tIC4vc3lzL2tlcm4va2Vybl9waHlzaW8uYwkxOTk0LzExLzI2
IDEyOjQ4OjQ5CioqKioqKioqKioqKioqKgoqKiogMjYsMzEgKioqKgotLS0gMjYsMzggLS0t
LQogICNpbmNsdWRlIDxzeXMvcHJvYy5oPgogICNpbmNsdWRlIDx2bS92bS5oPgogIAorICNp
ZmRlZiBEQlNJWkVuZTUxMgorICNpbmNsdWRlICJpb2N0bC5oIgorICNpbmNsdWRlICJmaWxl
LmgiCisgI2luY2x1ZGUgImRrYmFkLmgiCisgI2luY2x1ZGUgImRpc2tsYWJlbC5oIgorIAor
ICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIHN0YXRpYyB2b2lkIHBoeXN3YWtldXAoKTsK
ICAKICBpbnQKKioqKioqKioqKioqKioqCioqKiA0NCw0OSAqKioqCi0tLSA1MSw2MCAtLS0t
CiAgCWNhZGRyX3Qgc2E7CiAgCWludCBicF9hbGxvYyA9IChicCA9PSAwKTsKICAJc3RydWN0
IGJ1ZiAqYnBhOworICNpZmRlZiBEQlNJWkVuZTUxMgorIAlzdHJ1Y3QgcGFydGluZm8gZHBh
cnQ7CisgCXVfbG9uZyBkZXZfYnNpemUgPSBERVZfQlNJWkU7CisgI2VuZGlmIC8qIERCU0la
RW5lNTEyICovCiAgCiAgLyoKICAgKiBrZWVwIHRoZSBwcm9jZXNzIGZyb20gYmVpbmcgc3dh
cHBlZAoqKioqKioqKioqKioqKioKKioqIDcyLDc3ICoqKioKLS0tIDgzLDk1IC0tLS0KICAJ
YnAtPmJfZGV2ID0gZGV2OwogIAllcnJvciA9IGJwLT5iX2Vycm9yID0gMDsKICAKKyAjaWZk
ZWYgREJTSVpFbmU1MTIKKyAJaWYgKCgqY2RldnN3W21ham9yKGRldildLmRfaW9jdGwpKGRl
diwgRElPQ0dQQVJULAorIAkJICAgIChjYWRkcl90KSZkcGFydCwgRlJFQUQsIGN1cnByb2Mp
ID09IDApIHsKKyAJICAJZGV2X2JzaXplID0gZHBhcnQuZGlza2xhYi0+ZF9zZWNzaXplOwor
IAl9CisgCisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCWZvcihpPTA7aTx1aW8tPnVp
b19pb3ZjbnQ7aSsrKSB7CiAgCQl3aGlsZSggdWlvLT51aW9faW92W2ldLmlvdl9sZW4pIHsK
ICAKKioqKioqKioqKioqKioqCioqKiA4OCw5NCAqKioqCi0tLSAxMDYsMTE2IC0tLS0KICAJ
CQkgKiBmb3IgdGhlIHRlbXBvcmFyeSBrZXJuZWwgbWFwcGluZy4KICAJCQkgKi8KICAJCQli
cC0+Yl9zYXZlYWRkciA9IHNhOworICNpZm5kZWYgREJTSVpFbmU1MTIKICAJCQlicC0+Yl9i
bGtubyA9IGJ0b2RiKHVpby0+dWlvX29mZnNldCk7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIg
Ki8KKyAJCQlicC0+Yl9ibGtubyA9IHVpby0+dWlvX29mZnNldC9kZXZfYnNpemU7CisgI2Vu
ZGlmIC8qIERCU0laRW5lNTEyICovCiAgCiAgCQkJCiAgCQkJaWYgKHJ3ICYmICF1c2VyYWNj
KGJwLT5iX2RhdGEsIGJwLT5iX2J1ZnNpemUsIEJfV1JJVEUpKSB7CioqKiAxLjEJMTk5NC8x
MS8yNiAxMjo0ODoxMgotLS0gLi9zeXMva2Vybi92ZnNfY2x1c3Rlci5jCTE5OTQvMTEvMjYg
MTY6MTI6NTIKKioqKioqKioqKioqKioqCioqKiA1NCw2OCAqKioqCi0tLSA1NCw3OSAtLS0t
CiAgI2RlZmluZSBkb3JlYWxsb2NibGtzIDAKICAjZW5kaWYKICAKKyAjaWZkZWYgREJTSVpF
bmU1MTIKKyAjZGVmaW5lCV9idG9kYih4KQkoKHgpL2Ric2l6ZSkKKyAjZW5kaWYgLyogREJT
SVpFbmU1MTIgKi8KKyAKICAvKgogICAqIExvY2FsIGRlY2xhcmF0aW9ucwogICAqLwogIHN0
cnVjdCBidWYgKmNsdXN0ZXJfbmV3YnVmIF9fUCgoc3RydWN0IHZub2RlICosIHN0cnVjdCBi
dWYgKiwgbG9uZywgZGFkZHJfdCwKICAJICAgIGRhZGRyX3QsIGxvbmcsIGludCkpOworICNp
Zm5kZWYgREJTSVpFbmU1MTIKICBzdHJ1Y3QgYnVmICpjbHVzdGVyX3JidWlsZCBfX1AoKHN0
cnVjdCB2bm9kZSAqLCB1X3F1YWRfdCwgc3RydWN0IGJ1ZiAqLAogIAkgICAgZGFkZHJfdCwg
ZGFkZHJfdCwgbG9uZywgaW50LCBsb25nKSk7CiAgdm9pZAkgICAgY2x1c3Rlcl93YnVpbGQg
X19QKChzdHJ1Y3Qgdm5vZGUgKiwgc3RydWN0IGJ1ZiAqLCBsb25nLAogIAkgICAgZGFkZHJf
dCwgaW50LCBkYWRkcl90KSk7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyBzdHJ1Y3Qg
YnVmICpjbHVzdGVyX3JidWlsZCBfX1AoKHN0cnVjdCB2bm9kZSAqLCB1X3F1YWRfdCwgc3Ry
dWN0IGJ1ZiAqLAorIAkgICAgZGFkZHJfdCwgZGFkZHJfdCwgbG9uZywgaW50LCBsb25nLCB1
X2xvbmcpKTsKKyB2b2lkCSAgICBjbHVzdGVyX3didWlsZCBfX1AoKHN0cnVjdCB2bm9kZSAq
LCBzdHJ1Y3QgYnVmICosIGxvbmcsCisgCSAgICBkYWRkcl90LCBpbnQsIGRhZGRyX3QsIHVf
bG9uZykpOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIHN0cnVjdCBjbHVzdGVyX3Nh
dmUgKmNsdXN0ZXJfY29sbGVjdGJ1ZnMgX19QKChzdHJ1Y3Qgdm5vZGUgKiwgc3RydWN0IGJ1
ZiAqKSk7CiAgCiAgI2lmZGVmIERJQUdOT1NUSUMKKioqKioqKioqKioqKioqCioqKiAxMDgs
MTIwICoqKioKLS0tIDExOSwxMzggLS0tLQogICAqCUlmIGVpdGhlciBpcyBOVUxMLCB0aGVu
IHlvdSBkb24ndCBoYXZlIHRvIGRvIHRoZSBJL08uCiAgICovCiAgaW50CisgI2lmbmRlZiBE
QlNJWkVuZTUxMgogIGNsdXN0ZXJfcmVhZCh2cCwgZmlsZXNpemUsIGxibGtubywgc2l6ZSwg
Y3JlZCwgYnBwKQorICNlbHNlIC8qIERCU0laRW5lNTEyICovCisgY2x1c3Rlcl9yZWFkKHZw
LCBmaWxlc2l6ZSwgbGJsa25vLCBzaXplLCBjcmVkLCBicHAsIGRic2l6ZSkKKyAjZW5kaWYg
LyogREJTSVpFbmU1MTIgKi8KICAJc3RydWN0IHZub2RlICp2cDsKICAJdV9xdWFkX3QgZmls
ZXNpemU7CiAgCWRhZGRyX3QgbGJsa25vOwogIAlsb25nIHNpemU7CiAgCXN0cnVjdCB1Y3Jl
ZCAqY3JlZDsKICAJc3RydWN0IGJ1ZiAqKmJwcDsKKyAjaWZkZWYgREJTSVpFbmU1MTIKKyAJ
dV9sb25nIGRic2l6ZTsKKyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICB7CiAgCXN0cnVj
dCBidWYgKmJwLCAqcmJwOwogIAlkYWRkcl90IGJsa25vLCBpb2Jsa25vOwoqKioqKioqKioq
KioqKioKKioqIDE5NCwyMDAgKioqKgotLS0gMjEyLDIyMiAtLS0tCiAgCiAgCQlpZiAobnVt
X3JhKQkJCQkvKiBjYXNlIDIsIDQgKi8KICAJCQlyYnAgPSBjbHVzdGVyX3JidWlsZCh2cCwg
ZmlsZXNpemUsCisgI2lmbmRlZiBEQlNJWkVuZTUxMgogIAkJCSAgICBicCwgaW9ibGtubywg
Ymxrbm8sIHNpemUsIG51bV9yYSwgZmxhZ3MpOworICNlbHNlIC8qIERCU0laRW5lNTEyICov
CisgCQkJICAgIGJwLCBpb2Jsa25vLCBibGtubywgc2l6ZSwgbnVtX3JhLCBmbGFncywgZGJz
aXplKTsKKyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICAJCWVsc2UgaWYgKGlvYmxrbm8g
PT0gbGJsa25vKSB7CiAgCQkJYnAtPmJfYmxrbm8gPSBibGtubzsKICAJCQkvKiBDYXNlIDU6
IGNoZWNrIGhvdyBtYW55IGJsb2NrcyB0byByZWFkIGFoZWFkICovCioqKioqKioqKioqKioq
KgoqKiogMjE5LDIyNSAqKioqCi0tLSAyNDEsMjUxIC0tLS0KICAJCQlmbGFncyB8PSBCX0FT
WU5DOwogIAkJCWlmIChudW1fcmEpCiAgCQkJCXJicCA9IGNsdXN0ZXJfcmJ1aWxkKHZwLCBm
aWxlc2l6ZSwKKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgCQkJCSAgICBOVUxMLCBpb2Jsa25v
LCBibGtubywgc2l6ZSwgbnVtX3JhLCBmbGFncyk7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIg
Ki8KKyAJCQkJICAgIE5VTEwsIGlvYmxrbm8sIGJsa25vLCBzaXplLCBudW1fcmEsIGZsYWdz
LCBkYnNpemUpOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAkJCWVsc2UgewogIAkJ
CQlyYnAgPSBnZXRibGsodnAsIGlvYmxrbm8sIHNpemUsIDAsIDApOwogIAkJCQlyYnAtPmJf
ZmxhZ3MgfD0gZmxhZ3M7CioqKioqKioqKioqKioqKgoqKiogMjc1LDI4MSAqKioqCi0tLSAz
MDEsMzExIC0tLS0KICAgKiBhbmQgdGhlbiBwYXJjZWwgdGhlbSB1cCBpbnRvIGxvZ2ljYWwg
YmxvY2tzIGluIHRoZSBidWZmZXIgaGFzaCB0YWJsZS4KICAgKi8KICBzdHJ1Y3QgYnVmICoK
KyAjaWZuZGVmIERCU0laRW5lNTEyCiAgY2x1c3Rlcl9yYnVpbGQodnAsIGZpbGVzaXplLCBi
cCwgbGJuLCBibGtubywgc2l6ZSwgcnVuLCBmbGFncykKKyAjZWxzZSAvKiBEQlNJWkVuZTUx
MiAqLworIGNsdXN0ZXJfcmJ1aWxkKHZwLCBmaWxlc2l6ZSwgYnAsIGxibiwgYmxrbm8sIHNp
emUsIHJ1biwgZmxhZ3MsIGRic2l6ZSkKKyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICAJ
c3RydWN0IHZub2RlICp2cDsKICAJdV9xdWFkX3QgZmlsZXNpemU7CiAgCXN0cnVjdCBidWYg
KmJwOwoqKioqKioqKioqKioqKioKKioqIDI4NCwyODkgKioqKgotLS0gMzE0LDMyMiAtLS0t
CiAgCWxvbmcgc2l6ZTsKICAJaW50IHJ1bjsKICAJbG9uZyBmbGFnczsKKyAjaWZkZWYgREJT
SVpFbmU1MTIKKyAJdV9sb25nIGRic2l6ZTsKKyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8K
ICB7CiAgCXN0cnVjdCBjbHVzdGVyX3NhdmUgKmJfc2F2ZTsKICAJc3RydWN0IGJ1ZiAqdGJw
OwoqKioqKioqKioqKioqKioKKioqIDMxOCwzMjQgKioqKgotLS0gMzUxLDM2MSAtLS0tCiAg
CWJfc2F2ZS0+YnNfc2F2ZWFkZHIgPSBicC0+Yl9zYXZlYWRkcjsKICAJYnAtPmJfc2F2ZWFk
ZHIgPSAoY2FkZHJfdCkgYl9zYXZlOwogIAorICNpZm5kZWYgREJTSVpFbmU1MTIKICAJaW5j
ID0gYnRvZGIoc2l6ZSk7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJaW5jID0gX2J0
b2RiKHNpemUpOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAlmb3IgKGJuID0gYmxr
bm8gKyBpbmMsIGkgPSAxOyBpIDw9IHJ1bjsgKytpLCBibiArPSBpbmMpIHsKICAJCWlmIChp
bmNvcmUodnAsIGxibiArIGkpKSB7CiAgCQkJaWYgKGkgPT0gMSkgewoqKioqKioqKioqKioq
KioKKioqIDQ3MSw0NzkgKioqKgotLS0gNTA4LDUyMyAtLS0tCiAgICoJNC4JZW5kIG9mIGEg
Y2x1c3RlciAtIGFzeW5jaHJvbm91c2x5IHdyaXRlIGNsdXN0ZXIKICAgKi8KICB2b2lkCisg
I2lmbmRlZiBEQlNJWkVuZTUxMgogIGNsdXN0ZXJfd3JpdGUoYnAsIGZpbGVzaXplKQorICNl
bHNlIC8qIERCU0laRW5lNTEyICovCisgY2x1c3Rlcl93cml0ZShicCwgZmlsZXNpemUsIGRi
c2l6ZSkKKyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICAgICAgICAgIHN0cnVjdCBidWYg
KmJwOwogIAl1X3F1YWRfdCBmaWxlc2l6ZTsKKyAjaWZkZWYgREJTSVpFbmU1MTIKKyAgICAg
IAl1X2xvbmcgZGJzaXplOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIHsKICAgICAg
ICAgIHN0cnVjdCB2bm9kZSAqdnA7CiAgICAgICAgICBkYWRkcl90IGxibjsKKioqKioqKioq
KioqKioqCioqKiA0ODcsNDkzICoqKioKLS0tIDUzMSw1NDEgLS0tLQogIAkJdnAtPnZfbGFz
dGEgPSB2cC0+dl9jbGVuID0gdnAtPnZfY3N0YXJ0ID0gdnAtPnZfbGFzdHcgPSAwOwogIAog
ICAgICAgICAgaWYgKHZwLT52X2NsZW4gPT0gMCB8fCBsYm4gIT0gdnAtPnZfbGFzdHcgKyAx
IHx8CisgI2lmbmRlZiBEQlNJWkVuZTUxMgogIAkgICAgKGJwLT5iX2Jsa25vICE9IHZwLT52
X2xhc3RhICsgYnRvZGIoYnAtPmJfYmNvdW50KSkpIHsKKyAjZWxzZSAvKiBEQlNJWkVuZTUx
MiAqLworIAkgICAgKGJwLT5iX2Jsa25vICE9IHZwLT52X2xhc3RhICsgX2J0b2RiKGJwLT5i
X2Jjb3VudCkpKSB7CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCQltYXhjbGVuID0g
TUFYQlNJWkUgLyB2cC0+dl9tb3VudC0+bW50X3N0YXQuZl9pb3NpemUgLSAxOwogIAkJaWYg
KHZwLT52X2NsZW4gIT0gMCkgewogIAkJCS8qCioqKioqKioqKioqKioqKgoqKiogNTAzLDUx
MCAqKioqCi0tLSA1NTEsNTY2IC0tLS0KICAJCQlpZiAoIWRvcmVhbGxvY2Jsa3MgfHwKICAJ
CQkgICAgKGxibiArIDEpICogYnAtPmJfYmNvdW50ICE9IGZpbGVzaXplIHx8CiAgCQkJICAg
IGxibiAhPSB2cC0+dl9sYXN0dyArIDEgfHwgdnAtPnZfY2xlbiA8PSBjdXJzaXplKSB7Cisg
I2lmbmRlZiBEQlNJWkVuZTUxMgogIAkJCQljbHVzdGVyX3didWlsZCh2cCwgTlVMTCwgYnAt
PmJfYmNvdW50LAogIAkJCQkgICAgdnAtPnZfY3N0YXJ0LCBjdXJzaXplLCBsYm4pOworICNl
bHNlIC8qIERCU0laRW5lNTEyICovCisKKworCisgCQkJCWNsdXN0ZXJfd2J1aWxkKHZwLCBO
VUxMLCBicC0+Yl9iY291bnQsCisgCQkJCSAgICB2cC0+dl9jc3RhcnQsIGN1cnNpemUsIGxi
biwgZGJzaXplKTsKKyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICAJCQl9IGVsc2Ugewog
IAkJCQlzdHJ1Y3QgYnVmICoqYnBwLCAqKmVuZGJwOwogIAkJCQlzdHJ1Y3QgY2x1c3Rlcl9z
YXZlICpidWZsaXN0OwoqKioqKioqKioqKioqKioKKioqIDUyMCw1MjcgKioqKgotLS0gNTc2
LDU4OCAtLS0tCiAgCQkJCQkgICAgIGJwcCA8IGVuZGJwOyBicHArKykKICAJCQkJCQlicmVs
c2UoKmJwcCk7CiAgCQkJCQlmcmVlKGJ1Zmxpc3QsIE1fU0VHTUVOVCk7CisgI2lmbmRlZiBE
QlNJWkVuZTUxMgogIAkJCQkJY2x1c3Rlcl93YnVpbGQodnAsIE5VTEwsIGJwLT5iX2Jjb3Vu
dCwKICAJCQkJCSAgICB2cC0+dl9jc3RhcnQsIGN1cnNpemUsIGxibik7CisgI2Vsc2UgLyog
REJTSVpFbmU1MTIgKi8KKyAJCQkJCWNsdXN0ZXJfd2J1aWxkKHZwLCBOVUxMLCBicC0+Yl9i
Y291bnQsCisgCQkJCQkgICAgdnAtPnZfY3N0YXJ0LCBjdXJzaXplLCBsYm4sIGRic2l6ZSk7
CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCQkJCX0gZWxzZSB7CiAgCQkJCQkvKgog
IAkJCQkJICogU3VjY2VlZGVkLCBrZWVwIGJ1aWxkaW5nIGNsdXN0ZXIuCioqKioqKioqKioq
KioqKgoqKiogNTYzLDU3MCAqKioqCi0tLSA2MjQsNjM2IC0tLS0KICAJCS8qCiAgCQkgKiBB
dCBlbmQgb2YgY2x1c3Rlciwgd3JpdGUgaXQgb3V0LgogIAkJICovCisgI2lmbmRlZiBEQlNJ
WkVuZTUxMgogIAkJY2x1c3Rlcl93YnVpbGQodnAsIGJwLCBicC0+Yl9iY291bnQsIHZwLT52
X2NzdGFydCwKICAJCSAgICB2cC0+dl9jbGVuICsgMSwgbGJuKTsKKyAjZWxzZSAvKiBEQlNJ
WkVuZTUxMiAqLworIAkJY2x1c3Rlcl93YnVpbGQodnAsIGJwLCBicC0+Yl9iY291bnQsIHZw
LT52X2NzdGFydCwKKyAJCSAgICB2cC0+dl9jbGVuICsgMSwgbGJuLCBkYnNpemUpOworICNl
bmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAkJdnAtPnZfY2xlbiA9IDA7CiAgCQl2cC0+dl9j
c3RhcnQgPSBsYm4gKyAxOwogIAl9IGVsc2UKKioqKioqKioqKioqKioqCioqKiA1ODUsNTk3
ICoqKioKLS0tIDY1MSw2NzAgLS0tLQogICAqIHRoZSBjdXJyZW50IGJsb2NrIChpZiBsYXN0
X2JwID09IE5VTEwpLgogICAqLwogIHZvaWQKKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgY2x1
c3Rlcl93YnVpbGQodnAsIGxhc3RfYnAsIHNpemUsIHN0YXJ0X2xibiwgbGVuLCBsYm4pCisg
I2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyBjbHVzdGVyX3didWlsZCh2cCwgbGFzdF9icCwg
c2l6ZSwgc3RhcnRfbGJuLCBsZW4sIGxibiwgZGJzaXplKQorICNlbmRpZiAvKiBEQlNJWkVu
ZTUxMiAqLwogIAlzdHJ1Y3Qgdm5vZGUgKnZwOwogIAlzdHJ1Y3QgYnVmICpsYXN0X2JwOwog
IAlsb25nIHNpemU7CiAgCWRhZGRyX3Qgc3RhcnRfbGJuOwogIAlpbnQgbGVuOwogIAlkYWRk
cl90CWxibjsKKyAjaWZkZWYgREJTSVpFbmU1MTIKKyAJdV9sb25nIGRic2l6ZTsKKyAjZW5k
aWYgLyogREJTSVpFbmU1MTIgKi8KICB7CiAgCXN0cnVjdCBjbHVzdGVyX3NhdmUgKmJfc2F2
ZTsKICAJc3RydWN0IGJ1ZiAqYnAsICp0YnA7CioqKioqKioqKioqKioqKgoqKiogNjgyLDY4
OCAqKioqCi0tLSA3NTUsNzY1IC0tLS0KICAJCSsrYl9zYXZlLT5ic19uY2hpbGRyZW47CiAg
CiAgCQkvKiBNb3ZlIG1lbW9yeSBmcm9tIGNoaWxkcmVuIHRvIHBhcmVudCAqLworICNpZm5k
ZWYgREJTSVpFbmU1MTIKICAJCWlmICh0YnAtPmJfYmxrbm8gIT0gKGJwLT5iX2Jsa25vICsg
YnRvZGIoYnAtPmJfYnVmc2l6ZSkpKSB7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJ
CWlmICh0YnAtPmJfYmxrbm8gIT0gKGJwLT5iX2Jsa25vICsgX2J0b2RiKGJwLT5iX2J1ZnNp
emUpKSkgeworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAkJCXByaW50ZigiQ2x1c3Rl
cmVkIEJsb2NrOiAlbHUgYWRkciAlbHggYnVmc2l6ZTogJWxkXG4iLAogIAkJCSAgICAodV9s
b25nKWJwLT5iX2xibGtubywgYnAtPmJfYmxrbm8sIGJwLT5iX2J1ZnNpemUpOwogIAkJCXBy
aW50ZigiQ2hpbGQgQmxvY2s6ICVsdSBhZGRyOiAlbHhcbiIsIAoqKiogMS4xCTE5OTQvMTEv
MjYgMTI6NDg6MTYKLS0tIC4vc3lzL21pc2Nmcy9zcGVjZnMvc3BlY192bm9wcy5jCTE5OTQv
MTEvMjYgMTI6NDg6NTAKKioqKioqKioqKioqKioqCioqKiAyMjUsMjMwICoqKioKLS0tIDIy
NSwyMzMgLS0tLQogIAlzdHJ1Y3QgYnVmICpicDsKICAJZGFkZHJfdCBibiwgbmV4dGJuOwog
IAlsb25nIGJzaXplLCBic2NhbGU7CisgI2lmZGVmIERCU0laRW5lNTEyCisgCXVfbG9uZyBk
ZXZfYnNpemU7CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCXN0cnVjdCBwYXJ0aW5m
byBkcGFydDsKICAJaW50IG4sIG9uLCBtYWpvcmRldiwgKCppb2N0bCkoKTsKICAJaW50IGVy
cm9yID0gMDsKKioqKioqKioqKioqKioqCioqKiAyNTMsMjY3ICoqKioKLS0tIDI1NiwyODkg
LS0tLQogIAkJCXJldHVybiAoRUlOVkFMKTsKICAJCWJzaXplID0gQkxLREVWX0lPU0laRTsK
ICAJCWRldiA9IHZwLT52X3JkZXY7CisgI2lmZGVmIERCU0laRW5lNTEyCisgCQlkZXZfYnNp
emUgPSBERVZfQlNJWkU7CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCQlpZiAoKG1h
am9yZGV2ID0gbWFqb3IoZGV2KSkgPCBuYmxrZGV2ICYmCiAgCQkgICAgKGlvY3RsID0gYmRl
dnN3W21ham9yZGV2XS5kX2lvY3RsKSAhPSBOVUxMICYmCisgI2lmbmRlZiBEQlNJWkVuZTUx
MgogIAkJICAgICgqaW9jdGwpKGRldiwgRElPQ0dQQVJULCAoY2FkZHJfdCkmZHBhcnQsIEZS
RUFELCBwKSA9PSAwICYmCiAgCQkgICAgZHBhcnQucGFydC0+cF9mc3R5cGUgPT0gRlNfQlNE
RkZTICYmCisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJCSAgICAoKmlvY3RsKShkZXYs
IERJT0NHUEFSVCwgKGNhZGRyX3QpJmRwYXJ0LCBGUkVBRCwgcCkgPT0gMCkgeworIAkJICBp
ZiAoZHBhcnQucGFydC0+cF9mc3R5cGUgPT0gRlNfQlNERkZTICYmCisgI2VuZGlmIC8qIERC
U0laRW5lNTEyICovCiAgCQkgICAgZHBhcnQucGFydC0+cF9mcmFnICE9IDAgJiYgZHBhcnQu
cGFydC0+cF9mc2l6ZSAhPSAwKQogIAkJCWJzaXplID0gZHBhcnQucGFydC0+cF9mcmFnICog
ZHBhcnQucGFydC0+cF9mc2l6ZTsKKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgCQlic2NhbGUg
PSBic2l6ZSAvIERFVl9CU0laRTsKKyAjZWxzZSAvKiBEQlNJWkVuZTUxMiAqLworIAkJICBk
ZXZfYnNpemUgPSBkcGFydC5kaXNrbGFiLT5kX3NlY3NpemU7CisgCQl9CisgCQlic2NhbGUg
PSBic2l6ZSAvIGRldl9ic2l6ZTsKKworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAkJ
ZG8geworICNpZm5kZWYgREJTSVpFbmU1MTIKICAJCQlibiA9ICh1aW8tPnVpb19vZmZzZXQg
LyBERVZfQlNJWkUpICZ+IChic2NhbGUgLSAxKTsKKyAjZWxzZSAvKiBEQlNJWkVuZTUxMiAq
LworIAkJCWJuID0gKHVpby0+dWlvX29mZnNldCAvIGRldl9ic2l6ZSkgJn4gKGJzY2FsZSAt
IDEpOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAkJCW9uID0gdWlvLT51aW9fb2Zm
c2V0ICUgYnNpemU7CiAgCQkJbiA9IG1pbigodW5zaWduZWQpKGJzaXplIC0gb24pLCB1aW8t
PnVpb19yZXNpZCk7CiAgCQkJaWYgKHZwLT52X2xhc3RyICsgYnNjYWxlID09IGJuKSB7Cioq
KioqKioqKioqKioqKgoqKiogMzA5LDMxNCAqKioqCi0tLSAzMzEsMzM5IC0tLS0KICAJc3Ry
dWN0IHBhcnRpbmZvIGRwYXJ0OwogIAlyZWdpc3RlciBpbnQgbiwgb247CiAgCWludCBlcnJv
ciA9IDA7CisgI2lmZGVmIERCU0laRW5lNTEyCisgCXVfbG9uZyBkZXZfYnNpemU7CisgI2Vu
ZGlmIC8qIERCU0laRW5lNTEyICovCiAgCiAgI2lmZGVmIERJQUdOT1NUSUMKICAJaWYgKHVp
by0+dWlvX3J3ICE9IFVJT19XUklURSkKKioqKioqKioqKioqKioqCioqKiAzMzIsMzQ3ICoq
KioKLS0tIDM1NywzODggLS0tLQogIAkJaWYgKHVpby0+dWlvX29mZnNldCA8IDApCiAgCQkJ
cmV0dXJuIChFSU5WQUwpOwogIAkJYnNpemUgPSBCTEtERVZfSU9TSVpFOworICNpZmRlZiBE
QlNJWkVuZTUxMgorIAkJZGV2X2JzaXplID0gREVWX0JTSVpFOworICNlbmRpZiAvKiBEQlNJ
WkVuZTUxMiAqLwogIAkJaWYgKCgqYmRldnN3W21ham9yKHZwLT52X3JkZXYpXS5kX2lvY3Rs
KSh2cC0+dl9yZGV2LCBESU9DR1BBUlQsCiAgCQkgICAgKGNhZGRyX3QpJmRwYXJ0LCBGUkVB
RCwgcCkgPT0gMCkgewogIAkJCWlmIChkcGFydC5wYXJ0LT5wX2ZzdHlwZSA9PSBGU19CU0RG
RlMgJiYKICAJCQkgICAgZHBhcnQucGFydC0+cF9mcmFnICE9IDAgJiYgZHBhcnQucGFydC0+
cF9mc2l6ZSAhPSAwKQogIAkJCQlic2l6ZSA9IGRwYXJ0LnBhcnQtPnBfZnJhZyAqCiAgCQkJ
CSAgICBkcGFydC5wYXJ0LT5wX2ZzaXplOworICNpZmRlZiBEQlNJWkVuZTUxMgorIAorIAkJ
CWRldl9ic2l6ZSA9IGRwYXJ0LmRpc2tsYWItPmRfc2Vjc2l6ZTsKKyAjZW5kaWYgLyogREJT
SVpFbmU1MTIgKi8KICAJCX0KKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgCQlibGttYXNrID0g
KGJzaXplIC8gREVWX0JTSVpFKSAtIDE7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKwor
IAkJYmxrbWFzayA9IChic2l6ZSAvIGRldl9ic2l6ZSkgLSAxOworICNlbmRpZiAvKiBEQlNJ
WkVuZTUxMiAqLwogIAkJZG8geworICNpZm5kZWYgREJTSVpFbmU1MTIKICAJCQlibiA9ICh1
aW8tPnVpb19vZmZzZXQgLyBERVZfQlNJWkUpICZ+IGJsa21hc2s7CisgI2Vsc2UgLyogREJT
SVpFbmU1MTIgKi8KKyAJCQlibiA9ICh1aW8tPnVpb19vZmZzZXQgLyBkZXZfYnNpemUpICZ+
IGJsa21hc2s7CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCQkJb24gPSB1aW8tPnVp
b19vZmZzZXQgJSBic2l6ZTsKICAJCQluID0gbWluKCh1bnNpZ25lZCkoYnNpemUgLSBvbiks
IHVpby0+dWlvX3Jlc2lkKTsKICAJCQlpZiAobiA9PSBic2l6ZSkKKioqIDEuMQkxOTk0LzEx
LzI2IDEyOjQ4OjE4Ci0tLSAuL3N5cy9zY3NpL3NkLmMJMTk5NC8xMS8yNiAxMjo0ODo1MAoq
KioqKioqKioqKioqKioKKioqIDMxMywzMTggKioqKgotLS0gMzI4LDMzNCAtLS0tCiAgCSAq
IExvYWQgdGhlIHBoeXNpY2FsIGRldmljZSBwYXJhbWV0ZXJzIAogIAkgKi8KICAJc2RfZ2V0
X3Bhcm1zKHVuaXQsIDApOwkvKiBzZXRzIFNERVZfTUVESUFfTE9BREVEICovCisgI2lmbmRl
ZiBEQlNJWkVuZTUxMgogIAlpZiAoc2QtPnBhcmFtcy5zZWNzaXogIT0gU0VDU0laRSkgewkv
KiBYWFggT25lIGRheS4uLiAqLwogIAkJcHJpbnRmKCJzZCVsZDogQ2FuJ3QgZGVhbCB3aXRo
ICVkIGJ5dGVzIGxvZ2ljYWwgYmxvY2tzXG4iLAogIAkJICAgIHVuaXQsIHNkLT5wYXJhbXMu
c2Vjc2l6KTsKKioqKioqKioqKioqKioqCioqKiAzMjAsMzI1ICoqKioKLS0tIDMzNiwzNDIg
LS0tLQogIAkJZXJyY29kZSA9IEVOWElPOwogIAkJZ290byBiYWQ7CiAgCX0KKyAjZW5kaWYg
LyogREJTSVpFbmU1MTIgKi8KICAJU0NfREVCVUcoc2NfbGluaywgU0RFVl9EQjMsICgiUGFy
YW1zIGxvYWRlZCAiKSk7CiAgCiAgCS8qIExvY2sgdGhlIHBhY2sgaW4uICovCioqKioqKioq
KioqKioqKgoqKiogNTgzLDU4OSAqKioqCi0tLSA2MTEsNjIyIC0tLS0KICAJCXsKICAJCSAg
ICBnb3RvIGJhZDsKICAJCX0KKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgCQluYmxrID0gYnAt
PmJfYmNvdW50ID4+IDk7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJCW5ibGsgPSAo
YnAtPmJfYmNvdW50ICsgc2QtPmRpc2tsYWJlbC5kX3NlY3NpemUtMSkgLworIAkJCXNkLT5k
aXNrbGFiZWwuZF9zZWNzaXplOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAogIAkJ
LyoKICAJCSAqICBGaWxsIG91dCB0aGUgc2NzaSBjb21tYW5kCioqKioqKioqKioqKioqKgoq
KiogNzc2LDc4MiAqKioqCi0tLSA4MDksODIwIC0tLS0KICAJc2QtPmRpc2tsYWJlbC5kX3Bh
cnRpdGlvbnNbUkFXUEFSVF0ucF9zaXplID0gc2QtPnBhcmFtcy5kaXNrc2l6ZTsKICAJc2Qt
PmRpc2tsYWJlbC5kX3NlY3BlcnVuaXQ9IHNkLT5wYXJhbXMuZGlza3NpemU7CiAgCXNkLT5k
aXNrbGFiZWwuZF9ucGFydGl0aW9ucyA9IE1BWFBBUlRJVElPTlM7CisgI2lmbmRlZiBEQlNJ
WkVuZTUxMgogIAlzZC0+ZGlza2xhYmVsLmRfc2Vjc2l6ZSA9IFNFQ1NJWkU7CS8qIGFzIGxv
bmcgYXMgaXQncyBub3QgMCAqLworICNlbHNlIC8qIERCU0laRW5lNTEyICovCisgCXNkLT5k
aXNrbGFiZWwuZF9zZWNzaXplID0gc2QtPnBhcmFtcy5zZWNzaXo/IHNkLT5wYXJhbXMuc2Vj
c2l6OgorIAkJCQlTRUNTSVpFOwkvKiBhcyBsb25nIGFzIGl0J3Mgbm90IDAgKi8KKyAjZW5k
aWYgLyogREJTSVpFbmU1MTIgKi8KICAJc2QtPmRpc2tsYWJlbC5kX250cmFja3MgPSBzZC0+
cGFyYW1zLmhlYWRzOwogIAlzZC0+ZGlza2xhYmVsLmRfbnNlY3RvcnMgPSBzZC0+cGFyYW1z
LnNlY3RvcnM7CiAgCXNkLT5kaXNrbGFiZWwuZF9uY3lsaW5kZXJzID0gc2QtPnBhcmFtcy5j
eWxzOwoqKioqKioqKioqKioqKioKKioqIDk4Niw5OTEgKioqKgotLS0gMTAyNCwxMDM1IC0t
LS0KICAJcmV0dXJuIDA7CiAgfQogIAorICNpZmRlZiBEQlNJWkVuZTUxMgorIC8qCisgICog
UmV0dXJuIHRoZSBzaXplIG9mIGEgZGlzay1kcml2ZSBwYXJ0aXRpb24gaW4gYSBudW1iZXIg
b2YgbG9naWNhbCB1bml0cworICAqIChjdXJyZW50bHkgREVWX0JTSVpFKS4KKyAgKi8KKyAj
ZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICBpbnQKICBzZHNpemUoZGV2X3QgZGV2KQogIHsK
KioqKioqKioqKioqKioqCioqKiAxMDA4LDEwMTQgKioqKgotLS0gMTA1MiwxMDYzIC0tLS0K
ICAJaWYgKHNkLT5mbGFncyAmIFNEV1JJVEVQUk9UKQogIAkJcmV0dXJuIC0xOwogIAorICNp
Zm5kZWYgREJTSVpFbmU1MTIKICAJcmV0dXJuIChpbnQpc2QtPmRpc2tsYWJlbC5kX3BhcnRp
dGlvbnNbcGFydF0ucF9zaXplOworICNlbHNlIC8qIERCU0laRW5lNTEyICovCisgCXJldHVy
biAoaW50KXNkLT5kaXNrbGFiZWwuZF9wYXJ0aXRpb25zW3BhcnRdLnBfc2l6ZSAKKyAJICAJ
CSogc2QtPmRpc2tsYWJlbC5kX3NlY3NpemUgLyBERVZfQlNJWkU7CisgI2VuZGlmIC8qIERC
U0laRW5lNTEyICovCiAgfQogIAogIC8qCioqKiAxLjEJMTk5NC8xMS8yNiAxMjo0ODoyMQot
LS0gLi9zeXMvc2NzaS9zY3NpY29uZi5jCTE5OTQvMTEvMjYgMTQ6MzI6NTIKKioqKioqKioq
KioqKioqCioqKiAyNzUsMjgwICoqKioKLS0tIDI3NSwyODQgLS0tLQogIAkJVF9ESVJFQ1Qs
IFRfRklYRUQsICJNQVhUT1IgICIsICJYVC00MTcwUyAgICAgICAgIgogIAkJICAgICwiQjVB
ICIsIHNkYXR0YWNoLCAibXgxIiwgU0NfT05FX0xVCiAgCX0sCisgCXsKKyAJCVRfT1BUSUNB
TCwgVF9SRU1PViwgIk1heG9wdGl4IiwgImFueSIKKyAJCSAgICAsImFueSIsIHNkYXR0YWNo
LCAic2QiLCBTQ19PTkVfTFUKKyAJfSwKICAjZW5kaWYJLyogTlNEICovCiAgI2lmIE5TVCA+
IDAKICAJewoqKiogMS4xCTE5OTQvMTEvMjYgMTI6NDg6MjMKLS0tIC4vc3lzL3N5cy9idWYu
aAkxOTk0LzExLzI2IDEyOjQ4OjUwCioqKioqKioqKioqKioqKgoqKiogMjEyLDIyMCAqKioq
Ci0tLSAyMTIsMjI2IC0tLS0KICB2b2lkCWJpb2RvbmUgX19QKChzdHJ1Y3QgYnVmICopKTsK
ICAKICB2b2lkCWNsdXN0ZXJfY2FsbGJhY2sgX19QKChzdHJ1Y3QgYnVmICopKTsKKyAjaWZu
ZGVmIERCU0laRW5lNTEyCiAgaW50CWNsdXN0ZXJfcmVhZCBfX1AoKHN0cnVjdCB2bm9kZSAq
LCB1X3F1YWRfdCwgZGFkZHJfdCwgbG9uZywKICAJICAgIHN0cnVjdCB1Y3JlZCAqLCBzdHJ1
Y3QgYnVmICoqKSk7CiAgdm9pZAljbHVzdGVyX3dyaXRlIF9fUCgoc3RydWN0IGJ1ZiAqLCB1
X3F1YWRfdCkpOworICNlbHNlIC8qIERCU0laRW5lNTEyICovCisgaW50CWNsdXN0ZXJfcmVh
ZCBfX1AoKHN0cnVjdCB2bm9kZSAqLCB1X3F1YWRfdCwgZGFkZHJfdCwgbG9uZywKKyAJICAg
IHN0cnVjdCB1Y3JlZCAqLCBzdHJ1Y3QgYnVmICoqLCB1X2xvbmcpKTsKKyB2b2lkCWNsdXN0
ZXJfd3JpdGUgX19QKChzdHJ1Y3QgYnVmICosIHVfcXVhZF90LCB1X2xvbmcpKTsKKyAjZW5k
aWYgLyogREJTSVpFbmU1MTIgKi8KICB1X2ludAltaW5waHlzIF9fUCgoc3RydWN0IGJ1ZiAq
KSk7CiAgdm9pZAl2d2FrZXVwIF9fUCgoc3RydWN0IGJ1ZiAqKSk7CiAgdm9pZAl2bWFwYnVm
IF9fUCgoc3RydWN0IGJ1ZiAqKSk7CioqKiAxLjEJMTk5NC8xMS8yNiAxMjo0ODoyNQotLS0g
Li9zeXMvdWZzL2Zmcy9mZnNfdmZzb3BzLmMJMTk5NC8xMS8yNiAxNjoxNTo0MQoqKioqKioq
KioqKioqKioKKioqIDI3OCwyODQgKioqKgotLS0gMjc4LDI5MSAtLS0tCiAgCS8qCiAgCSAq
IFN0ZXAgMjogcmUtcmVhZCBzdXBlcmJsb2NrIGZyb20gZGlzay4KICAJICovCisgI2lmbmRl
ZiBEQlNJWkVuZTUxMgogIAllcnJvciA9IGJyZWFkKGRldnZwLCBTQkxPQ0ssIFNCU0laRSwg
Tk9DUkVELCAmYnApOworICNlbHNlIC8qIERCU0laRW5lNTEyICovCisgCWZzID0gVkZTVE9V
RlMobW91bnRwKS0+dW1fZnM7CisgICAgICAgICBzaXplID0gZnMtPmZzX2ZzaXplIC8gZnMt
PmZzX25zcGY7CS8qIHNlY3RvciBzaXplICovCisKKyAJZXJyb3IgPSBicmVhZChkZXZ2cCwg
U0JPRkYvc2l6ZSwgU0JTSVpFLCBOT0NSRUQsICZicCk7CisgI2VuZGlmIC8qIERCU0laRW5l
NTEyICovCiAgCWlmIChlcnJvcikKICAJCXJldHVybiAoZXJyb3IpOwogIAlmcyA9IChzdHJ1
Y3QgZnMgKilicC0+Yl9kYXRhOwoqKioqKioqKioqKioqKioKKioqIDM5Niw0MDIgKioqKgot
LS0gNDAzLDQxMyAtLS0tCiAgCiAgCWJwID0gTlVMTDsKICAJdW1wID0gTlVMTDsKKyAjaWZu
ZGVmIERCU0laRW5lNTEyCiAgCWVycm9yID0gYnJlYWQoZGV2dnAsIFNCTE9DSywgU0JTSVpF
LCBOT0NSRUQsICZicCk7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJZXJyb3IgPSBi
cmVhZChkZXZ2cCwgU0JPRkYvc2l6ZSwgU0JTSVpFLCBOT0NSRUQsICZicCk7CisgI2VuZGlm
IC8qIERCU0laRW5lNTEyICovCiAgCWlmIChlcnJvcikKICAJCWdvdG8gb3V0OwogIAlmcyA9
IChzdHJ1Y3QgZnMgKilicC0+Yl9kYXRhOwoqKioqKioqKioqKioqKioKKioqIDg2NCw4NzAg
KioqKgotLS0gODc4LDg5MiAtLS0tCiAgCWNhZGRyX3Qgc3BhY2U7CiAgCWludCBpLCBzaXpl
LCBlcnJvciA9IDA7CiAgCisgI2lmbmRlZiBEQlNJWkVuZTUxMgogIAlicCA9IGdldGJsayht
cC0+dW1fZGV2dnAsIFNCTE9DSywgKGludClmcy0+ZnNfc2JzaXplLCAwLCAwKTsKKyAjZWxz
ZSAvKiBEQlNJWkVuZTUxMiAqLworICAgICAgICAgc2l6ZSA9IGZzLT5mc19mc2l6ZSAvIGZz
LT5mc19uc3BmOwkvKiBzZWN0b3Igc2l6ZSAqLworCisKKworIAlicCA9IGdldGJsayhtcC0+
dW1fZGV2dnAsIFNCT0ZGL3NpemUsIChpbnQpZnMtPmZzX3Nic2l6ZSwgMCwgMCk7CisgI2Vu
ZGlmIC8qIERCU0laRW5lNTEyICovCiAgCWJjb3B5KChjYWRkcl90KWZzLCBicC0+Yl9kYXRh
LCAodV9pbnQpZnMtPmZzX3Nic2l6ZSk7CiAgCS8qIFJlc3RvcmUgY29tcGF0aWJpbGl0eSB0
byBvbGQgZmlsZSBzeXN0ZW1zLgkJICAgWFhYICovCiAgCWlmIChmcy0+ZnNfcG9zdGJsZm9y
bWF0ID09IEZTXzQyUE9TVEJMRk1UKQkJLyogWFhYICovCioqKiAxLjEJMTk5NC8xMS8yNiAx
Mjo0ODoyNwotLS0gLi9zeXMvdWZzL2Zmcy9mZnNfaW5vZGUuYwkxOTk0LzExLzI2IDEyOjQ4
OjUxCioqKioqKioqKioqKioqKgoqKiogNTYsNjEgKioqKgotLS0gNTYsNjUgLS0tLQogICNp
bmNsdWRlIDx1ZnMvZmZzL2ZzLmg+CiAgI2luY2x1ZGUgPHVmcy9mZnMvZmZzX2V4dGVybi5o
PgogIAorICNpZmRlZiBEQlNJWkVuZTUxMgorICNkZWZpbmUgX2J0b2RiKGZzLCBieXRlcykJ
KCgoYnl0ZXMpKihmcyktPmZzX25zcGYpID4+IChmcyktPmZzX2ZzaGlmdCkKKyAjZW5kaWYg
LyogREJTSVpFbmU1MTIgKi8KKyAKICBzdGF0aWMgaW50IGZmc19pbmRpcnRydW5jIF9fUCgo
c3RydWN0IGlub2RlICosIGRhZGRyX3QsIGRhZGRyX3QsIGRhZGRyX3QsIGludCwKICAJICAg
IGxvbmcgKikpOwogIAoqKiogMS4xCTE5OTQvMTEvMjYgMTI6NDg6MjkKLS0tIC4vc3lzL3Vm
cy9mZnMvZmZzX2FsbG9jLmMJMTk5NC8xMS8yNiAxMjo0ODo1MQoqKioqKioqKioqKioqKioK
KioqIDUxLDU2ICoqKioKLS0tIDUxLDYwIC0tLS0KICAjaW5jbHVkZSA8dWZzL2Zmcy9mcy5o
PgogICNpbmNsdWRlIDx1ZnMvZmZzL2Zmc19leHRlcm4uaD4KICAKKyAjaWZkZWYgREJTSVpF
bmU1MTIKKyAjZGVmaW5lIF9idG9kYihmcywgYnl0ZXMpCSgoKGJ5dGVzKSooZnMpLT5mc19u
c3BmKSA+PiAoZnMpLT5mc19mc2hpZnQpCisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCisg
CiAgZXh0ZXJuIHVfbG9uZyBuZXh0Z2VubnVtYmVyOwogIAogIHN0YXRpYyBkYWRkcl90CWZm
c19hbGxvY2NnIF9fUCgoc3RydWN0IGlub2RlICosIGludCwgZGFkZHJfdCwgaW50KSk7Cioq
KiAxLjEJMTk5NC8xMS8yNiAxMjo0ODozMgotLS0gLi9zeXMvdWZzL3Vmcy91ZnNfZGlza3N1
YnIuYwkxOTk0LzExLzI2IDEyOjQ4OjUxCioqKioqKioqKioqKioqKgoqKiogMjA5LDIxNSAq
KioqCi0tLSAyMDksMjE5IC0tLS0KICAJCW1zZyA9ICJJL08gZXJyb3IiOwogIAllbHNlIGZv
ciAoZGxwID0gKHN0cnVjdCBkaXNrbGFiZWwgKilicC0+Yl9kYXRhOwogIAkgICAgZGxwIDw9
IChzdHJ1Y3QgZGlza2xhYmVsICopKChjaGFyICopYnAtPmJfZGF0YSArCisgI2lmbmRlZiBE
QlNJWkVuZTUxMgogIAkgICAgREVWX0JTSVpFIC0gc2l6ZW9mKCpkbHApKTsKKyAjZWxzZSAv
KiBEQlNJWkVuZTUxMiAqLworIAkJICAgbHAtPmRfc2Vjc2l6ZSAtIHNpemVvZigqZGxwKSk7
CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCSAgICBkbHAgPSAoc3RydWN0IGRpc2ts
YWJlbCAqKSgoY2hhciAqKWRscCArIHNpemVvZihsb25nKSkpIHsKICAJCWlmIChkbHAtPmRf
bWFnaWMgIT0gRElTS01BR0lDIHx8IGRscC0+ZF9tYWdpYzIgIT0gRElTS01BR0lDKSB7CiAg
CQkJaWYgKG1zZyA9PSBOVUxMKQoqKiogMS4xCTE5OTQvMTEvMjYgMTI6NDg6MzUKLS0tIC4v
c3lzL3Vmcy91ZnMvdWZzX3JlYWR3cml0ZS5jCTE5OTQvMTEvMjYgMTI6NDg6NTIKKioqKioq
KioqKioqKioqCioqKiA1NCw1OSAqKioqCi0tLSA1NCw2MyAtLS0tCiAgI2RlZmluZQlXUklU
RV9TCQkJImZmc193cml0ZSIKICAjZW5kaWYKICAKKyAjaWZkZWYgREJTSVpFbmU1MTIKKyAj
ZGVmaW5lCWZzZGJzaXplKGZzKQkJKChmcyktPmZzX2ZzaXplLyhmcyktPmZzX25zcGYpCisg
I2VuZGlmIC8qIERCU0laRW5lNTEyICovCisgCiAgLyoKICAgKiBWbm9kZSBvcCBmb3IgcmVh
ZGluZy4KICAgKi8KKioqKioqKioqKioqKioqCioqKiAxMTYsMTI0ICoqKioKLS0tIDEyMCwx
MzcgLS0tLQogICNlbHNlCiAgCQlpZiAobGJsa3Rvc2l6ZShmcywgbmV4dGxibikgPiBpcC0+
aV9zaXplKQogIAkJCWVycm9yID0gYnJlYWQodnAsIGxibiwgc2l6ZSwgTk9DUkVELCAmYnAp
OworICNpZm5kZWYgREJTSVpFbmU1MTIKICAJCWVsc2UgaWYgKGRvY2x1c3RlcnJlYWQpCisg
I2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJCWVsc2UgaWYgKGRvY2x1c3RlcnJlYWQpIHsK
KyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICAJCQllcnJvciA9IGNsdXN0ZXJfcmVhZCh2
cCwKKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgCQkJICAgIGlwLT5pX3NpemUsIGxibiwgc2l6
ZSwgTk9DUkVELCAmYnApOworICNlbHNlIC8qIERCU0laRW5lNTEyICovCisgCQkJICAgIGlw
LT5pX3NpemUsIGxibiwgc2l6ZSwgTk9DUkVELCAmYnAsIGZzZGJzaXplKGZzKSk7CisgCQkg
ICAgICB9CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCQllbHNlIGlmIChsYm4gLSAx
ID09IHZwLT52X2xhc3RyKSB7CiAgCQkJaW50IG5leHRzaXplID0gQkxLU0laRShmcywgaXAs
IG5leHRsYm4pOwogIAkJCWVycm9yID0gYnJlYWRuKHZwLCBsYm4sCioqKioqKioqKioqKioq
KgoqKiogMjYzLDI3MSAqKioqCi0tLSAyNzYsMjkwIC0tLS0KICAJCWlmIChpb2ZsYWcgJiBJ
T19TWU5DKQogIAkJCSh2b2lkKWJ3cml0ZShicCk7CiAgCQllbHNlIGlmICh4ZmVyc2l6ZSAr
IGJsa29mZnNldCA9PSBmcy0+ZnNfYnNpemUpCisgI2lmbmRlZiBEQlNJWkVuZTUxMgogIAkJ
CWlmIChkb2NsdXN0ZXJ3cml0ZSkKICAJCQkJY2x1c3Rlcl93cml0ZShicCwgaXAtPmlfc2l6
ZSk7CiAgCQkJZWxzZSB7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJCQlpZiAoZG9j
bHVzdGVyd3JpdGUpIHsKKyAJCQkJY2x1c3Rlcl93cml0ZShicCwgaXAtPmlfc2l6ZSwgZnNk
YnNpemUoZnMpKTsKKyAJCQl9IGVsc2UgeworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwog
IAkJCQliYXdyaXRlKGJwKTsKICAJCQl9CiAgCQllbHNlCioqKiAxLjEJMTk5NC8xMS8yNiAx
Mjo0ODozNwotLS0gLi9zeXMvdm0vdm1fc3dhcC5jCTE5OTQvMTEvMjYgMTI6NDg6NTIKKioq
KioqKioqKioqKioqCioqKiA0NSw1MCAqKioqCi0tLSA0NSw1NyAtLS0tCiAgI2luY2x1ZGUg
PHN5cy9maWxlLmg+CiAgI2luY2x1ZGUgPHN5cy9ybGlzdC5oPgogIAorICNpZmRlZiBEQlNJ
WkVuZTUxMgorICNpbmNsdWRlIDxzeXMvZGtiYWQuaD4KKyAjaW5jbHVkZSA8c3lzL2Rpc2ts
YWJlbC5oPgorICNpbmNsdWRlIDxzeXMvZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3Rs
Lmg+CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCisgCiAgI2luY2x1ZGUgPG1pc2Nmcy9z
cGVjZnMvc3BlY2Rldi5oPgogIAogIC8qCioqKioqKioqKioqKioqKgoqKiogNjAsNjUgKioq
KgotLS0gNjcsNzggLS0tLQogIAogIGludCBic3duZWVkZWQ7CiAgdm1fb2Zmc2V0X3Qgc3dh
cGJrdmE7CQkvKiBzd2FwIGJ1ZmZlcnMga3ZhICovCisgCisgI2lmZGVmIERCU0laRW5lNTEy
CisgI2RlZmluZSBNQVhTV0RFViAgMTAKKyBzdGF0aWMgdV9sb25nIHN3c2Vjc2l6ZVtNQVhT
V0RFVl0gPSB7MH07CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCisgCiAgLyoKICAgKiBT
ZXQgdXAgc3dhcCBkZXZpY2VzLgogICAqIEluaXRpYWxpemUgbGlua2VkIGxpc3Qgb2YgZnJl
ZSBzd2FwCioqKioqKioqKioqKioqKgoqKiogMjYwLDI2NSAqKioqCi0tLSAyNzMsMjgzIC0t
LS0KICAJaWYgKGJwLT5iX3ZwICE9IE5VTEwpCiAgCQlicmVsdnAoYnApOwogIAlicC0+Yl92
cCA9IHNwLT5zd192cDsKKyAKKyAjaWZkZWYgREJTSVpFbmU1MTIKKyAJYnAtPmJfYmxrbm8g
PSBicC0+Yl9ibGtubyAqIERFVl9CU0laRSAvIHN3c2Vjc2l6ZVtpbmRleF07CisgI2VuZGlm
IC8qIERCU0laRW5lNTEyICovCisgCiAgCVZPUF9TVFJBVEVHWShicCk7CiAgfQogIAoqKioq
KioqKioqKioqKioKKioqIDM0OCwzNTMgKioqKgotLS0gMzY2LDM3NSAtLS0tCiAgCXJlZ2lz
dGVyIHN3YmxrX3QgZHZiYXNlOwogIAlyZWdpc3RlciBpbnQgbmJsa3M7CiAgCWludCBlcnJv
cjsKKyAjaWZkZWYgREJTSVpFbmU1MTIKKyAJZGV2X3QgZGV2OworIAlzdHJ1Y3QgcGFydGlu
Zm8gZHBhcnQ7CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCiAgCXNwID0gJnN3ZGV2
dFtpbmRleF07CiAgCXZwID0gc3AtPnN3X3ZwOwoqKioqKioqKioqKioqKioKKioqIDM1Niwz
NjEgKioqKgotLS0gMzc4LDQwMCAtLS0tCiAgCQlyZXR1cm4gKGVycm9yKTsKICAJc3AtPnN3
X2ZsYWdzIHw9IFNXX0ZSRUVEOwogIAluYmxrcyA9IHNwLT5zd19uYmxrczsKKyAKKyAjaWZk
ZWYgREJTSVpFbmU1MTIKKyAJaWYgKGluZGV4ID49IE1BWFNXREVWKSB7CisgCQlwcmludGYg
KCJleGNlZWRpbmcgTUFYU1dERVYgdmFsdWUgaW4gdm1fc3dhcC5jXG4iKTsKKyAJCXJldHVy
biAoRU5PREVWKTsKKyAJfQorIAlkZXYgPSBzcC0+c3dfZGV2OworIAlpZiAoYmRldnN3W21h
am9yKGRldildLmRfaW9jdGwgIT0gMCAmJgorIAkgICAgKCpiZGV2c3dbbWFqb3IoZGV2KV0u
ZF9pb2N0bCkoZGV2LCBESU9DR1BBUlQsCisgCQkgICAgIChjYWRkcl90KSZkcGFydCwgRlJF
QUQsIHApID09IDApCisgCQlzd3NlY3NpemVbaW5kZXhdID0gZHBhcnQuZGlza2xhYi0+ZF9z
ZWNzaXplOworIAllbHNlCisgCQlzd3NlY3NpemVbaW5kZXhdID0gREVWX0JTSVpFOworIAor
CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCisgCiAgCS8qCiAgCSAqIFNvbWUgZGV2aWNl
cyBtYXkgbm90IGV4aXN0IHRpbCBhZnRlciBib290IHRpbWUuCiAgCSAqIElmIHNvLCB0aGVp
ciBuYmxrIGNvdW50IHdpbGwgYmUgMC4KKioqKioqKioqKioqKioqCioqKiAzODEsMzg5ICoq
KioKLS0tIDQyMCw0NDAgLS0tLQogIAkJCW5zd2FwICs9IG5ibGtzOwogIAkJfQogICNlbHNl
CisgI2lmbmRlZiBTQVJTSUFNCiAgCQlwZXJkZXYgPSBuc3dhcCAvIG5zd2RldjsKICAJCWlm
IChuYmxrcyA+IHBlcmRldikKICAJCQluYmxrcyA9IHBlcmRldjsKKyAjZWxzZSAvKiBTQVJT
SUFNICovCisgCQlpZiAobnN3YXAgPiAwKSB7CisgCQkJcGVyZGV2ID0gbnN3YXAgLyBuc3dk
ZXY7CisgCQkJaWYgKG5ibGtzID4gcGVyZGV2KQorIAkJCQluYmxrcyA9IHBlcmRldjsKKyAJ
CX0gZWxzZSB7CisgCQkJaWYgKG5ibGtzICUgZG1tYXgpCisgCQkJCW5ibGtzIC09IChuYmxr
cyAlIGRtbWF4KTsKKyAJCQluc3dhcCA9IG5ibGtzICogbnN3ZGV2OworIAkJfQorICNlbmRp
ZiAvKiBTQVJTSUFNICovCiAgI2VuZGlmCiAgCQlzcC0+c3dfbmJsa3MgPSBuYmxrczsKICAJ
fQoqKiogMS4xCTE5OTQvMTEvMjYgMTI6NDg6MzkKLS0tIC4vc3lzL3ZtL3Zub2RlX3BhZ2Vy
LmMJMTk5NC8xMS8yNiAxMjo0ODo1MgoqKioqKioqKioqKioqKioKKioqIDgxLDg2ICoqKioK
LS0tIDgxLDk0IC0tLS0KICAjaW5jbHVkZSA8c3lzL2J1Zi5oPgogICNpbmNsdWRlIDxtaXNj
ZnMvc3BlY2ZzL3NwZWNkZXYuaD4KICAKKyAjaWZkZWYgREJTSVpFbmU1MTIKKyAjaW5jbHVk
ZSA8c3lzL2RrYmFkLmg+CisgI2luY2x1ZGUgPHN5cy9kaXNrbGFiZWwuaD4KKyAjaW5jbHVk
ZSA8c3lzL2ZjbnRsLmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorICNpbmNsdWRlIDxz
eXMvY29uZi5oPgorICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLworIAogIGludCAgICAgdm5v
ZGVfcGFnZXJfcHV0bXVsdGkoKTsKICAKICB2b2lkICAgIHZub2RlX3BhZ2VyX2luaXQoKTsK
KioqKioqKioqKioqKioqCioqKiA0ODksNTAzICoqKioKLS0tIDQ5Nyw1NDYgLS0tLQogIAlQ
QUdFX1dBS0VVUChtKTsKICAJdm1fcGFnZV9mcmVlKG0pOwogIH0KKyAjaWZkZWYgREJTSVpF
bmU1MTIKKyAvKgorICAqIHJldHVybiBibG9jayBzaXplIG9mIGRpc2sgZGV2aWNlLgorICAq
LworIHN0YXRpYyBpbnQKKyB2bm9kZV9wYWdlcl9kYnNpemUodnApCisgCXN0cnVjdCB2bm9k
ZSAqdnA7CisgeworIAlzdHJ1Y3QgcGFydGluZm8gZHBhcnQ7CisgCisgCWlmICh2cC0+dl90
eXBlID09IFZCTEsgJiYgKCpiZGV2c3dbbWFqb3IodnAtPnZfcmRldildLmRfaW9jdGwpKHZw
LT52X3JkZXYsIERJT0NHUEFSVCwKKyAJCSAgICAoY2FkZHJfdCkmZHBhcnQsIEZSRUFELCAm
cHJvYzApID09IDApIHsKKworIAkJcmV0dXJuIGRwYXJ0LmRpc2tsYWItPmRfc2Vjc2l6ZTsK
KyAJICAgICAgfQorIAorIAlyZXR1cm4gREVWX0JTSVpFOworIH0KKyAjZW5kaWYgLyogREJT
SVpFbmU1MTIgKi8KICAKKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgLyoKICAgKiBjYWxjdWxh
dGUgdGhlIGxpbmVhciAoYnl0ZSkgZGlzayBhZGRyZXNzIG9mIHNwZWNpZmllZCB2aXJ0dWFs
CiAgICogZmlsZSBhZGRyZXNzCiAgICovCisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAv
KgorICAqIGNhbGN1bGF0ZSB0aGUgbGluZWFyIChieXRlKSBkaXNrIGFkZHJlc3Mgb2Ygc3Bl
Y2lmaWVkIHZpcnR1YWwKKyAgKiBmaWxlIGFkZHJlc3MuICBJZiBkYnNpemUgaXMgbm90IHpl
cm8sIHZhbHVlIG9mIGRic2l6ZSBpcyB1c2VkCisgICogZm9yIGJsb2NrIHNpemU7IG90aGVy
d2lzZSwgbmV3IHZhbHVlIHVzZWQgaXMgcmV0dXJuZWQgaW4gZGJzaXplLgorICAqLworICNl
bmRpZiAvKiBEQlNJWkVuZTUxMiAqLworIAogIHZtX29mZnNldF90CisgI2lmbmRlZiBEQlNJ
WkVuZTUxMgogIHZub2RlX3BhZ2VyX2FkZHIodnAsIGFkZHJlc3MpCisgI2Vsc2UgLyogREJT
SVpFbmU1MTIgKi8KKyB2bm9kZV9wYWdlcl9hZGRyKHZwLCBhZGRyZXNzLCBkYnNpemUpCisg
I2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCXN0cnVjdCB2bm9kZSAqdnA7CiAgCXZtX29m
ZnNldF90IGFkZHJlc3M7CisgI2lmZGVmIERCU0laRW5lNTEyCisgICAgICAJdV9sb25nICpk
YnNpemU7CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgewogIAlpbnQgICAgIHJ0YWRk
cmVzczsKICAJaW50ICAgICBic2l6ZTsKKioqKioqKioqKioqKioqCioqKiA1MDUsNTEwICoq
KioKLS0tIDU0OCw1NTYgLS0tLQogIAlzdHJ1Y3Qgdm5vZGUgKnJ0dnA7CiAgCWludCAgICAg
ZXJyOwogIAlpbnQgICAgIHZibG9jaywgdm9mZnNldDsKKyAjaWZkZWYgREJTSVpFbmU1MTIK
KyAJdV9sb25nIGRldl9ic2l6ZTsKKyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICAKICAJ
YnNpemUgPSB2cC0+dl9tb3VudC0+bW50X3N0YXQuZl9pb3NpemU7CiAgCXZibG9jayA9IGFk
ZHJlc3MgLyBic2l6ZTsKKioqKioqKioqKioqKioqCioqKiA1MTQsNTIxICoqKioKLS0tIDU2
MCw1ODEgLS0tLQogIAogIAlpZiAoZXJyKQogIAkJcnRhZGRyZXNzID0gLTE7CisgI2lmbmRl
ZiBEQlNJWkVuZTUxMgogIAllbHNlCiAgCQlydGFkZHJlc3MgPSBibG9jayAqIERFVl9CU0la
RSArIHZvZmZzZXQ7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJZWxzZSB7CisgCQlp
ZiAoZGJzaXplID09IE5VTEwpIAorIAkJCWRldl9ic2l6ZSA9IHZub2RlX3BhZ2VyX2Ric2l6
ZShydHZwKTsKKyAJCWVsc2UKKyAJCSAgCWlmICgqZGJzaXplID09IDApIAorIAkJCQlkZXZf
YnNpemUgPSAqZGJzaXplID0gdm5vZGVfcGFnZXJfZGJzaXplKHJ0dnApOworIAkJCWVsc2UK
KyAJCQkJZGV2X2JzaXplID0gKmRic2l6ZTsKKyAKKyAJCXJ0YWRkcmVzcyA9IGJsb2NrICog
ZGV2X2JzaXplICsgdm9mZnNldDsKKyAJfQorICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwog
IAogIAlyZXR1cm4gcnRhZGRyZXNzOwogIH0KKioqKioqKioqKioqKioqCioqKiA1ODgsNTkz
ICoqKioKLS0tIDY0OCw2NTYgLS0tLQogIAlpbnQgICAgIGZpbGVhZGRyOwogIAlpbnQgICAg
IGJsb2NrOwogIAl2bV9vZmZzZXRfdCBic2l6ZTsKKyAjaWZkZWYgREJTSVpFbmU1MTIKKyAJ
dV9sb25nCWRic2l6ZSA9IDA7CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCWludCAg
ICAgZXJyb3IgPSAwOwogIAogIAlwYWdpbmdfb2Zmc2V0ID0gbS0+b2JqZWN0LT5wYWdpbmdf
b2Zmc2V0OwoqKioqKioqKioqKioqKioKKioqIDY0Miw2NDggKioqKgotLS0gNzA1LDcxNSAt
LS0tCiAgCQkJYnJlYWs7CiAgCQl9CiAgCQlzcGx4KHMpOworICNpZm5kZWYgREJTSVpFbmU1
MTIKICAJCWZpbGVhZGRyID0gdm5vZGVfcGFnZXJfYWRkcih2cCwgZm9mZiArIGkgKiBic2l6
ZSk7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJCWZpbGVhZGRyID0gdm5vZGVfcGFn
ZXJfYWRkcih2cCwgZm9mZiArIGkgKiBic2l6ZSwgJmRic2l6ZSk7CisgI2VuZGlmIC8qIERC
U0laRW5lNTEyICovCiAgCQlpZiAoZmlsZWFkZHIgIT0gLTEpIHsKICAJCQlicCA9IGdldHBi
dWYoKTsKICAJCQlWSE9MRCh2cCk7CioqKioqKioqKioqKioqKgoqKiogNzgzLDc4OCAqKioq
Ci0tLSA4NTAsODU4IC0tLS0KICAJaW50CWNvdW50YTsKICAJaW50ICAgICBzOwogIAlpbnQg
ICAgIGZhaWxmbGFnOworICNpZmRlZiBEQlNJWkVuZTUxMgorIAl1X2xvbmcJZGJzaXplID0g
MDsKKyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICAKICAJaW50ICAgICBlcnJvciA9IDA7
CiAgCioqKioqKioqKioqKioqKgoqKiogOTM1LDk0MSAqKioqCi0tLSAxMDA1LDEwMTUgLS0t
LQogIAl9CiAgI2VuZGlmCiAgCisgI2lmbmRlZiBEQlNJWkVuZTUxMgogIAlyZXFhZGRyID0g
dm5vZGVfcGFnZXJfYWRkcih2cCwgZm9mZik7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8K
KyAJcmVxYWRkciA9IHZub2RlX3BhZ2VyX2FkZHIodnAsIGZvZmYsICZkYnNpemUpOworICNl
bmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAlzID0gc3BsYmlvKCk7CiAgCiAgCS8qCioqKioq
KioqKioqKioqKgoqKiogOTUyLDk1OCAqKioqCi0tLSAxMDI2LDEwMzYgLS0tLQogICNlbHNl
CiAgCQkgICAgKGluY29yZSh2cCwgKGZvZmYgKyAoaSAtIHJlcXBhZ2UpICogUEFHRV9TSVpF
KSAvIGJzaXplKSkgfHwKICAjZW5kaWYKKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgCQkgICAg
KHZub2RlX3BhZ2VyX2FkZHIodnAsIG1baV0tPm9mZnNldCArIHBhZ2luZ19vZmZzZXQpKQor
ICNlbHNlIC8qIERCU0laRW5lNTEyICovCisgCQkgICAgKHZub2RlX3BhZ2VyX2FkZHIodnAs
IG1baV0tPm9mZnNldCArIHBhZ2luZ19vZmZzZXQsICZkYnNpemUpKQorICNlbmRpZiAvKiBE
QlNJWkVuZTUxMiAqLwogIAkJICAgICE9IHJlcWFkZHIgKyAoaSAtIHJlcXBhZ2UpICogUEFH
RV9TSVpFKSB7CiAgCQkJdm5vZGVfcGFnZXJfZnJlZXBhZ2UobVtpXSk7CiAgCQkJZmFpbGZs
YWcgPSAxOwoqKioqKioqKioqKioqKioKKioqIDk3NCw5ODAgKioqKgotLS0gMTA1MiwxMDYy
IC0tLS0KICAjZWxzZQogIAkJICAgIChpbmNvcmUodnAsIChmb2ZmICsgKGkgLSByZXFwYWdl
KSAqIFBBR0VfU0laRSkgLyBic2l6ZSkpIHx8CiAgI2VuZGlmCisgI2lmbmRlZiBEQlNJWkVu
ZTUxMgogIAkJICAgICh2bm9kZV9wYWdlcl9hZGRyKHZwLCBtW2ldLT5vZmZzZXQgKyBwYWdp
bmdfb2Zmc2V0KSkKKyAjZWxzZSAvKiBEQlNJWkVuZTUxMiAqLworIAkJICAgICh2bm9kZV9w
YWdlcl9hZGRyKHZwLCBtW2ldLT5vZmZzZXQgKyBwYWdpbmdfb2Zmc2V0LCAmZGJzaXplKSkK
KyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICAJCSAgICAhPSByZXFhZGRyICsgKGkgLSBy
ZXFwYWdlKSAqIFBBR0VfU0laRSkgewogIAkJCXZub2RlX3BhZ2VyX2ZyZWVwYWdlKG1baV0p
OwogIAkJCWZhaWxmbGFnID0gMTsKKioqKioqKioqKioqKioqCioqKiAxMDA1LDEwMTEgKioq
KgotLS0gMTA4NywxMDk3IC0tLS0KICAJLyoKICAJICogYW5kIGdldCB0aGUgZGlzayBwaHlz
aWNhbCBhZGRyZXNzIChpbiBieXRlcykKICAJICovCisgI2lmbmRlZiBEQlNJWkVuZTUxMgog
IAlmaXJzdGFkZHIgPSB2bm9kZV9wYWdlcl9hZGRyKHZwLCBmb2ZmKTsKKyAjZWxzZSAvKiBE
QlNJWkVuZTUxMiAqLworIAlmaXJzdGFkZHIgPSB2bm9kZV9wYWdlcl9hZGRyKHZwLCBmb2Zm
LCAmZGJzaXplKTsKKyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICAKICAJLyoKICAJICog
Y2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSB0cmFuc2ZlcgoqKioqKioqKioqKioqKioKKioq
IDEwMTgsMTAyNCAqKioqCi0tLSAxMTA0LDExMTQgLS0tLQogIAkgKiByb3VuZCB1cCBwaHlz
aWNhbCBzaXplIGZvciByZWFsIGRldmljZXMKICAJICovCiAgCWlmIChkcC0+dl90eXBlID09
IFZCTEsgfHwgZHAtPnZfdHlwZSA9PSBWQ0hSKQorICNpZm5kZWYgREJTSVpFbmU1MTIKICAJ
CXNpemUgPSAoc2l6ZSArIERFVl9CU0laRSAtIDEpICYgfihERVZfQlNJWkUgLSAxKTsKKyAj
ZWxzZSAvKiBEQlNJWkVuZTUxMiAqLworIAkJc2l6ZSA9IChzaXplICsgZGJzaXplIC0gMSkg
JiB+KGRic2l6ZSAtIDEpOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAogIAljb3Vu
dGEgPSAwOwogIAlpZiggY291bnQqUEFHRV9TSVpFID4gYnNpemUpCioqKioqKioqKioqKioq
KgoqKiogMTA1MSwxMDU3ICoqKioKLS0tIDExNDEsMTE1MSAtLS0tCiAgCQljcmhvbGQoYnAt
PmJfcmNyZWQpOwogIAlpZiAoYnAtPmJfd2NyZWQgIT0gTk9DUkVEKQogIAkJY3Job2xkKGJw
LT5iX3djcmVkKTsKKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgCWJwLT5iX2Jsa25vID0gZmly
c3RhZGRyIC8gREVWX0JTSVpFOworICNlbHNlIC8qIERCU0laRW5lNTEyICovCisgCWJwLT5i
X2Jsa25vID0gZmlyc3RhZGRyIC8gZGJzaXplOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAq
LwogIAliZ2V0dnAoZHAsIGJwKTsKICAJYnAtPmJfYmNvdW50ID0gc2l6ZTsKICAJYnAtPmJf
YnVmc2l6ZSA9IHNpemU7CioqKioqKioqKioqKioqKgoqKiogMTA3OCwxMDg0ICoqKioKLS0t
IDExNzIsMTE4MiAtLS0tCiAgCQkJY3Job2xkKGJwYS0+Yl9yY3JlZCk7CiAgCQlpZiAoYnBh
LT5iX3djcmVkICE9IE5PQ1JFRCkKICAJCQljcmhvbGQoYnBhLT5iX3djcmVkKTsKKyAjaWZu
ZGVmIERCU0laRW5lNTEyCiAgCQlicGEtPmJfYmxrbm8gPSAoZmlyc3RhZGRyICsgY291bnQg
KiBQQUdFX1NJWkUpIC8gREVWX0JTSVpFOworICNlbHNlIC8qIERCU0laRW5lNTEyICovCisg
CQlicGEtPmJfYmxrbm8gPSAoZmlyc3RhZGRyICsgY291bnQgKiBQQUdFX1NJWkUpIC8gZGJz
aXplOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAkJYmdldHZwKGRwLCBicGEpOwog
IAkJYnBhLT5iX2Jjb3VudCA9IHNpemVhOwogIAkJYnBhLT5iX2J1ZnNpemUgPSBjb3VudGEq
UEFHRV9TSVpFOwoqKioqKioqKioqKioqKioKKioqIDEyMTYsMTIyMSAqKioqCi0tLSAxMzE0
LDEzMjIgLS0tLQogIAlpbnQgICAgIGZpbGVhZGRyOwogIAl2bV9vZmZzZXRfdCBic2l6ZTsK
ICAJaW50ICAgICBlcnJvciA9IDA7CisgI2lmZGVmIERCU0laRW5lNTEyCisgCXVfbG9uZwlk
YnNpemUgPSAwOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAogIAlwYWdpbmdfb2Zm
c2V0ID0gbS0+b2JqZWN0LT5wYWdpbmdfb2Zmc2V0OwogIAl2cCA9IHZucC0+dm5wX3ZwOwoq
KioqKioqKioqKioqKioKKioqIDEyMjksMTIzNSAqKioqCi0tLSAxMzMwLDEzNDAgLS0tLQog
IAkJLyoKICAJCSAqIGNhbGN1bGF0ZSBsb2dpY2FsIGJsb2NrIGFuZCBvZmZzZXQKICAJCSAq
LworICNpZm5kZWYgREJTSVpFbmU1MTIKICAJCWZpbGVhZGRyID0gdm5vZGVfcGFnZXJfYWRk
cih2cCwgZm9mZiArIGkgKiBic2l6ZSk7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJ
CWZpbGVhZGRyID0gdm5vZGVfcGFnZXJfYWRkcih2cCwgZm9mZiArIGkgKiBic2l6ZSwgJmRi
c2l6ZSk7CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCQlpZiAoZmlsZWFkZHIgIT0g
LTEpIHsKICAJCQlzID0gc3BsYmlvKCk7CiAgCQkJYnAgPSBpbmNvcmUodnAsIChmb2ZmIC8g
YnNpemUpICsgaSk7CioqKioqKioqKioqKioqKgoqKiogMTI1MywxMjU5ICoqKioKLS0tIDEz
NTgsMTM2OCAtLS0tCiAgCQkJaWYgKGJwLT5iX3djcmVkICE9IE5PQ1JFRCkKICAJCQkJY3Jo
b2xkKGJwLT5iX3djcmVkKTsKICAJCQlicC0+Yl91bi5iX2FkZHIgPSAoY2FkZHJfdCkga3Zh
ICsgaSAqIGJzaXplOworICNpZm5kZWYgREJTSVpFbmU1MTIKICAJCQlicC0+Yl9ibGtubyA9
IGZpbGVhZGRyIC8gREVWX0JTSVpFOworICNlbHNlIC8qIERCU0laRW5lNTEyICovCisgCQkJ
YnAtPmJfYmxrbm8gPSBmaWxlYWRkciAvIGRic2l6ZTsKKyAjZW5kaWYgLyogREJTSVpFbmU1
MTIgKi8KICAJCQliZ2V0dnAoZHAsIGJwKTsKICAJCQkrK2RwLT52X251bW91dHB1dDsKICAJ
CQkvKiBmb3IgTkZTICovCioqKioqKioqKioqKioqKgoqKiogMTMwOSwxMzE0ICoqKioKLS0t
IDE0MTgsMTQyNiAtLS0tCiAgCXZtX29mZnNldF90IHJlcWFkZHI7CiAgCWludCAgICAgYnNp
emU7CiAgCWludCAgICAgczsKKyAjaWZkZWYgREJTSVpFbmU1MTIKKyAJdV9sb25nCWRic2l6
ZSA9IDA7CisgI2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCiAgCWludCAgICAgZXJyb3Ig
PSAwOwogIAoqKioqKioqKioqKioqKioKKioqIDEzNzAsMTM4MyAqKioqCi0tLSAxNDgyLDE1
MDMgLS0tLQogIAkJcmV0dXJuIHJ0dmFsc1swXTsKICAJfQogIAlmb2ZmID0gbVswXS0+b2Zm
c2V0ICsgcGFnaW5nX29mZnNldDsKKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgCXJlcWFkZHIg
PSB2bm9kZV9wYWdlcl9hZGRyKHZwLCBmb2ZmKTsKKyAjZWxzZSAvKiBEQlNJWkVuZTUxMiAq
LworIAlyZXFhZGRyID0gdm5vZGVfcGFnZXJfYWRkcih2cCwgZm9mZiwgJmRic2l6ZSk7Cisg
I2VuZGlmIC8qIERCU0laRW5lNTEyICovCiAgCiAgCS8qCiAgCSAqIFNjYW4gZm9yd2FyZCBh
bmQgc3RvcCBmb3IgdGhlIGZpcnN0IG5vbi1jb250aWd1b3VzIGVudHJ5IG9yIHN0b3AKICAJ
ICogZm9yIGEgcGFnZSBiZWluZyBpbiBidWZmZXIgY2FjaGUuCiAgCSAqLwogIAlmb3IgKGkg
PSAxOyBpIDwgY291bnQ7IGkrKykgeworICNpZm5kZWYgREJTSVpFbmU1MTIKICAJCWlmICh2
bm9kZV9wYWdlcl9hZGRyKHZwLCBtW2ldLT5vZmZzZXQgKyBwYWdpbmdfb2Zmc2V0KQorICNl
bHNlIC8qIERCU0laRW5lNTEyICovCisgCQlpZiAodm5vZGVfcGFnZXJfYWRkcih2cCwgbVtp
XS0+b2Zmc2V0ICsgcGFnaW5nX29mZnNldCwgJmRic2l6ZSkKKyAjZW5kaWYgLyogREJTSVpF
bmU1MTIgKi8KICAJCSAgICAhPSByZXFhZGRyICsgaSAqIFBBR0VfU0laRSkgewogIAkJCWNv
dW50ID0gaTsKICAJCQlicmVhazsKKioqKioqKioqKioqKioqCioqKiAxMzk1LDE0MDEgKioq
KgotLS0gMTUxNSwxNTI1IC0tLS0KICAJICogcm91bmQgdXAgcGh5c2ljYWwgc2l6ZSBmb3Ig
cmVhbCBkZXZpY2VzCiAgCSAqLwogIAlpZiAoZHAtPnZfdHlwZSA9PSBWQkxLIHx8IGRwLT52
X3R5cGUgPT0gVkNIUikKKyAjaWZuZGVmIERCU0laRW5lNTEyCiAgCQlzaXplID0gKHNpemUg
KyBERVZfQlNJWkUgLSAxKSAmIH4oREVWX0JTSVpFIC0gMSk7CisgI2Vsc2UgLyogREJTSVpF
bmU1MTIgKi8KKyAJCXNpemUgPSAoc2l6ZSArIGRic2l6ZSAtIDEpICYgfihkYnNpemUgLSAx
KTsKKyAjZW5kaWYgLyogREJTSVpFbmU1MTIgKi8KICAKICAJYnAgPSBnZXRwYnVmKCk7CiAg
CWt2YSA9ICh2bV9vZmZzZXRfdClicC0+Yl9kYXRhOwoqKioqKioqKioqKioqKioKKioqIDE0
NTMsMTQ1OSAqKioqCi0tLSAxNTc3LDE1ODcgLS0tLQogIAkJY3Job2xkKGJwLT5iX3JjcmVk
KTsKICAJaWYgKGJwLT5iX3djcmVkICE9IE5PQ1JFRCkKICAJCWNyaG9sZChicC0+Yl93Y3Jl
ZCk7CisgI2lmbmRlZiBEQlNJWkVuZTUxMgogIAlicC0+Yl9ibGtubyA9IHJlcWFkZHIgLyBE
RVZfQlNJWkU7CisgI2Vsc2UgLyogREJTSVpFbmU1MTIgKi8KKyAJYnAtPmJfYmxrbm8gPSBy
ZXFhZGRyIC8gZGJzaXplOworICNlbmRpZiAvKiBEQlNJWkVuZTUxMiAqLwogIAliZ2V0dnAo
ZHAsIGJwKTsKICAJKytkcC0+dl9udW1vdXRwdXQ7CiAgCg==

--===_0_Fri_Aug_25_13:23:48_PDT_1995--







Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199508252203.PAA00106>