From nobody@FreeBSD.org  Wed Jun 15 15:23:07 2011
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 9333B106568B
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 15 Jun 2011 15:23:07 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 845CD8FC21
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 15 Jun 2011 15:23:07 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p5FFN7xP075036
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 15 Jun 2011 15:23:07 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id p5FFN73i075030;
	Wed, 15 Jun 2011 15:23:07 GMT
	(envelope-from nobody)
Message-Id: <201106151523.p5FFN73i075030@red.freebsd.org>
Date: Wed, 15 Jun 2011 15:23:07 GMT
From: Robert Millan <rmh@debian.org>
To: freebsd-gnats-submit@FreeBSD.org
Subject: automated kldload for USB class devices
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         157903
>Category:       conf
>Synopsis:       [devd.conf] [patch] automated kldload for USB class devices
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jun 15 15:30:10 UTC 2011
>Closed-Date:    Fri Feb 14 17:15:38 CET 2014
>Last-Modified:  Fri Feb 14 17:15:38 CET 2014
>Originator:     Robert Millan
>Release:        Debian GNU/kFreeBSD "sid"
>Organization:
>Environment:
>Description:
This simple file enables support in devd for automated kldload of the following drivers when an USB class device is inserted:

snd_uaudio
ulpt
umass

Please consider including it with /etc/devd/

>How-To-Repeat:

>Fix:


Patch attached with submission follows:

nomatch 10 {
	match "bus" "uhub[0-9]+";
	match "intclass" "0x01";
	action "kldload snd_uaudio";
};

nomatch 10 {
	match "bus" "uhub[0-9]+";
	match "intclass" "0x07";
	action "kldload ulpt";
};

nomatch 10 {
	match "bus" "uhub[0-9]+";
	match "intclass" "0x08";
	action "kldload umass";
};


>Release-Note:
>Audit-Trail:

From: Robert Millan <rmh@debian.org>
To: FreeBSD-gnats-submit@freebsd.org, freebsd-bugs@freebsd.org, 
	freebsd-hackers@freebsd.org, freebsd-usb@freebsd.org
Cc:  
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Thu, 23 Jun 2011 18:00:17 +0200

 --bcaec5215a4d67837904a6632e36
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: quoted-printable
 
 Here's a new patch.  This version, in addition to automated loading
 for USB class devices:
 
 snd_uaudio, umodem, uhid, ulpt, umass
 
 also provides support for automatically loading the following drivers:
 
 if_aue if_axe if_cdce if_cue if_ipheth if_kue if_mos if_rue if_rum
 if_run if_uath if_udav if_upgt if_ural if_urtw if_zyd u3g uark ubsa
 uchcom ucycom udbp uep ufm uftdi ugensa uhso uipaq umcs umct umodem
 umoscom uplcom urio uslcom uvisor uvscom
 
 The *.conf files that enable this are hand-crafted, but spread across
 to the directories corresponding to each driver.  They should be easy
 to keep in sync when updating the C code in the same directory.
 
 This patch has been developed for Debian GNU/kFreeBSD but I've been
 able to test it builds/installs succesfully on FreeBSD chroot.
 
 2011/6/15  <FreeBSD-gnats-submit@freebsd.org>:
 > Thank you very much for your problem report.
 > It has the internal identification `misc/157903'.
 > The individual assigned to look at your
 > report is: freebsd-bugs.
 >
 > You can access the state of your problem report at any time
 > via this link:
 >
 > http://www.freebsd.org/cgi/query-pr.cgi?pr=3D157903
 >
 >>Category: =C2=A0 =C2=A0 =C2=A0 misc
 >>Responsible: =C2=A0 =C2=A0freebsd-bugs
 >>Synopsis: =C2=A0 =C2=A0 =C2=A0 automated kldload for USB class devices
 >>Arrival-Date: =C2=A0 Wed Jun 15 15:30:10 UTC 2011
 >
 
 
 
 --=20
 Robert Millan
 
 --bcaec5215a4d67837904a6632e36
 Content-Type: text/plain; charset=US-ASCII; name="usb.diff"
 Content-Disposition: attachment; filename="usb.diff"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_gp9w3a4r0
 
 SW5kZXg6IGV0Yy9kZXZkL3VzYl9jbGFzcy5jb25mCj09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGV0Yy9kZXZkL3Vz
 Yl9jbGFzcy5jb25mCShyZXZpc2lvbiAwKQorKysgZXRjL2RldmQvdXNiX2NsYXNzLmNvbmYJKHJl
 dmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1
 aHViWzAtOV0rIjsKKwltYXRjaCAiaW50Y2xhc3MiICIweDAxIjsKKwlhY3Rpb24gImtsZGxvYWQg
 c25kX3VhdWRpbyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTld
 KyI7CisJbWF0Y2ggImludGNsYXNzIiAiMHgwMiI7CisJbWF0Y2ggImludHN1YmNsYXNzIiAiMHgw
 MiI7CisJYWN0aW9uICJrbGRsb2FkIHVtb2RlbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRj
 aCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggImludGNsYXNzIiAiMHgwMyI7CisJYWN0aW9u
 ICJrbGRsb2FkIHVoaWQiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJb
 MC05XSsiOworCW1hdGNoICJpbnRjbGFzcyIgIjB4MDciOworCWFjdGlvbiAia2xkbG9hZCB1bHB0
 IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRj
 aCAiaW50Y2xhc3MiICIweDA4IjsKKwlhY3Rpb24gImtsZGxvYWQgdW1hc3MiOworfTsKKworLyog
 dGhlIFhib3ggMzYwIGdhbWVwYWQgZG9lc24ndCB1c2UgdGhlIEhJRCBjbGFzcyAqLworbm9tYXRj
 aCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJpbnRjbGFzcyIgIjB4
 ZmYiOworCW1hdGNoICJpbnRzdWJjbGFzcyIgIjB4NWQiOworCW1hdGNoICJpbnRwcm90b2NvbCIg
 IjB4MDEiOworCWFjdGlvbiAia2xkbG9hZCB1aGlkIjsKK307CkluZGV4OiBldGMvZGV2ZC9NYWtl
 ZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09Ci0tLSBldGMvZGV2ZC9NYWtlZmlsZQkocmV2aXNpb24gMjIzNDcxKQor
 KysgZXRjL2RldmQvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw1NyBAQAogIyAk
 RnJlZUJTRCQKIAotRklMRVM9CWFzdXMuY29uZiB1YXRoLmNvbmYKK0ZJTEVTPQlhc3VzLmNvbmYg
 dWF0aC5jb25mIHVzYl9jbGFzcy5jb25mIHVzYl9pZHMuY29uZiB1c2JfZGV2LmNvbmYKIAorQ0xF
 QU5GSUxFUys9CXVzYl9pZHMuY29uZiB1c2JfZGV2LmNvbmYKKworIyBVU0IgdmVuZG9yIGlkcyBh
 bmQgcHJvZHVjdCBpZHMuCit1c2JfaWRzLmNvbmY6IGdlbnVzYmRldnMuc2ggLi4vLi4vc3lzL2Rl
 di91c2IvdXNiZGV2cworCXNoIGdlbnVzYmRldnMuc2ggPiAkQAorCitVU0JfREVWX0ZJTEVTPSBc
 CisJLi4vLi4vc3lzL2Rldi91c2Ivc2VyaWFsL3UzZy5jb25mIFwKKwkuLi8uLi9zeXMvZGV2L3Vz
 Yi9zZXJpYWwvdXBsY29tLmNvbmYgXAorCS4uLy4uL3N5cy9kZXYvdXNiL3NlcmlhbC91bWN0LmNv
 bmYgXAorCS4uLy4uL3N5cy9kZXYvdXNiL3NlcmlhbC91ZnRkaS5jb25mIFwKKwkuLi8uLi9zeXMv
 ZGV2L3VzYi9zZXJpYWwvdXZzY29tLmNvbmYgXAorCS4uLy4uL3N5cy9kZXYvdXNiL3NlcmlhbC91
 Y2hjb20uY29uZiBcCisJLi4vLi4vc3lzL2Rldi91c2Ivc2VyaWFsL3VpcGFxLmNvbmYgXAorCS4u
 Ly4uL3N5cy9kZXYvdXNiL3NlcmlhbC91Y3ljb20uY29uZiBcCisJLi4vLi4vc3lzL2Rldi91c2Iv
 c2VyaWFsL3VhcmsuY29uZiBcCisJLi4vLi4vc3lzL2Rldi91c2Ivc2VyaWFsL3VzbGNvbS5jb25m
 IFwKKwkuLi8uLi9zeXMvZGV2L3VzYi9zZXJpYWwvdW1jcy5jb25mIFwKKwkuLi8uLi9zeXMvZGV2
 L3VzYi9zZXJpYWwvdWdlbnNhLmNvbmYgXAorCS4uLy4uL3N5cy9kZXYvdXNiL3NlcmlhbC91bW9z
 Y29tLmNvbmYgXAorCS4uLy4uL3N5cy9kZXYvdXNiL3NlcmlhbC91bW9kZW0uY29uZiBcCisJLi4v
 Li4vc3lzL2Rldi91c2Ivc2VyaWFsL3V2aXNvci5jb25mIFwKKwkuLi8uLi9zeXMvZGV2L3VzYi9z
 ZXJpYWwvdWJzYS5jb25mIFwKKwkuLi8uLi9zeXMvZGV2L3VzYi9pbnB1dC91ZXAuY29uZiBcCisJ
 Li4vLi4vc3lzL2Rldi91c2Ivc3RvcmFnZS91cmlvLmNvbmYgXAorCS4uLy4uL3N5cy9kZXYvdXNi
 L25ldC9pZl9pcGhldGguY29uZiBcCisJLi4vLi4vc3lzL2Rldi91c2IvbmV0L2lmX3J1ZS5jb25m
 IFwKKwkuLi8uLi9zeXMvZGV2L3VzYi9uZXQvaWZfY2RjZS5jb25mIFwKKwkuLi8uLi9zeXMvZGV2
 L3VzYi9uZXQvaWZfdWRhdi5jb25mIFwKKwkuLi8uLi9zeXMvZGV2L3VzYi9uZXQvdWhzby5jb25m
 IFwKKwkuLi8uLi9zeXMvZGV2L3VzYi9uZXQvaWZfYXVlLmNvbmYgXAorCS4uLy4uL3N5cy9kZXYv
 dXNiL25ldC9pZl9jdWUuY29uZiBcCisJLi4vLi4vc3lzL2Rldi91c2IvbmV0L2lmX2F4ZS5jb25m
 IFwKKwkuLi8uLi9zeXMvZGV2L3VzYi9uZXQvaWZfa3VlLmNvbmYgXAorCS4uLy4uL3N5cy9kZXYv
 dXNiL25ldC9pZl9tb3MuY29uZiBcCisJLi4vLi4vc3lzL2Rldi91c2IvbWlzYy91Zm0uY29uZiBc
 CisJLi4vLi4vc3lzL2Rldi91c2IvbWlzYy91ZGJwLmNvbmYgXAorCS4uLy4uL3N5cy9kZXYvdXNi
 L3dsYW4vaWZfdXBndC5jb25mIFwKKwkuLi8uLi9zeXMvZGV2L3VzYi93bGFuL2lmX3VhdGguY29u
 ZiBcCisJLi4vLi4vc3lzL2Rldi91c2Ivd2xhbi9pZl91cnR3LmNvbmYgXAorCS4uLy4uL3N5cy9k
 ZXYvdXNiL3dsYW4vaWZfdXJhbC5jb25mIFwKKwkuLi8uLi9zeXMvZGV2L3VzYi93bGFuL2lmX3J1
 bS5jb25mIFwKKwkuLi8uLi9zeXMvZGV2L3VzYi93bGFuL2lmX3J1bi5jb25mIFwKKwkuLi8uLi9z
 eXMvZGV2L3VzYi93bGFuL2lmX3p5ZC5jb25mCisKKyMgVVNCIGRldmljZXMgdGhhdCBhcmVuJ3Qg
 aGFuZGxlZCBieSB1c2JfY2xhc3MuY29uZgorIyAoaWRlbnRpZmllZCBieSB2ZW5kb3IgaWQgYW5k
 IHByb2R1Y3QgaWQpLgordXNiX2Rldi5jb25mOiAke1VTQl9ERVZfRklMRVN9CisJY2F0ICR7VVNC
 X0RFVl9GSUxFU30gPiAkQAorCiBOT19PQko9CiBGSUxFU0RJUj0JL2V0Yy9kZXZkCiBGSUxFU01P
 REU9CTY0NApJbmRleDogZXRjL2RldmQvZ2VudXNiZGV2cy5zaAo9PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBldGMv
 ZGV2ZC9nZW51c2JkZXZzLnNoCShyZXZpc2lvbiAwKQorKysgZXRjL2RldmQvZ2VudXNiZGV2cy5z
 aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorIyEvYmluL3NoIC1lCisKK2VjaG8gIm9w
 dGlvbnMgeyIKKworZ3JlcCBedmVuZG9yIC4uLy4uL3N5cy9kZXYvdXNiL3VzYmRldnMgfCB3aGls
 ZSByZWFkIGR1bW15IHZlbmRvcl9uYW1lIHZlbmRvcl9pZCB2ZW5kb3JfZGVzYyA7IGRvCisgIHBy
 aW50ZiAiXHQjICR7dmVuZG9yX2Rlc2N9XG4iCisgIHByaW50ZiAiXHRzZXQgVVNCX1ZFTkRPUl8k
 e3ZlbmRvcl9uYW1lfSBcIiR7dmVuZG9yX2lkfVwiO1xuXG4iCitkb25lCisKK2dyZXAgXnByb2R1
 Y3QgLi4vLi4vc3lzL2Rldi91c2IvdXNiZGV2cyB8IHdoaWxlIHJlYWQgZHVtbXkgdmVuZG9yX25h
 bWUgcHJvZHVjdF9uYW1lIHByb2R1Y3RfaWQgcHJvZHVjdF9kZXNjIDsgZG8KKyAgcHJpbnRmICJc
 dCMgJHtwcm9kdWN0X2Rlc2N9XG4iCisgIHByaW50ZiAiXHRzZXQgVVNCX1BST0RVQ1RfJHt2ZW5k
 b3JfbmFtZX1fJHtwcm9kdWN0X25hbWV9IFwiJHtwcm9kdWN0X2lkfVwiO1xuXG4iCitkb25lCisK
 K2VjaG8gIn07IgorCitleGl0IDAKClByb3BlcnR5IGNoYW5nZXMgb246IGV0Yy9kZXZkL2dlbnVz
 YmRldnMuc2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
 X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDog
 c3lzL2Rldi91c2Ivc2VyaWFsL3UzZy5jb25mCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvdXNiL3Nl
 cmlhbC91M2cuY29uZgkocmV2aXNpb24gMCkKKysrIHN5cy9kZXYvdXNiL3NlcmlhbC91M2cuY29u
 ZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTYgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJi
 dXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQUNFUlAiOwor
 CW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0FDRVJQX0gxMCI7CisJYWN0aW9uICJrbGRs
 b2FkIHUzZyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0FJUlBMVVMiOworCW1hdGNoICJwcm9kdWN0
 IiAiJFVTQl9QUk9EVUNUX0FJUlBMVVNfTUNENjUwIjsKKwlhY3Rpb24gImtsZGxvYWQgdTNnIjsK
 K307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAi
 dmVuZG9yIiAiJFVTQl9WRU5ET1JfQUlSUFJJTUUiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9Q
 Uk9EVUNUX0FJUlBSSU1FX1BDNTIyMCI7CisJYWN0aW9uICJrbGRsb2FkIHUzZyI7Cit9OworCitu
 b21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIg
 IiRVU0JfVkVORE9SX0FMSU5LIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfQUxJ
 TktfM0d8JFVTQl9QUk9EVUNUX0FMSU5LXzNHVXwkVVNCX1BST0RVQ1RfQUxJTktfRFdNNjUyVTUp
 IjsKKwlhY3Rpb24gImtsZGxvYWQgdTNnIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJi
 dXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQU1PSSI7CisJ
 bWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0FNT0lfSDAxfCRVU0JfUFJPRFVDVF9BTU9J
 X0gwMUF8JFVTQl9QUk9EVUNUX0FNT0lfSDAyKSI7CisJYWN0aW9uICJrbGRsb2FkIHUzZyI7Cit9
 OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZl
 bmRvciIgIiRVU0JfVkVORE9SX0FOWURBVEEiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJP
 RFVDVF9BTllEQVRBX0FEVV81MDBBfCRVU0JfUFJPRFVDVF9BTllEQVRBX0FEVV82MjBVV3wkVVNC
 X1BST0RVQ1RfQU5ZREFUQV9BRFVfRTEwMFgpIjsKKwlhY3Rpb24gImtsZGxvYWQgdTNnIjsKK307
 CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVu
 ZG9yIiAiJFVTQl9WRU5ET1JfQVhFU1NURUwiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9E
 VUNUX0FYRVNTVEVMX0RBVEFNT0RFTSI7CisJYWN0aW9uICJrbGRsb2FkIHUzZyI7Cit9OworCitu
 b21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIg
 IiRVU0JfVkVORE9SX0NNT1RFQ0giOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0NN
 T1RFQ0hfQ0RNQV9NT0RFTTEiOworCWFjdGlvbiAia2xkbG9hZCB1M2ciOworfTsKKworbm9tYXRj
 aCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNC
 X1ZFTkRPUl9ERUxMIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfREVMTF9VNTUw
 MHwkVVNCX1BST0RVQ1RfREVMTF9VNTUwNXwkVVNCX1BST0RVQ1RfREVMTF9VNTUxMHwkVVNCX1BS
 T0RVQ1RfREVMTF9VNTUyMHwkVVNCX1BST0RVQ1RfREVMTF9VNTUyMF8yfCRVU0JfUFJPRFVDVF9E
 RUxMX1U1NTIwXzN8JFVTQl9QUk9EVUNUX0RFTExfVTU3MDB8JFVTQl9QUk9EVUNUX0RFTExfVTU3
 MDBfMnwkVVNCX1BST0RVQ1RfREVMTF9VNTcwMF8zfCRVU0JfUFJPRFVDVF9ERUxMX1U1NzAwXzR8
 JFVTQl9QUk9EVUNUX0RFTExfVTU3MjB8JFVTQl9QUk9EVUNUX0RFTExfVTU3MjBfMnwkVVNCX1BS
 T0RVQ1RfREVMTF9VNTczMHwkVVNCX1BST0RVQ1RfREVMTF9VNTczMF8yfCRVU0JfUFJPRFVDVF9E
 RUxMX1U1NzMwXzN8JFVTQl9QUk9EVUNUX0RFTExfVTc0MCkiOworCWFjdGlvbiAia2xkbG9hZCB1
 M2ciOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ETElOSzMiOworCW1hdGNoICJwcm9kdWN0IiAiJFVT
 Ql9QUk9EVUNUX0RMSU5LM19EV002NTIiOworCWFjdGlvbiAia2xkbG9hZCB1M2ciOworfTsKKwor
 bm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3Ii
 ICIkVVNCX1ZFTkRPUl9IUCI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0hQX0VW
 MjIwMHwkVVNCX1BST0RVQ1RfSFBfSFMyMzAwKSI7CisJYWN0aW9uICJrbGRsb2FkIHUzZyI7Cit9
 OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZl
 bmRvciIgIiRVU0JfVkVORE9SX0tZT0NFUkEyIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BS
 T0RVQ1RfS1lPQ0VSQTJfQ0RNQV9NU01fS3wkVVNCX1BST0RVQ1RfS1lPQ0VSQTJfS1BDNjgwKSI7
 CisJYWN0aW9uICJrbGRsb2FkIHUzZyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVz
 IiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0xPTkdDSEVFUiI7
 CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfTE9OR0NIRUVSX1cxNCI7CisJYWN0aW9u
 ICJrbGRsb2FkIHUzZyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX01FUkxJTiI7CisJbWF0Y2ggInBy
 b2R1Y3QiICIkVVNCX1BST0RVQ1RfTUVSTElOX1Y2MjAiOworCWFjdGlvbiAia2xkbG9hZCB1M2ci
 OworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNo
 ICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ORU9URUwiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9Q
 Uk9EVUNUX05FT1RFTF9QUklNRSI7CisJYWN0aW9uICJrbGRsb2FkIHUzZyI7Cit9OworCitub21h
 dGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRV
 U0JfVkVORE9SX05PVkFURUwiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9OT1ZB
 VEVMX0U3MjV8JFVTQl9QUk9EVUNUX05PVkFURUxfRVM2MjB8JFVTQl9QUk9EVUNUX05PVkFURUxf
 RVM2MjBfMnwkVVNCX1BST0RVQ1RfTk9WQVRFTF9FVTczMHwkVVNCX1BST0RVQ1RfTk9WQVRFTF9F
 VTc0MHwkVVNCX1BST0RVQ1RfTk9WQVRFTF9FVTg3MER8JFVTQl9QUk9EVUNUX05PVkFURUxfTUM3
 NjB8JFVTQl9QUk9EVUNUX05PVkFURUxfTUM1NDd8JFVTQl9QUk9EVUNUX05PVkFURUxfTUM5NTBE
 fCRVU0JfUFJPRFVDVF9OT1ZBVEVMX1U3MjB8JFVTQl9QUk9EVUNUX05PVkFURUxfVTcyN3wkVVNC
 X1BST0RVQ1RfTk9WQVRFTF9VNzI3XzJ8JFVTQl9QUk9EVUNUX05PVkFURUxfVTc0MHwkVVNCX1BS
 T0RVQ1RfTk9WQVRFTF9VNzQwXzJ8JFVTQl9QUk9EVUNUX05PVkFURUxfVTg3MHwkVVNCX1BST0RV
 Q1RfTk9WQVRFTF9WNjIwfCRVU0JfUFJPRFVDVF9OT1ZBVEVMX1Y2NDB8JFVTQl9QUk9EVUNUX05P
 VkFURUxfVjcyMHwkVVNCX1BST0RVQ1RfTk9WQVRFTF9WNzQwfCRVU0JfUFJPRFVDVF9OT1ZBVEVM
 X1g5NTBEfCRVU0JfUFJPRFVDVF9OT1ZBVEVMX1hVODcwKSI7CisJYWN0aW9uICJrbGRsb2FkIHUz
 ZyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0
 Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX09QVElPTiI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVT
 Ql9QUk9EVUNUX09QVElPTl9FNjUwMHwkVVNCX1BST0RVQ1RfT1BUSU9OX0U2NTAxfCRVU0JfUFJP
 RFVDVF9PUFRJT05fRTY2MDF8JFVTQl9QUk9EVUNUX09QVElPTl9FNjcyMXwkVVNCX1BST0RVQ1Rf
 T1BUSU9OX0U2NzQxfCRVU0JfUFJPRFVDVF9PUFRJT05fRTY3NjF8JFVTQl9QUk9EVUNUX09QVElP
 Tl9FNjgwMHwkVVNCX1BST0RVQ1RfT1BUSU9OX0U3MDIxfCRVU0JfUFJPRFVDVF9PUFRJT05fRTcw
 NDF8JFVTQl9QUk9EVUNUX09QVElPTl9FNzA2MXwkVVNCX1BST0RVQ1RfT1BUSU9OX0U3MTAwfCRV
 U0JfUFJPRFVDVF9PUFRJT05fR0U0MFh8JFVTQl9QUk9EVUNUX09QVElPTl9HVDNHfCRVU0JfUFJP
 RFVDVF9PUFRJT05fR1QzR1BMVVN8JFVTQl9QUk9EVUNUX09QVElPTl9HVDNHUVVBRHwkVVNCX1BS
 T0RVQ1RfT1BUSU9OX0dUM0dfMXwkVVNCX1BST0RVQ1RfT1BUSU9OX0dUM0dfMnwkVVNCX1BST0RV
 Q1RfT1BUSU9OX0dUM0dfM3wkVVNCX1BST0RVQ1RfT1BUSU9OX0dUM0dfNHwkVVNCX1BST0RVQ1Rf
 T1BUSU9OX0dUM0dfNXwkVVNCX1BST0RVQ1RfT1BUSU9OX0dUM0dfNnwkVVNCX1BST0RVQ1RfT1BU
 SU9OX0dUSFNEUEF8JFVTQl9QUk9EVUNUX09QVElPTl9HVE0zODB8JFVTQl9QUk9EVUNUX09QVElP
 Tl9HVE1BWDM2fCRVU0JfUFJPRFVDVF9PUFRJT05fR1RNQVgzODBIU1VQQUV8JFVTQl9QUk9EVUNU
 X09QVElPTl9HVE1BWEhTVVBBfCRVU0JfUFJPRFVDVF9PUFRJT05fR1RNQVhIU1VQQUV8JFVTQl9Q
 Uk9EVUNUX09QVElPTl9WT0RBRk9ORU1DM0cpIjsKKwlhY3Rpb24gImtsZGxvYWQgdTNnIjsKK307
 CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVu
 ZG9yIiAiJFVTQl9WRU5ET1JfUUlTREEiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVD
 VF9RSVNEQV9IMjBfMXwkVVNCX1BST0RVQ1RfUUlTREFfSDIwXzJ8JFVTQl9QUk9EVUNUX1FJU0RB
 X0gyMV8xfCRVU0JfUFJPRFVDVF9RSVNEQV9IMjFfMikiOworCWFjdGlvbiAia2xkbG9hZCB1M2ci
 OworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNo
 ICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9RVUFMQ09NTTIiOworCW1hdGNoICJwcm9kdWN0IiAiKCRV
 U0JfUFJPRFVDVF9RVUFMQ09NTTJfQUM4NzAwfCRVU0JfUFJPRFVDVF9RVUFMQ09NTTJfTUYzMzAp
 IjsKKwlhY3Rpb24gImtsZGxvYWQgdTNnIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJi
 dXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfUVVBTENPTU1J
 TkMiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19BQzI3MjZ8
 JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0FDODcwMHwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNf
 QUM4NzEwfCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDAwMnwkVVNCX1BST0RVQ1RfUVVBTENP
 TU1JTkNfRTAwMDN8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDA0fCRVU0JfUFJPRFVDVF9R
 VUFMQ09NTUlOQ19FMDAwNXwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwMDZ8JFVTQl9QUk9E
 VUNUX1FVQUxDT01NSU5DX0UwMDA3fCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDAwOHwkVVNC
 X1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwMDl8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDBB
 fCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDAwQnwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNf
 RTAwMEN8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDBEfCRVU0JfUFJPRFVDVF9RVUFMQ09N
 TUlOQ19FMDAwRXwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwMEZ8JFVTQl9QUk9EVUNUX1FV
 QUxDT01NSU5DX0UwMDEwfCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDAxMXwkVVNCX1BST0RV
 Q1RfUVVBTENPTU1JTkNfRTAwMTJ8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDEzfCRVU0Jf
 UFJPRFVDVF9RVUFMQ09NTUlOQ19FMDAxNHwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwMTd8
 JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDE4fCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19F
 MDAxOXwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwMjB8JFVTQl9QUk9EVUNUX1FVQUxDT01N
 SU5DX0UwMDIxfCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDAyMnwkVVNCX1BST0RVQ1RfUVVB
 TENPTU1JTkNfRTAwMjN8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDI0fCRVU0JfUFJPRFVD
 VF9RVUFMQ09NTUlOQ19FMDAyNXwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwMjZ8JFVTQl9Q
 Uk9EVUNUX1FVQUxDT01NSU5DX0UwMDI3fCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDAyOHwk
 VVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwMjl8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0Uw
 MDMwfCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDAzMnwkVVNCX1BST0RVQ1RfUVVBTENPTU1J
 TkNfRTAwMzN8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDM3fCRVU0JfUFJPRFVDVF9RVUFM
 Q09NTUlOQ19FMDAzOXwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwNDJ8JFVTQl9QUk9EVUNU
 X1FVQUxDT01NSU5DX0UwMDQzfCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDA0OHwkVVNCX1BS
 T0RVQ1RfUVVBTENPTU1JTkNfRTAwNDl8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDUxfCRV
 U0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDA1MnwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAw
 NTR8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDU1fCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlO
 Q19FMDA1N3wkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwNTh8JFVTQl9QUk9EVUNUX1FVQUxD
 T01NSU5DX0UwMDU5fCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDA2MHwkVVNCX1BST0RVQ1Rf
 UVVBTENPTU1JTkNfRTAwNjF8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDYyfCRVU0JfUFJP
 RFVDVF9RVUFMQ09NTUlOQ19FMDA2M3wkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwNjR8JFVT
 Ql9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDY2fCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDA2
 OXwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTAwNzB8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5D
 X0UwMDczfCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19FMDA3NnwkVVNCX1BST0RVQ1RfUVVBTENP
 TU1JTkNfRTAwNzh8JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX0UwMDgyfCRVU0JfUFJPRFVDVF9R
 VUFMQ09NTUlOQ19FMDA4NnwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfU1VSRlNUSUNLfCRVU0Jf
 UFJPRFVDVF9RVUFMQ09NTUlOQ19FMjAwMnwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfRTIwMDN8
 JFVTQl9QUk9EVUNUX1FVQUxDT01NSU5DX01GNjI2fCRVU0JfUFJPRFVDVF9RVUFMQ09NTUlOQ19N
 RjYyOHwkVVNCX1BST0RVQ1RfUVVBTENPTU1JTkNfTUY2MzNSKSI7CisJYWN0aW9uICJrbGRsb2Fk
 IHUzZyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJ
 bWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1FVQU5UQSI7CisJbWF0Y2ggInByb2R1Y3QiICIo
 JFVTQl9QUk9EVUNUX1FVQU5UQV9HS0V8JFVTQl9QUk9EVUNUX1FVQU5UQV9HTEV8JFVTQl9QUk9E
 VUNUX1FVQU5UQV9HTFh8JFVTQl9QUk9EVUNUX1FVQU5UQV9RMTAxfCRVU0JfUFJPRFVDVF9RVUFO
 VEFfUTExMSkiOworCWFjdGlvbiAia2xkbG9hZCB1M2ciOworfTsKKworbm9tYXRjaCAxMCB7CisJ
 bWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9T
 SUVSUkEiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9TSUVSUkFfQUM0MDJ8JFVT
 Ql9QUk9EVUNUX1NJRVJSQV9BQzU5NVV8JFVTQl9QUk9EVUNUX1NJRVJSQV9BQzU5N0V8JFVTQl9Q
 Uk9EVUNUX1NJRVJSQV9BQzg3NUV8JFVTQl9QUk9EVUNUX1NJRVJSQV9BQzg3NVV8JFVTQl9QUk9E
 VUNUX1NJRVJSQV9BQzg3NVVfMnwkVVNCX1BST0RVQ1RfU0lFUlJBX0FDODgwfCRVU0JfUFJPRFVD
 VF9TSUVSUkFfQUM4ODBFfCRVU0JfUFJPRFVDVF9TSUVSUkFfQUM4ODBVfCRVU0JfUFJPRFVDVF9T
 SUVSUkFfQUM4ODF8JFVTQl9QUk9EVUNUX1NJRVJSQV9BQzg4MUV8JFVTQl9QUk9EVUNUX1NJRVJS
 QV9BQzg4MVV8JFVTQl9QUk9EVUNUX1NJRVJSQV9BQzg4NUV8JFVTQl9QUk9EVUNUX1NJRVJSQV9B
 Qzg4NUVfMnwkVVNCX1BST0RVQ1RfU0lFUlJBX0FDODg1VXwkVVNCX1BST0RVQ1RfU0lFUlJBX0FJ
 UkNBUkQ1ODB8JFVTQl9QUk9EVUNUX1NJRVJSQV9BSVJDQVJENTk1fCRVU0JfUFJPRFVDVF9TSUVS
 UkFfQUlSQ0FSRDg3NXwkVVNCX1BST0RVQ1RfU0lFUlJBX0MyMnwkVVNCX1BST0RVQ1RfU0lFUlJB
 X0M1OTd8JFVTQl9QUk9EVUNUX1NJRVJSQV9DODg4fCRVU0JfUFJPRFVDVF9TSUVSUkFfRTAwMjl8
 JFVTQl9QUk9EVUNUX1NJRVJSQV9FNjg5MnwkVVNCX1BST0RVQ1RfU0lFUlJBX0U2ODkzfCRVU0Jf
 UFJPRFVDVF9TSUVSUkFfRU01NjI1fCRVU0JfUFJPRFVDVF9TSUVSUkFfRU01NzI1fCRVU0JfUFJP
 RFVDVF9TSUVSUkFfTUM1NzIwfCRVU0JfUFJPRFVDVF9TSUVSUkFfTUM1NzIwXzJ8JFVTQl9QUk9E
 VUNUX1NJRVJSQV9NQzU3MjV8JFVTQl9QUk9EVUNUX1NJRVJSQV9NQzU3Mjd8JFVTQl9QUk9EVUNU
 X1NJRVJSQV9NQzU3MjdfMnwkVVNCX1BST0RVQ1RfU0lFUlJBX01DNTcyOHwkVVNCX1BST0RVQ1Rf
 U0lFUlJBX01DODcwMHwkVVNCX1BST0RVQ1RfU0lFUlJBX01DODc1NXwkVVNCX1BST0RVQ1RfU0lF
 UlJBX01DODc1NV8yfCRVU0JfUFJPRFVDVF9TSUVSUkFfTUM4NzU1XzN8JFVTQl9QUk9EVUNUX1NJ
 RVJSQV9NQzg3NTVfNHwkVVNCX1BST0RVQ1RfU0lFUlJBX01DODc2NXwkVVNCX1BST0RVQ1RfU0lF
 UlJBX01DODc2NV8yfCRVU0JfUFJPRFVDVF9TSUVSUkFfTUM4NzY1XzN8JFVTQl9QUk9EVUNUX1NJ
 RVJSQV9NQzg3NzV8JFVTQl9QUk9EVUNUX1NJRVJSQV9NQzg3NzVfMnwkVVNCX1BST0RVQ1RfU0lF
 UlJBX01DODc4MHwkVVNCX1BST0RVQ1RfU0lFUlJBX01DODc4MF8yfCRVU0JfUFJPRFVDVF9TSUVS
 UkFfTUM4NzgwXzN8JFVTQl9QUk9EVUNUX1NJRVJSQV9NQzg3ODF8JFVTQl9QUk9EVUNUX1NJRVJS
 QV9NQzg3ODFfMnwkVVNCX1BST0RVQ1RfU0lFUlJBX01DODc4MV8zfCRVU0JfUFJPRFVDVF9TSUVS
 UkFfTUM4Nzg1fCRVU0JfUFJPRFVDVF9TSUVSUkFfTUM4Nzg1XzJ8JFVTQl9QUk9EVUNUX1NJRVJS
 QV9NQzg3OTB8JFVTQl9QUk9EVUNUX1NJRVJSQV9NQzg3OTF8JFVTQl9QUk9EVUNUX1NJRVJSQV9N
 Qzg3OTJ8JFVTQl9QUk9EVUNUX1NJRVJSQV9NSU5JNTcyNXwkVVNCX1BST0RVQ1RfU0lFUlJBX1Qx
 MXwkVVNCX1BST0RVQ1RfU0lFUlJBX1Q1OTgpIjsKKwlhY3Rpb24gImtsZGxvYWQgdTNnIjsKK307
 CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVu
 ZG9yIiAiJFVTQl9WRU5ET1JfU1RFTEVSQSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RV
 Q1RfU1RFTEVSQV9DMTA1fCRVU0JfUFJPRFVDVF9TVEVMRVJBX0UxMDAzfCRVU0JfUFJPRFVDVF9T
 VEVMRVJBX0UxMDA0fCRVU0JfUFJPRFVDVF9TVEVMRVJBX0UxMDA1fCRVU0JfUFJPRFVDVF9TVEVM
 RVJBX0UxMDA2fCRVU0JfUFJPRFVDVF9TVEVMRVJBX0UxMDA3fCRVU0JfUFJPRFVDVF9TVEVMRVJB
 X0UxMDA4fCRVU0JfUFJPRFVDVF9TVEVMRVJBX0UxMDA5fCRVU0JfUFJPRFVDVF9TVEVMRVJBX0Ux
 MDBBfCRVU0JfUFJPRFVDVF9TVEVMRVJBX0UxMDBCfCRVU0JfUFJPRFVDVF9TVEVMRVJBX0UxMDBD
 fCRVU0JfUFJPRFVDVF9TVEVMRVJBX0UxMDBEfCRVU0JfUFJPRFVDVF9TVEVMRVJBX0UxMDBFfCRV
 U0JfUFJPRFVDVF9TVEVMRVJBX0UxMDBGfCRVU0JfUFJPRFVDVF9TVEVMRVJBX0UxMDEwfCRVU0Jf
 UFJPRFVDVF9TVEVMRVJBX0UxMDExfCRVU0JfUFJPRFVDVF9TVEVMRVJBX0UxMDEyKSI7CisJYWN0
 aW9uICJrbGRsb2FkIHUzZyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1
 YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1RDVE1PQklMRSI7CisJbWF0
 Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfVENUTU9CSUxFX1gwNjBTIjsKKwlhY3Rpb24gImts
 ZGxvYWQgdTNnIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0r
 IjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfVEVMSVQiOworCW1hdGNoICJwcm9kdWN0
 IiAiKCRVU0JfUFJPRFVDVF9URUxJVF9VQzg2NEV8JFVTQl9QUk9EVUNUX1RFTElUX1VDODY0Ryki
 OworCWFjdGlvbiAia2xkbG9hZCB1M2ciOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9UTEFZVEVDSCI7
 CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfVExBWVRFQ0hfVEVVODAwIjsKKwlhY3Rp
 b24gImtsZGxvYWQgdTNnIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHVi
 WzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfVE9TSElCQSI7CisJbWF0Y2gg
 InByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1RPU0hJQkFfRzQ1MHwkVVNCX1BST0RVQ1RfVE9TSElC
 QV9IU0RQQSkiOworCWFjdGlvbiAia2xkbG9hZCB1M2ciOworfTsKKworbm9tYXRjaCAxMCB7CisJ
 bWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9Z
 SVNPIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9ZSVNPX0M4OTMiOworCWFjdGlv
 biAia2xkbG9hZCB1M2ciOworfTsKKwpJbmRleDogc3lzL2Rldi91c2Ivc2VyaWFsL3VwbGNvbS5j
 b25mCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvdXNiL3NlcmlhbC91cGxjb20uY29uZgkocmV2aXNp
 b24gMCkKKysrIHN5cy9kZXYvdXNiL3NlcmlhbC91cGxjb20uY29uZgkocmV2aXNpb24gMCkKQEAg
 LTAsMCArMSwyODAgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsK
 KwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQUNFUlAiOworCW1hdGNoICJwcm9kdWN0IiAi
 JFVTQl9QUk9EVUNUX0FDRVJQX1M4MSI7CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9Owor
 Citub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRv
 ciIgIiRVU0JfVkVORE9SX0FETElOSyI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1Rf
 QURMSU5LX05ENjUzMCI7CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9OworCitub21hdGNo
 IDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0Jf
 VkVORE9SX0FMQ0FURUwiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0FMQ0FURUxf
 T1Q1MzUiOworCWFjdGlvbiAia2xkbG9hZCB1cGxjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJ
 bWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9B
 TENPUiI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQUxDT1JfQVU5NzIwIjsKKwlh
 Y3Rpb24gImtsZGxvYWQgdXBsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMi
 ICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQU5DSE9SIjsKKwlt
 YXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9BTkNIT1JfU0VSSUFMIjsKKwlhY3Rpb24gImts
 ZGxvYWQgdXBsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAt
 OV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQVRFTiI7CisJbWF0Y2ggInByb2R1
 Y3QiICIkVVNCX1BST0RVQ1RfQVRFTl9VQzIzMkEiOworCWFjdGlvbiAia2xkbG9hZCB1cGxjb20i
 OworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNo
 ICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9CRUxLSU4iOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9Q
 Uk9EVUNUX0JFTEtJTl9GNVUyNTciOworCWFjdGlvbiAia2xkbG9hZCB1cGxjb20iOworfTsKKwor
 bm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3Ii
 ICIkVVNCX1ZFTkRPUl9DT1JFR0EiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0NP
 UkVHQV9DR1VTQlJTMjMyUiI7CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9OworCitub21h
 dGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRV
 U0JfVkVORE9SX0VQU09OIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfRVBTT05f
 Q1JFU1NJX0VEWXwkVVNCX1BST0RVQ1RfRVBTT05fTjJJVElPTjMpIjsKKwlhY3Rpb24gImtsZGxv
 YWQgdXBsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0r
 IjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfRUxFQ09NIjsKKwltYXRjaCAicHJvZHVj
 dCIgIigkVVNCX1BST0RVQ1RfRUxFQ09NX1VDU0dUfCRVU0JfUFJPRFVDVF9FTEVDT01fVUNTR1Qw
 KSI7CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRj
 aCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0hBTCI7
 CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfSEFMX0lNUjAwMSI7CisJYWN0aW9uICJr
 bGRsb2FkIHVwbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0hQIjsKKwltYXRjaCAicHJvZHVj
 dCIgIiRVU0JfUFJPRFVDVF9IUF9MRDIyMCI7CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9
 OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZl
 bmRvciIgIiRVU0JfVkVORE9SX0lPREFUQSI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9E
 VUNUX0lPREFUQV9VU0JSU0FRfCRVU0JfUFJPRFVDVF9JT0RBVEFfVVNCUlNBUTUpIjsKKwlhY3Rp
 b24gImtsZGxvYWQgdXBsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1
 aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfSVRFR05PIjsKKwltYXRj
 aCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfSVRFR05PX1dNMTA4MEF8JFVTQl9QUk9EVUNUX0lU
 RUdOT19XTTIwODBBKSI7CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9OworCitub21hdGNo
 IDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0Jf
 VkVORE9SX0xFQURURUsiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0xFQURURUtf
 OTUzMSI7CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwlt
 YXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX01J
 Q1JPU09GVCI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfTUlDUk9TT0ZUXzcwMFdY
 IjsKKwlhY3Rpb24gImtsZGxvYWQgdXBsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNo
 ICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfTU9CSUxF
 QUNUSU9OIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9NT0JJTEVBQ1RJT05fTUE2
 MjAiOworCWFjdGlvbiAia2xkbG9hZCB1cGxjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0
 Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ORVRJ
 TkRFWCI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfTkVUSU5ERVhfV1MwMDJJTiI7
 CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAi
 YnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX05PS0lBMiI7
 CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfTk9LSUEyX0NBNDIiOworCWFjdGlvbiAi
 a2xkbG9hZCB1cGxjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJb
 MC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9PVEkiOworCW1hdGNoICJwcm9k
 dWN0IiAiJFVTQl9QUk9EVUNUX09USV9ES1U1IjsKKwlhY3Rpb24gImtsZGxvYWQgdXBsY29tIjsK
 K307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAi
 dmVuZG9yIiAiJFVTQl9WRU5ET1JfUEFOQVNPTklDIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0Jf
 UFJPRFVDVF9QQU5BU09OSUNfVFlUUDUwUDZTIjsKKwlhY3Rpb24gImtsZGxvYWQgdXBsY29tIjsK
 K307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAi
 dmVuZG9yIiAiJFVTQl9WRU5ET1JfUExYIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVD
 VF9QTFhfQ0E0MiI7CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9OworCitub21hdGNoIDEw
 IHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVO
 RE9SX1BST0xJRklDIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfUFJPTElGSUNf
 QUxMVFJPTklYX0dQUlN8JFVTQl9QUk9EVUNUX1BST0xJRklDX0FMRElHQV9BTDExVXwkVVNCX1BS
 T0RVQ1RfUFJPTElGSUNfRENVMTF8JFVTQl9QUk9EVUNUX1BST0xJRklDX0hDUjMzMXwkVVNCX1BS
 T0RVQ1RfUFJPTElGSUNfTUlDUk9NQVhfNjEwVXwkVVNCX1BST0RVQ1RfUFJPTElGSUNfUEhBUk9T
 fCRVU0JfUFJPRFVDVF9QUk9MSUZJQ19QTDIzMDN8JFVTQl9QUk9EVUNUX1BST0xJRklDX1JTQVEy
 fCRVU0JfUFJPRFVDVF9QUk9MSUZJQ19SU0FRM3wkVVNCX1BST0RVQ1RfUFJPTElGSUNfVUlDX01T
 UjIwNikiOworCWFjdGlvbiAia2xkbG9hZCB1cGxjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJ
 bWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9Q
 Uk9MSUZJQzIiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1BST0xJRklDMl9QTDIz
 MDMiOworCWFjdGlvbiAia2xkbG9hZCB1cGxjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0
 Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9SQURJ
 T1NIQUNLIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9SQURJT1NIQUNLX1VTQkNB
 QkxFIjsKKwlhY3Rpb24gImtsZGxvYWQgdXBsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1h
 dGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfUkFU
 T0MiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1JBVE9DX1JFWFVTQjYwIjsKKwlh
 Y3Rpb24gImtsZGxvYWQgdXBsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMi
 ICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0FHRU0iOworCW1h
 dGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NBR0VNX1VTQlNFUklBTCI7CisJYWN0aW9uICJr
 bGRsb2FkIHVwbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NBTVNVTkciOworCW1hdGNoICJw
 cm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NBTVNVTkdfSTMzMCI7CisJYWN0aW9uICJrbGRsb2FkIHVw
 bGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJ
 bWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NBTldBIjsKKwltYXRjaCAicHJvZHVjdCIgIiRV
 U0JfUFJPRFVDVF9TQU5XQV9LQl9VU0IyIjsKKwlhY3Rpb24gImtsZGxvYWQgdXBsY29tIjsKK307
 CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVu
 ZG9yIiAiJFVTQl9WRU5ET1JfU0lFTUVOUzMiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJP
 RFVDVF9TSUVNRU5TM19FRjgxfCRVU0JfUFJPRFVDVF9TSUVNRU5TM19TWDF8JFVTQl9QUk9EVUNU
 X1NJRU1FTlMzX1g2NXwkVVNCX1BST0RVQ1RfU0lFTUVOUzNfWDc1KSI7CisJYWN0aW9uICJrbGRs
 b2FkIHVwbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTld
 KyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NJVEVDT00iOworCW1hdGNoICJwcm9k
 dWN0IiAiJFVTQl9QUk9EVUNUX1NJVEVDT01fU0VSSUFMIjsKKwlhY3Rpb24gImtsZGxvYWQgdXBs
 Y29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwlt
 YXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU01BUlQiOworCW1hdGNoICJwcm9kdWN0IiAiJFVT
 Ql9QUk9EVUNUX1NNQVJUX1BMMjMwMyI7CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9Owor
 Citub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRv
 ciIgIiRVU0JfVkVORE9SX1NPTlkiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NP
 TllfUU4zIjsKKwlhY3Rpb24gImtsZGxvYWQgdXBsY29tIjsKK307CisKK25vbWF0Y2ggMTAgewor
 CW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1Jf
 U09OWUVSSUNTU09OIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfU09OWUVSSUNT
 U09OX0RBVEFQSUxPVHwkVVNCX1BST0RVQ1RfU09OWUVSSUNTU09OX0RDVTEwKSI7CisJYWN0aW9u
 ICJrbGRsb2FkIHVwbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1
 YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NPVVJDRU5FWFQiOworCW1h
 dGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9TT1VSQ0VORVhUX0tFSUtBSTh8JFVTQl9QUk9E
 VUNUX1NPVVJDRU5FWFRfS0VJS0FJOF9DSEcpIjsKKwlhY3Rpb24gImtsZGxvYWQgdXBsY29tIjsK
 K307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAi
 dmVuZG9yIiAiJFVTQl9WRU5ET1JfU1BFRUREUkFHT04iOworCW1hdGNoICJwcm9kdWN0IiAiJFVT
 Ql9QUk9EVUNUX1NQRUVERFJBR09OX01TMzMwM0giOworCWFjdGlvbiAia2xkbG9hZCB1cGxjb20i
 OworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNo
 ICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9TWU5URUNIIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0Jf
 UFJPRFVDVF9TWU5URUNIX0NQVDgwMDFDIjsKKwlhY3Rpb24gImtsZGxvYWQgdXBsY29tIjsKK307
 CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVu
 ZG9yIiAiJFVTQl9WRU5ET1JfVERLIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1Rf
 VERLX1VIQTY0MDB8JFVTQl9QUk9EVUNUX1RES19VUEE5NjY0KSI7CisJYWN0aW9uICJrbGRsb2Fk
 IHVwbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1RSSVBQTElURSI7CisJbWF0Y2ggInByb2R1
 Y3QiICIkVVNCX1BST0RVQ1RfVFJJUFBMSVRFX1UyMDkiOworCWFjdGlvbiAia2xkbG9hZCB1cGxj
 b20iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ZQ0NBQkxFIjsKKwltYXRjaCAicHJvZHVjdCIgIiRV
 U0JfUFJPRFVDVF9ZQ0NBQkxFX1BMMjMwMyI7CisJYWN0aW9uICJrbGRsb2FkIHVwbGNvbSI7Cit9
 OworCkluZGV4OiBzeXMvZGV2L3VzYi9zZXJpYWwvdW1jdC5jb25mCj09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5
 cy9kZXYvdXNiL3NlcmlhbC91bWN0LmNvbmYJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi9z
 ZXJpYWwvdW1jdC5jb25mCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitub21hdGNoIDEw
 IHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVO
 RE9SX01DVCI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX01DVF9VU0IyMzJ8JFVT
 Ql9QUk9EVUNUX01DVF9TSVRFQ09NX1VTQjIzMnwkVVNCX1BST0RVQ1RfTUNUX0RVX0gzU1BfVVNC
 MjMyKSI7CisJYWN0aW9uICJrbGRsb2FkIHVtY3QiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0
 Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9CRUxL
 SU4iOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9CRUxLSU5fRjVVMTA5fCRVU0Jf
 UFJPRFVDVF9CRUxLSU5fRjVVNDA5KSI7CisJYWN0aW9uICJrbGRsb2FkIHVtY3QiOworfTsKKwpJ
 bmRleDogc3lzL2Rldi91c2Ivc2VyaWFsL3VmdGRpLmNvbmYKPT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rl
 di91c2Ivc2VyaWFsL3VmdGRpLmNvbmYJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi9zZXJp
 YWwvdWZ0ZGkuY29uZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorbm9tYXRjaCAxMCB7
 CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRP
 Ul9BVE1FTCI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQVRNRUxfU1RLNTQxIjsK
 KwlhY3Rpb24gImtsZGxvYWQgdWZ0ZGkiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9EUkVTREVORUxF
 S1RST05JSyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0RSRVNERU5FTEVLVFJP
 TklLX1NFTlNPUlRFUk1JTkFMQk9BUkR8JFVTQl9QUk9EVUNUX0RSRVNERU5FTEVLVFJPTklLX1dJ
 UkVMRVNTSEFOREhFTERURVJNSU5BTCkiOworCWFjdGlvbiAia2xkbG9hZCB1ZnRkaSI7Cit9Owor
 Citub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRv
 ciIgIiRVU0JfVkVORE9SX0ZBTENPTSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1Rf
 RkFMQ09NX1RXSVNUIjsKKwlhY3Rpb24gImtsZGxvYWQgdWZ0ZGkiOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9GVERJIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfRlRESV9HQU1NQVND
 T1VUfCRVU0JfUFJPRFVDVF9GVERJX1NFUklBTF84VTEwMEFYfCRVU0JfUFJPRFVDVF9GVERJX1NF
 UklBTF8yMjMyQ3wkVVNCX1BST0RVQ1RfRlRESV9TRVJJQUxfMjIzMkR8JFVTQl9QUk9EVUNUX0ZU
 RElfU0VSSUFMXzQyMzJIfCRVU0JfUFJPRFVDVF9GVERJX1NFUklBTF84VTIzMkFNfCRVU0JfUFJP
 RFVDVF9GVERJX1NFUklBTF84VTIzMkFNNHwkVVNCX1BST0RVQ1RfRlRESV9TRU1DX0RTUzIwfCRV
 U0JfUFJPRFVDVF9GVERJX0NGQV82MzF8JFVTQl9QUk9EVUNUX0ZURElfQ0ZBXzYzMnwkVVNCX1BS
 T0RVQ1RfRlRESV9DRkFfNjMzfCRVU0JfUFJPRFVDVF9GVERJX0NGQV82MzR8JFVTQl9QUk9EVUNU
 X0ZURElfQ0ZBXzYzNXwkVVNCX1BST0RVQ1RfRlRESV9VU0JfVUlSVHwkVVNCX1BST0RVQ1RfRlRE
 SV9VU0JTRVJJQUx8JFVTQl9QUk9EVUNUX0ZURElfS0JTfCRVU0JfUFJPRFVDVF9GVERJX01YMl8z
 fCRVU0JfUFJPRFVDVF9GVERJX01YNF81fCRVU0JfUFJPRFVDVF9GVERJX0xLMjAyfCRVU0JfUFJP
 RFVDVF9GVERJX0xLMjA0fCRVU0JfUFJPRFVDVF9GVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNNfCRV
 U0JfUFJPRFVDVF9GVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNTfCRVU0JfUFJPRFVDVF9GVERJX1RB
 Q1RSSVhfT1BFTlBPUlRfMTNVfCRVU0JfUFJPRFVDVF9GVERJX0VJU0NPVXwkVVNCX1BST0RVQ1Rf
 RlRESV9VT1BUQlJ8JFVTQl9QUk9EVUNUX0ZURElfRU1DVTJEfCRVU0JfUFJPRFVDVF9GVERJX1BD
 TVNGVXwkVVNCX1BST0RVQ1RfRlRESV9FTUNVMkh8JFVTQl9QUk9EVUNUX0ZURElfTUFYU1RSRUFN
 fCRVU0JfUFJPRFVDVF9GVERJX0NUSV9VU0JfTkFOT180ODV8JFVTQl9QUk9EVUNUX0ZURElfQ1RJ
 X1VTQl9NSU5JXzQ4NSkiOworCWFjdGlvbiAia2xkbG9hZCB1ZnRkaSI7Cit9OworCitub21hdGNo
 IDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0Jf
 VkVORE9SX1NJSUcyIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9TSUlHMl9VUzIz
 MDgiOworCWFjdGlvbiAia2xkbG9hZCB1ZnRkaSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRj
 aCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0lOVFJF
 UElEQ1MiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9JTlRSRVBJRENTX1ZBTFVF
 Q0FOfCRVU0JfUFJPRFVDVF9JTlRSRVBJRENTX05FT1ZJKSI7CisJYWN0aW9uICJrbGRsb2FkIHVm
 dGRpIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwlt
 YXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQkJFTEVDVFJPTklDUyI7CisJbWF0Y2ggInByb2R1
 Y3QiICIkVVNCX1BST0RVQ1RfQkJFTEVDVFJPTklDU19VU09UTDQiOworCWFjdGlvbiAia2xkbG9h
 ZCB1ZnRkaSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX01BVFJJWE9SQklUQUwiOworCW1hdGNoICJw
 cm9kdWN0IiAiJFVTQl9QUk9EVUNUX01BVFJJWE9SQklUQUxfTU9VQSI7CisJYWN0aW9uICJrbGRs
 b2FkIHVmdGRpIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0r
 IjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfTUFSVkVMTCI7CisJbWF0Y2ggInByb2R1
 Y3QiICIkVVNCX1BST0RVQ1RfTUFSVkVMTF9TSEVFVkFQTFVHIjsKKwlhY3Rpb24gImtsZGxvYWQg
 dWZ0ZGkiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOwor
 CW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9NRUxDTyI7CisJbWF0Y2ggInByb2R1Y3QiICIk
 VVNCX1BST0RVQ1RfTUVMQ09fUENPUFJTMSI7CisJYWN0aW9uICJrbGRsb2FkIHVmdGRpIjsKK307
 CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVu
 ZG9yIiAiJFVTQl9WRU5ET1JfUkFUT0MiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNU
 X1JBVE9DX1JFWFVTQjYwRiI7CisJYWN0aW9uICJrbGRsb2FkIHVmdGRpIjsKK307CisKSW5kZXg6
 IHN5cy9kZXYvdXNiL3NlcmlhbC91dnNjb20uY29uZgo9PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3Vz
 Yi9zZXJpYWwvdXZzY29tLmNvbmYJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi9zZXJpYWwv
 dXZzY29tLmNvbmYJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbm9tYXRjaCAxMCB7CisJ
 bWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9T
 VU5UQUMiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9TVU5UQUNfQVMxNDRMNHwk
 VVNCX1BST0RVQ1RfU1VOVEFDX0RTOTZMfCRVU0JfUFJPRFVDVF9TVU5UQUNfSVM5NlV8JFVTQl9Q
 Uk9EVUNUX1NVTlRBQ19QUzY0UDF8JFVTQl9QUk9EVUNUX1NVTlRBQ19WUzEwVSkiOworCWFjdGlv
 biAia2xkbG9hZCB1dnNjb20iOworfTsKKwpJbmRleDogc3lzL2Rldi91c2Ivc2VyaWFsL3VjaGNv
 bS5jb25mCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvdXNiL3NlcmlhbC91Y2hjb20uY29uZgkocmV2
 aXNpb24gMCkKKysrIHN5cy9kZXYvdXNiL3NlcmlhbC91Y2hjb20uY29uZgkocmV2aXNpb24gMCkK
 QEAgLTAsMCArMSwxNCBAQAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsi
 OworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9XQ0giOworCW1hdGNoICJwcm9kdWN0IiAi
 JFVTQl9QUk9EVUNUX1dDSF9DSDM0MVNFUiI7CisJYWN0aW9uICJrbGRsb2FkIHVjaGNvbSI7Cit9
 OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZl
 bmRvciIgIiRVU0JfVkVORE9SX1dDSDIiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNU
 X1dDSDJfQ0gzNDFTRVIiOworCWFjdGlvbiAia2xkbG9hZCB1Y2hjb20iOworfTsKKwpJbmRleDog
 c3lzL2Rldi91c2Ivc2VyaWFsL3VpcGFxLmNvbmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi91c2Iv
 c2VyaWFsL3VpcGFxLmNvbmYJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi9zZXJpYWwvdWlw
 YXEuY29uZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorbm9tYXRjaCAxMCB7CisJbWF0
 Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BU1VT
 IjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9BU1VTX1A1MzUiOworCWFjdGlvbiAi
 a2xkbG9hZCB1aXBhcSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0NBU0lPIjsKKwltYXRjaCAicHJv
 ZHVjdCIgIiRVU0JfUFJPRFVDVF9DQVNJT19CRTMwMCI7CisJYWN0aW9uICJrbGRsb2FkIHVpcGFx
 IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRj
 aCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQ09NUEFRIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0Jf
 UFJPRFVDVF9DT01QQVFfSVBBUVBPQ0tFVFBDIjsKKwlhY3Rpb24gImtsZGxvYWQgdWlwYXEiOwor
 fTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2
 ZW5kb3IiICIkVVNCX1ZFTkRPUl9IUCI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNU
 X0hQXzIyMTV8JFVTQl9QUk9EVUNUX0hQXzU2OEopIjsKKwlhY3Rpb24gImtsZGxvYWQgdWlwYXEi
 OworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNo
 ICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9IVEMiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJP
 RFVDVF9IVENfUFBDNjcwME1PREVNfCRVU0JfUFJPRFVDVF9IVENfU01BUlRQSE9ORXwkVVNCX1BS
 T0RVQ1RfSFRDX1dJTk1PQklMRXwkVVNCX1BST0RVQ1RfSFRDX1dJWkFSRCkiOworCWFjdGlvbiAi
 a2xkbG9hZCB1aXBhcSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NIQVJQIjsKKwltYXRjaCAicHJv
 ZHVjdCIgIigkVVNCX1BST0RVQ1RfU0hBUlBfV1pFUk8zRVN8JFVTQl9QUk9EVUNUX1NIQVJQX1da
 RVJPM0FERVN8JFVTQl9QUk9EVUNUX1NIQVJQX1dJTExDT00wMykiOworCWFjdGlvbiAia2xkbG9h
 ZCB1aXBhcSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1RPU0hJQkEiOworCW1hdGNoICJwcm9kdWN0
 IiAiJFVTQl9QUk9EVUNUX1RPU0hJQkFfUE9DS0VUUENfRTc0MCI7CisJYWN0aW9uICJrbGRsb2Fk
 IHVpcGFxIjsKK307CisKSW5kZXg6IHN5cy9kZXYvdXNiL3NlcmlhbC91Y3ljb20uY29uZgo9PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09Ci0tLSBzeXMvZGV2L3VzYi9zZXJpYWwvdWN5Y29tLmNvbmYJKHJldmlzaW9uIDApCisr
 KyBzeXMvZGV2L3VzYi9zZXJpYWwvdWN5Y29tLmNvbmYJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
 NyBAQAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2
 ZW5kb3IiICIkVVNCX1ZFTkRPUl9ERUxPUk1FIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJP
 RFVDVF9ERUxPUk1FX0VBUlRITUFURSI7CisJYWN0aW9uICJrbGRsb2FkIHVjeWNvbSI7Cit9Owor
 CkluZGV4OiBzeXMvZGV2L3VzYi9zZXJpYWwvdXNsY29tLmNvbmYKPT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz
 L2Rldi91c2Ivc2VyaWFsL3VzbGNvbS5jb25mCShyZXZpc2lvbiAwKQorKysgc3lzL2Rldi91c2Iv
 c2VyaWFsL3VzbGNvbS5jb25mCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MiBAQAorbm9tYXRj
 aCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNC
 X1ZFTkRPUl9CQUxURUNIIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9CQUxURUNI
 X0NBUkRSRUFERVIiOworCWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9DTElQU0FMIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9DTElQU0FMXzU1
 MDBQQ1UiOworCWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJ
 bWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9E
 QVRBQVBFWCI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfREFUQUFQRVhfTVVMVElD
 T00iOworCWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0
 Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ERUxM
 IjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9ERUxMX0RXNzAwIjsKKwlhY3Rpb24g
 ImtsZGxvYWQgdXNsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHVi
 WzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfRElHSUFOU1dFUiI7CisJbWF0
 Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfRElHSUFOU1dFUl9aSUdCRUU4MDIxNTQiOworCWFj
 dGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIg
 InVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9EWU5BU1RSRUFNIjsK
 KwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfRFlOQVNUUkVBTV9BTlRERVZCT0FSRHwk
 VVNCX1BST0RVQ1RfRFlOQVNUUkVBTV9BTlRERVZCT0FSRDJ8JFVTQl9QUk9EVUNUX0RZTkFTVFJF
 QU1fQU5UMlVTQikiOworCWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9FTFYiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0VMVl9VU0JJMkMiOwor
 CWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9GT1hDT05OIjsK
 KwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfRk9YQ09OTl9QSVJFTExJX0RQX0wxMHwk
 VVNCX1BST0RVQ1RfRk9YQ09OTiAkVVNCX1BST0RVQ1RfRk9YQ09OTl9UQ09NX1RDXzMwMCkiOwor
 CWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9HRU1BTFRPIjsK
 KwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9HRU1BTFRPX1BST1hQVSI7CisJYWN0aW9u
 ICJrbGRsb2FkIHVzbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1
 YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0pBQkxPVFJPTiI7CisJbWF0
 Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfSkFCTE9UUk9OX1BDNjBCIjsKKwlhY3Rpb24gImts
 ZGxvYWQgdXNsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAt
 OV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfTUVJIjsKKwltYXRjaCAicHJvZHVj
 dCIgIigkVVNCX1BST0RVQ1RfTUVJX0NBU0hGTE9XX1NDfCRVU0JfUFJPRFVDVF9NRUkgJFVTQl9Q
 Uk9EVUNUX01FSV9TMjAwMCkiOworCWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsKKworbm9t
 YXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIk
 VVNCX1ZFTkRPUl9KQUJMT1RST04iOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0pB
 QkxPVFJPTl9QQzYwQiI7CisJYWN0aW9uICJrbGRsb2FkIHVzbGNvbSI7Cit9OworCitub21hdGNo
 IDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0Jf
 VkVORE9SX09XRU4iOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX09XRU5fQUM0IjsK
 KwlhY3Rpb24gImtsZGxvYWQgdXNsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJi
 dXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfUEhJTElQUyI7
 CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfUEhJTElQU19BQ0UxMDAxIjsKKwlhY3Rp
 b24gImtsZGxvYWQgdXNsY29tIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1
 aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfUExYIjsKKwltYXRjaCAi
 cHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9QTFhfQ0E0MiI7CisJYWN0aW9uICJrbGRsb2FkIHVzbGNv
 bSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0
 Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1JFTkVTQVMiOworCW1hdGNoICJwcm9kdWN0IiAiJFVT
 Ql9QUk9EVUNUX1JFTkVTQVNfUlg2MTAiOworCWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsK
 Kworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5k
 b3IiICIkVVNCX1ZFTkRPUl9TSUxBQlMiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVD
 VF9TSUxBQlNfQUVST0NPTU18JFVTQl9QUk9EVUNUX1NJTEFCU19BTUJFUl9BTUIyNTYwfCRVU0Jf
 UFJPRFVDVF9TSUxBQlNfQVJHVVNJU1B8JFVTQl9QUk9EVUNUX1NJTEFCU19BUktIQU1fRFMxMDFf
 QXwkVVNCX1BST0RVQ1RfU0lMQUJTX0FSS0hBTV9EUzEwMV9NfCRVU0JfUFJPRFVDVF9TSUxBQlNf
 QVJZR09OX01JRkFSRXwkVVNCX1BST0RVQ1RfU0lMQUJTX0FWSVRfVVNCX1RUTHwkVVNCX1BST0RV
 Q1RfU0lMQUJTX0JfR19IMzAwMHwkVVNCX1BST0RVQ1RfU0lMQUJTX0JBTExVRkZfUkZJRHwkVVNC
 X1BST0RVQ1RfU0lMQUJTX0JFSV9WQ1B8JFVTQl9QUk9EVUNUX1NJTEFCU19CU003RFVTQnwkVVNC
 X1BST0RVQ1RfU0lMQUJTX0JVUk5TSURFfCRVU0JfUFJPRFVDVF9TSUxBQlNfQzJfRURHRV9NT0RF
 TXwkVVNCX1BST0RVQ1RfU0lMQUJTX0NQMjEwMnwkVVNCX1BST0RVQ1RfU0lMQUJTX0NQMjEwWF8y
 fCRVU0JfUFJPRFVDVF9TSUxBQlNfQ1JVTUIxMjh8JFVTQl9QUk9EVUNUX1NJTEFCU19DWUdOQUx8
 JFVTQl9QUk9EVUNUX1NJTEFCU19DWUdOQUxfREVCVUd8JFVTQl9QUk9EVUNUX1NJTEFCU19DWUdO
 QUxfR1BTfCRVU0JfUFJPRFVDVF9TSUxBQlNfREVHUkVFfCRVU0JfUFJPRFVDVF9TSUxBQlNfRU1T
 X0MxMDA3fCRVU0JfUFJPRFVDVF9TSUxBQlNfSEVMSUNPTXwkVVNCX1BST0RVQ1RfU0lMQUJTX0lN
 U19VU0JfUlM0MjJ8JFVTQl9QUk9EVUNUX1NJTEFCU19JTkZJTklUWV9NSUN8JFVTQl9QUk9EVUNU
 X1NJTEFCU19JTlNZU19NT0RFTXwkVVNCX1BST0RVQ1RfU0lMQUJTX0tZT0NFUkFfR1BTfCRVU0Jf
 UFJPRFVDVF9TSUxBQlNfTElQT1dTS1lfSEFSUHwkVVNCX1BST0RVQ1RfU0lMQUJTX0xJUE9XU0tZ
 X0pUQUd8JFVTQl9QUk9EVUNUX1NJTEFCU19MSVBPV1NLWV9MSU58JFVTQl9QUk9EVUNUX1NJTEFC
 U19NQzM1UFV8JFVTQl9QUk9EVUNUX1NJTEFCU19NSlNfVE9TTElOS3wkVVNCX1BST0RVQ1RfU0lM
 QUJTX01TRF9EQVNISEFXS3wkVVNCX1BST0RVQ1RfU0lMQUJTX1BPTE9MVXwkVVNCX1BST0RVQ1Rf
 U0lMQUJTX1BST0NZT05fQVZTfCRVU0JfUFJPRFVDVF9TSUxBQlNfU0JfUEFSQU1PVU5UX01FfCRV
 U0JfUFJPRFVDVF9TSUxBQlNfU1VVTlRPfCRVU0JfUFJPRFVDVF9TSUxBQlNfVEFNU01BU1RFUnwk
 VVNCX1BST0RVQ1RfU0lMQUJTX1RFTEVHRVNZU19FVFJYMnwkVVNCX1BST0RVQ1RfU0lMQUJTX1RS
 QUNJRU5UfCRVU0JfUFJPRFVDVF9TSUxBQlNfVFJBUU1BVEV8JFVTQl9QUk9EVUNUX1NJTEFCU19V
 U0JDT1VOVDUwfCRVU0JfUFJPRFVDVF9TSUxBQlNfVVNCUFVMU0UxMDB8JFVTQl9QUk9EVUNUX1NJ
 TEFCU19VU0JTQ09QRTUwfCRVU0JfUFJPRFVDVF9TSUxBQlNfVVNCV0FWRTEyfCRVU0JfUFJPRFVD
 VF9TSUxBQlNfVlNUQUJJfCRVU0JfUFJPRFVDVF9TSUxBQlNfV0FWSVR8JFVTQl9QUk9EVUNUX1NJ
 TEFCU19XTVJCQVRUfCRVU0JfUFJPRFVDVF9TSUxBQlNfV01SUklHQkxBU1RFUnwkVVNCX1BST0RV
 Q1RfU0lMQUJTX1dNUlJJR1RBTEt8JFVTQl9QUk9EVUNUX1NJTEFCU19aRVBIWVJfQklPKSI7CisJ
 YWN0aW9uICJrbGRsb2FkIHVzbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVz
 IiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NJTEFCUzIiOwor
 CW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NJTEFCUzJfRENVMTFDTE9ORSI7CisJYWN0
 aW9uICJrbGRsb2FkIHVzbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAi
 dWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NJTEFCUzMiOworCW1h
 dGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NJTEFCUzNfR1BSU19NT0RFTSI7CisJYWN0aW9u
 ICJrbGRsb2FkIHVzbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1
 YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NJTEFCUzQiOworCW1hdGNo
 ICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NJTEFCUzRfMTAwRVVfTU9ERU0iOworCWFjdGlvbiAi
 a2xkbG9hZCB1c2xjb20iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJb
 MC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9TWU5URUNIIjsKKwltYXRjaCAi
 cHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9TWU5URUNIX0NZUEhFUkxBQjEwMCI7CisJYWN0aW9uICJr
 bGRsb2FkIHVzbGNvbSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1VTSSI7CisJbWF0Y2ggInByb2R1
 Y3QiICIkVVNCX1BST0RVQ1RfVVNJX01DNjAiOworCWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOwor
 fTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2
 ZW5kb3IiICIkVVNCX1ZFTkRPUl9WQUlTQUxBIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJP
 RFVDVF9WQUlTQUxBX0NBQkxFIjsKKwlhY3Rpb24gImtsZGxvYWQgdXNsY29tIjsKK307CisKK25v
 bWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAi
 JFVTQl9WRU5ET1JfV0FHTyI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfV0FHT19T
 RVJWSUNFQ0FCTEUiOworCWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9XQVZFU0VOU0UiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1dBVkVTRU5T
 RV9KQVpaIjsKKwlhY3Rpb24gImtsZGxvYWQgdXNsY29tIjsKK307CisKK25vbWF0Y2ggMTAgewor
 CW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1Jf
 V0lFTkVSUExFSU5CQVVTIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfV0lFTkVS
 UExFSU5CQVVTX1BMNTEyfCRVU0JfUFJPRFVDVF9XSUVORVJQTEVJTkJBVVNfUkNNfCRVU0JfUFJP
 RFVDVF9XSUVORVJQTEVJTkJBVVNfTVBPRHwkVVNCX1BST0RVQ1RfV0lFTkVSUExFSU5CQVVTX0NN
 TCkiOworCWFjdGlvbiAia2xkbG9hZCB1c2xjb20iOworfTsKKwpJbmRleDogc3lzL2Rldi91c2Iv
 c2VyaWFsL3VhcmsuY29uZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3VzYi9zZXJpYWwvdWFyay5j
 b25mCShyZXZpc2lvbiAwKQorKysgc3lzL2Rldi91c2Ivc2VyaWFsL3VhcmsuY29uZgkocmV2aXNp
 b24gMCkKQEAgLTAsMCArMSw3IEBACitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0FSS01JQ1JPIjsKKwltYXRjaCAi
 cHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9BUktNSUNST19BUkszMTE2IjsKKwlhY3Rpb24gImtsZGxv
 YWQgdWFyayI7Cit9OworCkluZGV4OiBzeXMvZGV2L3VzYi9zZXJpYWwvdW1jcy5jb25mCj09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT0KLS0tIHN5cy9kZXYvdXNiL3NlcmlhbC91bWNzLmNvbmYJKHJldmlzaW9uIDApCisrKyBz
 eXMvZGV2L3VzYi9zZXJpYWwvdW1jcy5jb25mCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAK
 K25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9y
 IiAiJFVTQl9WRU5ET1JfTU9TQ0hJUCI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNU
 X01PU0NISVBfTUNTNzgyMHwkVVNCX1BST0RVQ1RfTU9TQ0hJUF9NQ1M3ODQwKSI7CisJYWN0aW9u
 ICJrbGRsb2FkIHVtY3MiOworfTsKKwpJbmRleDogc3lzL2Rldi91c2Ivc2VyaWFsL3Vtb3Njb20u
 Y29uZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3VzYi9zZXJpYWwvdW1vc2NvbS5jb25mCShyZXZp
 c2lvbiAwKQorKysgc3lzL2Rldi91c2Ivc2VyaWFsL3Vtb3Njb20uY29uZgkocmV2aXNpb24gMCkK
 QEAgLTAsMCArMSw3IEBACitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX01PU0NISVAiOworCW1hdGNoICJwcm9kdWN0
 IiAiJFVTQl9QUk9EVUNUX01PU0NISVBfTUNTNzcwMyI7CisJYWN0aW9uICJrbGRsb2FkIHVtb3Nj
 b20iOworfTsKKwpJbmRleDogc3lzL2Rldi91c2Ivc2VyaWFsL3VnZW5zYS5jb25mCj09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT0KLS0tIHN5cy9kZXYvdXNiL3NlcmlhbC91Z2Vuc2EuY29uZgkocmV2aXNpb24gMCkKKysrIHN5
 cy9kZXYvdXNiL3NlcmlhbC91Z2Vuc2EuY29uZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBA
 QAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5k
 b3IiICIkVVNCX1ZFTkRPUl9BSVJQUklNRSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RV
 Q1RfQUlSUFJJTUVfUEM1MjIwIjsKKwlhY3Rpb24gImtsZGxvYWQgdWdlbnNhIjsKK307CisKK25v
 bWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAi
 JFVTQl9WRU5ET1JfQ01PVEVDSCI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQ01P
 VEVDSF9DRE1BX01PREVNMSI7CisJYWN0aW9uICJrbGRsb2FkIHVnZW5zYSI7Cit9OworCitub21h
 dGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRV
 U0JfVkVORE9SX0tZT0NFUkEyIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9LWU9D
 RVJBMl9DRE1BX01TTV9LIjsKKwlhY3Rpb24gImtsZGxvYWQgdWdlbnNhIjsKK307CisKK25vbWF0
 Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVT
 Ql9WRU5ET1JfSFAiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0hQXzQ5R1BMVVMi
 OworCWFjdGlvbiAia2xkbG9hZCB1Z2Vuc2EiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2gg
 ImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9OT1ZBVEVM
 MiI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfTk9WQVRFTDJfRkxFWFBBQ0tHUFMi
 OworCWFjdGlvbiAia2xkbG9hZCB1Z2Vuc2EiOworfTsKKwpJbmRleDogc3lzL2Rldi91c2Ivc2Vy
 aWFsL3Vtb2RlbS5jb25mCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvdXNiL3NlcmlhbC91bW9kZW0u
 Y29uZgkocmV2aXNpb24gMCkKKysrIHN5cy9kZXYvdXNiL3NlcmlhbC91bW9kZW0uY29uZgkocmV2
 aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVo
 dWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9LWU9DRVJBIjsKKwltYXRj
 aCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9LWU9DRVJBX0FISzMwMDFWIjsKKwlhY3Rpb24gImts
 ZGxvYWQgdW1vZGVtIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAt
 OV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0lFUlJBIjsKKwltYXRjaCAicHJv
 ZHVjdCIgIiRVU0JfUFJPRFVDVF9TSUVSUkFfTUM1NzIwIjsKKwlhY3Rpb24gImtsZGxvYWQgdW1v
 ZGVtIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwlt
 YXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQ1VSSVRFTCI7CisJbWF0Y2ggInByb2R1Y3QiICIk
 VVNCX1BST0RVQ1RfQ1VSSVRFTF9QQzU3NDAiOworCWFjdGlvbiAia2xkbG9hZCB1bW9kZW0iOwor
 fTsKKwpJbmRleDogc3lzL2Rldi91c2Ivc2VyaWFsL3V2aXNvci5jb25mCj09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
 IHN5cy9kZXYvdXNiL3NlcmlhbC91dmlzb3IuY29uZgkocmV2aXNpb24gMCkKKysrIHN5cy9kZXYv
 dXNiL3NlcmlhbC91dmlzb3IuY29uZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorbm9t
 YXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIk
 VVNCX1ZFTkRPUl9BQ0VFQ0EiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0FDRUVD
 QV9NRVoxMDAwIjsKKwlhY3Rpb24gImtsZGxvYWQgdXZpc29yIjsKK307CisKK25vbWF0Y2ggMTAg
 eworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5E
 T1JfQUxQSEFTTUFSVCI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQUxQSEFTTUFS
 VF9EQU5BX1NZTkMiOworCWFjdGlvbiAia2xkbG9hZCB1dmlzb3IiOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9HQVJNSU4iOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0dBUk1JTl9JUVVF
 XzM2MDAiOworCWFjdGlvbiAia2xkbG9hZCB1dmlzb3IiOworfTsKKworbm9tYXRjaCAxMCB7CisJ
 bWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9G
 T1NTSUwiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0ZPU1NJTF9XUklTVFBEQSI7
 CisJYWN0aW9uICJrbGRsb2FkIHV2aXNvciI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAi
 YnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0hBTkRTUFJJ
 TkciOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9IQU5EU1BSSU5HX1ZJU09SfCRV
 U0JfUFJPRFVDVF9IQU5EU1BSSU5HX1RSRU98JFVTQl9QUk9EVUNUX0hBTkRTUFJJTkdfVFJFTzYw
 MCkiOworCWFjdGlvbiAia2xkbG9hZCB1dmlzb3IiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0
 Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9QQUxN
 IjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfUEFMTV9NNTAwfCRVU0JfUFJPRFVD
 VF9QQUxNX001MDV8JFVTQl9QUk9EVUNUX1BBTE1fTTUxNXwkVVNCX1BST0RVQ1RfUEFMTV9JNzA1
 fCRVU0JfUFJPRFVDVF9QQUxNX00xMjV8JFVTQl9QUk9EVUNUX1BBTE1fTTEzMHwkVVNCX1BST0RV
 Q1RfUEFMTV9UVU5HU1RFTl9afCRVU0JfUFJPRFVDVF9QQUxNX1RVTkdTVEVOX1R8JFVTQl9QUk9E
 VUNUX1BBTE1fWklSRXwkVVNCX1BST0RVQ1RfUEFMTV9aSVJFMzEpIjsKKwlhY3Rpb24gImtsZGxv
 YWQgdXZpc29yIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0r
 IjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0FNU1VORyI7CisJbWF0Y2ggInByb2R1
 Y3QiICIkVVNCX1BST0RVQ1RfU0FNU1VOR19JNTAwIjsKKwlhY3Rpb24gImtsZGxvYWQgdXZpc29y
 IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRj
 aCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU09OWSI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9Q
 Uk9EVUNUX1NPTllfQ0xJRV80MHwkVVNCX1BST0RVQ1RfU09OWV9DTElFXzQxfCRVU0JfUFJPRFVD
 VF9TT05ZX0NMSUVfUzM2MHwkVVNCX1BST0RVQ1RfU09OWV9DTElFX05YNjB8JFVTQl9QUk9EVUNU
 X1NPTllfQ0xJRV8zNXwkVVNCX1BST0RVQ1RfU09OWV9DTElFXzI1fCRVU0JfUFJPRFVDVF9TT05Z
 X0NMSUVfVEozN3wkVVNCX1BST0RVQ1RfU09OWV9DTElFX1RINTUpIjsKKwlhY3Rpb24gImtsZGxv
 YWQgdXZpc29yIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0r
 IjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfVEFQV0FWRSI7CisJbWF0Y2ggInByb2R1
 Y3QiICIkVVNCX1BST0RVQ1RfVEFQV0FWRV9aT0RJQUMiOworCWFjdGlvbiAia2xkbG9hZCB1dmlz
 b3IiOworfTsKKwpJbmRleDogc3lzL2Rldi91c2Ivc2VyaWFsL3Vic2EuY29uZgo9PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 Ci0tLSBzeXMvZGV2L3VzYi9zZXJpYWwvdWJzYS5jb25mCShyZXZpc2lvbiAwKQorKysgc3lzL2Rl
 di91c2Ivc2VyaWFsL3Vic2EuY29uZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorbm9t
 YXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIk
 VVNCX1ZFTkRPUl9BTllEQVRBIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfQU5Z
 REFUQV9BRFVfNTAwQXwkVVNCX1BST0RVQ1RfQU5ZREFUQV9BRFVfRTEwMFgpIjsKKwlhY3Rpb24g
 ImtsZGxvYWQgdWJzYSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0FYRVNTVEVMIjsKKwltYXRjaCAi
 cHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9BWEVTU1RFTF9EQVRBTU9ERU0iOworCWFjdGlvbiAia2xk
 bG9hZCB1YnNhIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0r
 IjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQkVMS0lOIjsKKwltYXRjaCAicHJvZHVj
 dCIgIigkVVNCX1BST0RVQ1RfQkVMS0lOX0Y1VTEwM3wkVVNCX1BST0RVQ1RfQkVMS0lOX0Y1VTEy
 MCkiOworCWFjdGlvbiAia2xkbG9hZCB1YnNhIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNo
 ICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfRVRFSyI7
 CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfRVRFS18xQ09NIjsKKwlhY3Rpb24gImts
 ZGxvYWQgdWJzYSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTld
 KyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0dPSFVCUyI7CisJbWF0Y2ggInByb2R1
 Y3QiICIkVVNCX1BST0RVQ1RfR09IVUJTX0dPQ09NMjMyIjsKKwlhY3Rpb24gImtsZGxvYWQgdWJz
 YSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0
 Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1BFUkFDT00iOworCW1hdGNoICJwcm9kdWN0IiAiJFVT
 Ql9QUk9EVUNUX1BFUkFDT01fU0VSSUFMMSI7CisJYWN0aW9uICJrbGRsb2FkIHVic2EiOworfTsK
 KwpJbmRleDogc3lzL2Rldi91c2IvaW5wdXQvdWVwLmNvbmYKPT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rl
 di91c2IvaW5wdXQvdWVwLmNvbmYJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi9pbnB1dC91
 ZXAuY29uZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorbm9tYXRjaCAxMCB7CisJbWF0
 Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9FR0FM
 QVgiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9FR0FMQVhfVFBBTkVMfCRVU0Jf
 UFJPRFVDVF9FR0FMQVhfVFBBTkVMMikiOworCWFjdGlvbiAia2xkbG9hZCB1ZXAiOworfTsKKwor
 bm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3Ii
 ICIkVVNCX1ZFTkRPUl9FR0FMQVgyIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9F
 R0FMQVhfVFBBTkVMMiI7CisJYWN0aW9uICJrbGRsb2FkIHVlcCI7Cit9OworCkluZGV4OiBzeXMv
 ZGV2L3VzYi9zdG9yYWdlL3VyaW8uY29uZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3VzYi9zdG9y
 YWdlL3VyaW8uY29uZgkocmV2aXNpb24gMCkKKysrIHN5cy9kZXYvdXNiL3N0b3JhZ2UvdXJpby5j
 b25mCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitub21hdGNoIDEwIHsKKwltYXRjaCAi
 YnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0RJQU1PTkQi
 OworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0RJQU1PTkRfUklPNTAwVVNCIjsKKwlh
 Y3Rpb24gImtsZGxvYWQgdXJpbyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAi
 dWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0RJQU1PTkQyIjsKKwlt
 YXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfRElBTU9ORDJfUklPNjAwVVNCfCRVU0JfUFJP
 RFVDVF9ESUFNT05EMl9SSU84MDBVU0IpIjsKKwlhY3Rpb24gImtsZGxvYWQgdXJpbyI7Cit9Owor
 CkluZGV4OiBzeXMvZGV2L3VzYi9uZXQvaWZfaXBoZXRoLmNvbmYKPT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz
 L2Rldi91c2IvbmV0L2lmX2lwaGV0aC5jb25mCShyZXZpc2lvbiAwKQorKysgc3lzL2Rldi91c2Iv
 bmV0L2lmX2lwaGV0aC5jb25mCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK25vbWF0Y2gg
 MTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9W
 RU5ET1JfQVBQTEUiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9BUFBMRV9JUEhP
 TkV8JFVTQl9QUk9EVUNUX0FQUExFX0lQSE9ORV8zR3wkVVNCX1BST0RVQ1RfQVBQTEVfSVBIT05F
 XzNHU3wkVVNCX1BST0RVQ1RfQVBQTEVfSVBIT05FXzQpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZf
 aXBoZXRoIjsKK307CisKSW5kZXg6IHN5cy9kZXYvdXNiL25ldC9pZl9ydWUuY29uZgo9PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09Ci0tLSBzeXMvZGV2L3VzYi9uZXQvaWZfcnVlLmNvbmYJKHJldmlzaW9uIDApCisrKyBzeXMv
 ZGV2L3VzYi9uZXQvaWZfcnVlLmNvbmYJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKK25v
 bWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAi
 JFVTQl9WRU5ET1JfTUVMQ08iOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX01FTENP
 X0xVQUtUWCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1ZSI7Cit9OworCitub21hdGNoIDEwIHsK
 KwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9S
 X1JFQUxURUsiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1JFQUxURUtfVVNCS1Ix
 MDAiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0
 Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9PUU8i
 OworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX09RT19FVEhFUjAxIjsKKwlhY3Rpb24g
 ImtsZGxvYWQgaWZfcnVlIjsKK307CisKSW5kZXg6IHN5cy9kZXYvdXNiL25ldC9pZl9jZGNlLmNv
 bmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PQotLS0gc3lzL2Rldi91c2IvbmV0L2lmX2NkY2UuY29uZgkocmV2aXNpb24g
 MCkKKysrIHN5cy9kZXYvdXNiL25ldC9pZl9jZGNlLmNvbmYJKHJldmlzaW9uIDApCkBAIC0wLDAg
 KzEsNTYgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRj
 aCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQUNFUkxBQlMiOworCW1hdGNoICJwcm9kdWN0IiAiJFVT
 Ql9QUk9EVUNUX0FDRVJMQUJTX001NjMyIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfY2RjZSI7Cit9
 OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZl
 bmRvciIgIiRVU0JfVkVORE9SX0FNQklUIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVD
 VF9BTUJJVF9OVExfMjUwIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfY2RjZSI7Cit9OworCitub21h
 dGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRV
 U0JfVkVORE9SX0NPTVBBUSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQ09NUEFR
 X0lQQVFMSU5VWCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2NkY2UiOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9HTUFURSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfR01BVEVfWVAzWDAw
 IjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfY2RjZSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRj
 aCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX01PVE9S
 T0xBMiI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX01PVE9ST0xBMl9VU0JMQU58
 JFVTQl9QUk9EVUNUX01PVE9ST0xBMl9VU0JMQU4yKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2Nk
 Y2UiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ORVRDSElQIjsKKwltYXRjaCAicHJvZHVjdCIgIiRV
 U0JfUFJPRFVDVF9ORVRDSElQX0VUSEVSTkVUR0FER0VUIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZf
 Y2RjZSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJ
 bWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1BST0xJRklDIjsKKwltYXRjaCAicHJvZHVjdCIg
 IiRVU0JfUFJPRFVDVF9QUk9MSUZJQ19QTDI1MDEiOworCWFjdGlvbiAia2xkbG9hZCBpZl9jZGNl
 IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRj
 aCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0hBUlAiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0Jf
 UFJPRFVDVF9TSEFSUF9TTDU1MDB8JFVTQl9QUk9EVUNUX1NIQVJQX1NMNTYwMHwkVVNCX1BST0RV
 Q1RfU0hBUlBfU0xBMzAwfCRVU0JfUFJPRFVDVF9TSEFSUF9TTEM3MDB8JFVTQl9QUk9EVUNUX1NI
 QVJQX1NMQzc1MCkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9jZGNlIjsKK307CisKSW5kZXg6IHN5
 cy9kZXYvdXNiL25ldC9pZl91ZGF2LmNvbmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi91c2IvbmV0
 L2lmX3VkYXYuY29uZgkocmV2aXNpb24gMCkKKysrIHN5cy9kZXYvdXNiL25ldC9pZl91ZGF2LmNv
 bmYJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJi
 dXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0hBTlRPVSI7
 CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1NIQU5UT1VfRE05NjAxfCRVU0JfUFJP
 RFVDVF9TSEFOVE9VX1NUMjY4fCRVU0JfUFJPRFVDVF9TSEFOVE9VX0FETTg1MTUpIjsKKwlhY3Rp
 b24gImtsZGxvYWQgaWZfdWRhdiI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAi
 dWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0NPUkVHQSI7CisJbWF0
 Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQ09SRUdBX0ZFVEhFUl9VU0JfVFhDIjsKKwlhY3Rp
 b24gImtsZGxvYWQgaWZfdWRhdiI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAi
 dWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0tPTlRST04iOworCW1h
 dGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9LT05UUk9OX0RNOTYwMXwkVVNCX1BST0RVQ1Rf
 S09OVFJPTl9KUDEwODIpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfdWRhdiI7Cit9OworCkluZGV4
 OiBzeXMvZGV2L3VzYi9uZXQvdWhzby5jb25mCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvdXNiL25l
 dC91aHNvLmNvbmYJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi9uZXQvdWhzby5jb25mCShy
 ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1
 aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfT1BUSU9OIjsKKwltYXRj
 aCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfT1BUSU9OX0dTSUNPTjcyfCRVU0JfUFJPRFVDVF9P
 UFRJT05fR1RIU0RQQXwkVVNCX1BST0RVQ1RfT1BUSU9OX0dTSUNPTkhTVVBBfCRVU0JfUFJPRFVD
 VF9PUFRJT05fR1RIU1VQQXwkVVNCX1BST0RVQ1RfT1BUSU9OX0dFNDBYfCRVU0JfUFJPRFVDVF9P
 UFRJT05fR0U0MFhfMXwkVVNCX1BST0RVQ1RfT1BUSU9OX0dFNDBYXzJ8JFVTQl9QUk9EVUNUX09Q
 VElPTl9HRTQwWF8zfCRVU0JfUFJPRFVDVF9PUFRJT05fSUNPTjQwMXwkVVNCX1BST0RVQ1RfT1BU
 SU9OX0dNVDM4MnwkVVNCX1BST0RVQ1RfT1BUSU9OX0lDT05FREdFfCRVU0JfUFJPRFVDVF9PUFRJ
 T05fTU9ESFNYUEF8JFVTQl9QUk9EVUNUX09QVElPTl9JQ09OMzIxfCRVU0JfUFJPRFVDVF9PUFRJ
 T05fR1RJQ09OMzIyfCRVU0JfUFJPRFVDVF9PUFRJT05fSUNPTjUwNXwkVVNCX1BST0RVQ1RfT1BU
 SU9OX0lDT041MDUpIjsKKwlhY3Rpb24gImtsZGxvYWQgdWhzbyI7Cit9OworCkluZGV4OiBzeXMv
 ZGV2L3VzYi9uZXQvaWZfYXVlLmNvbmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi91c2IvbmV0L2lm
 X2F1ZS5jb25mCShyZXZpc2lvbiAwKQorKysgc3lzL2Rldi91c2IvbmV0L2lmX2F1ZS5jb25mCShy
 ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NiBAQAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIg
 InVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl8zQ09NIjsKKwltYXRj
 aCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF8zQ09NXzNDNDYwQiI7CisJYWN0aW9uICJrbGRsb2Fk
 IGlmX2F1ZSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0FCT0NPTSI7CisJbWF0Y2ggInByb2R1Y3Qi
 ICIoJFVTQl9QUk9EVUNUX0FCT0NPTV9EU0I2NTBUWF9QTkF8JFVTQl9QUk9EVUNUX0FCT0NPTV9V
 RkUxMDAwfCRVU0JfUFJPRFVDVF9BQk9DT01fWFgxfCRVU0JfUFJPRFVDVF9BQk9DT01fWFgxMHwk
 VVNCX1BST0RVQ1RfQUJPQ09NX1hYMnwkVVNCX1BST0RVQ1RfQUJPQ09NX1hYNHwkVVNCX1BST0RV
 Q1RfQUJPQ09NX1hYNXwkVVNCX1BST0RVQ1RfQUJPQ09NX1hYNnwkVVNCX1BST0RVQ1RfQUJPQ09N
 X1hYN3wkVVNCX1BST0RVQ1RfQUJPQ09NX1hYOHwkVVNCX1BST0RVQ1RfQUJPQ09NX1hYOSkiOwor
 CWFjdGlvbiAia2xkbG9hZCBpZl9hdWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BQ0NUT04iOwor
 CW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9BQ0NUT05fU1MxMDAxfCRVU0JfUFJPRFVD
 VF9BQ0NUT05fVVNCMzIwX0VDKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2F1ZSI7Cit9OworCitu
 b21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIg
 IiRVU0JfVkVORE9SX0FETVRFSyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0FE
 TVRFS19QRUdBU1VTfCRVU0JfUFJPRFVDVF9BRE1URUtfUEVHQVNVU0lJfCRVU0JfUFJPRFVDVF9B
 RE1URUtfUEVHQVNVU0lJXzJ8JFVTQl9QUk9EVUNUX0FETVRFS19QRUdBU1VTSUlfM3wkVVNCX1BS
 T0RVQ1RfQURNVEVLX1BFR0FTVVNJSV80KSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2F1ZSI7Cit9
 OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZl
 bmRvciIgIiRVU0JfVkVORE9SX0FFSSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1Rf
 QUVJX0ZBU1RFVEhFUk5FVCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2F1ZSI7Cit9OworCitub21h
 dGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRV
 U0JfVkVORE9SX0FMTElFRFRFTEVTWU4iOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNU
 X0FMTElFRFRFTEVTWU5fQVRVU0IxMDAiOworCWFjdGlvbiAia2xkbG9hZCBpZl9hdWUiOworfTsK
 Kworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5k
 b3IiICIkVVNCX1ZFTkRPUl9BVEVOIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9B
 VEVOX1VDMTEwVCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2F1ZSI7Cit9OworCitub21hdGNoIDEw
 IHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVO
 RE9SX0JFTEtJTiI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQkVMS0lOX1VTQjJM
 QU4iOworCWFjdGlvbiAia2xkbG9hZCBpZl9hdWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0
 Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9CSUxM
 SU9OVE9OIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfQklMTElPTlRPTl9VU0Ix
 MDB8JFVTQl9QUk9EVUNUX0JJTExJT05UT05fVVNCRTEwMHwkVVNCX1BST0RVQ1RfQklMTElPTlRP
 Tl9VU0JFTDEwMHwkVVNCX1BST0RVQ1RfQklMTElPTlRPTl9VU0JMUDEwMCkiOworCWFjdGlvbiAi
 a2xkbG9hZCBpZl9hdWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJb
 MC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9DT1JFR0EiOworCW1hdGNoICJw
 cm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9DT1JFR0FfRkVUSEVSX1VTQl9UWHwkVVNCX1BST0RVQ1Rf
 Q09SRUdBX0ZFVEhFUl9VU0JfVFhTKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2F1ZSI7Cit9Owor
 Citub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRv
 ciIgIiRVU0JfVkVORE9SX0RMSU5LIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1Rf
 RExJTktfRFNCNjUwfCRVU0JfUFJPRFVDVF9ETElOS19EU0I2NTBUWHwkVVNCX1BST0RVQ1RfRExJ
 TktfRFNCNjUwVFgxfCRVU0JfUFJPRFVDVF9ETElOS19EU0I2NTBUWDJ8JFVTQl9QUk9EVUNUX0RM
 SU5LX0RTQjY1MFRYM3wkVVNCX1BST0RVQ1RfRExJTktfRFNCNjUwVFg0fCRVU0JfUFJPRFVDVF9E
 TElOS19EU0I2NTBUWF9QTkEpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfYXVlIjsKK307CisKK25v
 bWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAi
 JFVTQl9WRU5ET1JfRUxDT04iOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0VMQ09O
 X1BMQU4iOworCWFjdGlvbiAia2xkbG9hZCBpZl9hdWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJ
 bWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9F
 TEVDT00iOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9FTEVDT01fTERVU0IyMHwk
 VVNCX1BST0RVQ1RfRUxFQ09NX0xEVVNCTFRYfCRVU0JfUFJPRFVDVF9FTEVDT01fTERVU0JUWDB8
 JFVTQl9QUk9EVUNUX0VMRUNPTV9MRFVTQlRYMXwkVVNCX1BST0RVQ1RfRUxFQ09NX0xEVVNCVFgy
 fCRVU0JfUFJPRFVDVF9FTEVDT01fTERVU0JUWDMpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfYXVl
 IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRj
 aCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfRUxTQSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BS
 T0RVQ1RfRUxTQV9VU0IyRVRIRVJORVQiOworCWFjdGlvbiAia2xkbG9hZCBpZl9hdWUiOworfTsK
 Kworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5k
 b3IiICIkVVNCX1ZFTkRPUl9HSUdBQllURSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RV
 Q1RfR0lHQUJZVEVfR05CUjQwMlciOworCWFjdGlvbiAia2xkbG9hZCBpZl9hdWUiOworfTsKKwor
 bm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3Ii
 ICIkVVNCX1ZFTkRPUl9IQVdLSU5HIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9I
 QVdLSU5HX1VGMTAwIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfYXVlIjsKK307CisKK25vbWF0Y2gg
 MTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9W
 RU5ET1JfSFAiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0hQX0hOMjEwRSI7CisJ
 YWN0aW9uICJrbGRsb2FkIGlmX2F1ZSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVz
 IiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0lPREFUQSI7CisJ
 bWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0lPREFUQV9VU0JFVFRYfCRVU0JfUFJPRFVD
 VF9JT0RBVEFfVVNCRVRUWFMpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfYXVlIjsKK307CisKK25v
 bWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAi
 JFVTQl9WRU5ET1JfS0lOR1NUT04iOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0tJ
 TkdTVE9OX0tOVTEwMVRYIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfYXVlIjsKK307CisKK25vbWF0
 Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVT
 Ql9WRU5ET1JfTElOS1NZUyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0xJTktT
 WVNfVVNCMTAwSDF8JFVTQl9QUk9EVUNUX0xJTktTWVNfVVNCMTAwVFh8JFVTQl9QUk9EVUNUX0xJ
 TktTWVNfVVNCMTBUfCRVU0JfUFJPRFVDVF9MSU5LU1lTX1VTQjEwVEF8JFVTQl9QUk9EVUNUX0xJ
 TktTWVNfVVNCMTBUWDF8JFVTQl9QUk9EVUNUX0xJTktTWVNfVVNCMTBUWDIpIjsKKwlhY3Rpb24g
 ImtsZGxvYWQgaWZfYXVlIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHVi
 WzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfTUVMQ08iOworCW1hdGNoICJw
 cm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9NRUxDT19MVUEyVFg1fCRVU0JfUFJPRFVDVF9NRUxDT19M
 VUFUWDF8JFVTQl9QUk9EVUNUX01FTENPX0xVQVRYNSkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9h
 dWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9NSUNST1NPRlQiOworCW1hdGNoICJwcm9kdWN0IiAi
 JFVTQl9QUk9EVUNUX01JQ1JPU09GVF9NTjExMCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2F1ZSI7
 Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2gg
 InZlbmRvciIgIiRVU0JfVkVORE9SX05FVEdFQVIiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9Q
 Uk9EVUNUX05FVEdFQVJfRkExMDEiOworCWFjdGlvbiAia2xkbG9hZCBpZl9hdWUiOworfTsKKwor
 bm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3Ii
 ICIkVVNCX1ZFTkRPUl9TSUVNRU5TIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9T
 SUVNRU5TX1NQRUVEU1RSRUFNIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfYXVlIjsKK307CisKK25v
 bWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAi
 JFVTQl9WRU5ET1JfU0lJRzIiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NJSUcy
 X1VTQlRPRVRIRVIiOworCWFjdGlvbiAia2xkbG9hZCBpZl9hdWUiOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9TTUFSVEJSSURHRVMiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NNQVJU
 QlJJREdFU19TTUFSVE5JQyI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2F1ZSI7Cit9OworCitub21h
 dGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRV
 U0JfVkVORE9SX1NNQyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1NNQ18yMjAy
 VVNCfCRVU0JfUFJPRFVDVF9TTUNfMjIwNlVTQikiOworCWFjdGlvbiAia2xkbG9hZCBpZl9hdWUi
 OworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNo
 ICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9TT0hPV0FSRSI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVT
 Ql9QUk9EVUNUX1NPSE9XQVJFX05VQjEwMHwkVVNCX1BST0RVQ1RfU09IT1dBUkVfTlVCMTEwKSI7
 CisJYWN0aW9uICJrbGRsb2FkIGlmX2F1ZSI7Cit9OworCkluZGV4OiBzeXMvZGV2L3VzYi9uZXQv
 aWZfY3VlLmNvbmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi91c2IvbmV0L2lmX2N1ZS5jb25mCShy
 ZXZpc2lvbiAwKQorKysgc3lzL2Rldi91c2IvbmV0L2lmX2N1ZS5jb25mCShyZXZpc2lvbiAwKQpA
 QCAtMCwwICsxLDE0IEBACitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0NBVEMiOworCW1hdGNoICJwcm9kdWN0IiAi
 KCRVU0JfUFJPRFVDVF9DQVRDX05FVE1BVEV8JFVTQl9QUk9EVUNUX0NBVENfTkVUTUFURTIpIjsK
 KwlhY3Rpb24gImtsZGxvYWQgaWZfY3VlIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJi
 dXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU01BUlRCUklE
 R0VTIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9TTUFSVEJSSURHRVNfU01BUlRM
 SU5LIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfY3VlIjsKK307CisKSW5kZXg6IHN5cy9kZXYvdXNi
 L25ldC9pZl9heGUuY29uZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3VzYi9uZXQvaWZfYXhlLmNv
 bmYJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi9uZXQvaWZfYXhlLmNvbmYJKHJldmlzaW9u
 IDApCkBAIC0wLDAgKzEsNDIgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAt
 OV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQUJPQ09NIjsKKwltYXRjaCAicHJv
 ZHVjdCIgIiRVU0JfUFJPRFVDVF9BQk9DT01fVUYyMDAiOworCWFjdGlvbiAia2xkbG9hZCBpZl9h
 eGUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BQ0VSQ00iOworCW1hdGNoICJwcm9kdWN0IiAiJFVT
 Ql9QUk9EVUNUX0FDRVJDTV9FUDE0MjdYMiI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2F4ZSI7Cit9
 OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZl
 bmRvciIgIiRVU0JfVkVORE9SX0FQUExFIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVD
 VF9BUFBMRV9FVEhFUk5FVCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2F4ZSI7Cit9OworCitub21h
 dGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRV
 U0JfVkVORE9SX0FTSVgiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9BU0lYX0FY
 ODgxNzJ8JFVTQl9QUk9EVUNUX0FTSVhfQVg4ODE3OHwkVVNCX1BST0RVQ1RfQVNJWF9BWDg4Nzcy
 fCRVU0JfUFJPRFVDVF9BU0lYX0FYODg3NzJBfCRVU0JfUFJPRFVDVF9BVEVOX1VDMjEwVCkiOwor
 CWFjdGlvbiAia2xkbG9hZCBpZl9heGUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9CRUxLSU4iOwor
 CW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0JFTEtJTl9GNUQ1MDU1IjsKKwlhY3Rpb24g
 ImtsZGxvYWQgaWZfYXhlIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHVi
 WzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQklMTElPTlRPTiI7CisJbWF0
 Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQklMTElPTlRPTl9VU0IyQVIiOworCWFjdGlvbiAi
 a2xkbG9hZCBpZl9heGUiOworfTsKKwpJbmRleDogc3lzL2Rldi91c2IvbmV0L2lmX2t1ZS5jb25m
 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT0KLS0tIHN5cy9kZXYvdXNiL25ldC9pZl9rdWUuY29uZgkocmV2aXNpb24gMCkK
 KysrIHN5cy9kZXYvdXNiL25ldC9pZl9rdWUuY29uZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
 NTQgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAi
 dmVuZG9yIiAiJFVTQl9WRU5ET1JfM0NPTSI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9E
 VUNUXzNDT01fM0MxOTI1MHwkVVNCX1BST0RVQ1RfM0NPTV8zQzQ2MCkiOworCWFjdGlvbiAia2xk
 bG9hZCBpZl9rdWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05
 XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BQk9DT00iOworCW1hdGNoICJwcm9k
 dWN0IiAiJFVTQl9QUk9EVUNUX0FCT0NPTV9VUkU0NTAiOworCWFjdGlvbiAia2xkbG9hZCBpZl9r
 dWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BRFMiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0Jf
 UFJPRFVDVF9BRFNfVUJTMTBCVHwkVVNCX1BST0RVQ1RfQURTX1VCUzEwQlRYKSI7CisJYWN0aW9u
 ICJrbGRsb2FkIGlmX2t1ZSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1
 YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0FPWCI7CisJbWF0Y2ggInBy
 b2R1Y3QiICIkVVNCX1BST0RVQ1RfQU9YX1VTQjEwMSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2t1
 ZSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0
 Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0FTQU5URSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNC
 X1BST0RVQ1RfQVNBTlRFX0VBIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfa3VlIjsKK307CisKK25v
 bWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAi
 JFVTQl9WRU5ET1JfQVRFTiI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0FURU5f
 RFNCNjUwQ3wkVVNCX1BST0RVQ1RfQVRFTl9VQzEwVCkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9r
 dWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9DT1JFR0EiOworCW1hdGNoICJwcm9kdWN0IiAiJFVT
 Ql9QUk9EVUNUX0NPUkVHQV9FVEhFUl9VU0JfVCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX2t1ZSI7
 Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2gg
 InZlbmRvciIgIiRVU0JfVkVORE9SX0RMSU5LIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJP
 RFVDVF9ETElOS19EU0I2NTBDIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfa3VlIjsKK307CisKK25v
 bWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAi
 JFVTQl9WRU5ET1JfRU5UUkVHQSI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0VO
 VFJFR0FfRTQ1fCRVU0JfUFJPRFVDVF9FTlRSRUdBX1hYMXwkVVNCX1BST0RVQ1RfRU5UUkVHQV9Y
 WDIpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfa3VlIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1h
 dGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfSU9E
 QVRBIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9JT0RBVEFfVVNCRVRUIjsKKwlh
 Y3Rpb24gImtsZGxvYWQgaWZfa3VlIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMi
 ICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfSkFUT04iOworCW1h
 dGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0pBVE9OX0VEQSI7CisJYWN0aW9uICJrbGRsb2Fk
 IGlmX2t1ZSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0tJTkdTVE9OIjsKKwltYXRjaCAicHJvZHVj
 dCIgIiRVU0JfUFJPRFVDVF9LSU5HU1RPTl9YWDEiOworCWFjdGlvbiAia2xkbG9hZCBpZl9rdWUi
 OworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNo
 ICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9LTFNJIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BS
 T0RVQ1RfS0xTSV9EVUgzRTEwQlR8JFVTQl9QUk9EVUNUX0tMU0lfRFVIM0UxMEJUTikiOworCWFj
 dGlvbiAia2xkbG9hZCBpZl9rdWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIg
 InVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9MSU5LU1lTIjsKKwlt
 YXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9MSU5LU1lTX1VTQjEwVCI7CisJYWN0aW9uICJr
 bGRsb2FkIGlmX2t1ZSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX01PQklMSVRZIjsKKwltYXRjaCAi
 cHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9NT0JJTElUWV9FQSI7CisJYWN0aW9uICJrbGRsb2FkIGlm
 X2t1ZSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJ
 bWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX05FVEdFQVIiOworCW1hdGNoICJwcm9kdWN0IiAi
 KCRVU0JfUFJPRFVDVF9ORVRHRUFSX0VBMTAxfCRVU0JfUFJPRFVDVF9ORVRHRUFSX0VBMTAxWCki
 OworCWFjdGlvbiAia2xkbG9hZCBpZl9rdWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2gg
 ImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9QRVJBQ09N
 IjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfUEVSQUNPTV9FTkVUfCRVU0JfUFJP
 RFVDVF9QRVJBQ09NX0VORVQyfCRVU0JfUFJPRFVDVF9QRVJBQ09NX0VORVQzKSI7CisJYWN0aW9u
 ICJrbGRsb2FkIGlmX2t1ZSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1
 YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1BPUlRHRUFSIjsKKwltYXRj
 aCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfUE9SVEdFQVJfRUE4fCRVU0JfUFJPRFVDVF9QT1JU
 R0VBUl9FQTkpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfa3VlIjsKK307CisKK25vbWF0Y2ggMTAg
 eworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5E
 T1JfUE9SVFNNSVRIIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9QT1JUU01JVEhf
 RUVBIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfa3VlIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1h
 dGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0hB
 UksiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NIQVJLX1BBIjsKKwlhY3Rpb24g
 ImtsZGxvYWQgaWZfa3VlIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHVi
 WzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0lMSUNPTSI7CisJbWF0Y2gg
 InByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1NJTElDT01fR1BFfCRVU0JfUFJPRFVDVF9TSUxJQ09N
 X1UyRSkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9rdWUiOworfTsKKworbm9tYXRjaCAxMCB7CisJ
 bWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9T
 TUMiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NNQ18yMTAyVVNCIjsKKwlhY3Rp
 b24gImtsZGxvYWQgaWZfa3VlIjsKK307CisKSW5kZXg6IHN5cy9kZXYvdXNiL25ldC9pZl9tb3Mu
 Y29uZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3VzYi9uZXQvaWZfbW9zLmNvbmYJKHJldmlzaW9u
 IDApCisrKyBzeXMvZGV2L3VzYi9uZXQvaWZfbW9zLmNvbmYJKHJldmlzaW9uIDApCkBAIC0wLDAg
 KzEsMTQgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRj
 aCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfTU9TQ0hJUCI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVT
 Ql9QUk9EVUNUX01PU0NISVBfTUNTNzczMHwkVVNCX1BST0RVQ1RfTU9TQ0hJUF9NQ1M3ODMwKSI7
 CisJYWN0aW9uICJrbGRsb2FkIGlmX21vcyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAi
 YnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NJVEVDT01F
 VSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfU0lURUNPTUVVX0xOMDMwIjsKKwlh
 Y3Rpb24gImtsZGxvYWQgaWZfbW9zIjsKK307CisKSW5kZXg6IHN5cy9kZXYvdXNiL21pc2MvdWZt
 LmNvbmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi91c2IvbWlzYy91Zm0uY29uZgkocmV2aXNpb24g
 MCkKKysrIHN5cy9kZXYvdXNiL21pc2MvdWZtLmNvbmYJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
 NyBAQAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2
 ZW5kb3IiICIkVVNCX1ZFTkRPUl9DWVBSRVNTIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJP
 RFVDVF9DWVBSRVNTX0ZNUkFESU8iOworCWFjdGlvbiAia2xkbG9hZCB1Zm0iOworfTsKKwpJbmRl
 eDogc3lzL2Rldi91c2IvbWlzYy91ZGJwLmNvbmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi91c2Iv
 bWlzYy91ZGJwLmNvbmYJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi9taXNjL3VkYnAuY29u
 ZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ORVRDSElQIjsK
 KwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9ORVRDSElQX1RVUkJPQ09OTkVDVCI7CisJ
 YWN0aW9uICJrbGRsb2FkIHVkYnAiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIg
 InVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9QUk9MSUZJQyI7CisJ
 bWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1BST0xJRklDX1BMMjMwMXwkVVNCX1BST0RV
 Q1RfUFJPTElGSUNfUEwyMzAyKSI7CisJYWN0aW9uICJrbGRsb2FkIHVkYnAiOworfTsKKworbm9t
 YXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIk
 VVNCX1ZFTkRPUl9BTkNIT1IiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0FOQ0hP
 Ul9FWkxJTksiOworCWFjdGlvbiAia2xkbG9hZCB1ZGJwIjsKK307CisKK25vbWF0Y2ggMTAgewor
 CW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1Jf
 R0VORVNZUyI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfR0VORVNZU19HTDYyMFVT
 QiI7CisJYWN0aW9uICJrbGRsb2FkIHVkYnAiOworfTsKKwpJbmRleDogc3lzL2Rldi91c2Ivd2xh
 bi9pZl91cGd0LmNvbmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi91c2Ivd2xhbi9pZl91cGd0LmNv
 bmYJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi93bGFuL2lmX3VwZ3QuY29uZgkocmV2aXNp
 b24gMCkKQEAgLTAsMCArMSw5OCBAQAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJb
 MC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BQ0NUT04iOworCW1hdGNoICJw
 cm9kdWN0IiAiJFVTQl9QUk9EVUNUX0FDQ1RPTl9QUklTTV9HVCI7CisJYWN0aW9uICJrbGRsb2Fk
 IGlmX3VwZ3QiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsi
 OworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9CRUxLSU4iOworCW1hdGNoICJwcm9kdWN0
 IiAiJFVTQl9QUk9EVUNUX0JFTEtJTl9GNUQ3MDUwIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfdXBn
 dCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0
 Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0NJU0NPTElOS1NZUyI7CisJbWF0Y2ggInByb2R1Y3Qi
 ICIkVVNCX1BST0RVQ1RfQ0lTQ09MSU5LU1lTX1dVU0I1NEFHIjsKKwlhY3Rpb24gImtsZGxvYWQg
 aWZfdXBndCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0NPTkNFUFRST05JQyI7CisJbWF0Y2ggInBy
 b2R1Y3QiICIkVVNCX1BST0RVQ1RfQ09OQ0VQVFJPTklDX1BSSVNNX0dUIjsKKwlhY3Rpb24gImts
 ZGxvYWQgaWZfdXBndCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0RFTEwiOworCW1hdGNoICJwcm9k
 dWN0IiAiKCRVU0JfUFJPRFVDVF9ERUxMX1BSSVNNX0dUXzF8JFVTQl9QUk9EVUNUX0RFTExfUFJJ
 U01fR1RfMikiOworCWFjdGlvbiAia2xkbG9hZCBpZl91cGd0IjsKK307CisKK25vbWF0Y2ggMTAg
 eworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5E
 T1JfRlNDIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9GU0NfRTU0MDAiOworCWFj
 dGlvbiAia2xkbG9hZCBpZl91cGd0IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMi
 ICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfR0xPQkVTUEFOIjsK
 KwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfR0xPQkVTUEFOX1BSSVNNX0dUXzF8JFVT
 Ql9QUk9EVUNUX0dMT0JFU1BBTl9QUklTTV9HVF8yKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3Vw
 Z3QiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ORVRHRUFSIjsKKwltYXRjaCAicHJvZHVjdCIgIiRV
 U0JfUFJPRFVDVF9ORVRHRUFSX1dHMTExVjJfMiI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3VwZ3Qi
 OworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNo
 ICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9JTlRFUlNJTCI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNC
 X1BST0RVQ1RfSU5URVJTSUxfUFJJU01fR1QiOworCWFjdGlvbiAia2xkbG9hZCBpZl91cGd0IjsK
 K307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAi
 dmVuZG9yIiAiJFVTQl9WRU5ET1JfU01DIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVD
 VF9TTUNfMjg2MldHIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfdXBndCI7Cit9OworCitub21hdGNo
 IDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0Jf
 VkVORE9SX1VTUiI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfVVNSX1VTUjU0MjIi
 OworCWFjdGlvbiAia2xkbG9hZCBpZl91cGd0IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNo
 ICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfV0lTVFJP
 Tk5FV0VCIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9XSVNUUk9OTkVXRUJfVVIw
 NDVHIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfdXBndCI7Cit9OworCitub21hdGNoIDEwIHsKKwlt
 YXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1hZ
 UkFURVgiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9YWVJBVEVYX1BSSVNNX0dU
 XzF8JFVTQl9QUk9EVUNUX1hZUkFURVhfUFJJU01fR1RfMikiOworCWFjdGlvbiAia2xkbG9hZCBp
 Zl91cGd0IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsK
 KwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfWkNPTSI7CisJbWF0Y2ggInByb2R1Y3QiICIo
 JFVTQl9QUk9EVUNUX1pDT01fWEc3MDNBfCRVU0JfUFJPRFVDVF9aQ09NX1hNMTQyKSI7CisJYWN0
 aW9uICJrbGRsb2FkIGlmX3VwZ3QiOworfTsKKwpJbmRleDogc3lzL2Rldi91c2Ivd2xhbi9pZl91
 YXRoLmNvbmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi91c2Ivd2xhbi9pZl91YXRoLmNvbmYJKHJl
 dmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi93bGFuL2lmX3VhdGguY29uZgkocmV2aXNpb24gMCkK
 QEAgLTAsMCArMSw5MSBAQAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsi
 OworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BQ0NUT04iOworCW1hdGNoICJwcm9kdWN0
 IiAiKCRVU0JfUFJPRFVDVF9BQ0NUT05fU01DV1VTQkd8JFVTQl9QUk9EVUNUX0FDQ1RPTl9TTUNX
 VVNCVEcyKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3VhdGgiOworfTsKKworbm9tYXRjaCAxMCB7
 CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRP
 Ul9BVEhFUk9TIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9BVEhFUk9TX0FSNTUy
 MyI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3VhdGgiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0
 Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BVEhF
 Uk9TMiI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0FUSEVST1MyX0FSNTUyM18x
 fCRVU0JfUFJPRFVDVF9BVEhFUk9TMl9BUjU1MjNfMnwkVVNCX1BST0RVQ1RfQVRIRVJPUzJfQVI1
 NTIzXzMpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfdWF0aCI7Cit9OworCitub21hdGNoIDEwIHsK
 KwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9S
 X0NPTkNFUFRST05JQyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0NPTkNFUFRS
 T05JQ19BUjU1MjNfMXwkVVNCX1BST0RVQ1RfQ09OQ0VQVFJPTklDX0FSNTUyM18yKSI7CisJYWN0
 aW9uICJrbGRsb2FkIGlmX3VhdGgiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIg
 InVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ETElOSyI7CisJbWF0
 Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0RMSU5LX0RXTEFHMTIyfCRVU0JfUFJPRFVDVF9E
 TElOS19EV0xBRzEzMnwkVVNCX1BST0RVQ1RfRExJTktfRFdMRzEzMikiOworCWFjdGlvbiAia2xk
 bG9hZCBpZl91YXRoIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAt
 OV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfRExJTksyIjsKKwltYXRjaCAicHJv
 ZHVjdCIgIiRVU0JfUFJPRFVDVF9ETElOSzJfRFdBMTIwIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZf
 dWF0aCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJ
 bWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0dJR0FTRVQiOworCW1hdGNoICJwcm9kdWN0IiAi
 KCRVU0JfUFJPRFVDVF9HSUdBU0VUX0FSNTUyM3wkVVNCX1BST0RVQ1RfR0lHQVNFVF9TTUNXVVNC
 VEcpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfdWF0aCI7Cit9OworCitub21hdGNoIDEwIHsKKwlt
 YXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0dM
 T0JBTFNVTiI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0dMT0JBTFNVTl9BUjU1
 MjNfMXwkVVNCX1BST0RVQ1RfR0xPQkFMU1VOX0FSNTUyM18yKSI7CisJYWN0aW9uICJrbGRsb2Fk
 IGlmX3VhdGgiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsi
 OworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ORVRHRUFSIjsKKwltYXRjaCAicHJvZHVj
 dCIgIiRVU0JfUFJPRFVDVF9ORVRHRUFSX1dHMTExVSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3Vh
 dGgiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ORVRHRUFSMyI7CisJbWF0Y2ggInByb2R1Y3QiICIo
 JFVTQl9QUk9EVUNUX05FVEdFQVIzX1dHMTExVHwkVVNCX1BST0RVQ1RfTkVUR0VBUjNfV1BOMTEx
 fCRVU0JfUFJPRFVDVF9ORVRHRUFSM19XUE4xMTFfMikiOworCWFjdGlvbiAia2xkbG9hZCBpZl91
 YXRoIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwlt
 YXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfVU1FRElBIjsKKwltYXRjaCAicHJvZHVjdCIgIigk
 VVNCX1BST0RVQ1RfVU1FRElBX1RFVzQ0NFVCRVV8JFVTQl9QUk9EVUNUX1VNRURJQV9BUjU1MjNf
 MikiOworCWFjdGlvbiAia2xkbG9hZCBpZl91YXRoIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1h
 dGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfV0lT
 VFJPTk5FV0VCIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfV0lTVFJPTk5FV0VC
 X0FSNTUyM18xfCRVU0JfUFJPRFVDVF9XSVNUUk9OTkVXRUJfQVI1NTIzXzIpIjsKKwlhY3Rpb24g
 ImtsZGxvYWQgaWZfdWF0aCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1
 YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1pDT00iOworCW1hdGNoICJw
 cm9kdWN0IiAiJFVTQl9QUk9EVUNUX1pDT01fQVI1NTIzIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZf
 dWF0aCI7Cit9OworCkluZGV4OiBzeXMvZGV2L3VzYi93bGFuL2lmX3VydHcuY29uZgo9PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09Ci0tLSBzeXMvZGV2L3VzYi93bGFuL2lmX3VydHcuY29uZgkocmV2aXNpb24gMCkKKysrIHN5
 cy9kZXYvdXNiL3dsYW4vaWZfdXJ0dy5jb25mCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBA
 Citub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRv
 ciIgIiRVU0JfVkVORE9SX05FVEdFQVIiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVD
 VF9ORVRHRUFSX1dHMTExVjN8JFVTQl9QUk9EVUNUX05FVEdFQVJfV0cxMTFWMnwweDYxMDApIjsK
 KwlhY3Rpb24gImtsZGxvYWQgaWZfdXJ0dyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAi
 YnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1JFQUxURUsi
 OworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9SRUFMVEVLX1JUTDgxODdCXzB8JFVT
 Ql9QUk9EVUNUX1JFQUxURUtfUlRMODE4N0JfMXwkVVNCX1BST0RVQ1RfUkVBTFRFS19SVEw4MTg3
 Ql8yfCRVU0JfUFJPRFVDVF9SRUFMVEVLX1JUTDgxODcpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZf
 dXJ0dyI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJ
 bWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NJVEVDT01FVSI7CisJbWF0Y2ggInByb2R1Y3Qi
 ICIoJFVTQl9QUk9EVUNUX1NJVEVDT01FVV9XTDE2OFY0fCRVU0JfUFJPRFVDVF9TSVRFQ09NRVVf
 V0wxNjhWMSkiOworCWFjdGlvbiAia2xkbG9hZCBpZl91cnR3IjsKK307CisKK25vbWF0Y2ggMTAg
 eworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5E
 T1JfQVNVUyI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQVNVU19QNUJfV0lGSSI7
 CisJYWN0aW9uICJrbGRsb2FkIGlmX3VydHciOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2gg
 ImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9CRUxLSU4i
 OworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0JFTEtJTl9GNUQ3MDUwRSI7CisJYWN0
 aW9uICJrbGRsb2FkIGlmX3VydHciOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIg
 InVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9MSU5LU1lTNCI7CisJ
 bWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfTElOS1NZUzRfV1VTQjU0R0NWMiI7CisJYWN0
 aW9uICJrbGRsb2FkIGlmX3VydHciOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIg
 InVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9TVVJFQ09NIjsKKwlt
 YXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9TVVJFQ09NX0VQOTAwMUcyQSI7CisJYWN0aW9u
 ICJrbGRsb2FkIGlmX3VydHciOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVo
 dWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9PVklTTElOSyI7CisJbWF0
 Y2ggInByb2R1Y3QiICIweDgxODciOworCWFjdGlvbiAia2xkbG9hZCBpZl91cnR3IjsKK307CisK
 K25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9y
 IiAiJFVTQl9WRU5ET1JfRElDS1NNSVRIIjsKKwltYXRjaCAicHJvZHVjdCIgIjB4OTQwMSI7CisJ
 YWN0aW9uICJrbGRsb2FkIGlmX3VydHciOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9IUCI7CisJbWF0
 Y2ggInByb2R1Y3QiICIweGNhMDIiOworCWFjdGlvbiAia2xkbG9hZCBpZl91cnR3IjsKK307CisK
 K25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9y
 IiAiJFVTQl9WRU5ET1JfTE9HSVRFQyI7CisJbWF0Y2ggInByb2R1Y3QiICIweDAxMGMiOworCWFj
 dGlvbiAia2xkbG9hZCBpZl91cnR3IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMi
 ICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU1BIQUlST04iOwor
 CW1hdGNoICJwcm9kdWN0IiAiMHgwMTUwIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfdXJ0dyI7Cit9
 OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZl
 bmRvciIgIiRVU0JfVkVORE9SX1FDT00iOworCW1hdGNoICJwcm9kdWN0IiAiMHg2MjMyIjsKKwlh
 Y3Rpb24gImtsZGxvYWQgaWZfdXJ0dyI7Cit9OworCkluZGV4OiBzeXMvZGV2L3VzYi93bGFuL2lm
 X3J1bS5jb25mCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvdXNiL3dsYW4vaWZfcnVtLmNvbmYJKHJl
 dmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi93bGFuL2lmX3J1bS5jb25mCShyZXZpc2lvbiAwKQpA
 QCAtMCwwICsxLDE1NCBAQAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsi
 OworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BQk9DT00iOworCW1hdGNoICJwcm9kdWN0
 IiAiKCRVU0JfUFJPRFVDVF9BQk9DT01fSFdVNTRETXwkVVNCX1BST0RVQ1RfQUJPQ09NX1JUMjU3
 M18yfCRVU0JfUFJPRFVDVF9BQk9DT01fUlQyNTczXzN8JFVTQl9QUk9EVUNUX0FCT0NPTV9SVDI1
 NzNfNHwkVVNCX1BST0RVQ1RfQUJPQ09NX1dVRzI3MDApIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZf
 cnVtIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwlt
 YXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQU1JVCI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNC
 X1BST0RVQ1RfQU1JVF9DR1dMVVNCMkdPIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVtIjsKK307
 CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVu
 ZG9yIiAiJFVTQl9WRU5ET1JfQVNVUyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNU
 X0FTVVNfUlQyNTczXzF8JFVTQl9QUk9EVUNUX0FTVVNfUlQyNTczXzIkVVNCX1BST0RVQ1RfQkVM
 S0lOICRVU0JfUFJPRFVDVF9CRUxLSU5fRjVENzA1MEF8JFVTQl9QUk9EVUNUX0JFTEtJTl9GNUQ5
 MDUwVjMpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVtIjsKK307CisKK25vbWF0Y2ggMTAgewor
 CW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1Jf
 Q0lTQ09MSU5LU1lTIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfQ0lTQ09MSU5L
 U1lTX1dVU0I1NEdDfCRVU0JfUFJPRFVDVF9DSVNDT0xJTktTWVNfV1VTQjU0R1IkVVNCX1BST0RV
 Q1RfQ09OQ0VQVFJPTklDMiAkVVNCX1BST0RVQ1RfQ09OQ0VQVFJPTklDMl9DNTRSVTIpIjsKKwlh
 Y3Rpb24gImtsZGxvYWQgaWZfcnVtIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMi
 ICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQ09SRUdBIjsKKwlt
 YXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfQ09SRUdBX0NHV0xVU0IyR0x8JFVTQl9QUk9E
 VUNUX0NPUkVHQV9DR1dMVVNCMkdQWCkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW0iOworfTsK
 Kworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5k
 b3IiICIkVVNCX1ZFTkRPUl9ESUNLU01JVEgiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJP
 RFVDVF9ESUNLU01JVEhfQ1dEODU0RnwkVVNCX1BST0RVQ1RfRElDS1NNSVRIX1JUMjU3MykiOwor
 CWFjdGlvbiAia2xkbG9hZCBpZl9ydW0iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9FRElNQVgiOwor
 CW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0VESU1BWF9FVzczMThVU0ciOworCWFjdGlv
 biAia2xkbG9hZCBpZl9ydW0iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVo
 dWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ETElOSzIiOworCW1hdGNo
 ICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9ETElOSzJfRFdMRzEyMkMxfCRVU0JfUFJPRFVDVF9E
 TElOSzJfV1VBMTM0MHwkVVNCX1BST0RVQ1RfRExJTksyX0RXQTExMXwkVVNCX1BST0RVQ1RfRExJ
 TksyX0RXQTExMCkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW0iOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9HSUdBQllURSI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0dJR0FCWVRF
 X0dOV0IwMUdTfCRVU0JfUFJPRFVDVF9HSUdBQllURV9HTldJMDVHUykiOworCWFjdGlvbiAia2xk
 bG9hZCBpZl9ydW0iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05
 XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9HSUdBU0VUIjsKKwltYXRjaCAicHJv
 ZHVjdCIgIiRVU0JfUFJPRFVDVF9HSUdBU0VUX1JUMjU3MyI7CisJYWN0aW9uICJrbGRsb2FkIGlm
 X3J1bSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJ
 bWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0dPT0RXQVkiOworCW1hdGNoICJwcm9kdWN0IiAi
 JFVTQl9QUk9EVUNUX0dPT0RXQVlfUlQyNTczIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVtIjsK
 K307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAi
 dmVuZG9yIiAiJFVTQl9WRU5ET1JfR1VJTExFTU9UIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNC
 X1BST0RVQ1RfR1VJTExFTU9UX0hXR1VTQjI1NExCfCRVU0JfUFJPRFVDVF9HVUlMTEVNT1RfSFdH
 VVNCMjU0VjJBUCkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW0iOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9IVUFXRUkzQ09NIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9IVUFXRUkz
 Q09NX1dVQjMyMEciOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW0iOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9NRUxDTyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX01FTENPX0c1NEhQ
 fCRVU0JfUFJPRFVDVF9NRUxDT19TRzU0SFB8JFVTQl9QUk9EVUNUX01FTENPX1dMSVVDR3wkVVNC
 X1BST0RVQ1RfTUVMQ09fV0xSVUNHfCRVU0JfUFJPRFVDVF9NRUxDT19XTFJVQ0dBT1NTKSI7CisJ
 YWN0aW9uICJrbGRsb2FkIGlmX3J1bSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVz
 IiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX01TSSI7CisJbWF0
 Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX01TSV9SVDI1NzNfMXwkVVNCX1BST0RVQ1RfTVNJ
 X1JUMjU3M18yfCRVU0JfUFJPRFVDVF9NU0lfUlQyNTczXzN8JFVTQl9QUk9EVUNUX01TSV9SVDI1
 NzNfNCkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW0iOworfTsKKworbm9tYXRjaCAxMCB7CisJ
 bWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9O
 T1ZBVEVDSCI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfTk9WQVRFQ0hfUlQyNTcz
 IjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVtIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNo
 ICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfUExBTkVY
 MiI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1BMQU5FWDJfR1dVUzU0SFB8JFVT
 Ql9QUk9EVUNUX1BMQU5FWDJfR1dVUzU0TUlOSTJ8JFVTQl9QUk9EVUNUX1BMQU5FWDJfR1dVU01N
 KSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1bSI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRj
 aCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1FDT00i
 OworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9RQ09NX1JUMjU3M3wkVVNCX1BST0RV
 Q1RfUUNPTV9SVDI1NzNfMnwkVVNCX1BST0RVQ1RfUUNPTV9SVDI1NzNfMykiOworCWFjdGlvbiAi
 a2xkbG9hZCBpZl9ydW0iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJb
 MC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9SQUxJTksiOworCW1hdGNoICJw
 cm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9SQUxJTktfUlQyNTczfCRVU0JfUFJPRFVDVF9SQUxJTktf
 UlQyNTczXzJ8JFVTQl9QUk9EVUNUX1JBTElOS19SVDI2NzEpIjsKKwlhY3Rpb24gImtsZGxvYWQg
 aWZfcnVtIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsK
 KwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0lURUNPTUVVIjsKKwltYXRjaCAicHJvZHVj
 dCIgIigkVVNCX1BST0RVQ1RfU0lURUNPTUVVX1dMMTEzUjJ8JFVTQl9QUk9EVUNUX1NJVEVDT01F
 VV9XTDE3MikiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW0iOworfTsKKworbm9tYXRjaCAxMCB7
 CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRP
 Ul9TUEFSS0xBTiI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfU1BBUktMQU5fUlQy
 NTczIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVtIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1h
 dGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU1VS
 RUNPTSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfU1VSRUNPTV9SVDI1NzMiOwor
 CWFjdGlvbiAia2xkbG9hZCBpZl9ydW0iOworfTsKKwpJbmRleDogc3lzL2Rldi91c2Ivd2xhbi9p
 Zl91cmFsLmNvbmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi91c2Ivd2xhbi9pZl91cmFsLmNvbmYJ
 KHJldmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi93bGFuL2lmX3VyYWwuY29uZgkocmV2aXNpb24g
 MCkKQEAgLTAsMCArMSwxMTkgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAt
 OV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQVNVUyI7CisJbWF0Y2ggInByb2R1
 Y3QiICIoJFVTQl9QUk9EVUNUX0FTVVNfV0wxNjdHfCRVU0JfUFJPRFVDVF9BU1VTX1JUMjU3MCki
 OworCWFjdGlvbiAia2xkbG9hZCBpZl91cmFsIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNo
 ICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQkVMS0lO
 IjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfQkVMS0lOX0Y1RDcwNTB8JFVTQl9Q
 Uk9EVUNUX0JFTEtJTl9GNUQ3MDUxKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3VyYWwiOworfTsK
 Kworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5k
 b3IiICIkVVNCX1ZFTkRPUl9DSVNDT0xJTktTWVMiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0Jf
 UFJPRFVDVF9DSVNDT0xJTktTWVNfSFUyMDBUU3wkVVNCX1BST0RVQ1RfQ0lTQ09MSU5LU1lTX1dV
 U0I1NEd8JFVTQl9QUk9EVUNUX0NJU0NPTElOS1NZU19XVVNCNTRHUCkiOworCWFjdGlvbiAia2xk
 bG9hZCBpZl91cmFsIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAt
 OV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQ09OQ0VQVFJPTklDMiI7CisJbWF0
 Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQ09OQ0VQVFJPTklDMl9DNTRSVSI7CisJYWN0aW9u
 ICJrbGRsb2FkIGlmX3VyYWwiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVo
 dWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9ETElOSyI7CisJbWF0Y2gg
 InByb2R1Y3QiICIkVVNCX1BST0RVQ1RfRExJTktfRFdMRzEyMiI7CisJYWN0aW9uICJrbGRsb2Fk
 IGlmX3VyYWwiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsi
 OworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9HSUdBQllURSI7CisJbWF0Y2ggInByb2R1
 Y3QiICIoJFVTQl9QUk9EVUNUX0dJR0FCWVRFX0dONTRHfCRVU0JfUFJPRFVDVF9HSUdBQllURV9H
 TldCS0cpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfdXJhbCI7Cit9OworCitub21hdGNoIDEwIHsK
 KwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9S
 X0dVSUxMRU1PVCI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfR1VJTExFTU9UX0hX
 R1VTQjI1NCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3VyYWwiOworfTsKKworbm9tYXRjaCAxMCB7
 CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRP
 Ul9NRUxDTyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX01FTENPX0tHNTR8JFVT
 Ql9QUk9EVUNUX01FTENPX0tHNTRBSXwkVVNCX1BST0RVQ1RfTUVMQ09fS0c1NFlCfCRVU0JfUFJP
 RFVDVF9NRUxDT19OSU5XSUZJKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3VyYWwiOworfTsKKwor
 bm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3Ii
 ICIkVVNCX1ZFTkRPUl9NU0kiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9NU0lf
 UlQyNTcwfCRVU0JfUFJPRFVDVF9NU0lfUlQyNTcwXzJ8JFVTQl9QUk9EVUNUX01TSV9SVDI1NzBf
 MykiOworCWFjdGlvbiAia2xkbG9hZCBpZl91cmFsIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1h
 dGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfTk9W
 QVRFQ0giOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX05PVkFURUNIX05WOTAyIjsK
 KwlhY3Rpb24gImtsZGxvYWQgaWZfdXJhbCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAi
 YnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1JBTElOSyI7
 CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1JBTElOS19SVDI1NzB8JFVTQl9QUk9E
 VUNUX1JBTElOS19SVDI1NzBfMnwkVVNCX1BST0RVQ1RfUkFMSU5LX1JUMjU3MF8zKSI7CisJYWN0
 aW9uICJrbGRsb2FkIGlmX3VyYWwiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIg
 InVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9TSUVNRU5TMiI7CisJ
 bWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfU0lFTUVOUzJfV0w1NEciOworCWFjdGlvbiAi
 a2xkbG9hZCBpZl91cmFsIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHVi
 WzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU01DIjsKKwltYXRjaCAicHJv
 ZHVjdCIgIiRVU0JfUFJPRFVDVF9TTUNfMjg2MldHIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfdXJh
 bCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0
 Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NQSEFJUk9OIjsKKwltYXRjaCAicHJvZHVjdCIgIiRV
 U0JfUFJPRFVDVF9TUEhBSVJPTl9VQjgwMVIiOworCWFjdGlvbiAia2xkbG9hZCBpZl91cmFsIjsK
 K307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAi
 dmVuZG9yIiAiJFVTQl9WRU5ET1JfU1VSRUNPTSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BS
 T0RVQ1RfU1VSRUNPTV9SVDI1NzAiOworCWFjdGlvbiAia2xkbG9hZCBpZl91cmFsIjsKK307CisK
 K25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9y
 IiAiJFVTQl9WRU5ET1JfVlRFQ0giOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1ZU
 RUNIX1JUMjU3MCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3VyYWwiOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9aSU5XRUxMIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9aSU5XRUxMX1JU
 MjU3MCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3VyYWwiOworfTsKKwpJbmRleDogc3lzL2Rldi91
 c2Ivd2xhbi9pZl9ydW4uY29uZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3VzYi93bGFuL2lmX3J1
 bi5jb25mCShyZXZpc2lvbiAwKQorKysgc3lzL2Rldi91c2Ivd2xhbi9pZl9ydW4uY29uZgkocmV2
 aXNpb24gMCkKQEAgLTAsMCArMSwzNDMgQEAKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1
 aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQUJPQ09NIjsKKwltYXRj
 aCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfQUJPQ09NX1JUMjc3MHwkVVNCX1BST0RVQ1RfQUJP
 Q09NX1JUMjg3MHwkVVNCX1BST0RVQ1RfQUJPQ09NX1JUMzA3MHwkVVNCX1BST0RVQ1RfQUJPQ09N
 X1JUMzA3MXwkVVNCX1BST0RVQ1RfQUJPQ09NX1JUMzA3MikiOworCWFjdGlvbiAia2xkbG9hZCBp
 Zl9ydW4iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOwor
 CW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BQk9DT00yIjsKKwltYXRjaCAicHJvZHVjdCIg
 IiRVU0JfUFJPRFVDVF9BQk9DT00yX1JUMjg3MF8xIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVu
 IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRj
 aCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQUNDVE9OIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNC
 X1BST0RVQ1RfQUNDVE9OX1JUMjc3MHwkVVNCX1BST0RVQ1RfQUNDVE9OX1JUMjg3MF8xfCRVU0Jf
 UFJPRFVDVF9BQ0NUT05fUlQyODcwXzJ8JFVTQl9QUk9EVUNUX0FDQ1RPTl9SVDI4NzBfM3wkVVNC
 X1BST0RVQ1RfQUNDVE9OX1JUMjg3MF80fCRVU0JfUFJPRFVDVF9BQ0NUT05fUlQyODcwXzV8JFVT
 Ql9QUk9EVUNUX0FDQ1RPTl9SVDMwNzB8JFVTQl9QUk9EVUNUX0FDQ1RPTl9SVDMwNzBfMXwkVVNC
 X1BST0RVQ1RfQUNDVE9OX1JUMzA3MF8yfCRVU0JfUFJPRFVDVF9BQ0NUT05fUlQzMDcwXzN8JFVT
 Ql9QUk9EVUNUX0FDQ1RPTl9SVDMwNzBfNHwkVVNCX1BST0RVQ1RfQUNDVE9OX1JUMzA3MF81KSI7
 CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAi
 YnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0FJUlRJRVMi
 OworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0FJUlRJRVNfUlQzMDcwIjsKKwlhY3Rp
 b24gImtsZGxvYWQgaWZfcnVuIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1
 aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQUxMV0lOIjsKKwltYXRj
 aCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfQUxMV0lOX1JUMjA3MHwkVVNCX1BST0RVQ1RfQUxM
 V0lOX1JUMjc3MHwkVVNCX1BST0RVQ1RfQUxMV0lOX1JUMjg3MHwkVVNCX1BST0RVQ1RfQUxMV0lO
 X1JUMzA3MHwkVVNCX1BST0RVQ1RfQUxMV0lOX1JUMzA3MXwkVVNCX1BST0RVQ1RfQUxMV0lOX1JU
 MzA3MnwkVVNCX1BST0RVQ1RfQUxMV0lOX1JUMzU3MikiOworCWFjdGlvbiAia2xkbG9hZCBpZl9y
 dW4iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BTUlHTyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVT
 Ql9QUk9EVUNUX0FNSUdPX1JUMjg3MF8xfCRVU0JfUFJPRFVDVF9BTUlHT19SVDI4NzBfMikiOwor
 CWFjdGlvbiAia2xkbG9hZCBpZl9ydW4iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BTUlUIjsKKwlt
 YXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfQU1JVF9DR1dMVVNCMkdOUnwkVVNCX1BST0RV
 Q1RfQU1JVF9SVDI4NzBfMSkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW4iOworfTsKKworbm9t
 YXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIk
 VVNCX1ZFTkRPUl9BTUlUMiI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQU1JVDJf
 UlQyODcwIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVuIjsKK307CisKK25vbWF0Y2ggMTAgewor
 CW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1Jf
 QVNVUyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0FTVVNfUlQyODcwXzF8JFVT
 Ql9QUk9EVUNUX0FTVVNfUlQyODcwXzJ8JFVTQl9QUk9EVUNUX0FTVVNfUlQyODcwXzN8JFVTQl9Q
 Uk9EVUNUX0FTVVNfUlQyODcwXzR8JFVTQl9QUk9EVUNUX0FTVVNfUlQyODcwXzV8JFVTQl9QUk9E
 VUNUX0FTVVNfVVNCTjEzfCRVU0JfUFJPRFVDVF9BU1VTX1JUMzA3MF8xKSI7CisJYWN0aW9uICJr
 bGRsb2FkIGlmX3J1biI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0FTVVMyIjsKKwltYXRjaCAicHJv
 ZHVjdCIgIiRVU0JfUFJPRFVDVF9BU1VTMl9VU0JOMTEiOworCWFjdGlvbiAia2xkbG9hZCBpZl9y
 dW4iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BWlVSRVdBVkUiOworCW1hdGNoICJwcm9kdWN0IiAi
 KCRVU0JfUFJPRFVDVF9BWlVSRVdBVkVfUlQyODcwXzF8JFVTQl9QUk9EVUNUX0FaVVJFV0FWRV9S
 VDI4NzBfMnwkVVNCX1BST0RVQ1RfQVpVUkVXQVZFX1JUMzA3MF8xfCRVU0JfUFJPRFVDVF9BWlVS
 RVdBVkVfUlQzMDcwXzJ8JFVTQl9QUk9EVUNUX0FaVVJFV0FWRV9SVDMwNzBfMykiOworCWFjdGlv
 biAia2xkbG9hZCBpZl9ydW4iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVo
 dWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9CRUxLSU4iOworCW1hdGNo
 ICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9CRUxLSU5fRjVEODA1M1YzfCRVU0JfUFJPRFVDVF9C
 RUxLSU5fRjVEODA1NXwkVVNCX1BST0RVQ1RfQkVMS0lOX0Y2RDQwNTBWMXwkVVNCX1BST0RVQ1Rf
 QkVMS0lOX1JUMjg3MF8xfCRVU0JfUFJPRFVDVF9CRUxLSU5fUlQyODcwXzIpIjsKKwlhY3Rpb24g
 ImtsZGxvYWQgaWZfcnVuIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHVi
 WzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQ0lTQ09MSU5LU1lTMiI7CisJ
 bWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQ0lTQ09MSU5LU1lTMl9SVDMwNzAiOworCWFj
 dGlvbiAia2xkbG9hZCBpZl9ydW4iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIg
 InVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9DSVNDT0xJTktTWVMz
 IjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9DSVNDT0xJTktTWVMzX1JUMzA3MCI7
 CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAi
 YnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0NPTkNFUFRS
 T05JQzIiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9DT05DRVBUUk9OSUMyX1JU
 Mjg3MF8xfCRVU0JfUFJPRFVDVF9DT05DRVBUUk9OSUMyX1JUMjg3MF8yfCRVU0JfUFJPRFVDVF9D
 T05DRVBUUk9OSUMyX1JUMjg3MF8zfCRVU0JfUFJPRFVDVF9DT05DRVBUUk9OSUMyX1JUMjg3MF80
 fCRVU0JfUFJPRFVDVF9DT05DRVBUUk9OSUMyX1JUMjg3MF81fCRVU0JfUFJPRFVDVF9DT05DRVBU
 Uk9OSUMyX1JUMjg3MF82fCRVU0JfUFJPRFVDVF9DT05DRVBUUk9OSUMyX1JUMjg3MF83fCRVU0Jf
 UFJPRFVDVF9DT05DRVBUUk9OSUMyX1JUMjg3MF84fCRVU0JfUFJPRFVDVF9DT05DRVBUUk9OSUMy
 X1JUMzA3MF8xfCRVU0JfUFJPRFVDVF9DT05DRVBUUk9OSUMyX1JUMzA3MF8yfCRVU0JfUFJPRFVD
 VF9DT05DRVBUUk9OSUMyX1ZJR09STjYxKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9
 OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZl
 bmRvciIgIiRVU0JfVkVORE9SX0NPUkVHQSI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9E
 VUNUX0NPUkVHQV9DR1dMVVNCMzAwR05NfCRVU0JfUFJPRFVDVF9DT1JFR0FfUlQyODcwXzF8JFVT
 Ql9QUk9EVUNUX0NPUkVHQV9SVDI4NzBfMnwkVVNCX1BST0RVQ1RfQ09SRUdBX1JUMjg3MF8zfCRV
 U0JfUFJPRFVDVF9DT1JFR0FfUlQzMDcwKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9
 OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZl
 bmRvciIgIiRVU0JfVkVORE9SX0NZQkVSVEFOIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJP
 RFVDVF9DWUJFUlRBTl9SVDI4NzAiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW4iOworfTsKKwor
 bm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3Ii
 ICIkVVNCX1ZFTkRPUl9ETElOSyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0RM
 SU5LX1JUMjg3MHwkVVNCX1BST0RVQ1RfRExJTktfUlQzMDcyKSI7CisJYWN0aW9uICJrbGRsb2Fk
 IGlmX3J1biI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0RMSU5LMiI7CisJbWF0Y2ggInByb2R1Y3Qi
 ICIoJFVTQl9QUk9EVUNUX0RMSU5LMl9EV0ExMzB8JFVTQl9QUk9EVUNUX0RMSU5LMl9SVDI4NzBf
 MXwkVVNCX1BST0RVQ1RfRExJTksyX1JUMjg3MF8yfCRVU0JfUFJPRFVDVF9ETElOSzJfUlQzMDcw
 XzF8JFVTQl9QUk9EVUNUX0RMSU5LMl9SVDMwNzBfMnwkVVNCX1BST0RVQ1RfRExJTksyX1JUMzA3
 MF8zfCRVU0JfUFJPRFVDVF9ETElOSzJfUlQzMDcwXzR8JFVTQl9QUk9EVUNUX0RMSU5LMl9SVDMw
 NzBfNXwkVVNCX1BST0RVQ1RfRExJTksyX1JUMzA3MnwkVVNCX1BST0RVQ1RfRExJTksyX1JUMzA3
 Ml8xKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCitub21hdGNoIDEwIHsKKwlt
 YXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0VE
 SU1BWCI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0VESU1BWF9FVzc3MTd8JFVT
 Ql9QUk9EVUNUX0VESU1BWF9FVzc3MTh8JFVTQl9QUk9EVUNUX0VESU1BWF9SVDI4NzBfMSkiOwor
 CWFjdGlvbiAia2xkbG9hZCBpZl9ydW4iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9FTkNPUkUiOwor
 CW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9FTkNPUkVfUlQzMDcwXzF8JFVTQl9QUk9E
 VUNUX0VOQ09SRV9SVDMwNzBfMnwkVVNCX1BST0RVQ1RfRU5DT1JFX1JUMzA3MF8zKSI7CisJYWN0
 aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAi
 dWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0dJR0FCWVRFIjsKKwlt
 YXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfR0lHQUJZVEVfR05XQjMxTnwkVVNCX1BST0RV
 Q1RfR0lHQUJZVEVfR05XQjMyTHwkVVNCX1BST0RVQ1RfR0lHQUJZVEVfUlQyODcwXzEpIjsKKwlh
 Y3Rpb24gImtsZGxvYWQgaWZfcnVuIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMi
 ICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfR0lHQVNFVCI7CisJ
 bWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0dJR0FTRVRfUlQzMDcwXzF8JFVTQl9QUk9E
 VUNUX0dJR0FTRVRfUlQzMDcwXzIpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVuIjsKK307CisK
 K25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9y
 IiAiJFVTQl9WRU5ET1JfR1VJTExFTU9UIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVD
 VF9HVUlMTEVNT1RfSFdOVTMwMCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCitu
 b21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIg
 IiRVU0JfVkVORE9SX0hBV0tJTkciOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9I
 QVdLSU5HX0hXVU4yfCRVU0JfUFJPRFVDVF9IQVdLSU5HX1JUMjg3MF8xfCRVU0JfUFJPRFVDVF9I
 QVdLSU5HX1JUMjg3MF8yfCRVU0JfUFJPRFVDVF9IQVdLSU5HX1JUMzA3MCkiOworCWFjdGlvbiAi
 a2xkbG9hZCBpZl9ydW4iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJb
 MC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9JT0RBVEEiOworCW1hdGNoICJw
 cm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9JT0RBVEFfUlQzMDcyXzF8JFVTQl9QUk9EVUNUX0lPREFU
 QV9SVDMwNzJfMnwkVVNCX1BST0RVQ1RfSU9EQVRBX1JUMzA3Ml8zfCRVU0JfUFJPRFVDVF9JT0RB
 VEFfUlQzMDcyXzQpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVuIjsKK307CisKK25vbWF0Y2gg
 MTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9W
 RU5ET1JfTElOS1NZUzQiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9MSU5LU1lT
 NF9SVDMwNzB8JFVTQl9QUk9EVUNUX0xJTktTWVM0X1dVU0IxMDB8JFVTQl9QUk9EVUNUX0xJTktT
 WVM0X1dVU0I1NEdDVjN8JFVTQl9QUk9EVUNUX0xJTktTWVM0X1dVU0I2MDBOfCRVU0JfUFJPRFVD
 VF9MSU5LU1lTNF9XVVNCNjAwTlYyKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9Owor
 Citub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRv
 ciIgIiRVU0JfVkVORE9SX0xPR0lURUMiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVD
 VF9MT0dJVEVDX1JUMjg3MF8xfCRVU0JfUFJPRFVDVF9MT0dJVEVDX1JUMjg3MF8yfCRVU0JfUFJP
 RFVDVF9MT0dJVEVDX1JUMjg3MF8zKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9Owor
 Citub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRv
 ciIgIiRVU0JfVkVORE9SX01FTENPIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1Rf
 TUVMQ09fUlQyODcwXzF8JFVTQl9QUk9EVUNUX01FTENPX1JUMjg3MF8yfCRVU0JfUFJPRFVDVF9N
 RUxDT19XTElVQ0FHMzAwTnwkVVNCX1BST0RVQ1RfTUVMQ09fV0xJVUNHMzAwTnwkVVNCX1BST0RV
 Q1RfTUVMQ09fV0xJVUNHMzAxTnwkVVNCX1BST0RVQ1RfTUVMQ09fV0xJVUNHTikiOworCWFjdGlv
 biAia2xkbG9hZCBpZl9ydW4iOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVo
 dWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9NT1RPUk9MQTQiOworCW1h
 dGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9NT1RPUk9MQTRfUlQyNzcwfCRVU0JfUFJPRFVD
 VF9NT1RPUk9MQTRfUlQzMDcwKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCitu
 b21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIg
 IiRVU0JfVkVORE9SX01TSSI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX01TSV9S
 VDMwNzBfMXwkVVNCX1BST0RVQ1RfTVNJX1JUMzA3MF8yfCRVU0JfUFJPRFVDVF9NU0lfUlQzMDcw
 XzN8JFVTQl9QUk9EVUNUX01TSV9SVDMwNzBfNHwkVVNCX1BST0RVQ1RfTVNJX1JUMzA3MF81fCRV
 U0JfUFJPRFVDVF9NU0lfUlQzMDcwXzZ8JFVTQl9QUk9EVUNUX01TSV9SVDMwNzBfN3wkVVNCX1BS
 T0RVQ1RfTVNJX1JUMzA3MF84fCRVU0JfUFJPRFVDVF9NU0lfUlQzMDcwXzl8JFVTQl9QUk9EVUNU
 X01TSV9SVDMwNzBfMTB8JFVTQl9QUk9EVUNUX01TSV9SVDMwNzBfMTEpIjsKKwlhY3Rpb24gImts
 ZGxvYWQgaWZfcnVuIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAt
 OV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfT1ZJU0xJTksiOworCW1hdGNoICJw
 cm9kdWN0IiAiJFVTQl9QUk9EVUNUX09WSVNMSU5LX1JUMzA3MiI7CisJYWN0aW9uICJrbGRsb2Fk
 IGlmX3J1biI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1BBUkEiOworCW1hdGNoICJwcm9kdWN0IiAi
 JFVTQl9QUk9EVUNUX1BBUkFfUlQzMDcwIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVuIjsKK307
 CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVu
 ZG9yIiAiJFVTQl9WRU5ET1JfUEVHQVRST04iOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJP
 RFVDVF9QRUdBVFJPTl9SVDI4NzB8JFVTQl9QUk9EVUNUX1BFR0FUUk9OX1JUMzA3MHwkVVNCX1BS
 T0RVQ1RfUEVHQVRST05fUlQzMDcwXzJ8JFVTQl9QUk9EVUNUX1BFR0FUUk9OX1JUMzA3MF8zKSI7
 CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAi
 YnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1BISUxJUFMi
 OworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1BISUxJUFNfUlQyODcwIjsKKwlhY3Rp
 b24gImtsZGxvYWQgaWZfcnVuIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1
 aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfUExBTkVYMiI7CisJbWF0
 Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1BMQU5FWDJfR1dVUzMwME1JTklTfCRVU0JfUFJP
 RFVDVF9QTEFORVgyX0dXVVNNSUNST058JFVTQl9QUk9EVUNUX1BMQU5FWDJfUlQyODcwfCRVU0Jf
 UFJPRFVDVF9QTEFORVgyX1JUMzA3MCkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW4iOworfTsK
 Kworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5k
 b3IiICIkVVNCX1ZFTkRPUl9RQ09NIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9R
 Q09NX1JUMjg3MCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCitub21hdGNoIDEw
 IHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVO
 RE9SX1FVQU5UQSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfUVVBTlRBX1JUMzA3
 MCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRj
 aCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1JBTElO
 SyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1JBTElOS19SVDIwNzB8JFVTQl9Q
 Uk9EVUNUX1JBTElOS19SVDI3NzB8JFVTQl9QUk9EVUNUX1JBTElOS19SVDI4NzB8JFVTQl9QUk9E
 VUNUX1JBTElOS19SVDMwNzB8JFVTQl9QUk9EVUNUX1JBTElOS19SVDMwNzF8JFVTQl9QUk9EVUNU
 X1JBTElOS19SVDMwNzJ8JFVTQl9QUk9EVUNUX1JBTElOS19SVDMzNzB8JFVTQl9QUk9EVUNUX1JB
 TElOS19SVDM1NzJ8JFVTQl9QUk9EVUNUX1JBTElOS19SVDgwNzApIjsKKwlhY3Rpb24gImtsZGxv
 YWQgaWZfcnVuIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0r
 IjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0FNU1VORzIiOworCW1hdGNoICJwcm9k
 dWN0IiAiJFVTQl9QUk9EVUNUX1NBTVNVTkcyX1JUMjg3MF8xIjsKKwlhY3Rpb24gImtsZGxvYWQg
 aWZfcnVuIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsK
 KwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0VOQU8iOworCW1hdGNoICJwcm9kdWN0IiAi
 KCRVU0JfUFJPRFVDVF9TRU5BT19SVDI4NzBfMXwkVVNCX1BST0RVQ1RfU0VOQU9fUlQyODcwXzJ8
 JFVTQl9QUk9EVUNUX1NFTkFPX1JUMjg3MF8zfCRVU0JfUFJPRFVDVF9TRU5BT19SVDI4NzBfNHwk
 VVNCX1BST0RVQ1RfU0VOQU9fUlQzMDcwfCRVU0JfUFJPRFVDVF9TRU5BT19SVDMwNzF8JFVTQl9Q
 Uk9EVUNUX1NFTkFPX1JUMzA3Ml8xfCRVU0JfUFJPRFVDVF9TRU5BT19SVDMwNzJfMnwkVVNCX1BS
 T0RVQ1RfU0VOQU9fUlQzMDcyXzN8JFVTQl9QUk9EVUNUX1NFTkFPX1JUMzA3Ml80fCRVU0JfUFJP
 RFVDVF9TRU5BT19SVDMwNzJfNSkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW4iOworfTsKKwor
 bm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3Ii
 ICIkVVNCX1ZFTkRPUl9TSVRFQ09NRVUiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVD
 VF9TSVRFQ09NRVVfUlQyNzcwfCRVU0JfUFJPRFVDVF9TSVRFQ09NRVVfUlQyODcwXzF8JFVTQl9Q
 Uk9EVUNUX1NJVEVDT01FVV9SVDI4NzBfMnwkVVNCX1BST0RVQ1RfU0lURUNPTUVVX1JUMjg3MF8z
 fCRVU0JfUFJPRFVDVF9TSVRFQ09NRVVfUlQyODcwXzR8JFVTQl9QUk9EVUNUX1NJVEVDT01FVV9S
 VDMwNzB8JFVTQl9QUk9EVUNUX1NJVEVDT01FVV9SVDMwNzBfMnwkVVNCX1BST0RVQ1RfU0lURUNP
 TUVVX1JUMzA3MF8zfCRVU0JfUFJPRFVDVF9TSVRFQ09NRVVfUlQzMDcwXzR8JFVTQl9QUk9EVUNU
 X1NJVEVDT01FVV9SVDMwNzF8JFVTQl9QUk9EVUNUX1NJVEVDT01FVV9SVDMwNzJfMXwkVVNCX1BS
 T0RVQ1RfU0lURUNPTUVVX1JUMzA3Ml8yfCRVU0JfUFJPRFVDVF9TSVRFQ09NRVVfUlQzMDcyXzN8
 JFVTQl9QUk9EVUNUX1NJVEVDT01FVV9SVDMwNzJfNHwkVVNCX1BST0RVQ1RfU0lURUNPTUVVX1JU
 MzA3Ml81fCRVU0JfUFJPRFVDVF9TSVRFQ09NRVVfUlQzMDcyXzZ8JFVTQl9QUk9EVUNUX1NJVEVD
 T01FVV9XTDYwOCkiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW4iOworfTsKKworbm9tYXRjaCAx
 MCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZF
 TkRPUl9TUEFSS0xBTiI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1NQQVJLTEFO
 X1JUMjg3MF8xfCRVU0JfUFJPRFVDVF9TUEFSS0xBTl9SVDMwNzApIjsKKwlhY3Rpb24gImtsZGxv
 YWQgaWZfcnVuIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0r
 IjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU1dFRVgyIjsKKwltYXRjaCAicHJvZHVj
 dCIgIigkVVNCX1BST0RVQ1RfU1dFRVgyX0xXMTUzfCRVU0JfUFJPRFVDVF9TV0VFWDJfTFczMDN8
 JFVTQl9QUk9EVUNUX1NXRUVYMl9MVzMxMykiOworCWFjdGlvbiAia2xkbG9hZCBpZl9ydW4iOwor
 fTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2
 ZW5kb3IiICIkVVNCX1ZFTkRPUl9UT1NISUJBIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJP
 RFVDVF9UT1NISUJBX1JUMzA3MCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCitu
 b21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIg
 IiRVU0JfVkVORE9SX1VNRURJQSI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfVU1F
 RElBX1JUMjg3MF8xIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVuIjsKK307CisKK25vbWF0Y2gg
 MTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9W
 RU5ET1JfWkNPTSI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX1pDT01fUlQyODcw
 XzF8JFVTQl9QUk9EVUNUX1pDT01fUlQyODcwXzIpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfcnVu
 IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRj
 aCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfWklOV0VMTCI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVT
 Ql9QUk9EVUNUX1pJTldFTExfUlQyODcwXzF8JFVTQl9QUk9EVUNUX1pJTldFTExfUlQyODcwXzJ8
 JFVTQl9QUk9EVUNUX1pJTldFTExfUlQzMDcwfCRVU0JfUFJPRFVDVF9aSU5XRUxMX1JUMzA3Ml8x
 fCRVU0JfUFJPRFVDVF9aSU5XRUxMX1JUMzA3Ml8yKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3J1
 biI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0
 Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1pZWEVMIjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNC
 X1BST0RVQ1RfWllYRUxfUlQyODcwXzF8JFVTQl9QUk9EVUNUX1pZWEVMX1JUMjg3MF8yKSI7CisJ
 YWN0aW9uICJrbGRsb2FkIGlmX3J1biI7Cit9OworCkluZGV4OiBzeXMvZGV2L3VzYi93bGFuL2lm
 X3p5ZC5jb25mCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvdXNiL3dsYW4vaWZfenlkLmNvbmYJKHJl
 dmlzaW9uIDApCisrKyBzeXMvZGV2L3VzYi93bGFuL2lmX3p5ZC5jb25mCShyZXZpc2lvbiAwKQpA
 QCAtMCwwICsxLDIzOCBAQAorbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsi
 OworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl8zQ09NMiI7CisJbWF0Y2ggInByb2R1Y3Qi
 ICIkVVNCX1BST0RVQ1RfM0NPTTJfM0NSVVNCMTAwNzUiOworCWFjdGlvbiAia2xkbG9hZCBpZl96
 eWQiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BQk9DT00iOworCW1hdGNoICJwcm9kdWN0IiAiJFVT
 Ql9QUk9EVUNUX0FCT0NPTV9XTDU0IjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfenlkIjsKK307CisK
 K25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9y
 IiAiJFVTQl9WRU5ET1JfQVNVUyI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQVNV
 U19XTDE1OUciOworCWFjdGlvbiAia2xkbG9hZCBpZl96eWQiOworfTsKKworbm9tYXRjaCAxMCB7
 CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRP
 Ul9DWUJFUlRBTiI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfQ1lCRVJUQU5fVEc1
 NFVTQiI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3p5ZCI7Cit9OworCitub21hdGNoIDEwIHsKKwlt
 YXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0RS
 QVlURUsiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0RSQVlURUtfVklHT1I1NTAi
 OworCWFjdGlvbiAia2xkbG9hZCBpZl96eWQiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2gg
 ImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9QTEFORVgy
 IjsKKwltYXRjaCAicHJvZHVjdCIgIigkVVNCX1BST0RVQ1RfUExBTkVYMl9HV1VTNTRHRHwkVVNC
 X1BST0RVQ1RfUExBTkVYMl9HV1VTNTRHWkwpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfenlkIjsK
 K307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAi
 dmVuZG9yIiAiJFVTQl9WRU5ET1JfUExBTkVYMyI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9Q
 Uk9EVUNUX1BMQU5FWDNfR1dVUzU0R1p8JFVTQl9QUk9EVUNUX1BMQU5FWDNfR1dVUzU0TUlOSSki
 OworCWFjdGlvbiAia2xkbG9hZCBpZl96eWQiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2gg
 ImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9TQUdFTSI7
 CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfU0FHRU1fWEc3NjBBIjsKKwlhY3Rpb24g
 ImtsZGxvYWQgaWZfenlkIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHVi
 WzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfU0VOQU8iOworCW1hdGNoICJw
 cm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NFTkFPX05VQjgzMDEiOworCWFjdGlvbiAia2xkbG9hZCBp
 Zl96eWQiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOwor
 CW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9TSVRFQ09NRVUiOworCW1hdGNoICJwcm9kdWN0
 IiAiJFVTQl9QUk9EVUNUX1NJVEVDT01FVV9XTDExMyI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3p5
 ZCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0
 Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1NXRUVYIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0Jf
 UFJPRFVDVF9TV0VFWF9aRDEyMTEiOworCWFjdGlvbiAia2xkbG9hZCBpZl96eWQiOworfTsKKwor
 bm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3Ii
 ICIkVVNCX1ZFTkRPUl9URUtSQU0iOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9U
 RUtSQU1fUVVJQ0tXTEFOfCRVU0JfUFJPRFVDVF9URUtSQU1fWkQxMjExXzF8JFVTQl9QUk9EVUNU
 X1RFS1JBTV9aRDEyMTFfMikiOworCWFjdGlvbiAia2xkbG9hZCBpZl96eWQiOworfTsKKworbm9t
 YXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIk
 VVNCX1ZFTkRPUl9UV0lOTU9TIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9UV0lO
 TU9TX0cyNDAiOworCWFjdGlvbiAia2xkbG9hZCBpZl96eWQiOworfTsKKworbm9tYXRjaCAxMCB7
 CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRP
 Ul9VTUVESUEiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9VTUVESUFfQUxMMDI5
 OFYyfCRVU0JfUFJPRFVDVF9VTUVESUFfVEVXNDI5VUJfQXwkVVNCX1BST0RVQ1RfVU1FRElBX1RF
 VzQyOVVCKSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3p5ZCI7Cit9OworCitub21hdGNoIDEwIHsK
 KwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9S
 X1dJU1RST05ORVdFQiI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfV0lTVFJPTk5F
 V0VCX1VSMDU1RyI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3p5ZCI7Cit9OworCitub21hdGNoIDEw
 IHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVO
 RE9SX1pDT00iOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1pDT01fWkQxMjExIjsK
 KwlhY3Rpb24gImtsZGxvYWQgaWZfenlkIjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJi
 dXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfWllEQVMiOwor
 CW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1pZREFTX1pEMTIxMSI7CisJYWN0aW9uICJr
 bGRsb2FkIGlmX3p5ZCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1pZWEVMIjsKKwltYXRjaCAicHJv
 ZHVjdCIgIigkVVNCX1BST0RVQ1RfWllYRUxfQUcyMjVIfCRVU0JfUFJPRFVDVF9aWVhFTF9aWUFJ
 UkcyMjB8JFVTQl9QUk9EVUNUX1pZWEVMX0cyMDBWMikiOworCWFjdGlvbiAia2xkbG9hZCBpZl96
 eWQiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1h
 dGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9BQ0NUT04iOworCW1hdGNoICJwcm9kdWN0IiAiKCRV
 U0JfUFJPRFVDVF9BQ0NUT05fU01DV1VTQkdfTkZ8JFVTQl9QUk9EVUNUX0FDQ1RPTl9TTUNXVVNC
 R3wkVVNCX1BST0RVQ1RfQUNDVE9OX1pEMTIxMUIpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfenlk
 IjsKK307CisKK25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRj
 aCAidmVuZG9yIiAiJFVTQl9WRU5ET1JfQVNVUyI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BS
 T0RVQ1RfQVNVU19BOVRfV0lGSSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3p5ZCI7Cit9OworCitu
 b21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIg
 IiRVU0JfVkVORE9SX0JFTEtJTiI7CisJbWF0Y2ggInByb2R1Y3QiICIoJFVTQl9QUk9EVUNUX0JF
 TEtJTl9GNUQ3MDUwX1Y0MDAwfCRVU0JfUFJPRFVDVF9CRUxLSU5fWkQxMjExQikiOworCWFjdGlv
 biAia2xkbG9hZCBpZl96eWQiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVo
 dWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9DSVNDT0xJTktTWVMiOwor
 CW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX0NJU0NPTElOS1NZU19XVVNCRjU0RyI7CisJ
 YWN0aW9uICJrbGRsb2FkIGlmX3p5ZCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVz
 IiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX0ZJQkVSTElORSI7
 CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfRklCRVJMSU5FX1dMNDMwVSI7CisJYWN0
 aW9uICJrbGRsb2FkIGlmX3p5ZCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAi
 dWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX01FTENPIjsKKwltYXRj
 aCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9NRUxDT19LRzU0TCI7CisJYWN0aW9uICJrbGRsb2Fk
 IGlmX3p5ZCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7
 CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1BISUxJUFMiOworCW1hdGNoICJwcm9kdWN0
 IiAiJFVTQl9QUk9EVUNUX1BISUxJUFNfU05VNTYwMCI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3p5
 ZCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0
 Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1BMQU5FWDIiOworCW1hdGNoICJwcm9kdWN0IiAiJFVT
 Ql9QUk9EVUNUX1BMQU5FWDJfR1dfVVM1NEdYUyI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3p5ZCI7
 Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2gg
 InZlbmRvciIgIiRVU0JfVkVORE9SX1NBR0VNIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJP
 RFVDVF9TQUdFTV9YRzc2TkEiOworCWFjdGlvbiAia2xkbG9hZCBpZl96eWQiOworfTsKKworbm9t
 YXRjaCAxMCB7CisJbWF0Y2ggImJ1cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIk
 VVNCX1ZFTkRPUl9TSVRFQ09NRVUiOworCW1hdGNoICJwcm9kdWN0IiAiJFVTQl9QUk9EVUNUX1NJ
 VEVDT01FVV9aRDEyMTFCIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfenlkIjsKK307CisKK25vbWF0
 Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9yIiAiJFVT
 Ql9WRU5ET1JfVU1FRElBIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0JfUFJPRFVDVF9VTUVESUFf
 VEVXNDI5VUJDMSI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3p5ZCI7Cit9OworCitub21hdGNoIDEw
 IHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVO
 RE9SX1VTUiI7CisJbWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfVVNSX1VTUjU0MjMiOwor
 CWFjdGlvbiAia2xkbG9hZCBpZl96eWQiOworfTsKKworbm9tYXRjaCAxMCB7CisJbWF0Y2ggImJ1
 cyIgInVodWJbMC05XSsiOworCW1hdGNoICJ2ZW5kb3IiICIkVVNCX1ZFTkRPUl9WVEVDSCI7CisJ
 bWF0Y2ggInByb2R1Y3QiICIkVVNCX1BST0RVQ1RfVlRFQ0hfWkQxMjExQiI7CisJYWN0aW9uICJr
 bGRsb2FkIGlmX3p5ZCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1Ylsw
 LTldKyI7CisJbWF0Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1pDT00iOworCW1hdGNoICJwcm9k
 dWN0IiAiJFVTQl9QUk9EVUNUX1pDT01fWkQxMjExQiI7CisJYWN0aW9uICJrbGRsb2FkIGlmX3p5
 ZCI7Cit9OworCitub21hdGNoIDEwIHsKKwltYXRjaCAiYnVzIiAidWh1YlswLTldKyI7CisJbWF0
 Y2ggInZlbmRvciIgIiRVU0JfVkVORE9SX1pZREFTIjsKKwltYXRjaCAicHJvZHVjdCIgIiRVU0Jf
 UFJPRFVDVF9aWURBU19aRDEyMTFCIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfenlkIjsKK307CisK
 K25vbWF0Y2ggMTAgeworCW1hdGNoICJidXMiICJ1aHViWzAtOV0rIjsKKwltYXRjaCAidmVuZG9y
 IiAiJFVTQl9WRU5ET1JfWllYRUwiOworCW1hdGNoICJwcm9kdWN0IiAiKCRVU0JfUFJPRFVDVF9a
 WVhFTF9NMjAyfCRVU0JfUFJPRFVDVF9aWVhFTF9HMjAyfCRVU0JfUFJPRFVDVF9aWVhFTF9HMjIw
 VjIpIjsKKwlhY3Rpb24gImtsZGxvYWQgaWZfenlkIjsKK307CisK
 --bcaec5215a4d67837904a6632e36--

From: Warner Losh <imp@bsdimp.com>
To: Robert Millan <rmh@debian.org>
Cc: FreeBSD-gnats-submit@freebsd.org, freebsd-bugs@freebsd.org,
        freebsd-hackers@freebsd.org, freebsd-usb@freebsd.org
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Thu, 23 Jun 2011 12:37:33 -0600

 How'd you go about generating all these .conf files?
 
 I don't see where you defined USB_* as variables in them either.  Maybe =
 you could point me at it?
 
 Warner
 
 On Jun 23, 2011, at 10:00 AM, Robert Millan wrote:
 
 > <usb.diff>
 

From: Hans Petter Selasky <hselasky@c2i.net>
To: freebsd-hackers@freebsd.org
Cc: Warner Losh <imp@bsdimp.com>,
 Robert Millan <rmh@debian.org>,
 freebsd-bugs@freebsd.org,
 FreeBSD-gnats-submit@freebsd.org,
 freebsd-usb@freebsd.org
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Thu, 23 Jun 2011 22:03:41 +0200

 On Thursday 23 June 2011 20:37:33 Warner Losh wrote:
 > How'd you go about generating all these .conf files?
 > 
 > I don't see where you defined USB_* as variables in them either.  Maybe you
 > could point me at it?
 > 
 > Warner
 > 
 > On Jun 23, 2011, at 10:00 AM, Robert Millan wrote:
 > > <usb.diff>
 
 Hi Warner,
 
 It looks like he is simply grepping for the USB_VENDOR_XXX entries in the *.c 
 files. I would like to have these config files in 9-current when all the 
 issues are resolved regarding auto-generating the .conf files.
 
 --HPS

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: conf/157903: commit references a PR
Date: Fri, 24 Jun 2011 02:30:22 +0000 (UTC)

 Author: hselasky
 Date: Fri Jun 24 02:30:02 2011
 New Revision: 223486
 URL: http://svn.freebsd.org/changeset/base/223486
 
 Log:
   - Move all USB device ID arrays into so-called sections,
     sorted according to the mode which they support:
   	host, device or dual mode
   - Add generic tool to extract these data:
   	tools/bus_autoconf
   
   Discussed with:	imp
   Suggested by:	Robert Millan <rmh@debian.org>
   PR:		misc/157903
   MFC after:	14 days
 
 Added:
   head/tools/tools/bus_autoconf/
   head/tools/tools/bus_autoconf/Makefile   (contents, props changed)
   head/tools/tools/bus_autoconf/bus_autoconf.c   (contents, props changed)
   head/tools/tools/bus_autoconf/bus_autoconf.h   (contents, props changed)
   head/tools/tools/bus_autoconf/bus_autoconf.sh   (contents, props changed)
 Modified:
   head/sys/dev/sound/usb/uaudio.c
   head/sys/dev/usb/input/atp.c
   head/sys/dev/usb/input/uhid.c
   head/sys/dev/usb/net/if_aue.c
   head/sys/dev/usb/net/if_axe.c
   head/sys/dev/usb/net/if_cdce.c
   head/sys/dev/usb/net/if_cue.c
   head/sys/dev/usb/net/if_ipheth.c
   head/sys/dev/usb/net/if_kue.c
   head/sys/dev/usb/net/if_mos.c
   head/sys/dev/usb/net/if_rue.c
   head/sys/dev/usb/net/if_udav.c
   head/sys/dev/usb/net/uhso.c
   head/sys/dev/usb/serial/u3g.c
   head/sys/dev/usb/serial/uark.c
   head/sys/dev/usb/serial/ubsa.c
   head/sys/dev/usb/serial/uchcom.c
   head/sys/dev/usb/serial/ucycom.c
   head/sys/dev/usb/serial/uftdi.c
   head/sys/dev/usb/serial/ugensa.c
   head/sys/dev/usb/serial/uipaq.c
   head/sys/dev/usb/serial/ulpt.c
   head/sys/dev/usb/serial/umcs.c
   head/sys/dev/usb/serial/umct.c
   head/sys/dev/usb/serial/umodem.c
   head/sys/dev/usb/serial/umoscom.c
   head/sys/dev/usb/serial/uplcom.c
   head/sys/dev/usb/serial/uslcom.c
   head/sys/dev/usb/serial/uvisor.c
   head/sys/dev/usb/serial/uvscom.c
   head/sys/dev/usb/storage/umass.c
   head/sys/dev/usb/usbdi.h
   head/sys/dev/usb/wlan/if_rum.c
   head/sys/dev/usb/wlan/if_run.c
   head/sys/dev/usb/wlan/if_uath.c
   head/sys/dev/usb/wlan/if_upgt.c
   head/sys/dev/usb/wlan/if_ural.c
   head/sys/dev/usb/wlan/if_urtw.c
   head/sys/dev/usb/wlan/if_zyd.c
   head/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c
   head/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c
 
 Modified: head/sys/dev/sound/usb/uaudio.c
 ==============================================================================
 --- head/sys/dev/sound/usb/uaudio.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/sound/usb/uaudio.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -531,6 +531,15 @@ static driver_t uaudio_driver = {
  	.size = sizeof(struct uaudio_softc),
  };
  
 +static const STRUCT_USB_HOST_ID __used uaudio_devs[] = {
 +	/* Generic USB audio class match */
 +	{USB_IFACE_CLASS(UICLASS_AUDIO),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_AUDIOCONTROL),},
 +	/* Generic USB MIDI class match */
 +	{USB_IFACE_CLASS(UICLASS_AUDIO),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_MIDISTREAM),},
 +};
 +
  static int
  uaudio_probe(device_t dev)
  {
 
 Modified: head/sys/dev/usb/input/atp.c
 ==============================================================================
 --- head/sys/dev/usb/input/atp.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/input/atp.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -240,7 +240,7 @@ struct atp_dev_params {
  	},
  };
  
 -static const struct usb_device_id atp_devs[] = {
 +static const STRUCT_USB_HOST_ID atp_devs[] = {
  	/* Core Duo MacBook & MacBook Pro */
  	{ USB_VPI(USB_VENDOR_APPLE, 0x0217, ATP_DEV_PARAMS_0) },
  	{ USB_VPI(USB_VENDOR_APPLE, 0x0218, ATP_DEV_PARAMS_0) },
 
 Modified: head/sys/dev/usb/input/uhid.c
 ==============================================================================
 --- head/sys/dev/usb/input/uhid.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/input/uhid.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -607,29 +607,33 @@ uhid_ioctl(struct usb_fifo *fifo, u_long
  	return (error);
  }
  
 +static const STRUCT_USB_HOST_ID uhid_devs[] = {
 +	/* generic HID class */
 +	{USB_IFACE_CLASS(UICLASS_HID),},
 +	/* the Xbox 360 gamepad doesn't use the HID class */
 +	{USB_IFACE_CLASS(UICLASS_VENDOR),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_XBOX360_CONTROLLER),
 +	 USB_IFACE_PROTOCOL(UIPROTO_XBOX360_GAMEPAD),},
 +};
 +
  static int
  uhid_probe(device_t dev)
  {
  	struct usb_attach_arg *uaa = device_get_ivars(dev);
 +	int error;
  
  	DPRINTFN(11, "\n");
  
 -	if (uaa->usb_mode != USB_MODE_HOST) {
 +	if (uaa->usb_mode != USB_MODE_HOST)
  		return (ENXIO);
 -	}
 -	if (uaa->info.bInterfaceClass != UICLASS_HID) {
  
 -		/* the Xbox 360 gamepad doesn't use the HID class */
 +	error = usbd_lookup_id_by_uaa(uhid_devs, sizeof(uhid_devs), uaa);
 +	if (error)
 +		return (error);
  
 -		if ((uaa->info.bInterfaceClass != UICLASS_VENDOR) ||
 -		    (uaa->info.bInterfaceSubClass != UISUBCLASS_XBOX360_CONTROLLER) ||
 -		    (uaa->info.bInterfaceProtocol != UIPROTO_XBOX360_GAMEPAD)) {
 -			return (ENXIO);
 -		}
 -	}
 -	if (usb_test_quirk(uaa, UQ_HID_IGNORE)) {
 +	if (usb_test_quirk(uaa, UQ_HID_IGNORE))
  		return (ENXIO);
 -	}
 +
  	return (BUS_PROBE_GENERIC);
  }
  
 
 Modified: head/sys/dev/usb/net/if_aue.c
 ==============================================================================
 --- head/sys/dev/usb/net/if_aue.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/net/if_aue.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -110,7 +110,7 @@ SYSCTL_INT(_hw_usb_aue, OID_AUTO, debug,
  /*
   * Various supported device vendors/products.
   */
 -static const struct usb_device_id aue_devs[] = {
 +static const STRUCT_USB_HOST_ID aue_devs[] = {
  #define	AUE_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
      AUE_DEV(3COM, 3C460B, AUE_FLAG_PII),
      AUE_DEV(ABOCOM, DSB650TX_PNA, 0),
 
 Modified: head/sys/dev/usb/net/if_axe.c
 ==============================================================================
 --- head/sys/dev/usb/net/if_axe.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/net/if_axe.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -133,7 +133,7 @@ SYSCTL_INT(_hw_usb_axe, OID_AUTO, debug,
  /*
   * Various supported device vendors/products.
   */
 -static const struct usb_device_id axe_devs[] = {
 +static const STRUCT_USB_HOST_ID axe_devs[] = {
  #define	AXE_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
  	AXE_DEV(ABOCOM, UF200, 0),
  	AXE_DEV(ACERCM, EP1427X2, 0),
 
 Modified: head/sys/dev/usb/net/if_cdce.c
 ==============================================================================
 --- head/sys/dev/usb/net/if_cdce.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/net/if_cdce.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -263,7 +263,7 @@ static const struct usb_ether_methods cd
  	.ue_setpromisc = cdce_setpromisc,
  };
  
 -static const struct usb_device_id cdce_devs[] = {
 +static const STRUCT_USB_HOST_ID cdce_host_devs[] = {
  	{USB_VPI(USB_VENDOR_ACERLABS, USB_PRODUCT_ACERLABS_M5632, CDCE_FLAG_NO_UNION)},
  	{USB_VPI(USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250, CDCE_FLAG_NO_UNION)},
  	{USB_VPI(USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQLINUX, CDCE_FLAG_NO_UNION)},
 @@ -277,7 +277,9 @@ static const struct usb_device_id cdce_d
  	{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLA300, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)},
  	{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLC700, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)},
  	{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLC750, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)},
 +};
  
 +static const STRUCT_USB_DUAL_ID cdce_dual_devs[] = {
  	{USB_IF_CSI(UICLASS_CDC, UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL, 0)},
  	{USB_IF_CSI(UICLASS_CDC, UISUBCLASS_MOBILE_DIRECT_LINE_MODEL, 0)},
  	{USB_IF_CSI(UICLASS_CDC, UISUBCLASS_NETWORK_CONTROL_MODEL, 0)},
 @@ -472,8 +474,12 @@ static int
  cdce_probe(device_t dev)
  {
  	struct usb_attach_arg *uaa = device_get_ivars(dev);
 +	int error;
  
 -	return (usbd_lookup_id_by_uaa(cdce_devs, sizeof(cdce_devs), uaa));
 +	error = usbd_lookup_id_by_uaa(cdce_host_devs, sizeof(cdce_host_devs), uaa);
 +	if (error)
 +		error = usbd_lookup_id_by_uaa(cdce_dual_devs, sizeof(cdce_dual_devs), uaa);
 +	return (error);
  }
  
  static void
 
 Modified: head/sys/dev/usb/net/if_cue.c
 ==============================================================================
 --- head/sys/dev/usb/net/if_cue.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/net/if_cue.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -88,7 +88,7 @@ __FBSDID("$FreeBSD$");
  
  /* Belkin F5U111 adapter covered by NETMATE entry */
  
 -static const struct usb_device_id cue_devs[] = {
 +static const STRUCT_USB_HOST_ID cue_devs[] = {
  #define	CUE_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
  	CUE_DEV(CATC, NETMATE),
  	CUE_DEV(CATC, NETMATE2),
 
 Modified: head/sys/dev/usb/net/if_ipheth.c
 ==============================================================================
 --- head/sys/dev/usb/net/if_ipheth.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/net/if_ipheth.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -148,7 +148,7 @@ static const struct usb_ether_methods ip
      USB_IFACE_CLASS(c), USB_IFACE_SUBCLASS(sc), \
      USB_IFACE_PROTOCOL(pt)
  
 -static const struct usb_device_id ipheth_devs[] = {
 +static const STRUCT_USB_HOST_ID ipheth_devs[] = {
  	{IPHETH_ID(USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE,
  	    IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
  	    IPHETH_USBINTF_PROTO)},
 
 Modified: head/sys/dev/usb/net/if_kue.c
 ==============================================================================
 --- head/sys/dev/usb/net/if_kue.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/net/if_kue.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -100,7 +100,7 @@ __FBSDID("$FreeBSD$");
  /*
   * Various supported device vendors/products.
   */
 -static const struct usb_device_id kue_devs[] = {
 +static const STRUCT_USB_HOST_ID kue_devs[] = {
  #define	KUE_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
  	KUE_DEV(3COM, 3C19250),
  	KUE_DEV(3COM, 3C460),
 
 Modified: head/sys/dev/usb/net/if_mos.c
 ==============================================================================
 --- head/sys/dev/usb/net/if_mos.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/net/if_mos.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -146,7 +146,7 @@ SYSCTL_INT(_hw_usb_mos, OID_AUTO, debug,
  
  
  /* Various supported device vendors/products. */
 -static const struct usb_device_id mos_devs[] = {
 +static const STRUCT_USB_HOST_ID mos_devs[] = {
  	{USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7730, MCS7730)},
  	{USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7830, MCS7830)},
  	{USB_VPI(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN030, MCS7830)},
 
 Modified: head/sys/dev/usb/net/if_rue.c
 ==============================================================================
 --- head/sys/dev/usb/net/if_rue.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/net/if_rue.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -108,7 +108,7 @@ SYSCTL_INT(_hw_usb_rue, OID_AUTO, debug,
   * Various supported device vendors/products.
   */
  
 -static const struct usb_device_id rue_devs[] = {
 +static const STRUCT_USB_HOST_ID rue_devs[] = {
  	{USB_VPI(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAKTX, 0)},
  	{USB_VPI(USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_USBKR100, 0)},
  	{USB_VPI(USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01, 0)},
 
 Modified: head/sys/dev/usb/net/if_udav.c
 ==============================================================================
 --- head/sys/dev/usb/net/if_udav.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/net/if_udav.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -199,7 +199,7 @@ SYSCTL_INT(_hw_usb_udav, OID_AUTO, debug
  #define	UDAV_CLRBIT(sc, reg, x)	\
  	udav_csr_write1(sc, reg, udav_csr_read1(sc, reg) & ~(x))
  
 -static const struct usb_device_id udav_devs[] = {
 +static const STRUCT_USB_HOST_ID udav_devs[] = {
  	/* ShanTou DM9601 USB NIC */
  	{USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9601, 0)},
  	/* ShanTou ST268 USB NIC */
 
 Modified: head/sys/dev/usb/net/uhso.c
 ==============================================================================
 --- head/sys/dev/usb/net/uhso.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/net/uhso.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -247,7 +247,7 @@ static char *uhso_port_type_sysctl[] = {
  /* ifnet device unit allocations */
  static struct unrhdr *uhso_ifnet_unit = NULL;
  
 -static const struct usb_device_id uhso_devs[] = {
 +static const STRUCT_USB_HOST_ID uhso_devs[] = {
  #define	UHSO_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
  	/* Option GlobeSurfer iCON 7.2 */
  	UHSO_DEV(OPTION, GSICON72, UHSO_STATIC_IFACE),
 
 Modified: head/sys/dev/usb/serial/u3g.c
 ==============================================================================
 --- head/sys/dev/usb/serial/u3g.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/u3g.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -182,7 +182,7 @@ MODULE_DEPEND(u3g, ucom, 1, 1, 1);
  MODULE_DEPEND(u3g, usb, 1, 1, 1);
  MODULE_VERSION(u3g, 1);
  
 -static const struct usb_device_id u3g_devs[] = {
 +static const STRUCT_USB_HOST_ID u3g_devs[] = {
  #define	U3G_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
  	U3G_DEV(ACERP, H10, 0),
  	U3G_DEV(AIRPLUS, MCD650, 0),
 
 Modified: head/sys/dev/usb/serial/uark.c
 ==============================================================================
 --- head/sys/dev/usb/serial/uark.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/uark.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -170,7 +170,7 @@ MODULE_DEPEND(uark, ucom, 1, 1, 1);
  MODULE_DEPEND(uark, usb, 1, 1, 1);
  MODULE_VERSION(uark, 1);
  
 -static const struct usb_device_id uark_devs[] = {
 +static const STRUCT_USB_HOST_ID uark_devs[] = {
  	{USB_VPI(USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116, 0)},
  };
  
 
 Modified: head/sys/dev/usb/serial/ubsa.c
 ==============================================================================
 --- head/sys/dev/usb/serial/ubsa.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/ubsa.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -239,7 +239,7 @@ static const struct ucom_callback ubsa_c
  	.ucom_poll = &ubsa_poll,
  };
  
 -static const struct usb_device_id ubsa_devs[] = {
 +static const STRUCT_USB_HOST_ID ubsa_devs[] = {
  	/* AnyData ADU-500A */
  	{USB_VPI(USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_500A, 0)},
  	/* AnyData ADU-E100A/H */
 
 Modified: head/sys/dev/usb/serial/uchcom.c
 ==============================================================================
 --- head/sys/dev/usb/serial/uchcom.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/uchcom.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -204,7 +204,7 @@ static const struct uchcom_divider_recor
  
  #define	NUM_DIVIDERS	(sizeof (dividers) / sizeof (dividers[0]))
  
 -static const struct usb_device_id uchcom_devs[] = {
 +static const STRUCT_USB_HOST_ID uchcom_devs[] = {
  	{USB_VPI(USB_VENDOR_WCH, USB_PRODUCT_WCH_CH341SER, 0)},
  	{USB_VPI(USB_VENDOR_WCH2, USB_PRODUCT_WCH2_CH341SER, 0)},
  };
 
 Modified: head/sys/dev/usb/serial/ucycom.c
 ==============================================================================
 --- head/sys/dev/usb/serial/ucycom.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/ucycom.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -180,7 +180,7 @@ MODULE_VERSION(ucycom, 1);
  /*
   * Supported devices
   */
 -static const struct usb_device_id ucycom_devs[] = {
 +static const STRUCT_USB_HOST_ID ucycom_devs[] = {
  	{USB_VPI(USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EARTHMATE, MODEL_CY7C64013)},
  };
  
 
 Modified: head/sys/dev/usb/serial/uftdi.c
 ==============================================================================
 --- head/sys/dev/usb/serial/uftdi.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/uftdi.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -206,7 +206,7 @@ MODULE_DEPEND(uftdi, ucom, 1, 1, 1);
  MODULE_DEPEND(uftdi, usb, 1, 1, 1);
  MODULE_VERSION(uftdi, 1);
  
 -static struct usb_device_id uftdi_devs[] = {
 +static STRUCT_USB_HOST_ID uftdi_devs[] = {
  #define	UFTDI_DEV(v,p,t) \
    { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, UFTDI_TYPE_##t) }
  	UFTDI_DEV(ATMEL, STK541, 8U232AM),
 
 Modified: head/sys/dev/usb/serial/ugensa.c
 ==============================================================================
 --- head/sys/dev/usb/serial/ugensa.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/ugensa.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -154,7 +154,7 @@ MODULE_DEPEND(ugensa, ucom, 1, 1, 1);
  MODULE_DEPEND(ugensa, usb, 1, 1, 1);
  MODULE_VERSION(ugensa, 1);
  
 -static const struct usb_device_id ugensa_devs[] = {
 +static const STRUCT_USB_HOST_ID ugensa_devs[] = {
  	{USB_VPI(USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_PC5220, 0)},
  	{USB_VPI(USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CDMA_MODEM1, 0)},
  	{USB_VPI(USB_VENDOR_KYOCERA2, USB_PRODUCT_KYOCERA2_CDMA_MSM_K, 0)},
 
 Modified: head/sys/dev/usb/serial/uipaq.c
 ==============================================================================
 --- head/sys/dev/usb/serial/uipaq.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/uipaq.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -153,7 +153,7 @@ static const struct ucom_callback uipaq_
   * support the same hardware. Numeric values are used where no usbdevs
   * entries exist.
   */
 -static const struct usb_device_id uipaq_devs[] = {
 +static const STRUCT_USB_HOST_ID uipaq_devs[] = {
  	/* Socket USB Sync */
  	{USB_VPI(0x0104, 0x00be, 0)},
  	/* USB Sync 0301 */
 
 Modified: head/sys/dev/usb/serial/ulpt.c
 ==============================================================================
 --- head/sys/dev/usb/serial/ulpt.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/ulpt.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -483,24 +483,39 @@ ulpt_ioctl(struct usb_fifo *fifo, u_long
  	return (ENODEV);
  }
  
 +static const STRUCT_USB_HOST_ID ulpt_devs[] = {
 +	/* Uni-directional USB printer */
 +	{USB_IFACE_CLASS(UICLASS_PRINTER),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_PRINTER),
 +	 USB_IFACE_PROTOCOL(UIPROTO_PRINTER_UNI)},
 +
 +	/* Bi-directional USB printer */
 +	{USB_IFACE_CLASS(UICLASS_PRINTER),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_PRINTER),
 +	 USB_IFACE_PROTOCOL(UIPROTO_PRINTER_BI)},
 +
 +	/* 1284 USB printer */
 +	{USB_IFACE_CLASS(UICLASS_PRINTER),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_PRINTER),
 +	 USB_IFACE_PROTOCOL(UIPROTO_PRINTER_1284)},
 +};
 +
  static int
  ulpt_probe(device_t dev)
  {
  	struct usb_attach_arg *uaa = device_get_ivars(dev);
 +	int error;
  
  	DPRINTFN(11, "\n");
  
 -	if (uaa->usb_mode != USB_MODE_HOST) {
 +	if (uaa->usb_mode != USB_MODE_HOST)
  		return (ENXIO);
 -	}
 -	if ((uaa->info.bInterfaceClass == UICLASS_PRINTER) &&
 -	    (uaa->info.bInterfaceSubClass == UISUBCLASS_PRINTER) &&
 -	    ((uaa->info.bInterfaceProtocol == UIPROTO_PRINTER_UNI) ||
 -	    (uaa->info.bInterfaceProtocol == UIPROTO_PRINTER_BI) ||
 -	    (uaa->info.bInterfaceProtocol == UIPROTO_PRINTER_1284))) {
 -		return (0);
 -	}
 -	return (ENXIO);
 +
 +	error = usbd_lookup_id_by_uaa(ulpt_devs, sizeof(ulpt_devs), uaa);
 +	if (error)
 +		return (error);
 +
 +	return (BUS_PROBE_GENERIC);
  }
  
  static int
 
 Modified: head/sys/dev/usb/serial/umcs.c
 ==============================================================================
 --- head/sys/dev/usb/serial/umcs.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/umcs.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -253,7 +253,7 @@ static struct ucom_callback umcs7840_cal
  	.ucom_poll = &umcs7840_poll,
  };
  
 -static const struct usb_device_id umcs7840_devs[] = {
 +static const STRUCT_USB_HOST_ID umcs7840_devs[] = {
  	{USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7820, 0)},
  	{USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7840, 0)},
  };
 
 Modified: head/sys/dev/usb/serial/umct.c
 ==============================================================================
 --- head/sys/dev/usb/serial/umct.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/umct.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -192,7 +192,7 @@ static const struct ucom_callback umct_c
  	.ucom_poll = &umct_poll,
  };
  
 -static const struct usb_device_id umct_devs[] = {
 +static const STRUCT_USB_HOST_ID umct_devs[] = {
  	{USB_VPI(USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232, 0)},
  	{USB_VPI(USB_VENDOR_MCT, USB_PRODUCT_MCT_SITECOM_USB232, 0)},
  	{USB_VPI(USB_VENDOR_MCT, USB_PRODUCT_MCT_DU_H3SP_USB232, 0)},
 
 Modified: head/sys/dev/usb/serial/umodem.c
 ==============================================================================
 --- head/sys/dev/usb/serial/umodem.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/umodem.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -123,7 +123,7 @@ SYSCTL_INT(_hw_usb_umodem, OID_AUTO, deb
      &umodem_debug, 0, "Debug level");
  #endif
  
 -static const struct usb_device_id umodem_devs[] = {
 +static const STRUCT_USB_HOST_ID umodem_devs[] = {
  	/* Generic Modem class match */
  	{USB_IFACE_CLASS(UICLASS_CDC),
  		USB_IFACE_SUBCLASS(UISUBCLASS_ABSTRACT_CONTROL_MODEL),
 
 Modified: head/sys/dev/usb/serial/umoscom.c
 ==============================================================================
 --- head/sys/dev/usb/serial/umoscom.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/umoscom.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -280,7 +280,7 @@ MODULE_DEPEND(umoscom, ucom, 1, 1, 1);
  MODULE_DEPEND(umoscom, usb, 1, 1, 1);
  MODULE_VERSION(umoscom, 1);
  
 -static const struct usb_device_id umoscom_devs[] = {
 +static const STRUCT_USB_HOST_ID umoscom_devs[] = {
  	{USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7703, 0)}
  };
  
 
 Modified: head/sys/dev/usb/serial/uplcom.c
 ==============================================================================
 --- head/sys/dev/usb/serial/uplcom.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/uplcom.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -247,7 +247,7 @@ static struct ucom_callback uplcom_callb
  #define	UPLCOM_DEV(v,p)				\
    { USB_VENDOR(USB_VENDOR_##v), USB_PRODUCT(USB_PRODUCT_##v##_##p) }
  
 -static const struct usb_device_id uplcom_devs[] = {
 +static const STRUCT_USB_HOST_ID uplcom_devs[] = {
  	UPLCOM_DEV(ACERP, S81),			/* BenQ S81 phone */
  	UPLCOM_DEV(ADLINK, ND6530),		/* ADLINK ND-6530 USB-Serial */
  	UPLCOM_DEV(ALCATEL, OT535),		/* Alcatel One Touch 535/735 */
 
 Modified: head/sys/dev/usb/serial/uslcom.c
 ==============================================================================
 --- head/sys/dev/usb/serial/uslcom.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/uslcom.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -173,7 +173,7 @@ static struct ucom_callback uslcom_callb
  	.ucom_poll = &uslcom_poll,
  };
  
 -static const struct usb_device_id uslcom_devs[] = {
 +static const STRUCT_USB_HOST_ID uslcom_devs[] = {
  #define	USLCOM_DEV(v,p)  { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
      USLCOM_DEV(BALTECH, CARDREADER),
      USLCOM_DEV(CLIPSAL, 5500PCU),
 
 Modified: head/sys/dev/usb/serial/uvisor.c
 ==============================================================================
 --- head/sys/dev/usb/serial/uvisor.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/uvisor.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -253,7 +253,7 @@ MODULE_DEPEND(uvisor, ucom, 1, 1, 1);
  MODULE_DEPEND(uvisor, usb, 1, 1, 1);
  MODULE_VERSION(uvisor, 1);
  
 -static const struct usb_device_id uvisor_devs[] = {
 +static const STRUCT_USB_HOST_ID uvisor_devs[] = {
  #define	UVISOR_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
  	UVISOR_DEV(ACEECA, MEZ1000, UVISOR_FLAG_PALM4),
  	UVISOR_DEV(ALPHASMART, DANA_SYNC, UVISOR_FLAG_PALM4),
 
 Modified: head/sys/dev/usb/serial/uvscom.c
 ==============================================================================
 --- head/sys/dev/usb/serial/uvscom.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/serial/uvscom.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -233,7 +233,7 @@ static const struct ucom_callback uvscom
  	.ucom_poll = &uvscom_poll,
  };
  
 -static const struct usb_device_id uvscom_devs[] = {
 +static const STRUCT_USB_HOST_ID uvscom_devs[] = {
  	/* SUNTAC U-Cable type A4 */
  	{USB_VPI(USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS144L4, 0)},
  	/* SUNTAC U-Cable type D2 */
 
 Modified: head/sys/dev/usb/storage/umass.c
 ==============================================================================
 --- head/sys/dev/usb/storage/umass.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/storage/umass.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -721,6 +721,11 @@ MODULE_VERSION(umass, 1);
   * USB device probe/attach/detach
   */
  
 +static const STRUCT_USB_HOST_ID __used umass_devs[] = {
 +	/* generic mass storage class */
 +	{USB_IFACE_CLASS(UICLASS_MASS),},
 +};
 +
  static uint16_t
  umass_get_proto(struct usb_interface *iface)
  {
 
 Modified: head/sys/dev/usb/usbdi.h
 ==============================================================================
 --- head/sys/dev/usb/usbdi.h	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/usbdi.h	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -228,6 +228,18 @@ struct usb_config {
  };
  
  /*
 + * Use these macro when defining USB device ID arrays if you want to
 + * have your driver module automatically loaded in host, device or
 + * both modes respectivly:
 + */
 +#define	STRUCT_USB_HOST_ID \
 +    struct usb_device_id __section("usb_host_id")
 +#define	STRUCT_USB_DEVICE_ID \
 +    struct usb_device_id __section("usb_device_id")
 +#define	STRUCT_USB_DUAL_ID \
 +    struct usb_device_id __section("usb_dual_id")
 +
 +/*
   * The following structure is used when looking up an USB driver for
   * an USB device. It is inspired by the Linux structure called
   * "usb_device_id".
 
 Modified: head/sys/dev/usb/wlan/if_rum.c
 ==============================================================================
 --- head/sys/dev/usb/wlan/if_rum.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/wlan/if_rum.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -85,7 +85,7 @@ SYSCTL_INT(_hw_usb_rum, OID_AUTO, debug,
      "Debug level");
  #endif
  
 -static const struct usb_device_id rum_devs[] = {
 +static const STRUCT_USB_HOST_ID rum_devs[] = {
  #define	RUM_DEV(v,p)  { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
      RUM_DEV(ABOCOM, HWU54DM),
      RUM_DEV(ABOCOM, RT2573_2),
 
 Modified: head/sys/dev/usb/wlan/if_run.c
 ==============================================================================
 --- head/sys/dev/usb/wlan/if_run.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/wlan/if_run.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -96,7 +96,7 @@ SYSCTL_INT(_hw_usb_run, OID_AUTO, debug,
   */
  #define RUN_CMDQ_GET(c)	(atomic_fetchadd_32((c), 1) & RUN_CMDQ_MASQ)
  
 -static const struct usb_device_id run_devs[] = {
 +static const STRUCT_USB_HOST_ID run_devs[] = {
  #define RUN_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
      RUN_DEV(ABOCOM,		RT2770),
      RUN_DEV(ABOCOM,		RT2870),
 
 Modified: head/sys/dev/usb/wlan/if_uath.c
 ==============================================================================
 --- head/sys/dev/usb/wlan/if_uath.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/wlan/if_uath.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -167,7 +167,7 @@ enum {
  	  (((u_int8_t *)(p))[2] << 16) | (((u_int8_t *)(p))[3] << 24)))
  
  /* recognized device vendors/products */
 -static const struct usb_device_id uath_devs[] = {
 +static const STRUCT_USB_HOST_ID uath_devs[] = {
  #define	UATH_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
  	UATH_DEV(ACCTON,		SMCWUSBG),
  	UATH_DEV(ACCTON,		SMCWUSBTG2),
 
 Modified: head/sys/dev/usb/wlan/if_upgt.c
 ==============================================================================
 --- head/sys/dev/usb/wlan/if_upgt.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/wlan/if_upgt.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -170,7 +170,7 @@ static int	upgt_tx_start(struct upgt_sof
  
  static const char *upgt_fwname = "upgt-gw3887";
  
 -static const struct usb_device_id upgt_devs_2[] = {
 +static const STRUCT_USB_HOST_ID upgt_devs[] = {
  #define	UPGT_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
  	/* version 2 devices */
  	UPGT_DEV(ACCTON,	PRISM_GT),
 @@ -236,7 +236,7 @@ upgt_match(device_t dev)
  	if (uaa->info.bIfaceIndex != UPGT_IFACE_INDEX)
  		return (ENXIO);
  
 -	return (usbd_lookup_id_by_uaa(upgt_devs_2, sizeof(upgt_devs_2), uaa));
 +	return (usbd_lookup_id_by_uaa(upgt_devs, sizeof(upgt_devs), uaa));
  }
  
  static int
 
 Modified: head/sys/dev/usb/wlan/if_ural.c
 ==============================================================================
 --- head/sys/dev/usb/wlan/if_ural.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/wlan/if_ural.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -91,7 +91,7 @@ SYSCTL_INT(_hw_usb_ural, OID_AUTO, debug
  	 ((rssi) - (RAL_NOISE_FLOOR + RAL_RSSI_CORR)) : 0)
  
  /* various supported device vendors/products */
 -static const struct usb_device_id ural_devs[] = {
 +static const STRUCT_USB_HOST_ID ural_devs[] = {
  #define	URAL_DEV(v,p)  { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
  	URAL_DEV(ASUS, WL167G),
  	URAL_DEV(ASUS, RT2570),
 
 Modified: head/sys/dev/usb/wlan/if_urtw.c
 ==============================================================================
 --- head/sys/dev/usb/wlan/if_urtw.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/wlan/if_urtw.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -102,7 +102,7 @@ TUNABLE_INT("hw.usb.urtw.preamble_mode",
  	{ USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, URTW_REV_RTL8187L) }
  #define	URTW_REV_RTL8187B	0
  #define	URTW_REV_RTL8187L	1
 -static const struct usb_device_id urtw_devs[] = {
 +static const STRUCT_USB_HOST_ID urtw_devs[] = {
  	URTW_DEV_B(NETGEAR, WG111V3),
  	URTW_DEV_B(REALTEK, RTL8187B_0),
  	URTW_DEV_B(REALTEK, RTL8187B_1),
 
 Modified: head/sys/dev/usb/wlan/if_zyd.c
 ==============================================================================
 --- head/sys/dev/usb/wlan/if_zyd.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/dev/usb/wlan/if_zyd.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -200,7 +200,7 @@ static const struct zyd_phy_pair zyd_def
  	{ USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, ZYD_ZD1211) }
  #define	ZYD_ZD1211B_DEV(v,p)	\
  	{ USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, ZYD_ZD1211B) }
 -static const struct usb_device_id zyd_devs[] = {
 +static const STRUCT_USB_HOST_ID zyd_devs[] = {
  	/* ZYD_ZD1211 */
  	ZYD_ZD1211_DEV(3COM2, 3CRUSB10075),
  	ZYD_ZD1211_DEV(ABOCOM, WL54),
 
 Modified: head/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c
 ==============================================================================
 --- head/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -382,14 +382,14 @@ static const struct usb_config		ubt_conf
   * where VENDOR_ID and PRODUCT_ID are hex numbers.
   */
  
 -static const struct usb_device_id ubt_ignore_devs[] = 
 +static const STRUCT_USB_HOST_ID ubt_ignore_devs[] = 
  {
  	/* AVM USB Bluetooth-Adapter BlueFritz! v1.0 */
  	{ USB_VPI(USB_VENDOR_AVM, 0x2200, 0) },
  };
  
  /* List of supported bluetooth devices */
 -static const struct usb_device_id ubt_devs[] =
 +static const STRUCT_USB_HOST_ID ubt_devs[] =
  {
  	/* Generic Bluetooth class devices */
  	{ USB_IFACE_CLASS(UDCLASS_WIRELESS),
 
 Modified: head/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c
 ==============================================================================
 --- head/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c	Thu Jun 23 22:21:28 2011	(r223485)
 +++ head/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -180,7 +180,7 @@ MODULE_DEPEND(ubtbcmfw, usb, 1, 1, 1);
  static int
  ubtbcmfw_probe(device_t dev)
  {
 -	const struct usb_device_id	devs[] = {
 +	static const STRUCT_USB_HOST_ID devs[] = {
  	/* Broadcom BCM2033 devices only */
  	{ USB_VPI(USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033, 0) },
  	};
 
 Added: head/tools/tools/bus_autoconf/Makefile
 ==============================================================================
 --- /dev/null	00:00:00 1970	(empty, because file is newly added)
 +++ head/tools/tools/bus_autoconf/Makefile	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -0,0 +1,43 @@
 +# $FreeBSD$
 +#
 +# Copyright (c) 2011 Hans Petter Selasky. All rights reserved.
 +#
 +# Redistribution and use in source and binary forms, with or without
 +# modification, are permitted provided that the following conditions
 +# are met:
 +# 1. Redistributions of source code must retain the above copyright
 +#    notice, this list of conditions and the following disclaimer.
 +# 2. Redistributions in binary form must reproduce the above copyright
 +#    notice, this list of conditions and the following disclaimer in the
 +#    documentation and/or other materials provided with the distribution.
 +#
 +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 +# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 +# SUCH DAMAGE.
 +#
 +
 +#
 +# Example on how to use:
 +#
 +# make clean all install
 +#
 +# ./bus_autoconf.sh /boot/kernel/*.ko | less
 +#
 +
 +PROG=	bus_autoconf
 +MAN=
 +BINDIR?= /usr/local/bin
 +
 +SRCS=	bus_autoconf.c
 +
 +WARNS=	6
 +
 +.include <bsd.prog.mk>
 
 Added: head/tools/tools/bus_autoconf/bus_autoconf.c
 ==============================================================================
 --- /dev/null	00:00:00 1970	(empty, because file is newly added)
 +++ head/tools/tools/bus_autoconf/bus_autoconf.c	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -0,0 +1,321 @@
 +/* $FreeBSD$ */
 +
 +/*-
 + * Copyright (c) 2011 Hans Petter Selasky. All rights reserved.
 + *
 + * Redistribution and use in source and binary forms, with or without
 + * modification, are permitted provided that the following conditions
 + * are met:
 + * 1. Redistributions of source code must retain the above copyright
 + *    notice, this list of conditions and the following disclaimer.
 + * 2. Redistributions in binary form must reproduce the above copyright
 + *    notice, this list of conditions and the following disclaimer in the
 + *    documentation and/or other materials provided with the distribution.
 + *
 + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 + * SUCH DAMAGE.
 + */
 +
 +/*
 + * Disclaimer: This utility and format is subject to change and not a
 + * comitted interface.
 + */
 +
 +#include <stdio.h>
 +#include <stdint.h>
 +#include <stdlib.h>
 +#include <unistd.h>
 +#include <sysexits.h>
 +#include <err.h>
 +#include <fcntl.h>
 +#include <string.h>
 +
 +#include "bus_autoconf.h"
 +
 +static char *type;
 +static char *file_name;
 +static char *module;
 +static const char *mode;
 +
 +static int
 +usb_compare(const void *_a, const void *_b)
 +{
 +	const struct usb_device_id *a = _a;
 +	const struct usb_device_id *b = _b;
 +
 +	if (a->idVendor > b->idVendor)
 +		return (1);
 +	if (a->idVendor < b->idVendor)
 +		return (-1);
 +	if (a->idProduct > b->idProduct)
 +		return (1);
 +	if (a->idProduct < b->idProduct)
 +		return (-1);
 +	if (a->bDeviceClass > b->bDeviceClass)
 +		return (1);
 +	if (a->bDeviceClass < b->bDeviceClass)
 +		return (-1);
 +	if (a->bDeviceSubClass > b->bDeviceSubClass)
 +		return (1);
 +	if (a->bDeviceSubClass < b->bDeviceSubClass)
 +		return (-1);
 +	if (a->bDeviceProtocol > b->bDeviceProtocol)
 +		return (1);
 +	if (a->bDeviceProtocol < b->bDeviceProtocol)
 +		return (-1);
 +	if (a->bInterfaceClass > b->bInterfaceClass)
 +		return (1);
 +	if (a->bInterfaceClass < b->bInterfaceClass)
 +		return (-1);
 +	if (a->bInterfaceSubClass > b->bInterfaceSubClass)
 +		return (1);
 +	if (a->bInterfaceSubClass < b->bInterfaceSubClass)
 +		return (-1);
 +	if (a->bInterfaceProtocol > b->bInterfaceProtocol)
 +		return (1);
 +	if (a->bInterfaceProtocol < b->bInterfaceProtocol)
 +		return (-1);
 +
 +	return (0);
 +}
 +
 +static void
 +usb_sort(struct usb_device_id *id, uint32_t nid)
 +{
 +	qsort(id, nid, sizeof(*id), &usb_compare);
 +}
 +
 +struct usb_info {
 +	uint8_t	is_iface;
 +	uint8_t	is_any;
 +	uint8_t	is_vp;
 +	uint8_t	is_dev;
 +};
 +
 +static void
 +usb_dump_sub(struct usb_device_id *id, struct usb_info *pinfo)
 +{
 +#if USB_HAVE_COMPAT_LINUX
 +	if (id->match_flags & USB_DEVICE_ID_MATCH_VENDOR)
 +		id->match_flag_vendor = 1;
 +	if (id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT)
 +		id->match_flag_product = 1;
 +	if (id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO)
 +		id->match_flag_dev_lo = 1;
 +	if (id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI)
 +		id->match_flag_dev_hi = 1;
 +	if (id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS)
 +		id->match_flag_dev_class = 1;
 +	if (id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS)
 +		id->match_flag_dev_subclass = 1;
 +	if (id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL)
 +		id->match_flag_dev_protocol = 1;
 +	if (id->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS)
 +		id->match_flag_int_class = 1;
 +	if (id->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS)
 +		id->match_flag_int_subclass = 1;
 +	if (id->match_flags & USB_DEVICE_ID_MATCH_INT_PROTOCOL)
 +		id->match_flag_int_protocol = 1;
 +#endif
 +
 +	pinfo->is_iface = id->match_flag_int_class |
 +	    id->match_flag_int_protocol |
 +	    id->match_flag_int_subclass;
 +
 +	pinfo->is_dev = id->match_flag_dev_class |
 +	    id->match_flag_dev_subclass;
 +
 +	pinfo->is_vp = id->match_flag_vendor |
 +	    id->match_flag_product;
 +
 +	pinfo->is_any = pinfo->is_vp + pinfo->is_dev + pinfo->is_iface;
 +}
 +
 +static uint32_t
 +usb_dump(struct usb_device_id *id, uint32_t nid)
 +{
 +	uint32_t n = 1;
 +	struct usb_info info;
 +
 +	usb_dump_sub(id, &info);
 +
 +	if (info.is_iface) {
 +		printf("nomatch 10 {\n"
 +		    "	match \"system\" \"USB\";\n"
 +		    "	match \"subsystem\" \"INTERFACE\";\n"
 +		    "	match \"mode\" \"%s\";\n", mode);
 +	} else if (info.is_any) {
 +		printf("nomatch 10 {\n"
 +		    "	match \"system\" \"USB\";\n"
 +		    "	match \"subsystem\" \"DEVICE\";\n"
 +		    "	match \"mode\" \"%s\";\n", mode);
 +	} else {
 +		return (n);
 +	}
 +
 +	if (id->match_flag_vendor) {
 +		printf("	match \"vendor\" \"0x%04x\";\n",
 +		    id->idVendor);
 +	}
 +	if (id->match_flag_product) {
 +		uint32_t x;
 +
 +		if (info.is_any == 1 && info.is_vp == 1) {
 +			/* try to join similar entries */
 +			while (n < nid) {
 +				usb_dump_sub(id + n, &info);
 +
 +				if (info.is_any != 1 || info.is_vp != 1)
 +					break;
 +				if (id[n].idVendor != id[0].idVendor)
 +					break;
 +				n++;
 +			}
 +			/* restore infos */
 +			usb_dump_sub(id, &info);
 +		}
 +		if (n == 1) {
 +			printf("	match \"product\" \"0x%04x\";\n",
 +			    id->idProduct);
 +		} else {
 +			printf("	match \"product\" \"(");
 +
 +			for (x = 0; x != n; x++) {
 +				printf("0x%04x%s", id[x].idProduct,
 +				    (x == (n - 1)) ? "" : "|");
 +			}
 +
 +			printf(")\";\n");
 +		}
 +	}
 +	if (id->match_flag_dev_class) {
 +		printf("	match \"devclass\" \"0x%02x\";\n",
 +		    id->bDeviceClass);
 +	}
 +	if (id->match_flag_dev_subclass) {
 +		printf("	match \"devsubclass\" \"0x%02x\";\n",
 +		    id->bDeviceSubClass);
 +	}
 +	if (id->match_flag_int_class) {
 +		printf("	match \"intclass\" \"0x%02x\";\n",
 +		    id->bInterfaceClass);
 +	}
 +	if (id->match_flag_int_subclass) {
 +		printf("	match \"intsubclass\" \"0x%02x\";\n",
 +		    id->bInterfaceSubClass);
 +	}
 +	if (id->match_flag_int_protocol) {
 +		printf("	match \"intprotocol\" \"0x%02x\";\n",
 +		    id->bInterfaceProtocol);
 +	}
 +	printf("	action \"kldload %s\";\n"
 +	    "};\n\n", module);
 +
 +	return (n);
 +}
 +
 +static void
 +usb_parse_and_dump(int f, off_t size)
 +{
 +	struct usb_device_id *id;
 +	uint32_t nid;
 +	uint32_t x;
 +
 +	if (size % sizeof(struct usb_device_id)) {
 +		errx(EX_NOINPUT, "Size is not divisible by %d",
 +		    (int)sizeof(struct usb_device_id));
 +	}
 +	lseek(f, 0, SEEK_SET);
 +
 +	id = malloc(size);
 +	if (id == NULL) {
 +		errx(EX_SOFTWARE, "Out of memory");
 +	}
 +	if (read(f, id, size) != size) {
 +		err(EX_NOINPUT, "Cannot read all data");
 +	}
 +	nid = size / sizeof(*id);
 +
 +	usb_sort(id, nid);
 +
 +	for (x = 0; x != nid;)
 +		x += usb_dump(id + x, nid - x);
 +
 +	free(id);
 +}
 +
 +static void
 +usage(void)
 +{
 +	fprintf(stderr,
 +	    "bus_autoconf - devd config file generator\n"
 +	    "	-i <input_binary>\n"
 +	    "	-m <module_name>\n"
 +	    "	-t <structure_type>\n"
 +	    "	-h show usage\n"
 +	);
 +	exit(EX_USAGE);
 +}
 +
 +int
 +main(int argc, char **argv)
 +{
 +	const char *params = "i:m:ht:";
 +	int c;
 +	int f;
 +	off_t off;
 +
 +	while ((c = getopt(argc, argv, params)) != -1) {
 +		switch (c) {
 +		case 'i':
 +			file_name = optarg;
 +			break;
 +		case 't':
 +			type = optarg;
 +			break;
 +		case 'm':
 +			module = optarg;
 +			break;
 +		default:
 +			usage();
 +			break;
 +		}
 +	}
 +
 +	if (type == NULL || module == NULL || file_name == NULL)
 +		usage();
 +
 +	f = open(file_name, O_RDONLY);
 +	if (f < 0)
 +		err(EX_NOINPUT, "Cannot open file '%s'", file_name);
 +
 +	off = lseek(f, 0, SEEK_END);
 +	if (off <= 0)
 +		err(EX_NOINPUT, "Cannot seek to end of file");
 +
 +	if (strcmp(type, "usb_host") == 0) {
 +		mode = "host";
 +		usb_parse_and_dump(f, off);
 +	} else if (strcmp(type, "usb_device") == 0) {
 +		mode = "device";
 +		usb_parse_and_dump(f, off);
 +	} else if (strcmp(type, "usb_dual") == 0) {
 +		mode = "(host|device)";
 +		usb_parse_and_dump(f, off);
 +	} else {
 +		err(EX_USAGE, "Unsupported structure type: %s", type);
 +	}
 +
 +	close(f);
 +
 +	return (0);
 +}
 
 Added: head/tools/tools/bus_autoconf/bus_autoconf.h
 ==============================================================================
 --- /dev/null	00:00:00 1970	(empty, because file is newly added)
 +++ head/tools/tools/bus_autoconf/bus_autoconf.h	Fri Jun 24 02:30:02 2011	(r223486)
 @@ -0,0 +1,83 @@
 +/* $FreeBSD$ */
 +
 +/*-
 + * Copyright (c) 2011 Hans Petter Selasky. All rights reserved.
 + *
 + * Redistribution and use in source and binary forms, with or without
 + * modification, are permitted provided that the following conditions
 + * are met:
 + * 1. Redistributions of source code must retain the above copyright
 + *    notice, this list of conditions and the following disclaimer.
 + * 2. Redistributions in binary form must reproduce the above copyright
 + *    notice, this list of conditions and the following disclaimer in the
 + *    documentation and/or other materials provided with the distribution.
 + *
 + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 + * SUCH DAMAGE.
 + */
 +
 +#ifndef _BUS_AUTOCONF_H_
 +#define	_BUS_AUTOCONF_H_
 +
 +/* Make sure we get the have compat linux definition. */
 +#include <dev/usb/usb.h>
 +
 +struct usb_device_id {
 +
 +	/* Hook for driver specific information */
 +	unsigned long driver_info;
 
 *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: Hans Petter Selasky <hselasky@c2i.net>
To: freebsd-hackers@freebsd.org
Cc: Robert Millan <rmh@debian.org>,
 FreeBSD-gnats-submit@freebsd.org,
 freebsd-bugs@freebsd.org,
 freebsd-usb@freebsd.org,
 freebsd-current@freebsd.org
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Fri, 24 Jun 2011 04:37:25 +0200

 Hi,
 
 I need some people testing the following patch:
 
 http://svn.freebsd.org/changeset/base/223486
 
 svn up and build a new kernel.
 
 Try to remove all USB devices from kernel config except the host controllers 
 and USB keyboard. Then put the following file into /etc/devd/
 
 http://hselasky.homeunix.org:8192/bus_auto.conf
 
 MD5 (bus_auto.conf) = 4a1130910cdbe0a5d3eca86b0b12f533
 
 Verify using kldstat that modules are loaded when you plug a new USB device.
 
 --HPS

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: conf/157903: commit references a PR
Date: Fri, 24 Jun 2011 04:16:16 +0000 (UTC)

 Author: hselasky
 Date: Fri Jun 24 04:16:06 2011
 New Revision: 223489
 URL: http://svn.freebsd.org/changeset/base/223489
 
 Log:
   - Add additional information to the PnP info of USB HUBs children which
     is now required by bus_autoconf.
   - Allow interface class matching even if device class is vendor specific.
   - Update bus_autoconf tool to not generate system and subsystem match lines
     for the nomatch event.
   
   PR:		misc/157903
   MFC after:	14 days
 
 Modified:
   head/sys/dev/usb/usb_hub.c
   head/sys/dev/usb/usb_lookup.c
   head/tools/tools/bus_autoconf/bus_autoconf.c
 
 Modified: head/sys/dev/usb/usb_hub.c
 ==============================================================================
 --- head/sys/dev/usb/usb_hub.c	Fri Jun 24 03:50:54 2011	(r223488)
 +++ head/sys/dev/usb/usb_hub.c	Fri Jun 24 04:16:06 2011	(r223489)
 @@ -1334,15 +1334,19 @@ uhub_child_pnpinfo_string(device_t paren
  		    "devclass=0x%02x devsubclass=0x%02x "
  		    "sernum=\"%s\" "
  		    "release=0x%04x "
 -		    "intclass=0x%02x intsubclass=0x%02x" "%s%s",
 +		    "mode=%s "
 +		    "intclass=0x%02x intsubclass=0x%02x "
 +		    "intprotocol=0x%02x " "%s%s",
  		    UGETW(res.udev->ddesc.idVendor),
  		    UGETW(res.udev->ddesc.idProduct),
  		    res.udev->ddesc.bDeviceClass,
  		    res.udev->ddesc.bDeviceSubClass,
  		    usb_get_serial(res.udev),
  		    UGETW(res.udev->ddesc.bcdDevice),
 +		    (res.udev->flags.usb_mode == USB_MODE_HOST) ? "host" : "device",
  		    iface->idesc->bInterfaceClass,
  		    iface->idesc->bInterfaceSubClass,
 +		    iface->idesc->bInterfaceProtocol,
  		    iface->pnpinfo ? " " : "",
  		    iface->pnpinfo ? iface->pnpinfo : "");
  	} else {
 
 Modified: head/sys/dev/usb/usb_lookup.c
 ==============================================================================
 --- head/sys/dev/usb/usb_lookup.c	Fri Jun 24 03:50:54 2011	(r223488)
 +++ head/sys/dev/usb/usb_lookup.c	Fri Jun 24 04:16:06 2011	(r223489)
 @@ -105,13 +105,6 @@ usbd_lookup_id_by_info(const struct usb_
  		    (id->bDeviceProtocol != info->bDeviceProtocol)) {
  			continue;
  		}
 -		if ((info->bDeviceClass == 0xFF) &&
 -		    (!(id->match_flag_vendor)) &&
 -		    ((id->match_flag_int_class) ||
 -		    (id->match_flag_int_subclass) ||
 -		    (id->match_flag_int_protocol))) {
 -			continue;
 -		}
  		if ((id->match_flag_int_class) &&
  		    (id->bInterfaceClass != info->bInterfaceClass)) {
  			continue;
 
 Modified: head/tools/tools/bus_autoconf/bus_autoconf.c
 ==============================================================================
 --- head/tools/tools/bus_autoconf/bus_autoconf.c	Fri Jun 24 03:50:54 2011	(r223488)
 +++ head/tools/tools/bus_autoconf/bus_autoconf.c	Fri Jun 24 04:16:06 2011	(r223489)
 @@ -148,15 +148,8 @@ usb_dump(struct usb_device_id *id, uint3
  
  	usb_dump_sub(id, &info);
  
 -	if (info.is_iface) {
 +	if (info.is_any) {
  		printf("nomatch 10 {\n"
 -		    "	match \"system\" \"USB\";\n"
 -		    "	match \"subsystem\" \"INTERFACE\";\n"
 -		    "	match \"mode\" \"%s\";\n", mode);
 -	} else if (info.is_any) {
 -		printf("nomatch 10 {\n"
 -		    "	match \"system\" \"USB\";\n"
 -		    "	match \"subsystem\" \"DEVICE\";\n"
  		    "	match \"mode\" \"%s\";\n", mode);
  	} else {
  		return (n);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: Hans Petter Selasky <hselasky@c2i.net>
To: freebsd-hackers@freebsd.org
Cc: Robert Millan <rmh@debian.org>,
 FreeBSD-gnats-submit@freebsd.org,
 freebsd-bugs@freebsd.org,
 freebsd-usb@freebsd.org,
 freebsd-current@freebsd.org
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Fri, 24 Jun 2011 06:17:23 +0200

 On Friday 24 June 2011 04:37:25 Hans Petter Selasky wrote:
 > Hi,
 > 
 > I need some people testing the following patch:
 > 
 > http://svn.freebsd.org/changeset/base/223486
 > 
 > svn up and build a new kernel.
 > 
 > Try to remove all USB devices from kernel config except the host
 > controllers and USB keyboard. Then put the following file into /etc/devd/
 > 
 > http://hselasky.homeunix.org:8192/bus_auto.conf
 > 
 > MD5 (bus_auto.conf) = 4a1130910cdbe0a5d3eca86b0b12f533
 > 
 > Verify using kldstat that modules are loaded when you plug a new USB
 > device.
 > 
 > --HPS
 
 Hi,
 
 Turns out some additional patches were needed:
 
 http://svn.freebsd.org/changeset/base/223489
 
 Please try again.
 
 Updated bus_auto.conf:
 
 http://hselasky.homeunix.org:8192/bus_auto.conf
 
 MD5 (/etc/devd/bus_auto.conf) = c321d1801f0fa3c6260eeef7061330e8
 
 --HPS

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: conf/157903: commit references a PR
Date: Fri, 24 Jun 2011 04:36:11 +0000 (UTC)

 Author: hselasky
 Date: Fri Jun 24 04:35:58 2011
 New Revision: 223490
 URL: http://svn.freebsd.org/changeset/base/223490
 
 Log:
   - Make sure we don't match the wrong device by adding
   a match for the bus the device belongs to.
   
   PR:		misc/157903
   MFC after:	14 days
 
 Modified:
   head/tools/tools/bus_autoconf/bus_autoconf.c
 
 Modified: head/tools/tools/bus_autoconf/bus_autoconf.c
 ==============================================================================
 --- head/tools/tools/bus_autoconf/bus_autoconf.c	Fri Jun 24 04:16:06 2011	(r223489)
 +++ head/tools/tools/bus_autoconf/bus_autoconf.c	Fri Jun 24 04:35:58 2011	(r223490)
 @@ -150,6 +150,7 @@ usb_dump(struct usb_device_id *id, uint3
  
  	if (info.is_any) {
  		printf("nomatch 10 {\n"
 +		    "	match \"bus\" \"uhub[0-9]+\";\n"
  		    "	match \"mode\" \"%s\";\n", mode);
  	} else {
  		return (n);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: Robert Millan <rmh@debian.org>
To: Warner Losh <imp@bsdimp.com>
Cc: FreeBSD-gnats-submit@freebsd.org, freebsd-bugs@freebsd.org, 
	freebsd-hackers@freebsd.org, freebsd-usb@freebsd.org
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Fri, 24 Jun 2011 09:08:00 +0200

 2011/6/23 Warner Losh <imp@bsdimp.com>:
 > How'd you go about generating all these .conf files?
 
 I have to admit it was quite boring, lots of grep & sed, different
 regex for each file, then some manual editting.
 
 But I see that someone has found a better way.  I'll look into testing that=
  :-)
 
 > I don't see where you defined USB_* as variables in them either. =C2=A0Ma=
 ybe you could point me at it?
 
 Autogenerated from usbdevs, see:
 
 # USB vendor ids and product ids.
 usb_ids.conf: genusbdevs.sh ../../sys/dev/usb/usbdevs
 	sh genusbdevs.sh > $@
 
 --=20
 Robert Millan

From: Robert Millan <rmh@debian.org>
To: Hans Petter Selasky <hselasky@c2i.net>
Cc: freebsd-hackers@freebsd.org, FreeBSD-gnats-submit@freebsd.org, 
	freebsd-bugs@freebsd.org, freebsd-usb@freebsd.org, 
	freebsd-current@freebsd.org
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Fri, 24 Jun 2011 09:22:57 +0200

 2011/6/24 Hans Petter Selasky <hselasky@c2i.net>:
 > Updated bus_auto.conf:
 >
 > http://hselasky.homeunix.org:8192/bus_auto.conf
 
 Very nice.  But why not use variable names instead of hardcoding numbers?  It
 makes the output much easier to understand.
 
 -- 
 Robert Millan

From: Hans Petter Selasky <hselasky@c2i.net>
To: Robert Millan <rmh@debian.org>
Cc: freebsd-hackers@freebsd.org,
 FreeBSD-gnats-submit@freebsd.org,
 freebsd-bugs@freebsd.org,
 freebsd-usb@freebsd.org,
 freebsd-current@freebsd.org
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Fri, 24 Jun 2011 12:46:51 +0200

 On Friday 24 June 2011 09:22:57 Robert Millan wrote:
 > 2011/6/24 Hans Petter Selasky <hselasky@c2i.net>:
 > > Updated bus_auto.conf:
 > > 
 > > http://hselasky.homeunix.org:8192/bus_auto.conf
 > 
 > Very nice.  But why not use variable names instead of hardcoding numbers? 
 > It makes the output much easier to understand.
 
 To save memory.
 
 --HPS

From: Robert Millan <rmh@debian.org>
To: Hans Petter Selasky <hselasky@c2i.net>
Cc: freebsd-hackers@freebsd.org, FreeBSD-gnats-submit@freebsd.org, 
	freebsd-bugs@freebsd.org, freebsd-usb@freebsd.org, 
	freebsd-current@freebsd.org
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Fri, 24 Jun 2011 14:59:37 +0200

 2011/6/24 Hans Petter Selasky <hselasky@c2i.net>:
 >> Very nice. =C2=A0But why not use variable names instead of hardcoding nu=
 mbers?
 >> It makes the output much easier to understand.
 >
 > To save memory.
 
 I haven't inspected devd code, but I was under the assumption that
 variables only lived untill resolved.  What would be the point of keeping
 them in memory after devd has finished parsing the config files?
 
 --=20
 Robert Millan

From: Hans Petter Selasky <hselasky@c2i.net>
To: Robert Millan <rmh@debian.org>
Cc: freebsd-hackers@freebsd.org,
 FreeBSD-gnats-submit@freebsd.org,
 freebsd-bugs@freebsd.org,
 freebsd-usb@freebsd.org,
 freebsd-current@freebsd.org
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Fri, 24 Jun 2011 15:11:44 +0200

 On Friday 24 June 2011 14:59:37 Robert Millan wrote:
 > 2011/6/24 Hans Petter Selasky <hselasky@c2i.net>:
 > >> Very nice.  But why not use variable names instead of hardcoding
 > >> numbers? It makes the output much easier to understand.
 > > 
 > > To save memory.
 > 
 > I haven't inspected devd code, but I was under the assumption that
 > variables only lived untill resolved.  What would be the point of keeping
 > them in memory after devd has finished parsing the config files?
 
 Hi,
 
 I haven't checked that, though if you want the readable version, then you need 
 to check the source code.
 
 However I could add some code to print a vendor ID comment, based on usbdevs.
 
 --HPS

From: Warner Losh <imp@bsdimp.com>
To: Hans Petter Selasky <hselasky@c2i.net>
Cc: Robert Millan <rmh@debian.org>, freebsd-hackers@FreeBSD.org,
        freebsd-bugs@FreeBSD.org, FreeBSD-gnats-submit@FreeBSD.org,
        freebsd-usb@FreeBSD.org, freebsd-current@FreeBSD.org
Subject: Re: misc/157903: automated kldload for USB class devices
Date: Fri, 24 Jun 2011 11:21:05 -0600

 On Jun 24, 2011, at 7:11 AM, Hans Petter Selasky wrote:
 
 > On Friday 24 June 2011 14:59:37 Robert Millan wrote:
 >> 2011/6/24 Hans Petter Selasky <hselasky@c2i.net>:
 >>>> Very nice.  But why not use variable names instead of hardcoding
 >>>> numbers? It makes the output much easier to understand.
 >>>=20
 >>> To save memory.
 >>=20
 >> I haven't inspected devd code, but I was under the assumption that
 >> variables only lived untill resolved.  What would be the point of =
 keeping
 >> them in memory after devd has finished parsing the config files?
 >=20
 > Hi,
 >=20
 > I haven't checked that, though if you want the readable version, then =
 you need=20
 > to check the source code.
 >=20
 > However I could add some code to print a vendor ID comment, based on =
 usbdevs.
 
 devd keeps them in memory and expands them when the commands are =
 executed.  It will use more memory and be slower if you have lots of =
 variables.  Now much more memory and how much slower?  I kinda doubt =
 you'd notice on modern gear.
 
 Warner
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: conf/157903: commit references a PR
Date: Mon, 27 Jun 2011 21:00:28 +0000 (UTC)

 Author: hselasky
 Date: Mon Jun 27 20:59:43 2011
 New Revision: 223605
 URL: http://svn.freebsd.org/changeset/base/223605
 
 Log:
   MFC r223486, r223489, r223490, r223511, r223512, r223513,
     r223515, r223518, r223519, r223521, r223534, r223535,
     r223536, r223537, r223538, r223543, r223288, r223604 and r223566:
   
   - Export all USB device ID's in so-called sections.
   - Fix duplicate occurence of a USB ID in if_urtw and if_zyd.
   - Add new tool to autogenerate nomatch entries for devd.
   - Add new usb.conf file to auto-load USB drivers.
   - Fix some issues related to the nomatch notifications.
   
   PR:	misc/157903
 
 Added:
   stable/8/etc/devd/usb.conf
      - copied, changed from r223543, head/etc/devd/usb.conf
   stable/8/tools/tools/bus_autoconf/
      - copied from r223486, head/tools/tools/bus_autoconf/
   stable/8/tools/tools/bus_autoconf/bus_autoconf_format_example.txt
      - copied unchanged from r223534, head/tools/tools/bus_autoconf/bus_autoconf_format_example.txt
   stable/8/tools/tools/bus_autoconf/bus_load_file.c
      - copied, changed from r223534, head/tools/tools/bus_autoconf/bus_load_file.c
   stable/8/tools/tools/bus_autoconf/bus_load_file.h
      - copied unchanged from r223534, head/tools/tools/bus_autoconf/bus_load_file.h
   stable/8/tools/tools/bus_autoconf/bus_sections.c
      - copied unchanged from r223534, head/tools/tools/bus_autoconf/bus_sections.c
   stable/8/tools/tools/bus_autoconf/bus_sections.h
      - copied unchanged from r223534, head/tools/tools/bus_autoconf/bus_sections.h
   stable/8/tools/tools/bus_autoconf/bus_usb.c
      - copied, changed from r223534, head/tools/tools/bus_autoconf/bus_usb.c
   stable/8/tools/tools/bus_autoconf/bus_usb.h
      - copied unchanged from r223534, head/tools/tools/bus_autoconf/bus_usb.h
 Modified:
   stable/8/etc/devd/Makefile
   stable/8/sys/dev/sound/usb/uaudio.c
   stable/8/sys/dev/usb/input/atp.c
   stable/8/sys/dev/usb/input/uep.c
   stable/8/sys/dev/usb/input/uhid.c
   stable/8/sys/dev/usb/input/ukbd.c
   stable/8/sys/dev/usb/input/ums.c
   stable/8/sys/dev/usb/misc/udbp.c
   stable/8/sys/dev/usb/misc/ufm.c
   stable/8/sys/dev/usb/net/if_aue.c
   stable/8/sys/dev/usb/net/if_axe.c
   stable/8/sys/dev/usb/net/if_cdce.c
   stable/8/sys/dev/usb/net/if_cue.c
   stable/8/sys/dev/usb/net/if_ipheth.c
   stable/8/sys/dev/usb/net/if_kue.c
   stable/8/sys/dev/usb/net/if_rue.c
   stable/8/sys/dev/usb/net/if_udav.c
   stable/8/sys/dev/usb/net/uhso.c
   stable/8/sys/dev/usb/serial/u3g.c
   stable/8/sys/dev/usb/serial/uark.c
   stable/8/sys/dev/usb/serial/ubsa.c
   stable/8/sys/dev/usb/serial/uchcom.c
   stable/8/sys/dev/usb/serial/ucycom.c
   stable/8/sys/dev/usb/serial/ufoma.c
   stable/8/sys/dev/usb/serial/uftdi.c
   stable/8/sys/dev/usb/serial/ugensa.c
   stable/8/sys/dev/usb/serial/uipaq.c
   stable/8/sys/dev/usb/serial/ulpt.c
   stable/8/sys/dev/usb/serial/umcs.c
   stable/8/sys/dev/usb/serial/umct.c
   stable/8/sys/dev/usb/serial/umodem.c
   stable/8/sys/dev/usb/serial/umoscom.c
   stable/8/sys/dev/usb/serial/uplcom.c
   stable/8/sys/dev/usb/serial/uslcom.c
   stable/8/sys/dev/usb/serial/uvisor.c
   stable/8/sys/dev/usb/serial/uvscom.c
   stable/8/sys/dev/usb/storage/umass.c
   stable/8/sys/dev/usb/storage/urio.c
   stable/8/sys/dev/usb/usb_device.c
   stable/8/sys/dev/usb/usb_hub.c
   stable/8/sys/dev/usb/usb_lookup.c
   stable/8/sys/dev/usb/usb_msctest.c
   stable/8/sys/dev/usb/usbdi.h
   stable/8/sys/dev/usb/wlan/if_rum.c
   stable/8/sys/dev/usb/wlan/if_run.c
   stable/8/sys/dev/usb/wlan/if_uath.c
   stable/8/sys/dev/usb/wlan/if_upgt.c
   stable/8/sys/dev/usb/wlan/if_ural.c
   stable/8/sys/dev/usb/wlan/if_urtw.c
   stable/8/sys/dev/usb/wlan/if_zyd.c
   stable/8/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c
   stable/8/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c
   stable/8/tools/tools/bus_autoconf/Makefile
   stable/8/tools/tools/bus_autoconf/bus_autoconf.c
   stable/8/tools/tools/bus_autoconf/bus_autoconf.h
   stable/8/tools/tools/bus_autoconf/bus_autoconf.sh
 Directory Properties:
   stable/8/etc/   (props changed)
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
   stable/8/tools/tools/   (props changed)
   stable/8/tools/tools/aac/   (props changed)
   stable/8/tools/tools/ath/   (props changed)
   stable/8/tools/tools/ath/common/dumpregs.h   (props changed)
   stable/8/tools/tools/ath/common/dumpregs_5210.c   (props changed)
   stable/8/tools/tools/ath/common/dumpregs_5211.c   (props changed)
   stable/8/tools/tools/ath/common/dumpregs_5212.c   (props changed)
   stable/8/tools/tools/ath/common/dumpregs_5416.c   (props changed)
   stable/8/tools/tools/cfi/   (props changed)
   stable/8/tools/tools/ether_reflect/   (props changed)
   stable/8/tools/tools/iwi/   (props changed)
   stable/8/tools/tools/mctest/   (props changed)
   stable/8/tools/tools/nanobsd/   (props changed)
   stable/8/tools/tools/netrate/   (props changed)
   stable/8/tools/tools/netrate/tcpp/   (props changed)
   stable/8/tools/tools/termcap/termcap.pl   (props changed)
   stable/8/tools/tools/umastat/   (props changed)
   stable/8/tools/tools/vimage/   (props changed)
 
 Modified: stable/8/etc/devd/Makefile
 ==============================================================================
 --- stable/8/etc/devd/Makefile	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/etc/devd/Makefile	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -1,6 +1,6 @@
  # $FreeBSD$
  
 -FILES=	asus.conf uath.conf
 +FILES=	asus.conf uath.conf usb.conf
  
  NO_OBJ=
  FILESDIR=	/etc/devd
 
 Copied and modified: stable/8/etc/devd/usb.conf (from r223543, head/etc/devd/usb.conf)
 ==============================================================================
 --- head/etc/devd/usb.conf	Sat Jun 25 17:01:46 2011	(r223543, copy source)
 +++ stable/8/etc/devd/usb.conf	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -1533,15 +1533,7 @@ nomatch 32 {
  	match "bus" "uhub[0-9]+";
  	match "mode" "host";
  	match "vendor" "0x083a";
 -	match "product" "0x4506";
 -	action "kldload if_uath";
 -};
 -
 -nomatch 32 {
 -	match "bus" "uhub[0-9]+";
 -	match "mode" "host";
 -	match "vendor" "0x083a";
 -	match "product" "0x4506";
 +	match "product" "(0x4505|0x4506)";
  	action "kldload if_zyd";
  };
  
 
 Modified: stable/8/sys/dev/sound/usb/uaudio.c
 ==============================================================================
 --- stable/8/sys/dev/sound/usb/uaudio.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/sound/usb/uaudio.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -531,6 +531,15 @@ static driver_t uaudio_driver = {
  	.size = sizeof(struct uaudio_softc),
  };
  
 +static const STRUCT_USB_HOST_ID __used uaudio_devs[] = {
 +	/* Generic USB audio class match */
 +	{USB_IFACE_CLASS(UICLASS_AUDIO),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_AUDIOCONTROL),},
 +	/* Generic USB MIDI class match */
 +	{USB_IFACE_CLASS(UICLASS_AUDIO),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_MIDISTREAM),},
 +};
 +
  static int
  uaudio_probe(device_t dev)
  {
 
 Modified: stable/8/sys/dev/usb/input/atp.c
 ==============================================================================
 --- stable/8/sys/dev/usb/input/atp.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/input/atp.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -240,7 +240,7 @@ struct atp_dev_params {
  	},
  };
  
 -static const struct usb_device_id atp_devs[] = {
 +static const STRUCT_USB_HOST_ID atp_devs[] = {
  	/* Core Duo MacBook & MacBook Pro */
  	{ USB_VPI(USB_VENDOR_APPLE, 0x0217, ATP_DEV_PARAMS_0) },
  	{ USB_VPI(USB_VENDOR_APPLE, 0x0218, ATP_DEV_PARAMS_0) },
 
 Modified: stable/8/sys/dev/usb/input/uep.c
 ==============================================================================
 --- stable/8/sys/dev/usb/input/uep.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/input/uep.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -288,6 +288,12 @@ static const struct usb_config uep_confi
  	},
  };
  
 +static const STRUCT_USB_HOST_ID uep_devs[] = {
 +	{USB_VPI(USB_VENDOR_EGALAX, USB_PRODUCT_EGALAX_TPANEL, 0)},
 +	{USB_VPI(USB_VENDOR_EGALAX, USB_PRODUCT_EGALAX_TPANEL2, 0)},
 +	{USB_VPI(USB_VENDOR_EGALAX2, USB_PRODUCT_EGALAX2_TPANEL, 0)},
 +};
 +
  static int
  uep_probe(device_t dev)
  {
 @@ -295,17 +301,12 @@ uep_probe(device_t dev)
  
  	if (uaa->usb_mode != USB_MODE_HOST)
  		return (ENXIO);
 +	if (uaa->info.bConfigIndex != 0)
 +		return (ENXIO);
 +	if (uaa->info.bIfaceIndex != 0)
 +		return (ENXIO);
  
 -	if ((uaa->info.idVendor == USB_VENDOR_EGALAX) &&
 -	    ((uaa->info.idProduct == USB_PRODUCT_EGALAX_TPANEL) ||
 -	    (uaa->info.idProduct == USB_PRODUCT_EGALAX_TPANEL2)))
 -		return (BUS_PROBE_SPECIFIC);
 -
 -	if ((uaa->info.idVendor == USB_VENDOR_EGALAX2) &&
 -	    (uaa->info.idProduct == USB_PRODUCT_EGALAX2_TPANEL))
 -		return (BUS_PROBE_SPECIFIC);
 -
 -	return (ENXIO);
 +	return (usbd_lookup_id_by_uaa(uep_devs, sizeof(uep_devs), uaa));
  }
  
  static int
 
 Modified: stable/8/sys/dev/usb/input/uhid.c
 ==============================================================================
 --- stable/8/sys/dev/usb/input/uhid.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/input/uhid.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -607,29 +607,33 @@ uhid_ioctl(struct usb_fifo *fifo, u_long
  	return (error);
  }
  
 +static const STRUCT_USB_HOST_ID uhid_devs[] = {
 +	/* generic HID class */
 +	{USB_IFACE_CLASS(UICLASS_HID),},
 +	/* the Xbox 360 gamepad doesn't use the HID class */
 +	{USB_IFACE_CLASS(UICLASS_VENDOR),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_XBOX360_CONTROLLER),
 +	 USB_IFACE_PROTOCOL(UIPROTO_XBOX360_GAMEPAD),},
 +};
 +
  static int
  uhid_probe(device_t dev)
  {
  	struct usb_attach_arg *uaa = device_get_ivars(dev);
 +	int error;
  
  	DPRINTFN(11, "\n");
  
 -	if (uaa->usb_mode != USB_MODE_HOST) {
 +	if (uaa->usb_mode != USB_MODE_HOST)
  		return (ENXIO);
 -	}
 -	if (uaa->info.bInterfaceClass != UICLASS_HID) {
  
 -		/* the Xbox 360 gamepad doesn't use the HID class */
 +	error = usbd_lookup_id_by_uaa(uhid_devs, sizeof(uhid_devs), uaa);
 +	if (error)
 +		return (error);
  
 -		if ((uaa->info.bInterfaceClass != UICLASS_VENDOR) ||
 -		    (uaa->info.bInterfaceSubClass != UISUBCLASS_XBOX360_CONTROLLER) ||
 -		    (uaa->info.bInterfaceProtocol != UIPROTO_XBOX360_GAMEPAD)) {
 -			return (ENXIO);
 -		}
 -	}
 -	if (usb_test_quirk(uaa, UQ_HID_IGNORE)) {
 +	if (usb_test_quirk(uaa, UQ_HID_IGNORE))
  		return (ENXIO);
 -	}
 +
  	return (BUS_PROBE_GENERIC);
  }
  
 
 Modified: stable/8/sys/dev/usb/input/ukbd.c
 ==============================================================================
 --- stable/8/sys/dev/usb/input/ukbd.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/input/ukbd.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -745,6 +745,13 @@ static const struct usb_config ukbd_conf
  	},
  };
  
 +/* A match on these entries will load ukbd */
 +static const STRUCT_USB_HOST_ID __used ukbd_devs[] = {
 +	{USB_IFACE_CLASS(UICLASS_HID),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_BOOT),
 +	 USB_IFACE_PROTOCOL(UIPROTO_BOOT_KEYBOARD),},
 +};
 +
  static int
  ukbd_probe(device_t dev)
  {
 
 Modified: stable/8/sys/dev/usb/input/ums.c
 ==============================================================================
 --- stable/8/sys/dev/usb/input/ums.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/input/ums.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -355,6 +355,13 @@ static const struct usb_config ums_confi
  	},
  };
  
 +/* A match on these entries will load ums */
 +static const STRUCT_USB_HOST_ID __used ums_devs[] = {
 +	{USB_IFACE_CLASS(UICLASS_HID),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_BOOT),
 +	 USB_IFACE_PROTOCOL(UIPROTO_MOUSE),},
 +};
 +
  static int
  ums_probe(device_t dev)
  {
 
 Modified: stable/8/sys/dev/usb/misc/udbp.c
 ==============================================================================
 --- stable/8/sys/dev/usb/misc/udbp.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/misc/udbp.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -288,40 +288,27 @@ udbp_modload(module_t mod, int event, vo
  	return (error);
  }
  
 +static const STRUCT_USB_HOST_ID udbp_devs[] = {
 +	{USB_VPI(USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_TURBOCONNECT, 0)},
 +	{USB_VPI(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2301, 0)},
 +	{USB_VPI(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2302, 0)},
 +	{USB_VPI(USB_VENDOR_ANCHOR, USB_PRODUCT_ANCHOR_EZLINK, 0)},
 +	{USB_VPI(USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL620USB, 0)},
 +};
 +
  static int
  udbp_probe(device_t dev)
  {
  	struct usb_attach_arg *uaa = device_get_ivars(dev);
  
 -	if (uaa->usb_mode != USB_MODE_HOST) {
 +	if (uaa->usb_mode != USB_MODE_HOST)
 +		return (ENXIO);
 +	if (uaa->info.bConfigIndex != 0)
 +		return (ENXIO);
 +	if (uaa->info.bIfaceIndex != 0)
  		return (ENXIO);
 -	}
 -	/*
 -	 * XXX Julian, add the id of the device if you have one to test
 -	 * things with. run 'usbdevs -v' and note the 3 ID's that appear.
 -	 * The Vendor Id and Product Id are in hex and the Revision Id is in
 -	 * bcd. But as usual if the revision is 0x101 then you should
 -	 * compare the revision id in the device descriptor with 0x101 Or go
 -	 * search the file usbdevs.h. Maybe the device is already in there.
 -	 */
 -	if (((uaa->info.idVendor == USB_VENDOR_NETCHIP) &&
 -	    (uaa->info.idProduct == USB_PRODUCT_NETCHIP_TURBOCONNECT)))
 -		return (0);
 -
 -	if (((uaa->info.idVendor == USB_VENDOR_PROLIFIC) &&
 -	    ((uaa->info.idProduct == USB_PRODUCT_PROLIFIC_PL2301) ||
 -	    (uaa->info.idProduct == USB_PRODUCT_PROLIFIC_PL2302))))
 -		return (0);
 -
 -	if ((uaa->info.idVendor == USB_VENDOR_ANCHOR) &&
 -	    (uaa->info.idProduct == USB_PRODUCT_ANCHOR_EZLINK))
 -		return (0);
 -
 -	if ((uaa->info.idVendor == USB_VENDOR_GENESYS) &&
 -	    (uaa->info.idProduct == USB_PRODUCT_GENESYS_GL620USB))
 -		return (0);
  
 -	return (ENXIO);
 +	return (usbd_lookup_id_by_uaa(udbp_devs, sizeof(udbp_devs), uaa));
  }
  
  static int
 
 Modified: stable/8/sys/dev/usb/misc/ufm.c
 ==============================================================================
 --- stable/8/sys/dev/usb/misc/ufm.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/misc/ufm.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -118,19 +118,23 @@ DRIVER_MODULE(ufm, uhub, ufm_driver, ufm
  MODULE_DEPEND(ufm, usb, 1, 1, 1);
  MODULE_VERSION(ufm, 1);
  
 +static const STRUCT_USB_HOST_ID ufm_devs[] = {
 +	{USB_VPI(USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_FMRADIO, 0)},
 +};
 +
  static int
  ufm_probe(device_t dev)
  {
  	struct usb_attach_arg *uaa = device_get_ivars(dev);
  
 -	if (uaa->usb_mode != USB_MODE_HOST) {
 +	if (uaa->usb_mode != USB_MODE_HOST)
  		return (ENXIO);
 -	}
 -	if ((uaa->info.idVendor == USB_VENDOR_CYPRESS) &&
 -	    (uaa->info.idProduct == USB_PRODUCT_CYPRESS_FMRADIO)) {
 -		return (0);
 -	}
 -	return (ENXIO);
 +	if (uaa->info.bConfigIndex != 0)
 +		return (ENXIO);
 +	if (uaa->info.bIfaceIndex != 0)
 +		return (ENXIO);
 +
 +	return (usbd_lookup_id_by_uaa(ufm_devs, sizeof(ufm_devs), uaa));
  }
  
  static int
 
 Modified: stable/8/sys/dev/usb/net/if_aue.c
 ==============================================================================
 --- stable/8/sys/dev/usb/net/if_aue.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/net/if_aue.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -110,7 +110,7 @@ SYSCTL_INT(_hw_usb_aue, OID_AUTO, debug,
  /*
   * Various supported device vendors/products.
   */
 -static const struct usb_device_id aue_devs[] = {
 +static const STRUCT_USB_HOST_ID aue_devs[] = {
  #define	AUE_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
      AUE_DEV(3COM, 3C460B, AUE_FLAG_PII),
      AUE_DEV(ABOCOM, DSB650TX_PNA, 0),
 
 Modified: stable/8/sys/dev/usb/net/if_axe.c
 ==============================================================================
 --- stable/8/sys/dev/usb/net/if_axe.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/net/if_axe.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -133,7 +133,7 @@ SYSCTL_INT(_hw_usb_axe, OID_AUTO, debug,
  /*
   * Various supported device vendors/products.
   */
 -static const struct usb_device_id axe_devs[] = {
 +static const STRUCT_USB_HOST_ID axe_devs[] = {
  #define	AXE_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
  	AXE_DEV(ABOCOM, UF200, 0),
  	AXE_DEV(ACERCM, EP1427X2, 0),
 
 Modified: stable/8/sys/dev/usb/net/if_cdce.c
 ==============================================================================
 --- stable/8/sys/dev/usb/net/if_cdce.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/net/if_cdce.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -263,7 +263,7 @@ static const struct usb_ether_methods cd
  	.ue_setpromisc = cdce_setpromisc,
  };
  
 -static const struct usb_device_id cdce_devs[] = {
 +static const STRUCT_USB_HOST_ID cdce_host_devs[] = {
  	{USB_VPI(USB_VENDOR_ACERLABS, USB_PRODUCT_ACERLABS_M5632, CDCE_FLAG_NO_UNION)},
  	{USB_VPI(USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250, CDCE_FLAG_NO_UNION)},
  	{USB_VPI(USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQLINUX, CDCE_FLAG_NO_UNION)},
 @@ -277,7 +277,9 @@ static const struct usb_device_id cdce_d
  	{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLA300, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)},
  	{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLC700, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)},
  	{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLC750, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)},
 +};
  
 +static const STRUCT_USB_DUAL_ID cdce_dual_devs[] = {
  	{USB_IF_CSI(UICLASS_CDC, UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL, 0)},
  	{USB_IF_CSI(UICLASS_CDC, UISUBCLASS_MOBILE_DIRECT_LINE_MODEL, 0)},
  	{USB_IF_CSI(UICLASS_CDC, UISUBCLASS_NETWORK_CONTROL_MODEL, 0)},
 @@ -472,8 +474,12 @@ static int
  cdce_probe(device_t dev)
  {
  	struct usb_attach_arg *uaa = device_get_ivars(dev);
 +	int error;
  
 -	return (usbd_lookup_id_by_uaa(cdce_devs, sizeof(cdce_devs), uaa));
 +	error = usbd_lookup_id_by_uaa(cdce_host_devs, sizeof(cdce_host_devs), uaa);
 +	if (error)
 +		error = usbd_lookup_id_by_uaa(cdce_dual_devs, sizeof(cdce_dual_devs), uaa);
 +	return (error);
  }
  
  static void
 
 Modified: stable/8/sys/dev/usb/net/if_cue.c
 ==============================================================================
 --- stable/8/sys/dev/usb/net/if_cue.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/net/if_cue.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -88,7 +88,7 @@ __FBSDID("$FreeBSD$");
  
  /* Belkin F5U111 adapter covered by NETMATE entry */
  
 -static const struct usb_device_id cue_devs[] = {
 +static const STRUCT_USB_HOST_ID cue_devs[] = {
  #define	CUE_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
  	CUE_DEV(CATC, NETMATE),
  	CUE_DEV(CATC, NETMATE2),
 
 Modified: stable/8/sys/dev/usb/net/if_ipheth.c
 ==============================================================================
 --- stable/8/sys/dev/usb/net/if_ipheth.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/net/if_ipheth.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -148,7 +148,7 @@ static const struct usb_ether_methods ip
      USB_IFACE_CLASS(c), USB_IFACE_SUBCLASS(sc), \
      USB_IFACE_PROTOCOL(pt)
  
 -static const struct usb_device_id ipheth_devs[] = {
 +static const STRUCT_USB_HOST_ID ipheth_devs[] = {
  	{IPHETH_ID(USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE,
  	    IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
  	    IPHETH_USBINTF_PROTO)},
 
 Modified: stable/8/sys/dev/usb/net/if_kue.c
 ==============================================================================
 --- stable/8/sys/dev/usb/net/if_kue.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/net/if_kue.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -100,7 +100,7 @@ __FBSDID("$FreeBSD$");
  /*
   * Various supported device vendors/products.
   */
 -static const struct usb_device_id kue_devs[] = {
 +static const STRUCT_USB_HOST_ID kue_devs[] = {
  #define	KUE_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
  	KUE_DEV(3COM, 3C19250),
  	KUE_DEV(3COM, 3C460),
 
 Modified: stable/8/sys/dev/usb/net/if_rue.c
 ==============================================================================
 --- stable/8/sys/dev/usb/net/if_rue.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/net/if_rue.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -108,7 +108,7 @@ SYSCTL_INT(_hw_usb_rue, OID_AUTO, debug,
   * Various supported device vendors/products.
   */
  
 -static const struct usb_device_id rue_devs[] = {
 +static const STRUCT_USB_HOST_ID rue_devs[] = {
  	{USB_VPI(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAKTX, 0)},
  	{USB_VPI(USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_USBKR100, 0)},
  	{USB_VPI(USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01, 0)},
 
 Modified: stable/8/sys/dev/usb/net/if_udav.c
 ==============================================================================
 --- stable/8/sys/dev/usb/net/if_udav.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/net/if_udav.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -199,7 +199,7 @@ SYSCTL_INT(_hw_usb_udav, OID_AUTO, debug
  #define	UDAV_CLRBIT(sc, reg, x)	\
  	udav_csr_write1(sc, reg, udav_csr_read1(sc, reg) & ~(x))
  
 -static const struct usb_device_id udav_devs[] = {
 +static const STRUCT_USB_HOST_ID udav_devs[] = {
  	/* ShanTou DM9601 USB NIC */
  	{USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_DM9601, 0)},
  	/* ShanTou ST268 USB NIC */
 
 Modified: stable/8/sys/dev/usb/net/uhso.c
 ==============================================================================
 --- stable/8/sys/dev/usb/net/uhso.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/net/uhso.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -247,7 +247,7 @@ static char *uhso_port_type_sysctl[] = {
  /* ifnet device unit allocations */
  static struct unrhdr *uhso_ifnet_unit = NULL;
  
 -static const struct usb_device_id uhso_devs[] = {
 +static const STRUCT_USB_HOST_ID uhso_devs[] = {
  #define	UHSO_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
  	/* Option GlobeSurfer iCON 7.2 */
  	UHSO_DEV(OPTION, GSICON72, UHSO_STATIC_IFACE),
 
 Modified: stable/8/sys/dev/usb/serial/u3g.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/u3g.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/u3g.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -182,7 +182,7 @@ MODULE_DEPEND(u3g, ucom, 1, 1, 1);
  MODULE_DEPEND(u3g, usb, 1, 1, 1);
  MODULE_VERSION(u3g, 1);
  
 -static const struct usb_device_id u3g_devs[] = {
 +static const STRUCT_USB_HOST_ID u3g_devs[] = {
  #define	U3G_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
  	U3G_DEV(ACERP, H10, 0),
  	U3G_DEV(AIRPLUS, MCD650, 0),
 
 Modified: stable/8/sys/dev/usb/serial/uark.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/uark.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/uark.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -170,7 +170,7 @@ MODULE_DEPEND(uark, ucom, 1, 1, 1);
  MODULE_DEPEND(uark, usb, 1, 1, 1);
  MODULE_VERSION(uark, 1);
  
 -static const struct usb_device_id uark_devs[] = {
 +static const STRUCT_USB_HOST_ID uark_devs[] = {
  	{USB_VPI(USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116, 0)},
  };
  
 
 Modified: stable/8/sys/dev/usb/serial/ubsa.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/ubsa.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/ubsa.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -239,7 +239,7 @@ static const struct ucom_callback ubsa_c
  	.ucom_poll = &ubsa_poll,
  };
  
 -static const struct usb_device_id ubsa_devs[] = {
 +static const STRUCT_USB_HOST_ID ubsa_devs[] = {
  	/* AnyData ADU-500A */
  	{USB_VPI(USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_500A, 0)},
  	/* AnyData ADU-E100A/H */
 
 Modified: stable/8/sys/dev/usb/serial/uchcom.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/uchcom.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/uchcom.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -204,7 +204,7 @@ static const struct uchcom_divider_recor
  
  #define	NUM_DIVIDERS	(sizeof (dividers) / sizeof (dividers[0]))
  
 -static const struct usb_device_id uchcom_devs[] = {
 +static const STRUCT_USB_HOST_ID uchcom_devs[] = {
  	{USB_VPI(USB_VENDOR_WCH, USB_PRODUCT_WCH_CH341SER, 0)},
  	{USB_VPI(USB_VENDOR_WCH2, USB_PRODUCT_WCH2_CH341SER, 0)},
  };
 
 Modified: stable/8/sys/dev/usb/serial/ucycom.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/ucycom.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/ucycom.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -180,7 +180,7 @@ MODULE_VERSION(ucycom, 1);
  /*
   * Supported devices
   */
 -static const struct usb_device_id ucycom_devs[] = {
 +static const STRUCT_USB_HOST_ID ucycom_devs[] = {
  	{USB_VPI(USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EARTHMATE, MODEL_CY7C64013)},
  };
  
 
 Modified: stable/8/sys/dev/usb/serial/ufoma.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/ufoma.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/ufoma.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -327,6 +327,11 @@ MODULE_DEPEND(ufoma, ucom, 1, 1, 1);
  MODULE_DEPEND(ufoma, usb, 1, 1, 1);
  MODULE_VERSION(ufoma, 1);
  
 +static const STRUCT_USB_HOST_ID ufoma_devs[] = {
 +	{USB_IFACE_CLASS(UICLASS_CDC),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_MCPC),},
 +};
 +
  static int
  ufoma_probe(device_t dev)
  {
 @@ -334,30 +339,31 @@ ufoma_probe(device_t dev)
  	struct usb_interface_descriptor *id;
  	struct usb_config_descriptor *cd;
  	usb_mcpc_acm_descriptor *mad;
 +	int error;
  
 -	if (uaa->usb_mode != USB_MODE_HOST) {
 +	if (uaa->usb_mode != USB_MODE_HOST)
  		return (ENXIO);
 -	}
 +
 +	error = usbd_lookup_id_by_uaa(ufoma_devs, sizeof(ufoma_devs), uaa);
 +	if (error)
 +		return (error);
 +
  	id = usbd_get_interface_descriptor(uaa->iface);
  	cd = usbd_get_config_descriptor(uaa->device);
  
 -	if ((id == NULL) ||
 -	    (cd == NULL) ||
 -	    (id->bInterfaceClass != UICLASS_CDC) ||
 -	    (id->bInterfaceSubClass != UISUBCLASS_MCPC)) {
 +	if (id == NULL || cd == NULL)
  		return (ENXIO);
 -	}
 +
  	mad = ufoma_get_intconf(cd, id, UDESC_VS_INTERFACE, UDESCSUB_MCPC_ACM);
 -	if (mad == NULL) {
 +	if (mad == NULL)
  		return (ENXIO);
 -	}
 +
  #ifndef UFOMA_HANDSFREE
  	if ((mad->bType == UMCPC_ACM_TYPE_AB5) ||
 -	    (mad->bType == UMCPC_ACM_TYPE_AB6)) {
 +	    (mad->bType == UMCPC_ACM_TYPE_AB6))
  		return (ENXIO);
 -	}
  #endif
 -	return (0);
 +	return (BUS_PROBE_GENERIC);
  }
  
  static int
 
 Modified: stable/8/sys/dev/usb/serial/uftdi.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/uftdi.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/uftdi.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -206,7 +206,7 @@ MODULE_DEPEND(uftdi, ucom, 1, 1, 1);
  MODULE_DEPEND(uftdi, usb, 1, 1, 1);
  MODULE_VERSION(uftdi, 1);
  
 -static struct usb_device_id uftdi_devs[] = {
 +static STRUCT_USB_HOST_ID uftdi_devs[] = {
  #define	UFTDI_DEV(v,p,t) \
    { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, UFTDI_TYPE_##t) }
  	UFTDI_DEV(ATMEL, STK541, 8U232AM),
 
 Modified: stable/8/sys/dev/usb/serial/ugensa.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/ugensa.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/ugensa.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -154,7 +154,7 @@ MODULE_DEPEND(ugensa, ucom, 1, 1, 1);
  MODULE_DEPEND(ugensa, usb, 1, 1, 1);
  MODULE_VERSION(ugensa, 1);
  
 -static const struct usb_device_id ugensa_devs[] = {
 +static const STRUCT_USB_HOST_ID ugensa_devs[] = {
  	{USB_VPI(USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_PC5220, 0)},
  	{USB_VPI(USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CDMA_MODEM1, 0)},
  	{USB_VPI(USB_VENDOR_KYOCERA2, USB_PRODUCT_KYOCERA2_CDMA_MSM_K, 0)},
 
 Modified: stable/8/sys/dev/usb/serial/uipaq.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/uipaq.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/uipaq.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -153,7 +153,7 @@ static const struct ucom_callback uipaq_
   * support the same hardware. Numeric values are used where no usbdevs
   * entries exist.
   */
 -static const struct usb_device_id uipaq_devs[] = {
 +static const STRUCT_USB_HOST_ID uipaq_devs[] = {
  	/* Socket USB Sync */
  	{USB_VPI(0x0104, 0x00be, 0)},
  	/* USB Sync 0301 */
 
 Modified: stable/8/sys/dev/usb/serial/ulpt.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/ulpt.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/ulpt.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -483,24 +483,39 @@ ulpt_ioctl(struct usb_fifo *fifo, u_long
  	return (ENODEV);
  }
  
 +static const STRUCT_USB_HOST_ID ulpt_devs[] = {
 +	/* Uni-directional USB printer */
 +	{USB_IFACE_CLASS(UICLASS_PRINTER),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_PRINTER),
 +	 USB_IFACE_PROTOCOL(UIPROTO_PRINTER_UNI)},
 +
 +	/* Bi-directional USB printer */
 +	{USB_IFACE_CLASS(UICLASS_PRINTER),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_PRINTER),
 +	 USB_IFACE_PROTOCOL(UIPROTO_PRINTER_BI)},
 +
 +	/* 1284 USB printer */
 +	{USB_IFACE_CLASS(UICLASS_PRINTER),
 +	 USB_IFACE_SUBCLASS(UISUBCLASS_PRINTER),
 +	 USB_IFACE_PROTOCOL(UIPROTO_PRINTER_1284)},
 +};
 +
  static int
  ulpt_probe(device_t dev)
  {
  	struct usb_attach_arg *uaa = device_get_ivars(dev);
 +	int error;
  
  	DPRINTFN(11, "\n");
  
 -	if (uaa->usb_mode != USB_MODE_HOST) {
 +	if (uaa->usb_mode != USB_MODE_HOST)
  		return (ENXIO);
 -	}
 -	if ((uaa->info.bInterfaceClass == UICLASS_PRINTER) &&
 -	    (uaa->info.bInterfaceSubClass == UISUBCLASS_PRINTER) &&
 -	    ((uaa->info.bInterfaceProtocol == UIPROTO_PRINTER_UNI) ||
 -	    (uaa->info.bInterfaceProtocol == UIPROTO_PRINTER_BI) ||
 -	    (uaa->info.bInterfaceProtocol == UIPROTO_PRINTER_1284))) {
 -		return (0);
 -	}
 -	return (ENXIO);
 +
 +	error = usbd_lookup_id_by_uaa(ulpt_devs, sizeof(ulpt_devs), uaa);
 +	if (error)
 +		return (error);
 +
 +	return (BUS_PROBE_GENERIC);
  }
  
  static int
 
 Modified: stable/8/sys/dev/usb/serial/umcs.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/umcs.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/umcs.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -253,7 +253,7 @@ static struct ucom_callback umcs7840_cal
  	.ucom_poll = &umcs7840_poll,
  };
  
 -static const struct usb_device_id umcs7840_devs[] = {
 +static const STRUCT_USB_HOST_ID umcs7840_devs[] = {
  	{USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7820, 0)},
  	{USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7840, 0)},
  };
 
 Modified: stable/8/sys/dev/usb/serial/umct.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/umct.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/umct.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -192,7 +192,7 @@ static const struct ucom_callback umct_c
  	.ucom_poll = &umct_poll,
  };
  
 -static const struct usb_device_id umct_devs[] = {
 +static const STRUCT_USB_HOST_ID umct_devs[] = {
  	{USB_VPI(USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232, 0)},
  	{USB_VPI(USB_VENDOR_MCT, USB_PRODUCT_MCT_SITECOM_USB232, 0)},
  	{USB_VPI(USB_VENDOR_MCT, USB_PRODUCT_MCT_DU_H3SP_USB232, 0)},
 
 Modified: stable/8/sys/dev/usb/serial/umodem.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/umodem.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/umodem.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -123,7 +123,7 @@ SYSCTL_INT(_hw_usb_umodem, OID_AUTO, deb
      &umodem_debug, 0, "Debug level");
  #endif
  
 -static const struct usb_device_id umodem_devs[] = {
 +static const STRUCT_USB_HOST_ID umodem_devs[] = {
  	/* Generic Modem class match */
  	{USB_IFACE_CLASS(UICLASS_CDC),
  		USB_IFACE_SUBCLASS(UISUBCLASS_ABSTRACT_CONTROL_MODEL),
 @@ -276,11 +276,14 @@ umodem_probe(device_t dev)
  
  	DPRINTFN(11, "\n");
  
 -	if (uaa->usb_mode != USB_MODE_HOST) {
 +	if (uaa->usb_mode != USB_MODE_HOST)
  		return (ENXIO);
 -	}
 +
  	error = usbd_lookup_id_by_uaa(umodem_devs, sizeof(umodem_devs), uaa);
 -	return (error);
 +	if (error)
 +		return (error);
 +
 +	return (BUS_PROBE_GENERIC);
  }
  
  static int
 
 Modified: stable/8/sys/dev/usb/serial/umoscom.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/umoscom.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/umoscom.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -280,7 +280,7 @@ MODULE_DEPEND(umoscom, ucom, 1, 1, 1);
  MODULE_DEPEND(umoscom, usb, 1, 1, 1);
  MODULE_VERSION(umoscom, 1);
  
 -static const struct usb_device_id umoscom_devs[] = {
 +static const STRUCT_USB_HOST_ID umoscom_devs[] = {
  	{USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7703, 0)}
  };
  
 
 Modified: stable/8/sys/dev/usb/serial/uplcom.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/uplcom.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/uplcom.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -247,7 +247,7 @@ static struct ucom_callback uplcom_callb
  #define	UPLCOM_DEV(v,p)				\
    { USB_VENDOR(USB_VENDOR_##v), USB_PRODUCT(USB_PRODUCT_##v##_##p) }
  
 -static const struct usb_device_id uplcom_devs[] = {
 +static const STRUCT_USB_HOST_ID uplcom_devs[] = {
  	UPLCOM_DEV(ACERP, S81),			/* BenQ S81 phone */
  	UPLCOM_DEV(ADLINK, ND6530),		/* ADLINK ND-6530 USB-Serial */
  	UPLCOM_DEV(ALCATEL, OT535),		/* Alcatel One Touch 535/735 */
 
 Modified: stable/8/sys/dev/usb/serial/uslcom.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/uslcom.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/uslcom.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -173,7 +173,7 @@ static struct ucom_callback uslcom_callb
  	.ucom_poll = &uslcom_poll,
  };
  
 -static const struct usb_device_id uslcom_devs[] = {
 +static const STRUCT_USB_HOST_ID uslcom_devs[] = {
  #define	USLCOM_DEV(v,p)  { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
      USLCOM_DEV(BALTECH, CARDREADER),
      USLCOM_DEV(CLIPSAL, 5500PCU),
 
 Modified: stable/8/sys/dev/usb/serial/uvisor.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/uvisor.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/uvisor.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -253,7 +253,7 @@ MODULE_DEPEND(uvisor, ucom, 1, 1, 1);
  MODULE_DEPEND(uvisor, usb, 1, 1, 1);
  MODULE_VERSION(uvisor, 1);
  
 -static const struct usb_device_id uvisor_devs[] = {
 +static const STRUCT_USB_HOST_ID uvisor_devs[] = {
  #define	UVISOR_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
  	UVISOR_DEV(ACEECA, MEZ1000, UVISOR_FLAG_PALM4),
  	UVISOR_DEV(ALPHASMART, DANA_SYNC, UVISOR_FLAG_PALM4),
 
 Modified: stable/8/sys/dev/usb/serial/uvscom.c
 ==============================================================================
 --- stable/8/sys/dev/usb/serial/uvscom.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/serial/uvscom.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -233,7 +233,7 @@ static const struct ucom_callback uvscom
  	.ucom_poll = &uvscom_poll,
  };
  
 -static const struct usb_device_id uvscom_devs[] = {
 +static const STRUCT_USB_HOST_ID uvscom_devs[] = {
  	/* SUNTAC U-Cable type A4 */
  	{USB_VPI(USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS144L4, 0)},
  	/* SUNTAC U-Cable type D2 */
 
 Modified: stable/8/sys/dev/usb/storage/umass.c
 ==============================================================================
 --- stable/8/sys/dev/usb/storage/umass.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/storage/umass.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -721,6 +721,11 @@ MODULE_VERSION(umass, 1);
   * USB device probe/attach/detach
   */
  
 +static const STRUCT_USB_HOST_ID __used umass_devs[] = {
 +	/* generic mass storage class */
 +	{USB_IFACE_CLASS(UICLASS_MASS),},
 +};
 +
  static uint16_t
  umass_get_proto(struct usb_interface *iface)
  {
 
 Modified: stable/8/sys/dev/usb/storage/urio.c
 ==============================================================================
 --- stable/8/sys/dev/usb/storage/urio.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/storage/urio.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -198,22 +198,25 @@ DRIVER_MODULE(urio, uhub, urio_driver, u
  MODULE_DEPEND(urio, usb, 1, 1, 1);
  MODULE_VERSION(urio, 1);
  
 +static const STRUCT_USB_HOST_ID urio_devs[] = {
 +	{USB_VPI(USB_VENDOR_DIAMOND, USB_PRODUCT_DIAMOND_RIO500USB, 0)},
 +	{USB_VPI(USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO600USB, 0)},
 +	{USB_VPI(USB_VENDOR_DIAMOND2, USB_PRODUCT_DIAMOND2_RIO800USB, 0)},
 +};
 +
  static int
  urio_probe(device_t dev)
  {
  	struct usb_attach_arg *uaa = device_get_ivars(dev);
  
 -	if (uaa->usb_mode != USB_MODE_HOST) {
 +	if (uaa->usb_mode != USB_MODE_HOST)
  		return (ENXIO);
 -	}
 -	if ((((uaa->info.idVendor == USB_VENDOR_DIAMOND) &&
 -	    (uaa->info.idProduct == USB_PRODUCT_DIAMOND_RIO500USB)) ||
 -	    ((uaa->info.idVendor == USB_VENDOR_DIAMOND2) &&
 -	    ((uaa->info.idProduct == USB_PRODUCT_DIAMOND2_RIO600USB) ||
 -	    (uaa->info.idProduct == USB_PRODUCT_DIAMOND2_RIO800USB)))))
 -		return (0);
 -	else
 +	if (uaa->info.bConfigIndex != 0)
  		return (ENXIO);
 +	if (uaa->info.bIfaceIndex != 0)
 +		return (ENXIO);
 +
 +	return (usbd_lookup_id_by_uaa(urio_devs, sizeof(urio_devs), uaa));
  }
  
  static int
 
 Modified: stable/8/sys/dev/usb/usb_device.c
 ==============================================================================
 --- stable/8/sys/dev/usb/usb_device.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/usb_device.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -1297,6 +1297,21 @@ usb_probe_and_attach(struct usb_device *
  
  	usb_init_attach_arg(udev, &uaa);
  
 +	/*
 +	 * If the whole USB device is targeted, invoke the USB event
 +	 * handler(s):
 +	 */
 +	if (iface_index == USB_IFACE_INDEX_ANY) {
 +
 +		EVENTHANDLER_INVOKE(usb_dev_configured, udev, &uaa);
 +
 +		if (uaa.dev_state != UAA_DEV_READY) {
 +			/* leave device unconfigured */
 +			usb_unconfigure(udev, 0);
 +			goto done;
 +		}
 +	}
 +
  	/* Check if only one interface should be probed: */
  	if (iface_index != USB_IFACE_INDEX_ANY) {
  		i = iface_index;
 @@ -1343,17 +1358,18 @@ usb_probe_and_attach(struct usb_device *
  		    uaa.info.bIfaceIndex,
  		    uaa.info.bIfaceNum);
  
 -		if (usb_probe_and_attach_sub(udev, &uaa)) {
 -			/* ignore */
 -		}
 -	}
 +		usb_probe_and_attach_sub(udev, &uaa);
  
 -	if (uaa.temp_dev) {
 -		/* remove the last created child; it is unused */
 -
 -		if (device_delete_child(udev->parent_dev, uaa.temp_dev)) {
 +		/*
 +		 * Remove the leftover child, if any, to enforce that
 +		 * a new nomatch devd event is generated for the next
 +		 * interface if no driver is found:
 +		 */
 +		if (uaa.temp_dev == NULL)
 +			continue;
 +		if (device_delete_child(udev->parent_dev, uaa.temp_dev))
  			DPRINTFN(0, "device delete child failed\n");
 -		}
 +		uaa.temp_dev = NULL;
  	}
  done:
  	if (do_unlock)
 @@ -1526,7 +1542,7 @@ usb_alloc_device(device_t parent_dev, st
  
  	/* initialise our SX-lock */
  	sx_init_flags(&udev->enum_sx, "USB config SX lock", SX_DUPOK);
 -	sx_init_flags(&udev->sr_sx, "USB suspend and resume SX lock", SX_DUPOK);
 +	sx_init_flags(&udev->sr_sx, "USB suspend and resume SX lock", SX_NOWITNESS);
  
  	cv_init(&udev->ctrlreq_cv, "WCTRL");
  	cv_init(&udev->ref_cv, "UGONE");
 @@ -1834,11 +1850,6 @@ repeat_set_config:
  			}
  		}
  	}
 -	EVENTHANDLER_INVOKE(usb_dev_configured, udev, &uaa);
 -	if (uaa.dev_state != UAA_DEV_READY) {
 -		/* leave device unconfigured */
 -		usb_unconfigure(udev, 0);
 -	}
  
  config_done:
  	DPRINTF("new dev (addr %d), udev=%p, parent_hub=%p\n",
 
 Modified: stable/8/sys/dev/usb/usb_hub.c
 ==============================================================================
 --- stable/8/sys/dev/usb/usb_hub.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/usb_hub.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -1334,15 +1334,19 @@ uhub_child_pnpinfo_string(device_t paren
  		    "devclass=0x%02x devsubclass=0x%02x "
  		    "sernum=\"%s\" "
  		    "release=0x%04x "
 -		    "intclass=0x%02x intsubclass=0x%02x" "%s%s",
 +		    "mode=%s "
 +		    "intclass=0x%02x intsubclass=0x%02x "
 +		    "intprotocol=0x%02x " "%s%s",
  		    UGETW(res.udev->ddesc.idVendor),
  		    UGETW(res.udev->ddesc.idProduct),
  		    res.udev->ddesc.bDeviceClass,
  		    res.udev->ddesc.bDeviceSubClass,
  		    usb_get_serial(res.udev),
  		    UGETW(res.udev->ddesc.bcdDevice),
 +		    (res.udev->flags.usb_mode == USB_MODE_HOST) ? "host" : "device",
  		    iface->idesc->bInterfaceClass,
  		    iface->idesc->bInterfaceSubClass,
 +		    iface->idesc->bInterfaceProtocol,
  		    iface->pnpinfo ? " " : "",
  		    iface->pnpinfo ? iface->pnpinfo : "");
  	} else {
 
 Modified: stable/8/sys/dev/usb/usb_lookup.c
 ==============================================================================
 --- stable/8/sys/dev/usb/usb_lookup.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/usb_lookup.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -42,6 +42,8 @@
  #include <sys/callout.h>
  #include <sys/malloc.h>
  #include <sys/priv.h>
 +#include <sys/limits.h>
 +#include <sys/endian.h>
  
  #include <dev/usb/usb.h>
  #include <dev/usb/usbdi.h>
 @@ -105,13 +107,6 @@ usbd_lookup_id_by_info(const struct usb_
  		    (id->bDeviceProtocol != info->bDeviceProtocol)) {
  			continue;
  		}
 -		if ((info->bDeviceClass == 0xFF) &&
 -		    (!(id->match_flag_vendor)) &&
 -		    ((id->match_flag_int_class) ||
 -		    (id->match_flag_int_subclass) ||
 -		    (id->match_flag_int_protocol))) {
 -			continue;
 -		}
  		if ((id->match_flag_int_class) &&
  		    (id->bInterfaceClass != info->bInterfaceClass)) {
  			continue;
 @@ -151,3 +146,108 @@ usbd_lookup_id_by_uaa(const struct usb_d
  	}
  	return (ENXIO);
  }
 +
 +/*------------------------------------------------------------------------*
 + *	Export the USB device ID format we use to userspace tools.
 + *------------------------------------------------------------------------*/
 +#if BYTE_ORDER == BIG_ENDIAN
 +#define	U16_XOR "8"
 +#define	U32_XOR "12"
 +#define	U64_XOR "56"
 +#define	U8_BITFIELD_XOR "7"
 +#define	U16_BITFIELD_XOR "15"
 +#define	U32_BITFIELD_XOR "31"
 +#define	U64_BITFIELD_XOR "63"
 +#else
 +#define	U16_XOR "0"
 +#define	U32_XOR "0"
 +#define	U64_XOR "0"
 +#define	U8_BITFIELD_XOR "0"
 +#define	U16_BITFIELD_XOR "0"
 +#define	U32_BITFIELD_XOR "0"
 +#define	U64_BITFIELD_XOR "0"
 +#endif
 +
 +#if USB_HAVE_COMPAT_LINUX
 +#define	MFL_SIZE "1"
 +#else
 +#define	MFL_SIZE "0"
 +#endif
 +
 +#ifdef KLD_MODULE
 +static const char __section("bus_autoconf_format") __used usb_id_format[] = {
 +
 +	/* Declare that three different sections use the same format */
 +
 +	"usb_host_id{256,:}"
 +	"usb_device_id{256,:}"
 +	"usb_dual_id{256,:}"
 +
 +	/* List size of fields in the usb_device_id structure */
 +
 +#if ULONG_MAX >= 0xFFFFFFFFUL
 +	"unused{0,8}"
 +	"unused{0,8}"
 +	"unused{0,8}"
 +	"unused{0,8}"
 +#if ULONG_MAX >= 0xFFFFFFFFFFFFFFFFULL
 +	"unused{0,8}"
 +	"unused{0,8}"
 +	"unused{0,8}"
 +	"unused{0,8}"
 +#endif
 +#else
 +#error "Please update code."
 +#endif
 +
 +	"idVendor[0]{" U16_XOR ",8}"
 +	"idVendor[1]{" U16_XOR ",8}"
 +	"idProduct[0]{" U16_XOR ",8}"
 +	"idProduct[1]{" U16_XOR ",8}"
 +	"bcdDevice_lo[0]{" U16_XOR ",8}"
 +	"bcdDevice_lo[1]{" U16_XOR ",8}"
 +	"bcdDevice_hi[0]{" U16_XOR ",8}"
 +	"bcdDevice_hi[1]{" U16_XOR ",8}"
 +
 +	"bDeviceClass{0,8}"
 +	"bDeviceSubClass{0,8}"
 +	"bDeviceProtocol{0,8}"
 +	"bInterfaceClass{0,8}"
 +	"bInterfaceSubClass{0,8}"
 +	"bInterfaceProtocol{0,8}"
 +
 +	"mf_vendor{" U8_BITFIELD_XOR ",1}"
 +	"mf_product{" U8_BITFIELD_XOR ",1}"
 +	"mf_dev_lo{" U8_BITFIELD_XOR ",1}"
 +	"mf_dev_hi{" U8_BITFIELD_XOR ",1}"
 +
 +	"mf_dev_class{" U8_BITFIELD_XOR ",1}"
 +	"mf_dev_subclass{" U8_BITFIELD_XOR ",1}"
 +	"mf_dev_protocol{" U8_BITFIELD_XOR ",1}"
 +	"mf_int_class{" U8_BITFIELD_XOR ",1}"
 +
 +	"mf_int_subclass{" U8_BITFIELD_XOR ",1}"
 +	"mf_int_protocol{" U8_BITFIELD_XOR ",1}"
 +	"unused{" U8_BITFIELD_XOR ",6}"
 +
 +	"mfl_vendor{" U16_XOR "," MFL_SIZE "}"
 +	"mfl_product{" U16_XOR "," MFL_SIZE "}"
 +	"mfl_dev_lo{" U16_XOR "," MFL_SIZE "}"
 +	"mfl_dev_hi{" U16_XOR "," MFL_SIZE "}"
 +
 +	"mfl_dev_class{" U16_XOR "," MFL_SIZE "}"
 +	"mfl_dev_subclass{" U16_XOR "," MFL_SIZE "}"
 +	"mfl_dev_protocol{" U16_XOR "," MFL_SIZE "}"
 +	"mfl_int_class{" U16_XOR "," MFL_SIZE "}"
 +
 +	"mfl_int_subclass{" U16_XOR "," MFL_SIZE "}"
 +	"mfl_int_protocol{" U16_XOR "," MFL_SIZE "}"
 +	"unused{" U16_XOR "," MFL_SIZE "}"
 +	"unused{" U16_XOR "," MFL_SIZE "}"
 +
 +	"unused{" U16_XOR "," MFL_SIZE "}"
 +	"unused{" U16_XOR "," MFL_SIZE "}"
 +	"unused{" U16_XOR "," MFL_SIZE "}"
 +	"unused{" U16_XOR "," MFL_SIZE "}"
 +};
 +#endif
 
 Modified: stable/8/sys/dev/usb/usb_msctest.c
 ==============================================================================
 --- stable/8/sys/dev/usb/usb_msctest.c	Mon Jun 27 20:32:19 2011	(r223604)
 +++ stable/8/sys/dev/usb/usb_msctest.c	Mon Jun 27 20:59:43 2011	(r223605)
 @@ -489,6 +489,24 @@ bbb_attach(struct usb_device *udev, uint
  	struct usb_interface_descriptor *id;
  	struct bbb_transfer *sc;
  	usb_error_t err;
 +	uint8_t do_unlock;
 +
 +	/* automatic locking */
 +	if (usbd_enum_is_locked(udev)) {
 +		do_unlock = 0;
 +	} else {
 +		do_unlock = 1;
 +		usbd_enum_lock(udev);
 +	}
 +
 +	/*
 +	 * Make sure any driver which is hooked up to this interface,
 +	 * like umass is gone:
 +	 */
 +	usb_detach_device(udev, iface_index, 0);
 +
 +	if (do_unlock)
 +		usbd_enum_unlock(udev);
  
  	iface = usbd_get_iface(udev, iface_index);
 
 *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->closed 
State-Changed-By: brueffer 
State-Changed-When: Fri Feb 14 17:15:00 CET 2014 
State-Changed-Why:  
Support for this was added a while ago, looks like this PR can be closed now. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=157903 
>Unformatted:
