summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorxc151355 <none@none>2006-11-20 22:51:46 -0800
committerxc151355 <none@none>2006-11-20 22:51:46 -0800
commit0ba2cbe97e0678a691742f98d2532caed0a2c4aa (patch)
tree999e927888ff26967f593246afc931402e17b50e /usr/src
parent0c64a9b435314788e185507d40ef9fae71507f5a (diff)
downloadillumos-gate-0ba2cbe97e0678a691742f98d2532caed0a2c4aa.tar.gz
PSARC/2006/406 WiFi for GLDv3
PSARC/2006/517 WiFi for GLDv3 Addendum PSARC/2006/623 WiFi for GLDv3 Addendum #2 6253476 dladm exec_attr entry doesn't allow show-link to work 6362391 ath driver needs to be updated to use the latest HAL 6364198 system crashes if multiple ath driver instances are modunload'ed 6367259 ath driver needs to support GLDv3 6407181 ath driver panics in ath_rate_update function 6421983 ath driver needs shared_key authmode support 6472427 ath driver causes watchdog timeout error 6484943 integrate WiFi/GLDv3 --HG-- rename : usr/src/uts/common/io/ath/ath_ieee80211.c => deleted_files/usr/src/uts/common/io/ath/ath_ieee80211.c rename : usr/src/uts/common/io/ath/ath_ieee80211.h => deleted_files/usr/src/uts/common/io/ath/ath_ieee80211.h rename : usr/src/uts/common/io/ath/ath_wificonfig.c => deleted_files/usr/src/uts/common/io/ath/ath_wificonfig.c
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/Makefile.lint1
-rw-r--r--usr/src/Targetdirs4
-rw-r--r--usr/src/cmd/Adm/sun/passwd1
-rw-r--r--usr/src/cmd/Adm/sun/shadow1
-rw-r--r--usr/src/cmd/bsmrecord/audit_record_attr.txt30
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/in.ftpd/ftpusers1
-rw-r--r--usr/src/cmd/dladm/Makefile48
-rw-r--r--usr/src/cmd/dladm/dladm.c2090
-rw-r--r--usr/src/cmd/dladm/linkprop.conf30
-rw-r--r--usr/src/cmd/dladm/secobj.conf30
-rw-r--r--usr/src/cmd/svc/milestone/net-physical14
-rw-r--r--usr/src/cmd/truss/codes.c6
-rw-r--r--usr/src/head/auth_list.h1
-rw-r--r--usr/src/lib/Makefile5
-rw-r--r--usr/src/lib/libbsm/audit_class.txt1
-rw-r--r--usr/src/lib/libbsm/audit_event.txt2
-rw-r--r--usr/src/lib/libbsm/common/adt_event.h18
-rw-r--r--usr/src/lib/libbsm/common/adt_xlate.c44
-rw-r--r--usr/src/lib/libbsm/common/adt_xml.txt33
-rw-r--r--usr/src/lib/libdladm/Makefile2
-rw-r--r--usr/src/lib/libdladm/Makefile.com5
-rw-r--r--usr/src/lib/libdladm/common/libdladm.c274
-rw-r--r--usr/src/lib/libdladm/common/libdladm.h72
-rw-r--r--usr/src/lib/libdladm/common/libdladm_impl.h51
-rw-r--r--usr/src/lib/libdladm/common/linkprop.c700
-rw-r--r--usr/src/lib/libdladm/common/mapfile-vers14
-rw-r--r--usr/src/lib/libdladm/common/secobj.c634
-rw-r--r--usr/src/lib/liblaadm/common/liblaadm.c26
-rw-r--r--usr/src/lib/libsecdb/auth_attr.txt1
-rw-r--r--usr/src/lib/libsecdb/exec_attr.txt5
-rw-r--r--usr/src/lib/libsecdb/help/auths/LinkSecurity.html45
-rw-r--r--usr/src/lib/libsecdb/help/auths/Makefile3
-rw-r--r--usr/src/lib/libsecdb/help/profiles/Makefile8
-rw-r--r--usr/src/lib/libsecdb/help/profiles/RtNetLinkSecure.html39
-rw-r--r--usr/src/lib/libsecdb/prof_attr.txt3
-rw-r--r--usr/src/lib/libwladm/Makefile62
-rw-r--r--usr/src/lib/libwladm/Makefile.com51
-rw-r--r--usr/src/lib/libwladm/common/libwladm.c1957
-rw-r--r--usr/src/lib/libwladm/common/libwladm.h209
-rw-r--r--usr/src/lib/libwladm/common/libwladm_impl.h82
-rw-r--r--usr/src/lib/libwladm/common/llib-lwladm31
-rw-r--r--usr/src/lib/libwladm/common/mapfile-vers60
-rw-r--r--usr/src/lib/libwladm/i386/Makefile30
-rw-r--r--usr/src/lib/libwladm/sparc/Makefile30
-rw-r--r--usr/src/pkgdefs/SUNW0on/prototype_com2
-rw-r--r--usr/src/pkgdefs/SUNWatheros/postinstall2
-rw-r--r--usr/src/pkgdefs/SUNWckr/prototype_i3864
-rw-r--r--usr/src/pkgdefs/SUNWcnetr/Makefile9
-rw-r--r--usr/src/pkgdefs/SUNWcnetr/postinstall32
-rw-r--r--usr/src/pkgdefs/SUNWcnetr/prototype_com13
-rw-r--r--usr/src/pkgdefs/SUNWcslr/prototype_com1
-rw-r--r--usr/src/pkgdefs/SUNWcsu/prototype_com2
-rw-r--r--usr/src/pkgdefs/common_files/i.ftpusers9
-rw-r--r--usr/src/pkgdefs/common_files/i.minorperm_i38633
-rw-r--r--usr/src/pkgdefs/common_files/i.minorperm_sparc28
-rw-r--r--usr/src/pkgdefs/common_files/i.passwd20
-rw-r--r--usr/src/pkgdefs/common_files/i.shadow16
-rw-r--r--usr/src/pkgdefs/etc/exception_list_i38653
-rw-r--r--usr/src/pkgdefs/etc/exception_list_sparc37
-rw-r--r--usr/src/tools/scripts/bfu.sh29
-rw-r--r--usr/src/uts/common/Makefile.files9
-rw-r--r--usr/src/uts/common/Makefile.rules7
-rw-r--r--usr/src/uts/common/io/aggr/aggr_port.c2
-rw-r--r--usr/src/uts/common/io/ath/ath_aux.c275
-rw-r--r--usr/src/uts/common/io/ath/ath_aux.h18
-rw-r--r--usr/src/uts/common/io/ath/ath_hal.h358
-rw-r--r--usr/src/uts/common/io/ath/ath_ieee80211.c2899
-rw-r--r--usr/src/uts/common/io/ath/ath_ieee80211.h743
-rw-r--r--usr/src/uts/common/io/ath/ath_impl.h24
-rw-r--r--usr/src/uts/common/io/ath/ath_main.c1445
-rw-r--r--usr/src/uts/common/io/ath/ath_osdep.c48
-rw-r--r--usr/src/uts/common/io/ath/ath_rate.c52
-rw-r--r--usr/src/uts/common/io/ath/ath_rate.h4
-rw-r--r--usr/src/uts/common/io/ath/ath_wificonfig.c818
-rw-r--r--usr/src/uts/common/io/ath/hal_x86_32.o.uu6620
-rw-r--r--usr/src/uts/common/io/ath/hal_x86_64.o.uu8911
-rw-r--r--usr/src/uts/common/io/dld/dld_drv.c244
-rw-r--r--usr/src/uts/common/io/dld/dld_proto.c5
-rw-r--r--usr/src/uts/common/io/dld/dld_str.c76
-rw-r--r--usr/src/uts/common/io/dls/dls_vlan.c4
-rw-r--r--usr/src/uts/common/io/mac/mac.c3
-rw-r--r--usr/src/uts/common/io/mac/plugins/mac_ether.c1
-rw-r--r--usr/src/uts/common/io/mac/plugins/mac_wifi.c416
-rw-r--r--usr/src/uts/common/io/net80211/net80211.c634
-rw-r--r--usr/src/uts/common/io/net80211/net80211_crypto.c510
-rw-r--r--usr/src/uts/common/io/net80211/net80211_crypto_none.c131
-rw-r--r--usr/src/uts/common/io/net80211/net80211_crypto_wep.c420
-rw-r--r--usr/src/uts/common/io/net80211/net80211_impl.h408
-rw-r--r--usr/src/uts/common/io/net80211/net80211_input.c1233
-rw-r--r--usr/src/uts/common/io/net80211/net80211_ioctl.c1359
-rw-r--r--usr/src/uts/common/io/net80211/net80211_node.c1503
-rw-r--r--usr/src/uts/common/io/net80211/net80211_output.c723
-rw-r--r--usr/src/uts/common/io/net80211/net80211_proto.c669
-rw-r--r--usr/src/uts/common/sys/dld.h34
-rw-r--r--usr/src/uts/common/sys/dld_impl.h5
-rw-r--r--usr/src/uts/common/sys/dlpi.h2
-rw-r--r--usr/src/uts/common/sys/mac.h2
-rw-r--r--usr/src/uts/common/sys/mac_impl.h1
-rw-r--r--usr/src/uts/common/sys/mac_wifi.h116
-rw-r--r--usr/src/uts/common/sys/net80211.h528
-rw-r--r--usr/src/uts/common/sys/net80211_crypto.h218
-rw-r--r--usr/src/uts/common/sys/net80211_proto.h541
-rw-r--r--usr/src/uts/intel/Makefile.intel.shared2
-rw-r--r--usr/src/uts/intel/ath/Makefile8
-rw-r--r--usr/src/uts/intel/mac_wifi/Makefile92
-rw-r--r--usr/src/uts/intel/net80211/Makefile95
-rw-r--r--usr/src/uts/intel/os/minor_perm19
-rw-r--r--usr/src/uts/sparc/os/minor_perm17
108 files changed, 26806 insertions, 12490 deletions
diff --git a/usr/src/Makefile.lint b/usr/src/Makefile.lint
index e00af1c837..5944ecd55c 100644
--- a/usr/src/Makefile.lint
+++ b/usr/src/Makefile.lint
@@ -375,6 +375,7 @@ COMMON_SUBDIRS = \
lib/libuutil \
lib/libwanboot \
lib/libwanbootutil \
+ lib/libwladm \
lib/libxnet \
lib/libzfs \
lib/libzfs_jni \
diff --git a/usr/src/Targetdirs b/usr/src/Targetdirs
index 1dabd06793..1b7d92e374 100644
--- a/usr/src/Targetdirs
+++ b/usr/src/Targetdirs
@@ -402,6 +402,7 @@ ROOT.SFW64+= \
OTHERS= \
/dev/term \
/tmp \
+ /etc/dladm \
/etc/mail \
/etc/mail/cf \
/etc/mail/cf/cf \
@@ -538,6 +539,9 @@ $(ROOT)/etc/mail/cf/sh \
$(ROOT)/usr/mail \
$(ROOT)/var/mail := GROUP= mail
+$(ROOT)/etc/dladm := OWNER= dladm
+$(ROOT)/etc/dladm := GROUP= sys
+
$(ROOT)/var/spool/lp:= OWNER= lp
$(ROOT)/var/spool/lp:= GROUP= lp
$(ROOT)/var/spool/lp:= DIRMODE= 775
diff --git a/usr/src/cmd/Adm/sun/passwd b/usr/src/cmd/Adm/sun/passwd
index f2766c3867..a56c20c725 100644
--- a/usr/src/cmd/Adm/sun/passwd
+++ b/usr/src/cmd/Adm/sun/passwd
@@ -6,6 +6,7 @@ adm:x:4:4:Admin:/var/adm:
lp:x:71:8:Line Printer Admin:/usr/spool/lp:
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
+dladm:x:15:3:Datalink Admin:/:
smmsp:x:25:25:SendMail Message Submission Program:/:
listen:x:37:4:Network Admin:/usr/net/nls:
gdm:x:50:50:GDM Reserved UID:/:
diff --git a/usr/src/cmd/Adm/sun/shadow b/usr/src/cmd/Adm/sun/shadow
index 7be836e6f5..c63c4dc66a 100644
--- a/usr/src/cmd/Adm/sun/shadow
+++ b/usr/src/cmd/Adm/sun/shadow
@@ -6,6 +6,7 @@ adm:NP:6445::::::
lp:NP:6445::::::
uucp:NP:6445::::::
nuucp:NP:6445::::::
+dladm:*LK*:::::::
smmsp:NP:6445::::::
listen:*LK*:::::::
gdm:*LK*:::::::
diff --git a/usr/src/cmd/bsmrecord/audit_record_attr.txt b/usr/src/cmd/bsmrecord/audit_record_attr.txt
index 6c3b3e63f2..3e6b794719 100644
--- a/usr/src/cmd/bsmrecord/audit_record_attr.txt
+++ b/usr/src/cmd/bsmrecord/audit_record_attr.txt
@@ -2600,10 +2600,28 @@ label=AUE_remove
format=uauth1:[text2]:text3
comment=authorization used:mount point:device
label=AUE_pool_import
- program=hald
- format=uauth1:text2:text3
- comment=authorization used:pool:device
+ program=hald
+ format=uauth1:text2:text3
+ comment=authorization used:pool:device
label=AUE_pool_export
- program=hald
- format=uauth1:text2:text3
- comment=authorization used:pool:device
+ program=hald
+ format=uauth1:text2:text3
+ comment=authorization used:pool:device
+
+label=AUE_dladm_create_secobj
+ program=/usr/sbin/dladm
+ title:create wifi security object
+ see=dladm(1M)
+ format=uauth1:text2:text3
+ comment=authorization used:
+ comment=object class name:
+ comment=object name
+
+label=AUE_dladm_delete_secobj
+ program=/usr/sbin/dladm
+ title:delete wifi security object
+ see=dladm(1M)
+ format=uauth1:text2:text3
+ comment=authorization used:
+ comment=object class name:
+ comment=object name
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/in.ftpd/ftpusers b/usr/src/cmd/cmd-inet/usr.sbin/in.ftpd/ftpusers
index cf50a88824..3323d5877c 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/in.ftpd/ftpusers
+++ b/usr/src/cmd/cmd-inet/usr.sbin/in.ftpd/ftpusers
@@ -10,6 +10,7 @@ adm
lp
uucp
nuucp
+dladm
smmsp
listen
gdm
diff --git a/usr/src/cmd/dladm/Makefile b/usr/src/cmd/dladm/Makefile
index 0923fece9c..711792ee34 100644
--- a/usr/src/cmd/dladm/Makefile
+++ b/usr/src/cmd/dladm/Makefile
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -20,33 +19,48 @@
# CDDL HEADER END
#
#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
#
PROG= dladm
+CFGFILES= aggregation.conf linkprop.conf secobj.conf
-ROOTFS_PROG= $(PROG)
-CONFIGFILES= aggregation.conf
-
-POFILE= $(PROG).po
+ROOTFS_PROG= $(PROG)
+ROOTCFGDIR= $(ROOTETC)/dladm
+ROOTCFGFILES= $(CFGFILES:%=$(ROOTCFGDIR)/%)
include ../Makefile.cmd
-LDLIBS += -ldladm -lmacadm -ldlpi -llaadm -lkstat
+LDLIBS += -ldladm -lmacadm -ldlpi -llaadm -lkstat -lwladm -lsecdb -lbsm \
+ -linetutil
-ICONFIGFILES= $(CONFIGFILES:%=$(ROOTETC)/%)
+$(ROOTCFGFILES) := OWNER= dladm
+$(ROOTCFGFILES) := GROUP= sys
-$(ICONFIGFILES):= FILEMODE= 644
-$(ICONFIGFILES):= OWNER= root
-$(ICONFIGFILES):= GROUP= sys
+$(ROOTCFGDIR)/aggregation.conf $(ROOTCFGDIR)/linkprop.conf := FILEMODE= 644
+$(ROOTCFGDIR)/secobj.conf := FILEMODE= 600
.KEEP_STATE:
all: $(ROOTFS_PROG)
+install: all $(ROOTSBINPROG) $(ROOTCFGDIR) $(ROOTCFGFILES)
+ $(RM) $(ROOTUSRSBINPROG)
+ -$(SYMLINK) ../../sbin/$(PROG) $(ROOTUSRSBINPROG)
+
+clean:
+
+lint: lint_PROG
+
+$(ROOTCFGDIR):
+ $(INS.dir)
+
+$(ROOTCFGDIR)/%: $(ROOTCFGDIR) %
+ $(INS.file)
+
#
# Message catalog
#
@@ -59,12 +73,4 @@ $(POFILE): $(PROG).c
sed "/^domain/d" messages.po > $@
$(RM) messages.po $(POFILE).i
-install: all $(ROOTSBINPROG) $(ICONFIGFILES)
- $(RM) $(ROOTUSRSBINPROG)
- -$(SYMLINK) ../../sbin/$(PROG) $(ROOTUSRSBINPROG)
-
-clean:
-
-lint: lint_PROG
-
include ../Makefile.targ
diff --git a/usr/src/cmd/dladm/dladm.c b/usr/src/cmd/dladm/dladm.c
index 1167cb1603..d344b3e59b 100644
--- a/usr/src/cmd/dladm/dladm.c
+++ b/usr/src/cmd/dladm/dladm.c
@@ -26,7 +26,9 @@
#pragma ident "%Z%%M% %I% %E% SMI"
#include <stdio.h>
+#include <ctype.h>
#include <locale.h>
+#include <signal.h>
#include <stdarg.h>
#include <stdlib.h>
#include <fcntl.h>
@@ -38,11 +40,19 @@
#include <getopt.h>
#include <unistd.h>
#include <priv.h>
+#include <termios.h>
+#include <pwd.h>
+#include <auth_attr.h>
+#include <auth_list.h>
#include <libintl.h>
#include <libdlpi.h>
#include <libdladm.h>
#include <liblaadm.h>
#include <libmacadm.h>
+#include <libwladm.h>
+#include <libinetutil.h>
+#include <bsm/adt.h>
+#include <bsm/adt_event.h>
#define AGGR_DRV "aggr"
#define MAXPORT 256
@@ -95,16 +105,15 @@ static port_state_t port_states[] = {
#define NPORTSTATES (sizeof (port_states) / sizeof (port_state_t))
-static void do_show_link(int, char **);
-static void do_create_aggr(int, char **);
-static void do_delete_aggr(int, char **);
-static void do_add_aggr(int, char **);
-static void do_remove_aggr(int, char **);
-static void do_modify_aggr(int, char **);
-static void do_show_aggr(int, char **);
-static void do_up_aggr(int, char **);
-static void do_down_aggr(int, char **);
-static void do_show_dev(int, char **);
+typedef void cmdfunc_t(int, char **);
+
+static cmdfunc_t do_show_link, do_show_dev, do_show_wifi;
+static cmdfunc_t do_create_aggr, do_delete_aggr, do_add_aggr, do_remove_aggr;
+static cmdfunc_t do_modify_aggr, do_show_aggr, do_up_aggr, do_down_aggr;
+static cmdfunc_t do_scan_wifi, do_connect_wifi, do_disconnect_wifi;
+static cmdfunc_t do_show_linkprop, do_set_linkprop, do_reset_linkprop;
+static cmdfunc_t do_create_secobj, do_delete_secobj, do_show_secobj;
+static cmdfunc_t do_init_linkprop, do_init_secobj;
static void link_stats(const char *, uint32_t);
static void aggr_stats(uint16_t, uint32_t);
@@ -119,41 +128,81 @@ static void stats_total(pktsum_t *, pktsum_t *, pktsum_t *);
static void stats_diff(pktsum_t *, pktsum_t *, pktsum_t *);
typedef struct cmd {
- char *c_name;
- void (*c_fn)(int, char **);
+ char *c_name;
+ cmdfunc_t *c_fn;
} cmd_t;
static cmd_t cmds[] = {
- { "show-link", do_show_link },
- { "show-dev", do_show_dev },
-
- { "create-aggr", do_create_aggr },
- { "delete-aggr", do_delete_aggr },
- { "add-aggr", do_add_aggr },
- { "remove-aggr", do_remove_aggr },
- { "modify-aggr", do_modify_aggr },
- { "show-aggr", do_show_aggr },
- { "up-aggr", do_up_aggr },
- { "down-aggr", do_down_aggr }
+ { "show-link", do_show_link },
+ { "show-dev", do_show_dev },
+ { "create-aggr", do_create_aggr },
+ { "delete-aggr", do_delete_aggr },
+ { "add-aggr", do_add_aggr },
+ { "remove-aggr", do_remove_aggr },
+ { "modify-aggr", do_modify_aggr },
+ { "show-aggr", do_show_aggr },
+ { "up-aggr", do_up_aggr },
+ { "down-aggr", do_down_aggr },
+ { "scan-wifi", do_scan_wifi },
+ { "connect-wifi", do_connect_wifi },
+ { "disconnect-wifi", do_disconnect_wifi },
+ { "show-wifi", do_show_wifi },
+ { "show-linkprop", do_show_linkprop },
+ { "set-linkprop", do_set_linkprop },
+ { "reset-linkprop", do_reset_linkprop },
+ { "create-secobj", do_create_secobj },
+ { "delete-secobj", do_delete_secobj },
+ { "show-secobj", do_show_secobj },
+ { "init-linkprop", do_init_linkprop },
+ { "init-secobj", do_init_secobj }
};
static const struct option longopts[] = {
- {"vlan-id", required_argument, 0, 'v'},
- {"dev", required_argument, 0, 'd'},
- {"policy", required_argument, 0, 'P'},
- {"lacp-mode", required_argument, 0, 'l'},
- {"lacp-timer", required_argument, 0, 'T'},
- {"unicast", required_argument, 0, 'u'},
- {"statistics", no_argument, 0, 's'},
- {"interval", required_argument, 0, 'i'},
- {"lacp", no_argument, 0, 'L'},
- {"temporary", no_argument, 0, 't'},
- {"root-dir", required_argument, 0, 'r'},
- {"parseable", no_argument, 0, 'p'},
+ {"vlan-id", required_argument, 0, 'v' },
+ {"dev", required_argument, 0, 'd' },
+ {"policy", required_argument, 0, 'P' },
+ {"lacp-mode", required_argument, 0, 'l' },
+ {"lacp-timer", required_argument, 0, 'T' },
+ {"unicast", required_argument, 0, 'u' },
+ {"statistics", no_argument, 0, 's' },
+ {"interval", required_argument, 0, 'i' },
+ {"lacp", no_argument, 0, 'L' },
+ {"temporary", no_argument, 0, 't' },
+ {"root-dir", required_argument, 0, 'r' },
+ {"parseable", no_argument, 0, 'p' },
+ { 0, 0, 0, 0 }
+};
+
+static const struct option prop_longopts[] = {
+ {"temporary", no_argument, 0, 't' },
+ {"root-dir", required_argument, 0, 'R' },
+ {"prop", required_argument, 0, 'p' },
+ {"parseable", no_argument, 0, 'c' },
+ {"persistent", no_argument, 0, 'P' },
+ { 0, 0, 0, 0 }
+};
+
+static const struct option wifi_longopts[] = {
+ {"parseable", no_argument, 0, 'p' },
+ {"output", required_argument, 0, 'o' },
+ {"essid", required_argument, 0, 'e' },
+ {"bsstype", required_argument, 0, 'b' },
+ {"mode", required_argument, 0, 'm' },
+ {"key", required_argument, 0, 'k' },
+ {"sec", required_argument, 0, 's' },
+ {"auth", required_argument, 0, 'a' },
+ {"create-ibss", required_argument, 0, 'c' },
+ {"timeout", required_argument, 0, 'T' },
+ {"all-links", no_argument, 0, 'a' },
+ {"temporary", no_argument, 0, 't' },
+ {"root-dir", required_argument, 0, 'R' },
+ {"persistent", no_argument, 0, 'P' },
+ {"file", required_argument, 0, 'f' },
{ 0, 0, 0, 0 }
};
static char *progname;
+static sig_atomic_t signalled;
#define PRINT_ERR_DIAG(s, diag, func) { \
(void) fprintf(stderr, gettext(s), progname, strerror(errno)); \
@@ -165,18 +214,36 @@ static char *progname;
static void
usage(void)
{
- (void) fprintf(stderr, gettext(
- "usage: dladm create-aggr [-t] [-R <root-dir>] [-P <policy>]\n"
- " [-l <mode>] [-T <time>]\n"
- " [-u <address>] -d <dev> ... <key>\n"
- " delete-aggr [-t] [-R <root-dir>] <key>\n"
- " add-aggr [-t] [-R <root-dir>] -d <dev> ... <key>\n"
- " remove-aggr [-t] [-R <root-dir>] -d <dev> ... <key>\n"
- " modify-aggr [-t] [-R <root-dir>] [-P <policy>]\n"
- " [-l <mode>] [-T <time>] [-u <address>] <key>\n"
- " show-aggr [-L] [-s] [-i <interval>] [-p] [<key>]\n"
- " show-dev [-s] [-i <interval>] [-p] [<dev>]\n"
- " show-link [-s] [-i <interval>] [-p] [<name>]\n"));
+ (void) fprintf(stderr, gettext("usage: dladm <subcommand> <args> ...\n"
+ "\tshow-link [-p] [-s [-i <interval>]] [<name>]\n"
+ "\tshow-dev [-p] [-s [-i <interval>]] [<dev>]\n"
+ "\n"
+ "\tcreate-aggr [-t] [-R <root-dir>] [-P <policy>] [-l <mode>]\n"
+ "\t [-T <time>] [-u <address>] -d <dev> ... <key>\n"
+ "\tmodify-aggr [-t] [-R <root-dir>] [-P <policy>] [-l <mode>]\n"
+ "\t [-T <time>] [-u <address>] <key>\n"
+ "\tdelete-aggr [-t] [-R <root-dir>] <key>\n"
+ "\tadd-aggr [-t] [-R <root-dir>] -d <dev> ... <key>\n"
+ "\tremove-aggr [-t] [-R <root-dir>] -d <dev> ... <key>\n"
+ "\tshow-aggr [-pL][-s [-i <interval>]] [<key>]\n"
+ "\n"
+ "\tscan-wifi [-p] [-o <field>,...] [<name>]\n"
+ "\tconnect-wifi [-e <essid>] [-i <bssid>] [-k <key>,...]"
+ " [-s wep]\n"
+ "\t [-a open|shared] [-b bss|ibss] [-c] [-m a|b|g]\n"
+ "\t [-T <time>] [<name>]\n"
+ "\tdisconnect-wifi [-a] [<name>]\n"
+ "\tshow-wifi [-p] [-o <field>,...] [<name>]\n"
+ "\n"
+ "\tset-linkprop [-t] [-R <root-dir>] -p <prop>=<value>[,...]"
+ " <name>\n"
+ "\treset-linkprop [-t] [-R <root-dir>] [-p <prop>,...] <name>\n"
+ "\tshow-linkprop [-cP][-p <prop>,...] <name>\n"
+ "\n"
+ "\tcreate-secobj [-t] [-R <root-dir>] [-f <file>] -c <class>"
+ " <secobj>\n"
+ "\tdelete-secobj [-t] [-R <root-dir>] <secobj>[,...]\n"
+ "\tshow-secobj [-pP][<secobj>,...]\n"));
exit(1);
}
@@ -1930,3 +1997,1932 @@ mac_link_duplex(const char *dev)
return (duplex_str);
}
+
+#define WIFI_CMD_SCAN 0x00000001
+#define WIFI_CMD_SHOW 0x00000002
+#define WIFI_CMD_ALL (WIFI_CMD_SCAN | WIFI_CMD_SHOW)
+typedef struct wifi_field {
+ const char *wf_name;
+ const char *wf_header;
+ uint_t wf_width;
+ uint_t wf_mask;
+ uint_t wf_cmdtype;
+} wifi_field_t;
+
+static wifi_field_t wifi_fields[] = {
+{ "link", "LINK", 10, 0, WIFI_CMD_ALL},
+{ "essid", "ESSID", 19, WLADM_WLAN_ATTR_ESSID, WIFI_CMD_ALL},
+{ "bssid", "BSSID/IBSSID", 17, WLADM_WLAN_ATTR_BSSID, WIFI_CMD_ALL},
+{ "ibssid", "BSSID/IBSSID", 17, WLADM_WLAN_ATTR_BSSID, WIFI_CMD_ALL},
+{ "mode", "MODE", 6, WLADM_WLAN_ATTR_MODE, WIFI_CMD_ALL},
+{ "speed", "SPEED", 6, WLADM_WLAN_ATTR_SPEED, WIFI_CMD_ALL},
+{ "auth", "AUTH", 8, WLADM_WLAN_ATTR_AUTH, WIFI_CMD_ALL},
+{ "bsstype", "BSSTYPE", 8, WLADM_WLAN_ATTR_BSSTYPE, WIFI_CMD_ALL},
+{ "sec", "SEC", 6, WLADM_WLAN_ATTR_SECMODE, WIFI_CMD_ALL},
+{ "status", "STATUS", 17, WLADM_LINK_ATTR_STATUS, WIFI_CMD_SHOW},
+{ "strength", "STRENGTH", 10, WLADM_WLAN_ATTR_STRENGTH, WIFI_CMD_ALL}}
+;
+
+static char *all_scan_wifi_fields =
+ "link,essid,bssid,sec,strength,mode,speed,auth,bsstype";
+static char *all_show_wifi_fields =
+ "link,status,essid,sec,strength,mode,speed,auth,bssid,bsstype";
+static char *def_scan_wifi_fields =
+ "link,essid,bssid,sec,strength,mode,speed";
+static char *def_show_wifi_fields =
+ "link,status,essid,sec,strength,mode,speed";
+
+#define WIFI_MAX_FIELDS (sizeof (wifi_fields) / sizeof (wifi_field_t))
+#define WIFI_MAX_FIELD_LEN 32
+
+typedef struct {
+ char *s_buf;
+ char **s_fields; /* array of pointer to the fields in s_buf */
+ uint_t s_nfields; /* the number of fields in s_buf */
+} split_t;
+
+/*
+ * Free the split_t structure pointed to by `sp'.
+ */
+static void
+splitfree(split_t *sp)
+{
+ free(sp->s_buf);
+ free(sp->s_fields);
+ free(sp);
+}
+
+/*
+ * Split `str' into at most `maxfields' fields, each field at most `maxlen' in
+ * length. Return a pointer to a split_t containing the split fields, or NULL
+ * on failure.
+ */
+static split_t *
+split(const char *str, uint_t maxfields, uint_t maxlen)
+{
+ char *field, *token, *lasts = NULL;
+ split_t *sp;
+
+ if (*str == '\0' || maxfields == 0 || maxlen == 0)
+ return (NULL);
+
+ sp = calloc(sizeof (split_t), 1);
+ if (sp == NULL)
+ return (NULL);
+
+ sp->s_buf = strdup(str);
+ sp->s_fields = malloc(sizeof (char *) * maxfields);
+ if (sp->s_buf == NULL || sp->s_fields == NULL)
+ goto fail;
+
+ token = sp->s_buf;
+ while ((field = strtok_r(token, ",", &lasts)) != NULL) {
+ if (sp->s_nfields == maxfields || strlen(field) > maxlen)
+ goto fail;
+ token = NULL;
+ sp->s_fields[sp->s_nfields++] = field;
+ }
+ return (sp);
+fail:
+ splitfree(sp);
+ return (NULL);
+}
+
+static int
+parse_wifi_fields(char *str, wifi_field_t ***fields, uint_t *countp,
+ uint_t cmdtype)
+{
+ uint_t i, j;
+ wifi_field_t **wf = NULL;
+ split_t *sp;
+ boolean_t good_match = B_FALSE;
+
+ if (cmdtype == WIFI_CMD_SCAN) {
+ if (str == NULL)
+ str = def_scan_wifi_fields;
+ if (strcasecmp(str, "all") == 0)
+ str = all_scan_wifi_fields;
+ } else if (cmdtype == WIFI_CMD_SHOW) {
+ if (str == NULL)
+ str = def_show_wifi_fields;
+ if (strcasecmp(str, "all") == 0)
+ str = all_show_wifi_fields;
+ } else {
+ return (-1);
+ }
+
+ sp = split(str, WIFI_MAX_FIELDS, WIFI_MAX_FIELD_LEN);
+ if (sp == NULL)
+ return (-1);
+
+ wf = malloc(sp->s_nfields * sizeof (wifi_field_t *));
+ if (wf == NULL)
+ goto fail;
+
+ for (i = 0; i < sp->s_nfields; i++) {
+ for (j = 0; j < WIFI_MAX_FIELDS; j++) {
+ if (strcasecmp(sp->s_fields[i],
+ wifi_fields[j].wf_name) == 0) {
+ good_match = wifi_fields[i].
+ wf_cmdtype & cmdtype;
+ break;
+ }
+ }
+ if (!good_match)
+ goto fail;
+
+ good_match = B_FALSE;
+ wf[i] = &wifi_fields[j];
+ }
+ *countp = i;
+ *fields = wf;
+ splitfree(sp);
+ return (0);
+fail:
+ free(wf);
+ splitfree(sp);
+ return (-1);
+}
+
+typedef struct print_wifi_state {
+ const char *ws_link;
+ boolean_t ws_parseable;
+ boolean_t ws_header;
+ wifi_field_t **ws_fields;
+ uint_t ws_nfields;
+ boolean_t ws_lastfield;
+ uint_t ws_overflow;
+} print_wifi_state_t;
+
+static void
+print_wifi_head(print_wifi_state_t *statep)
+{
+ int i;
+ wifi_field_t *wfp;
+
+ for (i = 0; i < statep->ws_nfields; i++) {
+ wfp = statep->ws_fields[i];
+ if (i + 1 < statep->ws_nfields)
+ (void) printf("%-*s ", wfp->wf_width, wfp->wf_header);
+ else
+ (void) printf("%s", wfp->wf_header);
+ }
+ (void) printf("\n");
+}
+
+static void
+print_wifi_field(print_wifi_state_t *statep, wifi_field_t *wfp,
+ const char *value)
+{
+ uint_t width = wfp->wf_width;
+ uint_t valwidth = strlen(value);
+ uint_t compress;
+
+ if (statep->ws_parseable) {
+ (void) printf("%s=\"%s\"", wfp->wf_header, value);
+ } else {
+ if (value[0] == '\0')
+ value = "--";
+ if (statep->ws_lastfield) {
+ (void) printf("%s", value);
+ return;
+ }
+
+ if (valwidth > width) {
+ statep->ws_overflow += valwidth - width;
+ } else if (valwidth < width && statep->ws_overflow > 0) {
+ compress = min(statep->ws_overflow, width - valwidth);
+ statep->ws_overflow -= compress;
+ width -= compress;
+ }
+ (void) printf("%-*s", width, value);
+ }
+
+ if (!statep->ws_lastfield)
+ (void) putchar(' ');
+}
+
+static void
+print_wlan_attr(print_wifi_state_t *statep, wifi_field_t *wfp,
+ wladm_wlan_attr_t *attrp)
+{
+ char buf[WLADM_STRSIZE];
+ const char *str = "";
+
+ if (wfp->wf_mask == 0) {
+ print_wifi_field(statep, wfp, statep->ws_link);
+ return;
+ }
+
+ if ((wfp->wf_mask & attrp->wa_valid) == 0) {
+ print_wifi_field(statep, wfp, "");
+ return;
+ }
+
+ switch (wfp->wf_mask) {
+ case WLADM_WLAN_ATTR_ESSID:
+ str = wladm_essid2str(&attrp->wa_essid, buf);
+ break;
+ case WLADM_WLAN_ATTR_BSSID:
+ str = wladm_bssid2str(&attrp->wa_bssid, buf);
+ break;
+ case WLADM_WLAN_ATTR_SECMODE:
+ str = wladm_secmode2str(&attrp->wa_secmode, buf);
+ break;
+ case WLADM_WLAN_ATTR_STRENGTH:
+ str = wladm_strength2str(&attrp->wa_strength, buf);
+ break;
+ case WLADM_WLAN_ATTR_MODE:
+ str = wladm_mode2str(&attrp->wa_mode, buf);
+ break;
+ case WLADM_WLAN_ATTR_SPEED:
+ str = wladm_speed2str(&attrp->wa_speed, buf);
+ (void) strlcat(buf, "Mb", sizeof (buf));
+ break;
+ case WLADM_WLAN_ATTR_AUTH:
+ str = wladm_auth2str(&attrp->wa_auth, buf);
+ break;
+ case WLADM_WLAN_ATTR_BSSTYPE:
+ str = wladm_bsstype2str(&attrp->wa_bsstype, buf);
+ break;
+ }
+
+ print_wifi_field(statep, wfp, str);
+}
+
+static boolean_t
+print_scan_results(void *arg, wladm_wlan_attr_t *attrp)
+{
+ print_wifi_state_t *statep = arg;
+ int i;
+
+ if (statep->ws_header) {
+ statep->ws_header = B_FALSE;
+ if (!statep->ws_parseable)
+ print_wifi_head(statep);
+ }
+
+ statep->ws_overflow = 0;
+ for (i = 0; i < statep->ws_nfields; i++) {
+ statep->ws_lastfield = (i + 1 == statep->ws_nfields);
+ print_wlan_attr(statep, statep->ws_fields[i], attrp);
+ }
+ (void) putchar('\n');
+ return (B_TRUE);
+}
+
+static boolean_t
+scan_wifi(void *arg, const char *link)
+{
+ char errmsg[WLADM_STRSIZE];
+ print_wifi_state_t *statep = arg;
+ wladm_status_t status;
+
+ statep->ws_link = link;
+ status = wladm_scan(link, statep, print_scan_results);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: cannot scan link '%s': %s\n"),
+ progname, link, wladm_status2str(status, errmsg));
+ exit(1);
+ }
+ return (B_TRUE);
+}
+
+static void
+print_link_attr(print_wifi_state_t *statep, wifi_field_t *wfp,
+ wladm_link_attr_t *attrp)
+{
+ char buf[WLADM_STRSIZE];
+ const char *str = "";
+
+ if (strcmp(wfp->wf_name, "status") == 0) {
+ if ((wfp->wf_mask & attrp->la_valid) != 0)
+ str = wladm_linkstatus2str(&attrp->la_status, buf);
+ print_wifi_field(statep, wfp, str);
+ return;
+ }
+ print_wlan_attr(statep, wfp, &attrp->la_wlan_attr);
+}
+
+static boolean_t
+show_wifi(void *arg, const char *link)
+{
+ int i;
+ char buf[WLADM_STRSIZE];
+ print_wifi_state_t *statep = arg;
+ wladm_link_attr_t attr;
+ wladm_status_t status;
+
+ status = wladm_get_link_attr(link, &attr);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext("%s: cannot get link "
+ "attributes for '%s': %s\n"), progname, link,
+ wladm_status2str(status, buf));
+ exit(1);
+ }
+
+ if (statep->ws_header) {
+ statep->ws_header = B_FALSE;
+ if (!statep->ws_parseable)
+ print_wifi_head(statep);
+ }
+
+ statep->ws_link = link;
+ statep->ws_overflow = 0;
+ for (i = 0; i < statep->ws_nfields; i++) {
+ statep->ws_lastfield = (i + 1 == statep->ws_nfields);
+ print_link_attr(statep, statep->ws_fields[i], &attr);
+ }
+ (void) putchar('\n');
+ return (B_TRUE);
+}
+
+static void
+do_display_wifi(int argc, char **argv, int cmd)
+{
+ int option;
+ char errmsg[WLADM_STRSIZE];
+ char *fields_str = NULL;
+ wifi_field_t **fields;
+ boolean_t (*callback)(void *, const char *);
+ uint_t nfields;
+ print_wifi_state_t state;
+ wladm_status_t status;
+
+ if (cmd == WIFI_CMD_SCAN)
+ callback = scan_wifi;
+ else if (cmd == WIFI_CMD_SHOW)
+ callback = show_wifi;
+ else
+ return;
+
+ state.ws_link = NULL;
+ state.ws_parseable = B_FALSE;
+ state.ws_header = B_TRUE;
+ opterr = 0;
+ while ((option = getopt_long(argc, argv, ":o:p",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'o':
+ fields_str = optarg;
+ break;
+ case 'p':
+ state.ws_parseable = B_TRUE;
+ if (fields_str == NULL)
+ fields_str = "all";
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1))
+ state.ws_link = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (parse_wifi_fields(fields_str, &fields, &nfields, cmd) < 0) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid field(s) specified\n"),
+ progname);
+ exit(1);
+ }
+ state.ws_fields = fields;
+ state.ws_nfields = nfields;
+
+ if (state.ws_link == NULL) {
+ status = wladm_walk(&state, callback);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext("%s: %s\n"),
+ progname, wladm_status2str(status, errmsg));
+ exit(1);
+ }
+ } else {
+ (void) (*callback)(&state, state.ws_link);
+ }
+ free(fields);
+}
+
+static void
+do_scan_wifi(int argc, char **argv)
+{
+ do_display_wifi(argc, argv, WIFI_CMD_SCAN);
+}
+
+static void
+do_show_wifi(int argc, char **argv)
+{
+ do_display_wifi(argc, argv, WIFI_CMD_SHOW);
+}
+
+typedef struct wlan_count_attr {
+ uint_t wc_count;
+ const char *wc_link;
+} wlan_count_attr_t;
+
+static boolean_t
+do_count_wlan(void *arg, const char *link)
+{
+ wlan_count_attr_t *cp = (wlan_count_attr_t *)arg;
+
+ if (cp->wc_count == 0)
+ cp->wc_link = strdup(link);
+ cp->wc_count++;
+ return (B_TRUE);
+}
+
+static int
+parse_wep_keys(char *str, wladm_wep_key_t **keys, uint_t *key_countp)
+{
+ uint_t i;
+ split_t *sp;
+ wladm_wep_key_t *wk;
+
+ sp = split(str, WLADM_MAX_WEPKEYS, WLADM_MAX_WEPKEYNAME_LEN);
+ if (sp == NULL)
+ return (-1);
+
+ wk = malloc(sp->s_nfields * sizeof (wladm_wep_key_t));
+ if (wk == NULL)
+ goto fail;
+
+ for (i = 0; i < sp->s_nfields; i++) {
+ char *s;
+ dladm_secobj_class_t class;
+ dladm_status_t status;
+
+ (void) strlcpy(wk[i].wk_name, sp->s_fields[i],
+ WLADM_MAX_WEPKEYNAME_LEN);
+
+ wk[i].wk_idx = 1;
+ if ((s = strrchr(wk[i].wk_name, ':')) != NULL) {
+ if (s[1] == '\0' || s[2] != '\0' || !isdigit(s[1]))
+ goto fail;
+
+ wk[i].wk_idx = (uint_t)(s[1] - '0');
+ *s = '\0';
+ }
+ wk[i].wk_len = WLADM_MAX_WEPKEY_LEN;
+
+ status = dladm_get_secobj(wk[i].wk_name, &class,
+ wk[i].wk_val, &wk[i].wk_len, 0);
+ if (status != DLADM_STATUS_OK) {
+ if (status == DLADM_STATUS_NOTFOUND) {
+ status = dladm_get_secobj(wk[i].wk_name,
+ &class, wk[i].wk_val, &wk[i].wk_len,
+ DLADM_OPT_PERSIST);
+ }
+ if (status != DLADM_STATUS_OK)
+ goto fail;
+ }
+ }
+ *keys = wk;
+ *key_countp = i;
+ splitfree(sp);
+ return (0);
+fail:
+ free(wk);
+ splitfree(sp);
+ return (-1);
+}
+
+static void
+do_connect_wifi(int argc, char **argv)
+{
+ int option;
+ wladm_wlan_attr_t attr, *attrp;
+ wladm_status_t status = WLADM_STATUS_OK;
+ int timeout = WLADM_CONNECT_TIMEOUT_DEFAULT;
+ char errmsg[WLADM_STRSIZE];
+ const char *link = NULL;
+ char *endp = NULL;
+ wladm_wep_key_t *keys = NULL;
+ uint_t key_count = 0;
+ uint_t flags = 0;
+ wladm_secmode_t keysecmode = WLADM_SECMODE_NONE;
+
+ opterr = 0;
+ (void) memset(&attr, 0, sizeof (attr));
+ while ((option = getopt_long(argc, argv, ":e:i:a:m:b:s:k:T:c",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'e':
+ status = wladm_str2essid(optarg, &attr.wa_essid);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid ESSID '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_ESSID;
+ /*
+ * Try to connect without doing a scan.
+ */
+ flags |= WLADM_OPT_NOSCAN;
+ break;
+ case 'i':
+ status = wladm_str2bssid(optarg, &attr.wa_bssid);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid BSSID %s\n"),
+ progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_BSSID;
+ break;
+ case 'a':
+ status = wladm_str2auth(optarg, &attr.wa_auth);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid authentication "
+ "mode '%s'\n"), progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_AUTH;
+ break;
+ case 'm':
+ status = wladm_str2mode(optarg, &attr.wa_mode);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid mode '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_MODE;
+ break;
+ case 'b':
+ status = wladm_str2bsstype(optarg, &attr.wa_bsstype);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid bsstype '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_BSSTYPE;
+ break;
+ case 's':
+ status = wladm_str2secmode(optarg, &attr.wa_secmode);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid security mode '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_SECMODE;
+ break;
+ case 'k':
+ if (parse_wep_keys(optarg, &keys, &key_count) < 0) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid key(s) '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ keysecmode = WLADM_SECMODE_WEP;
+ break;
+ case 'T':
+ if (strcasecmp(optarg, "forever") == 0) {
+ timeout = -1;
+ break;
+ }
+ errno = 0;
+ timeout = (int)strtol(optarg, &endp, 10);
+ if (timeout < 0 || errno != 0 || *endp != '\0') {
+ (void) fprintf(stderr,
+ gettext("%s: invalid timeout value '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ break;
+ case 'c':
+ flags |= WLADM_OPT_CREATEIBSS;
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (keysecmode == WLADM_SECMODE_NONE) {
+ if ((attr.wa_valid & WLADM_WLAN_ATTR_SECMODE) != 0 &&
+ attr.wa_secmode == WLADM_SECMODE_WEP) {
+ (void) fprintf(stderr,
+ gettext("%s: key required for security mode "
+ "'wep'\n"), progname);
+ exit(1);
+ }
+ } else {
+ if ((attr.wa_valid & WLADM_WLAN_ATTR_SECMODE) != 0 &&
+ attr.wa_secmode != keysecmode) {
+ (void) fprintf(stderr,
+ gettext("%s: incompatible -s and -k options\n"),
+ progname);
+ exit(1);
+ }
+ }
+ attr.wa_secmode = keysecmode;
+ attr.wa_valid |= WLADM_WLAN_ATTR_SECMODE;
+
+ if (optind == (argc - 1))
+ link = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (link == NULL) {
+ wlan_count_attr_t wcattr;
+
+ wcattr.wc_link = NULL;
+ wcattr.wc_count = 0;
+ (void) wladm_walk(&wcattr, do_count_wlan);
+ if (wcattr.wc_count == 0) {
+ (void) fprintf(stderr, gettext(
+ "%s: no wifi links are available\n"), progname);
+ exit(1);
+ } else if (wcattr.wc_count > 1) {
+ (void) fprintf(stderr, gettext(
+ "%s: link name is required when more than "
+ "one link is available\n"), progname);
+ exit(1);
+ }
+ link = wcattr.wc_link;
+ }
+ attrp = (attr.wa_valid == 0) ? NULL : &attr;
+
+ status = wladm_connect(link, attrp, timeout, keys, key_count, flags);
+ if (status != WLADM_STATUS_OK) {
+ if ((flags & WLADM_OPT_NOSCAN) != 0) {
+ /*
+ * Redo the connect. This time with scanning
+ * and filtering.
+ */
+ flags &= ~WLADM_OPT_NOSCAN;
+ status = wladm_connect(link, attrp, timeout, keys,
+ key_count, flags);
+ if (status == WLADM_STATUS_OK) {
+ free(keys);
+ return;
+ }
+ }
+ if (status == WLADM_STATUS_NOTFOUND) {
+ if (attr.wa_valid == 0) {
+ (void) fprintf(stderr, gettext(
+ "%s: no wifi networks are available\n"),
+ progname);
+ } else {
+ (void) fprintf(stderr, gettext("%s: no wifi "
+ "networks with the specified criteria "
+ "are available\n"), progname);
+ }
+ } else {
+ (void) fprintf(stderr, gettext("%s: cannot connect: %s"
+ "\n"), progname, wladm_status2str(status, errmsg));
+ }
+ exit(1);
+ }
+ free(keys);
+}
+
+/* ARGSUSED */
+static boolean_t
+do_all_disconnect_wifi(void *arg, const char *link)
+{
+ wladm_status_t status;
+ char errmsg[WLADM_STRSIZE];
+
+ status = wladm_disconnect(link);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: cannot disconnect link '%s': %s\n"),
+ progname, link, wladm_status2str(status, errmsg));
+ }
+ return (B_TRUE);
+}
+
+static void
+do_disconnect_wifi(int argc, char **argv)
+{
+ int option;
+ const char *link = NULL;
+ char errmsg[WLADM_STRSIZE];
+ boolean_t all_links = B_FALSE;
+ wladm_status_t status;
+ wlan_count_attr_t wcattr;
+
+ opterr = 0;
+ while ((option = getopt_long(argc, argv, ":a",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'a':
+ all_links = B_TRUE;
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1))
+ link = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (link == NULL) {
+ if (!all_links) {
+ wcattr.wc_link = NULL;
+ wcattr.wc_count = 0;
+ (void) wladm_walk(&wcattr, do_count_wlan);
+ if (wcattr.wc_count == 0) {
+ (void) fprintf(stderr, gettext(
+ "%s: no wifi links are available\n"),
+ progname);
+ exit(1);
+ } else if (wcattr.wc_count > 1) {
+ (void) fprintf(stderr, gettext(
+ "%s: link name is required when more than "
+ "one link is available\n"), progname);
+ exit(1);
+ }
+ link = wcattr.wc_link;
+ } else {
+ (void) wladm_walk(&all_links, do_all_disconnect_wifi);
+ return;
+ }
+ }
+ status = wladm_disconnect(link);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext("%s: cannot disconnect: %s\n"),
+ progname, wladm_status2str(status, errmsg));
+ exit(1);
+ }
+}
+
+#define MAX_PROPS 32
+#define MAX_PROP_VALS 32
+#define MAX_PROP_LINE 512
+
+typedef struct prop_info {
+ char *pi_name;
+ char *pi_val[MAX_PROP_VALS];
+ uint_t pi_count;
+} prop_info_t;
+
+typedef struct prop_list {
+ prop_info_t pl_info[MAX_PROPS];
+ uint_t pl_count;
+ char *pl_buf;
+} prop_list_t;
+
+typedef struct show_linkprop_state {
+ const char *ls_link;
+ char *ls_line;
+ char **ls_propvals;
+ boolean_t ls_parseable;
+ boolean_t ls_persist;
+ boolean_t ls_header;
+} show_linkprop_state_t;
+
+static void
+free_props(prop_list_t *list)
+{
+ if (list != NULL) {
+ free(list->pl_buf);
+ free(list);
+ }
+}
+
+static int
+parse_props(char *str, prop_list_t **listp, boolean_t novalues)
+{
+ prop_list_t *list;
+ prop_info_t *pip;
+ char *buf, *curr;
+ int len, i;
+
+ list = malloc(sizeof (prop_list_t));
+ if (list == NULL)
+ return (-1);
+
+ list->pl_count = 0;
+ list->pl_buf = buf = strdup(str);
+ if (buf == NULL)
+ goto fail;
+
+ curr = buf;
+ len = strlen(buf);
+ pip = NULL;
+ for (i = 0; i < len; i++) {
+ char c = buf[i];
+ boolean_t match = (c == '=' || c == ',');
+
+ if (!match && i != len - 1)
+ continue;
+
+ if (match) {
+ buf[i] = '\0';
+ if (*curr == '\0')
+ goto fail;
+ }
+
+ if (pip != NULL && c != '=') {
+ if (pip->pi_count > MAX_PROP_VALS)
+ goto fail;
+
+ if (novalues)
+ goto fail;
+
+ pip->pi_val[pip->pi_count] = curr;
+ pip->pi_count++;
+ } else {
+ if (list->pl_count > MAX_PROPS)
+ goto fail;
+
+ pip = &list->pl_info[list->pl_count];
+ pip->pi_name = curr;
+ pip->pi_count = 0;
+ list->pl_count++;
+ if (c == ',')
+ pip = NULL;
+ }
+ curr = buf + i + 1;
+ }
+ *listp = list;
+ return (0);
+
+fail:
+ free_props(list);
+ return (-1);
+}
+
+static void
+print_linkprop_head(void)
+{
+ (void) printf("%-15s %-14s %-14s %-30s \n",
+ "PROPERTY", "VALUE", "DEFAULT", "POSSIBLE");
+}
+
+static void
+print_linkprop(show_linkprop_state_t *statep, const char *propname,
+ dladm_prop_type_t type, const char *typename, const char *format,
+ char **pptr)
+{
+ int i;
+ char *ptr, *lim;
+ char buf[DLADM_STRSIZE];
+ char *unknown = "?", *notsup = "";
+ char **propvals = statep->ls_propvals;
+ uint_t valcnt = MAX_PROP_VALS;
+ dladm_status_t status;
+
+ status = dladm_get_prop(statep->ls_link, type, propname,
+ propvals, &valcnt);
+ if (status != DLADM_STATUS_OK) {
+ if (status == DLADM_STATUS_NOTSUP || statep->ls_persist) {
+ valcnt = 1;
+ if (type == DLADM_PROP_VAL_CURRENT)
+ propvals = &unknown;
+ else
+ propvals = &notsup;
+ } else {
+ (void) fprintf(stderr, gettext(
+ "%s: cannot get link property '%s': %s\n"),
+ progname, propname, dladm_status2str(status, buf));
+ exit(1);
+ }
+ }
+
+ ptr = buf;
+ lim = buf + DLADM_STRSIZE;
+ for (i = 0; i < valcnt; i++) {
+ if (propvals[i][0] == '\0' && !statep->ls_parseable)
+ ptr += snprintf(ptr, lim - ptr, "--,");
+ else
+ ptr += snprintf(ptr, lim - ptr, "%s,", propvals[i]);
+ if (ptr >= lim)
+ break;
+ }
+ if (valcnt > 0)
+ buf[strlen(buf) - 1] = '\0';
+
+ lim = statep->ls_line + MAX_PROP_LINE;
+ if (statep->ls_parseable) {
+ *pptr += snprintf(*pptr, lim - *pptr,
+ "%s=\"%s\" ", typename, buf);
+ } else {
+ *pptr += snprintf(*pptr, lim - *pptr, format, buf);
+ }
+}
+
+static boolean_t
+show_linkprop(void *arg, const char *propname)
+{
+ show_linkprop_state_t *statep = arg;
+ char *ptr = statep->ls_line;
+ char *lim = ptr + MAX_PROP_LINE;
+
+ if (statep->ls_parseable)
+ ptr += snprintf(ptr, lim - ptr, "PROPERTY=\"%s\" ", propname);
+ else
+ ptr += snprintf(ptr, lim - ptr, "%-15s ", propname);
+
+ print_linkprop(statep, propname,
+ statep->ls_persist ? DLADM_PROP_VAL_PERSISTENT :
+ DLADM_PROP_VAL_CURRENT, "VALUE", "%-14s ", &ptr);
+ print_linkprop(statep, propname, DLADM_PROP_VAL_DEFAULT,
+ "DEFAULT", "%-14s ", &ptr);
+ print_linkprop(statep, propname, DLADM_PROP_VAL_MODIFIABLE,
+ "POSSIBLE", "%-30s ", &ptr);
+
+ if (statep->ls_header) {
+ statep->ls_header = B_FALSE;
+ if (!statep->ls_parseable)
+ print_linkprop_head();
+ }
+ (void) printf("%s\n", statep->ls_line);
+ return (B_TRUE);
+}
+
+static void
+do_show_linkprop(int argc, char **argv)
+{
+ int i, option, fd;
+ char errmsg[DLADM_STRSIZE];
+ char linkname[MAXPATHLEN];
+ prop_list_t *proplist = NULL;
+ char *buf;
+ dladm_status_t status;
+ show_linkprop_state_t state;
+
+ opterr = 0;
+ state.ls_link = NULL;
+ state.ls_propvals = NULL;
+ state.ls_line = NULL;
+ state.ls_parseable = B_FALSE;
+ state.ls_persist = B_FALSE;
+ state.ls_header = B_TRUE;
+ while ((option = getopt_long(argc, argv, ":p:cP",
+ prop_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'p':
+ if (parse_props(optarg, &proplist, B_TRUE) < 0) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid field(s) specified\n"),
+ progname);
+ exit(1);
+ }
+ break;
+ case 'c':
+ state.ls_parseable = B_TRUE;
+ break;
+ case 'P':
+ state.ls_persist = B_TRUE;
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1))
+ state.ls_link = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (state.ls_link == NULL) {
+ (void) fprintf(stderr,
+ gettext("%s: link name must be specified\n"), progname);
+ exit(1);
+ }
+
+ /*
+ * When some WiFi links are opened for the first time, their hardware
+ * automatically scans for APs and does other slow operations. Thus,
+ * if there are no open links, the retrieval of link properties
+ * (below) will proceed slowly unless we hold the link open.
+ */
+ (void) snprintf(linkname, MAXPATHLEN, "/dev/%s", state.ls_link);
+ if ((fd = open(linkname, O_RDWR)) < 0) {
+ (void) fprintf(stderr,
+ gettext("%s: cannot open %s\n"), progname, state.ls_link);
+ exit(1);
+ }
+
+ buf = malloc((sizeof (char *) + DLADM_PROP_VAL_MAX) * MAX_PROP_VALS +
+ MAX_PROP_LINE);
+ if (buf == NULL) {
+ (void) fprintf(stderr,
+ gettext("%s: insufficient memory\n"), progname);
+ exit(1);
+ }
+ state.ls_propvals = (char **)(void *)buf;
+ for (i = 0; i < MAX_PROP_VALS; i++) {
+ state.ls_propvals[i] = buf + sizeof (char *) * MAX_PROP_VALS +
+ i * DLADM_PROP_VAL_MAX;
+ }
+ state.ls_line = buf +
+ (sizeof (char *) + DLADM_PROP_VAL_MAX) * MAX_PROP_VALS;
+
+ if (proplist != NULL) {
+ for (i = 0; i < proplist->pl_count; i++) {
+ if (!show_linkprop(&state,
+ proplist->pl_info[i].pi_name))
+ break;
+ }
+ } else {
+ status = dladm_walk_prop(state.ls_link, &state, show_linkprop);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: show-linkprop: %s\n"), progname,
+ dladm_status2str(status, errmsg));
+ exit(1);
+ }
+ }
+ (void) close(fd);
+ free(buf);
+ free_props(proplist);
+}
+
+static dladm_status_t
+set_linkprop_persist(const char *link, const char *prop_name, char **prop_val,
+ uint_t val_cnt, boolean_t reset)
+{
+ dladm_status_t status;
+ char errmsg[DLADM_STRSIZE];
+
+ status = dladm_set_prop(link, prop_name, prop_val, val_cnt,
+ DLADM_OPT_PERSIST);
+
+ if (status != DLADM_STATUS_OK) {
+ if (reset) {
+ (void) fprintf(stderr, gettext("%s: warning: cannot "
+ "persistently reset link property '%s' on '%s': "
+ "%s\n"), progname, prop_name, link,
+ dladm_status2str(status, errmsg));
+ } else {
+ (void) fprintf(stderr, gettext("%s: warning: cannot "
+ "persistently set link property '%s' on '%s': "
+ "%s\n"), progname, prop_name, link,
+ dladm_status2str(status, errmsg));
+ }
+ }
+ return (status);
+}
+
+static void
+set_linkprop(int argc, char **argv, boolean_t reset)
+{
+ int i, option;
+ char errmsg[DLADM_STRSIZE];
+ const char *link = NULL;
+ prop_list_t *proplist = NULL;
+ boolean_t temp = B_FALSE;
+ dladm_status_t status = DLADM_STATUS_OK;
+
+ opterr = 0;
+ while ((option = getopt_long(argc, argv, ":p:R:t",
+ prop_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'p':
+ if (parse_props(optarg, &proplist, reset) < 0) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid link properties specified\n"),
+ progname);
+ exit(1);
+ }
+ break;
+ case 't':
+ temp = B_TRUE;
+ break;
+ case 'R':
+ status = dladm_set_rootdir(optarg);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid directory specified: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1))
+ link = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (link == NULL) {
+ (void) fprintf(stderr,
+ gettext("%s: link name must be specified\n"),
+ progname);
+ exit(1);
+ }
+
+ if (proplist == NULL) {
+ if (!reset) {
+ (void) fprintf(stderr,
+ gettext("%s: link property must be specified\n"),
+ progname);
+ exit(1);
+ }
+ status = dladm_set_prop(link, NULL, NULL, 0, DLADM_OPT_TEMP);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: warning: cannot reset link "
+ "properties on '%s': %s\n"),
+ progname, link, dladm_status2str(status, errmsg));
+ }
+ if (!temp) {
+ status = set_linkprop_persist(link, NULL, NULL, 0,
+ reset);
+ }
+ goto done;
+ }
+
+ for (i = 0; i < proplist->pl_count; i++) {
+ prop_info_t *pip = &proplist->pl_info[i];
+ char **val;
+ uint_t count;
+ dladm_status_t s;
+
+ if (reset) {
+ val = NULL;
+ count = 0;
+ } else {
+ val = pip->pi_val;
+ count = pip->pi_count;
+ if (count == 0) {
+ (void) fprintf(stderr, gettext(
+ "%s: value(s) for '%s' not specified\n"),
+ progname, pip->pi_name);
+ status = DLADM_STATUS_BADARG;
+ continue;
+ }
+ }
+ s = dladm_set_prop(link, pip->pi_name, val, count,
+ DLADM_OPT_TEMP);
+ if (s == DLADM_STATUS_OK) {
+ if (!temp) {
+ s = set_linkprop_persist(link,
+ pip->pi_name, val, count, reset);
+ if (s != DLADM_STATUS_OK)
+ status = s;
+ }
+ continue;
+ }
+ status = s;
+ switch (s) {
+ case DLADM_STATUS_NOTFOUND:
+ (void) fprintf(stderr,
+ gettext("%s: invalid link property '%s'\n"),
+ progname, pip->pi_name);
+ break;
+ case DLADM_STATUS_BADVAL: {
+ int j;
+ char *ptr, *lim;
+ char **propvals = NULL;
+ uint_t valcnt = MAX_PROP_VALS;
+
+ ptr = malloc((sizeof (char *) +
+ DLADM_PROP_VAL_MAX) * MAX_PROP_VALS +
+ MAX_PROP_LINE);
+
+ propvals = (char **)(void *)ptr;
+ if (propvals == NULL) {
+ (void) fprintf(stderr, gettext(
+ "%s: insufficient memory\n"), progname);
+ exit(1);
+ }
+ for (j = 0; j < MAX_PROP_VALS; j++) {
+ propvals[j] = ptr + sizeof (char *) *
+ MAX_PROP_VALS +
+ j * DLADM_PROP_VAL_MAX;
+ }
+ s = dladm_get_prop(link, DLADM_PROP_VAL_MODIFIABLE,
+ pip->pi_name, propvals, &valcnt);
+
+ ptr = errmsg;
+ lim = ptr + DLADM_STRSIZE;
+ *ptr = '\0';
+ for (j = 0; j < valcnt && s == DLADM_STATUS_OK; j++) {
+ ptr += snprintf(ptr, lim - ptr, "%s,",
+ propvals[j]);
+ if (ptr >= lim)
+ break;
+ }
+ if (ptr > errmsg)
+ *(ptr - 1) = '\0';
+ (void) fprintf(stderr, gettext(
+ "%s: link property '%s' must be one of: %s\n"),
+ progname, pip->pi_name, errmsg);
+ free(propvals);
+ break;
+ }
+ default:
+ if (reset) {
+ (void) fprintf(stderr, gettext(
+ "%s: cannot reset link property '%s' on "
+ "'%s': %s\n"), progname, pip->pi_name, link,
+ dladm_status2str(s, errmsg));
+ } else {
+ (void) fprintf(stderr, gettext(
+ "%s: cannot set link property '%s' on "
+ "'%s': %s\n"), progname, pip->pi_name, link,
+ dladm_status2str(s, errmsg));
+ }
+ break;
+ }
+ }
+done:
+ free_props(proplist);
+ if (status != DLADM_STATUS_OK)
+ exit(1);
+}
+
+static void
+do_set_linkprop(int argc, char **argv)
+{
+ set_linkprop(argc, argv, B_FALSE);
+}
+
+static void
+do_reset_linkprop(int argc, char **argv)
+{
+ set_linkprop(argc, argv, B_TRUE);
+}
+
+static int
+convert_secobj(char *buf, uint_t len, uint8_t *obj_val, uint_t *obj_lenp,
+ dladm_secobj_class_t class)
+{
+ int error = 0;
+
+ if (class != DLADM_SECOBJ_CLASS_WEP)
+ return (ENOENT);
+
+ switch (len) {
+ case 5: /* ASCII key sizes */
+ case 13:
+ (void) memcpy(obj_val, buf, len);
+ *obj_lenp = len;
+ break;
+ case 10: /* Hex key sizes, not preceded by 0x */
+ case 26:
+ error = hexascii_to_octet(buf, len, obj_val, obj_lenp);
+ break;
+ case 12: /* Hex key sizes, preceded by 0x */
+ case 28:
+ if (strncmp(buf, "0x", 2) != 0)
+ return (EINVAL);
+ error = hexascii_to_octet(buf + 2, len - 2, obj_val, obj_lenp);
+ break;
+ default:
+ return (EINVAL);
+ }
+ return (error);
+}
+
+/* ARGSUSED */
+static void
+defersig(int sig)
+{
+ signalled = sig;
+}
+
+static int
+get_secobj_from_tty(uint_t try, const char *objname, char *buf)
+{
+ uint_t len = 0;
+ int c;
+ struct termios stored, current;
+ void (*sigfunc)(int);
+
+ /*
+ * Turn off echo -- but before we do so, defer SIGINT handling
+ * so that a ^C doesn't leave the terminal corrupted.
+ */
+ sigfunc = signal(SIGINT, defersig);
+ (void) fflush(stdin);
+ (void) tcgetattr(0, &stored);
+ current = stored;
+ current.c_lflag &= ~(ICANON|ECHO);
+ current.c_cc[VTIME] = 0;
+ current.c_cc[VMIN] = 1;
+ (void) tcsetattr(0, TCSANOW, &current);
+again:
+ if (try == 1)
+ (void) printf(gettext("provide value for '%s': "), objname);
+ else
+ (void) printf(gettext("confirm value for '%s': "), objname);
+
+ (void) fflush(stdout);
+ while (signalled == 0) {
+ c = getchar();
+ if (c == '\n' || c == '\r') {
+ if (len != 0)
+ break;
+ (void) putchar('\n');
+ goto again;
+ }
+
+ buf[len++] = c;
+ if (len >= DLADM_SECOBJ_VAL_MAX - 1)
+ break;
+ (void) putchar('*');
+ }
+
+ (void) putchar('\n');
+ (void) fflush(stdin);
+
+ /*
+ * Restore terminal setting and handle deferred signals.
+ */
+ (void) tcsetattr(0, TCSANOW, &stored);
+
+ (void) signal(SIGINT, sigfunc);
+ if (signalled != 0)
+ (void) kill(getpid(), signalled);
+
+ return (len);
+}
+
+static int
+get_secobj_val(char *obj_name, uint8_t *obj_val, uint_t *obj_lenp,
+ dladm_secobj_class_t class, FILE *filep)
+{
+ int rval;
+ uint_t len, len2;
+ char buf[DLADM_SECOBJ_VAL_MAX], buf2[DLADM_SECOBJ_VAL_MAX];
+
+ if (filep == NULL) {
+ len = get_secobj_from_tty(1, obj_name, buf);
+ rval = convert_secobj(buf, len, obj_val, obj_lenp, class);
+ if (rval == 0) {
+ len2 = get_secobj_from_tty(2, obj_name, buf2);
+ if (len != len2 || memcmp(buf, buf2, len) != 0)
+ rval = ENOTSUP;
+ }
+ return (rval);
+ } else {
+ for (;;) {
+ if (fgets(buf, sizeof (buf), filep) == NULL)
+ break;
+ if (isspace(buf[0]))
+ continue;
+
+ len = strlen(buf);
+ if (buf[len - 1] == '\n') {
+ buf[len - 1] = '\0';
+ len--;
+ }
+ break;
+ }
+ (void) fclose(filep);
+ }
+ return (convert_secobj(buf, len, obj_val, obj_lenp, class));
+}
+
+static boolean_t
+check_auth(const char *auth)
+{
+ struct passwd *pw;
+
+ if ((pw = getpwuid(getuid())) == NULL)
+ return (B_FALSE);
+
+ return (chkauthattr(auth, pw->pw_name) != 0);
+}
+
+static void
+audit_secobj(char *auth, char *class, char *obj,
+ boolean_t success, boolean_t create)
+{
+ adt_session_data_t *ah;
+ adt_event_data_t *event;
+ au_event_t flag;
+ char *errstr;
+
+ if (create) {
+ flag = ADT_dladm_create_secobj;
+ errstr = "ADT_dladm_create_secobj";
+ } else {
+ flag = ADT_dladm_delete_secobj;
+ errstr = "ADT_dladm_delete_secobj";
+ }
+
+ if (adt_start_session(&ah, NULL, ADT_USE_PROC_DATA) != 0) {
+ (void) fprintf(stderr, "%s: adt_start_session: %s\n",
+ progname, strerror(errno));
+ exit(1);
+ }
+
+ if ((event = adt_alloc_event(ah, flag)) == NULL) {
+ (void) fprintf(stderr, "%s: adt_alloc_event"
+ "(%s): %s\n", progname, errstr,
+ strerror(errno));
+ exit(1);
+ }
+
+ /* fill in audit info */
+ if (create) {
+ event->adt_dladm_create_secobj.auth_used = auth;
+ event->adt_dladm_create_secobj.obj_class = class;
+ event->adt_dladm_create_secobj.obj_name = obj;
+ } else {
+ event->adt_dladm_delete_secobj.auth_used = auth;
+ event->adt_dladm_delete_secobj.obj_class = class;
+ event->adt_dladm_delete_secobj.obj_name = obj;
+ }
+
+ if (success) {
+ if (adt_put_event(event, ADT_SUCCESS, ADT_SUCCESS) != 0) {
+ (void) fprintf(stderr, "%s: adt_put_event"
+ "(%s, success): %s\n",
+ progname, errstr, strerror(errno));
+ exit(1);
+ }
+ } else {
+ if (adt_put_event(event, ADT_FAILURE,
+ ADT_FAIL_VALUE_AUTH) != 0) {
+ (void) fprintf(stderr, "%s: adt_put_event"
+ "(%s, failure): %s\n",
+ progname, errstr, strerror(errno));
+ exit(1);
+ }
+ }
+
+ adt_free_event(event);
+ (void) adt_end_session(ah);
+}
+
+#define MAX_SECOBJS 32
+#define MAX_SECOBJ_NAMELEN 32
+static void
+do_create_secobj(int argc, char **argv)
+{
+ int option, rval;
+ char errmsg[DLADM_STRSIZE];
+ FILE *filep = NULL;
+ char *obj_name = NULL;
+ char *class_name = NULL;
+ uint8_t obj_val[DLADM_SECOBJ_VAL_MAX];
+ uint_t obj_len;
+ boolean_t success, temp = B_FALSE;
+ dladm_status_t status;
+ dladm_secobj_class_t class = -1;
+ uid_t euid;
+
+ opterr = 0;
+ (void) memset(obj_val, 0, DLADM_SECOBJ_VAL_MAX);
+ while ((option = getopt_long(argc, argv, ":f:c:R:t",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'f':
+ euid = geteuid();
+ (void) seteuid(getuid());
+ filep = fopen(optarg, "r");
+ if (filep == NULL) {
+ (void) fprintf(stderr,
+ gettext("%s: cannot open %s: %s\n"),
+ progname, optarg, strerror(errno));
+ exit(1);
+ }
+ (void) seteuid(euid);
+ break;
+ case 'c':
+ class_name = optarg;
+ status = dladm_str2secobjclass(optarg, &class);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid secure object class '%s', "
+ "valid values are: wep\n"),
+ progname, optarg);
+ exit(1);
+ }
+ break;
+ case 't':
+ temp = B_TRUE;
+ break;
+ case 'R':
+ status = dladm_set_rootdir(optarg);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid directory specified: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1))
+ obj_name = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (class == -1) {
+ (void) fprintf(stderr,
+ gettext("%s: secure object class required\n"),
+ progname);
+ exit(1);
+ }
+
+ if (obj_name == NULL) {
+ (void) fprintf(stderr,
+ gettext("%s: secure object name required\n"),
+ progname);
+ exit(1);
+ }
+
+ success = check_auth(LINK_SEC_AUTH);
+ audit_secobj(LINK_SEC_AUTH, class_name, obj_name, success, B_TRUE);
+ if (!success) {
+ (void) fprintf(stderr,
+ gettext("%s: authorization '%s' is required\n"),
+ progname, LINK_SEC_AUTH);
+ exit(1);
+ }
+
+ if ((rval = get_secobj_val(obj_name, obj_val, &obj_len,
+ class, filep)) != 0) {
+ switch (rval) {
+ case ENOENT:
+ (void) fprintf(stderr,
+ gettext("%s: invalid secure object class\n"),
+ progname);
+ break;
+ case EINVAL:
+ (void) fprintf(stderr,
+ gettext("%s: invalid secure object value\n"),
+ progname);
+ break;
+ case ENOTSUP:
+ (void) fprintf(stderr, gettext(
+ "%s: verification failed\n"), progname);
+ break;
+ default:
+ (void) fprintf(stderr, gettext(
+ "%s: invalid secure object: %s\n"),
+ progname, strerror(rval));
+ break;
+ }
+ exit(1);
+ }
+
+ status = dladm_set_secobj(obj_name, class, obj_val, obj_len,
+ DLADM_OPT_CREATE | DLADM_OPT_TEMP);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: could not create secure object '%s': %s\n"),
+ progname, obj_name, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+ if (temp)
+ return;
+
+ status = dladm_set_secobj(obj_name, class, obj_val, obj_len,
+ DLADM_OPT_PERSIST);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: warning: could not persistently create "
+ "secure object '%s': %s\n"), progname, obj_name,
+ dladm_status2str(status, errmsg));
+ exit(1);
+ }
+}
+
+static void
+do_delete_secobj(int argc, char **argv)
+{
+ int i, option;
+ char errmsg[DLADM_STRSIZE];
+ boolean_t temp = B_FALSE;
+ split_t *sp = NULL;
+ boolean_t success;
+ dladm_status_t status, pstatus;
+
+ opterr = 0;
+ status = pstatus = DLADM_STATUS_OK;
+ while ((option = getopt_long(argc, argv, "R:t",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 't':
+ temp = B_TRUE;
+ break;
+ case 'R':
+ status = dladm_set_rootdir(optarg);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid directory specified: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1)) {
+ sp = split(argv[optind], MAX_SECOBJS, MAX_SECOBJ_NAMELEN);
+ if (sp == NULL) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid secure object name(s): '%s'\n"),
+ progname, argv[optind]);
+ exit(1);
+ }
+ } else if (optind != argc)
+ usage();
+
+ if (sp == NULL || sp->s_nfields < 1) {
+ (void) fprintf(stderr,
+ gettext("%s: secure object name required\n"),
+ progname);
+ exit(1);
+ }
+
+ success = check_auth(LINK_SEC_AUTH);
+ audit_secobj(LINK_SEC_AUTH, "wep", argv[optind], success, B_FALSE);
+ if (!success) {
+ (void) fprintf(stderr,
+ gettext("%s: authorization '%s' is required\n"),
+ progname, LINK_SEC_AUTH);
+ exit(1);
+ }
+
+ for (i = 0; i < sp->s_nfields; i++) {
+ status = dladm_unset_secobj(sp->s_fields[i], DLADM_OPT_TEMP);
+ if (!temp) {
+ pstatus = dladm_unset_secobj(sp->s_fields[i],
+ DLADM_OPT_PERSIST);
+ } else {
+ pstatus = DLADM_STATUS_OK;
+ }
+
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: could not delete secure object '%s': %s\n"),
+ progname, sp->s_fields[i],
+ dladm_status2str(status, errmsg));
+ }
+ if (pstatus != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext("%s: warning: could not "
+ "persistently delete secure object '%s': %s\n"),
+ progname, sp->s_fields[i],
+ dladm_status2str(pstatus, errmsg));
+ }
+ }
+ if (status != DLADM_STATUS_OK || pstatus != DLADM_STATUS_OK)
+ exit(1);
+}
+
+typedef struct show_secobj_state {
+ boolean_t ss_persist;
+ boolean_t ss_parseable;
+ boolean_t ss_debug;
+ boolean_t ss_header;
+} show_secobj_state_t;
+
+static void
+print_secobj_head(show_secobj_state_t *statep)
+{
+ (void) printf("%-20s %-20s ", "OBJECT", "CLASS");
+ if (statep->ss_debug)
+ (void) printf("%-30s", "VALUE");
+ (void) putchar('\n');
+}
+
+static boolean_t
+show_secobj(void *arg, const char *obj_name)
+{
+ uint_t obj_len = DLADM_SECOBJ_VAL_MAX;
+ uint8_t obj_val[DLADM_SECOBJ_VAL_MAX];
+ char buf[DLADM_STRSIZE];
+ uint_t flags = 0;
+ dladm_secobj_class_t class;
+ show_secobj_state_t *statep = arg;
+ dladm_status_t status;
+
+ if (statep->ss_persist)
+ flags |= DLADM_OPT_PERSIST;
+
+ status = dladm_get_secobj(obj_name, &class, obj_val, &obj_len, flags);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: cannot get secure object '%s': %s\n"), progname,
+ obj_name, dladm_status2str(status, buf));
+ exit(1);
+ }
+
+ if (statep->ss_header) {
+ statep->ss_header = B_FALSE;
+ if (!statep->ss_parseable)
+ print_secobj_head(statep);
+ }
+
+ if (statep->ss_parseable) {
+ (void) printf("OBJECT=\"%s\" CLASS=\"%s\" ", obj_name,
+ dladm_secobjclass2str(class, buf));
+ } else {
+ (void) printf("%-20s %-20s ", obj_name,
+ dladm_secobjclass2str(class, buf));
+ }
+
+ if (statep->ss_debug) {
+ char val[DLADM_SECOBJ_VAL_MAX * 2];
+ uint_t len = sizeof (val);
+
+ if (octet_to_hexascii(obj_val, obj_len, val, &len) == 0) {
+ if (statep->ss_parseable)
+ (void) printf("VALUE=\"0x%s\"", val);
+ else
+ (void) printf("0x%-30s", val);
+ }
+ }
+ (void) putchar('\n');
+ return (B_TRUE);
+}
+
+static void
+do_show_secobj(int argc, char **argv)
+{
+ int option;
+ show_secobj_state_t state;
+ dladm_status_t status;
+ uint_t i;
+ char errmsg[DLADM_STRSIZE];
+ split_t *sp;
+ uint_t flags;
+
+ opterr = 0;
+ state.ss_persist = B_FALSE;
+ state.ss_parseable = B_FALSE;
+ state.ss_debug = B_FALSE;
+ state.ss_header = B_TRUE;
+ while ((option = getopt_long(argc, argv, ":pPd",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'p':
+ state.ss_parseable = B_TRUE;
+ break;
+ case 'P':
+ state.ss_persist = B_TRUE;
+ break;
+ case 'd':
+ if (getuid() != 0) {
+ (void) fprintf(stderr,
+ gettext("%s: insufficient privileges\n"),
+ progname);
+ exit(1);
+ }
+ state.ss_debug = B_TRUE;
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1)) {
+ sp = split(argv[optind], MAX_SECOBJS, MAX_SECOBJ_NAMELEN);
+ if (sp == NULL) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid secure object name(s): '%s'\n"),
+ progname, argv[optind]);
+ exit(1);
+ }
+ for (i = 0; i < sp->s_nfields; i++) {
+ if (!show_secobj(&state, sp->s_fields[i]))
+ break;
+ }
+ splitfree(sp);
+ return;
+ } else if (optind != argc)
+ usage();
+
+ flags = state.ss_persist ? DLADM_OPT_PERSIST : 0;
+ status = dladm_walk_secobj(&state, show_secobj, flags);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext("%s: show-secobj: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+}
+
+/* ARGSUSED */
+static void
+do_init_linkprop(int argc, char **argv)
+{
+ char errmsg[DLADM_STRSIZE];
+ dladm_status_t status;
+
+ status = dladm_init_linkprop();
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: link property initialization failed: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+}
+
+/* ARGSUSED */
+static void
+do_init_secobj(int argc, char **argv)
+{
+ char errmsg[DLADM_STRSIZE];
+ dladm_status_t status;
+
+ status = dladm_init_secobj();
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: secure object initialization failed: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+}
diff --git a/usr/src/cmd/dladm/linkprop.conf b/usr/src/cmd/dladm/linkprop.conf
new file mode 100644
index 0000000000..dd196c1273
--- /dev/null
+++ b/usr/src/cmd/dladm/linkprop.conf
@@ -0,0 +1,30 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+# DO NOT EDIT OR PARSE THIS FILE!
+#
+# Use the dladm(1m) command to change the contents of this file.
+
diff --git a/usr/src/cmd/dladm/secobj.conf b/usr/src/cmd/dladm/secobj.conf
new file mode 100644
index 0000000000..dd196c1273
--- /dev/null
+++ b/usr/src/cmd/dladm/secobj.conf
@@ -0,0 +1,30 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+# DO NOT EDIT OR PARSE THIS FILE!
+#
+# Use the dladm(1m) command to change the contents of this file.
+
diff --git a/usr/src/cmd/svc/milestone/net-physical b/usr/src/cmd/svc/milestone/net-physical
index 3e5291a854..60c4ee8f98 100644
--- a/usr/src/cmd/svc/milestone/net-physical
+++ b/usr/src/cmd/svc/milestone/net-physical
@@ -58,9 +58,13 @@ SUNW_NO_MPATHD=; export SUNW_NO_MPATHD
smf_netstrategy
#
-# Bring up link aggregations
+# Bring up link aggregations and initialize security objects.
+# Note that link property initialization is deferred until after
+# IP interfaces are plumbed to ensure that the links will not
+# be unloaded (and the property settings lost).
#
/sbin/dladm up-aggr
+/sbin/dladm init-secobj
#
# If the system was net booted by DHCP, hand DHCP management off to the
@@ -194,6 +198,14 @@ if [ -n "$inet6_list" ]; then
fi
#
+# Unfortunately, if a driver unloads and then is subsequently reloaded, no
+# mechanism currently exists to restore the properties of its associated
+# links. Hence, we wait until after interfaces have been plumbed (above)
+# to initialize link properties.
+#
+/sbin/dladm init-linkprop
+
+#
# Process the /etc/hostname.* files of plumbed IPv4 interfaces. If an
# /etc/hostname file is not present or is empty, the ifconfig auto-dhcp
# / auto-revarp command will attempt to set the address, later.
diff --git a/usr/src/cmd/truss/codes.c b/usr/src/cmd/truss/codes.c
index 452d52c9ed..fe5a173211 100644
--- a/usr/src/cmd/truss/codes.c
+++ b/usr/src/cmd/truss/codes.c
@@ -291,12 +291,12 @@ const struct ioc {
{ (uint_t)TIOCGSIZE, "TIOCGSIZE", "ttysize" },
/*
- * DLIOCRAW has the same ioctl number as LDCLOSE. Since the LDIOC
+ * Unfortunately, the DLIOC and LDIOC codes overlap. Since the LDIOC
* ioctls (for xenix compatibility) are far less likely to be used, we
- * give preference to DLIOCRAW, which is the only userland ioctl in the
- * DLIOC family.
+ * give preference to DLIOC.
*/
{ (uint_t)DLIOCRAW, "DLIOCRAW", NULL },
+ { (uint_t)DLIOCNATIVE, "DLIOCNATIVE", NULL },
{ (uint_t)LDOPEN, "LDOPEN", NULL },
{ (uint_t)LDCLOSE, "LDCLOSE", NULL },
diff --git a/usr/src/head/auth_list.h b/usr/src/head/auth_list.h
index d0d625bc72..5fadc1c404 100644
--- a/usr/src/head/auth_list.h
+++ b/usr/src/head/auth_list.h
@@ -48,6 +48,7 @@ extern "C" {
#define SET_DATE_AUTH "solaris.system.date"
#define WIFI_CONFIG_AUTH "solaris.network.wifi.config"
#define WIFI_WEP_AUTH "solaris.network.wifi.wep"
+#define LINK_SEC_AUTH "solaris.network.link.security"
/*
* Authorizations used by Trusted Solaris.
diff --git a/usr/src/lib/Makefile b/usr/src/lib/Makefile
index d507548e2b..6effccf08b 100644
--- a/usr/src/lib/Makefile
+++ b/usr/src/lib/Makefile
@@ -185,6 +185,7 @@ SUBDIRS += \
madv \
mpss \
libdisasm \
+ libwladm \
libwrap \
libxcurses \
libxcurses2 \
@@ -374,6 +375,7 @@ HDRSUBDIRS= \
libvolmgt \
libumem \
libuutil \
+ libwladm \
libwrap \
libxcurses2 \
libzfs \
@@ -461,7 +463,7 @@ libdevinfo: libnvpair libsec
libdhcpagent: libdhcputil libnsl libsocket
libdhcpsvc: libinetutil
libdhcputil: libinetutil
-libdladm: libdlpi libdevinfo
+libdladm: libdlpi libdevinfo libwladm libinetutil
libdtrace: libproc libgen libctf
libdtrace_jni: libuutil libdtrace
libefi: libuuid
@@ -493,6 +495,7 @@ libwrap: libnsl libsocket
libwanboot: libnvpair libresolv libnsl libsocket libdevinfo libinetutil \
libdhcputil openssl
libwanbootutil: libnsl
+libwladm: libdevinfo libsocket
pam_modules: libproject passwdutil $(SMARTCARD)
libscf: libuutil libmd
libinetsvc: libscf
diff --git a/usr/src/lib/libbsm/audit_class.txt b/usr/src/lib/libbsm/audit_class.txt
index d8e2c6ee42..ae51e5fb53 100644
--- a/usr/src/lib/libbsm/audit_class.txt
+++ b/usr/src/lib/libbsm/audit_class.txt
@@ -52,6 +52,7 @@
0x00000400:na:non-attribute
0x00001000:lo:login or logout
0x00004000:ap:application
+0x00008000:cy:cryptographic
0x00010000:ss:change system state
0x00020000:as:system-wide administration
0x00040000:ua:user administration
diff --git a/usr/src/lib/libbsm/audit_event.txt b/usr/src/lib/libbsm/audit_event.txt
index da1ab9aabe..784b79eab5 100644
--- a/usr/src/lib/libbsm/audit_event.txt
+++ b/usr/src/lib/libbsm/audit_event.txt
@@ -428,6 +428,8 @@
6232:AUE_remove:remove/eject device:ot
6233:AUE_pool_import:import device into pool:ot
6234:AUE_pool_export:export device from pool:ot
+6235:AUE_dladm_create_secobj:create network security object:as,cy
+6236:AUE_dladm_delete_secobj:delete network security object:as,cy
#
# Trusted Extensions events:
#
diff --git a/usr/src/lib/libbsm/common/adt_event.h b/usr/src/lib/libbsm/common/adt_event.h
index f55e446097..f9e2c06ab8 100644
--- a/usr/src/lib/libbsm/common/adt_event.h
+++ b/usr/src/lib/libbsm/common/adt_event.h
@@ -95,6 +95,8 @@ enum adt_login_text {
#define ADT_admin_authenticate 3
#define ADT_attach 42
#define ADT_detach 43
+#define ADT_dladm_create_secobj 47
+#define ADT_dladm_delete_secobj 48
#define ADT_filesystem_add 4
#define ADT_filesystem_delete 5
#define ADT_filesystem_modify 6
@@ -161,6 +163,20 @@ struct adt_detach { /* ADT_detach */
};
typedef struct adt_detach adt_detach_t;
+struct adt_dladm_create_secobj { /* ADT_dladm_create_secobj */
+ char *auth_used; /* required */
+ char *obj_class; /* required */
+ char *obj_name; /* required */
+};
+typedef struct adt_dladm_create_secobj adt_dladm_create_secobj_t;
+
+struct adt_dladm_delete_secobj { /* ADT_dladm_delete_secobj */
+ char *auth_used; /* required */
+ char *obj_class; /* required */
+ char *obj_name; /* required */
+};
+typedef struct adt_dladm_delete_secobj adt_dladm_delete_secobj_t;
+
struct adt_filesystem_add { /* ADT_filesystem_add */
char *object_name; /* required */
char *domain; /* optional */
@@ -483,6 +499,8 @@ union adt_event_data {
adt_admin_authenticate_t adt_admin_authenticate;
adt_attach_t adt_attach;
adt_detach_t adt_detach;
+ adt_dladm_create_secobj_t adt_dladm_create_secobj;
+ adt_dladm_delete_secobj_t adt_dladm_delete_secobj;
adt_filesystem_add_t adt_filesystem_add;
adt_filesystem_delete_t adt_filesystem_delete;
adt_filesystem_modify_t adt_filesystem_modify;
diff --git a/usr/src/lib/libbsm/common/adt_xlate.c b/usr/src/lib/libbsm/common/adt_xlate.c
index 1da827d5f7..a24aa10439 100644
--- a/usr/src/lib/libbsm/common/adt_xlate.c
+++ b/usr/src/lib/libbsm/common/adt_xlate.c
@@ -117,6 +117,46 @@ static struct translation X_detach = {
&XX_detach[0],
&XX_detach[0]
};
+static struct entry XX_dladm_create_secobj[5] = {
+ {AUT_SUBJECT, 1, NULL, &(XX_dladm_create_secobj[1]),
+ 0, 0, 0, NULL},
+ {AUT_UAUTH, 1, &adr1[0], &(XX_dladm_create_secobj[2]),
+ 0, 1, 0, NULL},
+ {AUT_TEXT, 1, &adr1[0], &(XX_dladm_create_secobj[3]),
+ 0, 1, 0, NULL},
+ {AUT_TEXT, 1, &adr1[0], &(XX_dladm_create_secobj[4]),
+ 0, 1, 0, NULL},
+ {AUT_RETURN, 1, NULL, NULL,
+ 0, 0, 0, NULL}
+};
+static struct translation X_dladm_create_secobj = {
+ 0,
+ ADT_dladm_create_secobj,
+ AUE_dladm_create_secobj,
+ 5,
+ &XX_dladm_create_secobj[0],
+ &XX_dladm_create_secobj[0]
+};
+static struct entry XX_dladm_delete_secobj[5] = {
+ {AUT_SUBJECT, 1, NULL, &(XX_dladm_delete_secobj[1]),
+ 0, 0, 0, NULL},
+ {AUT_UAUTH, 1, &adr1[0], &(XX_dladm_delete_secobj[2]),
+ 0, 1, 0, NULL},
+ {AUT_TEXT, 1, &adr1[0], &(XX_dladm_delete_secobj[3]),
+ 0, 1, 0, NULL},
+ {AUT_TEXT, 1, &adr1[0], &(XX_dladm_delete_secobj[4]),
+ 0, 1, 0, NULL},
+ {AUT_RETURN, 1, NULL, NULL,
+ 0, 0, 0, NULL}
+};
+static struct translation X_dladm_delete_secobj = {
+ 0,
+ ADT_dladm_delete_secobj,
+ AUE_dladm_delete_secobj,
+ 5,
+ &XX_dladm_delete_secobj[0],
+ &XX_dladm_delete_secobj[0]
+};
static struct entry XX_filesystem_add[7] = {
{AUT_SUBJECT, 1, NULL, &(XX_filesystem_add[1]),
0, 0, 0, NULL},
@@ -979,10 +1019,12 @@ static struct translation X_zone_state = {
&XX_zone_state[0],
&XX_zone_state[0]
};
-struct translation *xlate_table[47] = {
+struct translation *xlate_table[49] = {
&X_admin_authenticate,
&X_attach,
&X_detach,
+ &X_dladm_create_secobj,
+ &X_dladm_delete_secobj,
&X_filesystem_add,
&X_filesystem_delete,
&X_filesystem_modify,
diff --git a/usr/src/lib/libbsm/common/adt_xml.txt b/usr/src/lib/libbsm/common/adt_xml.txt
index 222dfaf59c..16999ce633 100644
--- a/usr/src/lib/libbsm/common/adt_xml.txt
+++ b/usr/src/lib/libbsm/common/adt_xml.txt
@@ -843,8 +843,39 @@ Use is subject to license terms.
</entry>
</event>
+<!-- dladm security objected events -->
+ <event id="AUE_dladm_generic" type="generic" omit="always">
+ <entry id="subject">
+ <internal token="subject"/>
+ <external opt="none"/>
+ </entry>
+ <entry id="auth_used">
+ <internal token="uauth"/>
+ <external opt="required" type="char *"/>
+ </entry>
+ <entry id="obj_class">
+ <internal token="text"/>
+ <external opt="required" type="char *"/>
+ </entry>
+ <entry id="obj_name">
+ <internal token="text"/>
+ <external opt="required" type="char *"/>
+ </entry>
+ <entry id="return">
+ <internal token="return"/>
+ <external opt="none"/>
+ </entry>
+ </event>
+
+ <event id="AUE_dladm_create_secobj" instance_of="AUE_dladm_generic"
+ header="0" idNo="47" omit="JNI">
+ </event>
+ <event id="AUE_dladm_delete_secobj" instance_of="AUE_dladm_generic"
+ header="0" idNo="48" omit="JNI">
+ </event>
+
<!-- add new everts here with the next higher idNo -->
-<!-- Highest idNo is 46, so next is 47, then fix this comment -->
+<!-- Highest idNo is 48, so next is 49, then fix this comment -->
<!-- end of C Only events -->
diff --git a/usr/src/lib/libdladm/Makefile b/usr/src/lib/libdladm/Makefile
index 6fdcdf8a88..8794785ba1 100644
--- a/usr/src/lib/libdladm/Makefile
+++ b/usr/src/lib/libdladm/Makefile
@@ -27,7 +27,7 @@
include $(SRC)/lib/Makefile.lib
-HDRS = libdladm.h
+HDRS = libdladm.h libdladm_impl.h
HDRDIR = common
SUBDIRS = $(MACH)
diff --git a/usr/src/lib/libdladm/Makefile.com b/usr/src/lib/libdladm/Makefile.com
index 23396f1091..83b423a83b 100644
--- a/usr/src/lib/libdladm/Makefile.com
+++ b/usr/src/lib/libdladm/Makefile.com
@@ -27,7 +27,7 @@
LIBRARY = libdladm.a
VERS = .1
-OBJECTS = libdladm.o
+OBJECTS = libdladm.o secobj.o linkprop.o
include ../../Makefile.lib
@@ -35,8 +35,7 @@ include ../../Makefile.lib
include ../../Makefile.rootfs
LIBS = $(DYNLIB) $(LINTLIB)
-
-LDLIBS += -ldevinfo -ldlpi -lc
+LDLIBS += -ldevinfo -ldlpi -lc -lwladm -linetutil
SRCDIR = ../common
$(LINTLIB) := SRCS = $(SRCDIR)/$(LINTSRC)
diff --git a/usr/src/lib/libdladm/common/libdladm.c b/usr/src/lib/libdladm/common/libdladm.c
index 679368a9ae..f7f9c1755a 100644
--- a/usr/src/lib/libdladm/common/libdladm.c
+++ b/usr/src/lib/libdladm/common/libdladm.c
@@ -25,19 +25,18 @@
#pragma ident "%Z%%M% %I% %E% SMI"
-#include <stdio.h>
-#include <sys/types.h>
-#include <string.h>
-#include <fcntl.h>
#include <unistd.h>
#include <stropts.h>
-#include <stdlib.h>
#include <errno.h>
-#include <libdevinfo.h>
-#include <libdlpi.h>
-#include <libdladm.h>
-#include <sys/dld.h>
+#include <fcntl.h>
+#include <strings.h>
+#include <dirent.h>
#include <net/if.h>
+#include <sys/stat.h>
+#include <sys/dld.h>
+#include <libdlpi.h>
+#include <libdevinfo.h>
+#include <libdladm_impl.h>
typedef struct dladm_dev {
char dd_name[IFNAMSIZ];
@@ -48,11 +47,13 @@ typedef struct dladm_walk {
dladm_dev_t *dw_dev_list;
} dladm_walk_t;
+static char dladm_rootdir[MAXPATHLEN] = "/";
+
/*
* Issue an ioctl to the specified file descriptor attached to the
* DLD control driver interface.
*/
-static int
+int
i_dladm_ioctl(int fd, int ic_cmd, void *ic_dp, int ic_len)
{
struct strioctl iocb;
@@ -250,3 +251,256 @@ failed:
(void) close(fd);
return (-1);
}
+
+const char *
+dladm_status2str(dladm_status_t status, char *buf)
+{
+ const char *s;
+
+ switch (status) {
+ case DLADM_STATUS_OK:
+ s = "ok";
+ break;
+ case DLADM_STATUS_BADARG:
+ s = "invalid argument";
+ break;
+ case DLADM_STATUS_FAILED:
+ s = "operation failed";
+ break;
+ case DLADM_STATUS_TOOSMALL:
+ s = "buffer size too small";
+ break;
+ case DLADM_STATUS_NOTSUP:
+ s = "operation not supported";
+ break;
+ case DLADM_STATUS_NOTFOUND:
+ s = "object not found";
+ break;
+ case DLADM_STATUS_BADVAL:
+ s = "invalid value";
+ break;
+ case DLADM_STATUS_NOMEM:
+ s = "insufficient memory";
+ break;
+ case DLADM_STATUS_EXIST:
+ s = "object already exists";
+ break;
+ case DLADM_STATUS_LINKINVAL:
+ s = "invalid link";
+ break;
+ case DLADM_STATUS_PROPRDONLY:
+ s = "read-only property";
+ break;
+ case DLADM_STATUS_BADVALCNT:
+ s = "invalid number of values";
+ break;
+ case DLADM_STATUS_DBNOTFOUND:
+ s = "database not found";
+ break;
+ case DLADM_STATUS_DENIED:
+ s = "permission denied";
+ break;
+ case DLADM_STATUS_IOERR:
+ s = "I/O error";
+ break;
+ default:
+ s = "";
+ }
+ (void) snprintf(buf, DLADM_STRSIZE, "%s", s);
+ return (buf);
+}
+
+/*
+ * Convert a unix errno to a dladm_status_t.
+ * We only convert errnos that are likely to be encountered. All others
+ * are mapped to DLADM_STATUS_FAILED.
+ */
+dladm_status_t
+dladm_errno2status(int err)
+{
+ switch (err) {
+ case EINVAL:
+ return (DLADM_STATUS_BADARG);
+ case EEXIST:
+ return (DLADM_STATUS_EXIST);
+ case ENOENT:
+ return (DLADM_STATUS_NOTFOUND);
+ case ENOSPC:
+ return (DLADM_STATUS_TOOSMALL);
+ case ENOMEM:
+ return (DLADM_STATUS_NOMEM);
+ case ENOTSUP:
+ return (DLADM_STATUS_NOTSUP);
+ case EACCES:
+ return (DLADM_STATUS_DENIED);
+ case EIO:
+ return (DLADM_STATUS_IOERR);
+ default:
+ return (DLADM_STATUS_FAILED);
+ }
+}
+
+/*
+ * These are the uid and gid of the user 'dladm'.
+ * The directory /etc/dladm and all files under it are owned by this user.
+ */
+#define DLADM_DB_OWNER 15
+#define DLADM_DB_GROUP 3
+#define LOCK_DB_PERMS S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
+
+static int
+i_dladm_lock_db(const char *lock_file, short type)
+{
+ int lock_fd;
+ struct flock lock;
+
+ if ((lock_fd = open(lock_file, O_RDWR | O_CREAT | O_TRUNC,
+ LOCK_DB_PERMS)) < 0)
+ return (-1);
+
+ lock.l_type = type;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+
+ if (fcntl(lock_fd, F_SETLKW, &lock) < 0) {
+ int err = errno;
+
+ (void) close(lock_fd);
+ (void) unlink(lock_file);
+ errno = err;
+ return (-1);
+ }
+ return (lock_fd);
+}
+
+static void
+i_dladm_unlock_db(const char *lock_file, int fd)
+{
+ struct flock lock;
+
+ if (fd < 0)
+ return;
+
+ lock.l_type = F_UNLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+
+ (void) fcntl(fd, F_SETLKW, &lock);
+ (void) close(fd);
+ (void) unlink(lock_file);
+}
+
+dladm_status_t
+i_dladm_rw_db(const char *db_file, mode_t db_perms,
+ dladm_status_t (*process_db)(void *, FILE *, FILE *),
+ void *arg, boolean_t writeop)
+{
+ dladm_status_t status = DLADM_STATUS_OK;
+ FILE *fp, *nfp = NULL;
+ char lock[MAXPATHLEN];
+ char file[MAXPATHLEN];
+ char newfile[MAXPATHLEN];
+ char *db_basename;
+ int nfd, lock_fd;
+
+ /*
+ * If we are called from a boot script such as net-physical,
+ * it's quite likely that the root fs is still not writable.
+ * For this case, it's ok for the lock creation to fail since
+ * no one else could be accessing our configuration file.
+ */
+ db_basename = strrchr(db_file, '/');
+ if (db_basename == NULL || db_basename[1] == '\0')
+ return (dladm_errno2status(EINVAL));
+ db_basename++;
+ (void) snprintf(lock, MAXPATHLEN, "/tmp/%s.lock", db_basename);
+ if ((lock_fd = i_dladm_lock_db
+ (lock, (writeop ? F_WRLCK : F_RDLCK))) < 0 && errno != EROFS)
+ return (dladm_errno2status(errno));
+
+ (void) snprintf(file, MAXPATHLEN, "%s/%s", dladm_rootdir, db_file);
+ if ((fp = fopen(file, (writeop ? "r+" : "r"))) == NULL) {
+ int err = errno;
+
+ i_dladm_unlock_db(lock, lock_fd);
+ if (err == ENOENT)
+ return (DLADM_STATUS_DBNOTFOUND);
+
+ return (dladm_errno2status(err));
+ }
+
+ if (writeop) {
+ (void) snprintf(newfile, MAXPATHLEN, "%s/%s.new",
+ dladm_rootdir, db_file);
+ if ((nfd = open(newfile, O_WRONLY | O_CREAT | O_TRUNC,
+ db_perms)) < 0) {
+ (void) fclose(fp);
+ i_dladm_unlock_db(lock, lock_fd);
+ return (dladm_errno2status(errno));
+ }
+
+ if ((nfp = fdopen(nfd, "w")) == NULL) {
+ (void) close(nfd);
+ (void) fclose(fp);
+ (void) unlink(newfile);
+ i_dladm_unlock_db(lock, lock_fd);
+ return (dladm_errno2status(errno));
+ }
+ }
+ status = (*process_db)(arg, fp, nfp);
+ if (!writeop || status != DLADM_STATUS_OK)
+ goto done;
+
+ /*
+ * Configuration files need to be owned by the 'dladm' user.
+ * If we are invoked by root, the file ownership needs to be fixed.
+ */
+ if (getuid() == 0 || geteuid() == 0) {
+ if (fchown(nfd, DLADM_DB_OWNER, DLADM_DB_GROUP) < 0) {
+ status = dladm_errno2status(errno);
+ goto done;
+ }
+ }
+
+ if (fflush(nfp) == EOF) {
+ status = dladm_errno2status(errno);
+ goto done;
+ }
+ (void) fclose(fp);
+ (void) fclose(nfp);
+
+ if (rename(newfile, file) < 0) {
+ (void) unlink(newfile);
+ i_dladm_unlock_db(lock, lock_fd);
+ return (dladm_errno2status(errno));
+ }
+
+ i_dladm_unlock_db(lock, lock_fd);
+ return (DLADM_STATUS_OK);
+
+done:
+ if (nfp != NULL) {
+ (void) fclose(nfp);
+ if (status != DLADM_STATUS_OK)
+ (void) unlink(newfile);
+ }
+ (void) fclose(fp);
+ i_dladm_unlock_db(lock, lock_fd);
+ return (status);
+}
+
+dladm_status_t
+dladm_set_rootdir(const char *rootdir)
+{
+ DIR *dp;
+
+ if (rootdir == NULL || *rootdir != '/' ||
+ (dp = opendir(rootdir)) == NULL)
+ return (DLADM_STATUS_BADARG);
+
+ (void) strncpy(dladm_rootdir, rootdir, MAXPATHLEN);
+ (void) closedir(dp);
+ return (DLADM_STATUS_OK);
+}
diff --git a/usr/src/lib/libdladm/common/libdladm.h b/usr/src/lib/libdladm/common/libdladm.h
index 64315da820..1cf3700fc6 100644
--- a/usr/src/lib/libdladm/common/libdladm.h
+++ b/usr/src/lib/libdladm/common/libdladm.h
@@ -36,19 +36,77 @@
extern "C" {
#endif
-typedef struct dladm_attr dladm_attr_t;
-
-struct dladm_attr {
+typedef struct dladm_attr {
char da_dev[MAXNAMELEN];
uint_t da_max_sdu;
uint16_t da_vid;
-};
+} dladm_attr_t;
+
+#define DLADM_STRSIZE 256
+#define DLADM_SECOBJ_VAL_MAX 256
+#define DLADM_PROP_VAL_MAX 256
+#define DLADM_OPT_TEMP 0x00000001
+#define DLADM_OPT_CREATE 0x00000002
+#define DLADM_OPT_PERSIST 0x00000004
+
+typedef enum {
+ DLADM_STATUS_OK = 0,
+ DLADM_STATUS_BADARG,
+ DLADM_STATUS_FAILED,
+ DLADM_STATUS_TOOSMALL,
+ DLADM_STATUS_NOTSUP,
+ DLADM_STATUS_NOTFOUND,
+ DLADM_STATUS_BADVAL,
+ DLADM_STATUS_NOMEM,
+ DLADM_STATUS_EXIST,
+ DLADM_STATUS_LINKINVAL,
+ DLADM_STATUS_PROPRDONLY,
+ DLADM_STATUS_BADVALCNT,
+ DLADM_STATUS_DBNOTFOUND,
+ DLADM_STATUS_DENIED,
+ DLADM_STATUS_IOERR
+} dladm_status_t;
+
+typedef enum {
+ DLADM_PROP_VAL_CURRENT = 1,
+ DLADM_PROP_VAL_DEFAULT,
+ DLADM_PROP_VAL_MODIFIABLE,
+ DLADM_PROP_VAL_PERSISTENT
+} dladm_prop_type_t;
+
+#define DLADM_SECOBJ_CLASS_WEP 0
+typedef int dladm_secobj_class_t;
-extern int dladm_walk(void (*)(void *, const char *), void *);
-extern int dladm_walk_vlan(void (*)(void *,
- const char *), void *, const char *);
+typedef void (dladm_walkcb_t)(void *, const char *);
+
+extern int dladm_walk(dladm_walkcb_t *, void *);
+extern int dladm_walk_vlan(dladm_walkcb_t *, void *, const char *);
extern int dladm_info(const char *, dladm_attr_t *);
+extern dladm_status_t dladm_set_prop(const char *, const char *,
+ char **, uint_t, uint_t);
+extern dladm_status_t dladm_get_prop(const char *, dladm_prop_type_t,
+ const char *, char **, uint_t *);
+extern dladm_status_t dladm_walk_prop(const char *, void *,
+ boolean_t (*)(void *, const char *));
+
+extern dladm_status_t dladm_set_secobj(const char *, dladm_secobj_class_t,
+ uint8_t *, uint_t, uint_t);
+extern dladm_status_t dladm_get_secobj(const char *, dladm_secobj_class_t *,
+ uint8_t *, uint_t *, uint_t);
+extern dladm_status_t dladm_unset_secobj(const char *, uint_t);
+extern dladm_status_t dladm_walk_secobj(void *,
+ boolean_t (*)(void *, const char *), uint_t);
+
+extern const char *dladm_status2str(dladm_status_t, char *);
+extern const char *dladm_secobjclass2str(dladm_secobj_class_t, char *);
+extern dladm_status_t dladm_str2secobjclass(const char *,
+ dladm_secobj_class_t *);
+
+extern dladm_status_t dladm_init_linkprop(void);
+extern dladm_status_t dladm_init_secobj(void);
+extern dladm_status_t dladm_set_rootdir(const char *rootdir);
+
#ifdef __cplusplus
}
#endif
diff --git a/usr/src/lib/libdladm/common/libdladm_impl.h b/usr/src/lib/libdladm/common/libdladm_impl.h
new file mode 100644
index 0000000000..c949219a5b
--- /dev/null
+++ b/usr/src/lib/libdladm/common/libdladm_impl.h
@@ -0,0 +1,51 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _LIBDLADM_IMPL_H
+#define _LIBDLADM_IMPL_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <libdladm.h>
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAXLINELEN 1024
+#define BUFLEN(lim, ptr) (((lim) > (ptr)) ? ((lim) - (ptr)) : 0)
+
+extern int i_dladm_ioctl(int, int, void *, int);
+extern dladm_status_t dladm_errno2status(int);
+extern dladm_status_t i_dladm_rw_db(const char *, mode_t,
+ dladm_status_t (*)(void *, FILE *, FILE *),
+ void *, boolean_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBDLADM_IMPL_H */
diff --git a/usr/src/lib/libdladm/common/linkprop.c b/usr/src/lib/libdladm/common/linkprop.c
new file mode 100644
index 0000000000..8e1ef849e9
--- /dev/null
+++ b/usr/src/lib/libdladm/common/linkprop.c
@@ -0,0 +1,700 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <stdlib.h>
+#include <strings.h>
+#include <errno.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <libwladm.h>
+#include <libdladm_impl.h>
+
+static dladm_status_t i_dladm_set_prop_db(const char *, const char *,
+ char **, uint_t);
+static dladm_status_t i_dladm_get_prop_db(const char *, const char *,
+ char **, uint_t *);
+
+/*
+ * Convert a wladm_status_t to a dladm_status_t. This is used by wrappers
+ * to libwladm routines (e.g. dladm_set_prop()). Note that the mapping is
+ * not 1-1; whenever possible we try to look for an error code with a
+ * similar meaning. Error codes with no suitable counterpart in libdladm
+ * will be mapped to DLADM_STATUS_FAILED. Clients who require clearer error
+ * reporting should use libwladm directly.
+ */
+static dladm_status_t
+dladm_wladmstatus2status(wladm_status_t wstatus)
+{
+ switch (wstatus) {
+ case WLADM_STATUS_OK:
+ return (DLADM_STATUS_OK);
+ case WLADM_STATUS_FAILED:
+ return (DLADM_STATUS_FAILED);
+ case WLADM_STATUS_NOTSUP:
+ return (DLADM_STATUS_NOTSUP);
+ case WLADM_STATUS_BADARG:
+ return (DLADM_STATUS_BADARG);
+ case WLADM_STATUS_NOTFOUND:
+ return (DLADM_STATUS_NOTFOUND);
+ case WLADM_STATUS_BADVAL:
+ return (DLADM_STATUS_BADVAL);
+ case WLADM_STATUS_LINKINVAL:
+ return (DLADM_STATUS_LINKINVAL);
+ case WLADM_STATUS_NOMEM:
+ return (DLADM_STATUS_NOMEM);
+ case WLADM_STATUS_PROPRDONLY:
+ return (DLADM_STATUS_PROPRDONLY);
+ case WLADM_STATUS_TOOSMALL:
+ return (DLADM_STATUS_TOOSMALL);
+ case WLADM_STATUS_BADVALCNT:
+ return (DLADM_STATUS_BADVALCNT);
+ default:
+ return (DLADM_STATUS_FAILED);
+ }
+}
+
+dladm_status_t
+dladm_set_prop(const char *link, const char *prop_name, char **prop_val,
+ uint_t val_cnt, uint_t flags)
+{
+ dladm_status_t status = DLADM_STATUS_BADARG;
+
+ if (link == NULL || (prop_val == NULL && val_cnt > 0) ||
+ (prop_val != NULL && val_cnt == 0) || flags == 0)
+ return (DLADM_STATUS_BADARG);
+
+ if ((flags & DLADM_OPT_TEMP) != 0) {
+ if (wladm_is_valid(link)) {
+ status = dladm_wladmstatus2status(
+ wladm_set_prop(link, prop_name,
+ prop_val, val_cnt));
+ }
+ if (status != DLADM_STATUS_OK)
+ return (status);
+ }
+ if ((flags & DLADM_OPT_PERSIST) != 0) {
+ status = i_dladm_set_prop_db(link, prop_name,
+ prop_val, val_cnt);
+ }
+ return (status);
+}
+
+dladm_status_t
+dladm_walk_prop(const char *link, void *arg,
+ boolean_t (*func)(void *, const char *))
+{
+ if (link == NULL || func == NULL)
+ return (DLADM_STATUS_BADARG);
+
+ if (wladm_is_valid(link)) {
+ return (dladm_wladmstatus2status(
+ wladm_walk_prop(link, arg, func)));
+ }
+ return (DLADM_STATUS_BADARG);
+}
+
+dladm_status_t
+dladm_get_prop(const char *link, dladm_prop_type_t type,
+ const char *prop_name, char **prop_val, uint_t *val_cntp)
+{
+ if (link == NULL || prop_name == NULL || prop_val == NULL ||
+ val_cntp == NULL || *val_cntp == 0)
+ return (DLADM_STATUS_BADARG);
+
+ if (type == DLADM_PROP_VAL_PERSISTENT) {
+ return (i_dladm_get_prop_db(link, prop_name,
+ prop_val, val_cntp));
+ }
+
+ if (wladm_is_valid(link)) {
+ wladm_prop_type_t wtype;
+
+ switch (type) {
+ case DLADM_PROP_VAL_CURRENT:
+ wtype = WLADM_PROP_VAL_CURRENT;
+ break;
+ case DLADM_PROP_VAL_DEFAULT:
+ wtype = WLADM_PROP_VAL_DEFAULT;
+ break;
+ case DLADM_PROP_VAL_MODIFIABLE:
+ wtype = WLADM_PROP_VAL_MODIFIABLE;
+ break;
+ default:
+ return (DLADM_STATUS_BADARG);
+ }
+
+ return (dladm_wladmstatus2status(
+ wladm_get_prop(link, wtype, prop_name,
+ prop_val, val_cntp)));
+ }
+ return (DLADM_STATUS_BADARG);
+}
+
+/*
+ * Data structures used for implementing persistent link properties
+ */
+typedef struct linkprop_val {
+ const char *lv_name;
+ struct linkprop_val *lv_nextval;
+} linkprop_val_t;
+
+typedef struct linkprop_info {
+ const char *li_name;
+ struct linkprop_info *li_nextprop;
+ struct linkprop_val *li_val;
+} linkprop_info_t;
+
+typedef struct linkprop_db_state linkprop_db_state_t;
+
+typedef boolean_t (*linkprop_db_op_t)(linkprop_db_state_t *,
+ char *, linkprop_info_t *, dladm_status_t *);
+
+struct linkprop_db_state {
+ linkprop_db_op_t ls_op;
+ const char *ls_link;
+ const char *ls_propname;
+ char **ls_propval;
+ uint_t *ls_valcntp;
+};
+
+static void
+free_linkprops(linkprop_info_t *lip)
+{
+ linkprop_info_t *lip_next;
+ linkprop_val_t *lvp, *lvp_next;
+
+ for (; lip != NULL; lip = lip_next) {
+ lip_next = lip->li_nextprop;
+ for (lvp = lip->li_val; lvp != NULL; lvp = lvp_next) {
+ lvp_next = lvp->lv_nextval;
+ free(lvp);
+ }
+ free(lip);
+ }
+}
+
+/*
+ * Generate an entry in the link property database.
+ * Each entry has this format:
+ * <linkname> <prop0>=<val0>,...,<valn>;...;<propn>=<val0>,...,<valn>;
+ */
+static void
+generate_linkprop_line(linkprop_db_state_t *lsp, char *buf,
+ linkprop_info_t *listp, dladm_status_t *statusp)
+{
+ char tmpbuf[MAXLINELEN];
+ char *ptr, *lim = tmpbuf + MAXLINELEN;
+ linkprop_info_t *lip = listp;
+ linkprop_val_t *lvp = NULL;
+
+ /*
+ * Delete line if there are no properties left.
+ */
+ if (lip == NULL ||
+ (lip->li_val == NULL && lip->li_nextprop == NULL)) {
+ buf[0] = '\0';
+ return;
+ }
+ ptr = tmpbuf;
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%s\t", lsp->ls_link);
+ for (; lip != NULL; lip = lip->li_nextprop) {
+ /*
+ * Skip properties without values.
+ */
+ if (lip->li_val == NULL)
+ continue;
+
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%s=", lip->li_name);
+ for (lvp = lip->li_val; lvp != NULL; lvp = lvp->lv_nextval) {
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%s%c",
+ lvp->lv_name,
+ ((lvp->lv_nextval == NULL) ? ';' : ','));
+ }
+ }
+ if (ptr > lim) {
+ *statusp = DLADM_STATUS_TOOSMALL;
+ return;
+ }
+ (void) snprintf(buf, MAXLINELEN, "%s\n", tmpbuf);
+}
+
+/*
+ * This function is used to update or create an entry in the persistent db.
+ * process_linkprop_db() will first scan the db for an entry matching the
+ * specified link. If a match is found, this function is invoked with the
+ * entry's contents (buf) and its linked-list representation (listp). lsp
+ * holds the name and values of the property to be added or updated; this
+ * information will be merged with listp. Subsequently, an updated entry
+ * will be written to buf, which will in turn be written to disk by
+ * process_linkprop_db(). If no entry matches the specified link, listp
+ * will be NULL; a new entry will be generated in this case and it will
+ * contain only the property information in lsp.
+ */
+static boolean_t
+process_linkprop_set(linkprop_db_state_t *lsp, char *buf,
+ linkprop_info_t *listp, dladm_status_t *statusp)
+{
+ dladm_status_t status;
+ linkprop_info_t *lastp = NULL, *lip = listp, *nlip = NULL;
+ linkprop_val_t **lvpp;
+ int i;
+
+ if (lsp->ls_propname == NULL) {
+ buf[0] = '\0';
+ return (B_FALSE);
+ }
+
+ /*
+ * Find the linkprop we want to change.
+ */
+ for (; lip != NULL; lip = lip->li_nextprop) {
+ if (strcmp(lip->li_name, lsp->ls_propname) == 0)
+ break;
+
+ lastp = lip;
+ }
+
+ if (lip == NULL) {
+ /*
+ * If the linkprop is not found, append it to the list.
+ */
+ if ((nlip = malloc(sizeof (linkprop_info_t))) == NULL) {
+ status = DLADM_STATUS_NOMEM;
+ goto fail;
+ }
+ /*
+ * nlip will need to be freed later if there is no list to
+ * append to.
+ */
+ if (lastp != NULL)
+ lastp->li_nextprop = nlip;
+ nlip->li_name = lsp->ls_propname;
+ nlip->li_nextprop = NULL;
+ nlip->li_val = NULL;
+ lvpp = &nlip->li_val;
+ } else {
+ linkprop_val_t *lvp, *lvp_next;
+
+ /*
+ * If the linkprop is found, delete the existing values from it.
+ */
+ for (lvp = lip->li_val; lvp != NULL; lvp = lvp_next) {
+ lvp_next = lvp->lv_nextval;
+ free(lvp);
+ }
+ lip->li_val = NULL;
+ lvpp = &lip->li_val;
+ }
+
+ /*
+ * Fill our linkprop with the specified values.
+ */
+ for (i = 0; i < *lsp->ls_valcntp; i++) {
+ if ((*lvpp = malloc(sizeof (linkprop_val_t))) == NULL) {
+ status = DLADM_STATUS_NOMEM;
+ goto fail;
+ }
+ (*lvpp)->lv_name = lsp->ls_propval[i];
+ (*lvpp)->lv_nextval = NULL;
+ lvpp = &(*lvpp)->lv_nextval;
+ }
+
+ if (listp != NULL) {
+ generate_linkprop_line(lsp, buf, listp, statusp);
+ } else {
+ generate_linkprop_line(lsp, buf, nlip, statusp);
+ free_linkprops(nlip);
+ }
+ return (B_FALSE);
+
+fail:
+ *statusp = status;
+ if (listp == NULL)
+ free_linkprops(nlip);
+
+ return (B_FALSE);
+}
+
+/*
+ * This function is used for retrieving the values for a specific property.
+ * It gets called if an entry matching the specified link exists in the db.
+ * The entry is converted into a linked-list listp. This list is then scanned
+ * for the specified property name; if a matching property exists, its
+ * associated values are copied to the array lsp->ls_propval.
+ */
+/* ARGSUSED */
+static boolean_t
+process_linkprop_get(linkprop_db_state_t *lsp, char *buf,
+ linkprop_info_t *listp, dladm_status_t *statusp)
+{
+ linkprop_info_t *lip = listp;
+ linkprop_val_t *lvp;
+ uint_t valcnt = 0;
+
+ /*
+ * Find the linkprop we want to get.
+ */
+ for (; lip != NULL; lip = lip->li_nextprop) {
+ if (strcmp(lip->li_name, lsp->ls_propname) == 0)
+ break;
+ }
+ if (lip == NULL) {
+ *statusp = DLADM_STATUS_NOTFOUND;
+ return (B_FALSE);
+ }
+
+ for (lvp = lip->li_val; lvp != NULL; lvp = lvp->lv_nextval) {
+ (void) strncpy(lsp->ls_propval[valcnt], lvp->lv_name,
+ DLADM_PROP_VAL_MAX);
+
+ if (++valcnt >= *lsp->ls_valcntp && lvp->lv_nextval != NULL) {
+ *statusp = DLADM_STATUS_TOOSMALL;
+ return (B_FALSE);
+ }
+ }
+ /*
+ * This function is meant to be called at most once for each call
+ * to process_linkprop_db(). For this reason, it's ok to overwrite
+ * the caller's valcnt array size with the actual number of values
+ * returned.
+ */
+ *lsp->ls_valcntp = valcnt;
+ return (B_FALSE);
+}
+
+/*
+ * This is used for initializing link properties.
+ * Unlike the other routines, this gets called for every entry in the
+ * database. lsp->ls_link is not user-specified but instead is set to
+ * the current link being processed.
+ */
+/* ARGSUSED */
+static boolean_t
+process_linkprop_init(linkprop_db_state_t *lsp, char *buf,
+ linkprop_info_t *listp, dladm_status_t *statusp)
+{
+ dladm_status_t status = DLADM_STATUS_OK;
+ linkprop_info_t *lip = listp;
+ linkprop_val_t *lvp;
+ uint_t valcnt, i;
+ char **propval;
+
+ for (; lip != NULL; lip = lip->li_nextprop) {
+ /*
+ * Construct the propval array and fill it with
+ * values from listp.
+ */
+ for (lvp = lip->li_val, valcnt = 0;
+ lvp != NULL; lvp = lvp->lv_nextval, valcnt++);
+
+ propval = malloc(sizeof (char *) * valcnt);
+ if (propval == NULL) {
+ *statusp = DLADM_STATUS_NOMEM;
+ break;
+ }
+ lvp = lip->li_val;
+ for (i = 0; i < valcnt; i++, lvp = lvp->lv_nextval)
+ propval[i] = (char *)lvp->lv_name;
+
+ status = dladm_set_prop(lsp->ls_link, lip->li_name,
+ propval, valcnt, DLADM_OPT_TEMP);
+
+ /*
+ * We continue with initializing other properties even
+ * after encountering an error. This error will be
+ * propagated to the caller via 'statusp'.
+ */
+ if (status != DLADM_STATUS_OK)
+ *statusp = status;
+
+ free(propval);
+ }
+ return (B_TRUE);
+}
+
+static int
+parse_linkprops(char *buf, linkprop_info_t **lipp)
+{
+ int i, len;
+ char *curr;
+ linkprop_info_t *lip = NULL;
+ linkprop_info_t **tailp = lipp;
+ linkprop_val_t *lvp = NULL;
+ linkprop_val_t **vtailp = NULL;
+
+ curr = buf;
+ len = strlen(buf);
+ for (i = 0; i < len; i++) {
+ char c = buf[i];
+ boolean_t match = (c == '=' || c == ',' || c == ';');
+
+ /*
+ * Move to the next character if there is no match and
+ * if we have not reached the last character.
+ */
+ if (!match && i != len - 1)
+ continue;
+
+ if (match) {
+ /*
+ * Nul-terminate the string pointed to by 'curr'.
+ */
+ buf[i] = '\0';
+ if (*curr == '\0')
+ goto fail;
+ }
+
+ if (lip != NULL) {
+ /*
+ * We get here after we have processed the "<prop>="
+ * pattern. The pattern we are now interested in is
+ * "<val0>,<val1>,...,<valn>;". For each value we
+ * find, a linkprop_val_t will be allocated and
+ * added to the current 'lip'.
+ */
+ if (c == '=')
+ goto fail;
+
+ lvp = malloc(sizeof (*lvp));
+ if (lvp == NULL)
+ goto fail;
+
+ lvp->lv_name = curr;
+ lvp->lv_nextval = NULL;
+ *vtailp = lvp;
+ vtailp = &lvp->lv_nextval;
+
+ if (c == ';') {
+ tailp = &lip->li_nextprop;
+ vtailp = NULL;
+ lip = NULL;
+ }
+ } else {
+ /*
+ * lip == NULL indicates that 'curr' must be refering
+ * to a property name. We allocate a new linkprop_info_t
+ * append it to the list given by the caller.
+ */
+ if (c != '=')
+ goto fail;
+
+ lip = malloc(sizeof (*lip));
+ if (lip == NULL)
+ goto fail;
+
+ lip->li_name = curr;
+ lip->li_val = NULL;
+ lip->li_nextprop = NULL;
+ *tailp = lip;
+ vtailp = &lip->li_val;
+ }
+ curr = buf + i + 1;
+ }
+ /*
+ * The list must be non-empty and the last character must be ';'.
+ */
+ if (*lipp == NULL || lip != NULL)
+ goto fail;
+
+ return (0);
+
+fail:
+ free_linkprops(*lipp);
+ *lipp = NULL;
+ return (-1);
+}
+
+static boolean_t
+process_linkprop_line(linkprop_db_state_t *lsp, char *buf,
+ dladm_status_t *statusp)
+{
+ linkprop_info_t *lip = NULL;
+ int i, len, llen;
+ char *str, *lasts;
+ boolean_t cont, nolink = B_FALSE;
+
+ /*
+ * Skip leading spaces, blank lines, and comments.
+ */
+ len = strlen(buf);
+ for (i = 0; i < len; i++) {
+ if (!isspace(buf[i]))
+ break;
+ }
+ if (i == len || buf[i] == '#')
+ return (B_TRUE);
+
+ str = buf + i;
+ if (lsp->ls_link != NULL) {
+ /*
+ * Skip links we're not interested in.
+ * Note that strncmp() and isspace() are used here
+ * instead of strtok() and strcmp() because we don't
+ * want to modify buf in case it does not contain the
+ * specified link.
+ */
+ llen = strlen(lsp->ls_link);
+ if (strncmp(str, lsp->ls_link, llen) != 0 ||
+ !isspace(str[llen]))
+ return (B_TRUE);
+ } else {
+ /*
+ * If a link is not specified, find the link name
+ * and assign it to lsp->ls_link.
+ */
+ if (strtok_r(str, " \n\t", &lasts) == NULL)
+ goto fail;
+
+ llen = strlen(str);
+ lsp->ls_link = str;
+ nolink = B_TRUE;
+ }
+ str += llen + 1;
+ if (str >= buf + len)
+ goto fail;
+
+ /*
+ * Now find the list of link properties.
+ */
+ if ((str = strtok_r(str, " \n\t", &lasts)) == NULL)
+ goto fail;
+
+ if (parse_linkprops(str, &lip) < 0)
+ goto fail;
+
+ cont = (*lsp->ls_op)(lsp, buf, lip, statusp);
+ free_linkprops(lip);
+ if (nolink)
+ lsp->ls_link = NULL;
+ return (cont);
+
+fail:
+ free_linkprops(lip);
+ if (nolink)
+ lsp->ls_link = NULL;
+
+ /*
+ * Delete corrupted line.
+ */
+ buf[0] = '\0';
+ return (B_TRUE);
+}
+
+static dladm_status_t
+process_linkprop_db(void *arg, FILE *fp, FILE *nfp)
+{
+ linkprop_db_state_t *lsp = arg;
+ dladm_status_t status = DLADM_STATUS_OK;
+ char buf[MAXLINELEN];
+ boolean_t cont = B_TRUE;
+
+ /*
+ * This loop processes each line of the configuration file.
+ * buf can potentially be modified by process_linkprop_line().
+ * If this is a write operation and buf is not truncated, buf will
+ * be written to disk. process_linkprop_line() will no longer be
+ * called after it returns B_FALSE; at which point the remainder
+ * of the file will continue to be read and, if necessary, written
+ * to disk as well.
+ */
+ while (fgets(buf, MAXLINELEN, fp) != NULL) {
+ if (cont)
+ cont = process_linkprop_line(lsp, buf, &status);
+
+ if (nfp != NULL && buf[0] != '\0' && fputs(buf, nfp) == EOF) {
+ status = dladm_errno2status(errno);
+ break;
+ }
+ }
+
+ if (status != DLADM_STATUS_OK || !cont)
+ return (status);
+
+ if (lsp->ls_op == process_linkprop_set) {
+ /*
+ * If the specified link is not found above, we add the
+ * link and its properties to the configuration file.
+ */
+ (void) (*lsp->ls_op)(lsp, buf, NULL, &status);
+ if (status == DLADM_STATUS_OK && fputs(buf, nfp) == EOF)
+ status = dladm_errno2status(errno);
+ }
+
+ if (lsp->ls_op == process_linkprop_get)
+ status = DLADM_STATUS_NOTFOUND;
+
+ return (status);
+}
+
+#define LINKPROP_RW_DB(statep, writeop) \
+ (i_dladm_rw_db("/etc/dladm/linkprop.conf", \
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, process_linkprop_db, \
+ (statep), (writeop)))
+
+static dladm_status_t
+i_dladm_set_prop_db(const char *link, const char *prop_name,
+ char **prop_val, uint_t val_cnt)
+{
+ linkprop_db_state_t state;
+
+ state.ls_op = process_linkprop_set;
+ state.ls_link = link;
+ state.ls_propname = prop_name;
+ state.ls_propval = prop_val;
+ state.ls_valcntp = &val_cnt;
+
+ return (LINKPROP_RW_DB(&state, B_TRUE));
+}
+
+static dladm_status_t
+i_dladm_get_prop_db(const char *link, const char *prop_name,
+ char **prop_val, uint_t *val_cntp)
+{
+ linkprop_db_state_t state;
+
+ state.ls_op = process_linkprop_get;
+ state.ls_link = link;
+ state.ls_propname = prop_name;
+ state.ls_propval = prop_val;
+ state.ls_valcntp = val_cntp;
+
+ return (LINKPROP_RW_DB(&state, B_FALSE));
+}
+
+dladm_status_t
+dladm_init_linkprop(void)
+{
+ linkprop_db_state_t state;
+
+ state.ls_op = process_linkprop_init;
+ state.ls_link = NULL;
+ state.ls_propname = NULL;
+ state.ls_propval = NULL;
+ state.ls_valcntp = NULL;
+
+ return (LINKPROP_RW_DB(&state, B_FALSE));
+}
diff --git a/usr/src/lib/libdladm/common/mapfile-vers b/usr/src/lib/libdladm/common/mapfile-vers
index 5e0f599741..2af8201536 100644
--- a/usr/src/lib/libdladm/common/mapfile-vers
+++ b/usr/src/lib/libdladm/common/mapfile-vers
@@ -30,6 +30,20 @@ SUNWprivate_1.1 {
dladm_info;
dladm_walk;
dladm_walk_vlan;
+ dladm_get_prop;
+ dladm_set_prop;
+ dladm_walk_prop;
+ dladm_get_secobj;
+ dladm_set_secobj;
+ dladm_unset_secobj;
+ dladm_walk_secobj;
+ dladm_status2str;
+ dladm_secobjclass2str;
+ dladm_str2secobjclass;
+ dladm_init_linkprop;
+ dladm_init_secobj;
+ dladm_set_rootdir;
+
local:
*;
};
diff --git a/usr/src/lib/libdladm/common/secobj.c b/usr/src/lib/libdladm/common/secobj.c
new file mode 100644
index 0000000000..3f122ca347
--- /dev/null
+++ b/usr/src/lib/libdladm/common/secobj.c
@@ -0,0 +1,634 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <errno.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/dld.h>
+#include <libinetutil.h>
+#include <libdladm_impl.h>
+
+static dladm_status_t i_dladm_set_secobj_db(const char *,
+ dladm_secobj_class_t, uint8_t *, uint_t);
+static dladm_status_t i_dladm_get_secobj_db(const char *,
+ dladm_secobj_class_t *, uint8_t *, uint_t *);
+static dladm_status_t i_dladm_unset_secobj_db(const char *);
+static dladm_status_t i_dladm_walk_secobj_db(void *,
+ boolean_t (*)(void *, const char *));
+
+typedef struct secobj_class_info {
+ const char *sc_name;
+ dld_secobj_class_t sc_dldclass;
+} secobj_class_info_t;
+
+static secobj_class_info_t secobj_class_table[] = {
+ {"wep", DLD_SECOBJ_CLASS_WEP}
+};
+
+#define NSECOBJCLASS \
+ (sizeof (secobj_class_table) / sizeof (secobj_class_info_t))
+
+static boolean_t
+dladm_check_secobjclass(dladm_secobj_class_t class)
+{
+ return (class >= 0 && class < NSECOBJCLASS);
+}
+
+dladm_status_t
+dladm_str2secobjclass(const char *str, dladm_secobj_class_t *class)
+{
+ int i;
+ secobj_class_info_t *sp;
+
+ for (i = 0; i < NSECOBJCLASS; i++) {
+ sp = &secobj_class_table[i];
+ if (strcasecmp(str, sp->sc_name) == 0) {
+ *class = i;
+ return (DLADM_STATUS_OK);
+ }
+ }
+ return (DLADM_STATUS_BADARG);
+}
+
+const char *
+dladm_secobjclass2str(dladm_secobj_class_t class, char *buf)
+{
+ const char *s;
+
+ if (!dladm_check_secobjclass(class))
+ s = "";
+ else
+ s = secobj_class_table[class].sc_name;
+
+ (void) snprintf(buf, DLADM_STRSIZE, "%s", s);
+ return (buf);
+}
+
+static boolean_t
+dladm_convert_secobjclass(dladm_secobj_class_t class,
+ dld_secobj_class_t *dldclass)
+{
+ if (!dladm_check_secobjclass(class))
+ return (B_FALSE);
+
+ *dldclass = secobj_class_table[class].sc_dldclass;
+ return (B_TRUE);
+}
+
+static boolean_t
+dladm_convert_dldsecobjclass(dld_secobj_class_t dldclass,
+ dladm_secobj_class_t *class)
+{
+ int i;
+ secobj_class_info_t *sp;
+
+ for (i = 0; i < NSECOBJCLASS; i++) {
+ sp = &secobj_class_table[i];
+ if (dldclass == sp->sc_dldclass) {
+ *class = i;
+ return (B_TRUE);
+ }
+ }
+ return (B_FALSE);
+}
+
+dladm_status_t
+dladm_set_secobj(const char *obj_name, dladm_secobj_class_t class,
+ uint8_t *obj_val, uint_t obj_len, uint_t flags)
+{
+ int fd;
+ dladm_status_t status = DLADM_STATUS_OK;
+ dld_ioc_secobj_set_t secobj_set;
+ dld_secobj_t *objp;
+
+ if (!dladm_check_secobjclass(class) || flags == 0 ||
+ obj_name == NULL || strlen(obj_name) > DLD_SECOBJ_NAME_MAX ||
+ obj_val == NULL || obj_len == 0 || obj_len > DLD_SECOBJ_VAL_MAX)
+ return (DLADM_STATUS_BADARG);
+
+ if ((flags & DLADM_OPT_TEMP) == 0)
+ goto persist;
+
+ bzero(&secobj_set, sizeof (secobj_set));
+ objp = &secobj_set.ss_obj;
+ if (!dladm_convert_secobjclass(class, &objp->so_class))
+ return (DLADM_STATUS_BADARG);
+
+ (void) strlcpy(objp->so_name, obj_name, DLD_SECOBJ_NAME_MAX);
+ bcopy(obj_val, objp->so_val, obj_len);
+ objp->so_len = obj_len;
+
+ if ((flags & DLADM_OPT_CREATE) != 0)
+ secobj_set.ss_flags = DLD_SECOBJ_OPT_CREATE;
+
+ if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
+ return (dladm_errno2status(errno));
+
+ if (i_dladm_ioctl(fd, DLDIOCSECOBJSET, &secobj_set,
+ sizeof (secobj_set)) < 0)
+ status = dladm_errno2status(errno);
+
+ (void) close(fd);
+ if (status != DLADM_STATUS_OK)
+ return (status);
+
+persist:
+ if ((flags & DLADM_OPT_PERSIST) != 0) {
+ status = i_dladm_set_secobj_db(obj_name, class,
+ obj_val, obj_len);
+ }
+ return (status);
+}
+
+dladm_status_t
+dladm_get_secobj(const char *obj_name, dladm_secobj_class_t *classp,
+ uint8_t *obj_val, uint_t *obj_lenp, uint_t flags)
+{
+ int fd;
+ dladm_status_t status = DLADM_STATUS_OK;
+ dld_ioc_secobj_get_t secobj_get;
+ dld_secobj_t *objp;
+
+ if (obj_name == NULL || strlen(obj_name) > DLD_SECOBJ_NAME_MAX ||
+ obj_val == NULL || obj_lenp == NULL || *obj_lenp == 0 ||
+ *obj_lenp > DLD_SECOBJ_VAL_MAX)
+ return (DLADM_STATUS_BADARG);
+
+ if ((flags & DLADM_OPT_PERSIST) != 0) {
+ return (i_dladm_get_secobj_db(obj_name, classp,
+ obj_val, obj_lenp));
+ }
+
+ bzero(&secobj_get, sizeof (secobj_get));
+ objp = &secobj_get.sg_obj;
+ (void) strlcpy(objp->so_name, obj_name, DLD_SECOBJ_NAME_MAX);
+
+ if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
+ return (dladm_errno2status(errno));
+
+ if (i_dladm_ioctl(fd, DLDIOCSECOBJGET, &secobj_get,
+ sizeof (secobj_get)) < 0)
+ status = dladm_errno2status(errno);
+
+ (void) close(fd);
+ if (objp->so_len > *obj_lenp)
+ return (DLADM_STATUS_TOOSMALL);
+
+ if (!dladm_convert_dldsecobjclass(objp->so_class, classp))
+ return (DLADM_STATUS_FAILED);
+
+ *obj_lenp = objp->so_len;
+ bcopy(objp->so_val, obj_val, *obj_lenp);
+ return (status);
+}
+
+dladm_status_t
+dladm_unset_secobj(const char *obj_name, uint_t flags)
+{
+ int fd;
+ dladm_status_t status = DLADM_STATUS_OK;
+ dld_ioc_secobj_unset_t secobj_unset;
+
+ if (obj_name == NULL || strlen(obj_name) > DLD_SECOBJ_NAME_MAX ||
+ flags == 0)
+ return (DLADM_STATUS_BADARG);
+
+ if ((flags & DLADM_OPT_TEMP) == 0)
+ goto persist;
+
+ bzero(&secobj_unset, sizeof (secobj_unset));
+ (void) strlcpy(secobj_unset.su_name, obj_name, DLD_SECOBJ_NAME_MAX);
+ if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
+ return (dladm_errno2status(errno));
+
+ if (i_dladm_ioctl(fd, DLDIOCSECOBJUNSET, &secobj_unset,
+ sizeof (secobj_unset)) < 0)
+ status = dladm_errno2status(errno);
+
+ (void) close(fd);
+ if (status != DLADM_STATUS_OK)
+ return (status);
+
+persist:
+ if ((flags & DLADM_OPT_PERSIST) != 0)
+ status = i_dladm_unset_secobj_db(obj_name);
+
+ return (status);
+}
+
+#define SECOBJ_BUFSZ 65536
+dladm_status_t
+dladm_walk_secobj(void *arg, boolean_t (*func)(void *, const char *),
+ uint_t flags)
+{
+ int fd = -1;
+ dladm_status_t status = DLADM_STATUS_OK;
+ dld_ioc_secobj_get_t *secobj_getp;
+ dld_secobj_t *objp;
+
+ if ((flags & DLADM_OPT_PERSIST) != 0)
+ return (i_dladm_walk_secobj_db(arg, func));
+
+ secobj_getp = calloc(1, SECOBJ_BUFSZ);
+ if (secobj_getp == NULL)
+ return (DLADM_STATUS_NOMEM);
+
+ if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0) {
+ status = dladm_errno2status(errno);
+ goto done;
+ }
+ if (i_dladm_ioctl(fd, DLDIOCSECOBJGET, secobj_getp,
+ SECOBJ_BUFSZ) < 0) {
+ status = dladm_errno2status(errno);
+ goto done;
+ }
+
+ objp = (dld_secobj_t *)(secobj_getp + 1);
+ while (secobj_getp->sg_count > 0) {
+ if (!func(arg, objp->so_name))
+ goto done;
+ secobj_getp->sg_count--;
+ objp++;
+ }
+done:
+ (void) close(fd);
+ free(secobj_getp);
+ return (status);
+}
+
+/*
+ * Data structures used for implementing persistent secure objects
+ */
+typedef struct secobj_info {
+ const char *si_name;
+ dladm_secobj_class_t *si_classp;
+ uint8_t *si_val;
+ uint_t *si_lenp;
+} secobj_info_t;
+
+typedef struct secobj_name {
+ char *sn_name;
+ struct secobj_name *sn_next;
+} secobj_name_t;
+
+typedef struct secobj_db_state secobj_db_state_t;
+
+typedef boolean_t (*secobj_db_op_t)(struct secobj_db_state *, char *,
+ secobj_info_t *, dladm_status_t *);
+
+struct secobj_db_state {
+ secobj_db_op_t ss_op;
+ secobj_info_t ss_info;
+ secobj_name_t **ss_namelist;
+};
+
+/*
+ * Update or generate a secobj entry using the info in ssp->ss_info.
+ */
+/* ARGSUSED */
+static boolean_t
+process_secobj_set(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
+ dladm_status_t *statusp)
+{
+ char tmpbuf[MAXLINELEN];
+ char classbuf[DLADM_STRSIZE];
+ char *ptr = tmpbuf, *lim = tmpbuf + MAXLINELEN;
+ int i;
+
+ sip = &ssp->ss_info;
+
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%s\t", sip->si_name);
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%s\t",
+ dladm_secobjclass2str(*sip->si_classp, classbuf));
+
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "0x");
+ for (i = 0; i < *sip->si_lenp; i++) {
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%02x",
+ sip->si_val[i] & 0xff);
+ }
+ if (ptr > lim) {
+ *statusp = DLADM_STATUS_TOOSMALL;
+ return (B_FALSE);
+ }
+ (void) snprintf(buf, MAXLINELEN, "%s\n", tmpbuf);
+ return (B_FALSE);
+}
+
+/* ARGSUSED */
+static boolean_t
+process_secobj_get(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
+ dladm_status_t *statusp)
+{
+ if (*sip->si_lenp > *ssp->ss_info.si_lenp) {
+ *statusp = DLADM_STATUS_TOOSMALL;
+ return (B_FALSE);
+ }
+ bcopy(sip->si_val, ssp->ss_info.si_val, *sip->si_lenp);
+ *ssp->ss_info.si_lenp = *sip->si_lenp;
+ *ssp->ss_info.si_classp = *sip->si_classp;
+ return (B_FALSE);
+}
+
+/* ARGSUSED */
+static boolean_t
+process_secobj_unset(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
+ dladm_status_t *statusp)
+{
+ /*
+ * Delete line.
+ */
+ buf[0] = '\0';
+ return (B_FALSE);
+}
+
+/* ARGSUSED */
+static boolean_t
+process_secobj_walk(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
+ dladm_status_t *statusp)
+{
+ secobj_name_t *snp;
+
+ if ((snp = malloc(sizeof (*snp))) == NULL)
+ return (B_TRUE);
+
+ if ((snp->sn_name = strdup(sip->si_name)) == NULL) {
+ free(snp);
+ return (B_TRUE);
+ }
+
+ snp->sn_next = NULL;
+ *ssp->ss_namelist = snp;
+ ssp->ss_namelist = &snp->sn_next;
+ return (B_TRUE);
+}
+
+/* ARGSUSED */
+static boolean_t
+process_secobj_init(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
+ dladm_status_t *statusp)
+{
+ *statusp = dladm_set_secobj(sip->si_name, *sip->si_classp, sip->si_val,
+ *sip->si_lenp, DLADM_OPT_TEMP | DLADM_OPT_CREATE);
+ return (B_TRUE);
+}
+
+static int
+parse_secobj_val(char *buf, secobj_info_t *sip)
+{
+ if (strncmp(buf, "0x", 2) != 0)
+ return (EINVAL);
+
+ return (hexascii_to_octet(buf + 2, strlen(buf) - 2,
+ sip->si_val, sip->si_lenp));
+}
+
+static boolean_t
+process_secobj_line(secobj_db_state_t *ssp, char *buf,
+ dladm_status_t *statusp)
+{
+ secobj_info_t sinfo;
+ dladm_secobj_class_t class;
+ uint8_t val[DLADM_SECOBJ_VAL_MAX];
+ uint_t vlen;
+ int i, len, nlen;
+ char *str, *lasts;
+
+ /*
+ * Skip leading spaces, blank lines, and comments.
+ */
+ len = strlen(buf);
+ for (i = 0; i < len; i++) {
+ if (!isspace(buf[i]))
+ break;
+ }
+ if (i == len || buf[i] == '#')
+ return (B_TRUE);
+
+ str = buf + i;
+ if (ssp->ss_info.si_name != NULL) {
+ /*
+ * Skip objects we're not interested in.
+ */
+ nlen = strlen(ssp->ss_info.si_name);
+ if (strncmp(str, ssp->ss_info.si_name, nlen) != 0 ||
+ !isspace(str[nlen]))
+ return (B_TRUE);
+
+ sinfo.si_name = ssp->ss_info.si_name;
+ } else {
+ /*
+ * If an object is not specified, find the object name
+ * and assign it to sinfo.si_name.
+ */
+ if (strtok_r(str, " \n\t", &lasts) == NULL)
+ goto fail;
+
+ nlen = strlen(str);
+ sinfo.si_name = str;
+ }
+ str += nlen + 1;
+ if (str >= buf + len)
+ goto fail;
+
+ /*
+ * Find the class name.
+ */
+ if ((str = strtok_r(str, " \n\t", &lasts)) == NULL)
+ goto fail;
+
+ *statusp = dladm_str2secobjclass(str, &class);
+ if (*statusp != DLADM_STATUS_OK)
+ goto fail;
+
+ /*
+ * Find the object value.
+ */
+ if ((str = strtok_r(NULL, " \n\t", &lasts)) == NULL)
+ goto fail;
+
+ vlen = DLADM_SECOBJ_VAL_MAX;
+ sinfo.si_classp = &class;
+ sinfo.si_val = val;
+ sinfo.si_lenp = &vlen;
+ if (parse_secobj_val(str, &sinfo) != 0)
+ goto fail;
+
+ return ((*ssp->ss_op)(ssp, buf, &sinfo, statusp));
+
+fail:
+ /*
+ * Delete corrupted line.
+ */
+ buf[0] = '\0';
+ return (B_TRUE);
+}
+
+static dladm_status_t
+process_secobj_db(void *arg, FILE *fp, FILE *nfp)
+{
+ secobj_db_state_t *ssp = arg;
+ dladm_status_t status = DLADM_STATUS_OK;
+ char buf[MAXLINELEN];
+ boolean_t cont = B_TRUE;
+
+ /*
+ * This loop processes each line of the configuration file.
+ * buf can potentially be modified by process_secobj_line().
+ * If this is a write operation and buf is not truncated, buf will
+ * be written to disk. process_secobj_line() will no longer be
+ * called after it returns B_FALSE; at which point the remainder
+ * of the file will continue to be read and, if necessary, written
+ * to disk as well.
+ */
+ while (fgets(buf, MAXLINELEN, fp) != NULL) {
+ if (cont)
+ cont = process_secobj_line(ssp, buf, &status);
+
+ if (nfp != NULL && buf[0] != '\0' && fputs(buf, nfp) == EOF) {
+ status = dladm_errno2status(errno);
+ break;
+ }
+ }
+ if (status != DLADM_STATUS_OK || !cont)
+ return (status);
+
+ if (ssp->ss_op == process_secobj_set) {
+ /*
+ * If the specified object is not found above, we add the
+ * object to the configuration file.
+ */
+ (void) (*ssp->ss_op)(ssp, buf, NULL, &status);
+ if (status == DLADM_STATUS_OK && fputs(buf, nfp) == EOF)
+ status = dladm_errno2status(errno);
+ }
+
+ if (ssp->ss_op == process_secobj_unset ||
+ ssp->ss_op == process_secobj_get)
+ status = DLADM_STATUS_NOTFOUND;
+
+ return (status);
+}
+
+#define SECOBJ_RW_DB(statep, writeop) \
+ (i_dladm_rw_db("/etc/dladm/secobj.conf", S_IRUSR | S_IWUSR, \
+ process_secobj_db, (statep), (writeop)))
+
+static dladm_status_t
+i_dladm_set_secobj_db(const char *obj_name, dladm_secobj_class_t class,
+ uint8_t *obj_val, uint_t obj_len)
+{
+ secobj_db_state_t state;
+
+ state.ss_op = process_secobj_set;
+ state.ss_info.si_name = obj_name;
+ state.ss_info.si_classp = &class;
+ state.ss_info.si_val = obj_val;
+ state.ss_info.si_lenp = &obj_len;
+ state.ss_namelist = NULL;
+
+ return (SECOBJ_RW_DB(&state, B_TRUE));
+}
+
+static dladm_status_t
+i_dladm_get_secobj_db(const char *obj_name, dladm_secobj_class_t *classp,
+ uint8_t *obj_val, uint_t *obj_lenp)
+{
+ secobj_db_state_t state;
+
+ state.ss_op = process_secobj_get;
+ state.ss_info.si_name = obj_name;
+ state.ss_info.si_classp = classp;
+ state.ss_info.si_val = obj_val;
+ state.ss_info.si_lenp = obj_lenp;
+ state.ss_namelist = NULL;
+
+ return (SECOBJ_RW_DB(&state, B_FALSE));
+}
+
+static dladm_status_t
+i_dladm_unset_secobj_db(const char *obj_name)
+{
+ secobj_db_state_t state;
+
+ state.ss_op = process_secobj_unset;
+ state.ss_info.si_name = obj_name;
+ state.ss_info.si_classp = NULL;
+ state.ss_info.si_val = NULL;
+ state.ss_info.si_lenp = NULL;
+ state.ss_namelist = NULL;
+
+ return (SECOBJ_RW_DB(&state, B_TRUE));
+}
+
+static dladm_status_t
+i_dladm_walk_secobj_db(void *arg, boolean_t (*func)(void *, const char *))
+{
+ secobj_db_state_t state;
+ secobj_name_t *snp = NULL, *fsnp;
+ dladm_status_t status;
+ boolean_t cont = B_TRUE;
+
+ state.ss_op = process_secobj_walk;
+ state.ss_info.si_name = NULL;
+ state.ss_info.si_classp = NULL;
+ state.ss_info.si_val = NULL;
+ state.ss_info.si_lenp = NULL;
+ state.ss_namelist = &snp;
+
+ status = SECOBJ_RW_DB(&state, B_FALSE);
+ if (status != DLADM_STATUS_OK)
+ return (status);
+
+ while (snp != NULL) {
+ fsnp = snp;
+ snp = snp->sn_next;
+ if (cont)
+ cont = func(arg, fsnp->sn_name);
+ free(fsnp->sn_name);
+ free(fsnp);
+ }
+ return (status);
+}
+
+dladm_status_t
+dladm_init_secobj(void)
+{
+ secobj_db_state_t state;
+
+ state.ss_op = process_secobj_init;
+ state.ss_info.si_name = NULL;
+ state.ss_info.si_classp = NULL;
+ state.ss_info.si_val = NULL;
+ state.ss_info.si_lenp = NULL;
+ state.ss_namelist = NULL;
+
+ return (SECOBJ_RW_DB(&state, B_FALSE));
+}
diff --git a/usr/src/lib/liblaadm/common/liblaadm.c b/usr/src/lib/liblaadm/common/liblaadm.c
index 0beeee27da..3b23a5999d 100644
--- a/usr/src/lib/liblaadm/common/liblaadm.c
+++ b/usr/src/lib/liblaadm/common/liblaadm.c
@@ -52,31 +52,31 @@
* <db-file> ::= <groups>*
* <group> ::= <key> <sep> <policy> <sep> <nports> <sep> <ports> <sep>
* <mac> <sep> <lacp-mode> <sep> <lacp-timer>
- * <sep> ::= ' ' | '\t'
- * <key> ::= <number>
+ * <sep> ::= ' ' | '\t'
+ * <key> ::= <number>
* <nports> ::= <number>
* <ports> ::= <port> <m-port>*
* <m-port> ::= ',' <port>
- * <port> ::= <devname>
+ * <port> ::= <devname>
* <devname> ::= <string>
* <port-num> ::= <number>
* <policy> ::= <pol-level> <m-pol>*
* <m-pol> ::= ',' <pol-level>
* <pol-level> ::= 'L2' | 'L3' | 'L4'
- * <mac> ::= 'auto' | <mac-addr>
+ * <mac> ::= 'auto' | <mac-addr>
* <mac-addr> ::= <hex> ':' <hex> ':' <hex> ':' <hex> ':' <hex> ':' <hex>
* <lacp-mode> ::= 'off' | 'active' | 'passive'
* <lacp-timer> ::= 'short' | 'long'
*/
#define LAADM_DEV "/devices/pseudo/aggr@0:" AGGR_DEVNAME_CTL
-#define LAADM_DB "/etc/aggregation.conf"
-#define LAADM_DB_TMP "/etc/aggregation.conf.new"
+#define LAADM_DB "/etc/dladm/aggregation.conf"
+#define LAADM_DB_TMP "/etc/dladm/aggregation.conf.new"
#define LAADM_DB_LOCK "/tmp/aggregation.conf.lock"
#define LAADM_DB_PERMS S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define LAADM_DB_OWNER 0
-#define LAADM_DB_GROUP 1
+#define LAADM_DB_OWNER 15 /* "dladm" UID */
+#define LAADM_DB_GROUP 3 /* "sys" GID */
/*
* The largest configurable aggregation key. Because by default the key is
@@ -866,11 +866,13 @@ i_laadm_walk_rw_db(int (*fn)(void *, laadm_grp_attr_db_t *),
attr.lt_ports = NULL;
}
- if (fchmod(nfd, LAADM_DB_PERMS) == -1)
- goto failed;
+ if (getuid() == 0 || geteuid() == 0) {
+ if (fchmod(nfd, LAADM_DB_PERMS) == -1)
+ goto failed;
- if (fchown(nfd, LAADM_DB_OWNER, LAADM_DB_GROUP) == -1)
- goto failed;
+ if (fchown(nfd, LAADM_DB_OWNER, LAADM_DB_GROUP) == -1)
+ goto failed;
+ }
if (fflush(nfp) == EOF)
goto failed;
diff --git a/usr/src/lib/libsecdb/auth_attr.txt b/usr/src/lib/libsecdb/auth_attr.txt
index 085d3eb463..fd6d0219ce 100644
--- a/usr/src/lib/libsecdb/auth_attr.txt
+++ b/usr/src/lib/libsecdb/auth_attr.txt
@@ -62,6 +62,7 @@ solaris.mail.:::Mail::help=MailHeader.html
solaris.mail.mailq:::Mail Queue::help=MailQueue.html
#
solaris.network.:::Network::help=NetworkHeader.html
+solaris.network.link.security:::Link Security::help=LinkSecurity.html
solaris.network.wifi.config:::Wifi Config::help=WifiConfig.html
solaris.network.wifi.wep:::Wifi Wep::help=WifiWep.html
#
diff --git a/usr/src/lib/libsecdb/exec_attr.txt b/usr/src/lib/libsecdb/exec_attr.txt
index a1165b85d9..8a037f4bd8 100644
--- a/usr/src/lib/libsecdb/exec_attr.txt
+++ b/usr/src/lib/libsecdb/exec_attr.txt
@@ -178,7 +178,8 @@ Network Management:solaris:cmd:::/sbin/ifconfig:uid=0
Network Management:solaris:cmd:::/sbin/route:privs=sys_net_config
Network Management:solaris:cmd:::/sbin/routeadm:euid=0;\
privs=proc_chroot,proc_owner,sys_net_config
-Network Management:solaris:cmd:::/sbin/dladm:privs=sys_net_config
+Network Management:solaris:cmd:::/sbin/dladm:euid=dladm;egid=sys;\
+ privs=sys_net_config,net_rawaccess
Network Management:suser:cmd:::/usr/bin/netstat:uid=0
Network Management:suser:cmd:::/usr/bin/rup:euid=0
Network Management:suser:cmd:::/usr/bin/ruptime:euid=0
@@ -191,6 +192,8 @@ Network Management:suser:cmd:::/usr/sbin/rndc:privs=file_dac_read
Network Management:suser:cmd:::/usr/sbin/route:uid=0
Network Management:suser:cmd:::/usr/sbin/snoop:uid=0
Network Management:suser:cmd:::/usr/sbin/spray:euid=0
+Network Link Security:solaris:cmd:::/sbin/dladm:euid=dladm;egid=sys;\
+ privs=sys_net_config,net_rawaccess
Network Security:solaris:cmd:::/usr/lib/inet/certdb:privs=sys_net_config
Network Security:solaris:cmd:::/usr/lib/inet/certlocal:privs=sys_net_config
Network Security:solaris:cmd:::/usr/lib/inet/certrldb:privs=sys_net_config
diff --git a/usr/src/lib/libsecdb/help/auths/LinkSecurity.html b/usr/src/lib/libsecdb/help/auths/LinkSecurity.html
new file mode 100644
index 0000000000..161a38d799
--- /dev/null
+++ b/usr/src/lib/libsecdb/help/auths/LinkSecurity.html
@@ -0,0 +1,45 @@
+<HTML>
+
+<!--
+ Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ Use is subject to license terms.
+
+ CDDL HEADER START
+
+ The contents of this file are subject to the terms of the
+ Common Development and Distribution License (the "License").
+ You may not use this file except in compliance with the License.
+
+ You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ or http://www.opensolaris.org/os/licensing.
+ See the License for the specific language governing permissions
+ and limitations under the License.
+
+ When distributing Covered Code, include this CDDL HEADER in each
+ file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ If applicable, add the following below this CDDL HEADER, with the
+ fields enclosed by brackets "[]" replaced with your own identifying
+ information: Portions Copyright [yyyy] [name of copyright owner]
+
+ CDDL HEADER END
+-->
+<!-- SCCS keyword
+#pragma ident "%Z%%M% %I% %E% SMI"
+-->
+
+<HEAD>
+<!--
+META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"
+-->
+<!--
+META NAME="GENERATOR" CONTENT="Mozilla/4.02 [en] (X11; U; SunOS 5.6 sun4u) [Netscape]"
+-->
+</HEAD>
+<BODY>
+When Link Security is in the Authorizations Included column, it grants the authorization
+to create or remove secure objects using dladm.
+<p>
+If Link Security is grayed, then you are not entitled to Add or Remove this authorization.
+<BR>&nbsp;
+</BODY>
+</HTML>
diff --git a/usr/src/lib/libsecdb/help/auths/Makefile b/usr/src/lib/libsecdb/help/auths/Makefile
index 70e85c8426..3f063bc0d3 100644
--- a/usr/src/lib/libsecdb/help/auths/Makefile
+++ b/usr/src/lib/libsecdb/help/auths/Makefile
@@ -84,7 +84,8 @@ HTMLENTS = \
SmfValueRouting.html \
NetworkHeader.html \
WifiConfig.html \
- WifiWep.html
+ WifiWep.html \
+ LinkSecurity.html
HELPDIR=$(ROOT)/usr/lib/help
AUTHDIR=$(HELPDIR)/auths
diff --git a/usr/src/lib/libsecdb/help/profiles/Makefile b/usr/src/lib/libsecdb/help/profiles/Makefile
index 2b1313a4af..fb9b645a7b 100644
--- a/usr/src/lib/libsecdb/help/profiles/Makefile
+++ b/usr/src/lib/libsecdb/help/profiles/Makefile
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -19,7 +18,7 @@
#
# CDDL HEADER END
#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -56,6 +55,7 @@ HTMLENTS = \
RtNetSecure.html \
RtNetWifiMngmnt.html \
RtNetWifiSecure.html \
+ RtNetLinkSecure.html \
RtObAccessMngmnt.html \
RtPrntAdmin.html \
RtProcManagement.html \
diff --git a/usr/src/lib/libsecdb/help/profiles/RtNetLinkSecure.html b/usr/src/lib/libsecdb/help/profiles/RtNetLinkSecure.html
new file mode 100644
index 0000000000..7fcad1df97
--- /dev/null
+++ b/usr/src/lib/libsecdb/help/profiles/RtNetLinkSecure.html
@@ -0,0 +1,39 @@
+<HTML>
+<!--
+ CDDL HEADER START
+
+ The contents of this file are subject to the terms of the
+ Common Development and Distribution License (the "License").
+ You may not use this file except in compliance with the License.
+
+ You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ or http://www.opensolaris.org/os/licensing.
+ See the License for the specific language governing permissions
+ and limitations under the License.
+
+ When distributing Covered Code, include this CDDL HEADER in each
+ file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ If applicable, add the following below this CDDL HEADER, with the
+ fields enclosed by brackets "[]" replaced with your own identifying
+ information: Portions Copyright [yyyy] [name of copyright owner]
+
+ CDDL HEADER END
+
+-- Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+-- Use is subject to license terms.
+-->
+<HEAD>
+ <TITLE> </TITLE>
+
+
+</HEAD>
+<BODY>
+<!-- ident "%Z%%M% %I% %E% SMI" -->
+
+When Network Link Security is in the Rights Included column, it grants the right to
+manage network link security.
+<p>
+If Network Link Security is grayed, then you are not entitled to Add or Remove this right.
+<p>
+</BODY>
+</HTML>
diff --git a/usr/src/lib/libsecdb/prof_attr.txt b/usr/src/lib/libsecdb/prof_attr.txt
index 70016e8cd2..6901a2b673 100644
--- a/usr/src/lib/libsecdb/prof_attr.txt
+++ b/usr/src/lib/libsecdb/prof_attr.txt
@@ -50,9 +50,10 @@ Maintenance and Repair:::Maintain and repair a system:auths=solaris.smf.manage.s
Media Backup:::Backup files and file systems:help=RtMediaBkup.html
Media Restore:::Restore files and file systems from backups:help=RtMediaRestore.html
Network Management:::Manage the host and network configuration:auths=solaris.smf.manage.name-service-cache,solaris.smf.manage.bind,solaris.smf.value.routing,solaris.smf.manage.routing;profiles=Network Wifi Management;help=RtNetMngmnt.html
-Network Security:::Manage network and host security:auths=solaris.smf.manage.ssh;profiles=Network Wifi Security;help=RtNetSecure.html
+Network Security:::Manage network and host security:auths=solaris.smf.manage.ssh;profiles=Network Wifi Security,Network Link Security;help=RtNetSecure.html
Network Wifi Management:::Manage wifi network configuration:auths=solaris.network.wifi.config;help=RtNetWifiMngmnt.html
Network Wifi Security:::Manage wifi network security:auths=solaris.network.wifi.wep;help=RtNetWifiSecure.html
+Network Link Security:::Manage network link security:auths=solaris.network.link.security;help=RtNetLinkSecure.html
Name Service Management:::Non-security name service scripts/commands:help=RtNameServiceAdmin.html
Name Service Security:::Security related name service scripts/commands:help=RtNameServiceSecure.html
Object Access Management:::Change ownership and permission on files:help=RtObAccessMngmnt.html
diff --git a/usr/src/lib/libwladm/Makefile b/usr/src/lib/libwladm/Makefile
new file mode 100644
index 0000000000..f537457d54
--- /dev/null
+++ b/usr/src/lib/libwladm/Makefile
@@ -0,0 +1,62 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+include $(SRC)/lib/Makefile.lib
+
+HDRS = libwladm.h libwladm_impl.h
+HDRDIR = common
+
+SUBDIRS = $(MACH)
+
+POFILE = libwladm.po
+MSGFILES = common/libwladm.c
+
+all := TARGET = all
+clean := TARGET = clean
+clobber := TARGET = clobber
+install := TARGET = install
+lint := TARGET = lint
+
+.KEEP_STATE:
+
+all clean clobber install lint: $(SUBDIRS)
+
+install_h: $(ROOTHDRS)
+
+check: $(CHECKHDRS)
+
+$(POFILE): pofile_MSGFILES
+
+_msg: $(MSGDOMAINPOFILE)
+
+$(SUBDIRS): FRC
+ @cd $@; pwd; $(MAKE) $(TARGET)
+
+FRC:
+
+include $(SRC)/Makefile.msg.targ
+include $(SRC)/lib/Makefile.targ
diff --git a/usr/src/lib/libwladm/Makefile.com b/usr/src/lib/libwladm/Makefile.com
new file mode 100644
index 0000000000..1f8c9760df
--- /dev/null
+++ b/usr/src/lib/libwladm/Makefile.com
@@ -0,0 +1,51 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+LIBRARY = libwladm.a
+VERS = .1
+OBJECTS = libwladm.o
+
+include ../../Makefile.lib
+# install this library in the root filesystem
+include ../../Makefile.rootfs
+
+LIBS = $(DYNLIB) $(LINTLIB)
+LDLIBS += -ldevinfo -lsocket -lc
+
+SRCDIR = ../common
+$(LINTLIB) := SRCS = $(SRCDIR)/$(LINTSRC)
+
+CFLAGS += $(CCVERBOSE)
+CPPFLAGS += -I$(SRCDIR) -D_REENTRANT
+
+.KEEP_STATE:
+
+all: $(LIBS)
+
+lint: lintcheck
+
+include $(SRC)/lib/Makefile.targ
diff --git a/usr/src/lib/libwladm/common/libwladm.c b/usr/src/lib/libwladm/common/libwladm.c
new file mode 100644
index 0000000000..4c3c8e918b
--- /dev/null
+++ b/usr/src/lib/libwladm/common/libwladm.c
@@ -0,0 +1,1957 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stropts.h>
+#include <libdevinfo.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_types.h>
+#include <libwladm.h>
+#include <libwladm_impl.h>
+#include <inet/wifi_ioctl.h>
+
+typedef struct val_desc {
+ char *vd_name;
+ uint_t vd_val;
+} val_desc_t;
+
+struct prop_desc;
+
+typedef wladm_status_t pd_getf_t(int, wldp_t *, char **, uint_t *);
+typedef wladm_status_t pd_setf_t(int, wldp_t *, val_desc_t *, uint_t);
+typedef wladm_status_t pd_checkf_t(int, wldp_t *, struct prop_desc *, char **,
+ uint_t, val_desc_t **);
+typedef struct prop_desc {
+ char *pd_name;
+ val_desc_t pd_defval;
+ val_desc_t *pd_modval;
+ uint_t pd_nmodval;
+ pd_setf_t *pd_set;
+ pd_getf_t *pd_getmod;
+ pd_getf_t *pd_get;
+ pd_checkf_t *pd_check;
+} prop_desc_t;
+
+static int do_get_bsstype(int, wldp_t *);
+static int do_get_essid(int, wldp_t *);
+static int do_get_bssid(int, wldp_t *);
+static int do_get_signal(int, wldp_t *);
+static int do_get_encryption(int, wldp_t *);
+static int do_get_authmode(int, wldp_t *);
+static int do_get_linkstatus(int, wldp_t *);
+static int do_get_esslist(int, wldp_t *);
+static int do_get_rate(int, wldp_t *);
+static int do_get_phyconf(int, wldp_t *);
+static int do_get_powermode(int, wldp_t *);
+static int do_get_radio(int, wldp_t *);
+static int do_get_mode(int, wldp_t *);
+
+static int do_set_bsstype(int, wldp_t *, wladm_bsstype_t *);
+static int do_set_authmode(int, wldp_t *, wladm_auth_t *);
+static int do_set_encryption(int, wldp_t *, wladm_secmode_t *);
+static int do_set_essid(int, wldp_t *, wladm_essid_t *);
+static int do_set_createibss(int, wldp_t *, boolean_t *);
+static int do_set_wepkey(int, wldp_t *, wladm_wep_key_t *, uint_t);
+static int do_set_rate(int, wldp_t *, wladm_rates_t *);
+static int do_set_powermode(int, wldp_t *, wladm_powermode_t *);
+static int do_set_radio(int, wldp_t *, wladm_radio_t *);
+static int do_set_channel(int, wldp_t *, wladm_channel_t *);
+
+static int open_link(const char *);
+static int do_scan(int, wldp_t *);
+static int do_disconnect(int, wldp_t *);
+static boolean_t find_val_by_name(const char *, val_desc_t *, uint_t, uint_t *);
+static boolean_t find_name_by_val(uint_t, val_desc_t *, uint_t, char **);
+static void generate_essid(wladm_essid_t *);
+
+static wladm_status_t wladm_wlresult2status(wldp_t *);
+
+static pd_getf_t do_get_rate_mod, do_get_rate_prop, do_get_channel_prop,
+ do_get_powermode_prop, do_get_radio_prop;
+static pd_setf_t do_set_rate_prop, do_set_powermode_prop,
+ do_set_radio_prop;
+static pd_checkf_t do_check_prop, do_check_rate;
+
+static val_desc_t status_vals[] = {
+ { "ok", WLADM_STATUS_OK },
+ { "invalid argument", WLADM_STATUS_BADARG },
+ { "operation failed", WLADM_STATUS_FAILED },
+ { "operation not supported", WLADM_STATUS_NOTSUP },
+ { "already connected", WLADM_STATUS_ISCONN },
+ { "not connected", WLADM_STATUS_NOTCONN },
+ { "not found", WLADM_STATUS_NOTFOUND },
+ { "value not found", WLADM_STATUS_BADVAL },
+ { "invalid link", WLADM_STATUS_LINKINVAL },
+ { "insufficient memory", WLADM_STATUS_NOMEM },
+ { "operation timed out", WLADM_STATUS_TIMEDOUT },
+ { "read-only property", WLADM_STATUS_PROPRDONLY },
+ { "not enough space", WLADM_STATUS_TOOSMALL },
+ { "invalid number of values", WLADM_STATUS_BADVALCNT }
+};
+
+static val_desc_t linkstatus_vals[] = {
+ { "disconnected", WLADM_LINK_STATUS_DISCONNECTED },
+ { "connected", WLADM_LINK_STATUS_CONNECTED }
+};
+
+static val_desc_t secmode_vals[] = {
+ { "none", WLADM_SECMODE_NONE },
+ { "wep", WLADM_SECMODE_WEP }
+};
+
+static val_desc_t strength_vals[] = {
+ { "very weak", WLADM_STRENGTH_VERY_WEAK },
+ { "weak", WLADM_STRENGTH_WEAK },
+ { "good", WLADM_STRENGTH_GOOD },
+ { "very good", WLADM_STRENGTH_VERY_GOOD },
+ { "excellent", WLADM_STRENGTH_EXCELLENT }
+};
+
+static val_desc_t mode_vals[] = {
+ { "a", WLADM_MODE_80211A },
+ { "b", WLADM_MODE_80211B },
+ { "g", WLADM_MODE_80211G },
+};
+
+static val_desc_t auth_vals[] = {
+ { "open", WLADM_AUTH_OPEN },
+ { "shared", WLADM_AUTH_SHARED }
+};
+
+static val_desc_t bsstype_vals[] = {
+ { "bss", WLADM_BSSTYPE_BSS },
+ { "ibss", WLADM_BSSTYPE_IBSS },
+ { "any", WLADM_BSSTYPE_ANY }
+};
+
+static val_desc_t radio_vals[] = {
+ { "on", WLADM_RADIO_ON },
+ { "off", WLADM_RADIO_OFF }
+};
+
+static val_desc_t powermode_vals[] = {
+ { "off", WLADM_PM_OFF },
+ { "fast", WLADM_PM_FAST },
+ { "max", WLADM_PM_MAX }
+};
+
+#define VALCNT(vals) (sizeof ((vals)) / sizeof (val_desc_t))
+static prop_desc_t prop_table[] = {
+
+ { "channel", { NULL, 0 }, NULL, 0,
+ NULL, NULL, do_get_channel_prop, do_check_prop},
+
+ { "powermode", { "off", WLADM_PM_OFF }, powermode_vals,
+ VALCNT(powermode_vals),
+ do_set_powermode_prop, NULL,
+ do_get_powermode_prop, do_check_prop},
+
+ { "radio", { "on", WLADM_RADIO_ON }, radio_vals,
+ VALCNT(radio_vals),
+ do_set_radio_prop, NULL,
+ do_get_radio_prop, do_check_prop},
+
+ { "speed", { "", 0 }, NULL, 0,
+ do_set_rate_prop, do_get_rate_mod,
+ do_get_rate_prop, do_check_rate}
+};
+/*
+ * Unfortunately, MAX_SCAN_SUPPORT_RATES is too small to allow all
+ * rates to be retrieved. However, we cannot increase it at this
+ * time because it will break binary comatibility with unbundled
+ * WiFi drivers and utilities. So for now we define an additional
+ * constant, MAX_SUPPORT_RATES, to allow all rates to be retrieved.
+ */
+#define MAX_SUPPORT_RATES 64
+#define WLADM_MAX_PROPS (sizeof (prop_table) / sizeof (prop_desc_t))
+#define IS_CONNECTED(gbuf) \
+ ((*(wl_linkstatus_t *)((gbuf)->wldp_buf) == WL_CONNECTED))
+
+static wladm_status_t
+wladm_wlresult2status(wldp_t *gbuf)
+{
+ switch (gbuf->wldp_result) {
+ case WL_SUCCESS:
+ return (WLADM_STATUS_OK);
+
+ case WL_NOTSUPPORTED:
+ case WL_LACK_FEATURE:
+ return (WLADM_STATUS_NOTSUP);
+
+ case WL_READONLY:
+ return (WLADM_STATUS_PROPRDONLY);
+
+ default:
+ break;
+ }
+
+ return (WLADM_STATUS_FAILED);
+}
+
+static int
+open_link(const char *link)
+{
+ char linkname[MAXPATHLEN];
+ wldp_t *gbuf;
+ int fd;
+
+ if (link == NULL)
+ return (-1);
+
+ (void) snprintf(linkname, MAXPATHLEN, "/dev/%s", link);
+ if ((fd = open(linkname, O_RDWR)) < 0)
+ return (-1);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ (void) close(fd);
+ return (-1);
+ }
+
+ /*
+ * Check to see if the link is wireless.
+ */
+ if (do_get_bsstype(fd, gbuf) < 0) {
+ free(gbuf);
+ (void) close(fd);
+ return (-1);
+ }
+
+ free(gbuf);
+ return (fd);
+}
+
+static wladm_mode_t
+do_convert_mode(wl_phy_conf_t *phyp)
+{
+ switch (phyp->wl_phy_fhss_conf.wl_fhss_subtype) {
+ case WL_ERP:
+ return (WLADM_MODE_80211G);
+ case WL_OFDM:
+ return (WLADM_MODE_80211A);
+ case WL_DSSS:
+ case WL_FHSS:
+ return (WLADM_MODE_80211B);
+ default:
+ break;
+ }
+
+ return (WLADM_MODE_NONE);
+}
+
+static boolean_t
+do_convert_chan(wl_phy_conf_t *phyp, uint32_t *channelp)
+{
+ wl_fhss_t *wlfp = &phyp->wl_phy_fhss_conf;
+ wl_ofdm_t *wlop = &phyp->wl_phy_ofdm_conf;
+
+ switch (wlfp->wl_fhss_subtype) {
+ case WL_FHSS:
+ case WL_DSSS:
+ case WL_IRBASE:
+ case WL_HRDS:
+ case WL_ERP:
+ *channelp = wlfp->wl_fhss_channel;
+ break;
+ case WL_OFDM:
+ *channelp = WLADM_OFDM2CHAN(wlop->wl_ofdm_frequency);
+ break;
+ default:
+ return (B_FALSE);
+ }
+ return (B_TRUE);
+}
+
+#define IEEE80211_RATE 0x7f
+static void
+fill_wlan_attr(wl_ess_conf_t *wlp, wladm_wlan_attr_t *attrp)
+{
+ int i;
+
+ (void) memset(attrp, 0, sizeof (*attrp));
+
+ (void) snprintf(attrp->wa_essid.we_bytes, WLADM_MAX_ESSID_LEN, "%s",
+ wlp->wl_ess_conf_essid.wl_essid_essid);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_ESSID;
+
+ (void) memcpy(attrp->wa_bssid.wb_bytes, wlp->wl_ess_conf_bssid,
+ WLADM_BSSID_LEN);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_BSSID;
+
+ attrp->wa_secmode = (wlp->wl_ess_conf_wepenabled ==
+ WL_ENC_WEP ? WLADM_SECMODE_WEP : WLADM_SECMODE_NONE);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_SECMODE;
+
+ attrp->wa_bsstype = (wlp->wl_ess_conf_bsstype == WL_BSS_BSS ?
+ WLADM_BSSTYPE_BSS : WLADM_BSSTYPE_IBSS);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_BSSTYPE;
+
+ attrp->wa_auth = (wlp->wl_ess_conf_authmode == 0 ?
+ WLADM_AUTH_OPEN : WLADM_AUTH_SHARED);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_AUTH;
+
+ attrp->wa_strength = WLADM_SIGNAL2STRENGTH(wlp->wl_ess_conf_sl);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_STRENGTH;
+
+ attrp->wa_mode = do_convert_mode((wl_phy_conf_t *)&wlp->wl_phy_conf);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_MODE;
+
+ for (i = 0; i < MAX_SCAN_SUPPORT_RATES; i++) {
+ wlp->wl_supported_rates[i] &= IEEE80211_RATE;
+ if (wlp->wl_supported_rates[i] > attrp->wa_speed)
+ attrp->wa_speed = wlp->wl_supported_rates[i];
+ }
+ if (attrp->wa_speed > 0)
+ attrp->wa_valid |= WLADM_WLAN_ATTR_SPEED;
+
+ if (do_convert_chan((wl_phy_conf_t *)&wlp->wl_phy_conf,
+ &attrp->wa_channel))
+ attrp->wa_valid |= WLADM_WLAN_ATTR_CHANNEL;
+}
+
+wladm_status_t
+wladm_scan(const char *link, void *arg,
+ boolean_t (*func)(void *, wladm_wlan_attr_t *))
+{
+ int fd, i;
+ uint32_t count;
+ wl_ess_conf_t *wlp;
+ wldp_t *gbuf;
+ wladm_wlan_attr_t wlattr;
+ wladm_status_t status;
+ boolean_t connected;
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_LINKINVAL);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+ connected = IS_CONNECTED(gbuf);
+
+ if (do_scan(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (do_get_esslist(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ wlp = ((wl_ess_list_t *)gbuf->wldp_buf)->wl_ess_list_ess;
+ count = ((wl_ess_list_t *)(gbuf->wldp_buf))->wl_ess_list_num;
+
+ for (i = 0; i < count; i++, wlp++) {
+ fill_wlan_attr(wlp, &wlattr);
+ if (!func(arg, &wlattr))
+ break;
+ }
+
+ if (!connected) {
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+ if (IS_CONNECTED(gbuf))
+ (void) do_disconnect(fd, gbuf);
+ }
+
+ status = WLADM_STATUS_OK;
+done:
+ free(gbuf);
+ (void) close(fd);
+ return (status);
+}
+
+/*
+ * Structures used in building the list of eligible WLANs to connect to.
+ * Specifically, `connect_state' has the WLAN attributes that must be matched
+ * (in `cs_attr') and a growing list of WLANs that matched those attributes
+ * chained through `cs_list'. Each element in the list is of type `attr_node'
+ * and has the matching WLAN's attributes and a pointer to the next element.
+ * For convenience, `cs_count' tracks the number of elements in the list.
+ */
+typedef struct attr_node {
+ wladm_wlan_attr_t an_attr;
+ struct attr_node *an_next;
+} attr_node_t;
+
+typedef struct connect_state {
+ wladm_wlan_attr_t *cs_attr;
+ uint_t cs_count;
+ attr_node_t *cs_list;
+} connect_state_t;
+
+/*
+ * Compare two sets of WLAN attributes. For now, we only consider strength
+ * and speed (in that order), which matches the documented default policy for
+ * wladm_connect().
+ */
+static int
+attr_compare(const void *p1, const void *p2)
+{
+ wladm_wlan_attr_t *attrp1, *attrp2;
+
+ attrp1 = (*(wladm_wlan_attr_t **)p1);
+ attrp2 = (*(wladm_wlan_attr_t **)p2);
+
+ if (attrp1->wa_strength < attrp2->wa_strength)
+ return (1);
+
+ if (attrp1->wa_strength > attrp2->wa_strength)
+ return (-1);
+
+ return (attrp2->wa_speed - attrp1->wa_speed);
+}
+
+/*
+ * Callback function used by wladm_connect() to filter out unwanted WLANs when
+ * scanning for available WLANs. Always returns B_TRUE to continue the scan.
+ */
+static boolean_t
+connect_cb(void *arg, wladm_wlan_attr_t *attrp)
+{
+ attr_node_t *nodep;
+ wladm_wlan_attr_t *fattrp;
+ connect_state_t *statep = (connect_state_t *)arg;
+
+ fattrp = statep->cs_attr;
+ if (fattrp == NULL)
+ goto append;
+
+ if ((fattrp->wa_valid & attrp->wa_valid) != fattrp->wa_valid)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_ESSID) != 0 &&
+ strncmp(fattrp->wa_essid.we_bytes, attrp->wa_essid.we_bytes,
+ WLADM_MAX_ESSID_LEN) != 0)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_SECMODE) != 0 &&
+ fattrp->wa_secmode != attrp->wa_secmode)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_MODE) != 0 &&
+ fattrp->wa_mode != attrp->wa_mode)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_STRENGTH) != 0 &&
+ fattrp->wa_strength != attrp->wa_strength)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_SPEED) != 0 &&
+ fattrp->wa_speed != attrp->wa_speed)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_AUTH) != 0) {
+ attrp->wa_auth = fattrp->wa_auth;
+ attrp->wa_valid |= WLADM_WLAN_ATTR_AUTH;
+ }
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_BSSTYPE) != 0 &&
+ fattrp->wa_bsstype != attrp->wa_bsstype)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_BSSID) != 0 &&
+ memcmp(fattrp->wa_bssid.wb_bytes, attrp->wa_bssid.wb_bytes,
+ WLADM_BSSID_LEN) != 0)
+ return (B_TRUE);
+append:
+ nodep = malloc(sizeof (attr_node_t));
+ if (nodep == NULL)
+ return (B_TRUE);
+
+ (void) memcpy(&nodep->an_attr, attrp, sizeof (wladm_wlan_attr_t));
+ nodep->an_next = statep->cs_list;
+ statep->cs_list = nodep;
+ statep->cs_count++;
+
+ return (B_TRUE);
+}
+
+static wladm_status_t
+do_connect(int fd, wldp_t *gbuf, wladm_wlan_attr_t *attrp,
+ boolean_t create_ibss, void *keys, uint_t key_count, int timeout)
+{
+ wladm_secmode_t secmode;
+ wladm_auth_t authmode;
+ wladm_bsstype_t bsstype;
+ wladm_essid_t essid;
+ boolean_t essid_valid = B_FALSE;
+ wladm_status_t status = WLADM_STATUS_FAILED;
+ wladm_channel_t channel;
+ hrtime_t start;
+ struct timespec ts;
+
+ if ((attrp->wa_valid & WLADM_WLAN_ATTR_CHANNEL) != 0) {
+ channel = attrp->wa_channel;
+ if (do_set_channel(fd, gbuf, &channel) < 0)
+ goto done;
+ }
+
+ secmode = ((attrp->wa_valid & WLADM_WLAN_ATTR_SECMODE) != 0) ?
+ attrp->wa_secmode : WLADM_SECMODE_NONE;
+
+ if (do_set_encryption(fd, gbuf, &secmode) < 0)
+ goto done;
+
+ authmode = ((attrp->wa_valid & WLADM_WLAN_ATTR_AUTH) != 0) ?
+ attrp->wa_auth : WLADM_AUTH_OPEN;
+
+ if (do_set_authmode(fd, gbuf, &authmode) < 0)
+ goto done;
+
+ bsstype = ((attrp->wa_valid & WLADM_WLAN_ATTR_BSSTYPE) != 0) ?
+ attrp->wa_bsstype : WLADM_BSSTYPE_BSS;
+
+ if (do_set_bsstype(fd, gbuf, &bsstype) < 0)
+ goto done;
+
+ if (secmode == WLADM_SECMODE_WEP &&
+ (keys == NULL || key_count == 0 || key_count > MAX_NWEPKEYS ||
+ do_set_wepkey(fd, gbuf, keys, key_count) < 0))
+ goto done;
+
+ if (create_ibss) {
+ if (do_set_channel(fd, gbuf, &channel) < 0)
+ goto done;
+
+ if (do_set_createibss(fd, gbuf, &create_ibss) < 0)
+ goto done;
+
+ if ((attrp->wa_valid & WLADM_WLAN_ATTR_ESSID) == 0) {
+ generate_essid(&essid);
+ essid_valid = B_TRUE;
+ }
+ }
+
+ if ((attrp->wa_valid & WLADM_WLAN_ATTR_ESSID) != 0) {
+ essid = attrp->wa_essid;
+ essid_valid = B_TRUE;
+ }
+
+ if (!essid_valid || do_set_essid(fd, gbuf, &essid) < 0)
+ goto done;
+
+ ts.tv_sec = 0;
+ ts.tv_nsec = WLADM_CONNECT_POLLRATE;
+ start = gethrtime();
+ for (;;) {
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (IS_CONNECTED(gbuf))
+ break;
+
+ (void) nanosleep(&ts, NULL);
+ if ((timeout >= 0) && (gethrtime() - start) /
+ NANOSEC >= timeout) {
+ status = WLADM_STATUS_TIMEDOUT;
+ goto done;
+ }
+ }
+ status = WLADM_STATUS_OK;
+done:
+ return (status);
+}
+
+wladm_status_t
+wladm_connect(const char *link, wladm_wlan_attr_t *attrp,
+ int timeout, void *keys, uint_t key_count, uint_t flags)
+{
+ int fd, i;
+ wldp_t *gbuf = NULL;
+ connect_state_t state = {0, NULL, NULL};
+ attr_node_t *nodep = NULL;
+ boolean_t create_ibss, set_authmode;
+ wladm_wlan_attr_t **wl_list = NULL;
+ wladm_status_t status = WLADM_STATUS_FAILED;
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_LINKINVAL);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (IS_CONNECTED(gbuf)) {
+ status = WLADM_STATUS_ISCONN;
+ goto done;
+ }
+
+ set_authmode = ((attrp != NULL) &&
+ (attrp->wa_valid & WLADM_WLAN_ATTR_MODE) != 0);
+ create_ibss = ((flags & WLADM_OPT_CREATEIBSS) != 0 &&
+ attrp != NULL &&
+ (attrp->wa_valid & WLADM_WLAN_ATTR_BSSTYPE) != 0 &&
+ attrp->wa_bsstype == WLADM_BSSTYPE_IBSS);
+
+ if ((flags & WLADM_OPT_NOSCAN) != 0 ||
+ (create_ibss && attrp != NULL &&
+ (attrp->wa_valid & WLADM_WLAN_ATTR_ESSID) == 0)) {
+ status = do_connect(fd, gbuf, attrp,
+ create_ibss, keys, key_count, timeout);
+ goto done;
+ }
+
+ state.cs_attr = attrp;
+ state.cs_list = NULL;
+ state.cs_count = 0;
+
+ status = wladm_scan(link, &state, connect_cb);
+ if (status != WLADM_STATUS_OK)
+ goto done;
+
+ if (state.cs_count == 0) {
+ if (!create_ibss) {
+ status = WLADM_STATUS_NOTFOUND;
+ goto done;
+ }
+ status = do_connect(fd, gbuf, attrp, create_ibss,
+ keys, key_count, timeout);
+ goto done;
+ }
+
+ wl_list = malloc(state.cs_count * sizeof (wladm_wlan_attr_t *));
+ if (wl_list == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ nodep = state.cs_list;
+ for (i = 0; i < state.cs_count; i++) {
+ wl_list[i] = &nodep->an_attr;
+ nodep = nodep->an_next;
+ }
+ qsort(wl_list, state.cs_count, sizeof (wladm_wlan_attr_t *),
+ attr_compare);
+
+ for (i = 0; i < state.cs_count; i++) {
+ wladm_wlan_attr_t *ap = wl_list[i];
+
+ status = do_connect(fd, gbuf, ap, create_ibss, keys,
+ key_count, timeout);
+ if (status == WLADM_STATUS_OK)
+ break;
+
+ if (!set_authmode) {
+ ap->wa_auth = WLADM_AUTH_SHARED;
+ ap->wa_valid |= WLADM_WLAN_ATTR_AUTH;
+ status = do_connect(fd, gbuf, ap, create_ibss, keys,
+ key_count, timeout);
+ if (status == WLADM_STATUS_OK)
+ break;
+ }
+ }
+done:
+ if ((status != WLADM_STATUS_OK) && (status != WLADM_STATUS_ISCONN))
+ (void) do_disconnect(fd, gbuf);
+
+ while (state.cs_list != NULL) {
+ nodep = state.cs_list;
+ state.cs_list = nodep->an_next;
+ free(nodep);
+ }
+ free(gbuf);
+ free(wl_list);
+ (void) close(fd);
+ return (status);
+}
+
+wladm_status_t
+wladm_disconnect(const char *link)
+{
+ int fd;
+ wldp_t *gbuf;
+ wladm_status_t status;
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_BADARG);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (!IS_CONNECTED(gbuf)) {
+ status = WLADM_STATUS_NOTCONN;
+ goto done;
+ }
+
+ if (do_disconnect(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (IS_CONNECTED(gbuf)) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ status = WLADM_STATUS_OK;
+done:
+ free(gbuf);
+ (void) close(fd);
+ return (status);
+}
+
+typedef struct wladm_linkname {
+ char wl_name[MAXNAMELEN];
+ struct wladm_linkname *wl_next;
+} wladm_linkname_t;
+
+typedef struct wladm_walk {
+ wladm_linkname_t *ww_list;
+ wladm_status_t ww_status;
+} wladm_walk_t;
+
+/* ARGSUSED */
+static int
+append_linkname(di_node_t node, di_minor_t minor, void *arg)
+{
+ wladm_walk_t *statep = arg;
+ wladm_linkname_t **lastp = &statep->ww_list;
+ wladm_linkname_t *wlp = *lastp;
+ char name[MAXNAMELEN];
+
+ (void) snprintf(name, MAXNAMELEN, "%s%d",
+ di_driver_name(node), di_instance(node));
+
+ while (wlp != NULL) {
+ if (strcmp(wlp->wl_name, name) == 0)
+ return (DI_WALK_CONTINUE);
+
+ lastp = &wlp->wl_next;
+ wlp = wlp->wl_next;
+ }
+ if ((wlp = malloc(sizeof (*wlp))) == NULL) {
+ statep->ww_status = WLADM_STATUS_NOMEM;
+ return (DI_WALK_CONTINUE);
+ }
+
+ (void) strlcpy(wlp->wl_name, name, MAXNAMELEN);
+ wlp->wl_next = NULL;
+ *lastp = wlp;
+
+ return (DI_WALK_CONTINUE);
+}
+
+wladm_status_t
+wladm_walk(void *arg, boolean_t (*func)(void *, const char *))
+{
+ di_node_t root;
+ wladm_walk_t state;
+ wladm_linkname_t *wlp, *wlp_next;
+ boolean_t cont = B_TRUE;
+
+ if ((root = di_init("/", DINFOCACHE)) == DI_NODE_NIL)
+ return (WLADM_STATUS_FAILED);
+
+ state.ww_list = NULL;
+ state.ww_status = WLADM_STATUS_OK;
+ (void) di_walk_minor(root, DDI_NT_NET_WIFI, DI_CHECK_ALIAS,
+ &state, append_linkname);
+ di_fini(root);
+
+ for (wlp = state.ww_list; wlp != NULL; wlp = wlp_next) {
+ /*
+ * NOTE: even if (*func)() returns B_FALSE, the loop continues
+ * since all memory must be freed.
+ */
+ if (cont)
+ cont = (*func)(arg, wlp->wl_name);
+ wlp_next = wlp->wl_next;
+ free(wlp);
+ }
+ return (state.ww_status);
+}
+
+wladm_status_t
+wladm_get_link_attr(const char *link, wladm_link_attr_t *attrp)
+{
+ int fd;
+ wldp_t *gbuf;
+ wl_rssi_t signal;
+ wl_bss_type_t bsstype;
+ wl_authmode_t authmode;
+ wl_encryption_t encryption;
+ wl_rates_t *ratesp;
+ wladm_wlan_attr_t *wl_attrp;
+ wladm_status_t status = WLADM_STATUS_FAILED;
+
+ if (attrp == NULL)
+ return (WLADM_STATUS_BADARG);
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_LINKINVAL);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ (void) memset(attrp, 0, sizeof (*attrp));
+ wl_attrp = &attrp->la_wlan_attr;
+
+ if (do_get_linkstatus(fd, gbuf) < 0)
+ goto done;
+
+ attrp->la_valid |= WLADM_LINK_ATTR_STATUS;
+ if (!IS_CONNECTED(gbuf)) {
+ attrp->la_status = WLADM_LINK_STATUS_DISCONNECTED;
+ status = WLADM_STATUS_OK;
+ goto done;
+ }
+ attrp->la_status = WLADM_LINK_STATUS_CONNECTED;
+
+ if (do_get_essid(fd, gbuf) < 0)
+ goto done;
+
+ (void) strlcpy(wl_attrp->wa_essid.we_bytes,
+ ((wl_essid_t *)(gbuf->wldp_buf))->wl_essid_essid,
+ WLADM_MAX_ESSID_LEN);
+
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_ESSID;
+
+ if (do_get_bssid(fd, gbuf) < 0)
+ goto done;
+
+ (void) memcpy(wl_attrp->wa_bssid.wb_bytes, gbuf->wldp_buf,
+ WLADM_BSSID_LEN);
+
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_BSSID;
+
+ if (do_get_encryption(fd, gbuf) < 0)
+ goto done;
+
+ encryption = *(wl_encryption_t *)(gbuf->wldp_buf);
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_SECMODE;
+
+ switch (encryption) {
+ case WL_NOENCRYPTION:
+ wl_attrp->wa_secmode = WLADM_SECMODE_NONE;
+ break;
+ case WL_ENC_WEP:
+ wl_attrp->wa_secmode = WLADM_SECMODE_WEP;
+ break;
+ default:
+ wl_attrp->wa_valid &= ~WLADM_WLAN_ATTR_SECMODE;
+ break;
+ }
+
+ if (do_get_signal(fd, gbuf) < 0)
+ goto done;
+
+ signal = *(wl_rssi_t *)(gbuf->wldp_buf);
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_STRENGTH;
+ wl_attrp->wa_strength = WLADM_SIGNAL2STRENGTH(signal);
+
+ if (do_get_rate(fd, gbuf) < 0)
+ goto done;
+
+ ratesp = (wl_rates_t *)(gbuf->wldp_buf);
+ if (ratesp->wl_rates_num > 0) {
+ uint_t i, r = 0;
+
+ for (i = 0; i < ratesp->wl_rates_num; i++) {
+ if (ratesp->wl_rates_rates[i] > r)
+ r = ratesp->wl_rates_rates[i];
+ }
+ wl_attrp->wa_speed = r;
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_SPEED;
+ }
+
+ if (do_get_authmode(fd, gbuf) < 0)
+ goto done;
+
+ authmode = *(wl_authmode_t *)(gbuf->wldp_buf);
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_AUTH;
+
+ switch (authmode) {
+ case WL_OPENSYSTEM:
+ wl_attrp->wa_auth = WLADM_AUTH_OPEN;
+ break;
+ case WL_SHAREDKEY:
+ wl_attrp->wa_auth = WLADM_AUTH_SHARED;
+ break;
+ default:
+ wl_attrp->wa_valid &= ~WLADM_WLAN_ATTR_AUTH;
+ break;
+ }
+
+ if (do_get_bsstype(fd, gbuf) < 0)
+ goto done;
+
+ bsstype = *(wl_bss_type_t *)(gbuf->wldp_buf);
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_BSSTYPE;
+
+ switch (bsstype) {
+ case WL_BSS_BSS:
+ wl_attrp->wa_bsstype = WLADM_BSSTYPE_BSS;
+ break;
+ case WL_BSS_IBSS:
+ wl_attrp->wa_bsstype = WLADM_BSSTYPE_IBSS;
+ break;
+ case WL_BSS_ANY:
+ wl_attrp->wa_bsstype = WLADM_BSSTYPE_ANY;
+ break;
+ default:
+ wl_attrp->wa_valid &= ~WLADM_WLAN_ATTR_BSSTYPE;
+ break;
+ }
+
+ if (do_get_mode(fd, gbuf) < 0)
+ goto done;
+
+ wl_attrp->wa_mode = do_convert_mode((wl_phy_conf_t *)(gbuf->wldp_buf));
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_MODE;
+ if (wl_attrp->wa_mode != WLADM_MODE_NONE)
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_MODE;
+
+ attrp->la_valid |= WLADM_LINK_ATTR_WLAN;
+ status = WLADM_STATUS_OK;
+
+done:
+ free(gbuf);
+ (void) close(fd);
+ return (status);
+}
+
+boolean_t
+wladm_is_valid(const char *link)
+{
+ int fd = open_link(link);
+
+ if (fd < 0)
+ return (B_FALSE);
+
+ (void) close(fd);
+ return (B_TRUE);
+}
+
+/* ARGSUSED */
+static wladm_status_t
+do_check_prop(int fd, wldp_t *guf, prop_desc_t *pdp, char **prop_val,
+ uint_t val_cnt, val_desc_t **vdpp)
+{
+ int i;
+ val_desc_t *vdp;
+
+ if (pdp->pd_nmodval == 0)
+ return (WLADM_STATUS_PROPRDONLY);
+
+ if (val_cnt != 1)
+ return (WLADM_STATUS_BADVALCNT);
+
+ for (i = 0; i < pdp->pd_nmodval; i++)
+ if (strcasecmp(*prop_val, pdp->pd_modval[i].vd_name) == 0)
+ break;
+
+ if (i == pdp->pd_nmodval)
+ return (WLADM_STATUS_BADVAL);
+
+ vdp = malloc(sizeof (val_desc_t));
+ if (vdp == NULL)
+ return (WLADM_STATUS_NOMEM);
+
+ (void) memcpy(vdp, &pdp->pd_modval[i], sizeof (val_desc_t));
+ *vdpp = vdp;
+ return (WLADM_STATUS_OK);
+}
+
+static wladm_status_t
+do_set_prop(int fd, wldp_t *gbuf, prop_desc_t *pdp,
+ char **prop_val, uint_t val_cnt)
+{
+ wladm_status_t status;
+ val_desc_t *vdp = NULL;
+ uint_t cnt;
+
+ if (pdp->pd_set == NULL)
+ return (WLADM_STATUS_PROPRDONLY);
+
+ if (prop_val != NULL) {
+ status = pdp->pd_check(fd, gbuf, pdp, prop_val,
+ val_cnt, &vdp);
+
+ if (status != WLADM_STATUS_OK)
+ return (status);
+
+ cnt = val_cnt;
+ } else {
+ if (pdp->pd_defval.vd_name == NULL)
+ return (WLADM_STATUS_NOTSUP);
+
+ if ((vdp = malloc(sizeof (val_desc_t))) == NULL)
+ return (WLADM_STATUS_NOMEM);
+
+ *vdp = pdp->pd_defval;
+ cnt = 1;
+ }
+ status = pdp->pd_set(fd, gbuf, vdp, cnt);
+ if (status == WLADM_STATUS_OK) {
+ /*
+ * Some ioctls return 0 but store error code in
+ * wldp_result. Need to fix them.
+ */
+ if (gbuf->wldp_result != WL_SUCCESS)
+ status = wladm_wlresult2status(gbuf);
+ }
+ free(vdp);
+ return (status);
+}
+
+wladm_status_t
+wladm_set_prop(const char *link, const char *prop_name,
+ char **prop_val, uint_t val_cnt)
+{
+ int fd, i;
+ wldp_t *gbuf = NULL;
+ boolean_t found = B_FALSE;
+ wladm_status_t status = WLADM_STATUS_OK;
+
+ if ((prop_name == NULL && prop_val != NULL) ||
+ (prop_val != NULL && val_cnt == 0))
+ return (WLADM_STATUS_BADARG);
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_LINKINVAL);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ for (i = 0; i < WLADM_MAX_PROPS; i++) {
+ prop_desc_t *pdp = &prop_table[i];
+ wladm_status_t s;
+
+ if (prop_name != NULL &&
+ (strcasecmp(prop_name, pdp->pd_name) != 0))
+ continue;
+
+ found = B_TRUE;
+ s = do_set_prop(fd, gbuf, pdp, prop_val, val_cnt);
+
+ if (prop_name != NULL) {
+ status = s;
+ break;
+ } else {
+ if (s != WLADM_STATUS_OK &&
+ s != WLADM_STATUS_NOTSUP)
+ status = s;
+ }
+ }
+ if (!found)
+ status = WLADM_STATUS_NOTFOUND;
+done:
+ free(gbuf);
+ (void) close(fd);
+ return (status);
+}
+
+/* ARGSUSED */
+wladm_status_t
+wladm_walk_prop(const char *link, void *arg,
+ boolean_t (*func)(void *, const char *))
+{
+ int i;
+
+ for (i = 0; i < WLADM_MAX_PROPS; i++) {
+ if (!func(arg, prop_table[i].pd_name))
+ break;
+ }
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_get_prop(const char *link, wladm_prop_type_t type, const char *prop_name,
+ char **prop_val, uint_t *val_cnt)
+{
+ int fd;
+ int i;
+ wldp_t *gbuf;
+ wladm_status_t status;
+ uint_t cnt;
+ prop_desc_t *pdp;
+
+ if (prop_val == NULL || val_cnt == NULL || *val_cnt == 0)
+ return (WLADM_STATUS_BADARG);
+
+ for (i = 0; i < WLADM_MAX_PROPS; i++)
+ if (strcasecmp(prop_name, prop_table[i].pd_name) == 0)
+ break;
+
+ if (i == WLADM_MAX_PROPS)
+ return (WLADM_STATUS_NOTFOUND);
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_LINKINVAL);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+ pdp = &prop_table[i];
+ status = WLADM_STATUS_OK;
+
+ switch (type) {
+ case WLADM_PROP_VAL_CURRENT:
+ status = pdp->pd_get(fd, gbuf, prop_val, val_cnt);
+ break;
+
+ case WLADM_PROP_VAL_DEFAULT:
+ if (pdp->pd_defval.vd_name == NULL) {
+ status = WLADM_STATUS_NOTSUP;
+ break;
+ }
+ (void) strcpy(*prop_val, pdp->pd_defval.vd_name);
+ *val_cnt = 1;
+ break;
+
+ case WLADM_PROP_VAL_MODIFIABLE:
+ if (pdp->pd_getmod != NULL) {
+ status = pdp->pd_getmod(fd, gbuf, prop_val, val_cnt);
+ break;
+ }
+ cnt = pdp->pd_nmodval;
+ if (cnt == 0) {
+ status = WLADM_STATUS_NOTSUP;
+ } else if (cnt > *val_cnt) {
+ status = WLADM_STATUS_TOOSMALL;
+ } else {
+ for (i = 0; i < cnt; i++) {
+ (void) strcpy(prop_val[i],
+ pdp->pd_modval[i].vd_name);
+ }
+ *val_cnt = cnt;
+ }
+ break;
+ default:
+ status = WLADM_STATUS_BADARG;
+ break;
+ }
+done:
+ free(gbuf);
+ (void) close(fd);
+ return (status);
+}
+
+static boolean_t
+find_val_by_name(const char *str, val_desc_t *vdp, uint_t cnt, uint_t *valp)
+{
+ int i;
+
+ for (i = 0; i < cnt; i++) {
+ if (strcasecmp(str, vdp[i].vd_name) == 0) {
+ *valp = vdp[i].vd_val;
+ return (B_TRUE);
+ }
+ }
+ return (B_FALSE);
+}
+
+static boolean_t
+find_name_by_val(uint_t val, val_desc_t *vdp, uint_t cnt, char **strp)
+{
+ int i;
+
+ for (i = 0; i < cnt; i++) {
+ if (val == vdp[i].vd_val) {
+ *strp = vdp[i].vd_name;
+ return (B_TRUE);
+ }
+ }
+ return (B_FALSE);
+}
+
+const char *
+wladm_essid2str(wladm_essid_t *essid, char *buf)
+{
+ (void) snprintf(buf, WLADM_STRSIZE, "%s", essid->we_bytes);
+ return (buf);
+}
+
+const char *
+wladm_bssid2str(wladm_bssid_t *bssid, char *buf)
+{
+ return (_link_ntoa(bssid->wb_bytes, buf, WLADM_BSSID_LEN, IFT_OTHER));
+}
+
+static const char *
+wladm_val2str(uint_t val, val_desc_t *vdp, uint_t cnt, char *buf)
+{
+ char *s;
+
+ if (!find_name_by_val(val, vdp, cnt, &s))
+ s = "";
+
+ (void) snprintf(buf, WLADM_STRSIZE, "%s", s);
+ return (buf);
+}
+
+const char *
+wladm_secmode2str(wladm_secmode_t *secmode, char *buf)
+{
+ return (wladm_val2str((uint_t)*secmode, secmode_vals,
+ VALCNT(secmode_vals), buf));
+}
+
+const char *
+wladm_strength2str(wladm_strength_t *strength, char *buf)
+{
+ return (wladm_val2str((uint_t)*strength, strength_vals,
+ VALCNT(strength_vals), buf));
+}
+
+const char *
+wladm_mode2str(wladm_mode_t *mode, char *buf)
+{
+ return (wladm_val2str((uint_t)*mode, mode_vals,
+ VALCNT(mode_vals), buf));
+}
+
+const char *
+wladm_speed2str(wladm_speed_t *speed, char *buf)
+{
+ (void) snprintf(buf, WLADM_STRSIZE, "%.*f", *speed % 2,
+ (float)(*speed) / 2);
+ return (buf);
+}
+
+const char *
+wladm_auth2str(wladm_auth_t *auth, char *buf)
+{
+ return (wladm_val2str((uint_t)*auth, auth_vals,
+ VALCNT(auth_vals), buf));
+}
+
+const char *
+wladm_bsstype2str(wladm_bsstype_t *bsstype, char *buf)
+{
+ return (wladm_val2str((uint_t)*bsstype, bsstype_vals,
+ VALCNT(bsstype_vals), buf));
+}
+
+const char *
+wladm_linkstatus2str(wladm_linkstatus_t *linkstatus, char *buf)
+{
+ return (wladm_val2str((uint_t)*linkstatus, linkstatus_vals,
+ VALCNT(linkstatus_vals), buf));
+}
+
+const char *
+wladm_status2str(wladm_status_t status, char *buf)
+{
+ return (wladm_val2str((uint_t)status, status_vals,
+ VALCNT(status_vals), buf));
+}
+
+wladm_status_t
+wladm_str2essid(const char *str, wladm_essid_t *essid)
+{
+ if (str[0] == '\0')
+ return (WLADM_STATUS_BADARG);
+
+ (void) strlcpy(essid->we_bytes, str, WLADM_MAX_ESSID_LEN);
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2bssid(const char *str, wladm_bssid_t *bssid)
+{
+ int len;
+ uchar_t *buf;
+
+ buf = _link_aton(str, &len);
+ if (buf == NULL)
+ return (WLADM_STATUS_BADARG);
+
+ if (len != WLADM_BSSID_LEN) {
+ free(buf);
+ return (WLADM_STATUS_BADARG);
+ }
+
+ (void) memcpy(bssid->wb_bytes, buf, len);
+ free(buf);
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2secmode(const char *str, wladm_secmode_t *secmode)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, secmode_vals, VALCNT(secmode_vals), &val))
+ return (WLADM_STATUS_BADARG);
+
+ *secmode = (wladm_secmode_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2strength(const char *str, wladm_strength_t *strength)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, strength_vals, VALCNT(strength_vals), &val))
+ return (WLADM_STATUS_BADARG);
+
+ *strength = (wladm_strength_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2mode(const char *str, wladm_mode_t *mode)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, mode_vals, VALCNT(mode_vals), &val))
+ return (WLADM_STATUS_BADARG);
+
+ *mode = (wladm_mode_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2speed(const char *str, wladm_speed_t *speed)
+{
+ *speed = (wladm_speed_t)(atof(str) * 2);
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2auth(const char *str, wladm_auth_t *auth)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, auth_vals, VALCNT(auth_vals), &val))
+ return (WLADM_STATUS_BADARG);
+
+ *auth = (wladm_auth_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2bsstype(const char *str, wladm_bsstype_t *bsstype)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, bsstype_vals, VALCNT(bsstype_vals), &val))
+ return (WLADM_STATUS_BADARG);
+
+ *bsstype = (wladm_bsstype_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2linkstatus(const char *str, wladm_linkstatus_t *linkstatus)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, linkstatus_vals, VALCNT(linkstatus_vals),
+ &val))
+ return (WLADM_STATUS_BADARG);
+
+ *linkstatus = (wladm_linkstatus_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+static int
+do_ioctl(int fd, wldp_t *gbuf, uint_t id, size_t len, uint_t cmd, size_t cmdlen)
+{
+ int rc;
+ struct strioctl stri;
+
+ gbuf->wldp_type = NET_802_11;
+ gbuf->wldp_id = id;
+ gbuf->wldp_length = len;
+
+ stri.ic_timout = 0;
+ stri.ic_dp = (char *)gbuf;
+ stri.ic_cmd = cmd;
+ stri.ic_len = cmdlen;
+
+ if ((rc = ioctl(fd, I_STR, &stri)) != 0) {
+ if (rc > 0)
+ errno = rc;
+ return (-1);
+ }
+ return (0);
+}
+
+static int
+do_get_ioctl(int fd, wldp_t *gbuf, uint_t id)
+{
+ (void) memset(gbuf, 0, MAX_BUF_LEN);
+ return (do_ioctl(fd, gbuf, id, MAX_BUF_LEN, WLAN_GET_PARAM,
+ MAX_BUF_LEN));
+}
+
+static int
+do_set_ioctl(int fd, wldp_t *gbuf, uint_t id, void *buf, uint_t buflen)
+{
+ (void) memset(gbuf, 0, MAX_BUF_LEN);
+ (void) memcpy(gbuf->wldp_buf, buf, buflen);
+ buflen += WIFI_BUF_OFFSET;
+ return (do_ioctl(fd, gbuf, id, buflen, WLAN_SET_PARAM, buflen));
+}
+
+static int
+do_cmd_ioctl(int fd, wldp_t *gbuf, uint_t cmd)
+{
+ (void) memset(gbuf, 0, MAX_BUF_LEN);
+ return (do_ioctl(fd, gbuf, cmd, sizeof (wldp_t), WLAN_COMMAND,
+ sizeof (wldp_t)));
+}
+
+static int
+do_scan(int fd, wldp_t *gbuf)
+{
+ return (do_cmd_ioctl(fd, gbuf, WL_SCAN));
+}
+
+static int
+do_disconnect(int fd, wldp_t *gbuf)
+{
+ return (do_cmd_ioctl(fd, gbuf, WL_DISASSOCIATE));
+}
+
+static int
+do_get_esslist(int fd, wldp_t *gbuf)
+{
+ (void) memset(gbuf, 0, MAX_BUF_LEN);
+ return (do_ioctl(fd, gbuf, WL_ESS_LIST, MAX_BUF_LEN,
+ WLAN_GET_PARAM, sizeof (wldp_t)));
+}
+
+static int
+do_get_bssid(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_BSSID));
+}
+
+static int
+do_get_essid(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_ESSID));
+}
+
+static int
+do_get_bsstype(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_BSS_TYPE));
+}
+
+static int
+do_get_linkstatus(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_LINKSTATUS));
+}
+
+static int
+do_get_rate(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_DESIRED_RATES));
+}
+
+static int
+do_get_phyconf(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_PHY_CONFIG));
+}
+
+static int
+do_get_powermode(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_POWER_MODE));
+}
+
+static int
+do_get_radio(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_RADIO));
+}
+
+static int
+do_get_authmode(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_AUTH_MODE));
+}
+
+static int
+do_get_encryption(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_ENCRYPTION));
+}
+
+static int
+do_get_signal(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_RSSI));
+}
+
+static int
+do_get_mode(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_PHY_CONFIG));
+}
+
+static wladm_status_t
+do_get_rate_common(wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ wl_rates_t *wrp = (wl_rates_t *)gbuf->wldp_buf;
+ uint_t cnt = wrp->wl_rates_num;
+ uint_t i;
+
+ if (cnt > *val_cnt)
+ return (WLADM_STATUS_TOOSMALL);
+ if (wrp->wl_rates_rates[0] == 0) {
+ prop_val[0][0] = '\0';
+ *val_cnt = 1;
+ return (WLADM_STATUS_OK);
+ }
+
+ for (i = 0; i < cnt; i++) {
+ (void) snprintf(prop_val[i], WLADM_STRSIZE, "%.*f",
+ wrp->wl_rates_rates[i] % 2,
+ (float)wrp->wl_rates_rates[i] / 2);
+ }
+ *val_cnt = cnt;
+ return (WLADM_STATUS_OK);
+}
+
+static wladm_status_t
+do_get_rate_prop(int fd, wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ if (do_get_rate(fd, gbuf) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ return (do_get_rate_common(gbuf, prop_val, val_cnt));
+}
+
+static wladm_status_t
+do_get_rate_mod(int fd, wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ if (do_get_ioctl(fd, gbuf, WL_SUPPORTED_RATES) < 0)
+ return (WLADM_STATUS_FAILED);
+
+ return (do_get_rate_common(gbuf, prop_val, val_cnt));
+}
+
+static wladm_status_t
+do_get_channel_prop(int fd, wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ uint32_t channel;
+
+ if (do_get_phyconf(fd, gbuf) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ if (!do_convert_chan((wl_phy_conf_t *)gbuf->wldp_buf, &channel))
+ return (WLADM_STATUS_NOTFOUND);
+
+ (void) snprintf(*prop_val, WLADM_STRSIZE, "%u", channel);
+ *val_cnt = 1;
+
+ return (WLADM_STATUS_OK);
+}
+
+static wladm_status_t
+do_get_powermode_prop(int fd, wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ wl_ps_mode_t *mode;
+ const char *s;
+
+ if (do_get_powermode(fd, gbuf) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ mode = (wl_ps_mode_t *)(gbuf->wldp_buf);
+ switch (mode->wl_ps_mode) {
+ case WL_PM_AM:
+ s = "off";
+ break;
+ case WL_PM_MPS:
+ s = "max";
+ break;
+ case WL_PM_FAST:
+ s = "fast";
+ break;
+ default:
+ return (WLADM_STATUS_NOTFOUND);
+ }
+ (void) snprintf(*prop_val, WLADM_STRSIZE, "%s", s);
+ *val_cnt = 1;
+
+ return (WLADM_STATUS_OK);
+}
+
+static wladm_status_t
+do_get_radio_prop(int fd, wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ wl_radio_t radio;
+ const char *s;
+
+ if (do_get_radio(fd, gbuf) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ radio = *(wl_radio_t *)(gbuf->wldp_buf);
+ switch (radio) {
+ case B_TRUE:
+ s = "on";
+ break;
+ case B_FALSE:
+ s = "off";
+ break;
+ default:
+ return (WLADM_STATUS_NOTFOUND);
+ }
+ (void) snprintf(*prop_val, WLADM_STRSIZE, "%s", s);
+ *val_cnt = 1;
+
+ return (WLADM_STATUS_OK);
+}
+
+static int
+do_set_bsstype(int fd, wldp_t *gbuf, wladm_bsstype_t *bsstype)
+{
+ wl_bss_type_t ibsstype;
+
+ switch (*bsstype) {
+ case WLADM_BSSTYPE_BSS:
+ ibsstype = WL_BSS_BSS;
+ break;
+ case WLADM_BSSTYPE_IBSS:
+ ibsstype = WL_BSS_IBSS;
+ break;
+ default:
+ ibsstype = WL_BSS_ANY;
+ break;
+ }
+ return (do_set_ioctl(fd, gbuf, WL_BSS_TYPE, &ibsstype,
+ sizeof (ibsstype)));
+}
+
+static int
+do_set_authmode(int fd, wldp_t *gbuf, wladm_auth_t *auth)
+{
+ wl_authmode_t auth_mode;
+
+ switch (*auth) {
+ case WLADM_AUTH_OPEN:
+ auth_mode = WL_OPENSYSTEM;
+ break;
+ case WLADM_AUTH_SHARED:
+ auth_mode = WL_SHAREDKEY;
+ break;
+ default:
+ return (-1);
+ }
+ return (do_set_ioctl(fd, gbuf, WL_AUTH_MODE, &auth_mode,
+ sizeof (auth_mode)));
+}
+
+static int
+do_set_encryption(int fd, wldp_t *gbuf, wladm_secmode_t *secmode)
+{
+ wl_encryption_t encryption;
+
+ switch (*secmode) {
+ case WLADM_SECMODE_NONE:
+ encryption = WL_NOENCRYPTION;
+ break;
+ case WLADM_SECMODE_WEP:
+ encryption = WL_ENC_WEP;
+ break;
+ default:
+ return (-1);
+ }
+ return (do_set_ioctl(fd, gbuf, WL_ENCRYPTION, &encryption,
+ sizeof (encryption)));
+}
+
+static int
+do_set_wepkey(int fd, wldp_t *gbuf, wladm_wep_key_t *keys, uint_t key_count)
+{
+ int i;
+ wl_wep_key_t *wkp;
+ wl_wep_key_tab_t wepkey_tab;
+ wladm_wep_key_t *kp;
+
+ if (key_count == 0 || key_count > MAX_NWEPKEYS || keys == NULL)
+ return (-1);
+
+ (void) memset(wepkey_tab, 0, sizeof (wepkey_tab));
+ for (i = 0; i < MAX_NWEPKEYS; i++)
+ wepkey_tab[i].wl_wep_operation = WL_NUL;
+
+ for (i = 0; i < key_count; i++) {
+ kp = &keys[i];
+ if (kp->wk_idx == 0 || kp->wk_idx > MAX_NWEPKEYS)
+ return (-1);
+ if (kp->wk_len != WLADM_WEPKEY64_LEN &&
+ kp->wk_len != WLADM_WEPKEY128_LEN)
+ return (-1);
+
+ wkp = &wepkey_tab[kp->wk_idx - 1];
+ wkp->wl_wep_operation = WL_ADD;
+ wkp->wl_wep_length = kp->wk_len;
+ (void) memcpy(wkp->wl_wep_key, kp->wk_val, kp->wk_len);
+ }
+
+ return (do_set_ioctl(fd, gbuf, WL_WEP_KEY_TAB, &wepkey_tab,
+ sizeof (wepkey_tab)));
+}
+
+static int
+do_set_essid(int fd, wldp_t *gbuf, wladm_essid_t *essid)
+{
+ wl_essid_t iessid;
+
+ (void) memset(&iessid, 0, sizeof (essid));
+
+ if (essid != NULL && essid->we_bytes[0] != '\0') {
+ iessid.wl_essid_length = strlen(essid->we_bytes);
+ (void) strlcpy(iessid.wl_essid_essid, essid->we_bytes,
+ sizeof (iessid.wl_essid_essid));
+ } else {
+ return (-1);
+ }
+ return (do_set_ioctl(fd, gbuf, WL_ESSID, &iessid, sizeof (iessid)));
+}
+
+/* ARGSUSED */
+static wladm_status_t
+do_check_rate(int fd, wldp_t *gbuf, prop_desc_t *pdp, char **prop_val,
+ uint_t val_cnt, val_desc_t **vdpp)
+{
+ int i;
+ uint_t modval_cnt = MAX_SUPPORT_RATES;
+ char *buf, **modval;
+ wladm_status_t status;
+ val_desc_t *vdp = NULL;
+
+ if (val_cnt != 1)
+ return (WLADM_STATUS_BADVALCNT);
+
+ buf = malloc((sizeof (char *) + WLADM_STRSIZE) *
+ MAX_SUPPORT_RATES);
+ if (buf == NULL)
+ goto done;
+
+ modval = (char **)(void *)buf;
+ for (i = 0; i < MAX_SUPPORT_RATES; i++) {
+ modval[i] = buf + sizeof (char *) * MAX_SUPPORT_RATES +
+ i * WLADM_STRSIZE;
+ }
+
+ status = do_get_rate_mod(fd, gbuf, modval, &modval_cnt);
+ if (status != WLADM_STATUS_OK)
+ goto done;
+
+ vdp = malloc(sizeof (val_desc_t));
+ if (vdp == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ for (i = 0; i < modval_cnt; i++) {
+ if (strcasecmp(*prop_val, modval[i]) == 0) {
+ vdp->vd_val = (uint_t)(atof(*prop_val) * 2);
+ status = WLADM_STATUS_OK;
+ *vdpp = vdp;
+ vdp = NULL;
+ break;
+ }
+ }
+ if (i == modval_cnt)
+ status = WLADM_STATUS_BADVAL;
+done:
+ free(buf);
+ free(vdp);
+ return (status);
+}
+
+static wladm_status_t
+do_set_rate_prop(int fd, wldp_t *gbuf, val_desc_t *vdp, uint_t val_cnt)
+{
+ wladm_rates_t rates;
+
+ if (val_cnt != 1)
+ return (WLADM_STATUS_BADVALCNT);
+
+ rates.wr_cnt = 1;
+ rates.wr_rates[0] = vdp[0].vd_val;
+
+ if (do_set_rate(fd, gbuf, &rates) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ return (WLADM_STATUS_OK);
+}
+
+static int
+do_set_rate(int fd, wldp_t *gbuf, wladm_rates_t *rates)
+{
+ int i;
+ uint_t len;
+ wl_rates_t *wrp = (wl_rates_t *)gbuf->wldp_buf;
+
+ (void) memset(gbuf, 0, MAX_BUF_LEN);
+
+ for (i = 0; i < rates->wr_cnt; i++)
+ wrp->wl_rates_rates[i] = rates->wr_rates[i];
+ wrp->wl_rates_num = rates->wr_cnt;
+
+ len = offsetof(wl_rates_t, wl_rates_rates) +
+ (rates->wr_cnt * sizeof (char)) + WIFI_BUF_OFFSET;
+ return (do_ioctl(fd, gbuf, WL_DESIRED_RATES, len, WLAN_SET_PARAM, len));
+}
+
+/* ARGSUSED */
+static wladm_status_t
+do_set_powermode_prop(int fd, wldp_t *gbuf, val_desc_t *vdp, uint_t val_cnt)
+{
+ wladm_powermode_t powermode = (wladm_powermode_t)vdp->vd_val;
+
+ if (do_set_powermode(fd, gbuf, &powermode) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ return (WLADM_STATUS_OK);
+}
+
+static int
+do_set_powermode(int fd, wldp_t *gbuf, wladm_powermode_t *pm)
+{
+ wl_ps_mode_t ps_mode;
+
+ (void) memset(&ps_mode, 0xff, sizeof (ps_mode));
+
+ switch (*pm) {
+ case WLADM_PM_OFF:
+ ps_mode.wl_ps_mode = WL_PM_AM;
+ break;
+ case WLADM_PM_MAX:
+ ps_mode.wl_ps_mode = WL_PM_MPS;
+ break;
+ case WLADM_PM_FAST:
+ ps_mode.wl_ps_mode = WL_PM_FAST;
+ break;
+ default:
+ return (-1);
+ }
+ return (do_set_ioctl(fd, gbuf, WL_POWER_MODE, &ps_mode,
+ sizeof (ps_mode)));
+}
+
+/* ARGSUSED */
+static wladm_status_t
+do_set_radio_prop(int fd, wldp_t *gbuf, val_desc_t *vdp, uint_t val_cnt)
+{
+ wladm_radio_t radio = (wladm_radio_t)vdp->vd_val;
+
+ if (do_set_radio(fd, gbuf, &radio) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ return (WLADM_STATUS_OK);
+}
+
+static int
+do_set_radio(int fd, wldp_t *gbuf, wladm_radio_t *radio)
+{
+ wl_radio_t r;
+
+ switch (*radio) {
+ case WLADM_RADIO_ON:
+ r = B_TRUE;
+ break;
+ case WLADM_RADIO_OFF:
+ r = B_FALSE;
+ break;
+ default:
+ return (-1);
+ }
+ return (do_set_ioctl(fd, gbuf, WL_RADIO, &r, sizeof (r)));
+}
+
+static int
+do_set_channel(int fd, wldp_t *gbuf, wladm_channel_t *channel)
+{
+ wl_phy_conf_t phy_conf;
+
+ if (*channel > MAX_CHANNEL_NUM)
+ return (-1);
+
+ (void) memset(&phy_conf, 0xff, sizeof (phy_conf));
+ phy_conf.wl_phy_dsss_conf.wl_dsss_channel = *channel;
+
+ return (do_set_ioctl(fd, gbuf, WL_PHY_CONFIG, &phy_conf,
+ sizeof (phy_conf)));
+}
+
+static int
+do_set_createibss(int fd, wldp_t *gbuf, boolean_t *create_ibss)
+{
+ wl_create_ibss_t cr = (wl_create_ibss_t)(*create_ibss);
+
+ return (do_set_ioctl(fd, gbuf, WL_CREATE_IBSS, &cr, sizeof (cr)));
+}
+
+static void
+generate_essid(wladm_essid_t *essid)
+{
+ srandom(gethrtime());
+ (void) snprintf(essid->we_bytes, WLADM_MAX_ESSID_LEN, "%d", random());
+}
diff --git a/usr/src/lib/libwladm/common/libwladm.h b/usr/src/lib/libwladm/common/libwladm.h
new file mode 100644
index 0000000000..0a5d24df9e
--- /dev/null
+++ b/usr/src/lib/libwladm/common/libwladm.h
@@ -0,0 +1,209 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _LIBWLADM_H
+#define _LIBWLADM_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <sys/types.h>
+
+/*
+ * General libwladm definitions and functions.
+ *
+ * These interfaces are ON consolidation-private.
+ * For documentation, refer to PSARC/2006/623.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define WLADM_MAX_ESSID_LEN 32 /* per 802.11 spec */
+#define WLADM_BSSID_LEN 6 /* per 802.11 spec */
+#define WLADM_STRSIZE 256
+
+#define WLADM_CONNECT_TIMEOUT_DEFAULT 10
+#define WLADM_OPT_CREATEIBSS 0x00000001
+#define WLADM_OPT_NOSCAN 0x00000002
+
+typedef struct wladm_essid {
+ char we_bytes[WLADM_MAX_ESSID_LEN];
+} wladm_essid_t;
+
+typedef struct wladm_bssid {
+ uint8_t wb_bytes[WLADM_BSSID_LEN];
+} wladm_bssid_t;
+
+typedef enum {
+ WLADM_SECMODE_NONE = 1,
+ WLADM_SECMODE_WEP
+} wladm_secmode_t;
+
+typedef enum {
+ WLADM_STRENGTH_VERY_WEAK = 1,
+ WLADM_STRENGTH_WEAK,
+ WLADM_STRENGTH_GOOD,
+ WLADM_STRENGTH_VERY_GOOD,
+ WLADM_STRENGTH_EXCELLENT
+} wladm_strength_t;
+
+typedef enum {
+ WLADM_MODE_NONE = 0,
+ WLADM_MODE_80211A,
+ WLADM_MODE_80211B,
+ WLADM_MODE_80211G
+} wladm_mode_t;
+
+typedef enum {
+ WLADM_AUTH_OPEN = 1,
+ WLADM_AUTH_SHARED
+} wladm_auth_t;
+
+typedef enum {
+ WLADM_BSSTYPE_BSS = 1,
+ WLADM_BSSTYPE_IBSS,
+ WLADM_BSSTYPE_ANY
+} wladm_bsstype_t;
+
+typedef enum {
+ WLADM_LINK_STATUS_DISCONNECTED = 1,
+ WLADM_LINK_STATUS_CONNECTED
+} wladm_linkstatus_t;
+
+typedef enum {
+ WLADM_STATUS_OK = 0,
+ WLADM_STATUS_BADARG,
+ WLADM_STATUS_FAILED,
+ WLADM_STATUS_NOTSUP,
+ WLADM_STATUS_ISCONN,
+ WLADM_STATUS_NOTCONN,
+ WLADM_STATUS_NOTFOUND,
+ WLADM_STATUS_BADVAL,
+ WLADM_STATUS_LINKINVAL,
+ WLADM_STATUS_NOMEM,
+ WLADM_STATUS_TIMEDOUT,
+ WLADM_STATUS_PROPRDONLY,
+ WLADM_STATUS_TOOSMALL,
+ WLADM_STATUS_BADVALCNT
+} wladm_status_t;
+
+typedef uint32_t wladm_speed_t;
+typedef uint32_t wladm_channel_t;
+
+enum {
+ WLADM_WLAN_ATTR_ESSID = 0x00000001,
+ WLADM_WLAN_ATTR_BSSID = 0x00000002,
+ WLADM_WLAN_ATTR_SECMODE = 0x00000004,
+ WLADM_WLAN_ATTR_STRENGTH = 0x00000008,
+ WLADM_WLAN_ATTR_MODE = 0x00000010,
+ WLADM_WLAN_ATTR_SPEED = 0x00000020,
+ WLADM_WLAN_ATTR_AUTH = 0x00000040,
+ WLADM_WLAN_ATTR_BSSTYPE = 0x00000080,
+ WLADM_WLAN_ATTR_CHANNEL = 0x00000100
+};
+typedef struct wladm_wlan_attr {
+ uint_t wa_valid;
+ wladm_essid_t wa_essid;
+ wladm_bssid_t wa_bssid;
+ wladm_secmode_t wa_secmode;
+ wladm_strength_t wa_strength;
+ wladm_mode_t wa_mode;
+ wladm_speed_t wa_speed;
+ wladm_auth_t wa_auth;
+ wladm_bsstype_t wa_bsstype;
+ wladm_channel_t wa_channel;
+} wladm_wlan_attr_t;
+
+enum {
+ WLADM_LINK_ATTR_STATUS = 0x00000001,
+ WLADM_LINK_ATTR_WLAN = 0x00000002
+};
+typedef struct wladm_link_attr {
+ uint_t la_valid;
+ wladm_linkstatus_t la_status;
+ wladm_wlan_attr_t la_wlan_attr;
+} wladm_link_attr_t;
+
+#define WLADM_WEPKEY64_LEN 5 /* per WEP spec */
+#define WLADM_WEPKEY128_LEN 13 /* per WEP spec */
+#define WLADM_MAX_WEPKEY_LEN 13 /* per WEP spec */
+#define WLADM_MAX_WEPKEYS 4 /* MAX_NWEPKEYS */
+#define WLADM_MAX_WEPKEYNAME_LEN 64
+typedef struct wladm_wep_key {
+ uint_t wk_idx;
+ uint_t wk_len;
+ uint8_t wk_val[WLADM_MAX_WEPKEY_LEN];
+ char wk_name[WLADM_MAX_WEPKEYNAME_LEN];
+} wladm_wep_key_t;
+
+typedef enum {
+ WLADM_PROP_VAL_CURRENT = 1,
+ WLADM_PROP_VAL_DEFAULT,
+ WLADM_PROP_VAL_MODIFIABLE
+} wladm_prop_type_t;
+
+extern wladm_status_t wladm_scan(const char *, void *,
+ boolean_t (*)(void *, wladm_wlan_attr_t *));
+extern wladm_status_t wladm_connect(const char *, wladm_wlan_attr_t *,
+ int, void *, uint_t, uint_t);
+extern wladm_status_t wladm_disconnect(const char *);
+extern wladm_status_t wladm_get_link_attr(const char *, wladm_link_attr_t *);
+extern wladm_status_t wladm_walk(void *, boolean_t (*)(void *, const char *));
+extern boolean_t wladm_is_valid(const char *);
+extern wladm_status_t wladm_set_prop(const char *, const char *, char **,
+ uint_t);
+extern wladm_status_t wladm_walk_prop(const char *, void *,
+ boolean_t (*)(void *, const char *));
+extern wladm_status_t wladm_get_prop(const char *, wladm_prop_type_t,
+ const char *, char **, uint_t *);
+
+extern const char *wladm_essid2str(wladm_essid_t *, char *);
+extern const char *wladm_bssid2str(wladm_bssid_t *, char *);
+extern const char *wladm_secmode2str(wladm_secmode_t *, char *);
+extern const char *wladm_strength2str(wladm_strength_t *, char *);
+extern const char *wladm_mode2str(wladm_mode_t *, char *);
+extern const char *wladm_speed2str(wladm_speed_t *, char *);
+extern const char *wladm_auth2str(wladm_auth_t *, char *);
+extern const char *wladm_bsstype2str(wladm_bsstype_t *, char *);
+extern const char *wladm_linkstatus2str(wladm_linkstatus_t *, char *);
+extern const char *wladm_status2str(wladm_status_t, char *);
+
+extern wladm_status_t wladm_str2essid(const char *, wladm_essid_t *);
+extern wladm_status_t wladm_str2bssid(const char *, wladm_bssid_t *);
+extern wladm_status_t wladm_str2secmode(const char *, wladm_secmode_t *);
+extern wladm_status_t wladm_str2strength(const char *, wladm_strength_t *);
+extern wladm_status_t wladm_str2mode(const char *, wladm_mode_t *);
+extern wladm_status_t wladm_str2speed(const char *, wladm_speed_t *);
+extern wladm_status_t wladm_str2auth(const char *, wladm_auth_t *);
+extern wladm_status_t wladm_str2bsstype(const char *, wladm_bsstype_t *);
+extern wladm_status_t wladm_str2linkstatus(const char *,
+ wladm_linkstatus_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBWLADM_H */
diff --git a/usr/src/lib/libwladm/common/libwladm_impl.h b/usr/src/lib/libwladm/common/libwladm_impl.h
new file mode 100644
index 0000000000..e3dfbd7ea0
--- /dev/null
+++ b/usr/src/lib/libwladm/common/libwladm_impl.h
@@ -0,0 +1,82 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _LIBWLADM_IMPL_H
+#define _LIBWLADM_IMPL_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <sys/types.h>
+#include <inet/wifi_ioctl.h>
+
+/*
+ * Implementation-private data structures, macros, and constants.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Map a signal value from 0-15 into an enumerated strength. Since there are
+ * 5 strengths but 16 values, by convention the "middle" strength gets the
+ * extra value. Thus, the buckets are 0-2, 3-5, 6-9, 10-12, and 13-15.
+ */
+#define WLADM_SIGNAL2STRENGTH(signal) \
+ (((signal) > 12 ? WLADM_STRENGTH_EXCELLENT : \
+ ((signal) > 9 ? WLADM_STRENGTH_VERY_GOOD : \
+ ((signal) > 5 ? WLADM_STRENGTH_GOOD : \
+ ((signal) > 2 ? WLADM_STRENGTH_WEAK : WLADM_STRENGTH_VERY_WEAK)))))
+
+/*
+ * Convert between an OFDM MHz and a channel number.
+ */
+#define WLADM_OFDM2CHAN(mhz) (((mhz) - 5000) / 5)
+
+#define WLADM_CONNECT_POLLRATE 200000000 /* nanoseconds */
+#define WLADM_CONNECT_DEFAULT_CHANNEL 1
+
+#define WLADM_MAX_RATES 4
+typedef struct wladm_rates {
+ uint8_t wr_rates[WLADM_MAX_RATES];
+ int wr_cnt;
+} wladm_rates_t;
+
+typedef enum {
+ WLADM_RADIO_ON = 1,
+ WLADM_RADIO_OFF
+} wladm_radio_t;
+
+typedef enum {
+ WLADM_PM_OFF = 1,
+ WLADM_PM_MAX,
+ WLADM_PM_FAST
+} wladm_powermode_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBWLADM_IMPL_H */
diff --git a/usr/src/lib/libwladm/common/llib-lwladm b/usr/src/lib/libwladm/common/llib-lwladm
new file mode 100644
index 0000000000..1f233e14ec
--- /dev/null
+++ b/usr/src/lib/libwladm/common/llib-lwladm
@@ -0,0 +1,31 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*LINTLIBRARY*/
+/*PROTOLIB1*/
+
+#include <libwladm.h>
diff --git a/usr/src/lib/libwladm/common/mapfile-vers b/usr/src/lib/libwladm/common/mapfile-vers
new file mode 100644
index 0000000000..c5f00d22b4
--- /dev/null
+++ b/usr/src/lib/libwladm/common/mapfile-vers
@@ -0,0 +1,60 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+SUNWprivate_1.1 {
+ global:
+ wladm_scan;
+ wladm_connect;
+ wladm_disconnect;
+ wladm_get_link_attr;
+ wladm_walk;
+ wladm_is_valid;
+ wladm_set_prop;
+ wladm_walk_prop;
+ wladm_get_prop;
+ wladm_essid2str;
+ wladm_bssid2str;
+ wladm_secmode2str;
+ wladm_strength2str;
+ wladm_mode2str;
+ wladm_speed2str;
+ wladm_auth2str;
+ wladm_bsstype2str;
+ wladm_linkstatus2str;
+ wladm_status2str;
+ wladm_str2essid;
+ wladm_str2bssid;
+ wladm_str2secmode;
+ wladm_str2strength;
+ wladm_str2mode;
+ wladm_str2speed;
+ wladm_str2auth;
+ wladm_str2bsstype;
+ wladm_str2linkstatus;
+ local:
+ *;
+};
diff --git a/usr/src/lib/libwladm/i386/Makefile b/usr/src/lib/libwladm/i386/Makefile
new file mode 100644
index 0000000000..a333224278
--- /dev/null
+++ b/usr/src/lib/libwladm/i386/Makefile
@@ -0,0 +1,30 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+include ../Makefile.com
+
+install: all $(ROOTLIBS) $(ROOTLINKS) $(ROOTLINT)
diff --git a/usr/src/lib/libwladm/sparc/Makefile b/usr/src/lib/libwladm/sparc/Makefile
new file mode 100644
index 0000000000..a333224278
--- /dev/null
+++ b/usr/src/lib/libwladm/sparc/Makefile
@@ -0,0 +1,30 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+include ../Makefile.com
+
+install: all $(ROOTLIBS) $(ROOTLINKS) $(ROOTLINT)
diff --git a/usr/src/pkgdefs/SUNW0on/prototype_com b/usr/src/pkgdefs/SUNW0on/prototype_com
index f79a1039c7..de4f038c7a 100644
--- a/usr/src/pkgdefs/SUNW0on/prototype_com
+++ b/usr/src/pkgdefs/SUNW0on/prototype_com
@@ -245,6 +245,7 @@ f none usr/lib/help/auths/locale/SmfValueRouting.html 444 root bin
f none usr/lib/help/auths/locale/NetworkHeader.html 444 root bin
f none usr/lib/help/auths/locale/WifiConfig.html 444 root bin
f none usr/lib/help/auths/locale/WifiWep.html 444 root bin
+f none usr/lib/help/auths/locale/LinkSecurity.html 444 root bin
d none usr/lib/help/profiles 755 root bin
d none usr/lib/help/profiles/locale 755 root bin
f none usr/lib/help/profiles/locale/RtAll.html 444 root bin
@@ -271,6 +272,7 @@ f none usr/lib/help/profiles/locale/RtNetMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/RtNetSecure.html 444 root bin
f none usr/lib/help/profiles/locale/RtNetWifiMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/RtNetWifiSecure.html 444 root bin
+f none usr/lib/help/profiles/locale/RtNetLinkSecure.html 444 root bin
f none usr/lib/help/profiles/locale/RtObAccessMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/RtProcManagement.html 444 root bin
f none usr/lib/help/profiles/locale/RtRightsDelegate.html 444 root bin
diff --git a/usr/src/pkgdefs/SUNWatheros/postinstall b/usr/src/pkgdefs/SUNWatheros/postinstall
index 44926d9ffc..8b8085dead 100644
--- a/usr/src/pkgdefs/SUNWatheros/postinstall
+++ b/usr/src/pkgdefs/SUNWatheros/postinstall
@@ -29,7 +29,7 @@
# Driver info
DRV=ath
-DRVALIAS='"pci168c,13" "pci168c,1014"'
+DRVALIAS='"pci168c,13" "pci168c,1014" "pci168c,1a" "pci168c,1b"'
BASEDIR=${BASEDIR:-/}
diff --git a/usr/src/pkgdefs/SUNWckr/prototype_i386 b/usr/src/pkgdefs/SUNWckr/prototype_i386
index 839daf5e94..19af7c5500 100644
--- a/usr/src/pkgdefs/SUNWckr/prototype_i386
+++ b/usr/src/pkgdefs/SUNWckr/prototype_i386
@@ -149,6 +149,7 @@ f none kernel/ipp/ipgpc 755 root sys
d none boot/acpi 755 root sys
d none boot/acpi/tables 755 root sys
f none kernel/mac/mac_ether 755 root sys
+f none kernel/mac/mac_wifi 755 root sys
f none kernel/misc/acpica 755 root sys
f none kernel/misc/busra 755 root sys
f none kernel/misc/cardbus 755 root sys
@@ -169,6 +170,7 @@ f none kernel/misc/kmdbmod 755 root sys
f none kernel/misc/krtld 755 root sys
f none kernel/misc/mac 755 root sys
l none kernel/misc/md5=../../kernel/crypto/md5
+f none kernel/misc/net80211 755 root sys
f none kernel/misc/neti 755 root sys
f none kernel/misc/pcicfg 755 root sys
f none kernel/misc/pcihp 755 root sys
@@ -324,6 +326,7 @@ d none kernel/ipp/amd64 755 root sys
f none kernel/ipp/amd64/ipgpc 755 root sys
d none kernel/mac/amd64 755 root sys
f none kernel/mac/amd64/mac_ether 755 root sys
+f none kernel/mac/amd64/mac_wifi 755 root sys
d none kernel/misc/amd64 755 root sys
f none kernel/misc/amd64/acpica 755 root sys
f none kernel/misc/amd64/busra 755 root sys
@@ -344,6 +347,7 @@ f none kernel/misc/amd64/kmdbmod 755 root sys
f none kernel/misc/amd64/krtld 755 root sys
f none kernel/misc/amd64/mac 755 root sys
l none kernel/misc/amd64/md5=../../../kernel/crypto/amd64/md5
+f none kernel/misc/amd64/net80211 755 root sys
f none kernel/misc/amd64/neti 755 root sys
f none kernel/misc/amd64/pcicfg 755 root sys
f none kernel/misc/amd64/pcihp 755 root sys
diff --git a/usr/src/pkgdefs/SUNWcnetr/Makefile b/usr/src/pkgdefs/SUNWcnetr/Makefile
index 99b31cc824..baa2cd7e90 100644
--- a/usr/src/pkgdefs/SUNWcnetr/Makefile
+++ b/usr/src/pkgdefs/SUNWcnetr/Makefile
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -20,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -32,7 +31,7 @@ DATAFILES += i.ipsecalgsbase i.preserve i.sock2path
.KEEP_STATE:
-all: $(FILES)
+all: $(FILES) postinstall
install: all pkg
diff --git a/usr/src/pkgdefs/SUNWcnetr/postinstall b/usr/src/pkgdefs/SUNWcnetr/postinstall
new file mode 100644
index 0000000000..c3647480b5
--- /dev/null
+++ b/usr/src/pkgdefs/SUNWcnetr/postinstall
@@ -0,0 +1,32 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+# Move existing /etc/aggregation.conf entries to /etc/dladm/aggregation.conf
+ORIG=$BASEDIR/etc/aggregation.conf
+if [ -f $ORIG ]; then
+ # use cat instead of cp/mv to keep owner+group of dest
+ cat $ORIG > $BASEDIR/etc/dladm/aggregation.conf
+ rm -f $ORIG
+fi
diff --git a/usr/src/pkgdefs/SUNWcnetr/prototype_com b/usr/src/pkgdefs/SUNWcnetr/prototype_com
index 636fadd79e..dcaa5efc44 100644
--- a/usr/src/pkgdefs/SUNWcnetr/prototype_com
+++ b/usr/src/pkgdefs/SUNWcnetr/prototype_com
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -20,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -39,6 +38,7 @@
# packaging files
i pkginfo
i copyright
+i postinstall
i i.ipsecalgsbase
i i.preserve
i i.sock2path
@@ -48,7 +48,10 @@ i i.sock2path
# SUNWcnetr
#
d none etc 755 root sys
-e preserve etc/aggregation.conf 644 root sys
+d none etc/dladm 755 dladm sys
+e preserve etc/dladm/aggregation.conf 644 dladm sys
+e preserve etc/dladm/linkprop.conf 644 dladm sys
+e preserve etc/dladm/secobj.conf 600 dladm sys
d none etc/default 755 root sys
e preserve etc/default/dhcpagent 644 root sys
e preserve etc/default/inetinit 644 root sys
diff --git a/usr/src/pkgdefs/SUNWcslr/prototype_com b/usr/src/pkgdefs/SUNWcslr/prototype_com
index 3e17e0b961..45a9944bc7 100644
--- a/usr/src/pkgdefs/SUNWcslr/prototype_com
+++ b/usr/src/pkgdefs/SUNWcslr/prototype_com
@@ -151,6 +151,7 @@ f none lib/libtsol.so.2 755 root bin
s none lib/libtsol.so=libtsol.so.2
s none lib/libw.so=libw.so.1
f none lib/libw.so.1 755 root bin
+f none lib/libwladm.so.1 755 root bin
s none lib/libumem.so=libumem.so.1
f none lib/libumem.so.1 0755 root bin
s none lib/libuuid.so=libuuid.so.1
diff --git a/usr/src/pkgdefs/SUNWcsu/prototype_com b/usr/src/pkgdefs/SUNWcsu/prototype_com
index 00f5b80e1c..213e4c2e73 100644
--- a/usr/src/pkgdefs/SUNWcsu/prototype_com
+++ b/usr/src/pkgdefs/SUNWcsu/prototype_com
@@ -489,6 +489,7 @@ f none usr/lib/help/auths/locale/C/SysHeader.html 444 root bin
f none usr/lib/help/auths/locale/C/SysShutdown.html 444 root bin
f none usr/lib/help/auths/locale/C/WifiConfig.html 444 root bin
f none usr/lib/help/auths/locale/C/WifiWep.html 444 root bin
+f none usr/lib/help/auths/locale/C/LinkSecurity.html 444 root bin
d none usr/lib/help/profiles 755 root bin
d none usr/lib/help/profiles/locale 755 root bin
d none usr/lib/help/profiles/locale/C 755 root bin
@@ -520,6 +521,7 @@ f none usr/lib/help/profiles/locale/C/RtNetMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtNetSecure.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtNetWifiMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtNetWifiSecure.html 444 root bin
+f none usr/lib/help/profiles/locale/C/RtNetLinkSecure.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtObAccessMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtPrntAdmin.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtProcManagement.html 444 root bin
diff --git a/usr/src/pkgdefs/common_files/i.ftpusers b/usr/src/pkgdefs/common_files/i.ftpusers
index 2aa3428459..455ff9c3f1 100644
--- a/usr/src/pkgdefs/common_files/i.ftpusers
+++ b/usr/src/pkgdefs/common_files/i.ftpusers
@@ -3,9 +3,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -23,7 +22,7 @@
#
# ident "%Z%%M% %I% %E% SMI"
#
-# Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# This is similar to i.preserve, except we also check if there is a file with
@@ -63,7 +62,7 @@ while read src dest; do
fi
fi
fi
- for user in smmsp gdm webservd
+ for user in dladm smmsp gdm webservd
do
egrep "^$user$|^#[ ]*$user$" $dest >/dev/null 2>&1 || \
echo $user >> $dest
diff --git a/usr/src/pkgdefs/common_files/i.minorperm_i386 b/usr/src/pkgdefs/common_files/i.minorperm_i386
index 34df10b4ca..e155849d92 100644
--- a/usr/src/pkgdefs/common_files/i.minorperm_i386
+++ b/usr/src/pkgdefs/common_files/i.minorperm_i386
@@ -104,6 +104,23 @@ lockstat:* 0600 root sys 0644 root sys /dev/dtrace/provider/lockstat
profile:profile 0600 root sys 0644 root sys /dev/dtrace/provider/profile
sdt:sdt 0600 root sys 0644 root sys /dev/dtrace/provider/sdt
systrace:systrace 0600 root sys 0644 root sys /dev/dtrace/provider/systrace
+clone:bge 0600 root sys 0666 root sys /dev/bge
+clone:rge 0600 root sys 0666 root sys /dev/rge
+clone:xge 0600 root sys 0666 root sys /dev/xge
+clone:nge 0600 root sys 0666 root sys /dev/nge
+clone:chxge 0600 root sys 0666 root sys /dev/chxge
+clone:pcn 0600 root sys 0666 root sys /dev/pcn
+clone:rtls 0600 root sys 0666 root sys /dev/rtls
+clone:ath 0600 root sys 0666 root sys /dev/ath
+bge:* 0600 root sys 0666 root sys /dev/bge*
+rge:* 0600 root sys 0666 root sys /dev/rge*
+xge:* 0600 root sys 0666 root sys /dev/xge*
+nge:* 0600 root sys 0666 root sys /dev/nge*
+e1000g:* 0666 root root 0666 root sys /dev/e1000g*
+chxge:* 0600 root sys 0666 root sys /dev/chxge*
+pcn:* 0600 root sys 0666 root sys /dev/pcn*
+rtls:* 0600 root sys 0666 root sys /dev/rtls*
+ath:* 0600 root sys 0666 root sys /dev/ath*
EOF
}
@@ -220,7 +237,23 @@ sctp6:*
vni:*
cpuid:self
clone:bge
+clone:rge
+clone:xge
+clone:nge
+clone:e1000g
+clone:chxge
+clone:pcn
+clone:rtls
+clone:ath
bge:*
+rge:*
+xge:*
+nge:*
+e1000g:*
+chxge:*
+pcn:*
+rtls:*
+ath:*
bmc:bmc
dld:*
aggr:*
diff --git a/usr/src/pkgdefs/common_files/i.minorperm_sparc b/usr/src/pkgdefs/common_files/i.minorperm_sparc
index 345689d556..7acc7636aa 100644
--- a/usr/src/pkgdefs/common_files/i.minorperm_sparc
+++ b/usr/src/pkgdefs/common_files/i.minorperm_sparc
@@ -96,7 +96,21 @@ clone:hme 0600 root sys 0666 root sys /dev/hme
clone:le 0600 root sys 0666 root sys /dev/le
clone:qfe 0600 root sys 0666 root sys /dev/qfe
clone:bge 0600 root sys 0666 root sys /dev/bge
+clone:rge 0600 root sys 0666 root sys /dev/rge
+clone:xge 0600 root sys 0666 root sys /dev/xge
+clone:nge 0600 root sys 0666 root sys /dev/nge
+clone:e1000g 0666 root root 0666 root sys /dev/e1000g
+clone:chxge 0600 root sys 0666 root sys /dev/chxge
+clone:vsw 0600 root sys 0666 root sys /dev/vsw
+clone:vnet 0600 root sys 0666 root sys /dev/vnet
bge:* 0600 root sys 0666 root sys /dev/bge*
+rge:* 0600 root sys 0666 root sys /dev/rge*
+xge:* 0600 root sys 0666 root sys /dev/xge*
+nge:* 0600 root sys 0666 root sys /dev/nge*
+e1000g:* 0666 root root 0666 root sys /dev/e1000g*
+chxge:* 0600 root sys 0666 root sys /dev/chxge*
+vsw:* 0600 root sys 0666 root sys /dev/vsw*
+vnet:* 0600 root sys 0666 root sys /dev/vnet*
clone:dmfe 0600 root sys 0666 root sys /dev/dmfe
dmfe:* 0600 root sys 0666 root sys /dev/dmfe*
clone:pcelx 0600 root sys 0666 root sys /dev/pcelx
@@ -251,7 +265,21 @@ mm:allkmem
ssm:*
bscv:*
clone:bge
+clone:rge
+clone:xge
+clone:nge
+clone:e1000g
+clone:chxge
+clone:vsw
+clone:vnet
bge:*
+rge:*
+xge:*
+nge:*
+e1000g:*
+chxge:*
+vsw:*
+vnet:*
clone:dmfe
dmfe:*
clone:pcelx
diff --git a/usr/src/pkgdefs/common_files/i.passwd b/usr/src/pkgdefs/common_files/i.passwd
index 8262a94efe..5653e7bf60 100644
--- a/usr/src/pkgdefs/common_files/i.passwd
+++ b/usr/src/pkgdefs/common_files/i.passwd
@@ -3,9 +3,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -129,6 +128,21 @@ do
printf '/^webservd:x\na\n%s\n.\nw\nq\n' \
"$POSTGRES_LIN" | ed -s $dest > /dev/null
fi
+
+ #
+ # Add the 'dladm' user if it doesn't exist.
+ #
+ DLADM_LIN="dladm:x:15:3:Datalink Admin:/:"
+ cur_name=`awk -F: '$3 == 15 { print $1 }' $dest`
+ if [ ! -z "$cur_name" -a "$cur_name" != "dladm" ]; then
+ echo "ERROR: Reserved UID 15 already assigned" \
+ "to '$cur_name'" >> /tmp/CLEANUP
+ elif grep "$DLADM_LIN" $dest 2>&1 >/dev/null; then
+ :
+ else
+ printf '/^nuucp:x\na\n%s\n.\nw\nq\n' \
+ "$DLADM_LIN" | ed -s $dest > /dev/null
+ fi
fi
done
diff --git a/usr/src/pkgdefs/common_files/i.shadow b/usr/src/pkgdefs/common_files/i.shadow
index e135e9aa2f..966fe9901b 100644
--- a/usr/src/pkgdefs/common_files/i.shadow
+++ b/usr/src/pkgdefs/common_files/i.shadow
@@ -3,9 +3,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -103,6 +102,17 @@ do
printf '/^webservd:\*LK\*\na\n%s\n.\nw\nq\n' \
"$POSTGRES_LINE" | ed -s $dest > /dev/null
fi
+
+ #
+ # Add the 'dladm' reserved user if it doesn't exist.
+ #
+ DLADM_LINE="dladm:*LK*:::::::"
+ if grep "^dladm:" $dest 2>&1 >/dev/null; then
+ :
+ else
+ printf '/^nuucp:NP\na\n%s\n.\nw\nq\n' \
+ "$DLADM_LINE" | ed -s $dest > /dev/null
+ fi
fi
done
diff --git a/usr/src/pkgdefs/etc/exception_list_i386 b/usr/src/pkgdefs/etc/exception_list_i386
index 779dba9f21..6fab12f345 100644
--- a/usr/src/pkgdefs/etc/exception_list_i386
+++ b/usr/src/pkgdefs/etc/exception_list_i386
@@ -80,30 +80,35 @@ usr/lib/libdhcpsvc.so i386
#
# Private MAC driver header files
#
-usr/include/sys/aggr.h i386
-usr/include/sys/aggr_impl.h i386
-usr/include/sys/dld.h i386
-usr/include/sys/dld_impl.h i386
-usr/include/sys/dls.h i386
-usr/include/sys/dls_impl.h i386
-usr/include/sys/mac.h i386
-usr/include/sys/mac_impl.h i386
-usr/include/libdladm.h i386
-usr/include/liblaadm.h i386
-usr/include/libmacadm.h i386
-#
-# These files are installed in the proto area for
-# Solaris MAC drivers and should not be shipped
-#
-lib/libdladm.so i386
-lib/liblaadm.so i386
-lib/libmacadm.so i386
-lib/llib-ldladm.ln i386
-lib/llib-ldladm i386
-lib/llib-llaadm.ln i386
-lib/llib-llaadm i386
-lib/llib-lmacadm.ln i386
-lib/llib-lmacadm i386
+usr/include/sys/aggr.h i386
+usr/include/sys/aggr_impl.h i386
+usr/include/sys/dld.h i386
+usr/include/sys/dld_impl.h i386
+usr/include/sys/dls.h i386
+usr/include/sys/dls_impl.h i386
+usr/include/sys/mac.h i386
+usr/include/sys/mac_impl.h i386
+#
+# Private GLDv3 userland libraries and headers
+#
+usr/include/libdladm.h i386
+usr/include/libdladm_impl.h i386
+usr/include/liblaadm.h i386
+usr/include/libmacadm.h i386
+usr/include/libwladm.h i386
+usr/include/libwladm_impl.h i386
+lib/libdladm.so i386
+lib/liblaadm.so i386
+lib/libmacadm.so i386
+lib/libwladm.so i386
+lib/llib-ldladm.ln i386
+lib/llib-ldladm i386
+lib/llib-llaadm.ln i386
+lib/llib-llaadm i386
+lib/llib-lmacadm.ln i386
+lib/llib-lmacadm i386
+lib/llib-lwladm.ln i386
+lib/llib-lwladm i386
#
# Installed in the proto area for building utilties dependent on
# it, but is not shipped.
diff --git a/usr/src/pkgdefs/etc/exception_list_sparc b/usr/src/pkgdefs/etc/exception_list_sparc
index 4ad8930627..1b7af2c88a 100644
--- a/usr/src/pkgdefs/etc/exception_list_sparc
+++ b/usr/src/pkgdefs/etc/exception_list_sparc
@@ -77,22 +77,27 @@ usr/include/sys/dls.h sparc
usr/include/sys/dls_impl.h sparc
usr/include/sys/mac.h sparc
usr/include/sys/mac_impl.h sparc
-usr/include/libdladm.h sparc
-usr/include/liblaadm.h sparc
-usr/include/libmacadm.h sparc
-#
-# These files are installed in the proto area for
-# Solaris MAC drivers and should not be shipped
-#
-lib/libdladm.so sparc
-lib/liblaadm.so sparc
-lib/libmacadm.so sparc
-lib/llib-ldladm.ln sparc
-lib/llib-ldladm sparc
-lib/llib-llaadm.ln sparc
-lib/llib-llaadm sparc
-lib/llib-lmacadm.ln sparc
-lib/llib-lmacadm sparc
+#
+# Private GLDv3 userland libraries and headers
+#
+usr/include/libdladm.h sparc
+usr/include/libdladm_impl.h sparc
+usr/include/liblaadm.h sparc
+usr/include/libmacadm.h sparc
+usr/include/libwladm.h sparc
+usr/include/libwladm_impl.h sparc
+lib/libdladm.so sparc
+lib/liblaadm.so sparc
+lib/libmacadm.so sparc
+lib/libwladm.so sparc
+lib/llib-ldladm.ln sparc
+lib/llib-ldladm sparc
+lib/llib-llaadm.ln sparc
+lib/llib-llaadm sparc
+lib/llib-lmacadm.ln sparc
+lib/llib-lmacadm sparc
+lib/llib-lwladm.ln sparc
+lib/llib-lwladm sparc
#
# Installed in the proto area for building those things
# that are dependent on it. No delivered as part of a pkg.
diff --git a/usr/src/tools/scripts/bfu.sh b/usr/src/tools/scripts/bfu.sh
index 85a6406488..2dec0c1bc0 100644
--- a/usr/src/tools/scripts/bfu.sh
+++ b/usr/src/tools/scripts/bfu.sh
@@ -1909,6 +1909,7 @@ multiboot_archives=no
dca_to_multi=no
is_pcfs_boot=no
need_datalink=no
+new_dladm=no
test $# -ge 1 || usage
@@ -2130,6 +2131,15 @@ if $ZCAT $cpiodir/generic.root$ZFIX | cpio -it 2>/dev/null | \
need_datalink=yes
fi
+#
+# Check whether the archives have an etc/dladm directory; this is
+# later used to determine if aggregation.conf needs to be moved.
+#
+if $ZCAT $cpiodir/generic.root$ZFIX | cpio -it 2>/dev/null | \
+ grep etc/dladm > /dev/null 2>&1 ; then
+ new_dladm=yes
+fi
+
time_ref=/tmp/bfu.time_ref.$$
rm -f $time_ref
touch $time_ref || fail "$time_ref: Unable to create time reference."
@@ -6295,6 +6305,25 @@ mondo_loop() {
create_datalink_conf
fi
+ # Move existing /etc/aggregation.conf entries to
+ # /etc/dladm/aggregation.conf; or, if bfu'ing
+ # backwards, move aggregation.conf back to /etc
+ aggr_old=$rootprefix/etc/aggregation.conf
+ aggr_new=$rootprefix/etc/dladm/aggregation.conf
+ if [ $new_dladm = yes ]; then
+ if [ -f $aggr_old ]; then
+ # use cat instead of cp/mv to keep owner+group of dest
+ cat $aggr_old > $aggr_new
+ rm -f $aggr_old
+ fi
+ else
+ if [ -f $aggr_new ]; then
+ cp $aggr_new $aggr_old
+ chgrp sys $aggr_old
+ rm -rf $rootprefix/etc/dladm
+ fi
+ fi
+
print "\nRestoring configuration files.\n"
cd $root
diff --git a/usr/src/uts/common/Makefile.files b/usr/src/uts/common/Makefile.files
index e8dc6b6f60..1aceb671ad 100644
--- a/usr/src/uts/common/Makefile.files
+++ b/usr/src/uts/common/Makefile.files
@@ -530,9 +530,15 @@ MAC_OBJS += mac.o mac_mod.o mac_stat.o
MAC_ETHER_OBJS += mac_ether.o
+MAC_WIFI_OBJS += mac_wifi.o
+
AGGR_OBJS += aggr_dev.o aggr_ctl.o aggr_grp.o aggr_port.o \
aggr_send.o aggr_recv.o aggr_lacp.o
+NET80211_OBJS += net80211.o net80211_proto.o net80211_input.o net80211_output.o \
+ net80211_node.o net80211_crypto.o net80211_crypto_none.o \
+ net80211_crypto_wep.o net80211_ioctl.o
+
IB_OBJS += ibnex.o ibnex_ioctl.o
IBCM_OBJS += ibcm_impl.o ibcm_sm.o ibcm_ti.o ibcm_utils.o ibcm_path.o
@@ -1272,8 +1278,7 @@ IXGB_OBJS += ixgb.o ixgb_atomic.o ixgb_chip.o ixgb_gld.o ixgb_kstats.o \
RGE_OBJS += rge_main.o rge_chip.o rge_ndd.o rge_kstats.o rge_log.o rge_rxtx.o
-ATH_OBJS += ath_aux.o ath_ieee80211.o ath_main.o ath_osdep.o \
- ath_rate.o ath_wificonfig.o
+ATH_OBJS += ath_aux.o ath_main.o ath_osdep.o ath_rate.o
#
# Build up defines and paths.
diff --git a/usr/src/uts/common/Makefile.rules b/usr/src/uts/common/Makefile.rules
index 64994fabb1..d7df9cb760 100644
--- a/usr/src/uts/common/Makefile.rules
+++ b/usr/src/uts/common/Makefile.rules
@@ -583,6 +583,10 @@ $(OBJS_DIR)/%.o: $(UTSBASE)/common/io/mac/plugins/%.c
$(COMPILE.c) -o $@ $<
$(CTFCONVERT_O)
+$(OBJS_DIR)/%.o: $(UTSBASE)/common/io/net80211/%.c
+ $(COMPILE.c) -o $@ $<
+ $(CTFCONVERT_O)
+
$(OBJS_DIR)/%.o: $(UTSBASE)/common/io/pci-ide/%.c
$(COMPILE.c) -o $@ $<
$(CTFCONVERT_O)
@@ -1297,6 +1301,9 @@ $(LINTS_DIR)/%.ln: $(UTSBASE)/common/io/mac/%.c
$(LINTS_DIR)/%.ln: $(UTSBASE)/common/io/mac/plugins/%.c
@($(LHEAD) $(LINT.c) $< $(LTAIL))
+$(LINTS_DIR)/%.ln: $(UTSBASE)/common/io/net80211/%.c
+ @($(LHEAD) $(LINT.c) $< $(LTAIL))
+
$(LINTS_DIR)/%.ln: $(UTSBASE)/common/io/pci-ide/%.c
@($(LHEAD) $(LINT.c) $< $(LTAIL))
diff --git a/usr/src/uts/common/io/aggr/aggr_port.c b/usr/src/uts/common/io/aggr/aggr_port.c
index 4c188a0583..3d2fb3c0de 100644
--- a/usr/src/uts/common/io/aggr/aggr_port.c
+++ b/usr/src/uts/common/io/aggr/aggr_port.c
@@ -134,7 +134,7 @@ aggr_port_create(const char *name, aggr_port_t **pp)
return (err);
mip = mac_info(mh);
- if (mip->mi_media != DL_ETHER) {
+ if (mip->mi_media != DL_ETHER || mip->mi_nativemedia != DL_ETHER) {
mac_close(mh);
return (EINVAL);
}
diff --git a/usr/src/uts/common/io/ath/ath_aux.c b/usr/src/uts/common/io/ath/ath_aux.c
index fb119a22af..7ef30ab1b6 100644
--- a/usr/src/uts/common/io/ath/ath_aux.c
+++ b/usr/src/uts/common/io/ath/ath_aux.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -70,7 +70,6 @@
#include <inet/wifi_ioctl.h>
#include "ath_hal.h"
#include "ath_impl.h"
-#include "ath_ieee80211.h"
static const char *acnames[] = {
"WME_AC_BE",
@@ -85,20 +84,20 @@ extern void ath_setup_desc(ath_t *asc, struct ath_buf *bf);
uint32_t
ath_calcrxfilter(ath_t *asc)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
uint32_t rfilt;
rfilt = (ATH_HAL_GETRXFILTER(ah) & HAL_RX_FILTER_PHYERR)
| HAL_RX_FILTER_UCAST | HAL_RX_FILTER_BCAST | HAL_RX_FILTER_MCAST;
- if (isc->isc_opmode != IEEE80211_M_STA)
+ if (ic->ic_opmode != IEEE80211_M_STA)
rfilt |= HAL_RX_FILTER_PROBEREQ;
- if (isc->isc_opmode != IEEE80211_M_HOSTAP &&
+ if (ic->ic_opmode != IEEE80211_M_HOSTAP &&
(asc->asc_promisc & GLD_MAC_PROMISC_PHYS)) /* promiscuous */
rfilt |= HAL_RX_FILTER_PROM;
- if (isc->isc_opmode == IEEE80211_M_STA ||
- isc->isc_opmode == IEEE80211_M_IBSS ||
- isc->isc_state == IEEE80211_S_SCAN)
+ if (ic->ic_opmode == IEEE80211_M_STA ||
+ ic->ic_opmode == IEEE80211_M_IBSS ||
+ ic->ic_state == IEEE80211_S_SCAN)
rfilt |= HAL_RX_FILTER_BEACON;
return (rfilt);
}
@@ -131,7 +130,7 @@ ath_set_data_queue(ath_t *asc, int ac, int haltype)
* up in which case the top half of the kernel may backup
* due to a lack of tx descriptors.
*/
- qi.tqi_qflags = TXQ_FLAG_TXEOLINT_ENABLE | TXQ_FLAG_TXDESCINT_ENABLE;
+ qi.tqi_qflags = HAL_TXQ_TXEOLINT_ENABLE | HAL_TXQ_TXDESCINT_ENABLE;
qnum = ATH_HAL_SETUPTXQUEUE(ah, HAL_TX_QUEUE_DATA, &qi);
if (qnum == -1) {
ATH_DEBUG((ATH_DBG_AUX, "ath: ath_set_data_queue(): "
@@ -174,6 +173,23 @@ ath_txq_setup(ath_t *asc)
}
void
+ath_txq_cleanup(ath_t *asc)
+{
+ int i;
+
+ mutex_destroy(&asc->asc_txbuflock);
+ for (i = 0; i < HAL_NUM_TX_QUEUES; i++) {
+ if (ATH_TXQ_SETUP(asc, i)) {
+ struct ath_txq *txq = &asc->asc_txq[i];
+
+ ATH_HAL_RELEASETXQUEUE(asc->asc_ah, txq->axq_qnum);
+ mutex_destroy(&txq->axq_lock);
+ asc->asc_txqsetup &= ~(1 << txq->axq_qnum);
+ }
+ }
+}
+
+void
ath_setcurmode(ath_t *asc, enum ieee80211_phymode mode)
{
const HAL_RATE_TABLE *rt;
@@ -196,7 +212,7 @@ ath_setcurmode(ath_t *asc, enum ieee80211_phymode mode)
void
ath_mode_init(ath_t *asc)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
uint32_t rfilt;
@@ -207,7 +223,7 @@ ath_mode_init(ath_t *asc)
ATH_HAL_SETMCASTFILTER(ah, asc->asc_mfilt[0], asc->asc_mfilt[1]);
ATH_DEBUG((ATH_DBG_AUX, "ath: ath_mode_init(): "
"mode =%d RX filter 0x%x, MC filter %08x:%08x\n",
- isc->isc_opmode, rfilt,
+ ic->ic_opmode, rfilt,
asc->asc_mfilt[0], asc->asc_mfilt[1]));
}
@@ -229,14 +245,16 @@ ath_stoprecv(ath_t *asc)
}
uint32_t
-ath_chan2flags(ieee80211com_t *isc, struct ieee80211channel *chan)
+ath_chan2flags(ieee80211com_t *isc, struct ieee80211_channel *chan)
{
static const uint32_t modeflags[] = {
0, /* IEEE80211_MODE_AUTO */
CHANNEL_A, /* IEEE80211_MODE_11A */
CHANNEL_B, /* IEEE80211_MODE_11B */
CHANNEL_PUREG, /* IEEE80211_MODE_11G */
- CHANNEL_T /* IEEE80211_MODE_TURBO */
+ 0, /* IEEE80211_MODE_FH */
+ CHANNEL_108A, /* IEEE80211_MODE_TURBO_A */
+ CHANNEL_108G /* IEEE80211_MODE_TURBO_G */
};
return (modeflags[ieee80211_chan2mode(isc, chan)]);
}
@@ -245,7 +263,7 @@ ath_chan2flags(ieee80211com_t *isc, struct ieee80211channel *chan)
int
ath_getchannels(ath_t *asc, uint32_t cc, HAL_BOOL outdoor, HAL_BOOL xchanmode)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
HAL_CHANNEL *chans;
int i, ix;
@@ -255,7 +273,7 @@ ath_getchannels(ath_t *asc, uint32_t cc, HAL_BOOL outdoor, HAL_BOOL xchanmode)
kmem_zalloc(IEEE80211_CHAN_MAX * sizeof (HAL_CHANNEL), KM_SLEEP);
if (!ath_hal_init_channels(ah, chans, IEEE80211_CHAN_MAX, &nchan,
- cc, HAL_MODE_ALL, outdoor, xchanmode)) {
+ NULL, 0, NULL, cc, HAL_MODE_ALL, outdoor, xchanmode)) {
ATH_DEBUG((ATH_DBG_AUX, "ath: ath_getchannels(): "
"unable to get channel list\n");
kmem_free(chans, IEEE80211_CHAN_MAX * sizeof (HAL_CHANNEL)));
@@ -268,20 +286,41 @@ ath_getchannels(ath_t *asc, uint32_t cc, HAL_BOOL outdoor, HAL_BOOL xchanmode)
*/
for (i = 0; i < nchan; i++) {
HAL_CHANNEL *c = &chans[i];
- ix = ath_hal_mhz2ieee(c->channel, c->channelFlags);
+ uint16_t flags;
+ ix = ath_hal_mhz2ieee(ah, c->channel, c->channelFlags);
if (ix > IEEE80211_CHAN_MAX) {
ATH_DEBUG((ATH_DBG_AUX, "ath: ath_getchannels(): "
- "bad hal channel %u (%u/%x) ignored\n",
+ "bad hal channel %d (%u/%x) ignored\n",
ix, c->channel, c->channelFlags));
continue;
}
/* NB: flags are known to be compatible */
- if (isc->isc_channels[ix].ich_freq == 0) {
- isc->isc_channels[ix].ich_freq = c->channel;
- isc->isc_channels[ix].ich_flags = c->channelFlags;
+ if (ix < 0) {
+ /*
+ * can't handle frequency <2400MHz (negative
+ * channels) right now
+ */
+ ATH_DEBUG((ATH_DBG_AUX, "ath:ath_getchannels(): "
+ "hal channel %d (%u/%x) "
+ "cannot be handled, ignored\n",
+ ix, c->channel, c->channelFlags));
+ continue;
+ }
+ /*
+ * Calculate net80211 flags; most are compatible
+ * but some need massaging. Note the static turbo
+ * conversion can be removed once net80211 is updated
+ * to understand static vs. dynamic turbo.
+ */
+ flags = c->channelFlags & CHANNEL_COMPAT;
+ if (c->channelFlags & CHANNEL_STURBO)
+ flags |= IEEE80211_CHAN_TURBO;
+ if (ic->ic_sup_channels[ix].ich_freq == 0) {
+ ic->ic_sup_channels[ix].ich_freq = c->channel;
+ ic->ic_sup_channels[ix].ich_flags = flags;
} else {
/* channels overlap; e.g. 11g and 11b */
- isc->isc_channels[ix].ich_flags |= c->channelFlags;
+ ic->ic_sup_channels[ix].ich_flags |= flags;
}
if ((c->channelFlags & CHANNEL_G) == CHANNEL_G)
asc->asc_have11g = 1;
@@ -365,20 +404,37 @@ ath_startrecv(ath_t *asc)
}
/*
+ * Update internal state after a channel change.
+ */
+void
+ath_chan_change(ath_t *asc, struct ieee80211_channel *chan)
+{
+ struct ieee80211com *ic = &asc->asc_isc;
+ enum ieee80211_phymode mode;
+
+ /*
+ * Change channels and update the h/w rate map
+ * if we're switching; e.g. 11a to 11b/g.
+ */
+ mode = ieee80211_chan2mode(ic, chan);
+ if (mode != asc->asc_curmode)
+ ath_setcurmode(asc, mode);
+}
+
+/*
* Set/change channels. If the channel is really being changed,
* it's done by resetting the chip. To accomplish this we must
* first cleanup any pending DMA.
*/
int
-ath_chan_set(ath_t *asc, struct ieee80211channel *chan)
+ath_chan_set(ath_t *asc, struct ieee80211_channel *chan)
{
struct ath_hal *ah = asc->asc_ah;
- ieee80211com_t *isc = &asc->asc_isc;
+ ieee80211com_t *ic = &asc->asc_isc;
- if (chan != isc->isc_ibss_chan) {
+ if (chan != ic->ic_ibss_chan) {
HAL_STATUS status;
HAL_CHANNEL hchan;
- enum ieee80211_phymode mode;
/*
* To switch channels clear any pending DMA operations;
@@ -395,14 +451,15 @@ ath_chan_set(ath_t *asc, struct ieee80211channel *chan)
* operating mode.
*/
hchan.channel = chan->ich_freq;
- hchan.channelFlags = ath_chan2flags(isc, chan);
- if (!ATH_HAL_RESET(ah, (HAL_OPMODE)isc->isc_opmode,
+ hchan.channelFlags = ath_chan2flags(ic, chan);
+ if (!ATH_HAL_RESET(ah, (HAL_OPMODE)ic->ic_opmode,
&hchan, AH_TRUE, &status)) {
ATH_DEBUG((ATH_DBG_AUX, "ath: ath_chan_set():"
"unable to reset channel %u (%uMhz)\n",
- ieee80211_chan2ieee(isc, chan), chan->ich_freq));
+ ieee80211_chan2ieee(ic, chan), chan->ich_freq));
return (EIO);
}
+ asc->asc_curchan = hchan;
/*
* Re-enable rx framework.
@@ -417,10 +474,8 @@ ath_chan_set(ath_t *asc, struct ieee80211channel *chan)
* Change channels and update the h/w rate map
* if we're switching; e.g. 11a to 11b/g.
*/
- isc->isc_ibss_chan = chan;
- mode = ieee80211_chan2mode(isc, chan);
- if (mode != asc->asc_curmode)
- ath_setcurmode(asc, mode);
+ ic->ic_ibss_chan = chan;
+ ath_chan_change(asc, chan);
/*
* Re-enable interrupts.
*/
@@ -449,16 +504,15 @@ void
ath_beacon_config(ath_t *asc)
{
struct ath_hal *ah = asc->asc_ah;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
+ struct ieee80211_node *in = ic->ic_bss;
uint32_t nexttbtt;
- nexttbtt = (ATH_LE_READ_4(in->in_tstamp + 4) << 22) |
- (ATH_LE_READ_4(in->in_tstamp) >> 10);
+ nexttbtt = (ATH_LE_READ_4(in->in_tstamp.data + 4) << 22) |
+ (ATH_LE_READ_4(in->in_tstamp.data) >> 10);
nexttbtt += in->in_intval;
- if (isc->isc_opmode != IEEE80211_M_HOSTAP) {
+ if (ic->ic_opmode != IEEE80211_M_HOSTAP) {
HAL_BEACON_STATE bs;
- uint32_t bmisstime;
/* NB: no PCF support right now */
bzero(&bs, sizeof (bs));
@@ -468,14 +522,11 @@ ath_beacon_config(ath_t *asc)
bs.bs_nextdtim = nexttbtt;
/*
- * Calculate the number of consecutive beacons to miss
- * before taking a BMISS interrupt. The configuration
- * is specified in ms, so we need to convert that to
- * TU's and then calculate based on the beacon interval.
+ * Setup the number of consecutive beacons to miss
+ * before taking a BMISS interrupt.
* Note that we clamp the result to at most 10 beacons.
*/
- bmisstime = (isc->isc_bmisstimeout * 1000) / 1024;
- bs.bs_bmissthreshold = howmany(bmisstime, in->in_intval);
+ bs.bs_bmissthreshold = ic->ic_bmissthreshold;
if (bs.bs_bmissthreshold > 10)
bs.bs_bmissthreshold = 10;
else if (bs.bs_bmissthreshold <= 0)
@@ -521,52 +572,93 @@ ath_beacon_config(ath_t *asc)
}
}
+/*
+ * Allocate one or more key cache slots for a unicast key. The
+ * key itself is needed only to identify the cipher. For hardware
+ * TKIP with split cipher+MIC keys we allocate two key cache slot
+ * pairs so that we can setup separate TX and RX MIC keys. Note
+ * that the MIC key for a TKIP key at slot i is assumed by the
+ * hardware to be at slot i+64. This limits TKIP keys to the first
+ * 64 entries.
+ */
+/* ARGSUSED */
+int
+ath_key_alloc(ieee80211com_t *ic, const struct ieee80211_key *k,
+ ieee80211_keyix *keyix, ieee80211_keyix *rxkeyix)
+{
+ *keyix = *rxkeyix = 0;
+ return (1);
+}
+
+int
+ath_key_delete(ieee80211com_t *ic, const struct ieee80211_key *k)
+{
+ struct ath_hal *ah = ((ath_t *)ic)->asc_ah;
+ ATH_HAL_KEYRESET(ah, k->wk_keyix);
+ return (1);
+}
/*
- * Fill the hardware key cache with key entries.
+ * Set the key cache contents for the specified key. Key cache
+ * slot(s) must already have been allocated by ath_key_alloc.
*/
-void
-ath_initkeytable(ath_t *asc)
+int
+ath_key_set(ieee80211com_t *ic, const struct ieee80211_key *k,
+ const uint8_t mac[IEEE80211_ADDR_LEN])
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ static const uint8_t ciphermap[] = {
+ HAL_CIPHER_WEP, /* IEEE80211_CIPHER_WEP */
+ HAL_CIPHER_TKIP, /* IEEE80211_CIPHER_TKIP */
+ HAL_CIPHER_AES_OCB, /* IEEE80211_CIPHER_AES_OCB */
+ HAL_CIPHER_AES_CCM, /* IEEE80211_CIPHER_AES_CCM */
+ (uint8_t)-1, /* 4 is not allocated */
+ HAL_CIPHER_CKIP, /* IEEE80211_CIPHER_CKIP */
+ HAL_CIPHER_CLR, /* IEEE80211_CIPHER_NONE */
+ };
+ ath_t *asc = (ath_t *)ic;
struct ath_hal *ah = asc->asc_ah;
- int32_t i;
-
- for (i = 0; i < IEEE80211_WEP_NKID; i++) {
- struct ieee80211_wepkey *k = &isc->isc_nw_keys[i];
- if (k->iwk_len == 0)
- ATH_HAL_KEYRESET(ah, i);
- else {
- HAL_KEYVAL hk;
-
-#ifdef DEBUG
- char tmp[200], stmp[10];
- int j;
- bzero(tmp, 200);
- bzero(stmp, 10);
- for (j = 0; j < k->iwk_len; j++) {
- (void) sprintf(stmp, "0x%02x ", k->iwk_key[j]);
- (void) strcat(tmp, stmp);
- }
- ATH_DEBUG((ATH_DBG_AUX, "ath: ath_initkeytable(): "
- "key%d val=%s\n", i, tmp));
-#endif /* DEBUG */
- bzero(&hk, sizeof (hk));
- hk.kv_type = HAL_CIPHER_WEP;
- hk.kv_len = k->iwk_len;
- bcopy(k->iwk_key, hk.kv_val, k->iwk_len);
- ATH_HAL_KEYSET(ah, i, &hk);
- }
+ const struct ieee80211_cipher *cip = k->wk_cipher;
+ HAL_KEYVAL hk;
+
+ bzero(&hk, sizeof (hk));
+ /*
+ * Software crypto uses a "clear key" so non-crypto
+ * state kept in the key cache are maintainedd so that
+ * rx frames have an entry to match.
+ */
+ if ((k->wk_flags & IEEE80211_KEY_SWCRYPT) == 0) {
+ ASSERT(cip->ic_cipher < ATH_N(ciphermap));
+ hk.kv_type = ciphermap[cip->ic_cipher];
+ hk.kv_len = k->wk_keylen;
+ bcopy(k->wk_key, hk.kv_val, k->wk_keylen);
+ } else {
+ hk.kv_type = HAL_CIPHER_CLR;
}
+
+ return (ATH_HAL_KEYSET(ah, k->wk_keyix, &hk, mac));
}
+/*
+ * Enable/Disable short slot timing
+ */
void
-ath_reset(ath_t *asc)
+ath_set_shortslot(ieee80211com_t *ic, int onoff)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ struct ath_hal *ah = ((ath_t *)ic)->asc_ah;
+
+ if (onoff)
+ ATH_HAL_SETSLOTTIME(ah, HAL_SLOT_TIME_9);
+ else
+ ATH_HAL_SETSLOTTIME(ah, HAL_SLOT_TIME_20);
+}
+
+int
+ath_reset(ieee80211com_t *ic)
+{
+ ath_t *asc = (ath_t *)ic;
struct ath_hal *ah = asc->asc_ah;
- struct ieee80211channel *ch;
+ struct ieee80211_channel *ch;
HAL_STATUS status;
HAL_CHANNEL hchan;
@@ -574,28 +666,31 @@ ath_reset(ath_t *asc)
* Convert to a HAL channel description with the flags
* constrained to reflect the current operating mode.
*/
- ch = isc->isc_ibss_chan;
- hchan.channel = ch->ich_freq;
- hchan.channelFlags = ath_chan2flags(isc, ch);
+ ch = ic->ic_curchan;
+ asc->asc_curchan.channel = ch->ich_freq;
+ asc->asc_curchan.channelFlags = ath_chan2flags(ic, ch);
ATH_HAL_INTRSET(ah, 0); /* disable interrupts */
ath_draintxq(asc); /* stop xmit side */
- if (asc->asc_invalid == 0)
+ if (ATH_IS_RUNNING(asc)) {
ath_stoprecv(asc); /* stop recv side */
- /* indicate channel change so we do a full reset */
- if (!ATH_HAL_RESET(ah, (HAL_OPMODE)isc->isc_opmode, &hchan,
- AH_TRUE, &status)) {
- ath_problem("ath: ath_reset(): "
- "reseting hardware failed, HAL status %u\n", status);
+ /* indicate channel change so we do a full reset */
+ if (!ATH_HAL_RESET(ah, (HAL_OPMODE)ic->ic_opmode, &hchan,
+ AH_TRUE, &status)) {
+ ath_problem("ath: ath_reset(): "
+ "resetting hardware failed, HAL status %u\n",
+ status);
+ }
+ ath_chan_change(asc, ch);
}
- if (asc->asc_invalid == 0) {
- ath_initkeytable(asc);
+ if (ATH_IS_RUNNING(asc)) {
if (ath_startrecv(asc) != 0) /* restart recv */
ath_problem("ath: ath_reset(): "
"starting receiving logic failed\n");
- if (isc->isc_state == IEEE80211_S_RUN) {
+ if (ic->ic_state == IEEE80211_S_RUN) {
ath_beacon_config(asc); /* restart beacons */
}
ATH_HAL_INTRSET(ah, asc->asc_imask);
}
+ return (0);
}
diff --git a/usr/src/uts/common/io/ath/ath_aux.h b/usr/src/uts/common/io/ath/ath_aux.h
index 6641d72429..d4d09b81ca 100644
--- a/usr/src/uts/common/io/ath/ath_aux.h
+++ b/usr/src/uts/common/io/ath/ath_aux.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -45,25 +45,31 @@ extern "C" {
#endif
#include "ath_hal.h"
-#include "ath_ieee80211.h"
#include "ath_impl.h"
uint32_t ath_calcrxfilter(ath_t *asc);
void ath_beacon_config(ath_t *asc);
-void ath_reset(ath_t *asc);
+int ath_reset(ieee80211com_t *ic);
int32_t ath_startrecv(ath_t *asc);
void ath_stoprecv(ath_t *asc);
uint32_t ath_chan2flags(ieee80211com_t *isc,
- struct ieee80211channel *chan);
+ struct ieee80211_channel *chan);
int32_t ath_getchannels(ath_t *asc, uint32_t cc,
HAL_BOOL outdoor, HAL_BOOL xchanmode);
-int32_t ath_chan_set(ath_t *asc, struct ieee80211channel *chan);
+void ath_chan_change(ath_t *asc, struct ieee80211_channel *chan);
+int32_t ath_chan_set(ath_t *asc, struct ieee80211_channel *chan);
int ath_txq_setup(ath_t *asc);
+void ath_txq_cleanup(ath_t *asc);
void ath_rate_setup(ath_t *asc, uint32_t mode);
void ath_setcurmode(ath_t *asc, enum ieee80211_phymode mode);
void ath_mode_init(ath_t *asc);
void ath_draintxq(ath_t *asc);
-void ath_initkeytable(ath_t *asc);
+int ath_key_alloc(ieee80211com_t *ic, const struct ieee80211_key *k,
+ ieee80211_keyix *keyix, ieee80211_keyix *rxkeyix);
+int ath_key_delete(ieee80211com_t *ic, const struct ieee80211_key *k);
+int ath_key_set(ieee80211com_t *ic, const struct ieee80211_key *k,
+ const uint8_t mac[IEEE80211_ADDR_LEN]);
+void ath_set_shortslot(ieee80211com_t *ic, int onoff);
#ifdef __cplusplus
}
diff --git a/usr/src/uts/common/io/ath/ath_hal.h b/usr/src/uts/common/io/ath/ath_hal.h
index 59ac8aed84..7e1a3cf0df 100644
--- a/usr/src/uts/common/io/ath/ath_hal.h
+++ b/usr/src/uts/common/io/ath/ath_hal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting, Atheros
+ * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting, Atheros
* Communications, Inc. All rights reserved.
*
* Use is subject to license terms.
@@ -57,12 +57,12 @@ extern "C" {
#endif
/* HAL version of this release */
-#define HAL_ABI_VERSION 0x04112900 /* YYMMDDnn */
+#define HAL_ABI_VERSION 0x06052200 /* YYMMDDnn */
/* HAL data type definition */
-typedef void * HAL_SOFTC;
-typedef int HAL_BUS_TAG;
-typedef void * HAL_BUS_HANDLE;
+typedef void * HAL_SOFTC; /* pointer to driver/OS state */
+typedef void * HAL_BUS_TAG; /* opaque bus i/o id tag */
+typedef void * HAL_BUS_HANDLE; /* opaque bus i/o handle */
typedef uint32_t HAL_BUS_ADDR;
typedef uint16_t HAL_CTRY_CODE; /* country code */
typedef uint16_t HAL_REG_DOMAIN; /* regulatory domain code */
@@ -84,19 +84,35 @@ typedef uint16_t HAL_REG_DOMAIN; /* regulatory domain code */
#define CHANNEL_PASSIVE 0x0200 /* Only passive scan allowed in the channel */
#define CHANNEL_DYN 0x0400 /* dynamic CCK-OFDM channel */
#define CHANNEL_XR 0x0800 /* XR channel */
-#define CHANNEL_AR 0x8000 /* Software use: radar detected */
+#define CHANNEL_STURBO 0x2000 /* Static turbo, no 11a-only usage */
+#define CHANNEL_HALF 0x4000 /* Half rate channel */
+#define CHANNEL_QUARTER 0x8000 /* Quarter rate channel */
#define CHANNEL_A (CHANNEL_5GHZ|CHANNEL_OFDM)
#define CHANNEL_B (CHANNEL_2GHZ|CHANNEL_CCK)
#define CHANNEL_PUREG (CHANNEL_2GHZ|CHANNEL_OFDM)
#define CHANNEL_G (CHANNEL_2GHZ|CHANNEL_OFDM)
#define CHANNEL_T (CHANNEL_5GHZ|CHANNEL_OFDM|CHANNEL_TURBO)
+#define CHANNEL_ST (CHANNEL_T|CHANNEL_STURBO)
#define CHANNEL_108G (CHANNEL_2GHZ|CHANNEL_OFDM|CHANNEL_TURBO)
+#define CHANNEL_108A CHANNEL_T
#define CHANNEL_X (CHANNEL_5GHZ|CHANNEL_OFDM|CHANNEL_XR)
#define CHANNEL_ALL \
(CHANNEL_OFDM|CHANNEL_CCK|CHANNEL_5GHZ|CHANNEL_2GHZ|CHANNEL_TURBO)
#define CHANNEL_ALL_NOTURBO (CHANNEL_ALL &~ CHANNEL_TURBO)
+#define CHANNEL_COMPAT (CHANNEL_ALL_NOTURBO | CHANNEL_PASSIVE)
+
+/* privFlags */
+/*
+ * Software use: channel interference used for AR as well as RADAR
+ * interference detection
+ */
+#define CHANNEL_INTERFERENCE 0x01
+#define CHANNEL_DFS 0x02 /* DFS required on channel */
+#define CHANNEL_4MS_LIMIT 0x04 /* 4msec packet limit on this channel */
+#define CHANNEL_DFS_CLEAR 0x08 /* if channel has been checked DFS */
+
#define HAL_RSSI_EP_MULTIPLIER (1<<7) /* pow2 to optimize out * and / */
/* flags passed to tx descriptor setup methods */
@@ -106,6 +122,8 @@ typedef uint16_t HAL_REG_DOMAIN; /* regulatory domain code */
#define HAL_TXDESC_CTSENA 0x0008 /* enable CTS */
#define HAL_TXDESC_INTREQ 0x0010 /* enable per-descriptor interrupt */
#define HAL_TXDESC_VEOL 0x0020 /* mark virtual EOL */
+/* NB: this only affects frame, not any RTS/CTS */
+#define HAL_TXDESC_DURENA 0x0040 /* enable h/w write of duration field */
/* flags passed to rx descriptor setup methods */
#define HAL_RXDESC_INTREQ 0x0020 /* enable per-descriptor interrupt */
@@ -129,6 +147,16 @@ typedef uint16_t HAL_REG_DOMAIN; /* regulatory domain code */
/* value used to specify no encryption key for xmit */
#define HAL_TXKEYIX_INVALID ((uint32_t)-1)
+/* compression definitions */
+#define HAL_COMP_BUF_MAX_SIZE 9216 /* 9k */
+#define HAL_COMP_BUF_ALIGN_SIZE 512
+#define HAL_DECOMP_MASK_SIZE 128
+
+#define HAL_ANTENNA_MIN_MODE 0
+#define HAL_ANTENNA_FIXED_A 1
+#define HAL_ANTENNA_FIXED_B 2
+#define HAL_ANTENNA_MAX_MODE 3
+
/*
* Status codes that may be returned by the HAL. Note that
* interfaces that return a status code set it only when an
@@ -175,7 +203,23 @@ typedef enum {
HAL_CAP_BURST = 13, /* hardware supports packet bursting */
HAL_CAP_FASTFRAME = 14, /* hardware supoprts fast frames */
HAL_CAP_TXPOW = 15, /* global tx power limit */
- HAL_CAP_TPC = 16 /* per-packet tx power control */
+ HAL_CAP_TPC = 16, /* per-packet tx power control */
+ HAL_CAP_PHYDIAG = 17, /* hardware phy error diagnostic */
+ HAL_CAP_BSSIDMASK = 18, /* hardware supports bssid mask */
+ HAL_CAP_MCAST_KEYSRCH = 19, /* hardware has multicast key search */
+ HAL_CAP_TSF_ADJUST = 20, /* hardware has beacon tsf adjust */
+ HAL_CAP_XR = 21, /* hardware has XR support */
+ /* hardware can support TKIP MIC when WMM is turned on */
+ HAL_CAP_WME_TKIPMIC = 22,
+ /* hardware can support half rate channels */
+ HAL_CAP_CHAN_HALFRATE = 23,
+ /* hardware can support quarter rate channels */
+ HAL_CAP_CHAN_QUARTERRATE = 24,
+ HAL_CAP_RFSILENT = 25, /* hardware has rfsilent support */
+ HAL_CAP_TPC_ACK = 26, /* ack txpower with per-packet tpc */
+ HAL_CAP_TPC_CTS = 27, /* cts txpower with per-packet tpc */
+ HAL_CAP_11D = 28, /* 11d beacon support for changing cc */
+ HAL_CAP_INTMIT = 29 /* interference mitigation */
} HAL_CAPABILITY_TYPE;
/*
@@ -203,7 +247,7 @@ typedef enum {
HAL_TX_QUEUE_DATA = 1, /* data xmit q's */
HAL_TX_QUEUE_BEACON = 2, /* beacon xmit q */
HAL_TX_QUEUE_CAB = 3, /* "crap after beacon" xmit q */
- HAL_TX_QUEUE_PSPOLL = 4 /* power-save poll xmit q */
+ HAL_TX_QUEUE_UAPSD = 4 /* u-apsd power save xmit q */
} HAL_TX_QUEUE;
@@ -217,7 +261,8 @@ typedef enum {
HAL_WME_AC_BE = 1, /* best effort access category */
HAL_WME_AC_VI = 2, /* video access category */
HAL_WME_AC_VO = 3, /* voice access category */
- HAL_WME_UPSD = 4 /* uplink power save */
+ HAL_WME_UPSD = 4, /* uplink power save */
+ HAL_XR_DATA = 5 /* entended range data */
} HAL_TX_QUEUE_SUBTYPE;
/*
@@ -225,17 +270,86 @@ typedef enum {
* operational parameters.
*/
typedef enum {
- TXQ_FLAG_TXOKINT_ENABLE = 0x0001, /* enable TXOK interrupt */
- TXQ_FLAG_TXERRINT_ENABLE = 0x0001, /* enable TXERR interrupt */
- TXQ_FLAG_TXDESCINT_ENABLE = 0x0002, /* enable TXDESC interrupt */
- TXQ_FLAG_TXEOLINT_ENABLE = 0x0004, /* enable TXEOL interrupt */
- TXQ_FLAG_TXURNINT_ENABLE = 0x0008, /* enable TXURN interrupt */
- TXQ_FLAG_BACKOFF_DISABLE = 0x0010, /* disable Post Backoff */
- TXQ_FLAG_COMPRESSION_ENABLE = 0x0020, /* compression enabled */
- /* enable ready time expiry policy */
- TXQ_FLAG_RDYTIME_EXP_POLICY_ENABLE = 0x0040,
- /* enable backoff while sending fragment burst */
- TXQ_FLAG_FRAG_BURST_BACKOFF_ENABLE = 0x0080
+ /*
+ * Per queue interrupt enables. When set the associated
+ * interrupt may be delivered for packets sent through
+ * the queue. Without these enabled no interrupts will
+ * be delivered for transmits through the queue.
+ *
+ * When 0x0001 is set, both TXQ_TXOKINT and TXQ_TXERRINT
+ * will be enabled.
+ */
+ HAL_TXQ_TXOKINT_ENABLE = 0x0001, /* enable TXOK interrupt */
+ HAL_TXQ_TXERRINT_ENABLE = 0x0001, /* enable TXERR interrupt */
+ HAL_TXQ_TXDESCINT_ENABLE = 0x0002, /* enable TXDESC interrupt */
+ HAL_TXQ_TXEOLINT_ENABLE = 0x0004, /* enable TXEOL interrupt */
+ HAL_TXQ_TXURNINT_ENABLE = 0x0008, /* enable TXURN interrupt */
+ /*
+ * Enable hardware compression for packets sent through
+ * the queue. The compression buffer must be setup and
+ * packets must have a key entry marked in the tx descriptor.
+ */
+ HAL_TXQ_COMPRESSION_ENABLE = 0x0010, /* enable h/w compression */
+ /*
+ * Disable queue when veol is hit or ready time expires.
+ * By default the queue is disabled only on reaching the
+ * physical end of queue (i.e. a null link ptr in the
+ * descriptor chain).
+ */
+ HAL_TXQ_RDYTIME_EXP_POLICY_ENABLE = 0x0020,
+ /*
+ * Schedule frames on delivery of a DBA (DMA Beacon Alert)
+ * event. Frames will be transmitted only when this timer
+ * fires, e.g to transmit a beacon in ap or adhoc modes.
+ */
+ HAL_TXQ_DBA_GATED = 0x0040, /* schedule based on DBA */
+ /*
+ * Each transmit queue has a counter that is incremented
+ * each time the queue is enabled and decremented when
+ * the list of frames to transmit is traversed (or when
+ * the ready time for the queue expires). This counter
+ * must be non-zero for frames to be scheduled for
+ * transmission. The following controls disable bumping
+ * this counter under certain conditions. Typically this
+ * is used to gate frames based on the contents of another
+ * queue (e.g. CAB traffic may only follow a beacon frame).
+ * These are meaningful only when frames are scheduled
+ * with a non-ASAP policy (e.g. DBA-gated).
+ */
+ HAL_TXQ_CBR_DIS_QEMPTY = 0x0080, /* disable on this q empty */
+ HAL_TXQ_CBR_DIS_BEMPTY = 0x0100, /* disable on beacon q empty */
+
+ /*
+ * Fragment burst backoff policy. Normally no backoff
+ * is done after a successful transmission, the next fragment
+ * is sent at SIFS. If this flag is set backoff is done
+ * after each fragment, regardless whether it was ack'd or
+ * not, after the backoff count reaches zero a normal channel
+ * access procedure is done before the next transmit (i.e.
+ * wait AIFS instead of SIFS).
+ */
+ HAL_TXQ_FRAG_BURST_BACKOFF_ENABLE = 0x00800000,
+ /*
+ * Disable post-tx backoff following each frame.
+ */
+ HAL_TXQ_BACKOFF_DISABLE = 0x00010000, /* disable post backoff */
+ /*
+ * DCU arbiter lockout control. This controls how
+ * lower priority tx queues are handled with respect
+ * to a specific queue when multiple queues have frames
+ * to send. No lockout means lower priority queues arbitrate
+ * concurrently with this queue. Intra-frame lockout
+ * means lower priority queues are locked out until the
+ * current frame transmits (e.g. including backoffs and bursting).
+ * Global lockout means nothing lower can arbitrary so
+ * long as there is traffic activity on this queue (frames,
+ * backoff, etc).
+ */
+ HAL_TXQ_ARB_LOCKOUT_INTRA = 0x00020000, /* intra-frame lockout */
+ HAL_TXQ_ARB_LOCKOUT_GLOBAL = 0x00040000, /* full lockout s */
+
+ HAL_TXQ_IGNORE_VIRTCOL = 0x00080000, /* ignore virt collisions */
+ HAL_TXQ_SEQNUM_INC_DIS = 0x00100000 /* disable seqnum increment */
} HAL_TX_QUEUE_FLAGS;
typedef struct {
@@ -252,8 +366,11 @@ typedef struct {
uint32_t tqi_cbrOverflowLimit;
uint32_t tqi_burstTime;
uint32_t tqi_readyTime;
+ uint32_t tqi_compBuf; /* compress buffer phys addr */
} HAL_TXQ_INFO;
+#define HAL_TQI_NONVAL 0xffff
+
/* token to use for aifs, cwmin, cwmax */
#define HAL_TXQ_USEDEFAULT ((uint32_t)-1)
@@ -270,7 +387,9 @@ typedef enum {
HAL_PKT_TYPE_ATIM = 1,
HAL_PKT_TYPE_PSPOLL = 2,
HAL_PKT_TYPE_BEACON = 3,
- HAL_PKT_TYPE_PROBE_RESP = 4
+ HAL_PKT_TYPE_PROBE_RESP = 4,
+ HAL_PKT_TYPE_CHIRP = 5,
+ HAL_PKT_TYPE_GRP_POLL = 6
} HAL_PKT_TYPE;
/* Rx Filter Frame Types */
@@ -281,17 +400,17 @@ typedef enum {
HAL_RX_FILTER_CONTROL = 0x00000008, /* Allow control frames */
HAL_RX_FILTER_BEACON = 0x00000010, /* Allow beacon frames */
HAL_RX_FILTER_PROM = 0x00000020, /* Promiscuous mode */
+ HAL_RX_FILTER_XRPOLL = 0x00000040, /* Allow XR poll frmae */
HAL_RX_FILTER_PROBEREQ = 0x00000080, /* Allow probe request frames */
HAL_RX_FILTER_PHYERR = 0x00000100, /* Allow phy errors */
HAL_RX_FILTER_PHYRADAR = 0x00000200 /* Allow phy radar errors */
} HAL_RX_FILTER;
typedef enum {
- HAL_PM_UNDEFINED = 0,
- HAL_PM_AUTO = 1,
- HAL_PM_AWAKE = 2,
- HAL_PM_FULL_SLEEP = 3,
- HAL_PM_NETWORK_SLEEP = 4
+ HAL_PM_AWAKE = 0,
+ HAL_PM_FULL_SLEEP = 1,
+ HAL_PM_NETWORK_SLEEP = 2,
+ HAL_PM_UNDEFINED = 3
} HAL_POWER_MODE;
/*
@@ -318,9 +437,17 @@ typedef enum {
HAL_INT_SWBA = 0x00010000,
HAL_INT_BMISS = 0x00040000,
HAL_INT_BNR = 0x00100000, /* Non-common mapping */
+ HAL_INT_TIM = 0x00200000, /* Non-common mapping */
+ HAL_INT_DTIM = 0x00400000, /* Non-common mapping */
+ HAL_INT_DTIMSYNC = 0x00800000, /* Non-common mapping */
HAL_INT_GPIO = 0x01000000,
+ HAL_INT_CABEND = 0x02000000, /* Non-common mapping */
HAL_INT_FATAL = 0x40000000, /* Non-common mapping */
HAL_INT_GLOBAL = INT_MIN, /* Set/clear IER */
+ HAL_INT_BMISC = HAL_INT_TIM
+ | HAL_INT_DTIM
+ | HAL_INT_DTIMSYNC
+ | HAL_INT_CABEND,
/* Interrupt bits that map directly to ISR/IMR bits */
HAL_INT_COMMON = HAL_INT_RXNOFRM
@@ -374,6 +501,10 @@ typedef enum {
typedef struct {
uint16_t channel; /* setting in Mhz */
uint16_t channelFlags; /* see below */
+ uint8_t privFlags;
+ int8_t maxRegTxPower; /* max regulatory tx power in dBm */
+ int8_t maxTxPower; /* max true tx power in 0.5 dBm */
+ int8_t minTxPower; /* min true tx power in 0.5 dBm */
} HAL_CHANNEL;
@@ -392,12 +523,16 @@ enum {
};
enum {
- HAL_MODE_11A = 0x001,
- HAL_MODE_TURBO = 0x002,
- HAL_MODE_11B = 0x004,
- HAL_MODE_PUREG = 0x008,
- HAL_MODE_11G = 0x008,
- HAL_MODE_108G = 0x020,
+ HAL_MODE_11A = 0x001, /* 11a channels */
+ HAL_MODE_TURBO = 0x002, /* 11a turbo-only channels */
+ HAL_MODE_11B = 0x004, /* 11b channels */
+ HAL_MODE_PUREG = 0x008, /* 11g channels (OFDM only) */
+ HAL_MODE_11G = 0x008, /* XXX historical */
+ HAL_MODE_108G = 0x020, /* 11g+Turbo channels */
+ HAL_MODE_108A = 0x040, /* 11a+Turbo channels */
+ HAL_MODE_XR = 0x100, /* XR channels */
+ HAL_MODE_11A_HALF_RATE = 0x200, /* 11A half rate channels */
+ HAL_MODE_11A_QUARTER_RATE = 0x400, /* 11A quarter rate channels */
HAL_MODE_ALL = 0xfff
};
@@ -425,10 +560,16 @@ typedef struct {
uint8_t rs_rates[32]; /* rates */
} HAL_RATE_SET;
+/*
+ * Antenna switch control. By default antenna selection
+ * enables multiple (2) antenna use. To force use of the
+ * A or B antenna only specify a fixed setting. Fixing
+ * the antenna will also disable any diversity support.
+ */
typedef enum {
HAL_ANT_VARIABLE = 0, /* variable by programming */
- HAL_ANT_FIXED_A = 1, /* fixed to 11a frequencies */
- HAL_ANT_FIXED_B = 2 /* fixed to 11b frequencies */
+ HAL_ANT_FIXED_A = 1, /* fixed antenna A */
+ HAL_ANT_FIXED_B = 2 /* fixed antenna B */
} HAL_ANT_SETTING;
typedef enum {
@@ -458,6 +599,7 @@ typedef enum {
} HAL_CIPHER;
enum {
+ HAL_SLOT_TIME_6 = 6, /* NB: for turbo mode */
HAL_SLOT_TIME_9 = 9,
HAL_SLOT_TIME_20 = 20
};
@@ -483,6 +625,18 @@ typedef struct {
} HAL_BEACON_STATE;
/*
+ * Like HAL_BEACON_STATE but for non-station mode setup.
+ * NB: see above flag definitions
+ */
+typedef struct {
+ uint32_t bt_intval; /* beacon interval+flags */
+ uint32_t bt_nexttbtt; /* next beacon in TU */
+ uint32_t bt_nextatim; /* next ATIM in TU */
+ uint32_t bt_nextdba; /* next DBA in 1/8th TU */
+ uint32_t bt_nextswba; /* next SWBA in 1/8th TU */
+} HAL_BEACON_TIMERS;
+
+/*
* Per-node statistics maintained by the driver for use in
* optimizing signal quality and other operational aspects.
*/
@@ -575,6 +729,7 @@ struct ath_desc {
struct ath_tx_status tx; /* xmit status */
struct ath_rx_status rx; /* recv status */
} ds_us;
+ void *ds_vdata; /* virtual addr of data buffer */
};
#pragma pack()
@@ -604,8 +759,11 @@ struct ath_hal {
uint32_t ah_macVersion; /* MAC version id */
uint16_t ah_macRev; /* MAC revision */
uint16_t ah_phyRev; /* PHY revision */
- uint16_t ah_analog5GhzRev; /* 2GHz radio revision */
- uint16_t ah_analog2GhzRev; /* 5GHz radio revision */
+ /* NB: when only one radio is present the rev is in 5Ghz */
+ uint16_t ah_analog5GhzRev; /* 5GHz radio revision */
+ uint16_t ah_analog2GhzRev; /* 2GHz radio revision */
+ /* decomp mask array */
+ uint8_t ah_decompMask[HAL_DECOMP_MASK_SIZE];
const HAL_RATE_TABLE *(*ah_getRateTable)(struct ath_hal *,
uint32_t mode);
@@ -615,11 +773,21 @@ struct ath_hal {
HAL_BOOL (*ah_reset) (struct ath_hal *, HAL_OPMODE,
HAL_CHANNEL *, HAL_BOOL bChannelChange,
HAL_STATUS *status);
- HAL_BOOL (*ah_phyDisable) (struct ath_hal *);
- void (*ah_setPCUConfig) (struct ath_hal *);
- HAL_BOOL (*ah_perCalibration) (struct ath_hal *, HAL_CHANNEL *);
+ HAL_BOOL (*ah_phyDisable) (struct ath_hal *);
+ HAL_BOOL (*ah_disable) (struct ath_hal *);
+ void (*ah_setPCUConfig) (struct ath_hal *);
+ HAL_BOOL (*ah_perCalibration) (struct ath_hal *, HAL_CHANNEL *,
+ HAL_BOOL *);
HAL_BOOL (*ah_setTxPowerLimit)(struct ath_hal *, uint32_t);
+ void (*ah_arEnable)(struct ath_hal *);
+ void (*ah_arDisable)(struct ath_hal *);
+ void (*ah_arReset)(struct ath_hal *);
+ HAL_BOOL (*ah_radarHaveEvent)(struct ath_hal *);
+ HAL_BOOL (*ah_processDfs)(struct ath_hal *, HAL_CHANNEL *);
+ uint32_t (*ah_dfsNolCheck)(struct ath_hal *, HAL_CHANNEL *, uint32_t);
+ HAL_BOOL (*ah_radarWait)(struct ath_hal *, HAL_CHANNEL *);
+
/* Transmit functions */
HAL_BOOL (*ah_updateTxTrigLevel) (struct ath_hal *,
HAL_BOOL incTrigLevel);
@@ -636,17 +804,15 @@ struct ath_hal {
uint32_t (*ah_numTxPending)(struct ath_hal *, uint32_t q);
HAL_BOOL (*ah_startTxDma) (struct ath_hal *, uint32_t);
HAL_BOOL (*ah_stopTxDma) (struct ath_hal *, uint32_t);
- HAL_BOOL (*ah_updateCTSForBursting)(struct ath_hal *,
- struct ath_desc *, struct ath_desc *,
- struct ath_desc *, struct ath_desc *,
- uint32_t, uint32_t);
HAL_BOOL (*ah_setupTxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t pktLen, uint32_t hdrLen,
HAL_PKT_TYPE type, uint32_t txPower,
uint32_t txRate0, uint32_t txTries0,
uint32_t keyIx, uint32_t antMode,
uint32_t flags, uint32_t rtsctsRate,
- uint32_t rtsctsDuration);
+ uint32_t rtsctsDuration,
+ uint32_t compicvLen, uint32_t compivLen,
+ uint32_t comp);
HAL_BOOL (*ah_setupXTxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t txRate1, uint32_t txTries1,
uint32_t txRate2, uint32_t txTries2,
@@ -656,6 +822,7 @@ struct ath_hal {
HAL_BOOL lastSeg, const struct ath_desc *);
HAL_STATUS (*ah_procTxDesc) (struct ath_hal *, struct ath_desc *);
void (*ah_getTxIntrQueue)(struct ath_hal *, uint32_t *);
+ void (*ah_reqTxIntrDesc)(struct ath_hal *, struct ath_desc *);
/* Receive Functions */
uint32_t (*ah_getRxDP) (struct ath_hal *);
@@ -675,9 +842,10 @@ struct ath_hal {
HAL_BOOL (*ah_setupRxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t size, uint32_t flags);
HAL_STATUS (*ah_procRxDesc) (struct ath_hal *, struct ath_desc *,
- uint32_t phyAddr, struct ath_desc *next);
+ uint32_t phyAddr, struct ath_desc *next,
+ uint64_t tsf);
void (*ah_rxMonitor) (struct ath_hal *,
- const HAL_NODE_STATS *);
+ const HAL_NODE_STATS *, HAL_CHANNEL *);
void (*ah_procMibEvent) (struct ath_hal *,
const HAL_NODE_STATS *);
@@ -693,6 +861,8 @@ struct ath_hal {
void **result, uint32_t *resultsize);
void (*ah_getMacAddress) (struct ath_hal *, uint8_t *);
HAL_BOOL (*ah_setMacAddress) (struct ath_hal *, const uint8_t *);
+ void (*ah_getBssIdMask)(struct ath_hal *, uint8_t *);
+ HAL_BOOL (*ah_setBssIdMask)(struct ath_hal *, const uint8_t *);
HAL_BOOL (*ah_setRegulatoryDomain) (struct ath_hal *,
uint16_t, HAL_STATUS *);
void (*ah_setLedState) (struct ath_hal *, HAL_LED_STATE);
@@ -712,13 +882,18 @@ struct ath_hal {
HAL_RFGAIN (*ah_getRfGain) (struct ath_hal *);
uint32_t (*ah_getDefAntenna) (struct ath_hal *);
void (*ah_setDefAntenna) (struct ath_hal *, uint32_t);
+ HAL_ANT_SETTING (*ah_getAntennaSwitch) (struct ath_hal *);
+ HAL_BOOL (*ah_setAntennaSwitch) (struct ath_hal *, HAL_ANT_SETTING);
HAL_BOOL (*ah_setSlotTime) (struct ath_hal *, uint32_t);
uint32_t (*ah_getSlotTime) (struct ath_hal *);
HAL_BOOL (*ah_setAckTimeout) (struct ath_hal *, uint32_t);
uint32_t (*ah_getAckTimeout) (struct ath_hal *);
+ HAL_BOOL (*ah_setAckCTSRate) (struct ath_hal *, uint32_t);
+ uint32_t (*ah_getAckCTSRate) (struct ath_hal *);
HAL_BOOL (*ah_setCTSTimeout) (struct ath_hal *, uint32_t);
uint32_t (*ah_getCTSTimeout) (struct ath_hal *);
-
+ HAL_BOOL (*ah_setDecompMask)(struct ath_hal *, uint16_t, int);
+ void (*ah_setCoverageClass)(struct ath_hal *, uint8_t, int);
/* Key Cache Functions */
uint32_t (*ah_getKeyCacheSize) (struct ath_hal *);
HAL_BOOL (*ah_resetKeyCacheEntry) (struct ath_hal *, uint16_t);
@@ -731,22 +906,19 @@ struct ath_hal {
/* Power Management Functions */
HAL_BOOL (*ah_setPowerMode) (struct ath_hal *,
- HAL_POWER_MODE mode, int setChip,
- uint16_t sleepDuration);
+ HAL_POWER_MODE mode, int setChip);
HAL_POWER_MODE (*ah_getPowerMode) (struct ath_hal *);
- HAL_BOOL (*ah_initPSPoll) (struct ath_hal *);
- HAL_BOOL (*ah_enablePSPoll) (struct ath_hal *,
- uint8_t *, uint16_t);
- HAL_BOOL (*ah_disablePSPoll) (struct ath_hal *);
+ int16_t (*ah_getChanNoise)(struct ath_hal *, HAL_CHANNEL *);
/* Beacon Management Functions */
+ void (*ah_setBeaconTimers) (struct ath_hal *,
+ const HAL_BEACON_TIMERS *);
+ /* NB: deprecated, use ah_setBeaconTimers instead */
void (*ah_beaconInit) (struct ath_hal *,
uint32_t nexttbtt, uint32_t intval);
void (*ah_setStationBeaconTimers) (struct ath_hal *,
const HAL_BEACON_STATE *);
void (*ah_resetStationBeaconTimers) (struct ath_hal *);
- HAL_BOOL (*ah_waitForBeaconDone) (struct ath_hal *,
- HAL_BUS_ADDR);
/* Interrupt functions */
HAL_BOOL (*ah_isInterruptPending) (struct ath_hal *);
@@ -779,6 +951,13 @@ extern struct ath_hal *ath_hal_attach(uint16_t devid, HAL_SOFTC,
HAL_BUS_TAG, HAL_BUS_HANDLE, HAL_STATUS *status);
/*
+ * Set the Vendor ID for Vendor SKU's which can modify the
+ * channel properties returned by ath_hal_init_channels.
+ * Return AH_TRUE if set succeeds
+ */
+extern HAL_BOOL ath_hal_setvendor(struct ath_hal *, uint32_t);
+
+/*
* Return a list of channels available for use with the hardware.
* The list is based on what the hardware is capable of, the specified
* country code, the modeSelect mask, and whether or not outdoor
@@ -791,10 +970,17 @@ extern struct ath_hal *ath_hal_attach(uint16_t devid, HAL_SOFTC,
*/
extern HAL_BOOL ath_hal_init_channels(struct ath_hal *,
HAL_CHANNEL *chans, uint32_t maxchans, uint32_t *nchans,
+ uint8_t *regclassids, uint32_t maxregids, uint32_t *nregids,
HAL_CTRY_CODE cc, uint16_t modeSelect,
HAL_BOOL enableOutdoor, HAL_BOOL enableExtendedChannels);
/*
+ * Calibrate noise floor data following a channel scan or similar.
+ * This must be called prior retrieving noise floor data.
+ */
+extern void ath_hal_process_noisefloor(struct ath_hal *ah);
+
+/*
* Return bit mask of wireless modes supported by the hardware.
*/
extern uint32_t ath_hal_getwirelessmodes(struct ath_hal *, HAL_CTRY_CODE);
@@ -813,11 +999,15 @@ extern uint16_t ath_hal_computetxtime(struct ath_hal *,
uint16_t rateix, HAL_BOOL shortPreamble);
/*
+ * Return if device is public safety.
+ */
+extern HAL_BOOL ath_hal_ispublicsafetysku(struct ath_hal *);
+
+/*
* Convert between IEEE channel number and channel frequency
* using the specified channel flags; e.g. CHANNEL_2GHZ.
*/
-extern uint32_t ath_hal_mhz2ieee(uint32_t mhz, uint32_t flags);
-extern uint32_t ath_hal_ieee2mhz(uint32_t ieee, uint32_t flags);
+extern int ath_hal_mhz2ieee(struct ath_hal *, uint32_t mhz, uint32_t flags);
/*
* Return a version string for the HAL release.
@@ -834,8 +1024,12 @@ extern const char *ath_hal_buildopts[];
*/
#define ATH_HAL_RESET(_ah, _opmode, _chan, _outdoor, _pstatus) \
((*(_ah)->ah_reset)((_ah), (_opmode), (_chan), (_outdoor), (_pstatus)))
+#define ATH_HAL_PHYDISABLE(_ah) \
+ ((*(_ah)->ah_phyDisable)((_ah)))
#define ATH_HAL_GETCAPABILITY(_ah, _cap, _param, _result) \
((*(_ah)->ah_getCapability)((_ah), (_cap), (_param), (_result)))
+#define ATH_HAL_SETCAPABILITY(_ah, _type, _cap, _param, _status) \
+ ((*ah_setCapability)((_ah), (_type), (_cap), (_param), (_status)))
#define ATH_HAL_GETREGDOMAIN(_ah, _prd) \
ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_REG_DMN, 0, (_prd))
#define ATH_HAL_GETCOUNTRYCODE(_ah, _pcc) \
@@ -856,12 +1050,12 @@ extern const char *ath_hal_buildopts[];
((*(_ah)->ah_getPendingInterrupts)((_ah), (_pmask)))
#define ATH_HAL_UPDATETXTRIGLEVEL(_ah, _inc) \
((*(_ah)->ah_updateTxTrigLevel)((_ah), (_inc)))
-#define ATH_HAL_SETPOWER(_ah, _mode, _sleepduration) \
- ((*(_ah)->ah_setPowerMode)((_ah), (_mode), AH_TRUE, (_sleepduration)))
+#define ATH_HAL_SETPOWER(_ah, _mode) \
+ ((*(_ah)->ah_setPowerMode)((_ah), (_mode), AH_TRUE))
#define ATH_HAL_KEYRESET(_ah, _ix) \
((*(_ah)->ah_resetKeyCacheEntry)((_ah), (_ix)))
-#define ATH_HAL_KEYSET(_ah, _ix, _pk) \
- ((*(_ah)->ah_setKeyCacheEntry)((_ah), (_ix), (_pk), NULL, AH_FALSE))
+#define ATH_HAL_KEYSET(_ah, _ix, _pk, _mac) \
+ ((*(_ah)->ah_setKeyCacheEntry)((_ah), (_ix), (_pk), (_mac), AH_FALSE))
#define ATH_HAL_KEYISVALID(_ah, _ix) \
(((*(_ah)->ah_isKeyCacheEntryValid)((_ah), (_ix))))
#define ATH_HAL_KEYSETMAC(_ah, _ix, _mac) \
@@ -896,8 +1090,8 @@ extern const char *ath_hal_buildopts[];
((*(_ah)->ah_startTxDma)((_ah), (_q)))
#define ATH_HAL_SETCHANNEL(_ah, _chan) \
((*(_ah)->ah_setChannel)((_ah), (_chan)))
-#define ATH_HAL_CALIBRATE(_ah, _chan) \
- ((*(_ah)->ah_perCalibration)((_ah), (_chan)))
+#define ATH_HAL_CALIBRATE(_ah, _chan, _iqcal) \
+ ((*(_ah)->ah_perCalibration)((_ah), (_chan), (_iqcal)))
#define ATH_HAL_SETLEDSTATE(_ah, _state) \
((*(_ah)->ah_setLedState)((_ah), (_state)))
#define ATH_HAL_BEACONINIT(_ah, _nextb, _bperiod) \
@@ -936,8 +1130,10 @@ extern const char *ath_hal_buildopts[];
((*(_ah)->ah_hasVEOL)((_ah)))
#define ATH_HAL_GETRFGAIN(_ah) \
((*(_ah)->ah_getRfGain)((_ah)))
-#define ATH_HAL_RXMONITOR(_ah, _arg) \
- ((*(_ah)->ah_rxMonitor)((_ah), (_arg)))
+#define ATH_HAL_RXMONITOR(_ah, _arg, _chan) \
+ ((*(_ah)->ah_rxMonitor)((_ah), (_arg), (_chan)))
+#define ATH_HAL_SETSLOTTIME(_ah, _us) \
+ ((*(_ah)->ah_setSlotTime)((_ah), (_us)))
#define ATH_HAL_SETUPBEACONDESC(_ah, _ds, _opmode, _flen, _hlen, \
_rate, _antmode) \
((*(_ah)->ah_setupBeaconDesc)((_ah), (_ds), (_opmode), \
@@ -945,13 +1141,13 @@ extern const char *ath_hal_buildopts[];
#define ATH_HAL_SETUPRXDESC(_ah, _ds, _size, _intreq) \
((*(_ah)->ah_setupRxDesc)((_ah), (_ds), (_size), (_intreq)))
#define ATH_HAL_RXPROCDESC(_ah, _ds, _dspa, _dsnext) \
- ((*(_ah)->ah_procRxDesc)((_ah), (_ds), (_dspa), (_dsnext)))
+ ((*(_ah)->ah_procRxDesc)((_ah), (_ds), (_dspa), (_dsnext), 0))
#define ATH_HAL_SETUPTXDESC(_ah, _ds, _plen, _hlen, _atype, _txpow, \
_txr0, _txtr0, _keyix, _ant, _flags, \
_rtsrate, _rtsdura) \
((*(_ah)->ah_setupTxDesc)((_ah), (_ds), (_plen), (_hlen), (_atype), \
(_txpow), (_txr0), (_txtr0), (_keyix), (_ant), \
- (_flags), (_rtsrate), (_rtsdura)))
+ (_flags), (_rtsrate), (_rtsdura), 0, 0, 0))
#define ATH_HAL_SETUPXTXDESC(_ah, _ds, \
_txr1, _txtr1, _txr2, _txtr2, _txr3, _txtr3) \
((*(_ah)->ah_setupXTxDesc)((_ah), (_ds), \
@@ -965,6 +1161,34 @@ extern const char *ath_hal_buildopts[];
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_CIPHER, _cipher, NULL) == HAL_OK)
#define ATH_HAL_TKIPSPLIT(_ah) \
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_TKIP_SPLIT, 0, NULL) == HAL_OK)
+#define ATH_HAL_HASRFSILENT(ah) \
+ (ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_RFSILENT, 0, NULL) == HAL_OK)
+#define ATH_HAL_GETRFKILL(_ah) \
+ (ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_RFSILENT, 1, NULL) == HAL_OK)
+#define ATH_HAL_SETRFKILL(_ah, _onoff) \
+ (ATH_HAL_SETCAPABILITY(_ah, HAL_CAP_RFSILENT, 1, _onoff, NULL))
+#define ATH_HAL_GETRFSILENT(_ah, _prfsilent) \
+ (ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_RFSILENT, 2, _prfsilent) == HAL_OK)
+#define ATH_HAL_SETRFSILENT(_ah, _rfsilent) \
+ (ATH_HAL_SETCAPABILITY(_ah, HAL_CAP_RFSILENT, 2, _rfsilent, NULL))
+
+#if HAL_ABI_VERSION < 0x05120700
+#define ATH_HAL_PROCESS_NOISEFLOOR(_ah)
+#define ATH_HAL_GETCHANNOISE(_ah, _c) (-96)
+#define HAL_CAP_TPC_ACK 100
+#define HAL_CAP_TPC_CTS 101
+#else
+#define ATH_HAL_GETCHANNOISE(_ah, _c) \
+ ((*(_ah)->ah_getChanNoise)((_ah), (_c)))
+#endif
+
+#if HAL_ABI_VERSION < 0x05122200
+#define HAL_TXQ_TXOKINT_ENABLE TXQ_FLAG_TXOKINT_ENABLE
+#define HAL_TXQ_TXERRINT_ENABLE TXQ_FLAG_TXERRINT_ENABLE
+#define HAL_TXQ_TXDESCINT_ENABLE TXQ_FLAG_TXDESCINT_ENABLE
+#define HAL_TXQ_TXEOLINT_ENABLE TXQ_FLAG_TXEOLINT_ENABLE
+#define HAL_TXQ_TXURNINT_ENABLE TXQ_FLAG_TXURNINT_ENABLE
+#endif
#ifdef __cplusplus
}
diff --git a/usr/src/uts/common/io/ath/ath_ieee80211.c b/usr/src/uts/common/io/ath/ath_ieee80211.c
deleted file mode 100644
index 29c0c25fd2..0000000000
--- a/usr/src/uts/common/io/ath/ath_ieee80211.c
+++ /dev/null
@@ -1,2899 +0,0 @@
-/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting
- * 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,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- * 3. Neither the names of the above-listed copyright holders nor the names
- * of any contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
- *
- */
-
-/*
- * IEEE 802.11 generic handler
- *
- * This code is derived from NetBSD code; their copyright notice follows.
- */
-
-/*
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Atsushi Onoe.
- *
- * 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
- */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/signal.h>
-#include <sys/stream.h>
-#include <sys/termio.h>
-#include <sys/errno.h>
-#include <sys/file.h>
-#include <sys/cmn_err.h>
-#include <sys/stropts.h>
-#include <sys/strsubr.h>
-#include <sys/strtty.h>
-#include <sys/kbio.h>
-#include <sys/cred.h>
-#include <sys/stat.h>
-#include <sys/consdev.h>
-#include <sys/kmem.h>
-#include <sys/modctl.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-#include <sys/pci.h>
-#include <sys/errno.h>
-#include <sys/gld.h>
-#include <sys/dlpi.h>
-#include <sys/ethernet.h>
-#include <sys/byteorder.h>
-#include <sys/proc.h>
-#include <sys/note.h>
-#include <sys/strsun.h>
-#include <sys/list.h>
-#include <sys/byteorder.h>
-#include <inet/common.h>
-#include <inet/nd.h>
-#include <inet/mi.h>
-#include <inet/wifi_ioctl.h>
-#include "ath_ieee80211.h"
-#include "ath_impl.h"
-
-#define list_empty(a) ((a)->list_head.list_next == &(a)->list_head)
-
-static const char *ieee80211_mgt_subtype_name[] = {
- "assoc_req", "assoc_resp", "reassoc_req", "reassoc_resp",
- "probe_req", "probe_resp", "reserved#6", "reserved#7",
- "beacon", "atim", "disassoc", "auth",
- "deauth", "reserved#13", "reserved#14", "reserved#15"
-};
-
-extern pri_t minclsyspri;
-
-static void
-ieee80211_unref_node(struct ieee80211_node **in)
-{
- *in = NULL;
-}
-
-static uint8_t
-ieee80211_get_rssi(struct ieee80211_node *in)
-{
- /* no recent samples, use last known value */
- return (in->in_recv_hist[in->in_hist_cur].irh_rssi);
-}
-
-static void
-ieee80211_reset_recvhist(struct ieee80211_node *in)
-{
- int i;
-
- for (i = 0; i < IEEE80211_RECV_HIST_LEN; ++i) {
- in->in_recv_hist[i].irh_jiffies = IEEE80211_JIFFIES_NONE;
- in->in_recv_hist[i].irh_rssi = 0;
- in->in_recv_hist[i].irh_rstamp = 0;
- in->in_recv_hist[i].irh_rantenna = 0;
- }
- in->in_hist_cur = IEEE80211_RECV_HIST_LEN - 1;
-}
-
-
-static void
-ieee80211_add_recvhist(struct ieee80211_node *in, uint8_t rssi,
- uint32_t rstamp, uint8_t rantenna)
-{
- if (++in->in_hist_cur >= IEEE80211_RECV_HIST_LEN)
- in->in_hist_cur = 0;
- in->in_recv_hist[in->in_hist_cur].irh_rssi = rssi;
- in->in_recv_hist[in->in_hist_cur].irh_rstamp = rstamp;
- in->in_recv_hist[in->in_hist_cur].irh_rantenna = rantenna;
-}
-
-/*
- * Convert MHz frequency to IEEE channel number.
- */
-uint32_t
-ieee80211_mhz2ieee(uint32_t freq, uint32_t flags)
-{
- if (flags & IEEE80211_CHAN_2GHZ) { /* 2GHz band */
- if (freq == 2484)
- return (14);
- if (freq < 2484)
- return ((freq - 2407) / 5);
- else
- return (15 + ((freq - 2512) / 20));
- } else if (flags & IEEE80211_CHAN_5GHZ) { /* 5Ghz band */
- return ((freq - 5000) / 5);
- } else { /* either, guess */
- if (freq == 2484)
- return (14);
- if (freq < 2484)
- return ((freq - 2407) / 5);
- if (freq < 5000)
- return (15 + ((freq - 2512) / 20));
- return ((freq - 5000) / 5);
- }
-}
-
-/*
- * Convert channel to IEEE channel number.
- */
-uint32_t
-ieee80211_chan2ieee(ieee80211com_t *isc, struct ieee80211channel *ch)
-{
- if (isc->isc_channels <= ch &&
- ch <= &isc->isc_channels[IEEE80211_CHAN_MAX])
- return (ch - isc->isc_channels);
- else if (ch == IEEE80211_CHAN_ANYC)
- return (IEEE80211_CHAN_ANY);
- else {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_chan2ieee(): "
- "invalid channel freq %u flags %x\n",
- ch->ich_freq, ch->ich_flags));
- return (0);
- }
-}
-
-/*
- * Convert IEEE channel number to MHz frequency.
- */
-uint32_t
-ieee80211_ieee2mhz(uint32_t chan, uint32_t flags)
-{
- if (flags & IEEE80211_CHAN_2GHZ) { /* 2GHz band */
- if (chan == 14)
- return (2484);
- if (chan < 14)
- return (2407 + chan * 5);
- else
- return (2512 + ((chan-15) * 20));
- } else if (flags & IEEE80211_CHAN_5GHZ) { /* 5Ghz band */
- return (5000 + (chan * 5));
- } else { /* either, guess */
- if (chan == 14)
- return (2484);
- if (chan < 14) /* 0-13 */
- return (2407 + chan * 5);
- if (chan < 27) /* 15-26 */
- return (2512 + ((chan-15) * 20));
- return (5000 + (chan * 5));
- }
-}
-
-static void
-ieee80211_free_node(ieee80211com_t *isc, struct ieee80211_node *in)
-{
- int32_t i, done;
- struct ieee80211_node *in1;
-
- /* remove in from list of isc->isc_in_list */
- list_remove(&isc->isc_in_list, in);
-
- /* remove in from list of isc->isc_inhash_list */
- done = 0;
- for (i = 0; i < IEEE80211_NODE_HASHSIZE; i++) {
- in1 = list_head(&isc->isc_inhash_list[i]);
- while (in1 != NULL) {
- if (in1 == in) {
- list_remove(&isc->isc_inhash_list[i], in);
- done = 1;
- break;
- }
- in1 = list_next(&isc->isc_inhash_list[i], in1);
- }
- if (done)
- break;
- }
-
- if (list_empty(&isc->isc_in_list))
- isc->isc_inact_timeout = 0;
- if (isc->isc_node_free != NULL)
- (*isc->isc_node_free)(isc, in);
-}
-
-/*
- * This function is only running in software interrupt thread,
- * and it will probably call back to LLD by isc_mgmt_send() or isc_new_state(),
- * to avoid recursive mutex entry, we must make sure that
- * the callers have release all LLD mutexs before calling ieee80211_input().
- */
-void
-ieee80211_input(ieee80211com_t *isc, mblk_t *mp,
- int32_t rssi, uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_node *in;
- gld_mac_info_t *gld_p = isc->isc_dev;
- struct ieee80211_frame *wh;
- void (*rh)(ieee80211com_t *, mblk_t *, int32_t, uint32_t, uint32_t);
- uint8_t dir, subtype;
- uint8_t *bssid;
- uint16_t rxseq;
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- if ((wh->ifrm_fc[0] & IEEE80211_FC0_VERSION_MASK) !=
- IEEE80211_FC0_VERSION_0) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_input(): "
- "discard pkt with wrong version"));
- goto out;
- }
-
- dir = wh->ifrm_fc[1] & IEEE80211_FC1_DIR_MASK;
-
- mutex_enter(&isc->isc_genlock);
- if (isc->isc_state != IEEE80211_S_SCAN) {
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- in = isc->isc_bss;
- if (!IEEE80211_ADDR_EQ(wh->ifrm_addr2, in->in_bssid))
- goto out_with_mutex;
- break;
- case IEEE80211_M_IBSS:
- case IEEE80211_M_AHDEMO:
- case IEEE80211_M_HOSTAP:
- if (dir == IEEE80211_FC1_DIR_NODS)
- bssid = wh->ifrm_addr3;
- else
- bssid = wh->ifrm_addr1;
- if (!IEEE80211_ADDR_EQ(bssid, isc->isc_bss->in_bssid) &&
- !IEEE80211_ADDR_EQ(bssid,
- gld_p->gldm_broadcast_addr)) {
- /* not interested in */
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_input(): other bss %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr3)));
- goto out_with_mutex;
- }
- in = ieee80211_find_node(isc, wh->ifrm_addr2);
- if (in == NULL) {
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_input(): unknown src %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2)));
- /*
- * NB: Node allocation is handled in the
- * management handling routines. Just fake
- * up a reference to the hosts's node to do
- * the stuff below.
- */
- in = isc->isc_bss;
- }
- break;
- default:
- /* catch bad values */
- break;
- }
- ieee80211_add_recvhist(in, rssi, rstamp, rantenna);
- rxseq = in->in_rxseq;
- in->in_rxseq = LE_16(*(uint16_t *)wh->ifrm_seq)
- >> IEEE80211_SEQ_SEQ_SHIFT;
- /* fragment */
- if ((wh->ifrm_fc[1] & IEEE80211_FC1_RETRY) &&
- rxseq == in->in_rxseq) {
- /* duplicate, silently discarded */
- goto out_with_mutex;
- }
- in->in_inact = 0;
- }
-
- switch (wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK) {
- case IEEE80211_FC0_TYPE_DATA:
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- if (dir != IEEE80211_FC1_DIR_FROMDS) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ",
- "ieee80211_input(): discard frame "
- "with invalid direction %x\n", dir));
- goto out_with_mutex;
- }
- if (IEEE80211_IS_MULTICAST(wh->ifrm_addr1) &&
- IEEE80211_ADDR_EQ(wh->ifrm_addr3,
- gld_p->gldm_vendor_addr)) {
- /*
- * In IEEE802.11 network, multicast packet
- * sent from me is broadcasted from AP.
- * It should be silently discarded for
- * SIMPLEX interface.
- */
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_input(): "
- "discard multicast echo\n"));
- goto out_with_mutex;
- }
- break;
- case IEEE80211_M_IBSS:
- case IEEE80211_M_AHDEMO:
- if (dir != IEEE80211_FC1_DIR_NODS)
- goto out_with_mutex;
- break;
- case IEEE80211_M_HOSTAP:
- /* need more work to support HOSTAP */
- break;
- }
-
- mutex_exit(&isc->isc_genlock);
- /* copy to listener after decrypt */
- mp = ieee80211_decap(mp);
- if (mp == NULL) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ",
- "ieee80211_input(): decapsulation failed\n"));
- goto out;
- }
- gld_recv(gld_p, mp);
- return;
-
- case IEEE80211_FC0_TYPE_MGT:
- if (dir != IEEE80211_FC1_DIR_NODS)
- goto out_with_mutex;
- if (isc->isc_opmode == IEEE80211_M_AHDEMO)
- goto out_with_mutex;
- subtype = wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
-
- /* drop uninteresting frames */
- if (isc->isc_state == IEEE80211_S_SCAN) {
- if (subtype != IEEE80211_FC0_SUBTYPE_BEACON &&
- subtype != IEEE80211_FC0_SUBTYPE_PROBE_RESP)
- goto out_with_mutex;
- } else {
- if (isc->isc_opmode != IEEE80211_M_IBSS &&
- subtype == IEEE80211_FC0_SUBTYPE_BEACON)
- goto out_with_mutex;
- }
-
- rh = isc->isc_recv_mgmt[subtype >> IEEE80211_FC0_SUBTYPE_SHIFT];
- if (rh != NULL)
- (*rh)(isc, mp, rssi, rstamp, rantenna);
- goto out_with_mutex;
-
- case IEEE80211_FC0_TYPE_CTL:
- default:
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_input(): "
- "bad type %x\n", wh->ifrm_fc[0]));
- break;
- }
-out_with_mutex:
- mutex_exit(&isc->isc_genlock);
-out:
- if (mp != NULL)
- freemsg(mp); /* free the buffer alloced in ath_rx_handler */
-}
-
-static void
-ieee80211_free_allnodes(ieee80211com_t *isc)
-{
- struct ieee80211_node *in;
-
- in = list_head(&isc->isc_in_list);
- while (in != NULL) {
- ieee80211_free_node(isc, in);
- in = list_head(&isc->isc_in_list);
- }
-}
-
-/*
- * Begin an active scan.
- */
-static void
-ieee80211_begin_scan(ieee80211com_t *isc, struct ieee80211_node *in)
-{
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_begin_scan(): begin %s scan\n",
- isc->isc_opmode != IEEE80211_M_HOSTAP ? "active" : "passive"));
-
- /*
- * Initialize the active channel set based on the set
- * of available channels and the current PHY mode.
- */
- bcopy(isc->isc_chan_active, isc->isc_chan_scan,
- sizeof (isc->isc_chan_active));
-
- /*
- * Flush any previously seen AP's. Note that this
- * assumes we don't act as both an AP and a station,
- * otherwise we'll potentially flush state of stations
- * associated with us.
- */
- ieee80211_free_allnodes(isc);
-
- clrbit(isc->isc_chan_scan, ieee80211_chan2ieee(isc, in->in_chan));
- if (isc->isc_opmode != IEEE80211_M_HOSTAP) {
- isc->isc_flags |= IEEE80211_F_ASCAN;
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_PROBE_REQ, 0);
- }
-}
-
-static void
-ieee80211_create_ibss(ieee80211com_t *isc, struct ieee80211channel *chan)
-{
- struct ieee80211_node *in;
-
- in = isc->isc_bss;
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_create_ibss(): creating ibss\n"));
- isc->isc_flags |= IEEE80211_F_SIBSS;
- in->in_chan = chan;
- in->in_rates = isc->isc_sup_rates[
- ieee80211_chan2mode(isc, in->in_chan)];
- IEEE80211_ADDR_COPY(in->in_macaddr, isc->isc_macaddr);
- IEEE80211_ADDR_COPY(in->in_bssid, isc->isc_macaddr);
-
- if (isc->isc_opmode == IEEE80211_M_IBSS)
- in->in_bssid[0] |= 0x02; /* local bit for IBSS */
- in->in_esslen = isc->isc_des_esslen;
- bcopy(isc->isc_des_essid, in->in_essid, in->in_esslen);
- ieee80211_reset_recvhist(in);
- bzero(in->in_tstamp, sizeof (in->in_tstamp));
- in->in_intval = isc->isc_lintval;
- in->in_capinfo = IEEE80211_CAPINFO_IBSS;
- if (isc->isc_flags & IEEE80211_F_WEPON)
- in->in_capinfo |= IEEE80211_CAPINFO_PRIVACY;
- if (isc->isc_phytype == IEEE80211_T_FH) {
- in->in_fhdwell = 200;
- in->in_fhindex = 1;
- }
- (void) _ieee80211_new_state(isc, IEEE80211_S_RUN, -1);
-}
-
-
-/*
- * The difference between _ieee80211_new_state() and ieee80211_new_state()
- * is the former asserts isc_genlock is already held.
- * _ieee80211_new_state() is called from Multi-func thread and GLD thread,
- * because ic_genlock is already owned at its entry in those 2 types of thread.
- * ieee80211_new_state() is just for software interrupt thread in LLD.
- *
- * Because of the reason to avoid recursive mutex entry, the caller can't hold
- * any other LLD mutexs before calling ieee80211_new_state().
- */
-int
-_ieee80211_new_state(ieee80211com_t *isc, enum ieee80211_state nstate,
- int32_t mgt)
-{
- gld_mac_info_t *gld_p = isc->isc_dev;
- struct ieee80211_node *in;
- int error, ostate;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- ostate = isc->isc_state;
- if (isc->isc_new_state) {
- error = (*isc->isc_new_state)(isc, nstate);
- if (error == EINPROGRESS)
- return (0);
- if (error != 0)
- return (error);
- }
-
- isc->isc_state = nstate;
- in = isc->isc_bss;
-
- /* state transition */
- switch (nstate) {
- case IEEE80211_S_INIT:
- switch (ostate) {
- case IEEE80211_S_INIT:
- break;
- case IEEE80211_S_RUN:
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_DISASSOC,
- IEEE80211_REASON_ASSOC_LEAVE);
- break;
- default:
- break;
- }
- case IEEE80211_S_ASSOC:
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_DEAUTH,
- IEEE80211_REASON_AUTH_LEAVE);
- break;
- default:
- break;
- }
- case IEEE80211_S_AUTH:
- case IEEE80211_S_SCAN:
- break;
- }
- isc->isc_mgt_timeout = 0;
- isc->isc_inact_timeout = 0;
- break;
- case IEEE80211_S_SCAN:
- isc->isc_flags &= ~IEEE80211_F_SIBSS;
- /* initialize bss for probe request */
- IEEE80211_ADDR_COPY(in->in_macaddr, gld_p->gldm_broadcast_addr);
- IEEE80211_ADDR_COPY(in->in_bssid, gld_p->gldm_broadcast_addr);
- in->in_rates = isc->isc_sup_rates[
- ieee80211_chan2mode(isc, in->in_chan)];
- in->in_associd = 0;
- ieee80211_reset_recvhist(in);
- switch (ostate) {
- case IEEE80211_S_INIT:
- if ((isc->isc_opmode == IEEE80211_M_HOSTAP ||
- isc->isc_opmode == IEEE80211_M_IBSS) &&
- isc->isc_des_chan != IEEE80211_CHAN_ANYC) {
- /*
- * AP operation and we already have a channel;
- * bypass the scan and startup immediately.
- * Same applies to ad-hoc mode.
- */
- ieee80211_create_ibss(isc, isc->isc_des_chan);
- } else {
- ieee80211_begin_scan(isc, in);
- }
- break;
- case IEEE80211_S_SCAN:
- /* scan next */
- if (isc->isc_flags & IEEE80211_F_ASCAN) {
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_PROBE_REQ, 0);
- }
- break;
- case IEEE80211_S_RUN:
- /* beacon miss */
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): no recent beacons"
- " from %s; rescanning\n",
- ieee80211_ether_sprintf(isc->isc_bss->in_bssid)));
- ieee80211_free_allnodes(isc);
- break;
- case IEEE80211_S_AUTH:
- case IEEE80211_S_ASSOC:
- /* timeout, restart scan */
- in = ieee80211_find_node(isc, isc->isc_bss->in_macaddr);
- if (in != NULL) {
- in->in_fails++;
- }
- ieee80211_begin_scan(isc, isc->isc_bss);
- break;
- default:
- break;
- }
- break;
- case IEEE80211_S_AUTH:
- switch (ostate) {
- case IEEE80211_S_INIT:
- ATH_DEBUG((ATH_DBG_80211, "ath(): "
- "_ieee80211_new_state(): invalid transition\n"));
- break;
- case IEEE80211_S_SCAN:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_AUTH, 1);
- break;
- case IEEE80211_S_AUTH:
- case IEEE80211_S_ASSOC:
- switch (mgt) {
- case IEEE80211_FC0_SUBTYPE_AUTH:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_AUTH, 2);
- break;
- case IEEE80211_FC0_SUBTYPE_DEAUTH:
- /* ignore and retry scan on timeout */
- break;
- }
- break;
- case IEEE80211_S_RUN:
- switch (mgt) {
- case IEEE80211_FC0_SUBTYPE_AUTH:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_AUTH, 2);
- isc->isc_state = ostate; /* stay RUN */
- break;
- case IEEE80211_FC0_SUBTYPE_DEAUTH:
- /* try to reauth */
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_AUTH, 1);
- break;
- }
- break;
- }
- break;
- case IEEE80211_S_ASSOC:
- switch (ostate) {
- case IEEE80211_S_INIT:
- case IEEE80211_S_SCAN:
- case IEEE80211_S_ASSOC:
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): invalid transition\n"));
- break;
- case IEEE80211_S_AUTH:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 0);
- break;
- case IEEE80211_S_RUN:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 1);
- break;
- }
- break;
- case IEEE80211_S_RUN:
- switch (ostate) {
- case IEEE80211_S_INIT:
- case IEEE80211_S_AUTH:
- case IEEE80211_S_RUN:
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): invalid transition\n"));
- break;
- case IEEE80211_S_SCAN: /* adhoc/hostap mode */
- case IEEE80211_S_ASSOC: /* infra mode */
- if (isc->isc_opmode == IEEE80211_M_STA)
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): "
- "associated with %s\n",
- ieee80211_ether_sprintf(in->in_bssid)));
- else
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): "
- "asynchronized with %s\n",
- ieee80211_ether_sprintf(in->in_bssid)));
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): "
- "essid %s, channel %d, start %uMb\n",
- ieee80211_essid_sprintf(in->in_essid,
- in->in_esslen),
- ieee80211_chan2ieee(isc, in->in_chan),
- IEEE80211_RATE2MBS(in->in_rates.ir_rates[
- in->in_txrate])));
- isc->isc_mgt_timeout = 0;
- break;
- }
- break;
- }
- return (0);
-}
-
-int
-ieee80211_new_state(ieee80211com_t *isc, enum ieee80211_state nstate,
- int32_t mgt)
-{
- int result;
-
- mutex_enter(&isc->isc_genlock);
- result = _ieee80211_new_state(isc, nstate, mgt);
- mutex_exit(&isc->isc_genlock);
-
- return (result);
-}
-
-static void
-ieee80211_timeout_nodes(ieee80211com_t *isc)
-{
- struct ieee80211_node *in, *nextbs;
-
- for (in = list_head(&isc->isc_in_list); in != NULL; ) {
- if (++in->in_inact <= IEEE80211_INACT_MAX) {
- in = list_next(&isc->isc_in_list, in);
- continue;
- }
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "station %s timed out due to inactivity"
- " (%u secs)\n", ieee80211_ether_sprintf(in->in_macaddr),
- in->in_inact));
- nextbs = list_next(&isc->isc_in_list, in);
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_DEAUTH,
- IEEE80211_REASON_AUTH_EXPIRE);
- ieee80211_free_node(isc, in);
- in = nextbs;
- }
- if (!list_empty(&isc->isc_in_list))
- isc->isc_inact_timeout = IEEE80211_INACT_WAIT;
-}
-
-int
-ieee80211_mgmt_output(ieee80211com_t *isc, struct ieee80211_node *in,
- mblk_t *mp, int type)
-{
- struct ieee80211_frame *wh;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- ASSERT(in != NULL);
-
- in->in_inact = 0;
- mp->b_rptr -= sizeof (struct ieee80211_frame);
- wh = (struct ieee80211_frame *)mp->b_rptr;
- wh->ifrm_fc[0] = IEEE80211_FC0_VERSION_0 |
- IEEE80211_FC0_TYPE_MGT | type;
- wh->ifrm_fc[1] = IEEE80211_FC1_DIR_NODS;
- *(uint16_t *)wh->ifrm_dur = 0;
- *(uint16_t *)wh->ifrm_seq =
- LE_16(in->in_txseq << IEEE80211_SEQ_SEQ_SHIFT);
- in->in_txseq++;
- IEEE80211_ADDR_COPY(wh->ifrm_addr1, in->in_macaddr);
- IEEE80211_ADDR_COPY(wh->ifrm_addr2, isc->isc_macaddr);
- IEEE80211_ADDR_COPY(wh->ifrm_addr3, in->in_bssid);
-
- (void) (*isc->isc_mgmt_send)(isc, mp);
- return (0);
-}
-
-mblk_t *
-ieee80211_fill_header(ieee80211com_t *isc, mblk_t *mp_gld,
- int32_t wep_txkey, struct ieee80211_node *in)
-{
- struct ieee80211_frame *wh;
- struct ieee80211_llc *llc;
- struct ether_header *eh;
- mblk_t *mp_header;
- uint32_t iv;
- uint8_t *ivp;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- /*
- * Alloc a new mblk struct for the whole IEEE80211 header.
- */
- if ((mp_header = allocb(HEADERSPACE, BPRI_MED)) == NULL) {
- ath_problem("ath: ieee80211_encap(): can't alloc mblk!\n");
- return (NULL);
- }
- mp_header->b_wptr = mp_header->b_rptr +
- sizeof (struct ieee80211_frame);
-
- eh = (struct ether_header *)mp_gld->b_rptr;
-
- /*
- * Fill 802.11 field.
- */
- wh = (struct ieee80211_frame *)mp_header->b_rptr;
- wh->ifrm_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_DATA;
- *(uint16_t *)wh->ifrm_dur = 0;
- *(uint16_t *)wh->ifrm_seq =
- LE_16(in->in_txseq << IEEE80211_SEQ_SEQ_SHIFT);
- in->in_txseq++;
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- wh->ifrm_fc[1] = IEEE80211_FC1_DIR_TODS;
- IEEE80211_ADDR_COPY(wh->ifrm_addr1, in->in_bssid);
- IEEE80211_ADDR_COPY(wh->ifrm_addr2,
- eh->ether_shost.ether_addr_octet);
- IEEE80211_ADDR_COPY(wh->ifrm_addr3,
- eh->ether_dhost.ether_addr_octet);
- break;
- case IEEE80211_M_IBSS:
- case IEEE80211_M_AHDEMO:
- wh->ifrm_fc[1] = IEEE80211_FC1_DIR_NODS;
- IEEE80211_ADDR_COPY(wh->ifrm_addr1,
- eh->ether_dhost.ether_addr_octet);
- IEEE80211_ADDR_COPY(wh->ifrm_addr2,
- eh->ether_shost.ether_addr_octet);
- IEEE80211_ADDR_COPY(wh->ifrm_addr3, in->in_bssid);
- break;
- case IEEE80211_M_HOSTAP:
- wh->ifrm_fc[1] = IEEE80211_FC1_DIR_FROMDS;
- IEEE80211_ADDR_COPY(wh->ifrm_addr1,
- eh->ether_dhost.ether_addr_octet);
- IEEE80211_ADDR_COPY(wh->ifrm_addr2, in->in_bssid);
- IEEE80211_ADDR_COPY(wh->ifrm_addr3,
- eh->ether_shost.ether_addr_octet);
- break;
- }
-
- if (isc->isc_flags & IEEE80211_F_WEPON) {
- wh->ifrm_fc[1] |= IEEE80211_FC1_WEP;
- ivp = mp_header->b_rptr + sizeof (struct ieee80211_frame);
- /*
- * IV must not duplicate during the lifetime of the key.
- * But no mechanism to renew keys is defined in IEEE 802.11
- * WEP. And IV may be duplicated between other stations
- * because of the session key itself is shared.
- * So we use pseudo random IV for now, though it is not the
- * right way.
- */
- iv = isc->isc_iv;
- /*
- * Skip 'bad' IVs from Fluhrer/Mantin/Shamir:
- * (B, 255, N) with 3 <= B < 8
- */
- if ((iv & 0xff00) == 0xff00) {
- int B = (iv & 0xff0000) >> 16;
- if (3 <= B && B < 16)
- iv = (B+1) << 16;
- }
- isc->isc_iv = iv + 1;
-
-#ifdef ATH_HOST_BIG_ENDIAN
- ivp[0] = iv >> 0;
- ivp[1] = iv >> 8;
- ivp[2] = iv >> 16;
-#else
- ivp[2] = iv >> 0;
- ivp[1] = iv >> 8;
- ivp[0] = iv >> 16;
-#endif /* ATH_HOST_BIG_ENDIAN */
-
- /* Key ID and pad */
- ivp[IEEE80211_WEP_IVLEN] = wep_txkey << 6;
- /*
- * The ICV length must be included into hdrlen and pktlen.
- */
- mp_header->b_wptr +=
- IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN;
- }
-
- /*
- * CRC are added by H/W, not encaped by driver,
- * but we must count it in pkt length.
- */
-
- /*
- * fill LLC and SNAP fields.
- */
- llc = (struct ieee80211_llc *)mp_header->b_wptr;
- llc->illc_dsap = LLC_DSAP;
- llc->illc_ssap = LLC_SSAP;
- llc->illc_control = LLC_CONTROL;
- llc->illc_oc[0] = SNAP_OC0;
- llc->illc_oc[1] = SNAP_OC1;
- llc->illc_oc[2] = SNAP_OC2;
- llc->illc_ether_type = eh->ether_type;
- mp_header->b_wptr += sizeof (struct ieee80211_llc);
-
- return (mp_header);
-}
-
-mblk_t *
-ieee80211_decap(mblk_t *mp)
-{
- struct ether_header *eh;
- struct ieee80211_frame wh;
- struct ieee80211_llc *llc;
-
- if ((mp->b_wptr - mp->b_rptr) < (sizeof (wh) + sizeof (*llc))) {
- freemsg(mp);
- return (NULL);
- }
-
- bcopy(mp->b_rptr, &wh, sizeof (struct ieee80211_frame));
- mp->b_rptr += sizeof (struct ieee80211_frame);
- llc = (struct ieee80211_llc *)mp->b_rptr;
-
- if (llc->illc_dsap == LLC_DSAP && llc->illc_ssap == LLC_SSAP &&
- llc->illc_control == LLC_CONTROL && llc->illc_oc[0] == SNAP_OC0 &&
- llc->illc_oc[1] == SNAP_OC1 && llc->illc_oc[2] == SNAP_OC2) {
- mp->b_rptr += sizeof (struct ieee80211_llc);
- llc = NULL;
- }
- /*
- * we are sure that the size of ieee80211_frame plus llc is
- * larger than the size of ether_header,
- * so there has enough space to encap ether_header in this mblk.
- */
- mp->b_rptr -= sizeof (struct ether_header);
- eh = (struct ether_header *)mp->b_rptr;
- switch (wh.ifrm_fc[1] & IEEE80211_FC1_DIR_MASK) {
- case IEEE80211_FC1_DIR_NODS:
- IEEE80211_ADDR_COPY(eh->ether_dhost.ether_addr_octet,
- wh.ifrm_addr1);
- IEEE80211_ADDR_COPY(eh->ether_shost.ether_addr_octet,
- wh.ifrm_addr2);
- break;
- case IEEE80211_FC1_DIR_TODS:
- IEEE80211_ADDR_COPY(eh->ether_dhost.ether_addr_octet,
- wh.ifrm_addr3);
- IEEE80211_ADDR_COPY(eh->ether_shost.ether_addr_octet,
- wh.ifrm_addr2);
- break;
- case IEEE80211_FC1_DIR_FROMDS:
- IEEE80211_ADDR_COPY(eh->ether_dhost.ether_addr_octet,
- wh.ifrm_addr1);
- IEEE80211_ADDR_COPY(eh->ether_shost.ether_addr_octet,
- wh.ifrm_addr3);
- break;
- case IEEE80211_FC1_DIR_DSTODS:
- /* not yet supported */
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_decap(): DS to DS\n"));
- freemsg(mp);
- return (NULL);
- }
-
- if (llc != NULL)
- eh->ether_type = htons(mp->b_wptr - mp->b_rptr - sizeof (*eh));
-
- return (mp);
-}
-
-/*
- * This function doesn't need mutex protection.
- */
-void
-ieee80211_dump_pkt(uint8_t *buf, int32_t len, int32_t rate, int32_t rssi)
-{
- struct ieee80211_frame *wh;
- int32_t i;
- int8_t buf1[100], buf2[25];
-
- bzero(buf1, sizeof (buf1));
- bzero(buf2, sizeof (buf2));
- wh = (struct ieee80211_frame *)buf;
- switch (wh->ifrm_fc[1] & IEEE80211_FC1_DIR_MASK) {
- case IEEE80211_FC1_DIR_NODS:
- (void) sprintf(buf2, "NODS %s",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "->%s",
- ieee80211_ether_sprintf(wh->ifrm_addr1));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "(%s)",
- ieee80211_ether_sprintf(wh->ifrm_addr3));
- (void) strcat(buf1, buf2);
- break;
- case IEEE80211_FC1_DIR_TODS:
- (void) sprintf(buf2, "TODS %s",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "->%s",
- ieee80211_ether_sprintf(wh->ifrm_addr3));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "(%s)",
- ieee80211_ether_sprintf(wh->ifrm_addr1));
- (void) strcat(buf1, buf2);
- break;
- case IEEE80211_FC1_DIR_FROMDS:
- (void) sprintf(buf2, "FRDS %s",
- ieee80211_ether_sprintf(wh->ifrm_addr3));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "->%s",
- ieee80211_ether_sprintf(wh->ifrm_addr1));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "(%s)",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- (void) strcat(buf1, buf2);
- break;
- case IEEE80211_FC1_DIR_DSTODS:
- (void) sprintf(buf2, "DSDS %s",
- ieee80211_ether_sprintf((uint8_t *)&wh[1]));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "->%s ",
- ieee80211_ether_sprintf(wh->ifrm_addr3));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "%s",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "->%s",
- ieee80211_ether_sprintf(wh->ifrm_addr1));
- (void) strcat(buf1, buf2);
- break;
- }
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_dump_pkt(): %s", buf1));
- bzero(buf1, sizeof (buf1));
-
- switch (wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK) {
- case IEEE80211_FC0_TYPE_DATA:
- (void) sprintf(buf2, "data");
- break;
- case IEEE80211_FC0_TYPE_MGT:
- (void) sprintf(buf2, "%s",
- ieee80211_mgt_subtype_name[
- (wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK)
- >> IEEE80211_FC0_SUBTYPE_SHIFT]);
- break;
- default:
- (void) sprintf(buf2, "type#%d",
- wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK);
- break;
- }
- (void) strcat(buf1, buf2);
- if (wh->ifrm_fc[1] & IEEE80211_FC1_WEP) {
- (void) sprintf(buf2, " WEP");
- (void) strcat(buf1, buf2);
- }
- if (rate >= 0) {
- (void) sprintf(buf2, " %dM", rate / 2);
- (void) strcat(buf1, buf2);
- }
- if (rssi >= 0) {
- (void) sprintf(buf2, " +%d", rssi);
- (void) strcat(buf1, buf2);
- }
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_dump_pkt(): %s", buf1));
- bzero(buf1, sizeof (buf1));
-
- if (len > 0) {
- for (i = 0; i < (len > 40 ? 40 : len); i++) {
- if ((i & 0x03) == 0)
- (void) strcat(buf1, " ");
- (void) sprintf(buf2, "%02x", buf[i]);
- (void) strcat(buf1, buf2);
- }
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_dump_pkt(): %s",
- buf1));
- }
-}
-
-/*
- * Mark the basic rates for the 11g rate table based on the
- * operating mode. For real 11g we mark all the 11b rates
- * and 6, 12, and 24 OFDM. For 11b compatibility we mark only
- * 11b rates. There's also a pseudo 11a-mode used to mark only
- * the basic OFDM rates.
- */
-static void
-ieee80211_set11gbasicrates(struct ieee80211_rateset *rs,
- enum ieee80211_phymode mode)
-{
- static const struct ieee80211_rateset basic[] = {
- { 3, { 12, 24, 48 } }, /* IEEE80211_MODE_11A */
- { 4, { 2, 4, 11, 22 } }, /* IEEE80211_MODE_11B */
- { 7, { 2, 4, 11, 22, 12, 24, 48 } }, /* IEEE80211_MODE_11G */
- { 0 }, /* IEEE80211_MODE_TURBO */
- };
- int32_t i, j;
-
- for (i = 0; i < rs->ir_nrates; i++) {
- rs->ir_rates[i] &= IEEE80211_RATE_VAL;
- for (j = 0; j < basic[mode].ir_nrates; j++)
- if (basic[mode].ir_rates[j] == rs->ir_rates[i]) {
- rs->ir_rates[i] |= IEEE80211_RATE_BASIC;
- break;
- }
- }
-}
-
-/*
- * Set the current phy mode and recalculate the active channel
- * set based on the available channels for this mode. Also
- * select a new default/current channel if the current one is
- * inappropriate for this mode.
- */
-static int
-ieee80211_setmode(ieee80211com_t *isc, enum ieee80211_phymode mode)
-{
- static const uint32_t chanflags[] = {
- 0, /* IEEE80211_MODE_AUTO */
- IEEE80211_CHAN_A, /* IEEE80211_MODE_11A */
- IEEE80211_CHAN_B, /* IEEE80211_MODE_11B */
- IEEE80211_CHAN_PUREG, /* IEEE80211_MODE_11G */
- IEEE80211_CHAN_T, /* IEEE80211_MODE_TURBO */
- };
- struct ieee80211channel *ch;
- uint32_t modeflags;
- int32_t i;
-
- /* validate new mode */
- if ((isc->isc_modecaps & (1 << mode)) == 0) {
- ath_problem("ath: ieee80211_setmode(): mode %u not supported"
- " (caps 0x%x)\n", mode, isc->isc_modecaps);
- return (EINVAL);
- }
-
- /*
- * Verify at least one channel is present in the available
- * channel list before committing to the new mode.
- */
- ASSERT(mode < ATH_N(chanflags));
-
- modeflags = chanflags[mode];
- /* isc_channels size is IEEE80211_CHAN_MAX + 1, so no problem */
- for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
- ch = &isc->isc_channels[i];
- if (mode == IEEE80211_MODE_AUTO) {
- /* ignore turbo channels for autoselect */
- if ((ch->ich_flags & ~IEEE80211_CHAN_TURBO) != 0)
- break;
- } else {
- if ((ch->ich_flags & modeflags) == modeflags)
- break;
- }
- }
- if (i > IEEE80211_CHAN_MAX) {
- ath_problem("ath: ieee80211_setmode(): "
- "no channel found for mode %u\n", mode);
- return (EINVAL);
- }
-
- /*
- * Calculate the active channel set.
- */
- bzero(isc->isc_chan_active, sizeof (isc->isc_chan_active));
- for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
- ch = &isc->isc_channels[i];
- if (mode == IEEE80211_MODE_AUTO) {
- /* take anything but pure turbo channels */
- if ((ch->ich_flags & ~IEEE80211_CHAN_TURBO) != 0)
- setbit(isc->isc_chan_active, i);
- } else {
- if ((ch->ich_flags & modeflags) == modeflags)
- setbit(isc->isc_chan_active, i);
- }
- }
- /*
- * If no current/default channel is setup or the current
- * channel is wrong for the mode then pick the first
- * available channel from the active list. This is likely
- * not the right one.
- */
- if (isc->isc_ibss_chan == NULL ||
- isclr(isc->isc_chan_active,
- ieee80211_chan2ieee(isc, isc->isc_ibss_chan))) {
- for (i = 0; i <= IEEE80211_CHAN_MAX; i++)
- if (isset(isc->isc_chan_active, i)) {
- isc->isc_ibss_chan = &isc->isc_channels[i];
- break;
- }
- }
-
- /*
- * Set/reset state flags that influence beacon contents, etc.
- */
-
- if (isc->isc_caps & IEEE80211_C_SHPREAMBLE)
- isc->isc_flags |= IEEE80211_F_SHPREAMBLE;
- if (mode == IEEE80211_MODE_11G) {
- if (isc->isc_caps & IEEE80211_C_SHSLOT)
- isc->isc_flags |= IEEE80211_F_SHSLOT;
- ieee80211_set11gbasicrates(&isc->isc_sup_rates[mode],
- IEEE80211_MODE_11G);
- } else {
- isc->isc_flags &= ~(IEEE80211_F_SHSLOT);
- }
-
- /*
- * Setup an initial rate set according to the
- * current/default channel. This will be changed
- * when scanning but must exist now so drivers have
- * consistent state of ic_ibss_chan.
- */
- if (isc->isc_bss)
- isc->isc_bss->in_rates = isc->isc_sup_rates[mode];
- isc->isc_curmode = mode;
-
- return (0);
-}
-
-/*
- * If (its return value & IEEE80211_RATE_BASIC != 0),
- * the rate negotiation or fix rate is failed.
- */
-static int
-ieee80211_fix_rate(ieee80211com_t *isc,
- struct ieee80211_node *in, int32_t flags)
-{
- int32_t i, j, ignore, error;
- int32_t okrate, badrate;
- struct ieee80211_rateset *srs, *nrs;
- uint8_t r;
-
- error = 0;
- okrate = badrate = 0;
- srs = &isc->isc_sup_rates[ieee80211_chan2mode(isc, in->in_chan)];
- nrs = &in->in_rates;
- for (i = 0; i < in->in_rates.ir_nrates; ) {
- ignore = 0;
- if (flags & IEEE80211_F_DOSORT) {
- /*
- * Sort rates.
- */
- for (j = i + 1; j < nrs->ir_nrates; j++) {
- if (IEEE80211_RV(nrs->ir_rates[i]) >
- IEEE80211_RV(nrs->ir_rates[j])) {
- r = nrs->ir_rates[i];
- nrs->ir_rates[i] = nrs->ir_rates[j];
- nrs->ir_rates[j] = r;
- }
- }
- }
- r = nrs->ir_rates[i] & IEEE80211_RATE_VAL;
- badrate = r;
- if (flags & IEEE80211_F_DOFRATE) {
- /*
- * Apply fixed rate constraint. Note that we do
- * not apply the constraint to basic rates as
- * otherwise we may not be able to associate if
- * the rate set we submit to the AP is invalid
- * (e.g. fix rate at 36Mb/s which is not a basic
- * rate for 11a operation).
- */
- if ((nrs->ir_rates[i] & IEEE80211_RATE_BASIC) == 0 &&
- isc->isc_fixed_rate >= 0 &&
- r != IEEE80211_RV(srs->ir_rates
- [isc->isc_fixed_rate]))
- ignore++;
- }
- if (flags & IEEE80211_F_DONEGO) {
- /*
- * Check against supported rates.
- */
- for (j = 0; j < srs->ir_nrates; j++) {
- if (r == IEEE80211_RV(srs->ir_rates[j]))
- break;
- }
- if (j == srs->ir_nrates) {
- if (nrs->ir_rates[i] & IEEE80211_RATE_BASIC)
- error++;
- ignore++;
- }
- }
- if (flags & IEEE80211_F_DODEL) {
- /*
- * Delete unacceptable rates.
- */
- if (ignore) {
- nrs->ir_nrates--;
- for (j = i; j < nrs->ir_nrates; j++)
- nrs->ir_rates[j] = nrs->ir_rates[j + 1];
- nrs->ir_rates[j] = 0;
- continue;
- }
- }
- if (!ignore)
- okrate = nrs->ir_rates[i];
- i++;
- }
- if (okrate == 0 || error != 0)
- return (badrate | IEEE80211_RATE_BASIC);
- else
- return (IEEE80211_RV(okrate));
-}
-
-/*
- * Complete a scan of potential channels.
- */
-static void
-ieee80211_end_scan(ieee80211com_t *isc)
-{
- struct ieee80211_node *in, *selbs;
- uint8_t rate;
- int32_t fail;
-
- ASSERT(isc->isc_state == IEEE80211_S_SCAN);
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- isc->isc_flags &= ~IEEE80211_F_ASCAN;
- cv_broadcast(&isc->isc_scan_cv);
- in = list_head(&isc->isc_in_list);
-
- if (in == NULL) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_end_scan(): "
- "no scan candidate\n"));
-notfound:
- if (isc->isc_opmode == IEEE80211_M_IBSS &&
- (isc->isc_flags & IEEE80211_F_IBSSON) &&
- isc->isc_des_esslen != 0) {
- ieee80211_create_ibss(isc, isc->isc_ibss_chan);
- return;
- }
- mutex_exit(&isc->isc_genlock);
- delay(drv_usectohz(200000));
- mutex_enter(&isc->isc_genlock);
- ieee80211_begin_scan(isc, isc->isc_bss);
- return;
- }
-
- selbs = NULL;
- for (; in != NULL; in = list_next(&isc->isc_in_list, in)) {
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_end_scan(): isc_bss->in_bssid=%s",
- ieee80211_ether_sprintf(in->in_bssid)));
- if (in->in_fails) {
- /*
- * The configuration of the access points may change
- * during my scan. So delete the entry for the AP
- * and retry to associate if there is another beacon.
- */
- if (in->in_fails++ > 2)
- ieee80211_free_node(isc, in);
- continue;
- }
- fail = 0;
- if (in->in_chan == NULL || in->in_chan->ich_flags == 0)
- fail |= 0x01;
- if (isc->isc_des_chan !=
- (struct ieee80211channel *)IEEE80211_CHAN_ANY &&
- in->in_chan != isc->isc_des_chan)
- fail |= 0x01;
- if (isc->isc_opmode == IEEE80211_M_IBSS) {
- if ((in->in_capinfo & IEEE80211_CAPINFO_IBSS) == 0)
- fail |= 0x02;
- } else {
- if ((in->in_capinfo & IEEE80211_CAPINFO_ESS) == 0)
- fail |= 0x02;
- }
-
- if (isc->isc_flags & IEEE80211_F_WEPON) {
- if ((in->in_capinfo & IEEE80211_CAPINFO_PRIVACY) == 0)
- fail |= 0x04;
- } else {
- if (in->in_capinfo & IEEE80211_CAPINFO_PRIVACY)
- fail |= 0x04;
- }
-
- rate = ieee80211_fix_rate(isc, in, IEEE80211_F_DONEGO);
- if (rate & IEEE80211_RATE_BASIC)
- fail |= 0x08;
- if (isc->isc_des_esslen != 0 &&
- (in->in_esslen != isc->isc_des_esslen ||
- bcmp(in->in_essid, isc->isc_des_essid,
- isc->isc_des_esslen) != 0))
- fail |= 0x10;
- if ((isc->isc_flags & IEEE80211_F_DESBSSID) &&
- !IEEE80211_ADDR_EQ(isc->isc_des_bssid, in->in_bssid))
- fail |= 0x20;
- if (!fail) {
- if (selbs == NULL)
- selbs = in;
- else if (ieee80211_get_rssi(in) >
- ieee80211_get_rssi(selbs))
- selbs = in;
- }
- }
- if (selbs == NULL)
- goto notfound;
- bcopy(selbs, isc->isc_bss, sizeof (struct ieee80211_node));
- if (isc->isc_opmode == IEEE80211_M_IBSS) {
- (void) ieee80211_fix_rate(isc, isc->isc_bss,
- IEEE80211_F_DOFRATE | IEEE80211_F_DONEGO |
- IEEE80211_F_DODEL);
- if (isc->isc_bss->in_rates.ir_nrates == 0) {
- selbs->in_fails++;
- goto notfound;
- }
- (void) _ieee80211_new_state(isc, IEEE80211_S_RUN, -1);
- } else
- (void) _ieee80211_new_state(isc, IEEE80211_S_AUTH, -1);
-}
-
-
-/*
- * Switch to the next channel marked for scanning.
- * This one is only called by multi-func thread.
- */
-static void
-ieee80211_next_scan(ieee80211com_t *isc)
-{
- struct ieee80211channel *chan;
-
- ASSERT(isc->isc_state == IEEE80211_S_SCAN);
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- chan = isc->isc_bss->in_chan;
- for (;;) {
- if (++chan > &isc->isc_channels[IEEE80211_CHAN_MAX])
- chan = &isc->isc_channels[0];
- if (isset(isc->isc_chan_scan, ieee80211_chan2ieee(isc, chan))) {
- /*
- * Honor channels marked passive-only
- * during an active scan.
- */
- if ((isc->isc_flags & IEEE80211_F_ASCAN) == 0 ||
- (chan->ich_flags & IEEE80211_CHAN_PASSIVE) == 0)
- break;
- }
- if (chan == isc->isc_bss->in_chan) {
- ieee80211_end_scan(isc);
- return;
- }
- }
- clrbit(isc->isc_chan_scan, ieee80211_chan2ieee(isc, chan));
-
- isc->isc_bss->in_chan = chan;
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
-}
-
-
-static void
-ieee80211_setup_node(ieee80211com_t *isc,
- struct ieee80211_node *in, uint8_t *macaddr)
-{
- int32_t hash;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- IEEE80211_ADDR_COPY(in->in_macaddr, macaddr);
- hash = IEEE80211_NODE_HASH(macaddr);
- list_insert_tail(&isc->isc_in_list, in);
- list_insert_tail(&isc->isc_inhash_list[hash], in);
- /*
- * Note we don't enable the inactive timer when acting
- * as a station. Nodes created in this mode represent
- * AP's identified while scanning. If we time them out
- * then several things happen: we can't return the data
- * to users to show the list of AP's we encountered, and
- * more importantly, we'll incorrectly deauthenticate
- * ourself because the inactivity timer will kick us off.
- */
- if (isc->isc_opmode != IEEE80211_M_STA)
- isc->isc_inact_timeout = IEEE80211_INACT_WAIT;
-}
-
-static struct ieee80211_node *
-ieee80211_alloc_node(ieee80211com_t *isc, uint8_t *macaddr)
-{
- struct ieee80211_node *in = (*isc->isc_node_alloc)(isc);
- bzero(in, sizeof (struct ieee80211_node));
- ieee80211_setup_node(isc, in, macaddr);
- return (in);
-}
-
-static struct ieee80211_node *
-ieee80211_dup_bss(ieee80211com_t *isc, uint8_t *macaddr)
-{
- struct ieee80211_node *in;
-
- in = kmem_zalloc(sizeof (struct ieee80211_node), KM_SLEEP);
- ieee80211_setup_node(isc, in, macaddr);
- return (in);
-}
-
-/*
- * Find a node state block given the mac address. Note that
- * this returns the first node found with the mac address.
- */
-struct ieee80211_node *
-ieee80211_find_node(ieee80211com_t *isc, uint8_t *macaddr)
-{
- struct ieee80211_node *in;
- int32_t hash;
-
- hash = IEEE80211_NODE_HASH(macaddr);
- in = list_head(&isc->isc_inhash_list[hash]);
- while (in != NULL) {
- if (IEEE80211_ADDR_EQ(in->in_macaddr, macaddr))
- break;
- in = list_next(&isc->isc_inhash_list[hash], in);
- }
- return (in);
-}
-
-/*
- * Like find but search based on the channel too.
- */
-struct ieee80211_node *
-ieee80211_lookup_node(ieee80211com_t *isc, uint8_t *macaddr,
- struct ieee80211channel *chan)
-{
- struct ieee80211_node *in;
- int32_t hash;
-
- hash = IEEE80211_NODE_HASH(macaddr);
- in = list_head(&isc->isc_inhash_list[hash]);
- while (in != NULL) {
- if (IEEE80211_ADDR_EQ(in->in_macaddr, macaddr) &&
- (in->in_chan == chan))
- break;
- in = list_next(&isc->isc_inhash_list[hash], in);
- }
- return (in);
-}
-
-
-
-/*
- * Install received rate set information in the node's state block.
- * If (its return value & IEEE80211_RATE_BASIC != 0),
- * the rate negotiation or fix rate is failed.
- */
-static int32_t
-ieee80211_setup_rates(ieee80211com_t *isc, struct ieee80211_node *in,
- uint8_t *rates, uint8_t *xrates, int32_t flags)
-{
- struct ieee80211_rateset *rs = &in->in_rates;
-
- bzero(rs, sizeof (*rs));
- rs->ir_nrates = rates[1];
- bcopy(rates + 2, rs->ir_rates, rs->ir_nrates);
- if (xrates != NULL) {
- uint8_t nxrates;
- /*
- * Tack on 11g extended supported rate element.
- */
- nxrates = xrates[1];
- if (rs->ir_nrates + nxrates > IEEE80211_RATE_MAXSIZE) {
- nxrates = IEEE80211_RATE_MAXSIZE - rs->ir_nrates;
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_setup_rates(): extended rate set"
- " too large; only using %u of %u rates\n",
- nxrates, xrates[1]));
- }
- bcopy(xrates + 2, rs->ir_rates + rs->ir_nrates, nxrates);
- rs->ir_nrates += nxrates;
- }
- return (ieee80211_fix_rate(isc, in, flags));
-}
-
-
-/*
- * Misc management frame encapsulation functions.
- */
-static uint8_t *
-ieee80211_add_rates(uint8_t *frm, const struct ieee80211_rateset *rs)
-{
- int32_t nrates;
-
- *frm++ = IEEE80211_ELEMID_RATES;
- nrates = rs->ir_nrates;
- if (nrates > IEEE80211_RATE_SIZE)
- nrates = IEEE80211_RATE_SIZE;
- *frm++ = nrates;
- bcopy(rs->ir_rates, frm, nrates);
- return (frm + nrates);
-}
-
-static uint8_t *
-ieee80211_add_xrates(uint8_t *frm, const struct ieee80211_rateset *rs)
-{
- /*
- * Add an extended supported rates element if operating in 11g mode.
- */
- if (rs->ir_nrates > IEEE80211_RATE_SIZE) {
- int32_t nrates = rs->ir_nrates - IEEE80211_RATE_SIZE;
- *frm++ = IEEE80211_ELEMID_XRATES;
- *frm++ = nrates;
- bcopy(rs->ir_rates + IEEE80211_RATE_SIZE, frm, nrates);
- frm += nrates;
- }
- return (frm);
-}
-
-static uint8_t *
-ieee80211_add_ssid(uint8_t *frm, const uint8_t *ssid, uint32_t len)
-{
- *frm++ = IEEE80211_ELEMID_SSID;
- *frm++ = len;
- bcopy(ssid, frm, len);
- return (frm + len);
-}
-
-/*
- * Following functions are responsible for management frame encapsulation.
- */
-static int32_t
-ieee80211_send_prreq(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t dummy)
-{
- int32_t ret, pktlen;
- mblk_t *mp;
- uint8_t *frm;
- enum ieee80211_phymode mode;
-
- _NOTE(ARGUNUSED(dummy));
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- /*
- * prreq frame format
- * [tlv] ssid
- * [tlv] supported rates
- * [tlv] extended supported rates
- */
- pktlen = sizeof (struct ieee80211_frame) +
- 2 + isc->isc_des_esslen +
- 2 + IEEE80211_RATE_SIZE +
- 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_prreq(): no space\n");
- return (ENOMEM);
- }
- mp->b_rptr += sizeof (struct ieee80211_frame);
-
- frm = mp->b_rptr;
- frm = ieee80211_add_ssid(frm, isc->isc_des_essid, isc->isc_des_esslen);
- mode = ieee80211_chan2mode(isc, in->in_chan);
- frm = ieee80211_add_rates(frm, &isc->isc_sup_rates[mode]);
- frm = ieee80211_add_xrates(frm, &isc->isc_sup_rates[mode]);
- mp->b_wptr = frm;
-
- ret = ieee80211_mgmt_output(isc, in, mp, type);
- isc->isc_mgt_timeout = IEEE80211_TRANS_WAIT;
-
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_send_prreq() "
- "channel=%u\n", ieee80211_chan2ieee(isc, in->in_chan)));
-
- return (ret);
-}
-
-static int32_t
-ieee80211_send_prresp(ieee80211com_t *isc, struct ieee80211_node *bs0,
- int32_t type, int32_t dummy)
-{
- mblk_t *mp;
- uint8_t *frm;
- struct ieee80211_node *in = isc->isc_bss;
- uint16_t capinfo;
- int32_t pktlen;
-
- _NOTE(ARGUNUSED(dummy));
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- /*
- * probe response frame format
- * [8] time stamp
- * [2] beacon interval
- * [2] cabability information
- * [tlv] ssid
- * [tlv] supported rates
- * [tlv] parameter set (IBSS)
- * [tlv] extended supported rates
- */
- pktlen = sizeof (struct ieee80211_frame) +
- 8 + 2 + 2 + 2 +
- 2 + in->in_esslen +
- 2 + IEEE80211_RATE_SIZE +
- 6 +
- 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_prresp(): alloc failed.\n");
- return (ENOMEM);
- }
- mp->b_rptr += sizeof (struct ieee80211_frame);
- frm = mp->b_rptr;
-
- bzero(frm, 8); /* timestamp */
- frm += 8;
-
- *(uint16_t *)frm = LE_16(in->in_intval);
- frm += 2;
-
- if (isc->isc_opmode == IEEE80211_M_IBSS)
- capinfo = IEEE80211_CAPINFO_IBSS;
- else
- capinfo = IEEE80211_CAPINFO_ESS;
- if (isc->isc_flags & IEEE80211_F_WEPON)
- capinfo |= IEEE80211_CAPINFO_PRIVACY;
- *(uint16_t *)frm = LE_16(capinfo);
- frm += 2;
-
- frm = ieee80211_add_ssid(frm, in->in_essid, in->in_esslen);
- frm = ieee80211_add_rates(frm, &in->in_rates);
-
- if (isc->isc_opmode == IEEE80211_M_IBSS) {
- *frm++ = IEEE80211_ELEMID_IBSSPARMS;
- *frm++ = 2;
- *frm++ = 0; *frm++ = 0; /* ATIM window */
- } else { /* IEEE80211_M_HOSTAP */
- /* TIM */
- *frm++ = IEEE80211_ELEMID_TIM;
- *frm++ = 4; /* length */
- *frm++ = 0; /* DTIM count */
- *frm++ = 1; /* DTIM period */
- *frm++ = 0; /* bitmap control */
- *frm++ = 0; /* Partial Virtual Bitmap (variable length) */
- }
- frm = ieee80211_add_xrates(frm, &in->in_rates);
- mp->b_wptr = frm;
-
- return (ieee80211_mgmt_output(isc, bs0, mp, type));
-}
-
-static int32_t
-ieee80211_send_auth(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t seq)
-{
- mblk_t *mp;
- uint16_t *frm;
- int32_t ret, pktlen;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- pktlen = sizeof (struct ieee80211_frame) + 3 * sizeof (uint16_t);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_auth(): allocb failed\n");
- return (ENOMEM);
- }
- mp->b_wptr = mp->b_rptr + pktlen;
- mp->b_rptr += sizeof (struct ieee80211_frame);
-
- frm = (uint16_t *)mp->b_rptr;
- /* shared key auth */
- frm[0] = LE_16(IEEE80211_AUTH_ALG_OPEN);
- frm[1] = LE_16(seq);
- frm[2] = 0; /* status */
- ret = ieee80211_mgmt_output(isc, in, mp, type);
- if (isc->isc_opmode == IEEE80211_M_STA)
- isc->isc_mgt_timeout = IEEE80211_TRANS_WAIT;
- return (ret);
-}
-
-static int32_t
-ieee80211_send_deauth(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t reason)
-{
- mblk_t *mp;
- uint16_t *frm;
- int32_t pktlen;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_send_deauth(): station %s deauthenticate",
- " (reason %d)\n", ieee80211_ether_sprintf(in->in_macaddr), reason));
- pktlen = sizeof (struct ieee80211_frame) + sizeof (uint16_t);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_deauth(): allocb failed\n");
- return (ENOMEM);
- }
- mp->b_wptr = mp->b_rptr + pktlen;
- mp->b_rptr += sizeof (struct ieee80211_frame);
-
- frm = (uint16_t *)mp->b_rptr;
- frm[0] = LE_16(reason);
-
- return (ieee80211_mgmt_output(isc, in, mp, type));
-}
-
-static int32_t
-ieee80211_send_asreq(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t dummy)
-{
- mblk_t *mp;
- uint8_t *frm;
- uint16_t capinfo = 0;
- int32_t ret, pktlen;
-
- _NOTE(ARGUNUSED(dummy));
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- /*
- * asreq frame format
- * [2] capability information
- * [2] listen interval
- * [6*] current AP address (reassoc only)
- * [tlv] ssid
- * [tlv] supported rates
- * [tlv] extended supported rates
- */
- pktlen = sizeof (struct ieee80211_frame) +
- sizeof (capinfo) + sizeof (uint16_t) + IEEE80211_ADDR_LEN +
- 2 + in->in_esslen + 2 + IEEE80211_RATE_SIZE +
- 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_asreq: allocb failed\n");
- return (ENOMEM);
- }
- mp->b_rptr += sizeof (struct ieee80211_frame);
-
- frm = (uint8_t *)mp->b_rptr;
-
- capinfo = 0;
- if (isc->isc_opmode == IEEE80211_M_IBSS)
- capinfo |= IEEE80211_CAPINFO_IBSS;
- else /* IEEE80211_M_STA */
- capinfo |= IEEE80211_CAPINFO_ESS;
- if (isc->isc_flags & IEEE80211_F_WEPON)
- capinfo |= IEEE80211_CAPINFO_PRIVACY;
- if (isc->isc_flags & IEEE80211_F_SHPREAMBLE)
- capinfo |= IEEE80211_CAPINFO_SHORT_PREAMBLE;
- if (isc->isc_flags & IEEE80211_F_SHSLOT)
- capinfo |= IEEE80211_CAPINFO_SHORT_SLOTTIME;
- capinfo |= 0x0020;
- *(uint16_t *)frm = LE_16(capinfo);
- frm += 2;
-
- *(uint16_t *)frm = LE_16(isc->isc_lintval);
- frm += 2;
-
- if (type == IEEE80211_FC0_SUBTYPE_REASSOC_REQ) {
- IEEE80211_ADDR_COPY(frm, isc->isc_bss->in_bssid);
- frm += IEEE80211_ADDR_LEN;
- }
-
- frm = ieee80211_add_ssid(frm, in->in_essid, in->in_esslen);
- frm = ieee80211_add_rates(frm, &in->in_rates);
- frm = ieee80211_add_xrates(frm, &in->in_rates);
- mp->b_wptr = frm;
- ret = ieee80211_mgmt_output(isc, in, mp, type);
- isc->isc_mgt_timeout = IEEE80211_TRANS_WAIT;
- return (ret);
-}
-
-static int32_t
-ieee80211_send_asresp(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t status)
-{
- mblk_t *mp;
- uint8_t *frm;
- uint16_t capinfo;
- int32_t pktlen;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- /*
- * asreq frame format
- * [2] capability information
- * [2] status
- * [2] association ID
- * [tlv] supported rates
- * [tlv] extended supported rates
- */
- pktlen = sizeof (struct ieee80211_frame) +
- sizeof (capinfo) +
- sizeof (uint16_t) +
- sizeof (uint16_t) +
- 2 + IEEE80211_RATE_SIZE +
- 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_asresp: allocb failed\n");
- return (ENOMEM);
- }
- mp->b_rptr += sizeof (struct ieee80211_frame);
- frm = (uint8_t *)mp->b_rptr;
-
- capinfo = IEEE80211_CAPINFO_ESS;
- if (isc->isc_flags & IEEE80211_F_WEPON)
- capinfo |= IEEE80211_CAPINFO_PRIVACY;
- *(uint16_t *)frm = LE_16(capinfo);
- frm += 2;
-
- *(uint16_t *)frm = LE_16(status);
- frm += 2;
-
- if (status == IEEE80211_STATUS_SUCCESS && in != NULL)
- *(uint16_t *)frm = LE_16(in->in_associd);
- else
- *(uint16_t *)frm = LE_16(0);
- frm += 2;
-
- if (in != NULL) {
- frm = ieee80211_add_rates(frm, &in->in_rates);
- frm = ieee80211_add_xrates(frm, &in->in_rates);
- } else {
- frm = ieee80211_add_rates(frm, &isc->isc_bss->in_rates);
- frm = ieee80211_add_xrates(frm, &isc->isc_bss->in_rates);
- }
- mp->b_wptr = frm;
-
- return (ieee80211_mgmt_output(isc, in, mp, type));
-}
-
-static int32_t
-ieee80211_send_disassoc(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t reason)
-{
- mblk_t *mp;
- uint16_t *frm;
- int32_t pktlen;
-
- _NOTE(ARGUNUSED(type))
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_send_disassoc(): station %s disassociate",
- " (reason %d)\n", ieee80211_ether_sprintf(in->in_macaddr), reason));
- pktlen = sizeof (struct ieee80211_frame) + sizeof (uint16_t);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_asresp: allocb failed\n");
- return (ENOMEM);
- }
- mp->b_wptr = mp->b_rptr + pktlen;
- mp->b_rptr += sizeof (struct ieee80211_frame);
- frm = (uint16_t *)mp->b_rptr;
- frm[0] = LE_16(reason);
- return (ieee80211_mgmt_output(isc, in, mp,
- IEEE80211_FC0_SUBTYPE_DISASSOC));
-}
-
-/*
- * This handles both beacon and probe response frames.
- */
-static void
-ieee80211_recv_beacon(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- struct ieee80211_node *in;
- uint8_t *frm, *efrm, *tstamp, *bintval, *capinfo, *ssid;
- uint8_t *rates, *xrates;
- uint8_t chan, bchan, fhindex, erp;
- uint16_t fhdwell;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- if (isc->isc_opmode != IEEE80211_M_IBSS &&
- isc->isc_state != IEEE80211_S_SCAN) {
- return;
- }
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * beacon frame format
- * [8] time stamp
- * [2] beacon interval
- * [2] cabability information
- * [tlv] ssid
- * [tlv] supported rates
- * [tlv] country information
- * [tlv] parameter set (FH/DS)
- * [tlv] erp information
- * [tlv] extended supported rates
- */
- tstamp = frm;
- frm += 8;
- bintval = frm;
- frm += 2;
- capinfo = frm;
- frm += 2;
- ssid = rates = xrates = NULL;
- bchan = ieee80211_chan2ieee(isc, isc->isc_bss->in_chan);
- chan = bchan;
- fhdwell = 0;
- fhindex = 0;
- erp = 0;
- while (frm < efrm) {
- switch (*frm) {
- case IEEE80211_ELEMID_SSID:
- ssid = frm;
- break;
- case IEEE80211_ELEMID_RATES:
- rates = frm;
- break;
- case IEEE80211_ELEMID_COUNTRY:
- /*
- * don't care 'country', otherwise,
- * just do:
- * country = frm;
- */
- break;
- case IEEE80211_ELEMID_FHPARMS:
- if (isc->isc_phytype == IEEE80211_T_FH) {
- fhdwell = (frm[3] << 8) | frm[2];
- chan = IEEE80211_FH_CHAN(frm[4], frm[5]);
- fhindex = frm[6];
- }
- break;
- case IEEE80211_ELEMID_DSPARMS:
- /*
- * hack this since depending on phytype
- * is problematic for multi-mode devices.
- */
- if (isc->isc_phytype != IEEE80211_T_FH)
- chan = frm[2];
- break;
- case IEEE80211_ELEMID_TIM:
- break;
- case IEEE80211_ELEMID_XRATES:
- xrates = frm;
- break;
- case IEEE80211_ELEMID_ERP:
- if (frm[1] != 1) {
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_recv_beacon(): "
- "%s: invalid ERP element; "
- "length %u, expecting 1\n",
- "ieee80211_recv_beacon", frm[1]));
- break;
- }
- erp = frm[2];
- break;
- default:
- break;
- }
- frm += frm[1] + 2;
- }
- IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_SIZE, wh);
- IEEE80211_VERIFY_ELEMENT(ssid, IEEE80211_NWID_LEN, wh);
-
- if (isclr(isc->isc_chan_active, chan)) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_beacon(): "
- "ignore %s with invalid channel %u\n",
- IEEE80211_ISPROBE(wh) ? "probe response" : "beacon", chan));
- return;
- }
- if (chan != bchan && isc->isc_phytype != IEEE80211_T_FH) {
- /*
- * Frame was received on a channel different from the
- * one indicated in the DS/FH params element id; silently
- * discard it.
- *
- * NB: this can happen due to signal leakage.
- */
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_beacon(): "
- "ignore %s phytype %u on channel %u marked for %u\n",
- IEEE80211_ISPROBE(wh) ? "probe response" : "beacon",
- isc->isc_phytype,
- bchan, chan));
- return;
- }
-
- /*
- * Use mac and channel for lookup so we collect all
- * potential AP's when scanning. Otherwise we may
- * see the same AP on multiple channels and will only
- * record the last one. We could filter APs here based
- * on rssi, etc. but leave that to the end of the scan
- * so we can keep the selection criteria in one spot.
- * This may result in a bloat of the scanned AP list but
- * it shouldn't be too much.
- */
- in = ieee80211_lookup_node(isc, wh->ifrm_addr2,
- &isc->isc_channels[chan]);
- if (in == NULL || isc->isc_state == IEEE80211_S_SCAN) {
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_recv_beacon(): essid = %s\n",
- ieee80211_essid_sprintf(ssid + 2, ssid[1])));
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_beacon(): "
- "from %s\n", ieee80211_ether_sprintf(wh->ifrm_addr2)));
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_recv_beacon(): to %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr1)));
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_beacon(): "
- "caps 0x%x bintval %u erp 0x%x\n",
- LE_16(*(uint16_t *)capinfo),
- LE_16(*(uint16_t *)bintval), erp));
- }
-
- if (in == NULL) {
- in = ieee80211_alloc_node(isc, wh->ifrm_addr2);
- if (in == NULL)
- return;
- in->in_esslen = ssid[1];
- bzero(in->in_essid, sizeof (in->in_essid));
- bcopy(ssid + 2, in->in_essid, ssid[1]);
- } else if (ssid[1] != 0 && IEEE80211_ISPROBE(wh)) {
- /*
- * Update ESSID at probe response to adopt hidden AP by
- * Lucent/Cisco, which announces null ESSID in beacon.
- */
- in->in_esslen = ssid[1];
- bzero(in->in_essid, sizeof (in->in_essid));
- bcopy(ssid + 2, in->in_essid, ssid[1]);
- }
-
- IEEE80211_ADDR_COPY(in->in_bssid, wh->ifrm_addr3);
- ieee80211_add_recvhist(in, rssi, rstamp, rantenna);
- bcopy(tstamp, in->in_tstamp, sizeof (in->in_tstamp));
- in->in_intval = LE_16(*(uint16_t *)bintval);
- in->in_capinfo = LE_16(*(uint16_t *)capinfo);
- in->in_chan = &isc->isc_channels[chan];
- in->in_fhdwell = fhdwell;
- in->in_fhindex = fhindex;
- in->in_erp = erp;
- /* in_chan must have been setup */
- (void) ieee80211_setup_rates(isc, in, rates, xrates,
- IEEE80211_F_DOSORT);
-}
-
-static void
-ieee80211_recv_prreq(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- struct ieee80211_node *in;
- uint8_t *frm, *efrm, *ssid, *rates, *xrates;
- uint8_t rate;
- int32_t allocbs;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- if (isc->isc_opmode == IEEE80211_M_STA)
- return;
- if (isc->isc_state != IEEE80211_S_RUN)
- return;
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * prreq frame format
- * [tlv] ssid
- * [tlv] supported rates
- * [tlv] extended supported rates
- */
- ssid = rates = xrates = NULL;
- while (frm < efrm) {
- switch (*frm) {
- case IEEE80211_ELEMID_SSID:
- ssid = frm;
- break;
- case IEEE80211_ELEMID_RATES:
- rates = frm;
- break;
- case IEEE80211_ELEMID_XRATES:
- xrates = frm;
- break;
- }
- frm += frm[1] + 2;
- }
- IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_SIZE, wh);
- IEEE80211_VERIFY_ELEMENT(ssid, IEEE80211_NWID_LEN, wh);
- if (ssid[1] != 0 &&
- (ssid[1] != isc->isc_bss->in_esslen ||
- bcmp(ssid + 2, isc->isc_bss->in_essid,
- isc->isc_bss->in_esslen) != 0)) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_prreq(): "
- "ssid unmatch %s from %s",
- ieee80211_essid_sprintf(ssid + 2, ssid[1]),
- ieee80211_ether_sprintf(wh->ifrm_addr2)));
- return;
- }
-
- in = ieee80211_find_node(isc, wh->ifrm_addr2);
- if (in == NULL) {
- in = ieee80211_dup_bss(isc, wh->ifrm_addr2);
- if (in == NULL) {
- ath_problem("ath: ieee80211_recv_prreq(): "
- "dup bss failed\n");
- return;
- }
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_recv_prreq: new req from %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2)));
- allocbs = 1;
- } else
- allocbs = 0;
- ieee80211_add_recvhist(in, rssi, rstamp, rantenna);
- rate = ieee80211_setup_rates(isc, in, rates, xrates,
- IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE
- | IEEE80211_F_DONEGO | IEEE80211_F_DODEL);
- if (rate & IEEE80211_RATE_BASIC) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_prreq(): "
- "rate negotiation fail: %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2)));
- } else {
- IEEE80211_SEND_MGMT(isc, in, IEEE80211_FC0_SUBTYPE_PROBE_RESP,
- 0);
- }
-
- if (allocbs && isc->isc_opmode == IEEE80211_M_HOSTAP)
- ieee80211_free_node(isc, in);
- else
- ieee80211_unref_node(&in);
-}
-
-static void
-ieee80211_recv_auth(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- struct ieee80211_node *in;
- uint8_t *frm, *efrm;
- uint16_t algo, seq, status;
-
- _NOTE(ARGUNUSED(rssi))
- _NOTE(ARGUNUSED(rstamp))
- _NOTE(ARGUNUSED(rantenna))
- _NOTE(ARGUNUSED(mp))
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * auth frame format
- * [2] algorithm
- * [2] sequence
- * [2] status
- * [tlv*] challenge
- */
- if (frm + 6 > efrm) {
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_recv_auth: too short from %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2)));
- return;
- }
-
- algo = LE_16(*(uint16_t *)frm);
- seq = LE_16(*(uint16_t *)(frm + 2));
- status = LE_16(*(uint16_t *)(frm + 4));
- if (algo != IEEE80211_AUTH_ALG_OPEN) {
- /* shared key auth */
- ath_problem("ath: ieee80211_recv_auth(): "
- "unsupported auth %d from %s\n",
- algo, ieee80211_ether_sprintf(wh->ifrm_addr2));
- return;
- }
- switch (isc->isc_opmode) {
- case IEEE80211_M_IBSS:
- if (isc->isc_state != IEEE80211_S_RUN || seq != 1)
- return;
- (void) _ieee80211_new_state(isc, IEEE80211_S_AUTH,
- wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
- break;
-
- case IEEE80211_M_AHDEMO:
- break;
-
- case IEEE80211_M_HOSTAP:
- break;
-
- case IEEE80211_M_STA:
- if (isc->isc_state != IEEE80211_S_AUTH || seq != 2)
- return;
- if (status != 0) {
- ath_log("ath: ieee80211_recv_auth(): "
- "authentication failed (reason %d) for %s\n",
- status, ieee80211_ether_sprintf(wh->ifrm_addr3));
- in = ieee80211_find_node(isc, wh->ifrm_addr2);
- if (in != NULL)
- in->in_fails++;
- return;
- }
- (void) _ieee80211_new_state(isc, IEEE80211_S_ASSOC,
- wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
- break;
- }
-}
-
-static void
-ieee80211_recv_asreq(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- _NOTE(ARGUNUSED(isc))
- _NOTE(ARGUNUSED(rssi))
- _NOTE(ARGUNUSED(rstamp))
- _NOTE(ARGUNUSED(rantenna))
- _NOTE(ARGUNUSED(mp))
-
- /* doesn't support HOST-AP mode yet */
-}
-
-static void
-ieee80211_recv_asresp(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- struct ieee80211_node *in;
- uint8_t *frm, *efrm, *rates, *xrates;
- int32_t status;
-
- _NOTE(ARGUNUSED(rssi))
- _NOTE(ARGUNUSED(rstamp))
- _NOTE(ARGUNUSED(rantenna))
- _NOTE(ARGUNUSED(mp))
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- if (isc->isc_opmode != IEEE80211_M_STA ||
- isc->isc_state != IEEE80211_S_ASSOC)
- return;
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * asresp frame format
- * [2] capability information
- * [2] status
- * [2] association ID
- * [tlv] supported rates
- * [tlv] extended supported rates
- */
- if (frm + 6 > efrm) {
- ath_log("ath: ieee80211_recv_asresp(): too short from %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- return;
- }
-
- in = isc->isc_bss;
- in->in_capinfo = LE_16(*(uint16_t *)frm);
- frm += 2;
-
- status = LE_16(*(uint16_t *)frm);
- frm += 2;
-
- if (status != 0) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_asresp(): "
- "association failed (reason %d)\n", status));
- in = ieee80211_find_node(isc, wh->ifrm_addr2);
- if (in != NULL) {
- in->in_fails++;
- }
- return;
- }
-
- in->in_associd = LE_16(*(uint16_t *)frm);
- frm += 2;
-
- rates = xrates = NULL;
- while (frm < efrm) {
- switch (*frm) {
- case IEEE80211_ELEMID_RATES:
- rates = frm;
- break;
- case IEEE80211_ELEMID_XRATES:
- xrates = frm;
- break;
- }
- frm += frm[1] + 2;
- }
-
- IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_SIZE, wh);
- (void) ieee80211_setup_rates(isc, in, rates, xrates,
- IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE |
- IEEE80211_F_DONEGO | IEEE80211_F_DODEL);
- if (in->in_rates.ir_nrates != 0)
- (void) _ieee80211_new_state(isc, IEEE80211_S_RUN,
- wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
-}
-
-static void
-ieee80211_recv_disassoc(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- uint8_t *frm, *efrm;
- uint16_t reason;
-
- _NOTE(ARGUNUSED(rssi))
- _NOTE(ARGUNUSED(rstamp))
- _NOTE(ARGUNUSED(rantenna))
- _NOTE(ARGUNUSED(mp))
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * disassoc frame format
- * [2] reason
- */
- if (frm + 2 > efrm) {
- ath_log("ath: ieee80211_recv_disassoc(): too short from %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- return;
- }
- reason = LE_16(*(uint16_t *)frm);
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_disassoc(): "
- "disassociation packet, reason:0x%x\n", reason));
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- (void) _ieee80211_new_state(isc, IEEE80211_S_ASSOC,
- wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
- break;
- case IEEE80211_M_HOSTAP:
- /* don't support HOSTAP */
- break;
- default:
- break;
- }
-}
-
-static void
-ieee80211_recv_deauth(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- uint8_t *frm, *efrm;
- uint16_t reason;
-
- _NOTE(ARGUNUSED(rssi))
- _NOTE(ARGUNUSED(rstamp))
- _NOTE(ARGUNUSED(rantenna))
- _NOTE(ARGUNUSED(mp))
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * dauth frame format
- * [2] reason
- */
- if (frm + 2 > efrm) {
- ath_log("ath: ieee80211_recv_deauth(): too short from %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- return;
- }
- reason = LE_16(*(uint16_t *)frm);
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_deauth(): "
- "deauthentication packet, reason: 0x%x\n", reason));
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- (void) _ieee80211_new_state(isc, IEEE80211_S_AUTH,
- wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
- break;
- case IEEE80211_M_HOSTAP:
- break;
- default:
- break;
- }
-}
-
-/*
- * Return the phy mode for with the specified channel so the
- * caller can select a rate set. This is problematic and the
- * work here assumes how things work elsewhere in this code.
- */
-enum ieee80211_phymode
-ieee80211_chan2mode(ieee80211com_t *isc, struct ieee80211channel *chan)
-{
- /*
- * NB: this assumes the channel would not be supplied to us
- * unless it was already compatible with the current mode.
- */
- if (isc->isc_curmode != IEEE80211_MODE_AUTO)
- return (isc->isc_curmode);
- /*
- * In autoselect mode; deduce a mode based on the channel
- * characteristics. We assume that turbo-only channels
- * are not considered when the channel set is constructed.
- */
- if (IEEE80211_IS_CHAN_5GHZ(chan))
- return (IEEE80211_MODE_11A);
- else if (chan->ich_flags & (IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN))
- return (IEEE80211_MODE_11G);
- else
- return (IEEE80211_MODE_11B);
-}
-
-
-/*
- * Format an Ethernet MAC for printing,
- * and this function adds NULL byte at the end of string.
- */
-const char *
-ieee80211_ether_sprintf(const uint8_t *mac)
-{
- static char etherbuf[18];
- (void) snprintf(etherbuf, sizeof (etherbuf),
- "%02x:%02x:%02x:%02x:%02x:%02x",
- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
- return (etherbuf);
-}
-
-/*
- * Format an essid for printing,
- * and this function adds NULL byte at the end of string.
- */
-const int8_t *
-ieee80211_essid_sprintf(uint8_t *essid, uint32_t len)
-{
- static int8_t essidbuf[IEEE80211_NWID_LEN * 2 + 1];
- uint32_t i;
- uint8_t *p;
- int8_t tmp[3];
-
- bzero(essidbuf, sizeof (essidbuf));
- if (len > IEEE80211_NWID_LEN)
- len = IEEE80211_NWID_LEN;
- /* determine printable or not */
- for (i = 0, p = essid; i < len; i++, p++) {
- if (*p < ' ' || *p > 0x7e)
- break;
- }
- if (i == len) {
- for (i = 0; i < len; i++)
- essidbuf[i] = essid[i];
- essidbuf[i] = '\0';
- } else {
- for (i = 0; i < len; i++) {
- (void) sprintf(tmp, "%02x", essid[i]);
- (void) strcat(essidbuf, tmp);
- }
- }
- return (essidbuf);
-}
-
-/*
- * Following fucntions are registerd to GLD and intercepting
- * the function calls from GLD to LLD to add appropriate ic_genlock protection.
- *
- * We have to protect ieee80211_gld_send() by isc_genlock,
- * because there have many references to isc struct on this transimit path,
- * and this may affect performace.
- */
-static int32_t
-ieee80211_gld_send(gld_mac_info_t *gld_p, mblk_t *mp)
-{
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
- int32_t result;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_send)(gld_p, mp);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int32_t
-ieee80211_gld_reset(gld_mac_info_t *gld_p)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_reset)(gld_p);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-
-/*
- * Following function is for Multi_func thread.
- * The smallest timing unit is 100ms.
- * It is created in ieee80211_gld_start(),
- * and destroy in ieee80211_gld_stop().
- */
-void
-ieee80211_mf_thread(ieee80211com_t *isc)
-{
- struct ieee80211_node *in;
- uint32_t scan_ticks = 0;
- uint32_t ratectl_ticks = 0;
- uint32_t cali_ticks = 0;
- uint32_t mgt_ticks = 0;
- enum ieee80211_state ostate = IEEE80211_S_INIT;
-
- mutex_enter(&isc->isc_genlock);
- while (isc->isc_mfthread_switch) {
- if (isc->isc_state == IEEE80211_S_SCAN &&
- ostate != IEEE80211_S_SCAN)
- scan_ticks = 0;
-
- if (isc->isc_state == IEEE80211_S_SCAN) {
- if (scan_ticks >= (isc->isc_scan_interval/100 - 1)) {
- ieee80211_next_scan(isc);
- scan_ticks = 0;
- } else
- scan_ticks++;
- }
-
- if (ratectl_ticks >= (isc->isc_ratectl_interval/100 - 1)) {
- if (isc->isc_opmode == IEEE80211_M_STA)
- (*isc->isc_rate_ctl)(isc, isc->isc_bss);
- else {
- in = list_head(&isc->isc_in_list);
- while (in != NULL) {
- (*isc->isc_rate_ctl)(isc, in);
- in = list_next(&isc->isc_in_list, in);
- }
- }
- ratectl_ticks = 0;
- } else
- ratectl_ticks++;
-
- if (cali_ticks >= (isc->isc_cali_interval/100 - 1)) {
- (*isc->isc_calibrate)(isc);
- cali_ticks = 0;
- } else
- cali_ticks++;
-
- if (mgt_ticks >= 10) { /* one second */
- if (isc->isc_mgt_timeout &&
- --isc->isc_mgt_timeout == 0) {
- (void) _ieee80211_new_state(isc,
- IEEE80211_S_SCAN, -1);
- }
- if (isc->isc_inact_timeout &&
- --isc->isc_inact_timeout == 0)
- ieee80211_timeout_nodes(isc);
- mgt_ticks = 0;
- } else
- mgt_ticks++;
-
- ostate = isc->isc_state;
- mutex_exit(&isc->isc_genlock);
- delay(drv_usectohz(100000)); /* delay 100ms */
- mutex_enter(&isc->isc_genlock);
- }
- isc->isc_mf_thread = NULL;
- cv_broadcast(&isc->isc_mfthread_cv);
- mutex_exit(&isc->isc_genlock);
- thread_exit();
-}
-
-/*
- * This function is responsible for creating multi-func thread.
- */
-static int32_t
-ieee80211_gld_start(gld_mac_info_t *gld_p)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- isc->isc_mfthread_switch = 1;
- if (isc->isc_mf_thread == NULL)
- isc->isc_mf_thread = thread_create((caddr_t)NULL, 0,
- ieee80211_mf_thread, isc, 0, &p0, TS_RUN, minclsyspri);
- result = (*isc->isc_gld_start)(gld_p);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-/*
- * This function is responsible for destory multi-func thread.
- */
-static int32_t
-ieee80211_gld_stop(gld_mac_info_t *gld_p)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- isc->isc_mfthread_switch = 0;
- while (isc->isc_mf_thread != NULL) {
- if (cv_wait_sig(&isc->isc_mfthread_cv, &isc->isc_genlock) == 0)
- break;
- }
- result = (*isc->isc_gld_stop)(gld_p);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int32_t
-ieee80211_gld_saddr(gld_mac_info_t *gld_p, uint8_t *macaddr)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_saddr)(gld_p, macaddr);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int
-ieee80211_gld_set_promiscuous(gld_mac_info_t *gld_p, int mode)
-{
- int result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_set_promiscuous)(gld_p, mode);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int32_t
-ieee80211_gld_gstat(gld_mac_info_t *gld_p, struct gld_stats *glds_p)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_gstat)(gld_p, glds_p);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int32_t
-ieee80211_gld_ioctl(gld_mac_info_t *gld_p, queue_t *wq, mblk_t *mp)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_ioctl)(gld_p, wq, mp);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int
-ieee80211_gld_set_multicast(gld_mac_info_t *gld_p, uint8_t *eth_p, int flag)
-{
- int result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_set_multicast)(gld_p, eth_p, flag);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static uint32_t
-ieee80211_gld_intr(gld_mac_info_t *gld_p)
-{
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
- return ((*isc->isc_gld_intr)(gld_p));
-}
-
-
-
-int32_t
-ieee80211_ifattach(gld_mac_info_t *gld_p)
-{
- ieee80211com_t *isc =
- (ieee80211com_t *)gld_p->gldm_private;
- struct ieee80211channel *ch;
- int32_t i;
-
- mutex_init(&isc->isc_genlock, NULL, MUTEX_DRIVER, NULL);
-
- /*
- * Fill in 802.11 available channel set, mark
- * all available channels as active, and pick
- * a default channel if not already specified.
- */
- bzero(isc->isc_chan_avail, sizeof (isc->isc_chan_avail));
- isc->isc_modecaps |= 1 << IEEE80211_MODE_AUTO;
- for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
- ch = &isc->isc_channels[i];
- if (ch->ich_flags) {
- setbit(isc->isc_chan_avail, i);
- /*
- * Identify mode capabilities.
- */
- if (IEEE80211_IS_CHAN_A(ch))
- isc->isc_modecaps |= 1 << IEEE80211_MODE_11A;
- if (IEEE80211_IS_CHAN_B(ch))
- isc->isc_modecaps |= 1 << IEEE80211_MODE_11B;
- if (IEEE80211_IS_CHAN_PUREG(ch))
- isc->isc_modecaps |= 1 << IEEE80211_MODE_11G;
- if (IEEE80211_IS_CHAN_T(ch))
- isc->isc_modecaps |= 1 << IEEE80211_MODE_TURBO;
- }
- }
-
- /* Start from auto mode */
- (void) ieee80211_setmode(isc, IEEE80211_MODE_AUTO);
-
- /* Initialize WEP related variable */
- isc->isc_wep_txkey = 0;
- isc->isc_iv = (int32_t)(gethrtime() & 0x00000000ffffffff);
-
- /* Initialize some config variables */
- isc->isc_rtsthreshold = IEEE80211_RTS_MAX;
- isc->isc_fragthreshold = 2346;
- isc->isc_des_chan = IEEE80211_CHAN_ANYC; /* any channel is ok */
- isc->isc_fixed_rate = -1; /* no fixed rate */
- if (isc->isc_lintval == 0)
- isc->isc_lintval = 100; /* default sleep */
- isc->isc_txpower = IEEE80211_TXPOWER_MAX; /* default tx power */
- isc->isc_bmisstimeout = 7 * isc->isc_lintval; /* default 7 beacons */
-
- list_create(&isc->isc_in_list,
- sizeof (struct ieee80211_node),
- offsetof(struct ieee80211_node, in_node));
- for (i = 0; i < IEEE80211_NODE_HASHSIZE; i++)
- list_create(&isc->isc_inhash_list[i],
- sizeof (struct ieee80211_node),
- offsetof(struct ieee80211_node, in_hash_node));
-
- /* Initialize management frame handlers */
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_PROBE_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_beacon;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_BEACON
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_beacon;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_PROBE_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_prreq;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_AUTH
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_auth;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_ASSOC_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_asreq;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_REASSOC_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_asreq;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_ASSOC_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_asresp;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_REASSOC_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_asresp;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_DEAUTH
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_deauth;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_DISASSOC
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_disassoc;
-
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_PROBE_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_prreq;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_PROBE_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_prresp;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_AUTH
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_auth;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_DEAUTH
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_deauth;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_ASSOC_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_asreq;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_REASSOC_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_asreq;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_ASSOC_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_asresp;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_REASSOC_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_asresp;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_DISASSOC
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_disassoc;
-
- cv_init(&isc->isc_scan_cv, NULL, CV_DRIVER, NULL);
- cv_init(&isc->isc_mfthread_cv, NULL, CV_DRIVER, NULL);
- isc->isc_mf_thread = NULL;
- isc->isc_mfthread_switch = 0;
-
- ASSERT(isc->isc_node_alloc != NULL);
- isc->isc_bss = (*isc->isc_node_alloc)(isc);
- isc->isc_bss->in_chan = IEEE80211_CHAN_ANYC;
- isc->isc_bss->in_txpower = IEEE80211_TXPOWER_MAX;
- isc->isc_scan_interval = 200;
- isc->isc_cali_interval = 30000;
- isc->isc_ratectl_interval = 500;
-
- gld_p->gldm_reset = ieee80211_gld_reset;
- gld_p->gldm_start = ieee80211_gld_start;
- gld_p->gldm_stop = ieee80211_gld_stop;
- gld_p->gldm_set_mac_addr = ieee80211_gld_saddr;
- gld_p->gldm_send = ieee80211_gld_send;
- gld_p->gldm_set_promiscuous = ieee80211_gld_set_promiscuous;
- gld_p->gldm_get_stats = ieee80211_gld_gstat;
- gld_p->gldm_ioctl = ieee80211_gld_ioctl;
- gld_p->gldm_set_multicast = ieee80211_gld_set_multicast;
- gld_p->gldm_intr = ieee80211_gld_intr;
-
- return (0);
-}
-
-void
-ieee80211_ifdetach(gld_mac_info_t *gld_p)
-{
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- (*isc->isc_node_free)(isc, isc->isc_bss);
- ieee80211_free_allnodes(isc);
- cv_destroy(&isc->isc_mfthread_cv);
- cv_destroy(&isc->isc_scan_cv);
- mutex_destroy(&isc->isc_genlock);
-}
diff --git a/usr/src/uts/common/io/ath/ath_ieee80211.h b/usr/src/uts/common/io/ath/ath_ieee80211.h
deleted file mode 100644
index 02abf251ba..0000000000
--- a/usr/src/uts/common/io/ath/ath_ieee80211.h
+++ /dev/null
@@ -1,743 +0,0 @@
-/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting
- * 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,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- * 3. Neither the names of the above-listed copyright holders nor the names
- * of any contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
- *
- */
-
-/*
- * IEEE 802.11 generic handler definitions.
- *
- * This code is derived from NetBSD code; their copyright notice follows.
- */
-
-/*
- * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
- * 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
- */
-
-
-/*
- * The atheros IEEE80211a/b/g chipsets just implement a IEEE80211
- * phisical layer protocol, all IEEE80211 MAC layer functions are
- * done by the driver. These functions include scan, association/
- * disassociation, authentication/deauthentication, probe request,
- * beacon processing, WEP processing, etc. All the data structs,
- * constant denifition and function declaration related to IEEE802.11
- * are defined here. Actually, ath_ieee80211.h and ath_ieee80211.c
- * are general for most 802.11a/b/g chipsets. GLDv3 should consider
- * a WiFi extension and then all IEEE802.11 supporting would be
- * integrated into GLDv3.
- */
-
-#ifndef _ATH_IEEE80211_H
-#define _ATH_IEEE80211_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/sysmacros.h>
-#include <sys/gld.h>
-#include <sys/stream.h>
-#include <sys/int_types.h>
-#include <sys/note.h>
-#include <sys/list.h>
-
-/* Bit map related macros. */
-#define setbit(a, i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
-#define clrbit(a, i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
-#define isset(a, i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
-#define isclr(a, i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
-
-
-/*
- * We always fill constant in LLC
- * and SANP fields of the payload.
- */
-#define LLC_DSAP 0xAA
-#define LLC_SSAP 0xAA
-#define LLC_CONTROL 0x03
-#define SNAP_OC0 0x0
-#define SNAP_OC1 0x0
-#define SNAP_OC2 0x0
-
-#define IEEE80211_ADDR_LEN 6 /* size of 802.11 address */
-#define IEEE80211_TXPOWER_MAX 100 /* .5 dbM */
-#define IEEE80211_TXPOWER_MIN 0 /* kill radio */
-/*
- * Size of an ACK control frame in bytes.
- */
-#define IEEE80211_ACK_SIZE (2 + 2 + IEEE80211_ADDR_LEN + 4)
-
-
-/* Constant for "Frame Control" field of IEEE80211 frame header */
-#define IEEE80211_FC0_VERSION_MASK 0x03
-#define IEEE80211_FC0_VERSION_SHIFT 0
-#define IEEE80211_FC0_VERSION_0 0x00
-#define IEEE80211_FC0_TYPE_MASK 0x0c
-#define IEEE80211_FC0_TYPE_SHIFT 2
-#define IEEE80211_FC0_TYPE_MGT 0x00 /* management frame */
-#define IEEE80211_FC0_TYPE_CTL 0x04 /* control frame */
-#define IEEE80211_FC0_TYPE_DATA 0x08 /* data frame */
-#define IEEE80211_FC0_SUBTYPE_MASK 0xf0
-#define IEEE80211_FC0_SUBTYPE_SHIFT 4
-
-/* sub types of management frame(bit combination) */
-#define IEEE80211_FC0_SUBTYPE_ASSOC_REQ 0x00
-#define IEEE80211_FC0_SUBTYPE_ASSOC_RESP 0x10
-#define IEEE80211_FC0_SUBTYPE_REASSOC_REQ 0x20
-#define IEEE80211_FC0_SUBTYPE_REASSOC_RESP 0x30
-#define IEEE80211_FC0_SUBTYPE_PROBE_REQ 0x40
-#define IEEE80211_FC0_SUBTYPE_PROBE_RESP 0x50
-#define IEEE80211_FC0_SUBTYPE_BEACON 0x80
-#define IEEE80211_FC0_SUBTYPE_ATIM 0x90
-#define IEEE80211_FC0_SUBTYPE_DISASSOC 0xa0
-#define IEEE80211_FC0_SUBTYPE_AUTH 0xb0
-#define IEEE80211_FC0_SUBTYPE_DEAUTH 0xc0
-
-/* sub types of control frame(bit combination) */
-#define IEEE80211_FC0_SUBTYPE_PS_POLL 0xa0
-#define IEEE80211_FC0_SUBTYPE_RTS 0xb0
-#define IEEE80211_FC0_SUBTYPE_CTS 0xc0
-#define IEEE80211_FC0_SUBTYPE_ACK 0xd0
-#define IEEE80211_FC0_SUBTYPE_CF_END 0xe0
-#define IEEE80211_FC0_SUBTYPE_CF_END_ACK 0xf0
-
-/* sub types of data frame(bit combination) */
-#define IEEE80211_FC0_SUBTYPE_DATA 0x00
-#define IEEE80211_FC0_SUBTYPE_CF_ACK 0x10
-#define IEEE80211_FC0_SUBTYPE_CF_POLL 0x20
-#define IEEE80211_FC0_SUBTYPE_CF_ACPL 0x30
-#define IEEE80211_FC0_SUBTYPE_NODATA 0x40
-#define IEEE80211_FC0_SUBTYPE_CFACK 0x50
-#define IEEE80211_FC0_SUBTYPE_CFPOLL 0x60
-#define IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK 0x70
-
-#define IEEE80211_FC1_DIR_MASK 0x03
-#define IEEE80211_FC1_DIR_NODS 0x00 /* STA->STA */
-#define IEEE80211_FC1_DIR_TODS 0x01 /* STA->AP */
-#define IEEE80211_FC1_DIR_FROMDS 0x02 /* AP ->STA */
-#define IEEE80211_FC1_DIR_DSTODS 0x03 /* AP ->AP */
-
-#define IEEE80211_FC1_MORE_FRAG 0x04
-#define IEEE80211_FC1_RETRY 0x08
-#define IEEE80211_FC1_PWR_MGT 0x10
-#define IEEE80211_FC1_MORE_DATA 0x20
-#define IEEE80211_FC1_WEP 0x40
-#define IEEE80211_FC1_ORDER 0x80
-
-#define IEEE80211_SEQ_FRAG_MASK 0x000f
-#define IEEE80211_SEQ_FRAG_SHIFT 0
-#define IEEE80211_SEQ_SEQ_MASK 0xfff0
-#define IEEE80211_SEQ_SEQ_SHIFT 4
-
-#define IEEE80211_NWID_LEN 32
-
-#define IEEE80211_RATE2MBS(r) (((r) & IEEE80211_RATE_VAL) / 2)
-#define IEEE80211_IS_SUBTYPE(_fc, _type) \
- (((_fc) & IEEE80211_FC0_SUBTYPE_MASK) == IEEE80211_FC0_SUBTYPE_##_type)
-
-#define IEEE80211_BEACON_INTERVAL(beacon) \
- ((beacon)[8] | ((beacon)[9] << 8))
-#define IEEE80211_BEACON_CAPABILITY(beacon) \
- ((beacon)[10] | ((beacon)[11] << 8))
-
-#define IEEE80211_CAPINFO_ESS 0x0001
-#define IEEE80211_CAPINFO_IBSS 0x0002
-#define IEEE80211_CAPINFO_CF_POLLABLE 0x0004
-#define IEEE80211_CAPINFO_CF_POLLREQ 0x0008
-#define IEEE80211_CAPINFO_PRIVACY 0x0010
-#define IEEE80211_CAPINFO_SHORT_PREAMBLE 0x0020
-#define IEEE80211_CAPINFO_PBCC 0x0040
-#define IEEE80211_CAPINFO_CHNL_AGILITY 0x0080
-/* bits 8-9 are reserved */
-#define IEEE80211_CAPINFO_SHORT_SLOTTIME 0x0400
-/* bits 11-12 are reserved */
-#define IEEE80211_CAPINFO_DSSSOFDM 0x2000
-/* bits 14-15 are reserved */
-
-/*
- * Management information elements
- */
-#define IEEE80211_ELEMID_SSID 0
-#define IEEE80211_ELEMID_RATES 1
-#define IEEE80211_ELEMID_FHPARMS 2
-#define IEEE80211_ELEMID_DSPARMS 3
-#define IEEE80211_ELEMID_CFPARMS 4
-#define IEEE80211_ELEMID_TIM 5
-#define IEEE80211_ELEMID_IBSSPARMS 6
-#define IEEE80211_ELEMID_COUNTRY 7
-#define IEEE80211_ELEMID_CHALLENGE 16
-#define IEEE80211_ELEMID_ERP 42
-#define IEEE80211_ELEMID_XRATES 50
-
-
-/* Classes for WME streams */
-#define WME_AC_BE 0
-#define WME_AC_BK 1
-#define WME_AC_VI 2
-#define WME_AC_VO 3
-
-#define IEEE80211_RATE_BASIC 0x80
-#define IEEE80211_RATE_VAL 0x7f
-
-/* EPR information element flags */
-#define IEEE80211_ERP_NON_ERP_PRESENT 0x01
-#define IEEE80211_ERP_USE_PROTECTION 0x02
-#define IEEE80211_ERP_BARKER_MODE 0x04
-
-/*
- * AUTH management packets
- *
- * octet algo[2]
- * octet seq[2]
- * octet status[2]
- * octet chal.id
- * octet chal.length
- * octet chal.text[253]
- */
-
-#define IEEE80211_AUTH_ALGORITHM(auth) \
- ((auth)[0] | ((auth)[1] << 8))
-#define IEEE80211_AUTH_TRANSACTION(auth) \
- ((auth)[2] | ((auth)[3] << 8))
-#define IEEE80211_AUTH_STATUS(auth) \
- ((auth)[4] | ((auth)[5] << 8))
-
-#define IEEE80211_AUTH_ALG_OPEN 0x0000
-#define IEEE80211_AUTH_ALG_SHARED 0x0001
-
-#define IEEE80211_AUTH_OPEN_REQUEST 1
-#define IEEE80211_AUTH_OPEN_RESPONSE 2
-
-#define IEEE80211_AUTH_SHARED_REQUEST 1
-#define IEEE80211_AUTH_SHARED_CHALLENGE 2
-#define IEEE80211_AUTH_SHARED_RESPONSE 3
-#define IEEE80211_AUTH_SHARED_PASS 4
-
-/*
- * Reason codes
- * Unlisted codes are reserved
- */
-
-#define IEEE80211_REASON_UNSPECIFIED 1
-#define IEEE80211_REASON_AUTH_EXPIRE 2
-#define IEEE80211_REASON_AUTH_LEAVE 3
-#define IEEE80211_REASON_ASSOC_EXPIRE 4
-#define IEEE80211_REASON_ASSOC_TOOMANY 5
-#define IEEE80211_REASON_NOT_AUTHED 6
-#define IEEE80211_REASON_NOT_ASSOCED 7
-#define IEEE80211_REASON_ASSOC_LEAVE 8
-#define IEEE80211_REASON_ASSOC_NOT_AUTHED 9
-
-#define IEEE80211_STATUS_SUCCESS 0
-#define IEEE80211_STATUS_UNSPECIFIED 1
-#define IEEE80211_STATUS_CAPINFO 10
-#define IEEE80211_STATUS_NOT_ASSOCED 11
-#define IEEE80211_STATUS_OTHER 12
-#define IEEE80211_STATUS_ALG 13
-#define IEEE80211_STATUS_SEQUENCE 14
-#define IEEE80211_STATUS_CHALLENGE 15
-#define IEEE80211_STATUS_TIMEOUT 16
-#define IEEE80211_STATUS_TOOMANY 17
-#define IEEE80211_STATUS_BASIC_RATE 18
-#define IEEE80211_STATUS_SP_REQUIRED 19
-#define IEEE80211_STATUS_PBCC_REQUIRED 20
-#define IEEE80211_STATUS_CA_REQUIRED 21
-#define IEEE80211_STATUS_TOO_MANY_STATIONS 22
-#define IEEE80211_STATUS_RATES 23
-#define IEEE80211_STATUS_SHORTSLOT_REQUIRED 25
-#define IEEE80211_STATUS_DSSSOFDM_REQUIRED 26
-
-#define IEEE80211_WEP_KEYLEN 5 /* 40bit */
-#define IEEE80211_WEP_IVLEN 3 /* 24bit */
-#define IEEE80211_WEP_KIDLEN 1 /* 1 octet */
-#define IEEE80211_WEP_CRCLEN 4 /* CRC-32 */
-#define IEEE80211_WEP_NKID 4 /* number of key ids */
-
-#define IEEE80211_CRC_LEN 4
-
-#define IEEE80211_MTU 1500
-#define IEEE80211_MAX_LEN (2300 + IEEE80211_CRC_LEN + \
- (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
-
-/*
- * RTS frame length parameters. The default is specified in
- * the 802.11 spec. The max may be wrong for jumbo frames.
- */
-#define IEEE80211_RTS_DEFAULT 512
-#define IEEE80211_RTS_MIN 1
-#define IEEE80211_RTS_MAX IEEE80211_MAX_LEN
-
-#define IEEE80211_CHAN_ANY 0xffff /* token for ``any channel'' */
-
-#define IEEE80211_AUTH_NONE 0
-#define IEEE80211_AUTH_OPEN 1
-#define IEEE80211_AUTH_SHARED 2
-
-#define IEEE80211_PSCAN_WAIT 5 /* passive scan wait */
-#define IEEE80211_TRANS_WAIT 5 /* transition wait */
-#define IEEE80211_INACT_WAIT 5 /* inactivity timer interval */
-#define IEEE80211_INACT_MAX (300/IEEE80211_INACT_WAIT)
-
-/*
- * Structure for IEEE 802.11 drivers.
- */
-
-#define IEEE80211_CHAN_MAX 255
-#define IEEE80211_CHAN_ANYC \
- ((struct ieee80211channel *)IEEE80211_CHAN_ANY)
-
-#define IEEE80211_RATE_SIZE 8 /* 802.11 standard */
-#define IEEE80211_RATE_MAXSIZE 15 /* max rates we'll handle */
-#define IEEE80211_KEYBUF_SIZE 16
-#define IEEE80211_NODE_HASHSIZE 32
-/* simple hash is enough for variation of macaddr */
-#define IEEE80211_NODE_HASH(addr) \
- (((uint8_t *)(addr))[IEEE80211_ADDR_LEN - 1] % IEEE80211_NODE_HASHSIZE)
-#define IEEE80211_RV(v) ((v) & IEEE80211_RATE_VAL)
-#define IEEE80211_ISPROBE(_wh) IEEE80211_IS_SUBTYPE((_wh)->ifrm_fc[0], \
- PROBE_RESP)
-#define IEEE80211_RATE(_ix) (in->in_rates.ir_rates[(_ix)] & \
- IEEE80211_RATE_VAL)
-/* Verify the existence and length of __elem or get out. */
-#define IEEE80211_VERIFY_ELEMENT(__elem, __maxlen, __wh) do { \
- if ((__elem) == NULL) { \
- ath_problem("ath: no #__elem \n"); \
- return; \
- } \
- if ((__elem)[1] > (__maxlen)) { \
- ath_problem("ath: bad "#__elem " len %d from %s\n", \
- (__elem)[1], \
- ieee80211_ether_sprintf((__wh)->ifrm_addr2)); \
- return; \
- } \
- _NOTE(CONSTANTCONDITION) \
-} while (0)
-
-
-enum ieee80211_phytype {
- IEEE80211_T_DS, /* direct sequence spread spectrum */
- IEEE80211_T_FH, /* frequency hopping */
- IEEE80211_T_OFDM, /* frequency division multiplexing */
- IEEE80211_T_TURBO /* high rate OFDM, aka turbo mode */
-};
-#define IEEE80211_T_CCK IEEE80211_T_DS /* more common nomenclature */
-
-/* not really a mode; there are really multiple PHY's */
-enum ieee80211_phymode {
- IEEE80211_MODE_AUTO = 0, /* autoselect */
- IEEE80211_MODE_11A = 1, /* 5GHz, OFDM */
- IEEE80211_MODE_11B = 2, /* 2GHz, CCK */
- IEEE80211_MODE_11G = 3, /* 2GHz, OFDM */
- IEEE80211_MODE_TURBO = 4 /* 5GHz, OFDM, 2x clock */
-};
-#define IEEE80211_MODE_MAX (IEEE80211_MODE_TURBO+1)
-
-enum ieee80211_opmode {
- IEEE80211_M_STA = 1, /* infrastructure station */
- IEEE80211_M_IBSS = 0, /* IBSS (adhoc) station */
- IEEE80211_M_AHDEMO = 3, /* Old lucent compatible adhoc demo */
- IEEE80211_M_HOSTAP = 6 /* Software Access Point */
-};
-
-enum ieee80211_state {
- IEEE80211_S_INIT, /* default state */
- IEEE80211_S_SCAN, /* scanning */
- IEEE80211_S_AUTH, /* try to authenticate */
- IEEE80211_S_ASSOC, /* try to assoc */
- IEEE80211_S_RUN /* associated */
-};
-
-/*
- * Channels are specified by frequency and attributes.
- */
-struct ieee80211channel {
- uint16_t ich_freq; /* setting in Mhz */
- uint16_t ich_flags; /* see below */
-};
-
-/* bits 0-3 are for private use by drivers */
-/* channel attributes */
-#define IEEE80211_CHAN_TURBO 0x0010 /* Turbo channel */
-#define IEEE80211_CHAN_CCK 0x0020 /* CCK channel */
-#define IEEE80211_CHAN_OFDM 0x0040 /* OFDM channel */
-#define IEEE80211_CHAN_2GHZ 0x0080 /* 2 GHz spectrum channel. */
-#define IEEE80211_CHAN_5GHZ 0x0100 /* 5 GHz spectrum channel */
-#define IEEE80211_CHAN_PASSIVE 0x0200 /* Only passive scan allowed */
-#define IEEE80211_CHAN_DYN 0x0400 /* Dynamic CCK-OFDM channel */
-
-/*
- * Useful combinations of channel characteristics.
- */
-#define IEEE80211_CHAN_A \
- (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
-#define IEEE80211_CHAN_B \
- (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
-#define IEEE80211_CHAN_PUREG \
- (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM)
-#define IEEE80211_CHAN_G \
- (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
-#define IEEE80211_CHAN_T \
- (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
-
-#define IEEE80211_IS_CHAN_A(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A)
-#define IEEE80211_IS_CHAN_B(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B)
-#define IEEE80211_IS_CHAN_PUREG(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG)
-#define IEEE80211_IS_CHAN_G(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G)
-#define IEEE80211_IS_CHAN_T(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_T) == IEEE80211_CHAN_T)
-
-#define IEEE80211_IS_CHAN_2GHZ(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_2GHZ) != 0)
-#define IEEE80211_IS_CHAN_5GHZ(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_5GHZ) != 0)
-#define IEEE80211_IS_CHAN_OFDM(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_OFDM) != 0)
-#define IEEE80211_IS_CHAN_CCK(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_CCK) != 0)
-
-#pragma pack(1)
-/* Header of IEEE 802.11 frame */
-struct ieee80211_frame {
- uint8_t ifrm_fc[2];
- uint8_t ifrm_dur[2];
- uint8_t ifrm_addr1[IEEE80211_ADDR_LEN];
- uint8_t ifrm_addr2[IEEE80211_ADDR_LEN];
- uint8_t ifrm_addr3[IEEE80211_ADDR_LEN];
- uint8_t ifrm_seq[2];
- /*
- * i_addr4 is present only when it's a data
- * frame from one AP to another AP. The driver
- * doesn't work in AP mode, so we never transmit
- * or receive a frame containing i_addr4 field.
- */
-};
-
-/* Start part(LLC and SNAP) of payload of IEEE80211 frame */
-struct ieee80211_llc {
- /* LLC */
- uint8_t illc_dsap;
- uint8_t illc_ssap;
- uint8_t illc_control;
- /* SNAP */
- uint8_t illc_oc[3]; /* protocol ID or organization code */
- uint16_t illc_ether_type; /* ethernet type */
-};
-#pragma pack()
-
-struct ieee80211_rateset {
- uint8_t ir_nrates;
- uint8_t ir_rates[IEEE80211_RATE_MAXSIZE];
-};
-
-/* Number of history entries to keep (per node) */
-#define IEEE80211_RECV_HIST_LEN 16
-#define IEEE80211_JIFFIES_NONE ((uint32_t)(~0))
-
-struct ieee80211_recv_hist {
- uint32_t irh_jiffies; /* kernel timestamp */
- uint8_t irh_rssi; /* recv ssi */
- uint32_t irh_rstamp; /* recv timestamp */
- uint8_t irh_rantenna; /* recv antenna */
-};
-
-
-/*
- * Node specific information.
- */
-struct ieee80211_node {
- /* hardware */
- struct ieee80211_recv_hist in_recv_hist[IEEE80211_RECV_HIST_LEN];
- int32_t in_hist_cur;
- uint16_t in_txpower; /* current transmit power */
-
- /* header */
- uint8_t in_macaddr[IEEE80211_ADDR_LEN];
- uint8_t in_bssid[IEEE80211_ADDR_LEN];
-
- /* beacon, probe response */
- uint8_t in_tstamp[8]; /* from last rcv'd beacon */
- uint16_t in_intval; /* beacon interval */
- uint16_t in_capinfo; /* capabilities */
- uint8_t in_esslen;
- uint8_t in_essid[IEEE80211_NWID_LEN];
- struct ieee80211_rateset in_rates; /* negotiated rate set */
- uint8_t *in_country; /* country information */
- struct ieee80211channel *in_chan;
- uint16_t in_fhdwell; /* FH only */
- uint8_t in_fhindex; /* FH only */
- uint8_t in_erp; /* 11g only */
-
- /* DTIM and contention free period (CFP) */
- uint8_t in_dtimperiod;
- uint8_t in_cfpperiod; /* # of DTIMs between CFPs */
- uint16_t in_cfpduremain; /* remaining cfp duration */
- uint16_t in_cfpmaxduration; /* max CFP duration in TU */
- uint16_t in_nextdtim; /* time to next DTIM */
- uint16_t in_timoffset;
-
- /* others */
- uint16_t in_associd; /* assoc response */
- uint16_t in_txseq; /* seq to be transmitted */
- uint16_t in_rxseq; /* seq previous received */
- int32_t in_fails; /* failure count to associate */
- int32_t in_inact; /* inactivity mark count */
- int32_t in_txrate; /* index to in_rates[] */
-
- /* we're in the list of isc->isc_in_list */
- list_node_t in_node;
-
- /* we're in the list of isc->isc_inhash_list */
- list_node_t in_hash_node;
-};
-
-/* in_chan encoding for FH phy */
-#define IEEE80211_FH_CHANMOD 80
-#define IEEE80211_FH_CHAN(set, pat) \
- (((set)-1) * IEEE80211_FH_CHANMOD + (pat))
-#define IEEE80211_FH_CHANSET(chan) ((chan)/IEEE80211_FH_CHANMOD+1)
-#define IEEE80211_FH_CHANPAT(chan) ((chan)%IEEE80211_FH_CHANMOD)
-
-#define HEADERSPACE roundup(sizeof (struct ieee80211_frame) + \
- IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + \
- sizeof (struct ieee80211_llc) + 1, 4)
-
-struct ieee80211_wepkey {
- int32_t iwk_len;
- uint8_t iwk_key[IEEE80211_KEYBUF_SIZE];
-};
-
-typedef struct ieee80211com {
- /* The following items are not changed during their lifetime */
- gld_mac_info_t *isc_dev;
- struct ieee80211_rateset isc_sup_rates[IEEE80211_MODE_MAX];
- struct ieee80211channel isc_channels[IEEE80211_CHAN_MAX + 1];
- uint8_t isc_chan_avail[
- roundup(IEEE80211_CHAN_MAX, NBBY)];
- uint32_t isc_caps; /* capabilities */
- uint16_t isc_modecaps; /* set of mode capabilities */
- enum ieee80211_phytype isc_phytype; /* wrong for multi-mode */
- uint16_t isc_bmisstimeout; /* beacon miss threshold ms */
- uint16_t isc_scan_interval; /* scan interval(ms) */
- uint16_t isc_cali_interval; /* calibrate interval(ms) */
- uint16_t isc_ratectl_interval; /* rate ctl interval(ms) */
- int32_t (*isc_mgmt_send)(struct ieee80211com *, mblk_t *);
- void (*isc_recv_mgmt[16])(struct ieee80211com *, mblk_t *,
- int32_t, uint32_t, uint32_t);
- int32_t (*isc_send_mgmt[16])(struct ieee80211com *,
- struct ieee80211_node *, int32_t, int32_t);
- int32_t (*isc_new_state)(struct ieee80211com *,
- enum ieee80211_state);
- struct ieee80211_node *(*isc_node_alloc)(struct ieee80211com *);
- void (*isc_node_free)(struct ieee80211com *,
- struct ieee80211_node *);
- void (*isc_node_copy)(struct ieee80211_node *,
- const struct ieee80211_node *);
- void (*isc_calibrate)(struct ieee80211com *);
- void (*isc_rate_ctl)(struct ieee80211com *,
- struct ieee80211_node *);
- int (*isc_gld_send)(gld_mac_info_t *, mblk_t *);
- int (*isc_gld_reset)(gld_mac_info_t *);
- int (*isc_gld_start)(gld_mac_info_t *);
- int (*isc_gld_stop)(gld_mac_info_t *);
- int32_t (*isc_gld_saddr)(gld_mac_info_t *, uint8_t *macaddr);
- int (*isc_gld_set_promiscuous)(gld_mac_info_t *,
- int mode);
- int (*isc_gld_gstat)(gld_mac_info_t *,
- struct gld_stats *);
- int (*isc_gld_ioctl)(gld_mac_info_t *, queue_t *, mblk_t *);
- int (*isc_gld_set_multicast)(gld_mac_info_t *,
- uint8_t *, int);
- uint32_t (*isc_gld_intr)(gld_mac_info_t *);
-
- /*
- * The following items could only be
- * changed by ioctl after initialization.
- */
- uint8_t isc_macaddr[IEEE80211_ADDR_LEN];
- int32_t isc_fixed_rate; /* index to ic_sup_rates[] */
- uint16_t isc_rtsthreshold;
- uint16_t isc_fragthreshold;
- uint16_t isc_lintval; /* listen interval */
- uint16_t isc_txpower; /* tx power setting (dbM) */
- int32_t isc_des_esslen;
- uint8_t isc_des_essid[IEEE80211_NWID_LEN];
- struct ieee80211channel *isc_des_chan; /* desired channel */
- uint8_t isc_des_bssid[IEEE80211_ADDR_LEN];
- struct ieee80211_wepkey isc_nw_keys[IEEE80211_WEP_NKID];
- int32_t isc_wep_txkey; /* default tx key index */
- uint8_t isc_nickname[IEEE80211_NWID_LEN];
- int32_t isc_nicknamelen;
-
- /* The following items are changed dynamically */
- kthread_t *isc_mf_thread;
- uint32_t isc_mfthread_switch; /* 0/1 indicate off/on */
- kcondvar_t isc_mfthread_cv;
- kcondvar_t isc_scan_cv;
- int32_t isc_mgt_timeout; /* mgmt timeout */
- int32_t isc_inact_timeout; /* inactivity timer wait */
- uint8_t isc_chan_active[
- roundup(IEEE80211_CHAN_MAX, NBBY)];
- uint8_t isc_chan_scan[
- roundup(IEEE80211_CHAN_MAX, NBBY)];
- uint32_t isc_flags; /* state flags */
- uint16_t isc_curmode; /* current mode */
- enum ieee80211_opmode isc_opmode; /* operation mode */
- enum ieee80211_state isc_state; /* 802.11 state */
- struct ieee80211_node *isc_bss; /* info for this node */
- struct ieee80211channel *isc_ibss_chan; /* current channel */
- list_t isc_in_list; /* information of all nodes */
- list_t isc_inhash_list[IEEE80211_NODE_HASHSIZE];
- uint32_t isc_iv; /* initial vector for wep */
- kmutex_t isc_genlock; /* mutex for the whole struct */
-}ieee80211com_t;
-
-#define IEEE80211_SEND_MGMT(isc, in, type, arg) do { \
-if ((isc)->isc_send_mgmt[(type)>>IEEE80211_FC0_SUBTYPE_SHIFT] != NULL) \
- (*(isc)->isc_send_mgmt[(type)>>IEEE80211_FC0_SUBTYPE_SHIFT]) \
- (isc, in, type, arg); \
-_NOTE(CONSTANTCONDITION) \
-} while (0)
-
-#define IEEE80211_ADDR_EQ(a1, a2) (bcmp(a1, a2, IEEE80211_ADDR_LEN) == 0)
-#define IEEE80211_ADDR_COPY(dst, src) bcopy(src, dst, IEEE80211_ADDR_LEN)
-
-/* multicast, broadcast */
-#define ETHER_IS_MULTICAST(addr) (*(addr) & 0x01)
-#define IEEE80211_IS_MULTICAST(a) ETHER_IS_MULTICAST(a)
-
-/* ic_flags */
-#define IEEE80211_F_ASCAN 0x00000001 /* STATUS: active scan */
-#define IEEE80211_F_SIBSS 0x00000002 /* STATUS: start IBSS */
-#define IEEE80211_F_WEPON 0x00000100 /* CONF: WEP enabled */
-#define IEEE80211_F_IBSSON 0x00000200 /* CONF: IBSS creation enable */
-#define IEEE80211_F_PMGTON 0x00000400 /* CONF: Power mgmt enable */
-#define IEEE80211_F_DESBSSID 0x00000800 /* CONF: des_bssid is set */
-#define IEEE80211_F_SCANAP 0x00001000 /* CONF: Scanning AP */
-#define IEEE80211_F_ROAMING 0x00002000 /* CONF: roaming enabled */
-#define IEEE80211_F_SWRETRY 0x00004000 /* CONF: sw tx retry enabled */
-#define IEEE80211_F_TXPMGT 0x00018000 /* STATUS: tx power */
-#define IEEE80211_F_TXPOW_OFF 0x00000000 /* TX Power: radio disabled */
-#define IEEE80211_F_TXPOW_FIXED 0x00008000 /* TX Power: fixed rate */
-#define IEEE80211_F_TXPOW_AUTO 0x00010000 /* TX Power: undefined */
-#define IEEE80211_F_SHSLOT 0x00020000 /* CONF: short slot time */
-#define IEEE80211_F_SHPREAMBLE 0x00040000 /* CONF: short preamble */
-
-/* ic_capabilities */
-#define IEEE80211_C_WEP 0x00000001 /* CAPABILITY: WEP available */
-#define IEEE80211_C_IBSS 0x00000002 /* CAPABILITY: IBSS available */
-#define IEEE80211_C_PMGT 0x00000004 /* CAPABILITY: Power mgmt */
-#define IEEE80211_C_HOSTAP 0x00000008 /* CAPABILITY: HOSTAP avail */
-#define IEEE80211_C_AHDEMO 0x00000010 /* CAPABILITY: Old Adhoc Demo */
-#define IEEE80211_C_SWRETRY 0x00000020 /* CAPABILITY: sw tx retry */
-#define IEEE80211_C_TXPMGT 0x00000040 /* CAPABILITY: tx power mgmt */
-#define IEEE80211_C_SHSLOT 0x00000080 /* CAPABILITY: short slottime */
-#define IEEE80211_C_SHPREAMBLE 0x00000100 /* CAPABILITY: short preamble */
-
-/* flags for ieee80211_fix_rate() */
-#define IEEE80211_F_DOSORT 0x00000001 /* sort rate list */
-#define IEEE80211_F_DOFRATE 0x00000002 /* use fixed rate */
-#define IEEE80211_F_DONEGO 0x00000004 /* calc negotiated rate */
-#define IEEE80211_F_DODEL 0x00000008 /* delete ignore rate */
-
-int32_t ieee80211_ifattach(gld_mac_info_t *);
-void ieee80211_ifdetach(gld_mac_info_t *);
-void ieee80211_input(ieee80211com_t *, mblk_t *,
- int32_t, uint32_t, uint32_t);
-int32_t ieee80211_mgmt_output(ieee80211com_t *, struct ieee80211_node *,
- mblk_t *, int32_t);
-mblk_t *ieee80211_fill_header(ieee80211com_t *isc, mblk_t *mp_gld,
- int32_t wep_txkey, struct ieee80211_node *in);
-mblk_t *ieee80211_decap(mblk_t *);
-extern const int8_t *ieee80211_essid_sprintf(uint8_t *, uint32_t);
-void ieee80211_dump_pkt(uint8_t *, int32_t, int32_t, int32_t);
-struct ieee80211_node *ieee80211_find_node(ieee80211com_t *, uint8_t *);
-struct ieee80211_node *ieee80211_lookup_node(ieee80211com_t *,
- uint8_t *macaddr, struct ieee80211channel *);
-
-/*
- * The following functions are almost the same, except that we should
- * already hold isc_genlock before calling _ieee80211_new_state.
- */
-int ieee80211_new_state(ieee80211com_t *, enum ieee80211_state, int32_t);
-int _ieee80211_new_state(ieee80211com_t *, enum ieee80211_state, int32_t);
-
-uint32_t ieee80211_mhz2ieee(uint32_t, uint32_t);
-uint32_t ieee80211_chan2ieee(ieee80211com_t *, struct ieee80211channel *);
-uint32_t ieee80211_ieee2mhz(uint32_t, uint32_t);
-enum ieee80211_phymode ieee80211_chan2mode(ieee80211com_t *,
- struct ieee80211channel *);
-const int8_t *ieee80211_ether_sprintf(const uint8_t *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ATH_IEEE80211_H */
diff --git a/usr/src/uts/common/io/ath/ath_impl.h b/usr/src/uts/common/io/ath/ath_impl.h
index 13c574accb..b99cfbd238 100644
--- a/usr/src/uts/common/io/ath/ath_impl.h
+++ b/usr/src/uts/common/io/ath/ath_impl.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -56,8 +56,9 @@ extern "C" {
* Defintions for the Atheros Wireless LAN controller driver.
*/
+#include <sys/note.h>
#include <sys/list.h>
-#include "ath_ieee80211.h"
+#include <sys/net80211.h>
#include "ath_hal.h"
/*
@@ -211,6 +212,7 @@ struct dma_area {
typedef struct dma_area dma_area_t;
struct ath_buf {
+ int bf_flags; /* tx descriptor flags */
struct ath_desc *bf_desc; /* virtual addr of desc */
uint32_t bf_daddr; /* physical addr of desc */
dma_area_t bf_dma; /* dma area for buf */
@@ -251,7 +253,8 @@ typedef struct ath {
uint32_t asc_invalid : 1, /* being detached */
asc_mrretry : 1, /* multi-rate retry support */
asc_have11g : 1, /* have 11g support */
- asc_splitmic : 1; /* Split TKIP mic keys */
+ asc_splitmic : 1, /* Split TKIP mic keys */
+ asc_hasclrkey: 1; /* CLR key supported */
const HAL_RATE_TABLE *asc_rates[IEEE80211_MODE_MAX]; /* h/w rate */
ddi_acc_handle_t asc_cfg_handle; /* DDI I/O handle */
@@ -283,6 +286,7 @@ typedef struct ath {
const HAL_RATE_TABLE *asc_currates; /* current rate table */
enum ieee80211_phymode asc_curmode; /* current phy mode */
+ HAL_CHANNEL asc_curchan; /* current h/w channel */
uint8_t asc_rixmap[256]; /* IEEE to h/w rate table ix */
HAL_INT asc_imask; /* interrupt mask copy */
struct ath_stats asc_stats; /* interface statistics */
@@ -291,12 +295,22 @@ typedef struct ath {
uint32_t asc_mfilt[2];
kmutex_t asc_genlock;
- uint32_t asc_need_gld_sched;
- kmutex_t asc_gld_sched_lock;
+ boolean_t asc_resched_needed;
+ kmutex_t asc_resched_lock;
+
+ timeout_id_t asc_scan_timer;
+ int (*asc_newstate)(ieee80211com_t *,
+ enum ieee80211_state, int);
} ath_t;
#define ATH_STATE(macinfo) ((ath_t *)((macinfo)->gldm_private))
+#define ATH_LOCK(_asc) mutex_enter(&(_asc)->asc_genlock)
+#define ATH_UNLOCK(_asc) mutex_exit(&(_asc)->asc_genlock)
+#define ATH_LOCK_ASSERT(_asc) ASSERT(mutex_owned(&(_asc)->asc_genlock))
+
+#define ATH_IS_RUNNING(_asc) ((_asc)->asc_invalid == 0)
+
/* Debug and log functions */
void ath_dbg(uint32_t dbg_flags, const char *fmt, ...); /* debug function */
void ath_log(const char *fmt, ...); /* event log function */
diff --git a/usr/src/uts/common/io/ath/ath_main.c b/usr/src/uts/common/io/ath/ath_main.c
index 4add9a873b..936c6cdaf6 100644
--- a/usr/src/uts/common/io/ath/ath_main.c
+++ b/usr/src/uts/common/io/ath/ath_main.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -41,66 +41,57 @@
/*
* Driver for the Atheros Wireless LAN controller.
*
- * The Atheros driver can be devided into 2 parts: H/W related(we called LLD:
- * Low Level Driver) and IEEE80211 protocol related(we called IEEE80211),
- * and each part has several sub modules.
+ * The Atheros driver calls into net80211 module for IEEE80211 protocol
+ * management functionalities. The driver includes a LLD(Low Level Driver)
+ * part to implement H/W related operations.
* The following is the high level structure of ath driver.
* (The arrows between modules indicate function call direction.)
*
*
- * ^ |
- * | | GLD thread
- * | V
- * ================== =========================================
- * |[1] | |[2] |
- * | | | GLD Callback functions registered |
- * | IEEE80211 | ========================= by |
- * | | | | IEEE80211 |
- * | Internal | V | |
- * ========= | |======================== | |
- * |[3] | | Functions | | |
- * | | | | | |
- * |Multi- | ========================================== =================
- * | | ^ | | |
- * |Func | | V V V
- * | | ====================== ------------------------------------
- * |Thread | |[4] | |[5] |
- * | |-->| Functions exported | | IEEE80211 Callback functions |
- * | | | by IEEE80211 | | registered by LLD |
- * ========= ====================== ------------------------------------
- * ^ |
- * | V
- * -------------------------------------------------------------
- * |[6] |
- * | LLD Internal functions |
- * | |
- * -------------------------------------------------------------
- * ^
- * | Software interrupt thread
- * |
+ * |
+ * | GLD thread
+ * V
+ * ================== =========================================
+ * | | |[1] |
+ * | | | GLDv3 Callback functions registered |
+ * | Net80211 | ========================= by |
+ * | module | | | driver |
+ * | | V | |
+ * | |======================== | |
+ * | Functions exported by net80211 | | |
+ * | | | |
+ * ========================================== =================
+ * | |
+ * V |
+ * +----------------------------------+ |
+ * |[2] | |
+ * | Net80211 Callback functions | |
+ * | registered by LLD | |
+ * +----------------------------------+ |
+ * | |
+ * V v
+ * +-----------------------------------------------------------+
+ * |[3] |
+ * | LLD Internal functions |
+ * | |
+ * +-----------------------------------------------------------+
+ * ^
+ * | Software interrupt thread
+ * |
*
- * Modules 1/2/3/4 constitute part IEEE80211, and modules 5/6 constitute LLD.
* The short description of each module is as below:
- * Module 1: IEEE80211 Internal functions, including ieee80211 state
- * machine, convert functions between 802.3 frame and
- * 802.11 frame, and node maintain function, etc.
- * Module 2: GLD callback functions, which are intercepting the calls from
- * GLD to LLD, and adding IEEE80211's mutex protection.
- * Module 3: Multi-func thread, which is responsible for scan timing,
- * rate control timing and calibrate timing.
- * Module 4: Functions exported by IEEE80211, which can be called from
- * other modules.
- * Module 5: IEEE80211 callback functions registered by LLD, which include
- * GLD related callbacks and some other functions needed by
- * IEEE80211.
- * Module 6: LLD Internal functions, which are responsible for allocing
+ * Module 1: GLD callback functions, which are intercepting the calls from
+ * GLD to LLD.
+ * Module 2: Net80211 callback functions registered by LLD, which
+ * calls into LLD for H/W related functions needed by net80211.
+ * Module 3: LLD Internal functions, which are responsible for allocing
* descriptor/buffer, handling interrupt and other H/W
* operations.
*
* All functions are running in 3 types of thread:
* 1. GLD callbacks threads, such as ioctl, intr, etc.
- * 2. Multi-Func thread in IEEE80211 which is responsible for scan,
- * rate control and calibrate.
+ * 2. Clock interruptt thread which is responsible for scan, rate control and
+ * calibration.
* 3. Software Interrupt thread originated in LLD.
*
* The lock strategy is as below:
@@ -117,40 +108,9 @@
* operational data in ath_softc struct and HAL accesses.
* It is acquired by the interupt handler and most "mode-ctrl" routines.
*
- * In ieee80211com struct, isc_genlock is a general lock to protect
- * necessary data and functions in ieee80211_com struct. Some data in
- * ieee802.11_com don't need protection. For example, isc_dev is writen
- * only in ath_attach(), but read in many other functions, so protection
- * is not necessary.
- *
* Any of the locks can be acquired singly, but where multiple
* locks are acquired, they *must* be in the order:
- *
- * isc_genlock >> asc_genlock >> asc_txqlock[i] >>
- * asc_txbuflock >> asc_rxbuflock
- *
- * Note:
- * 1. All the IEEE80211 callback functions(except isc_gld_intr)
- * registered by LLD in module [5] are protected by isc_genlock before
- * calling from IEEE80211.
- * 2. Module [4] have 3 important functions ieee80211_input(),
- * ieee80211_new_state() and _ieee80211_new_state().
- * The functions in module [6] should avoid holding mutex or other locks
- * during the call to ieee80211_input().
- * In particular, the soft interrupt thread that calls ieee80211_input()
- * may in some cases carry out processing that includes sending an outgoing
- * packet, resulting in a call to the driver's ath_mgmt_send() routine.
- * If the ath_mgmt_send() routine were to try to acquire a mutex being held
- * by soft interrupt thread at the time it calls ieee80211_input(),
- * this could result in a panic due to recursive mutex entry.
- * ieee80211_new_state() and _ieee80211_new_state() are almost the same
- * except that the latter function asserts isc_genlock is owned in its entry.
- * so ieee80211_new_state() is only called by ath_bmiss_handler()
- * from soft interrupt handler thread.
- * As the same reason to ieee80211_input, we can't hold any other mutex.
- * 3. *None* of these locks may be held across calls out to the
- * GLD routines gld_recv() in ieee80211_input().
- *
+ * asc_genlock >> asc_txqlock[i] >> asc_txbuflock >> asc_rxbuflock
*/
#include <sys/param.h>
@@ -174,7 +134,7 @@
#include <sys/sunddi.h>
#include <sys/pci.h>
#include <sys/errno.h>
-#include <sys/gld.h>
+#include <sys/mac.h>
#include <sys/dlpi.h>
#include <sys/ethernet.h>
#include <sys/list.h>
@@ -185,11 +145,14 @@
#include <inet/nd.h>
#include <inet/mi.h>
#include <inet/wifi_ioctl.h>
+#include <sys/mac_wifi.h>
#include "ath_hal.h"
#include "ath_impl.h"
#include "ath_aux.h"
#include "ath_rate.h"
+#define ATH_MAX_RSSI 63 /* max rssi */
+
extern void ath_halfix_init(void);
extern void ath_halfix_finit(void);
extern int32_t ath_getset(ath_t *asc, mblk_t *mp, uint32_t cmd);
@@ -230,12 +193,31 @@ static ddi_dma_attr_t dma_attr = {
0 /* dma_attr_flags */
};
-static uint8_t ath_broadcast_addr[] = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-};
-
static kmutex_t ath_loglock;
static void *ath_soft_state_p = NULL;
+static int ath_dwelltime = 150; /* scan interval, ms */
+
+static int ath_m_stat(void *, uint_t, uint64_t *);
+static int ath_m_start(void *);
+static void ath_m_stop(void *);
+static int ath_m_promisc(void *, boolean_t);
+static int ath_m_multicst(void *, boolean_t, const uint8_t *);
+static int ath_m_unicst(void *, const uint8_t *);
+static mblk_t *ath_m_tx(void *, mblk_t *);
+static void ath_m_ioctl(void *, queue_t *, mblk_t *);
+static mac_callbacks_t ath_m_callbacks = {
+ MC_IOCTL,
+ ath_m_stat,
+ ath_m_start,
+ ath_m_stop,
+ ath_m_promisc,
+ ath_m_multicst,
+ ath_m_unicst,
+ ath_m_tx,
+ NULL, /* mc_resources; */
+ ath_m_ioctl,
+ NULL /* mc_getcapab */
+};
/*
* Available debug flags:
@@ -300,6 +282,7 @@ ath_setup_desc(ath_t *asc, struct ath_buf *bf)
ds = bf->bf_desc;
ds->ds_link = bf->bf_daddr;
ds->ds_data = bf->bf_dma.cookie.dmac_address;
+ ds->ds_vdata = bf->bf_dma.mem_va;
ATH_HAL_SETUPRXDESC(asc->asc_ah, ds,
bf->bf_dma.alength, /* buffer size */
0);
@@ -434,7 +417,8 @@ ath_desc_alloc(dev_info_t *devinfo, ath_t *asc)
list_insert_tail(&asc->asc_txbuf_list, bf);
/* alloc DMA memory */
- err = ath_alloc_dma_mem(devinfo, size, &ath_desc_accattr,
+ err = ath_alloc_dma_mem(devinfo, asc->asc_dmabuf_size,
+ &ath_desc_accattr,
DDI_DMA_STREAMING, DDI_DMA_STREAMING, &bf->bf_dma);
if (err != DDI_SUCCESS)
return (err);
@@ -490,16 +474,17 @@ ath_printrxbuf(struct ath_buf *bf, int32_t done)
static void
ath_rx_handler(ath_t *asc)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_buf *bf;
struct ath_hal *ah = asc->asc_ah;
struct ath_desc *ds;
mblk_t *rx_mp;
- struct ieee80211_frame *wh, whbuf;
+ struct ieee80211_frame *wh;
int32_t len, loop = 1;
uint8_t phyerr;
HAL_STATUS status;
HAL_NODE_STATS hal_node_stats;
+ struct ieee80211_node *in;
do {
mutex_enter(&asc->asc_rxbuflock);
@@ -564,7 +549,7 @@ ath_rx_handler(ath_t *asc)
rx_mp->b_wptr += len;
wh = (struct ieee80211_frame *)rx_mp->b_rptr;
- if ((wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
+ if ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
IEEE80211_FC0_TYPE_CTL) {
/*
* Ignore control frame received in promisc mode.
@@ -574,32 +559,25 @@ ath_rx_handler(ath_t *asc)
}
/* Remove the CRC at the end of IEEE80211 frame */
rx_mp->b_wptr -= IEEE80211_CRC_LEN;
- if (wh->ifrm_fc[1] & IEEE80211_FC1_WEP) {
- /*
- * WEP is decrypted by hardware. Clear WEP bit
- * and trim WEP header for ieee80211_input().
- */
- wh->ifrm_fc[1] &= ~IEEE80211_FC1_WEP;
- bcopy(wh, &whbuf, sizeof (whbuf));
- /*
- * Remove WEP related fields between
- * header and payload.
- */
- rx_mp->b_rptr += IEEE80211_WEP_IVLEN +
- IEEE80211_WEP_KIDLEN;
- bcopy(&whbuf, rx_mp->b_rptr, sizeof (whbuf));
- /*
- * Remove WEP CRC from the tail.
- */
- rx_mp->b_wptr -= IEEE80211_WEP_CRCLEN;
- }
#ifdef DEBUG
ath_printrxbuf(bf, status == HAL_OK);
#endif /* DEBUG */
- ieee80211_input(isc, rx_mp,
+ /*
+ * Locate the node for sender, track state, and then
+ * pass the (referenced) node up to the 802.11 layer
+ * for its use.
+ */
+ in = ieee80211_find_rxnode(ic, wh);
+
+ /*
+ * Send frame up for processing.
+ */
+ (void) ieee80211_input(ic, rx_mp, in,
ds->ds_rxstat.rs_rssi,
- ds->ds_rxstat.rs_tstamp,
- ds->ds_rxstat.rs_antenna);
+ ds->ds_rxstat.rs_tstamp);
+
+ ieee80211_free_node(in);
+
rx_next:
mutex_enter(&asc->asc_rxbuflock);
list_insert_tail(&asc->asc_rxbuf_list, bf);
@@ -608,8 +586,7 @@ rx_next:
} while (loop);
/* rx signal state monitoring */
- ATH_HAL_RXMONITOR(ah, &hal_node_stats);
- ATH_HAL_RXENA(ah); /* in case of RXEOL */
+ ATH_HAL_RXMONITOR(ah, &hal_node_stats, &asc->asc_curchan);
}
static void
@@ -628,27 +605,28 @@ ath_printtxbuf(struct ath_buf *bf, int done)
/*
* The input parameter mp has following assumption:
- * the first mblk is for ieee80211 header, and there has enough space left
- * for WEP option at the end of this mblk.
- * The continue mblks are for payload.
+ * For data packets, GLDv3 mac_wifi plugin allocates and fills the
+ * ieee80211 header. For management packets, net80211 allocates and
+ * fills the ieee80211 header. In both cases, enough spaces in the
+ * header are left for encryption option.
*/
static int32_t
-ath_xmit(ath_t *asc, struct ieee80211_node *in,
- struct ath_buf *bf, mblk_t *mp, mblk_t *mp_header)
+ath_tx_start(ath_t *asc, struct ieee80211_node *in, struct ath_buf *bf,
+ mblk_t *mp)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ieee80211_frame *wh;
struct ath_hal *ah = asc->asc_ah;
- uint32_t subtype, flags, ctsduration, antenna;
+ uint32_t subtype, flags, ctsduration;
int32_t keyix, iswep, hdrlen, pktlen, mblen, mbslen, try0;
- uint8_t rix, cix, txrate, ctsrate, *tmp_ptr;
+ uint8_t rix, cix, txrate, ctsrate;
struct ath_desc *ds;
struct ath_txq *txq;
HAL_PKT_TYPE atype;
const HAL_RATE_TABLE *rt;
HAL_BOOL shortPreamble;
- mblk_t *mp0;
struct ath_node *an;
+ caddr_t dest;
/*
* CRC are added by H/W, not encaped by driver,
@@ -656,62 +634,71 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
*/
pktlen = IEEE80211_CRC_LEN;
- wh = (struct ieee80211_frame *)mp_header->b_rptr;
- iswep = wh->ifrm_fc[1] & IEEE80211_FC1_WEP;
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ iswep = wh->i_fc[1] & IEEE80211_FC1_WEP;
keyix = HAL_TXKEYIX_INVALID;
hdrlen = sizeof (struct ieee80211_frame);
- if (iswep) {
- hdrlen += IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN;
- pktlen += IEEE80211_WEP_CRCLEN;
- keyix = isc->isc_wep_txkey;
- }
- tmp_ptr = (uint8_t *)bf->bf_dma.mem_va;
+ if (iswep != 0) {
+ const struct ieee80211_cipher *cip;
+ struct ieee80211_key *k;
- /* Copy 80211 header from mblk to DMA txbuf */
- mblen = mp_header->b_wptr - mp_header->b_rptr;
- bcopy(mp_header->b_rptr, tmp_ptr, mblen);
- tmp_ptr += mblen;
- pktlen += mblen;
- mbslen = mblen;
-
- /*
- * If mp==NULL, then it's a management frame,
- * else it's a data frame.
- */
- if (mp != NULL) {
/*
- * Copy the first mblk to DMA txbuf
- * (this mblk includes ether header).
+ * Construct the 802.11 header+trailer for an encrypted
+ * frame. The only reason this can fail is because of an
+ * unknown or unsupported cipher/key type.
*/
- mblen = mp->b_wptr - mp->b_rptr - sizeof (struct ether_header);
- bcopy(mp->b_rptr + sizeof (struct ether_header),
- tmp_ptr, mblen);
- tmp_ptr += mblen;
- pktlen += mblen;
- mbslen += mblen;
-
- /* Copy subsequent mblks to DMA txbuf */
- for (mp0 = mp->b_cont; mp0 != NULL; mp0 = mp0->b_cont) {
- mblen = mp0->b_wptr - mp0->b_rptr;
- bcopy(mp0->b_rptr, tmp_ptr, mblen);
- tmp_ptr += mblen;
- pktlen += mblen;
- mbslen += mblen;
+ k = ieee80211_crypto_encap(ic, mp);
+ if (k == NULL) {
+ ATH_DEBUG((ATH_DBG_AUX, "crypto_encap failed\n"));
+ /*
+ * This can happen when the key is yanked after the
+ * frame was queued. Just discard the frame; the
+ * 802.11 layer counts failures and provides
+ * debugging/diagnostics.
+ */
+ return (EIO);
}
+ cip = k->wk_cipher;
+ /*
+ * Adjust the packet + header lengths for the crypto
+ * additions and calculate the h/w key index. When
+ * a s/w mic is done the frame will have had any mic
+ * added to it prior to entry so m0->m_pkthdr.len above will
+ * account for it. Otherwise we need to add it to the
+ * packet length.
+ */
+ hdrlen += cip->ic_header;
+ pktlen += cip->ic_header + cip->ic_trailer;
+ if ((k->wk_flags & IEEE80211_KEY_SWMIC) == 0)
+ pktlen += cip->ic_miclen;
+ keyix = k->wk_keyix;
+
+ /* packet header may have moved, reset our local pointer */
+ wh = (struct ieee80211_frame *)mp->b_rptr;
}
+ dest = bf->bf_dma.mem_va;
+ for (; mp != NULL; mp = mp->b_cont) {
+ mblen = MBLKL(mp);
+ bcopy(mp->b_rptr, dest, mblen);
+ dest += mblen;
+ }
+ mbslen = dest - bf->bf_dma.mem_va;
+ pktlen += mbslen;
+
bf->bf_in = in;
/* setup descriptors */
ds = bf->bf_desc;
rt = asc->asc_currates;
+ ASSERT(rt != NULL);
/*
* The 802.11 layer marks whether or not we should
* use short preamble based on the current mode and
* negotiated parameters.
*/
- if ((isc->isc_flags & IEEE80211_F_SHPREAMBLE) &&
+ if ((ic->ic_flags & IEEE80211_F_SHPREAMBLE) &&
(in->in_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE)) {
shortPreamble = AH_TRUE;
asc->asc_stats.ast_tx_shortpre++;
@@ -725,9 +712,9 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
* Calculate Atheros packet type from IEEE80211 packet header
* and setup for rate calculations.
*/
- switch (wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK) {
+ switch (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) {
case IEEE80211_FC0_TYPE_MGT:
- subtype = wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
+ subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
if (subtype == IEEE80211_FC0_SUBTYPE_BEACON)
atype = HAL_PKT_TYPE_BEACON;
else if (subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP)
@@ -747,7 +734,7 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
break;
case IEEE80211_FC0_TYPE_CTL:
atype = HAL_PKT_TYPE_PSPOLL;
- subtype = wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
+ subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
rix = 0; /* lowest rate */
try0 = ATH_TXMAXTRY;
if (shortPreamble)
@@ -777,10 +764,10 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
* Calculate miscellaneous flags.
*/
flags = HAL_TXDESC_CLRDMASK;
- if (IEEE80211_IS_MULTICAST(wh->ifrm_addr1)) {
+ if (IEEE80211_IS_MULTICAST(wh->i_addr1)) {
flags |= HAL_TXDESC_NOACK; /* no ack on broad/multicast */
asc->asc_stats.ast_tx_noack++;
- } else if (pktlen > isc->isc_rtsthreshold) {
+ } else if (pktlen > ic->ic_rtsthreshold) {
flags |= HAL_TXDESC_RTSENA; /* RTS based on frame length */
asc->asc_stats.ast_tx_rts++;
}
@@ -790,12 +777,12 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
* layer but it lacks sufficient information to calculate it.
*/
if ((flags & HAL_TXDESC_NOACK) == 0 &&
- (wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK) !=
+ (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) !=
IEEE80211_FC0_TYPE_CTL) {
uint16_t dur;
dur = ath_hal_computetxtime(ah, rt, IEEE80211_ACK_SIZE,
rix, shortPreamble);
- *(uint16_t *)wh->ifrm_dur = LE_16(dur);
+ *(uint16_t *)wh->i_dur = LE_16(dur);
}
/*
@@ -832,17 +819,6 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
} else
ctsrate = 0;
- /*
- * For now use the antenna on which the last good
- * frame was received on. We assume this field is
- * initialized to 0 which gives us ``auto'' or the
- * ``default'' antenna.
- */
- if (an->an_tx_antenna)
- antenna = an->an_tx_antenna;
- else
- antenna = in->in_recv_hist[in->in_hist_cur].irh_rantenna;
-
if (++txq->axq_intrcnt >= ATH_TXINTR_PERIOD) {
flags |= HAL_TXDESC_INTREQ;
txq->axq_intrcnt = 0;
@@ -857,18 +833,19 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
atype, /* Atheros packet type */
MIN(in->in_txpower, 60), /* txpower */
txrate, try0, /* series 0 rate/tries */
- keyix,
- antenna, /* antenna mode */
+ keyix, /* key cache index */
+ an->an_tx_antenna, /* antenna mode */
flags, /* flags */
ctsrate, /* rts/cts rate */
ctsduration); /* rts/cts duration */
+ bf->bf_flags = flags;
ATH_DEBUG((ATH_DBG_SEND, "ath: ath_xmit(): to %s totlen=%d "
"an->an_tx_rate1sp=%d tx_rate2sp=%d tx_rate3sp=%d "
"qnum=%d rix=%d sht=%d dur = %d\n",
- ieee80211_ether_sprintf(wh->ifrm_addr1), mbslen, an->an_tx_rate1sp,
+ ieee80211_macaddr_sprintf(wh->i_addr1), mbslen, an->an_tx_rate1sp,
an->an_tx_rate2sp, an->an_tx_rate3sp,
- txq->axq_qnum, rix, shortPreamble, *(uint16_t *)wh->ifrm_dur));
+ txq->axq_qnum, rix, shortPreamble, *(uint16_t *)wh->i_dur));
/*
* Setup the multi-rate retry state only when we're
@@ -905,94 +882,153 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
ATH_HAL_TXSTART(ah, txq->axq_qnum);
+ ic->ic_stats.is_tx_frags++;
+ ic->ic_stats.is_tx_bytes += pktlen;
+
return (0);
}
-
+/*
+ * Transmit a management frame. On failure we reclaim the skbuff.
+ * Note that management frames come directly from the 802.11 layer
+ * and do not honor the send queue flow control. Need to investigate
+ * using priority queueing so management frames can bypass data.
+ */
static int
-ath_gld_send(gld_mac_info_t *gld_p, mblk_t *mp)
+ath_xmit(ieee80211com_t *ic, mblk_t *mp, uint8_t type)
{
- int err;
- ath_t *asc = ATH_STATE(gld_p);
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in;
- mblk_t *mp_header;
+ ath_t *asc = (ath_t *)ic;
+ struct ath_hal *ah = asc->asc_ah;
+ struct ieee80211_node *in = NULL;
struct ath_buf *bf = NULL;
+ struct ieee80211_frame *wh;
+ int error = 0;
- /*
- * No data frames go out unless we're associated; this
- * should not happen as the 802.11 layer does not enable
- * the xmit queue until we enter the RUN state.
- */
- if (isc->isc_state != IEEE80211_S_RUN) {
- ATH_DEBUG((ATH_DBG_SEND, "ath: ath_gld_send(): "
- "discard, state %u\n", isc->isc_state));
- asc->asc_stats.ast_tx_discard++;
- return (GLD_NOLINK);
- }
-
- /*
- * Only supports STA mode
- */
- if (isc->isc_opmode != IEEE80211_M_STA)
- return (GLD_NOLINK);
+ ASSERT(mp->b_next == NULL);
- /*
- * Locate AP information, so we can fill MAC address.
- */
- in = isc->isc_bss;
- in->in_inact = 0;
-
- /*
- * Grab a TX buffer.
- */
+ /* Grab a TX buffer */
mutex_enter(&asc->asc_txbuflock);
bf = list_head(&asc->asc_txbuf_list);
-
if (bf != NULL)
list_remove(&asc->asc_txbuf_list, bf);
+ if (list_empty(&asc->asc_txbuf_list)) {
+ ATH_DEBUG((ATH_DBG_SEND, "ath: ath_mgmt_send(): "
+ "stop queue\n"));
+ asc->asc_stats.ast_tx_qstop++;
+ }
mutex_exit(&asc->asc_txbuflock);
-
if (bf == NULL) {
- ATH_DEBUG((ATH_DBG_SEND, "ath: ath_gld_send(): "
- "no TX DMA buffer available: 100 times\n"));
- asc->asc_stats.ast_tx_nobuf++;
-
- mutex_enter(&asc->asc_gld_sched_lock);
- asc->asc_need_gld_sched = 1;
- mutex_exit(&asc->asc_gld_sched_lock);
- return (GLD_NORESOURCES);
+ ATH_DEBUG((ATH_DBG_SEND, "ath: ath_mgmt_send(): discard, "
+ "no xmit buf\n"));
+ ic->ic_stats.is_tx_nobuf++;
+ if ((type & IEEE80211_FC0_TYPE_MASK) ==
+ IEEE80211_FC0_TYPE_DATA) {
+ asc->asc_stats.ast_tx_nobuf++;
+ mutex_enter(&asc->asc_resched_lock);
+ asc->asc_resched_needed = B_TRUE;
+ mutex_exit(&asc->asc_resched_lock);
+ } else {
+ asc->asc_stats.ast_tx_nobufmgt++;
+ freemsg(mp);
+ }
+ return (ENOMEM);
}
- mp_header = ieee80211_fill_header(isc, mp, isc->isc_wep_txkey, in);
- if (mp_header == NULL) {
- /* Push back the TX buf */
- mutex_enter(&asc->asc_txbuflock);
- list_insert_tail(&asc->asc_txbuf_list, bf);
- mutex_exit(&asc->asc_txbuflock);
- return (GLD_FAILURE);
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+
+ /* Locate node */
+ in = ieee80211_find_txnode(ic, wh->i_addr1);
+ if (in == NULL) {
+ error = EIO;
+ goto bad;
}
- err = ath_xmit(asc, in, bf, mp, mp_header);
- freemsg(mp_header);
+ in->in_inact = 0;
+ switch (type & IEEE80211_FC0_TYPE_MASK) {
+ case IEEE80211_FC0_TYPE_DATA:
+ (void) ieee80211_encap(ic, mp, in);
+ break;
+ default:
+ if ((wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==
+ IEEE80211_FC0_SUBTYPE_PROBE_RESP) {
+ /* fill time stamp */
+ uint64_t tsf;
+ uint32_t *tstamp;
+
+ tsf = ATH_HAL_GETTSF64(ah);
+ /* adjust 100us delay to xmit */
+ tsf += 100;
+ tstamp = (uint32_t *)&wh[1];
+ tstamp[0] = LE_32(tsf & 0xffffffff);
+ tstamp[1] = LE_32(tsf >> 32);
+ }
+ asc->asc_stats.ast_tx_mgmt++;
+ break;
+ }
- if (!err) {
+ error = ath_tx_start(asc, in, bf, mp);
+ if (error != 0) {
+bad:
+ ic->ic_stats.is_tx_failed++;
+ if (bf != NULL) {
+ mutex_enter(&asc->asc_txbuflock);
+ list_insert_tail(&asc->asc_txbuf_list, bf);
+ mutex_exit(&asc->asc_txbuflock);
+ }
+ }
+ if (in != NULL)
+ ieee80211_free_node(in);
+ if ((type & IEEE80211_FC0_TYPE_MASK) != IEEE80211_FC0_TYPE_DATA ||
+ error == 0) {
freemsg(mp);
- return (GLD_SUCCESS);
- } else {
- return (GLD_FAILURE);
}
+
+ return (error);
}
-static void
+static mblk_t *
+ath_m_tx(void *arg, mblk_t *mp)
+{
+ ath_t *asc = arg;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
+ mblk_t *next;
+
+ /*
+ * No data frames go out unless we're associated; this
+ * should not happen as the 802.11 layer does not enable
+ * the xmit queue until we enter the RUN state.
+ */
+ if (ic->ic_state != IEEE80211_S_RUN) {
+ ATH_DEBUG((ATH_DBG_SEND, "ath: ath_m_tx(): "
+ "discard, state %u\n", ic->ic_state));
+ asc->asc_stats.ast_tx_discard ++;
+ return (mp);
+ }
+
+ while (mp != NULL) {
+ next = mp->b_next;
+ mp->b_next = NULL;
+
+ if (ath_xmit(ic, mp, IEEE80211_FC0_TYPE_DATA) != 0) {
+ mp->b_next = next;
+ break;
+ }
+ mp = next;
+ }
+
+ return (mp);
+
+}
+
+static int
ath_tx_processq(ath_t *asc, struct ath_txq *txq)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
struct ath_buf *bf;
struct ath_desc *ds;
struct ieee80211_node *in;
- int32_t sr, lr;
+ int32_t sr, lr, nacked = 0;
HAL_STATUS status;
struct ath_node *an;
@@ -1050,22 +1086,39 @@ ath_tx_processq(ath_t *asc, struct ath_txq *txq)
lr = ds->ds_txstat.ts_longretry;
asc->asc_stats.ast_tx_shortretry += sr;
asc->asc_stats.ast_tx_longretry += lr;
- an->an_tx_retr += sr + lr;
+ /*
+ * Hand the descriptor to the rate control algorithm.
+ */
+ if ((ds->ds_txstat.ts_status & HAL_TXERR_FILT) == 0 &&
+ (bf->bf_flags & HAL_TXDESC_NOACK) == 0) {
+ /*
+ * If frame was ack'd update the last rx time
+ * used to workaround phantom bmiss interrupts.
+ */
+ if (ds->ds_txstat.ts_status == 0) {
+ nacked++;
+ an->an_tx_ok++;
+ } else {
+ an->an_tx_err++;
+ }
+ an->an_tx_retr += sr + lr;
+ }
}
bf->bf_in = NULL;
mutex_enter(&asc->asc_txbuflock);
list_insert_tail(&asc->asc_txbuf_list, bf);
mutex_exit(&asc->asc_txbuflock);
- mutex_enter(&asc->asc_gld_sched_lock);
/*
* Reschedule stalled outbound packets
*/
- if (asc->asc_need_gld_sched) {
- asc->asc_need_gld_sched = 0;
- gld_sched(isc->isc_dev);
+ mutex_enter(&asc->asc_resched_lock);
+ if (asc->asc_resched_needed) {
+ asc->asc_resched_needed = B_FALSE;
+ mac_tx_update(ic->ic_mach);
}
- mutex_exit(&asc->asc_gld_sched_lock);
+ mutex_exit(&asc->asc_resched_lock);
}
+ return (nacked);
}
@@ -1079,16 +1132,16 @@ ath_tx_handler(ath_t *asc)
*/
for (i = 0; i < HAL_NUM_TX_QUEUES; i++) {
if (ATH_TXQ_SETUP(asc, i)) {
- ath_tx_processq(asc, &asc->asc_txq[i]);
+ (void) ath_tx_processq(asc, &asc->asc_txq[i]);
}
}
}
static struct ieee80211_node *
-ath_node_alloc(ieee80211com_t *isc)
+ath_node_alloc(ieee80211com_t *ic)
{
struct ath_node *an;
- ath_t *asc = (ath_t *)isc;
+ ath_t *asc = (ath_t *)ic;
an = kmem_zalloc(sizeof (struct ath_node), KM_SLEEP);
ath_rate_update(asc, &an->an_node, 0);
@@ -1096,9 +1149,10 @@ ath_node_alloc(ieee80211com_t *isc)
}
static void
-ath_node_free(ieee80211com_t *isc, struct ieee80211_node *in)
+ath_node_free(struct ieee80211_node *in)
{
- ath_t *asc = (ath_t *)isc;
+ ieee80211com_t *ic = in->in_ic;
+ ath_t *asc = (ath_t *)ic;
struct ath_buf *bf;
struct ath_txq *txq;
int32_t i;
@@ -1117,93 +1171,40 @@ ath_node_free(ieee80211com_t *isc, struct ieee80211_node *in)
mutex_exit(&txq->axq_lock);
}
}
+ ic->ic_node_cleanup(in);
kmem_free(in, sizeof (struct ath_node));
}
static void
-ath_node_copy(struct ieee80211_node *dst, const struct ieee80211_node *src)
+ath_next_scan(void *arg)
{
- bcopy(src, dst, sizeof (struct ieee80211_node));
+ ieee80211com_t *ic = arg;
+ ath_t *asc = (ath_t *)ic;
+
+ asc->asc_scan_timer = 0;
+ if (ic->ic_state == IEEE80211_S_SCAN) {
+ asc->asc_scan_timer = timeout(ath_next_scan, (void *)asc,
+ drv_usectohz(ath_dwelltime * 1000));
+ ieee80211_next_scan(ic);
+ }
}
-/*
- * Transmit a management frame. On failure we reclaim the skbuff.
- * Note that management frames come directly from the 802.11 layer
- * and do not honor the send queue flow control. Need to investigate
- * using priority queueing so management frames can bypass data.
- */
-static int32_t
-ath_mgmt_send(ieee80211com_t *isc, mblk_t *mp)
+static void
+ath_stop_scantimer(ath_t *asc)
{
- ath_t *asc = (ath_t *)isc;
- struct ath_hal *ah = asc->asc_ah;
- struct ieee80211_node *in;
- struct ath_buf *bf = NULL;
- struct ieee80211_frame *wh;
- int32_t error = 0;
-
- /* Grab a TX buffer */
- mutex_enter(&asc->asc_txbuflock);
- bf = list_head(&asc->asc_txbuf_list);
- if (bf != NULL)
- list_remove(&asc->asc_txbuf_list, bf);
- if (list_empty(&asc->asc_txbuf_list)) {
- ATH_DEBUG((ATH_DBG_SEND, "ath: ath_mgmt_send(): "
- "stop queue\n"));
- asc->asc_stats.ast_tx_qstop++;
- }
- mutex_exit(&asc->asc_txbuflock);
- if (bf == NULL) {
- ATH_DEBUG((ATH_DBG_SEND, "ath: ath_mgmt_send(): discard, "
- "no xmit buf\n"));
- asc->asc_stats.ast_tx_nobufmgt++;
- goto bad;
- }
- wh = (struct ieee80211_frame *)mp->b_rptr;
- if ((wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==
- IEEE80211_FC0_SUBTYPE_PROBE_RESP) {
- /* fill time stamp */
- uint64_t tsf;
- uint32_t *tstamp;
-
- tsf = ATH_HAL_GETTSF64(ah);
- /* adjust 100us delay to xmit */
- tsf += 100;
- tstamp = (uint32_t *)&wh[1];
- tstamp[0] = LE_32(tsf & 0xffffffff);
- tstamp[1] = LE_32(tsf >> 32);
- }
- /*
- * Locate node state. When operating
- * in station mode we always use ic_bss.
- */
- if (isc->isc_opmode != IEEE80211_M_STA) {
- in = ieee80211_find_node(isc, wh->ifrm_addr1);
- if (in == NULL)
- in = isc->isc_bss;
- } else
- in = isc->isc_bss;
+ timeout_id_t tmp_id = 0;
- error = ath_xmit(asc, in, bf, NULL, mp);
- if (error == 0) {
- asc->asc_stats.ast_tx_mgmt++;
- freemsg(mp);
- return (0);
+ while ((asc->asc_scan_timer != 0) && (tmp_id != asc->asc_scan_timer)) {
+ tmp_id = asc->asc_scan_timer;
+ (void) untimeout(tmp_id);
}
-bad:
- if (bf != NULL) {
- mutex_enter(&asc->asc_txbuflock);
- list_insert_tail(&asc->asc_txbuf_list, bf);
- mutex_exit(&asc->asc_txbuflock);
- }
- freemsg(mp);
- return (error);
+ asc->asc_scan_timer = 0;
}
static int32_t
-ath_new_state(ieee80211com_t *isc, enum ieee80211_state nstate)
+ath_newstate(ieee80211com_t *ic, enum ieee80211_state nstate, int arg)
{
- ath_t *asc = (ath_t *)isc;
+ ath_t *asc = (ath_t *)ic;
struct ath_hal *ah = asc->asc_ah;
struct ieee80211_node *in;
int32_t i, error;
@@ -1218,36 +1219,44 @@ ath_new_state(ieee80211com_t *isc, enum ieee80211_state nstate)
HAL_LED_ASSOC, /* IEEE80211_S_ASSOC */
HAL_LED_RUN, /* IEEE80211_S_RUN */
};
- if (asc->asc_invalid == 1)
+ if (!ATH_IS_RUNNING(asc))
return (0);
- ostate = isc->isc_state;
+ ostate = ic->ic_state;
+ if (nstate != IEEE80211_S_SCAN)
+ ath_stop_scantimer(asc);
+ ATH_LOCK(asc);
ATH_HAL_SETLEDSTATE(ah, leds[nstate]); /* set LED */
if (nstate == IEEE80211_S_INIT) {
asc->asc_imask &= ~(HAL_INT_SWBA | HAL_INT_BMISS);
- ATH_HAL_INTRSET(ah, asc->asc_imask);
- error = 0; /* cheat + use error return */
- goto bad;
+ ATH_HAL_INTRSET(ah, asc->asc_imask &~ HAL_INT_GLOBAL);
+ ATH_UNLOCK(asc);
+ goto done;
+ }
+ in = ic->ic_bss;
+ error = ath_chan_set(asc, ic->ic_curchan);
+ if (error != 0) {
+ if (nstate != IEEE80211_S_SCAN) {
+ ATH_UNLOCK(asc);
+ ieee80211_reset_chan(ic);
+ goto bad;
+ }
}
- in = isc->isc_bss;
- error = ath_chan_set(asc, in->in_chan);
- if (error != 0)
- goto bad;
rfilt = ath_calcrxfilter(asc);
if (nstate == IEEE80211_S_SCAN)
- bssid = isc->isc_macaddr;
+ bssid = ic->ic_macaddr;
else
bssid = in->in_bssid;
ATH_HAL_SETRXFILTER(ah, rfilt);
- if (nstate == IEEE80211_S_RUN && isc->isc_opmode != IEEE80211_M_IBSS)
+ if (nstate == IEEE80211_S_RUN && ic->ic_opmode != IEEE80211_M_IBSS)
ATH_HAL_SETASSOCID(ah, bssid, in->in_associd);
else
ATH_HAL_SETASSOCID(ah, bssid, 0);
- if (isc->isc_flags & IEEE80211_F_WEPON) {
+ if (ic->ic_flags & IEEE80211_F_PRIVACY) {
for (i = 0; i < IEEE80211_WEP_NKID; i++) {
if (ATH_HAL_KEYISVALID(ah, i))
ATH_HAL_KEYSETMAC(ah, i, bssid);
@@ -1267,7 +1276,7 @@ ath_new_state(ieee80211com_t *isc, enum ieee80211_state nstate)
*/
ath_rate_ctl_reset(asc, nstate);
- if (nstate == IEEE80211_S_RUN) {
+ if (nstate == IEEE80211_S_RUN && (ostate != IEEE80211_S_RUN)) {
nvlist_t *attr_list = NULL;
sysevent_id_t eid;
int32_t err = 0;
@@ -1277,11 +1286,11 @@ ath_new_state(ieee80211com_t *isc, enum ieee80211_state nstate)
ATH_DEBUG((ATH_DBG_80211, "ath: ath new state(RUN): "
"ic_flags=0x%08x iv=%d"
" bssid=%s capinfo=0x%04x chan=%d\n",
- isc->isc_flags,
+ ic->ic_flags,
in->in_intval,
- ieee80211_ether_sprintf(in->in_bssid),
+ ieee80211_macaddr_sprintf(in->in_bssid),
in->in_capinfo,
- ieee80211_chan2ieee(isc, in->in_chan)));
+ ieee80211_chan2ieee(ic, in->in_chan)));
(void) sprintf(str_value, "%s%s%d", "-i ",
ddi_driver_name(asc->asc_dev),
@@ -1304,7 +1313,23 @@ ath_new_state(ieee80211com_t *isc, enum ieee80211_state nstate)
}
}
- return (0);
+ ATH_UNLOCK(asc);
+done:
+ /*
+ * Invoke the parent method to complete the work.
+ */
+ error = asc->asc_newstate(ic, nstate, arg);
+ /*
+ * Finally, start any timers.
+ */
+ if (nstate == IEEE80211_S_RUN) {
+ ieee80211_start_watchdog(ic, 1);
+ } else if ((nstate == IEEE80211_S_SCAN) && (ostate != nstate)) {
+ /* start ap/neighbor scan timer */
+ ASSERT(asc->asc_scan_timer == 0);
+ asc->asc_scan_timer = timeout(ath_next_scan, (void *)asc,
+ drv_usectohz(ath_dwelltime * 1000));
+ }
bad:
return (error);
}
@@ -1314,23 +1339,13 @@ bad:
* for temperature/environment changes.
*/
static void
-ath_calibrate(ieee80211com_t *isc)
+ath_calibrate(ath_t *asc)
{
- ath_t *asc = (ath_t *)isc;
struct ath_hal *ah = asc->asc_ah;
- struct ieee80211channel *ch;
- HAL_CHANNEL hchan;
+ HAL_BOOL iqcaldone;
asc->asc_stats.ast_per_cal++;
- /*
- * Convert to a HAL channel description with the flags
- * constrained to reflect the current operating mode.
- */
- ch = isc->isc_ibss_chan;
- hchan.channel = ch->ich_freq;
- hchan.channelFlags = ath_chan2flags(isc, ch);
-
if (ATH_HAL_GETRFGAIN(ah) == HAL_RFGAIN_NEED_CHANGE) {
/*
* Rfgain is out of bounds, reset the chip
@@ -1339,29 +1354,77 @@ ath_calibrate(ieee80211com_t *isc)
ATH_DEBUG((ATH_DBG_HAL, "ath: ath_calibrate(): "
"Need change RFgain\n"));
asc->asc_stats.ast_per_rfgain++;
- ath_reset(asc);
+ (void) ath_reset(&asc->asc_isc);
}
- if (!ATH_HAL_CALIBRATE(ah, &hchan)) {
+ if (!ATH_HAL_CALIBRATE(ah, &asc->asc_curchan, &iqcaldone)) {
ATH_DEBUG((ATH_DBG_HAL, "ath: ath_calibrate(): "
"calibration of channel %u failed\n",
- ch->ich_freq));
+ asc->asc_curchan.channel));
asc->asc_stats.ast_per_calfail++;
}
}
+static void
+ath_watchdog(void *arg)
+{
+ ath_t *asc = arg;
+ ieee80211com_t *ic = &asc->asc_isc;
+ int ntimer = 0;
+
+ ATH_LOCK(asc);
+ ic->ic_watchdog_timer = 0;
+ if (!ATH_IS_RUNNING(asc)) {
+ ATH_UNLOCK(asc);
+ return;
+ }
+
+ if (ic->ic_state == IEEE80211_S_RUN) {
+ /* periodic recalibration */
+ ath_calibrate(asc);
+
+ /*
+ * Start the background rate control thread if we
+ * are not configured to use a fixed xmit rate.
+ */
+ if (ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE) {
+ asc->asc_stats.ast_rate_calls ++;
+ if (ic->ic_opmode == IEEE80211_M_STA)
+ ath_rate_ctl(ic, ic->ic_bss);
+ else
+ ieee80211_iterate_nodes(&ic->ic_sta,
+ ath_rate_cb, asc);
+ }
+
+ ntimer = 1;
+ }
+ ATH_UNLOCK(asc);
+
+ ieee80211_watchdog(ic);
+ if (ntimer != 0)
+ ieee80211_start_watchdog(ic, ntimer);
+}
+
static uint_t
-ath_gld_intr(gld_mac_info_t *gld_p)
+ath_intr(caddr_t arg)
{
- ath_t *asc = ATH_STATE(gld_p);
+ ath_t *asc = (ath_t *)arg;
struct ath_hal *ah = asc->asc_ah;
HAL_INT status;
- enum ieee80211_state isc_state;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
- mutex_enter(&asc->asc_genlock);
+ ATH_LOCK(asc);
+
+ if (!ATH_IS_RUNNING(asc)) {
+ /*
+ * The hardware is not ready/present, don't touch anything.
+ * Note this can happen early on if the IRQ is shared.
+ */
+ ATH_UNLOCK(asc);
+ return (DDI_INTR_UNCLAIMED);
+ }
if (!ATH_HAL_INTRPEND(ah)) { /* shared irq, not for us */
- mutex_exit(&asc->asc_genlock);
+ ATH_UNLOCK(asc);
return (DDI_INTR_UNCLAIMED);
}
@@ -1369,11 +1432,9 @@ ath_gld_intr(gld_mac_info_t *gld_p)
status &= asc->asc_imask;
if (status & HAL_INT_FATAL) {
asc->asc_stats.ast_hardware++;
- mutex_exit(&asc->asc_genlock);
goto reset;
} else if (status & HAL_INT_RXORN) {
asc->asc_stats.ast_rxorn++;
- mutex_exit(&asc->asc_genlock);
goto reset;
} else {
if (status & HAL_INT_RXEOL) {
@@ -1384,6 +1445,7 @@ ath_gld_intr(gld_mac_info_t *gld_p)
asc->asc_stats.ast_txurn++;
ATH_HAL_UPDATETXTRIGLEVEL(ah, AH_TRUE);
}
+
if (status & HAL_INT_RX) {
asc->asc_rx_pend = 1;
ddi_trigger_softintr(asc->asc_softint_id);
@@ -1391,19 +1453,15 @@ ath_gld_intr(gld_mac_info_t *gld_p)
if (status & HAL_INT_TX) {
ath_tx_handler(asc);
}
-
- mutex_exit(&asc->asc_genlock);
+ ATH_UNLOCK(asc);
if (status & HAL_INT_SWBA) {
/* This will occur only in Host-AP or Ad-Hoc mode */
return (DDI_INTR_CLAIMED);
}
if (status & HAL_INT_BMISS) {
- mutex_enter(&isc->isc_genlock);
- isc_state = isc->isc_state;
- mutex_exit(&isc->isc_genlock);
- if (isc_state == IEEE80211_S_RUN) {
- (void) ieee80211_new_state(isc,
+ if (ic->ic_state == IEEE80211_S_RUN) {
+ (void) ieee80211_new_state(ic,
IEEE80211_S_ASSOC, -1);
}
}
@@ -1411,9 +1469,8 @@ ath_gld_intr(gld_mac_info_t *gld_p)
return (DDI_INTR_CLAIMED);
reset:
- mutex_enter(&isc->isc_genlock);
- ath_reset(asc);
- mutex_exit(&isc->isc_genlock);
+ (void) ath_reset(ic);
+ ATH_UNLOCK(asc);
return (DDI_INTR_CLAIMED);
}
@@ -1426,14 +1483,14 @@ ath_softint_handler(caddr_t data)
* Check if the soft interrupt is triggered by another
* driver at the same level.
*/
- mutex_enter(&asc->asc_genlock);
+ ATH_LOCK(asc);
if (asc->asc_rx_pend) { /* Soft interrupt for this driver */
asc->asc_rx_pend = 0;
- mutex_exit(&asc->asc_genlock);
- ath_rx_handler((ath_t *)data);
+ ATH_UNLOCK(asc);
+ ath_rx_handler(asc);
return (DDI_INTR_CLAIMED);
}
- mutex_exit(&asc->asc_genlock);
+ ATH_UNLOCK(asc);
return (DDI_INTR_UNCLAIMED);
}
@@ -1448,56 +1505,69 @@ ath_softint_handler(caddr_t data)
* and to reset the hardware when rf gain settings must be reset.
*/
-static int
-ath_gld_reset(gld_mac_info_t *gld_p)
-{
- ath_t *asc = ATH_STATE(gld_p);
-
- ath_reset(asc);
- return (GLD_SUCCESS);
-}
-
-
-static int
-ath_gld_stop(gld_mac_info_t *gld_p)
+static void
+ath_stop_locked(ath_t *asc)
{
- ath_t *asc = ATH_STATE(gld_p);
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
- (void) _ieee80211_new_state(isc, IEEE80211_S_INIT, -1);
+ ATH_LOCK_ASSERT(asc);
+ /*
+ * Shutdown the hardware and driver:
+ * reset 802.11 state machine
+ * turn off timers
+ * disable interrupts
+ * turn off the radio
+ * clear transmit machinery
+ * clear receive machinery
+ * drain and release tx queues
+ * reclaim beacon resources
+ * power down hardware
+ *
+ * Note that some of this work is not possible if the
+ * hardware is gone (invalid).
+ */
+ ATH_UNLOCK(asc);
+ ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
+ ieee80211_stop_watchdog(ic);
+ ATH_LOCK(asc);
ATH_HAL_INTRSET(ah, 0);
ath_draintxq(asc);
- if (! asc->asc_invalid)
+ if (ATH_IS_RUNNING(asc)) {
ath_stoprecv(asc);
- else
+ ATH_HAL_PHYDISABLE(ah);
+ } else {
asc->asc_rxlink = NULL;
- ATH_HAL_SETPOWER(ah, HAL_PM_FULL_SLEEP, 0);
+ }
+}
- asc->asc_invalid = 1;
+static void
+ath_m_stop(void *arg)
+{
+ ath_t *asc = arg;
+ struct ath_hal *ah = asc->asc_ah;
- return (GLD_SUCCESS);
+ ATH_LOCK(asc);
+ ath_stop_locked(asc);
+ ATH_HAL_SETPOWER(ah, HAL_PM_AWAKE);
+ asc->asc_invalid = 1;
+ ATH_UNLOCK(asc);
}
int
-ath_gld_start(gld_mac_info_t *gld_p)
+ath_m_start(void *arg)
{
- int ret;
- ath_t *asc = ATH_STATE(gld_p);
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in;
- enum ieee80211_phymode mode;
+ ath_t *asc = arg;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
HAL_STATUS status;
- HAL_CHANNEL hchan;
+ ATH_LOCK(asc);
/*
* Stop anything previously setup. This is safe
* whether this is the first time through or not.
*/
- ret = ath_gld_stop(gld_p);
- if (ret != GLD_SUCCESS)
- return (ret);
+ ath_stop_locked(asc);
/*
* The basic interface to setting the hardware in a good
@@ -1506,25 +1576,17 @@ ath_gld_start(gld_mac_info_t *gld_p)
* be followed by initialization of the appropriate bits
* and then setup of the interrupt mask.
*/
- hchan.channel = isc->isc_ibss_chan->ich_freq;
- hchan.channelFlags = ath_chan2flags(isc, isc->isc_ibss_chan);
- if (!ATH_HAL_RESET(ah, (HAL_OPMODE)isc->isc_opmode,
- &hchan, AH_FALSE, &status)) {
- ATH_DEBUG((ATH_DBG_HAL, "ath: ath_gld_start(): "
- "unable to reset hardware, hal status %u\n", status));
- return (GLD_FAILURE);
+ asc->asc_curchan.channel = ic->ic_curchan->ich_freq;
+ asc->asc_curchan.channelFlags = ath_chan2flags(ic, ic->ic_curchan);
+ if (!ATH_HAL_RESET(ah, (HAL_OPMODE)ic->ic_opmode,
+ &asc->asc_curchan, AH_FALSE, &status)) {
+ ATH_DEBUG((ATH_DBG_HAL, "ath: ath_m_start(): "
+ "reset hardware failed, hal status %u\n", status));
+ ATH_UNLOCK(asc);
+ return (ENOTACTIVE);
}
- /*
- * Setup the hardware after reset: the key cache
- * is filled as needed and the receive engine is
- * set going. Frame transmit is handled entirely
- * in the frame output path; there's nothing to do
- * here except setup the interrupt mask.
- */
- ath_initkeytable(asc);
- if (ath_startrecv(asc))
- return (GLD_FAILURE);
+ (void) ath_startrecv(asc);
/*
* Enable interrupts.
@@ -1534,27 +1596,24 @@ ath_gld_start(gld_mac_info_t *gld_p)
| HAL_INT_FATAL | HAL_INT_GLOBAL;
ATH_HAL_INTRSET(ah, asc->asc_imask);
- isc->isc_state = IEEE80211_S_INIT;
+ ic->ic_state = IEEE80211_S_INIT;
/*
* The hardware should be ready to go now so it's safe
* to kick the 802.11 state machine as it's likely to
* immediately call back to us to send mgmt frames.
*/
- in = isc->isc_bss;
- in->in_chan = isc->isc_ibss_chan;
- mode = ieee80211_chan2mode(isc, in->in_chan);
- if (mode != asc->asc_curmode)
- ath_setcurmode(asc, mode);
+ ath_chan_change(asc, ic->ic_curchan);
asc->asc_invalid = 0;
- return (GLD_SUCCESS);
+ ATH_UNLOCK(asc);
+ return (0);
}
-static int32_t
-ath_gld_saddr(gld_mac_info_t *gld_p, unsigned char *macaddr)
+static int
+ath_m_unicst(void *arg, const uint8_t *macaddr)
{
- ath_t *asc = ATH_STATE(gld_p);
+ ath_t *asc = arg;
struct ath_hal *ah = asc->asc_ah;
ATH_DEBUG((ATH_DBG_GLD, "ath: ath_gld_saddr(): "
@@ -1562,54 +1621,50 @@ ath_gld_saddr(gld_mac_info_t *gld_p, unsigned char *macaddr)
macaddr[0], macaddr[1], macaddr[2],
macaddr[3], macaddr[4], macaddr[5]));
- IEEE80211_ADDR_COPY(asc->asc_isc.isc_macaddr, macaddr);
- ATH_HAL_SETMAC(ah, asc->asc_isc.isc_macaddr);
+ ATH_LOCK(asc);
+ IEEE80211_ADDR_COPY(asc->asc_isc.ic_macaddr, macaddr);
+ ATH_HAL_SETMAC(ah, asc->asc_isc.ic_macaddr);
- ath_reset(asc);
- return (GLD_SUCCESS);
+ (void) ath_reset(&asc->asc_isc);
+ ATH_UNLOCK(asc);
+ return (0);
}
static int
-ath_gld_set_promiscuous(gld_mac_info_t *macinfo, int mode)
+ath_m_promisc(void *arg, boolean_t on)
{
- ath_t *asc = ATH_STATE(macinfo);
+ ath_t *asc = arg;
struct ath_hal *ah = asc->asc_ah;
uint32_t rfilt;
+ ATH_LOCK(asc);
rfilt = ATH_HAL_GETRXFILTER(ah);
- switch (mode) {
- case GLD_MAC_PROMISC_PHYS:
- ATH_HAL_SETRXFILTER(ah, rfilt | HAL_RX_FILTER_PROM);
- break;
- case GLD_MAC_PROMISC_MULTI:
- rfilt |= HAL_RX_FILTER_MCAST;
+ if (on)
+ rfilt |= HAL_RX_FILTER_PROM;
+ else
rfilt &= ~HAL_RX_FILTER_PROM;
- ATH_HAL_SETRXFILTER(ah, rfilt);
- break;
- case GLD_MAC_PROMISC_NONE:
- ATH_HAL_SETRXFILTER(ah, rfilt & (~HAL_RX_FILTER_PROM));
- break;
- default:
- break;
- }
+ ATH_HAL_SETRXFILTER(ah, rfilt);
+ ATH_UNLOCK(asc);
- return (GLD_SUCCESS);
+ return (0);
}
static int
-ath_gld_set_multicast(gld_mac_info_t *macinfo, uchar_t *mca, int flag)
+ath_m_multicst(void *arg, boolean_t add, const uint8_t *mca)
{
+ ath_t *asc = arg;
+ struct ath_hal *ah = asc->asc_ah;
uint32_t mfilt[2], val, rfilt;
uint8_t pos;
- ath_t *asc = ATH_STATE(macinfo);
- struct ath_hal *ah = asc->asc_ah;
+ ATH_LOCK(asc);
rfilt = ATH_HAL_GETRXFILTER(ah);
/* disable multicast */
- if (flag == GLD_MULTI_DISABLE) {
+ if (!add) {
ATH_HAL_SETRXFILTER(ah, rfilt & (~HAL_RX_FILTER_MCAST));
- return (GLD_SUCCESS);
+ ATH_UNLOCK(asc);
+ return (0);
}
/* enable multicast */
@@ -1626,117 +1681,104 @@ ath_gld_set_multicast(gld_mac_info_t *macinfo, uchar_t *mca, int flag)
mfilt[pos / 32] |= (1 << (pos % 32));
ATH_HAL_SETMCASTFILTER(ah, mfilt[0], mfilt[1]);
- return (GLD_SUCCESS);
+ ATH_UNLOCK(asc);
+ return (0);
}
static void
-ath_wlan_ioctl(ath_t *asc, queue_t *wq, mblk_t *mp, uint32_t cmd)
+ath_m_ioctl(void *arg, queue_t *wq, mblk_t *mp)
{
-
- struct iocblk *iocp = (struct iocblk *)mp->b_rptr;
- uint32_t len, ret;
- mblk_t *mp1;
-
- /* sanity check */
- if (iocp->ioc_count == 0 || !(mp1 = mp->b_cont)) {
- miocnak(wq, mp, 0, EINVAL);
- return;
- }
-
- /* assuming single data block */
- if (mp1->b_cont) {
- freemsg(mp1->b_cont);
- mp1->b_cont = NULL;
+ ath_t *asc = arg;
+ int32_t err;
+
+ err = ieee80211_ioctl(&asc->asc_isc, wq, mp);
+ ATH_LOCK(asc);
+ if (err == ENETRESET) {
+ if (ATH_IS_RUNNING(asc)) {
+ ATH_UNLOCK(asc);
+ (void) ath_m_start(asc);
+ (void) ieee80211_new_state(&asc->asc_isc,
+ IEEE80211_S_SCAN, -1);
+ ATH_LOCK(asc);
+ }
}
-
- /* we will overwrite everything */
- mp1->b_wptr = mp1->b_rptr;
-
- ret = ath_getset(asc, mp1, cmd);
-
- len = msgdsize(mp1);
-
- miocack(wq, mp, len, ret);
+ ATH_UNLOCK(asc);
}
static int
-ath_gld_ioctl(gld_mac_info_t *gld_p, queue_t *wq, mblk_t *mp)
+ath_m_stat(void *arg, uint_t stat, uint64_t *val)
{
- struct iocblk *iocp;
- int32_t cmd, err;
- ath_t *asc = ATH_STATE(gld_p);
- boolean_t need_privilege;
+ ath_t *asc = arg;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
+ struct ieee80211_node *in = ic->ic_bss;
+ struct ieee80211_rateset *rs = &in->in_rates;
- /*
- * Validate the command before bothering with the mutexen ...
- */
- iocp = (struct iocblk *)mp->b_rptr;
- cmd = iocp->ioc_cmd;
- need_privilege = B_TRUE;
- switch (cmd) {
- case WLAN_SET_PARAM:
- case WLAN_COMMAND:
+ ATH_LOCK(asc);
+ switch (stat) {
+ case MAC_STAT_IFSPEED:
+ *val = (rs->ir_rates[in->in_txrate] & IEEE80211_RATE_VAL) / 2 *
+ 1000000ull;
+ break;
+ case MAC_STAT_NOXMTBUF:
+ *val = asc->asc_stats.ast_tx_nobuf +
+ asc->asc_stats.ast_tx_nobufmgt;
break;
- case WLAN_GET_PARAM:
- need_privilege = B_FALSE;
+ case MAC_STAT_IERRORS:
+ *val = asc->asc_stats.ast_rx_tooshort;
break;
+ case MAC_STAT_OERRORS:
+ *val = asc->asc_stats.ast_tx_fifoerr +
+ asc->asc_stats.ast_tx_xretries;
+ break;
+ case MAC_STAT_RBYTES:
+ *val = ic->ic_stats.is_rx_bytes;
+ break;
+ case MAC_STAT_IPACKETS:
+ *val = ic->ic_stats.is_rx_frags;
+ break;
+ case MAC_STAT_OBYTES:
+ *val = ic->ic_stats.is_tx_bytes;
+ break;
+ case MAC_STAT_OPACKETS:
+ *val = ic->ic_stats.is_tx_frags;
+ break;
+ case WIFI_STAT_TX_FAILED:
+ *val = asc->asc_stats.ast_tx_fifoerr +
+ asc->asc_stats.ast_tx_xretries;
+ break;
+ case WIFI_STAT_TX_RETRANS:
+ *val = asc->asc_stats.ast_tx_xretries;
+ break;
+ case WIFI_STAT_FCS_ERRORS:
+ *val = asc->asc_stats.ast_rx_crcerr;
+ break;
+ case WIFI_STAT_WEP_ERRORS:
+ *val = asc->asc_stats.ast_rx_badcrypt;
+ break;
+ case WIFI_STAT_TX_FRAGS:
+ case WIFI_STAT_MCAST_TX:
+ case WIFI_STAT_RTS_SUCCESS:
+ case WIFI_STAT_RTS_FAILURE:
+ case WIFI_STAT_ACK_FAILURE:
+ case WIFI_STAT_RX_FRAGS:
+ case WIFI_STAT_MCAST_RX:
+ case WIFI_STAT_RX_DUPS:
+ ATH_UNLOCK(asc);
+ return (ieee80211_stat(ic, stat, val));
default:
- ATH_DEBUG((ATH_DBG_GLD, "ath: ath_gld_ioctl(): "
- "unknown cmd 0x%x", cmd));
- miocnak(wq, mp, 0, EINVAL);
- return (GLD_SUCCESS);
- }
-
- if (need_privilege) {
- /*
- * Check for specific net_config privilege on Solaris 10+.
- * Otherwise just check for root access ...
- */
- if (secpolicy_net_config != NULL)
- err = secpolicy_net_config(iocp->ioc_cr, B_FALSE);
- else
- err = drv_priv(iocp->ioc_cr);
- if (err != 0) {
- miocnak(wq, mp, 0, err);
- return (GLD_SUCCESS);
- }
+ ATH_UNLOCK(asc);
+ return (ENOTSUP);
}
+ ATH_UNLOCK(asc);
- ath_wlan_ioctl(asc, wq, mp, cmd);
- return (GLD_SUCCESS);
-}
-
-static int
-ath_gld_gstat(gld_mac_info_t *gld_p, struct gld_stats *glds_p)
-{
- ath_t *asc = ATH_STATE(gld_p);
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
- struct ath_node *an = ATH_NODE(in);
- struct ieee80211_rateset *rs = &in->in_rates;
-
- glds_p->glds_crc = asc->asc_stats.ast_rx_crcerr;
- glds_p->glds_multircv = 0;
- glds_p->glds_multixmt = 0;
- glds_p->glds_excoll = 0;
- glds_p->glds_xmtretry = an->an_tx_retr;
- glds_p->glds_defer = 0;
- glds_p->glds_noxmtbuf = asc->asc_stats.ast_tx_nobuf;
- glds_p->glds_norcvbuf = asc->asc_stats.ast_rx_fifoerr;
- glds_p->glds_short = asc->asc_stats.ast_rx_tooshort;
- glds_p->glds_missed = asc->asc_stats.ast_rx_badcrypt;
- glds_p->glds_speed = 1000000*(rs->ir_rates[in->in_txrate] &
- IEEE80211_RATE_VAL) / 2;
- glds_p->glds_duplex = GLD_DUPLEX_FULL;
-
- return (GLD_SUCCESS);
+ return (0);
}
static int
ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
{
ath_t *asc;
- ieee80211com_t *isc;
+ ieee80211com_t *ic;
struct ath_hal *ah;
uint8_t csz;
HAL_STATUS status;
@@ -1747,33 +1789,28 @@ ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
int32_t ath_countrycode = CTRY_DEFAULT; /* country code */
int32_t err, ath_regdomain = 0; /* regulatory domain */
char strbuf[32];
+ int instance;
+ wifi_data_t wd = { 0 };
+ mac_register_t *macp;
- switch (cmd) {
- case DDI_RESUME:
+ if (cmd != DDI_ATTACH)
return (DDI_FAILURE);
- case DDI_ATTACH:
- break;
- default:
- return (DDI_FAILURE);
- }
- if (ddi_soft_state_zalloc(ath_soft_state_p,
- ddi_get_instance(devinfo)) != DDI_SUCCESS) {
+ instance = ddi_get_instance(devinfo);
+ if (ddi_soft_state_zalloc(ath_soft_state_p, instance) != DDI_SUCCESS) {
ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
"Unable to alloc softstate\n"));
return (DDI_FAILURE);
}
asc = ddi_get_soft_state(ath_soft_state_p, ddi_get_instance(devinfo));
- isc = (ieee80211com_t *)asc;
+ ic = (ieee80211com_t *)asc;
asc->asc_dev = devinfo;
- ath_halfix_init();
-
mutex_init(&asc->asc_genlock, NULL, MUTEX_DRIVER, NULL);
mutex_init(&asc->asc_txbuflock, NULL, MUTEX_DRIVER, NULL);
mutex_init(&asc->asc_rxbuflock, NULL, MUTEX_DRIVER, NULL);
- mutex_init(&asc->asc_gld_sched_lock, NULL, MUTEX_DRIVER, NULL);
+ mutex_init(&asc->asc_resched_lock, NULL, MUTEX_DRIVER, NULL);
err = pci_config_setup(devinfo, &asc->asc_cfg_handle);
if (err != DDI_SUCCESS) {
@@ -1883,7 +1920,7 @@ ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
ath_rate_setup(asc, IEEE80211_MODE_11A);
ath_rate_setup(asc, IEEE80211_MODE_11B);
ath_rate_setup(asc, IEEE80211_MODE_11G);
- ath_rate_setup(asc, IEEE80211_MODE_TURBO);
+ ath_rate_setup(asc, IEEE80211_MODE_TURBO_A);
/* Setup here so ath_rate_update is happy */
ath_setcurmode(asc, IEEE80211_MODE_11A);
@@ -1899,55 +1936,56 @@ ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
if (ath_txq_setup(asc))
goto attach_fail4;
- ATH_HAL_GETMAC(ah, asc->asc_isc.isc_macaddr);
+ ATH_HAL_GETMAC(ah, ic->ic_macaddr);
- /* setup gld */
- if ((isc->isc_dev = gld_mac_alloc(devinfo)) == NULL) {
- ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
- "gld_mac_alloc = %p\n", (void *)isc->isc_dev));
- goto attach_fail4;
- }
-
- /* pre initialize some variables for isc */
- isc->isc_dev->gldm_private = (caddr_t)asc;
-
- isc->isc_gld_reset = ath_gld_reset;
- isc->isc_gld_start = ath_gld_start;
- isc->isc_gld_stop = ath_gld_stop;
- isc->isc_gld_saddr = ath_gld_saddr;
- isc->isc_gld_send = ath_gld_send;
- isc->isc_gld_set_promiscuous = ath_gld_set_promiscuous;
- isc->isc_gld_gstat = ath_gld_gstat;
- isc->isc_gld_ioctl = ath_gld_ioctl;
- isc->isc_gld_set_multicast = ath_gld_set_multicast;
- isc->isc_gld_intr = ath_gld_intr;
-
- isc->isc_mgmt_send = ath_mgmt_send;
- isc->isc_new_state = ath_new_state;
- isc->isc_phytype = IEEE80211_T_OFDM;
- isc->isc_opmode = IEEE80211_M_STA;
- isc->isc_caps = IEEE80211_C_WEP | IEEE80211_C_IBSS |
- IEEE80211_C_HOSTAP;
+ /*
+ * Initialize pointers to device specific functions which
+ * will be used by the generic layer.
+ */
/* 11g support is identified when we fetch the channel set */
if (asc->asc_have11g)
- isc->isc_caps |= IEEE80211_C_SHPREAMBLE;
- isc->isc_node_alloc = ath_node_alloc;
- isc->isc_node_free = ath_node_free;
- isc->isc_node_copy = ath_node_copy;
- isc->isc_rate_ctl = ath_rate_ctl;
- isc->isc_calibrate = ath_calibrate;
- (void) ieee80211_ifattach(isc->isc_dev);
-
- isc->isc_dev->gldm_devinfo = devinfo;
- isc->isc_dev->gldm_vendor_addr = asc->asc_isc.isc_macaddr;
- isc->isc_dev->gldm_broadcast_addr = ath_broadcast_addr;
- isc->isc_dev->gldm_ident = "Atheros driver";
- isc->isc_dev->gldm_type = DL_ETHER;
- isc->isc_dev->gldm_minpkt = 0;
- isc->isc_dev->gldm_maxpkt = 1500;
- isc->isc_dev->gldm_addrlen = ETHERADDRL;
- isc->isc_dev->gldm_saplen = -2;
- isc->isc_dev->gldm_ppa = ddi_get_instance(devinfo);
+ ic->ic_caps |= IEEE80211_C_SHPREAMBLE;
+ /*
+ * Query the hal to figure out h/w crypto support.
+ */
+ if (ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_WEP))
+ ic->ic_caps |= IEEE80211_C_WEP;
+ if (ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_AES_OCB))
+ ic->ic_caps |= IEEE80211_C_AES;
+ if (ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_AES_CCM))
+ ic->ic_caps |= IEEE80211_C_AES_CCM;
+ if (ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_CKIP)) {
+ ic->ic_caps |= IEEE80211_C_CKIP;
+ /*
+ * Check if h/w does the MIC and/or whether the
+ * separate key cache entries are required to
+ * handle both tx+rx MIC keys.
+ */
+ if (ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_MIC))
+ ic->ic_caps |= IEEE80211_C_TKIPMIC;
+ if (ATH_HAL_TKIPSPLIT(ah))
+ asc->asc_splitmic = 1;
+ }
+ asc->asc_hasclrkey = ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_CLR);
+ ic->ic_phytype = IEEE80211_T_OFDM;
+ ic->ic_opmode = IEEE80211_M_STA;
+ ic->ic_state = IEEE80211_S_INIT;
+ ic->ic_maxrssi = ATH_MAX_RSSI;
+ ic->ic_set_shortslot = ath_set_shortslot;
+ ic->ic_xmit = ath_xmit;
+ ieee80211_attach(ic);
+
+ /* Override 80211 default routines */
+ ic->ic_reset = ath_reset;
+ asc->asc_newstate = ic->ic_newstate;
+ ic->ic_newstate = ath_newstate;
+ ic->ic_watchdog = ath_watchdog;
+ ic->ic_node_alloc = ath_node_alloc;
+ ic->ic_node_free = ath_node_free;
+ ic->ic_crypto.cs_key_alloc = ath_key_alloc;
+ ic->ic_crypto.cs_key_delete = ath_key_delete;
+ ic->ic_crypto.cs_key_set = ath_key_set;
+ ieee80211_media_init(ic);
asc->asc_rx_pend = 0;
ATH_HAL_INTRSET(ah, 0);
@@ -1955,7 +1993,7 @@ ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
&asc->asc_softint_id, NULL, 0, ath_softint_handler, (caddr_t)asc);
if (err != DDI_SUCCESS) {
ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
- "ddi_add_softintr() failed"));
+ "ddi_add_softintr() failed\n"));
goto attach_fail5;
}
@@ -1966,29 +2004,55 @@ ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
goto attach_fail6;
}
- if (ddi_add_intr(devinfo, 0, NULL, NULL, gld_intr,
- (caddr_t)asc->asc_isc.isc_dev) != DDI_SUCCESS) {
+ if (ddi_add_intr(devinfo, 0, NULL, NULL, ath_intr,
+ (caddr_t)asc) != DDI_SUCCESS) {
ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
"Can not set intr for ATH driver\n"));
goto attach_fail6;
}
- isc->isc_dev->gldm_cookie = asc->asc_iblock;
- if (err = gld_register(devinfo, "ath", isc->isc_dev)) {
+ /*
+ * Provide initial settings for the WiFi plugin; whenever this
+ * information changes, we need to call mac_plugindata_update()
+ */
+ wd.wd_opmode = ic->ic_opmode;
+ wd.wd_secalloc = WIFI_SEC_NONE;
+ IEEE80211_ADDR_COPY(wd.wd_bssid, ic->ic_bss->in_bssid);
+
+ if ((macp = mac_alloc(MAC_VERSION)) == NULL) {
ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
- "gld_register err %x\n", err));
+ "MAC version mismatch\n"));
+ goto attach_fail7;
+ }
+
+ macp->m_type_ident = MAC_PLUGIN_IDENT_WIFI;
+ macp->m_driver = asc;
+ macp->m_dip = devinfo;
+ macp->m_src_addr = ic->ic_macaddr;
+ macp->m_callbacks = &ath_m_callbacks;
+ macp->m_min_sdu = 0;
+ macp->m_max_sdu = IEEE80211_MTU;
+ macp->m_pdata = &wd;
+ macp->m_pdata_size = sizeof (wd);
+
+ err = mac_register(macp, &ic->ic_mach);
+ mac_free(macp);
+ if (err != 0) {
+ ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
+ "mac_register err %x\n", err));
goto attach_fail7;
}
/* Create minor node of type DDI_NT_NET_WIFI */
(void) snprintf(strbuf, sizeof (strbuf), "%s%d",
- ATH_NODENAME, isc->isc_dev->gldm_ppa);
+ ATH_NODENAME, instance);
err = ddi_create_minor_node(devinfo, strbuf, S_IFCHR,
- isc->isc_dev->gldm_ppa + 1, DDI_NT_NET_WIFI, 0);
+ instance + 1, DDI_NT_NET_WIFI, 0);
if (err != DDI_SUCCESS)
ATH_DEBUG((ATH_DBG_ATTACH, "WARN: ath: ath_attach(): "
"Create minor node failed - %d\n", err));
+ mac_link_update(ic->ic_mach, LINK_STATE_DOWN);
asc->asc_invalid = 1;
return (DDI_SUCCESS);
attach_fail7:
@@ -1996,7 +2060,7 @@ attach_fail7:
attach_fail6:
ddi_remove_softintr(asc->asc_softint_id);
attach_fail5:
- gld_mac_free(isc->isc_dev);
+ (void) ieee80211_detach(ic);
attach_fail4:
ath_desc_free(asc);
attach_fail3:
@@ -2016,8 +2080,8 @@ attach_fail0:
}
mutex_destroy(&asc->asc_rxbuflock);
mutex_destroy(&asc->asc_genlock);
- mutex_destroy(&asc->asc_gld_sched_lock);
- ddi_soft_state_free(ath_soft_state_p, ddi_get_instance(devinfo));
+ mutex_destroy(&asc->asc_resched_lock);
+ ddi_soft_state_free(ath_soft_state_p, instance);
return (DDI_FAILURE);
}
@@ -2026,57 +2090,52 @@ static int32_t
ath_detach(dev_info_t *devinfo, ddi_detach_cmd_t cmd)
{
ath_t *asc;
- int32_t i;
asc = ddi_get_soft_state(ath_soft_state_p, ddi_get_instance(devinfo));
ASSERT(asc != NULL);
- switch (cmd) {
- default:
+ if (cmd != DDI_DETACH)
return (DDI_FAILURE);
- case DDI_SUSPEND:
- return (DDI_FAILURE);
-
- case DDI_DETACH:
- break;
- }
-
- ASSERT(asc->asc_isc.isc_mf_thread == NULL);
+ ath_stop_scantimer(asc);
/* disable interrupts */
ATH_HAL_INTRSET(asc->asc_ah, 0);
+ /*
+ * Unregister from the MAC layer subsystem
+ */
+ if (mac_unregister(asc->asc_isc.ic_mach) != 0)
+ return (DDI_FAILURE);
+
/* free intterrupt resources */
ddi_remove_intr(devinfo, 0, asc->asc_iblock);
ddi_remove_softintr(asc->asc_softint_id);
- /* detach 802.11 and Atheros HAL */
- ieee80211_ifdetach(asc->asc_isc.isc_dev);
+ /*
+ * NB: the order of these is important:
+ * o call the 802.11 layer before detaching the hal to
+ * insure callbacks into the driver to delete global
+ * key cache entries can be handled
+ * o reclaim the tx queue data structures after calling
+ * the 802.11 layer as we'll get called back to reclaim
+ * node state and potentially want to use them
+ * o to cleanup the tx queues the hal is called, so detach
+ * it last
+ */
+ ieee80211_detach(&asc->asc_isc);
ath_desc_free(asc);
+ ath_txq_cleanup(asc);
asc->asc_ah->ah_detach(asc->asc_ah);
- ath_halfix_finit();
-
- /* detach gld */
- if (gld_unregister(asc->asc_isc.isc_dev) != 0)
- return (DDI_FAILURE);
- gld_mac_free(asc->asc_isc.isc_dev);
/* free io handle */
ddi_regs_map_free(&asc->asc_io_handle);
pci_config_teardown(&asc->asc_cfg_handle);
/* destroy locks */
- mutex_destroy(&asc->asc_txbuflock);
- for (i = 0; i < HAL_NUM_TX_QUEUES; i++) {
- if (ATH_TXQ_SETUP(asc, i)) {
- struct ath_txq *txq = &asc->asc_txq[i];
- mutex_destroy(&txq->axq_lock);
- }
- }
mutex_destroy(&asc->asc_rxbuflock);
mutex_destroy(&asc->asc_genlock);
- mutex_destroy(&asc->asc_gld_sched_lock);
+ mutex_destroy(&asc->asc_resched_lock);
ddi_remove_minor_node(devinfo, NULL);
ddi_soft_state_free(ath_soft_state_p, ddi_get_instance(devinfo));
@@ -2084,80 +2143,12 @@ ath_detach(dev_info_t *devinfo, ddi_detach_cmd_t cmd)
return (DDI_SUCCESS);
}
-static struct module_info ath_module_info = {
- 0, /* ATH_IDNUM, */
- "ath", /* ATH_DRIVER_NAME, */
- 0,
- INFPSZ,
- 4096, /* ATH_HIWAT, */
- 128, /* ATH_LOWAT */
-};
-
-static struct qinit ath_r_qinit = { /* read queues */
- NULL,
- gld_rsrv,
- gld_open,
- gld_close,
- NULL,
- &ath_module_info,
- NULL
-};
-
-static struct qinit ath_w_qinit = { /* write queues */
- gld_wput,
- gld_wsrv,
- NULL,
- NULL,
- NULL,
- &ath_module_info,
- NULL
-};
-
-static struct streamtab ath_streamtab = {
- &ath_r_qinit,
- &ath_w_qinit,
- NULL,
- NULL
-};
-
-static struct cb_ops ath_cb_ops = {
- nulldev, /* cb_open */
- nulldev, /* cb_close */
- nodev, /* cb_strategy */
- nodev, /* cb_print */
- nodev, /* cb_dump */
- nodev, /* cb_read */
- nodev, /* cb_write */
- nodev, /* cb_ioctl */
- nodev, /* cb_devmap */
- nodev, /* cb_mmap */
- nodev, /* cb_segmap */
- nochpoll, /* cb_chpoll */
- ddi_prop_op, /* cb_prop_op */
- &ath_streamtab, /* cb_stream */
- D_MP, /* cb_flag */
- 0, /* cb_rev */
- nodev, /* cb_aread */
- nodev /* cb_awrite */
-};
-
-static struct dev_ops ath_dev_ops = {
- DEVO_REV, /* devo_rev */
- 0, /* devo_refcnt */
- gld_getinfo, /* devo_getinfo */
- nulldev, /* devo_identify */
- nulldev, /* devo_probe */
- ath_attach, /* devo_attach */
- ath_detach, /* devo_detach */
- nodev, /* devo_reset */
- &ath_cb_ops, /* devo_cb_ops */
- (struct bus_ops *)NULL, /* devo_bus_ops */
- NULL /* devo_power */
-};
+DDI_DEFINE_STREAM_OPS(ath_dev_ops, nulldev, nulldev, ath_attach, ath_detach,
+ nodev, NULL, D_MP, NULL);
static struct modldrv ath_modldrv = {
&mod_driverops, /* Type of module. This one is a driver */
- "ath driver 1.1", /* short description */
+ "ath driver 1.2/HAL 0.9.17.2", /* short description */
&ath_dev_ops /* driver specific ops */
};
@@ -2182,10 +2173,14 @@ _init(void)
return (status);
mutex_init(&ath_loglock, NULL, MUTEX_DRIVER, NULL);
+ ath_halfix_init();
+ mac_init_ops(&ath_dev_ops, "ath");
status = mod_install(&modlinkage);
if (status != 0) {
- ddi_soft_state_fini(&ath_soft_state_p);
+ mac_fini_ops(&ath_dev_ops);
+ ath_halfix_finit();
mutex_destroy(&ath_loglock);
+ ddi_soft_state_fini(&ath_soft_state_p);
}
return (status);
@@ -2198,8 +2193,10 @@ _fini(void)
status = mod_remove(&modlinkage);
if (status == 0) {
- ddi_soft_state_fini(&ath_soft_state_p);
+ mac_fini_ops(&ath_dev_ops);
+ ath_halfix_finit();
mutex_destroy(&ath_loglock);
+ ddi_soft_state_fini(&ath_soft_state_p);
}
return (status);
}
diff --git a/usr/src/uts/common/io/ath/ath_osdep.c b/usr/src/uts/common/io/ath/ath_osdep.c
index 6b6def64a2..8551b9e3d3 100644
--- a/usr/src/uts/common/io/ath/ath_osdep.c
+++ b/usr/src/uts/common/io/ath/ath_osdep.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -43,17 +43,15 @@
#include <sys/sunddi.h>
#include <sys/varargs.h>
#include "ath_hal.h"
-#include "ath_ieee80211.h"
#include "ath_impl.h"
struct ath_halfix {
void *p;
size_t size;
- int malloced;
- int freed;
};
-static struct ath_halfix ath_halfix[32];
+#define ATH_MAX_HALMEM 1024
+static struct ath_halfix ath_halfix[ATH_MAX_HALMEM];
/* HAL layer needs these definitions */
int ath_hal_dma_beacon_response_time = 2; /* in TU's */
@@ -96,20 +94,17 @@ ath_hal_malloc(size_t size)
void *p;
int i;
- /* support 16 devices(max leakage of one device is 8) */
- for (i = 0; i < 32; i++) {
- if (ath_halfix[i].malloced == 0)
+ for (i = 0; i < ATH_MAX_HALMEM; i++) {
+ if (ath_halfix[i].p == NULL)
break;
}
- if (i >= 32) {
+ if (i >= ATH_MAX_HALMEM) {
ath_problem("ath: ath_hal_malloc(): too many malloc\n");
return (NULL);
}
p = kmem_zalloc(size, KM_SLEEP);
ath_halfix[i].p = p;
ath_halfix[i].size = size;
- ath_halfix[i].malloced = 1;
- ath_halfix[i].freed = 0;
ATH_DEBUG((ATH_DBG_OSDEP, "ath: ath_hal_malloc(): "
"%d: p=%p, size=%d\n", i, p, size));
return (p);
@@ -119,17 +114,16 @@ void
ath_hal_free(void* p)
{
int i;
- for (i = 0; i < 32; i++) {
+ for (i = 0; i < ATH_MAX_HALMEM; i++) {
if (ath_halfix[i].p == p)
break;
}
- if (i >= 32) {
+ if (i >= ATH_MAX_HALMEM) {
ath_problem("ath: ath_hal_free(): no record for %p\n", p);
return;
}
kmem_free(p, ath_halfix[i].size);
- ath_halfix[i].malloced = 0;
- ath_halfix[i].freed = 1;
+ ath_halfix[i].p = NULL;
ATH_DEBUG((ATH_DBG_OSDEP, "ath: ath_hal_free(): %d: p=%p, size=%d\n",
i, p, ath_halfix[i].size));
}
@@ -147,24 +141,13 @@ ath_hal_memzero(void *dst, size_t n)
bzero(dst, n);
}
-/*
- * So far as I know and test, hal.o has a bug that when attaching,
- * it calls ath_hal_malloc() four times while detaching it calls
- * ath_hal_free() only 3 times, so everytime when a pair of driver
- * load/unload is done, a memory leak occurs. The function
- * free_hal_leaked_mem() just help free the memory that alloced by
- * hal.o but not freed by it. In fact, when attaching, hal.o only
- * call ath_hal_alloc() four times, here assuming a maximum times of
- * 8 just considers some special cases, we have no source after all!
- */
void
ath_halfix_init(void)
{
int i;
- for (i = 0; i < 32; i++) {
- ath_halfix[i].malloced = 0;
- }
+ for (i = 0; i < ATH_MAX_HALMEM; i++)
+ ath_halfix[i].p = NULL;
}
void
@@ -172,10 +155,11 @@ ath_halfix_finit(void)
{
int i;
- for (i = 0; i < 32; i++) {
- if ((ath_halfix[i].malloced == 1) &&
- (ath_halfix[i].freed == 0)) {
+ for (i = 0; i < ATH_MAX_HALMEM; i++)
+ if (ath_halfix[i].p != NULL) {
kmem_free(ath_halfix[i].p, ath_halfix[i].size);
+ ATH_DEBUG((ATH_DBG_OSDEP, "ath_halfix: "
+ "Free %d: p=%x size=%d\n",
+ i, ath_halfix[i].p, ath_halfix[i].size));
}
- }
}
diff --git a/usr/src/uts/common/io/ath/ath_rate.c b/usr/src/uts/common/io/ath/ath_rate.c
index 8ebf4f9091..d8cc78b845 100644
--- a/usr/src/uts/common/io/ath/ath_rate.c
+++ b/usr/src/uts/common/io/ath/ath_rate.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -58,7 +58,6 @@
#include <sys/sunddi.h>
#include <sys/pci.h>
#include <sys/errno.h>
-#include <sys/gld.h>
#include <sys/dlpi.h>
#include <sys/ethernet.h>
#include <sys/list.h>
@@ -70,7 +69,7 @@
#include <inet/wifi_ioctl.h>
#include "ath_hal.h"
#include "ath_impl.h"
-#include "ath_ieee80211.h"
+#include "ath_rate.h"
void
ath_rate_update(ath_t *asc, struct ieee80211_node *in, int32_t rate)
@@ -151,10 +150,10 @@ done:
void
ath_rate_ctl_start(ath_t *asc, struct ieee80211_node *in)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
int32_t srate;
- if (isc->isc_fixed_rate == -1) {
+ if (ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE) {
/*
* No fixed rate is requested. For 11b start with
* the highest negotiated rate; otherwise, for 11g
@@ -172,25 +171,25 @@ ath_rate_ctl_start(ath_t *asc, struct ieee80211_node *in)
}
} else {
/*
- * A fixed rate is to be used; ic_fixed_rate is an
- * index into the supported rate set. Convert this
- * to the index into the negotiated rate set for
- * the node. We know the rate is there because the
- * rate set is checked when the station associates.
+ * A fixed rate is to be used; We know the rate is
+ * there because the rate set is checked when the
+ * station associates.
*/
- const struct ieee80211_rateset *rs =
- &isc->isc_sup_rates[isc->isc_curmode];
- int32_t r = rs->ir_rates[isc->isc_fixed_rate] &
- IEEE80211_RATE_VAL;
/* NB: the rate set is assumed sorted */
srate = in->in_rates.ir_nrates - 1;
- for (; srate >= 0 && IEEE80211_RATE(srate) != r; srate--);
+ for (; srate >= 0 && IEEE80211_RATE(srate) != ic->ic_fixed_rate;
+ srate--);
}
ATH_DEBUG((ATH_DBG_RATE, "ath: ath_rate_ctl_start(): "
"srate=%d rate=%d\n", srate, IEEE80211_RATE(srate)));
ath_rate_update(asc, in, srate);
}
+void
+ath_rate_cb(void *arg, struct ieee80211_node *in)
+{
+ ath_rate_update((ath_t *)arg, in, 0);
+}
/*
* Reset the rate control state for each 802.11 state transition.
@@ -198,15 +197,15 @@ ath_rate_ctl_start(ath_t *asc, struct ieee80211_node *in)
void
ath_rate_ctl_reset(ath_t *asc, enum ieee80211_state state)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ieee80211_node *in;
- if (isc->isc_opmode == IEEE80211_M_STA) {
+ if (ic->ic_opmode == IEEE80211_M_STA) {
/*
* Reset local xmit state; this is really only
* meaningful when operating in station mode.
*/
- in = (struct ieee80211_node *)isc->isc_bss;
+ in = (struct ieee80211_node *)ic->ic_bss;
if (state == IEEE80211_S_RUN) {
ath_rate_ctl_start(asc, in);
} else {
@@ -219,12 +218,8 @@ ath_rate_ctl_reset(ath_t *asc, enum ieee80211_state state)
* For any other operating mode we want to reset the
* tx rate state of each node.
*/
- in = list_head(&isc->isc_in_list);
- while (in != NULL) {
- ath_rate_update(asc, in, 0);
- in = list_next(&isc->isc_in_list, in);
- }
- ath_rate_update(asc, isc->isc_bss, 0);
+ ieee80211_iterate_nodes(&ic->ic_sta, ath_rate_cb, asc);
+ ath_rate_update(asc, ic->ic_bss, 0);
}
}
@@ -305,7 +300,7 @@ ath_rate_setup(ath_t *asc, uint32_t mode)
int32_t i, maxrates;
struct ieee80211_rateset *rs;
struct ath_hal *ah = asc->asc_ah;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
const HAL_RATE_TABLE *rt;
switch (mode) {
@@ -318,9 +313,12 @@ ath_rate_setup(ath_t *asc, uint32_t mode)
case IEEE80211_MODE_11G:
asc->asc_rates[mode] = ATH_HAL_GETRATETABLE(ah, HAL_MODE_11G);
break;
- case IEEE80211_MODE_TURBO:
+ case IEEE80211_MODE_TURBO_A:
asc->asc_rates[mode] = ATH_HAL_GETRATETABLE(ah, HAL_MODE_TURBO);
break;
+ case IEEE80211_MODE_TURBO_G:
+ asc->asc_rates[mode] = ATH_HAL_GETRATETABLE(ah, HAL_MODE_108G);
+ break;
default:
ATH_DEBUG((ATH_DBG_RATE, "ath: ath_rate_setup(): "
"invalid mode %u\n", mode));
@@ -337,7 +335,7 @@ ath_rate_setup(ath_t *asc, uint32_t mode)
maxrates = IEEE80211_RATE_MAXSIZE;
} else
maxrates = rt->rateCount;
- rs = &isc->isc_sup_rates[mode];
+ rs = &ic->ic_sup_rates[mode];
for (i = 0; i < maxrates; i++)
rs->ir_rates[i] = rt->info[i].dot11Rate;
rs->ir_nrates = maxrates;
diff --git a/usr/src/uts/common/io/ath/ath_rate.h b/usr/src/uts/common/io/ath/ath_rate.h
index 98ed99da93..347580e686 100644
--- a/usr/src/uts/common/io/ath/ath_rate.h
+++ b/usr/src/uts/common/io/ath/ath_rate.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -44,7 +44,6 @@
extern "C" {
#endif
-#include "ath_ieee80211.h"
#include "ath_impl.h"
void ath_rate_ctl_start(ath_t *asc, struct ieee80211_node *in);
@@ -52,6 +51,7 @@ void ath_rate_ctl_reset(ath_t *asc, enum ieee80211_state state);
void ath_rate_ctl(ieee80211com_t *isc, struct ieee80211_node *in);
void ath_rate_update(ath_t *asc, struct ieee80211_node *in, int32_t rate);
void ath_rate_setup(ath_t *asc, uint32_t mode);
+void ath_rate_cb(void *arg, struct ieee80211_node *in);
#ifdef __cplusplus
}
diff --git a/usr/src/uts/common/io/ath/ath_wificonfig.c b/usr/src/uts/common/io/ath/ath_wificonfig.c
deleted file mode 100644
index cc6c7d1a67..0000000000
--- a/usr/src/uts/common/io/ath/ath_wificonfig.c
+++ /dev/null
@@ -1,818 +0,0 @@
-/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * 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,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- * 3. Neither the names of the above-listed copyright holders nor the names
- * of any contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
- *
- */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/signal.h>
-#include <sys/stream.h>
-#include <sys/termio.h>
-#include <sys/errno.h>
-#include <sys/file.h>
-#include <sys/cmn_err.h>
-#include <sys/stropts.h>
-#include <sys/strsubr.h>
-#include <sys/strtty.h>
-#include <sys/kbio.h>
-#include <sys/cred.h>
-#include <sys/stat.h>
-#include <sys/consdev.h>
-#include <sys/kmem.h>
-#include <sys/modctl.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-#include <sys/pci.h>
-#include <sys/errno.h>
-#include <sys/gld.h>
-#include <sys/dlpi.h>
-#include <sys/ethernet.h>
-#include <sys/note.h>
-#include <sys/strsun.h>
-#include <sys/list.h>
-#include <inet/common.h>
-#include <inet/nd.h>
-#include <inet/mi.h>
-#include <inet/wifi_ioctl.h>
-#include "ath_impl.h"
-#include "ath_hal.h"
-#include "ath_ieee80211.h"
-
-extern int
-ath_gld_start(gld_mac_info_t *gld_p);
-
-static int
-ath_wificfg_essid(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *value, *buf;
- int len;
- wldp_t *infp, *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
-
- outfp = (wldp_t *)buf;
- infp = (wldp_t *)mp->b_rptr;
-
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- if (cmd == WLAN_GET_PARAM) {
- if (mi_strlen((const char *)isc->isc_des_essid) == 0) {
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- offsetof(wl_essid_t, wl_essid_essid) +
- mi_strlen((const char *)
- isc->isc_bss->in_essid);
- ((wl_essid_t *)(outfp->wldp_buf))->wl_essid_length =
- mi_strlen((const char *)
- isc->isc_bss->in_essid);
- bcopy(isc->isc_bss->in_essid,
- buf + offsetof(wldp_t, wldp_buf) +
- offsetof(wl_essid_t, wl_essid_essid),
- mi_strlen((const char *)
- isc->isc_bss->in_essid));
- } else {
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- offsetof(wl_essid_t, wl_essid_essid) +
- mi_strlen((const char *)isc->isc_des_essid);
- ((wl_essid_t *)(outfp->wldp_buf))->wl_essid_length =
- mi_strlen((const char *)isc->isc_des_essid);
- bcopy(isc->isc_des_essid,
- buf + offsetof(wldp_t, wldp_buf) +
- offsetof(wl_essid_t, wl_essid_essid),
- mi_strlen((const char *)
- isc->isc_des_essid));
- }
- } else if (cmd == WLAN_SET_PARAM) {
- value = ((wl_essid_t *)(infp->wldp_buf))->wl_essid_essid;
- bzero(isc->isc_des_essid, IEEE80211_NWID_LEN);
- if (mi_strlen(value) == 0)
- isc->isc_des_esslen = 0;
- else {
- len = mi_strlen((const char *)value);
- if (len > IEEE80211_NWID_LEN)
- len = IEEE80211_NWID_LEN;
- bcopy(value, isc->isc_des_essid, len);
- isc->isc_des_esslen = len;
- ATH_DEBUG((ATH_DBG_WIFICFG,
- "ath: ath_wificfg_essid(): "
- "set essid=%s len=%d\n", value, len));
- }
- if (asc->asc_invalid == 0) {
- (void) ath_gld_start(isc->isc_dev);
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
- }
- }
-
- outfp->wldp_result = WL_SUCCESS;
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- kmem_free(buf, MAX_BUF_LEN);
- return (WL_SUCCESS);
-}
-
-static int
-ath_wificfg_bssid(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *buf;
- wldp_t *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- outfp->wldp_length = WIFI_BUF_OFFSET + sizeof (wl_bssid_t);
- if (cmd == WLAN_GET_PARAM) {
- if (isc->isc_flags & IEEE80211_F_DESBSSID)
- bcopy(isc->isc_des_bssid,
- buf + WIFI_BUF_OFFSET, sizeof (wl_bssid_t));
- else
- bcopy(isc->isc_bss->in_bssid,
- buf + WIFI_BUF_OFFSET, sizeof (wl_bssid_t));
- outfp->wldp_result = WL_SUCCESS;
-
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_wificfg_bssid(): "
- "get bssid=%x %x %x %x %x %x\n",
- buf[WIFI_BUF_OFFSET+0], buf[WIFI_BUF_OFFSET+1],
- buf[WIFI_BUF_OFFSET+2], buf[WIFI_BUF_OFFSET+3],
- buf[WIFI_BUF_OFFSET+4], buf[WIFI_BUF_OFFSET+5]));
- } else if (cmd == WLAN_SET_PARAM) {
- outfp->wldp_result = WL_READONLY;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- kmem_free(buf, MAX_BUF_LEN);
- return (WL_SUCCESS);
-}
-
-static int
-ath_wificfg_nodename(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- char *value, *buf;
- int iret, nickname_len;
- uint32_t i;
- wldp_t *infp, *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_wificfg_nodename(): "
- "nodename entry\n"));
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
-
- nickname_len = MIN(isc->isc_nicknamelen, IEEE80211_NWID_LEN);
-
- if (cmd == WLAN_GET_PARAM) {
- outfp->wldp_length = WIFI_BUF_OFFSET +
- offsetof(wl_nodename_t, wl_nodename_name) + nickname_len;
- ((wl_nodename_t *)(buf + WIFI_BUF_OFFSET))->wl_nodename_length =
- nickname_len;
- bcopy(isc->isc_nickname, buf + WIFI_BUF_OFFSET +
- offsetof(wl_nodename_t, wl_nodename_name), nickname_len);
- outfp->wldp_result = WL_SUCCESS;
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_wificfg_nodename(): "
- "get nodename=%s\n", isc->isc_nickname));
- } else if (cmd == WLAN_SET_PARAM) {
- value = ((wl_nodename_t *)(infp->wldp_buf))->wl_nodename_name;
- (void) strncpy((char *)isc->isc_nickname, value,
- MIN(32, strlen(value)));
- isc->isc_nickname[strlen(value)] = '\0';
- isc->isc_nicknamelen =
- ((wl_nodename_t *)(infp->wldp_buf))->wl_nodename_length;
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_SUCCESS;
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_wificfg_nodename(): "
- "set nodename=%s\n", value));
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_wificfg_nodename(): "
- "set nodename_len=%d\n", isc->isc_nicknamelen));
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_encryption(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *buf;
- int iret;
- wldp_t *infp, *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- sizeof (wl_encryption_t);
- if (cmd == WLAN_GET_PARAM) {
- *(wl_encryption_t *)(outfp->wldp_buf) =
- (isc->isc_flags & IEEE80211_F_WEPON) ? 1 : 0;
- outfp->wldp_result = WL_SUCCESS;
- } else if (cmd == WLAN_SET_PARAM) {
- if (*(wl_encryption_t *)(infp->wldp_buf) ==
- WL_NOENCRYPTION) {
- isc->isc_flags &= ~IEEE80211_F_WEPON;
- } else if (*(wl_encryption_t *)(infp->wldp_buf) ==
- WL_ENC_WEP) {
- isc->isc_flags |= IEEE80211_F_WEPON;
- }
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: "
- "ath_wificfg_encryption(): set encryption=%d\n",
- (isc->isc_flags & IEEE80211_F_WEPON) ? 1 : 0));
- if (asc->asc_invalid == 0) {
- (void) ath_gld_start(isc->isc_dev);
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
- }
- outfp->wldp_result = WL_SUCCESS;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_wepkey(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- wldp_t *infp, *outfp;
- char *buf;
- int iret;
- wl_wep_key_t *p_wepkey_tab;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
-
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- sizeof (wl_wep_key_tab_t);
-
- if (cmd == WLAN_GET_PARAM) {
- outfp->wldp_result = WL_WRITEONLY;
- } else if (cmd == WLAN_SET_PARAM) {
- p_wepkey_tab = (wl_wep_key_t *)(infp->wldp_buf);
- for (i = 0; i < MAX_NWEPKEYS; i++) {
- if (p_wepkey_tab[i].wl_wep_operation == WL_ADD) {
- isc->isc_nw_keys[i].iwk_len =
- p_wepkey_tab[i].wl_wep_length;
- bcopy(p_wepkey_tab[i].wl_wep_key,
- isc->isc_nw_keys[i].iwk_key,
- p_wepkey_tab[i].wl_wep_length);
- }
- }
- if (asc->asc_invalid == 0) {
- (void) ath_gld_start(isc->isc_dev);
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
- }
- outfp->wldp_result = WL_SUCCESS;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-
-}
-
-static int
-ath_wificfg_keyid(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *buf;
- int iret;
- wldp_t *infp, *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- wl_wep_key_id_t keyid;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
-
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- sizeof (wl_wep_key_id_t);
-
- if (cmd == WLAN_GET_PARAM) {
- *(wl_wep_key_id_t *)(outfp->wldp_buf) =
- isc->isc_wep_txkey;
- outfp->wldp_result = WL_SUCCESS;
- } else if (cmd == WLAN_SET_PARAM) {
- keyid = *(wl_wep_key_id_t *)(infp->wldp_buf);
- if (keyid >= MAX_NWEPKEYS) {
- outfp->wldp_result = WL_NOTSUPPORTED;
- } else {
- isc->isc_wep_txkey = keyid;
- ATH_DEBUG((ATH_DBG_WIFICFG,
- "ath: ath_wificfg_keyid(): set wepkeyid=%d\n",
- isc->isc_wep_txkey));
- if (asc->asc_invalid == 0) {
- (void) ath_gld_start(isc->isc_dev);
- (void) _ieee80211_new_state(isc,
- IEEE80211_S_SCAN, -1);
- }
- outfp->wldp_result = WL_SUCCESS;
- }
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-/*
- * Units are in db above the noise floor. That means the
- * rssi values reported in the tx/rx descriptors in the
- * driver are the SNR expressed in db.
- */
-static void
-ath_getrssi(struct ieee80211_node *in, wl_rssi_t *rssi)
-{
- wl_rssi_t val, max_val;
-
- max_val = 63; /* Max rssi */
- val = (wl_rssi_t)in->in_recv_hist[in->in_hist_cur].irh_rssi;
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_getrssi(): "
- "rssi: %d\n", val));
- if (val > max_val)
- val = max_val; /* Max rssi */
- if (max_val > MAX_RSSI)
- *rssi = (wl_rssi_t)((val + (double)max_val / MAX_RSSI - 1) /
- max_val * MAX_RSSI);
- else
- *rssi = (wl_rssi_t)((double)val / max_val * MAX_RSSI);
-}
-
-static void
-ath_wait_scan(ath_t *asc)
-{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- while (isc->isc_flags & IEEE80211_F_ASCAN) {
- if (cv_timedwait(&isc->isc_scan_cv, &isc->isc_genlock,
- ddi_get_lbolt() + drv_usectohz(6000000)) != 0)
- break;
- }
-}
-
-static int
-ath_wificfg_esslist(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- _NOTE(ARGUNUSED(cmd))
-
- char *buf;
- int iret;
- uint32_t i, essid_num;
- struct ieee80211_node *in;
- wldp_t *outfp;
- wl_ess_conf_t *p_ess_conf;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- /* Wait scan finish */
- ath_wait_scan(asc);
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- essid_num = 0;
- in = list_head(&isc->isc_in_list);
- while (in != NULL) {
- p_ess_conf = (wl_ess_conf_t *)
- (buf + offsetof(wldp_t, wldp_buf) +
- offsetof(wl_ess_list_t, wl_ess_list_ess) +
- essid_num * sizeof (wl_ess_conf_t));
-
- if (p_ess_conf > (wl_ess_conf_t *)
- (buf + MAX_BUF_LEN - sizeof (wl_ess_conf_t)))
- break;
-
- bcopy(in->in_essid,
- p_ess_conf->wl_ess_conf_essid.wl_essid_essid,
- in->in_esslen);
- bcopy(in->in_bssid, p_ess_conf->wl_ess_conf_bssid, 6);
- (p_ess_conf->wl_phy_conf).wl_phy_dsss_conf.wl_dsss_subtype =
- WL_DSSS;
- p_ess_conf->wl_ess_conf_wepenabled =
- (in->in_capinfo & IEEE80211_CAPINFO_PRIVACY ?
- WL_ENC_WEP : WL_NOENCRYPTION);
- p_ess_conf->wl_ess_conf_bsstype =
- (in->in_capinfo & IEEE80211_CAPINFO_ESS ?
- WL_BSS_BSS : WL_BSS_IBSS);
- ath_getrssi(in, &(p_ess_conf->wl_ess_conf_sl));
-
- essid_num++;
- in = list_next(&isc->isc_in_list, in);
- }
-
- ((wl_ess_list_t *)(outfp->wldp_buf))->wl_ess_list_num = essid_num;
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- offsetof(wl_ess_list_t, wl_ess_list_ess) +
- essid_num * sizeof (wl_ess_conf_t);
- outfp->wldp_result = WL_SUCCESS;
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_supportrates(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- _NOTE(ARGUNUSED(asc))
-
- uint16_t i;
- wldp_t *outfp;
- char *buf;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
- const struct ieee80211_rateset *rs;
- wl_rates_t *rates;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- rs = &isc->isc_sup_rates[ieee80211_chan2mode(isc, in->in_chan)];
- rates = (wl_rates_t *)(outfp->wldp_buf);
- if (cmd == WLAN_GET_PARAM) {
- rates->wl_rates_num = rs->ir_nrates;
- for (i = 0; i < rs->ir_nrates; i++) {
- rates->wl_rates_rates[i] = rs->ir_rates[i] &
- IEEE80211_RATE_VAL;
- }
- outfp->wldp_length = WIFI_BUF_OFFSET +
- offsetof(wl_rates_t, wl_rates_rates) +
- rs->ir_nrates * sizeof (char);
- outfp->wldp_result = WL_SUCCESS;
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- }
-
- kmem_free(buf, MAX_BUF_LEN);
- return (WL_SUCCESS);
-}
-
-static int
-ath_wificfg_desiredrates(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- int rate, iret;
- char *buf;
- wldp_t *outfp;
-
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
- struct ieee80211_rateset *rs = &in->in_rates;
-
- /*
- * Here rate is a full duplex speed, wificonfig will divide it
- * by 2 when display to user. From the wificonfig point of view,
- * 'rate' is just a transmiting rate.
- */
- rate = (rs->ir_rates[in->in_txrate] & IEEE80211_RATE_VAL);
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- if (cmd == WLAN_GET_PARAM) {
- ((wl_rates_t *)(outfp->wldp_buf))->wl_rates_num = 1;
- (((wl_rates_t *)(outfp->wldp_buf))->wl_rates_rates)[0] = rate;
- outfp->wldp_length = WIFI_BUF_OFFSET +
- offsetof(wl_rates_t, wl_rates_rates) + sizeof (char);
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: "
- "ath_wificfg_desiredrates(): current rate=%dM\n", rate));
- outfp->wldp_result = WL_SUCCESS;
- } else if (cmd == WLAN_SET_PARAM) {
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_SUCCESS;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_authmode(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- _NOTE(ARGUNUSED(asc))
-
- uint32_t i, authmode;
- char *buf;
- int iret;
- wldp_t *infp, *outfp;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
-
- outfp->wldp_length = WIFI_BUF_OFFSET + sizeof (wl_authmode_t);
- outfp->wldp_result = WL_SUCCESS;
- if (cmd == WLAN_GET_PARAM) {
- *(wl_authmode_t *)(outfp->wldp_buf) = WL_OPENSYSTEM;
- } else if (cmd == WLAN_SET_PARAM) {
- authmode = *(wl_authmode_t *)(infp->wldp_buf);
- if (authmode != WL_OPENSYSTEM) {
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_LACK_FEATURE;
- }
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_bsstype(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- _NOTE(ARGUNUSED(asc))
-
- uint32_t i, bss_type;
- char *buf;
- int iret;
- wldp_t *infp, *outfp;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
- outfp->wldp_length = WIFI_BUF_OFFSET + sizeof (wl_bss_type_t);
- outfp->wldp_result = WL_SUCCESS;
- if (cmd == WLAN_GET_PARAM) {
- *(wl_bss_type_t *)(outfp->wldp_buf) = WL_BSS_BSS;
- } else if (cmd == WLAN_SET_PARAM) {
- bss_type = (uint16_t)(*(wl_bss_type_t *)(infp->wldp_buf));
- if (bss_type != WL_BSS_BSS) {
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_LACK_FEATURE;
- }
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_linkstatus(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *buf;
- int iret;
- wldp_t *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- outfp->wldp_length = WIFI_BUF_OFFSET + sizeof (wl_linkstatus_t);
- outfp->wldp_result = WL_SUCCESS;
-
- if (cmd == WLAN_GET_PARAM) {
- *(wl_linkstatus_t *)(outfp->wldp_buf) =
- (IEEE80211_S_RUN == isc->isc_state) ?
- WL_CONNECTED : WL_NOTCONNECTED;
- } else if (cmd == WLAN_SET_PARAM) {
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_NOTSUPPORTED;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_rssi(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *buf;
- int iret;
- wldp_t *outfp;
-
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- outfp->wldp_length = WIFI_BUF_OFFSET + sizeof (wl_rssi_t);
- outfp->wldp_result = WL_SUCCESS;
-
- if (cmd == WLAN_GET_PARAM) {
- ath_getrssi(in, (wl_rssi_t *)(outfp->wldp_buf));
- } else if (cmd == WLAN_SET_PARAM) {
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_NOTSUPPORTED;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_scan(ath_t *asc)
-{
- int iret = WL_SUCCESS;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- if (asc->asc_invalid == 0 && isc->isc_state == IEEE80211_S_INIT) {
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
- ath_wait_scan(asc);
- (void) _ieee80211_new_state(isc, IEEE80211_S_INIT, -1);
- }
- return (iret);
-}
-
-static void
-ath_loaddefdata(ath_t *asc)
-{
- int i;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
- struct ieee80211_rateset *rs = &in->in_rates;
-
- if (isc->isc_flags & IEEE80211_F_DESBSSID)
- bzero(isc->isc_des_bssid, IEEE80211_ADDR_LEN);
- else
- bzero(isc->isc_bss->in_bssid, IEEE80211_ADDR_LEN);
- isc->isc_des_esslen = 0;
- isc->isc_des_essid[0] = 0;
- isc->isc_bss->in_essid[0] = 0;
- rs->ir_rates[in->in_txrate] = 0; /* rate */
- isc->isc_flags &= ~IEEE80211_F_WEPON; /* encryption */
- isc->isc_wep_txkey = 0; /* wepkey id */
- for (i = 0; i < MAX_NWEPKEYS; i++) /* wepkey */
- isc->isc_nw_keys[i].iwk_len = 0;
- for (i = 0; i < IEEE80211_RECV_HIST_LEN; ++i)
- in->in_recv_hist[i].irh_rssi = 0;
- in->in_hist_cur = IEEE80211_RECV_HIST_LEN - 1;
-}
-
-static int
-ath_wificfg_loaddefaults(ath_t *asc)
-{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- ath_loaddefdata(asc);
-
- if (asc->asc_invalid == 0) {
- (void) ath_gld_start(isc->isc_dev);
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
- }
-
- return (WL_SUCCESS);
-}
-
-static int
-ath_wificfg_disassoc(ath_t *asc)
-{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- if (! asc->asc_invalid) {
- (void) _ieee80211_new_state(isc, IEEE80211_S_INIT, -1);
- ath_loaddefdata(asc);
- }
- return (WL_SUCCESS);
-}
-
-int32_t
-ath_getset(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i, id;
- char *buf;
- int ret;
- wldp_t *infp, *outfp;
-
- ret = WL_SUCCESS;
- infp = (wldp_t *)mp->b_rptr;
- id = infp->wldp_id;
-
- switch (id) {
- case WL_ESSID:
- ret = ath_wificfg_essid(asc, mp, cmd);
- break;
- case WL_BSSID:
- ret = ath_wificfg_bssid(asc, mp, cmd);
- break;
- case WL_NODE_NAME:
- ret = ath_wificfg_nodename(asc, mp, cmd);
- break;
- case WL_ENCRYPTION:
- ret = ath_wificfg_encryption(asc, mp, cmd);
- break;
- case WL_WEP_KEY_TAB:
- ret = ath_wificfg_wepkey(asc, mp, cmd);
- break;
- case WL_WEP_KEY_ID:
- ret = ath_wificfg_keyid(asc, mp, cmd);
- break;
- case WL_ESS_LIST:
- ret = ath_wificfg_esslist(asc, mp, cmd);
- break;
- case WL_SUPPORTED_RATES:
- ret = ath_wificfg_supportrates(asc, mp, cmd);
- break;
- case WL_DESIRED_RATES:
- ret = ath_wificfg_desiredrates(asc, mp, cmd);
- break;
- case WL_AUTH_MODE:
- ret = ath_wificfg_authmode(asc, mp, cmd);
- break;
- case WL_BSS_TYPE:
- ret = ath_wificfg_bsstype(asc, mp, cmd);
- break;
- case WL_LINKSTATUS:
- ret = ath_wificfg_linkstatus(asc, mp, cmd);
- break;
- case WL_RSSI:
- ret = ath_wificfg_rssi(asc, mp, cmd);
- break;
- case WL_SCAN:
- ret = ath_wificfg_scan(asc);
- break;
- case WL_LOAD_DEFAULTS:
- ret = ath_wificfg_loaddefaults(asc);
- break;
- case WL_DISASSOCIATE:
- ret = ath_wificfg_disassoc(asc);
- break;
- default:
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- outfp->wldp_length = offsetof(wldp_t, wldp_buf);
- outfp->wldp_result = WL_LACK_FEATURE;
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- kmem_free(buf, MAX_BUF_LEN);
- break;
- }
- return (ret);
-}
diff --git a/usr/src/uts/common/io/ath/hal_x86_32.o.uu b/usr/src/uts/common/io/ath/hal_x86_32.o.uu
index fb7d44642e..300c95a2fe 100644
--- a/usr/src/uts/common/io/ath/hal_x86_32.o.uu
+++ b/usr/src/uts/common/io/ath/hal_x86_32.o.uu
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting, Atheros
+ * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting, Atheros
* Communications, Inc. All rights reserved.
*
* Use is subject to license terms.
@@ -36,1961 +36,2226 @@
* SUCH DAMAGES.
*
*/
-#define ATH_HAL_VERSION "0.9.14.9"
#pragma ident "%Z%%M% %I% %E% SMI"
+#define ATH_HAL_VERSION "0.9.17.2"
begin-base64 644 hal.o
-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
+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
-/x/+/4n4weANJQDgAQAJwomTFJgAAFteX8ONdgCD7AyLVCQQi0QkFIP4PHYFuDwAAABm
-iYLMAQAAg+wEjUQkDFD/svwHAABS6Pz///+DxBzDVVdWU4PsFItsJCiLXCQsie//tQgv
-AAD/tQQvAADo/P///4PECGogjYUMLwAAUOj8////ZouVzAEAAIPEEGaD+jx+Bbo8AAAA
-ZoP6O38KuQAAAABmhdJ1DouF0AEAAGaLjAA4TgAAg+wIjUQkElCNRCQUUA+/wlAPv8FQ
-U1XoZgIAAIPEILoAAAAAhcAPhEoCAACD7Az/dCQ0U41EJB5QjUQkIFBV/5fcFgAAg8Qg
-ugAAAACFwA+EIQIAAIO9pAEAAAd0CGaDhyovAAAEvgAAAABmi4eAGQAAZgGEdwwvAABm
-g7x3DC8AAD92CmbHhHcMLwAAPwBGg/4Pdt1mg78sCAAAAQ+HpgAAAGaDvaoBAABBd1wP
-t0MCJdAAAAA9wAAAAHVMZoE7tAl1Iw+2jyAIAAAPt4cqCAAAKcG4Z2ZmZvfpidDR+MH5
-H2YpyOsSD7aXIAgAALhnZmZm9+qJ0NHog+wID7fAUFXoUAYAAIPEEL4AAAAAjRy1AAAA
-AItNFIuHBC8AAA+3VLACweIYgcoAAP8AD7cEsMHgCAz/Jf//AAAJwomUGYChAABGg/4f
-fsWLTRQPt5cSLwAAg+I/weIYD7eHEC8AAIPgP8HgEAnCD7eHDi8AAIPgP8HgCAnCD7eH
-DC8AAIPgPwnCiZE0mQAAi00UD7eXGi8AAIPiP8HiGA+3hxgvAACD4D/B4BAJwg+3hxYv
-AACD4D/B4AgJwg+3hxQvAACD4D8JwomROJkAAItNFA+3lyAvAACD4j/B4hgPt4ceLwAA
-g+A/weAQCcIPt4cqLwAAg+A/weAICcIPt4ccLwAAg+A/CcKJkTSiAACLTRQPt5coLwAA
-g+I/weIYD7eHJi8AAIPgP8HgEAnCD7eHJC8AAIPgP8HgCAnCD7eHIi8AAIPgPwnCiZE4
-ogAAi1UUg79sGQAAARnAg+DAg8B8iYI8mQAAZouHDC8AAGaJhc4BAAC6AQAAAIn2idCD
-xAxbXl9dw4n2VVdWU4PsVItEJHBmiUQkJotUJHRmiVQkJIt0JGiNvgwvAABmx0QkIjwA
-ZsdEJCA8AP90JGxW6Pz////R4GaJRCQmi4wkhAAAAGbHAcT/i4QkgAAAAGbHADwAg8QI
-/3QkbFbo/P///4hEJCW7AAAAAIPEEGaDvgQJAAAAD4SHAAAAD7ZsJBWJ6oPi+IlUJBCQ
-ZoO8XgYJAAAAdGFmD7ZEJBVmOYReBgkAAHQRD7eEXgYJAACD4AcM4DnFdUCJ2MHgBo2E
-MFANAACD7AhQi0wkcA+3AVDoSwUAAIPEEIF8JBDgAAAAdQ5mOUQkGnYPZolEJBrrCGaJ
-RCQa6w2QQw+3hgQJAAA52H+Ii1QkZA+3QgIl0AAAAD3AAAAAD4WmAAAAgGQkFQeATCQV
-AbsAAAAAZoO+BAkAAAAPhJMAAAAPtmwkFYnpg+H4iUwkDJBmg7xeBgkAAAB0YWYPtkQk
-FWY5hF4GCQAAdBEPt4ReBgkAAIPgBwzgOcV1QInYweAGjYQwUA0AAIPsCFCLVCRwD7cC
-UOiPBAAAg8QQgXwkDOAAAAB1DmY5RCQYdg9miUQkGOsIZolEJBjrGZBDD7eGBAkAADnY
-f4jrCmaLTCQaZolMJBiLRCRk9kADAXQIioYcCAAA6waKhh0IAACD7AQPvsBQ/3QkbP90
-JGzo/P///4jDi1QkdA+3QgKDxBCoQA+EpgEAACXQAAAAPcAAAAB1JoPsDI1EJDxQD7eG
-GA0AAFCNhhoNAABQUv90JHzoGgUAAIPEIOsng+wMjUQkPFAPt4bGDAAAUI2GyAwAAFD/
-dCR8/3QkfOjxBAAAg8QgD7dUJBYPvsMpwg+3RCQaOcJ+AonCidGLRCRk9kACEHREZoG+
-AAgAAAAwdhIPt4YOCAAAD7/SOdB+AonQicFmgb4ACAAA/z92HItUJGT2QgKAdBIPt4YQ
-CAAAD7/ROdB+AonQicEPt1QkNg+/wTnCfgKJwmaLRCQe0eCJ0WYpwXkFuQAAAABmO0wk
-HH4Ei0wkHGaJTwhmiU8GZolPBGaJTwJmiQ+LRCQ0ZjnIdgKJyGaJRwpmi0QkMmY7B3YD
-ZosHZolHDItEJDBmOwd2A2aLB2aJRw5mgb4ACAAA/z92SQ+/0YtEJGT2QAKAdA0Pt4YU
-CAAAOcJ8DesPD7eGEggAADnCfQSJyOsai1QkZPZCAoB0CWaLhhQIAADrB2aLhhIIAABm
-iUce6wdmiwdmiUceZotHDotMJHBmiQFmiweLVCR0ZokCD78CiYZ8GQAAi0wkZA+3QQKo
-IHUQJdAAAAA9wAAAAA+F5QAAAIPsDI1EJCxQD7eGOA0AAFCNhjoNAABQ/3QkfP90JHzo
-YQMAAA+3TCQ2D77DKcEPt0QkOIPEIDnBfgKJwQ+3VCQmD7/BOcJ+AonCZotEJB7R4InR
-ZinBeQW5AAAAAGY7TCQcfgSLTCQcD7dEJCYPv9E50H4CidBmiUcQD7dEJCQPv9E50H4C
-idBmiUcSZolHFA+3RCQiD7/ROdB+AonQZolHFmaJRxgPt1wkIA+/wTnDfgKJw2aJXxpm
-iV8cD7fTi0wkcA+/ATnCfQNmiRkPt1cSi0wkdA+/ATnCfglmi0cSZokBifaLVCR0D78C
-iYZkGQAAuAEAAACDxExbXl9dw4n2VVdWU4PsQItsJFRmi4UoCAAAZolEJA5qII2FDC8A
-AFCNRCQcUOj8////ZsdEJB4IAIPEEA+3RCQOZotUJApmKVREEL4AAAAAZsdEJAwAAA+3
-fCQOiXwkBGaDfHwQAHkIZsdEfBAAAJBmg/4IdQq+DwAAAOtQjXYAi0wkBA+/VEwQD7fe
-D7eEXQwvAAA5wnU0ZoO8XQwvAAAAdQdm/0RMEOsWZoN8JAwydgdm/0R8EOsHZv9MfBCJ
-9r4AAAAAZv9EJAzrAUZmg/4Pdo0Pt0QkDmaDfEQQP34HZsdERBA/AA+3RCQOD7ecRQwv
-AAArXCRUeQa7AAAAAJAPt0QkDg+/TEQQi5UELwAAZosEWmaJBEpm/0QkDmaDfCQODg+G
-E////2bHRCQOCAAPt1QkDmaLRFQQZomEVQwvAABm/0QkDmaDfCQODnbhg8Q8W15fXcOQ
-V1ZTg+wgi1wkNIt8JDC6AAAAAJBmgzzTAHQPZosE02aJRFQQQoP6B37qidaD7AyNRCQa
-UI1EJBxQD7fCUI1EJChQD7fHUOj8////ugAAAACDxCA58n0di0QkEGY7RCQMdBKLRCQM
-ifZCOfJ9B2Y5RFQQdfSLRCQMZjtEJA51BWY5+HQMuDwAAACDfNMEAHQFZotE0wIPt8CD
-xCBbXl/DkFVXVlOLbCQUi0wkGIt8JByLXCQgi3QkJA+3ww+31g+vwroAAAAAhcB0YYnY
-ZjnPdFcPt8UPt8kpyI0EgI0EgMHgAg+31ynKidGZ9/mJwonYZoXSeDOJ8GaD+mR/Kw+/
-0g+3zg+vyrhkAAAAKdAPt9MPr8IBwbgfhetR9+mJ0MH4BcH5H2YpyJAPt9CJ0FteX13D
-ifZVV1ZTg+w8i2wkWIt8JFy6AAAAAA+3x4nBg/gAfhSJ9o0EkmaLREUIZolEVCBCOdF/
-7oPsDI1EJCpQjUQkLFAPt99TjUQkOFCLVCRwD7cCUOj8////vgAAAABmx0QkOgAAugAA
-AACDxCCD+wB+K4nYi3wkHGaLTCQejXYAZjl8VCB1BWaJVCQaZjlMVCB1BYnW6waQQjnQ
-f+MPt/aNNLbR5g+3TC4GD7dcJBqNHJvR4w+3RCsGiUQkDA+3fCQeD7dUJByJVCQUi0Qk
-VA+3EFH/dCQQV/90JCBS6I7+//+DxBSLVCRgZolCBg+3RC4EiUQkDA+3VCsEi0QkVA+3
-CP90JAxSV/90JCBR6F7+//+DxBSLVCRgZolCBA+3RC4CiUQkDA+3VCsCi0QkVA+3CP90
-JAxSV/90JCBR6C7+//+DxBSLVCRgZolCAg+3BC4PtxQri1wkVA+3C1BSV/90JCBR6Af+
-//+LVCR0ZokCg8RQW15fXcNXVlOLTCQUi3wkHIt0JCAPt1QkEI0Eko0EgI0UhQAAAAAP
-t1wkGI0cWQ+3AY0EgI0EgI0Ehfb///850HYLZosBZokGZokH63QPt0P+jQSAjQSAjQSF
-CgAAADnQcydmi0P+ZokGZokH61NmiwFmiQZmiQfrSGaLAWaJB2aLQQJmiQbrOZA52XM0
-D7cBjQSAjQSAweACKdCD+Pd8BYP4CX7JD7dBAo0EgI0EgI0Ehfb///850He/g8ECOdly
-zFteX8OLTCQEjZE8FgAAD7eBrAEAACXwAAAAg/gvfjGh5E8AAImBPBYAAI0EwI0EhehP
-AACJQhzHQhgBAAAAx0IMFAAAAMdCEFUAAADDjXYAoWROAACJAo0EwI0EhWhOAACJQhzH
-QhgBAAAAx0IMFAAAAMdCECMAAADDifZVV1ZTg+wMi1QkIIt8JCQPt4KsAQAAJfAAAACD
-+C9+SGoAaiRqAYPsDGoHUv+S0BYAAIPEFFDoMe3//70AAAAAvmsAAAC5AAAAALtrAAAA
-g8QQg/gBdXNmvlMAs1PHRxA3AAAA62SJ9moAaiVqBoPsDGoHUv+S0BYAAIPEFFDo6ez/
-/70AAAAAg8QQvjIAAACD+D90A41wBInpg/g/dAW5QAAAAI1ZMonqg/g/dQaNVRSNdgCJ
-VwyD+D91CI1D8esGjXYAjUMFiUcQi1cEuAAAAAA56nIEOfJ2DTnKcgQ52nYFuAEAAACD
-xAxbXl9dw5CLRCQED7+QgBkAAAOQfBkAAItIFMHiCYHiAH4AAIDOgImRMJkAAMeAYBkA
-AAEAAADDjXYAV1ZTi3wkEIn7jbc8FgAAuAAAAACDfhgAD4TgAAAAg79gGQAAAQ+FzQAA
-AItHFIuAMJkAAKkAgAAAD4W5AAAAicLB6hmJVgQlAACAAcHoF4P4AnUcZoO/qgEAAEF2
-Dg+3hygIAAAB0IlGBOsEg0YEBQ+3h6wBAAAl8AAAAIP4L34jg+wMV+iSAQAAg8QQi0YE
-O0YUcggrRhSJRgTrB8dGBAAAAADHg2AZAAAAAAAAg+wIVlfoJP7//4PEEIXAdTmD7AhW
-V+g7AAAAg8QQhcB0KIPsCFZX6EYAAACDxBCFwH4Xx4NgGQAAAgAAAMeDXBkAAAAAAACN
-dgCLg2AZAABbXl/DifaLTCQIuAAAAACLUQQ7UQx2BTtREHIFuAEAAADDVlOLXCQQi0Qk
-DA+3gKwBAAAl8AAAAL7gTwAAg/gvfwW+YE4AAIsDjQTAjUSGCIlDHItDBDtDEHJXuv//
-//+DOwAPhK0AAACLQwSJQwg7QxByNoM7AHQxkIsTSokTjRTSjRSWi0sci0IYK0EQ0eCL
-SwgpwYlLCIPCCIlTHDtLEHIHgzsAddKJ9roBAAAA62WQi0MEugAAAAA7Qwx3V4sGSLr+
-////OQN0S4tDBIlDCDtDDHc4iwZIOQNzMZCLE0KJE40U0o0UlotLHItCGCtBENHgi0sI
-KcGJSwiDwgiJUxw7Swx3B4sGSDkDctC6AgAAAI12AInQW17DjXYAV1ZTi1wkEI2zPBYA
-AMdGFAAAAABqAGokagGD7AxqB1P/k9AWAACDxBRQ6P3p//+DxBCD+AF1WYtGHA+/OGoA
-aiBqBIPsDGoHU/+T0BYAAIPEFFDo1On//4PEEIP/AXQag/8BcgyD/wJ0FYP/A3QZ6x/H
-RhQAAAAA6xaJRhTrEY1EAPuJRhTrCNHgiUYUjXYAW15fw1VXVlOD7BSLdCQwi1wkNFb/
-dCQw6Pz///+JxY17/8HvA0uD4weDxBCF9n5yi0QkMMHgA4lEJAiQjQwzg/kIfgW5CAAA
-ALoBAAAA0+JKuAEAAACI2dPgSDHCikwkCNPiidH30YtEJCAjDLiJTCQEieiI2dPgikwk
-CNPgIdALRCQEi1QkIIkEuo10Hvi5CAAAACnZ0+27AAAAAEeF9n+ag8QMW15fXcOJ9lVX
-VlOD7BSLVCQsD7dCAsHoBIPgAYP4ARnAJf4AAACDwAJQ/3QkLOj8////ice9AAAAAIPE
-EIM4AH48kI1EbQCNRIcgD7ZYCMHjAotUJCCLchSD7AxqAA+2QAtQag5XUuj8////D7fA
-iYQeAIcAAIPEIEU5L3/Fi0QkJPZAAhAPhasAAACD7AhqBP90JCzo/P///4nHvQAAAACD
-xBCDOAAPjooAAACJ9o1EbQCNdIcgD7ZGCI0EhQCHAACJRCQIi1QkIItaFIPsDGoAD7ZG
-C1BqDldS6Pz///8Pt8CLVCQoiQQTg8QggH4JAHQ4D7ZGCY0EgolEJAiLRCQgi1gUg+wM
-agEPtkYLUGoOV/90JDzo/P///w+3wItUJCiJBBODxCCNdgBFOS8Pj3v///+NdgCDxAxb
-Xl9dw1VXVlOD7BSLfCQoi4doFgAAJf///39QV+j8////icWLRxSLUDCJ04Hj8AMAAMHr
-BIneg8QQg3wkJAB0ELglAAAAKdjR6I00A+sIifaD+wKD1v853nQYi08UgeIP/P//ifDB
-4AQl8AMAAAnCiVEwg+wIVVfo/P///zneD5XAD7bAg8QcW15fXcNWU4PsBItMJBCLVCQU
-D7eBvAEAALsAAAAAOdB+I4PsBP90JByNBFKNBICNhIH4FgAAUFHo/P///4nDg8QQjXYA
-idiDxARbXsNWU4PsBItMJBCLVCQUD7eBvAEAALsAAAAAOdB+I4PsBI0EUo0EgI2EgfgW
-AABQ/3QkIFHo/P///4nDg8QQjXYAidiDxARbXsNVV1ZTg+wMi2wkIIt8JCSJ642VtAEA
-AIP/AnQYg/8CdweD/wF0JutYg/8DdA+D/wR0E+tMD7dyCE7rTZAPt3IIg+4C60O+AQAA
-AOs8vgAAAAAPt0IIicGD+AB+FY0Edo0EgIO8g/wWAAAAdAVGOfF/6w+3Qgi6/////znw
-dHnrCLr/////63CQjQR2jQSAjZyD+BYAALr/////g3sEAHVXg+wIajxT6Pz///+JewSD
-xBCDfCQoAHUsx0MMCwAAAMdDFAIAAADHQxj/////x0Mc/wMAAGbHQyAKAGbHQyIKAOsT
-ifaD7AT/dCQsVlXo/P///4PEEInyidCDxAxbXl9dw412AFOLTCQIi1kUi5HkFgAAgeL/
-AwAAi4HsFgAAweAQJQAA/wMJwomTpAAAAItZFIuR6BYAAIHi/wMAAIuB8BYAAMHgECUA
-AP8DCcKJk6gAAACLWRSLg6wAAAAlAPz//4uR9BYAAIHi/wMAAAnQiYOsAAAAW8OQV1ZT
-i3wkEItMJBQPt4e8AQAAvgAAAAA5yHZVjQRJjQSAjZyH+BYAAL4AAAAAg3sEAHQ9x0ME
-AAAAALj+////08Ahh+QWAAAhh+gWAAAhh+wWAAAhh/AWAAAhh/QWAABTV+gm////vgEA
-AACDxAiJ9onwW15fw4n2VVdWU4t0JBiLfCQUi4/8BwAAD7eHvAEAALoAAAAAOfAPhsYD
-AACNBHaNBICNnIf4FgAAugEAAACDewQAD4SqAwAAg3sY/3U0hcl0FQ+3QQIloAAAALof
-AAAAPaAAAAB0BboPAAAAuAEAAAA50HMQkNHgg8gBOdBy9+sEkItDGI0stQAAAACLVCQU
-i0oUicKB4v8DAACLQxzB4AolAPwPAAnCi0MUweAUJQAA8A8JwomUKUAQAACLRCQUi0gU
-D7dDIsHgBCXwAAAAD7dTIIPiDwnQDQAgCACJhCmAEAAAi1QkFItCFMeEKMAJAAAACAAA
-g3skAHRDi0oUi1MkgeL///8Ai0MoweAYCcKJlCnACAAAi0QkFItIFIuEKcAJAACJwoPK
-AYN7KAB0CInCgcoBAQAAiZQpwAkAAIN7MAB0Io0MtQAAAACLbCQUi1UUi0MwJf///wAN
-AAAAAYmECgAJAACNDLUAAAAAi0QkFItQFItDLCX//w8Ag3ssAHQFDQAAEACJhArAEAAA
-g3ssAHQl9kMMQHQfjQy1AAAAAItsJBSLVRSLhArACQAAgMwCiYQKwAkAAPZDDBB0IY0M
-tQAAAACLRCQUi1AUi4QKABEAAA0AACAAiYQKABEAAPZDDIB0H40MtQAAAACLbCQUi1UU
-i4QKABEAAIDMAomECgARAACLQwSD+AN0WoP4A3cKg/gCdBPp0QAAAIP4BA+EqQAAAOnD
-AAAAjRS1AAAAAItEJBSLSBSLhBHACQAADKKJhBHACQAAi2wkFItNFIuEEQARAAANAAAl
-AImEEQARAADphgAAAI0MtQAAAACLRCQUi1AUi4QKwAkAAIPIYomECsAJAACLFQAAAAAr
-FQAAAACLh3AZAAAp0CsFAAAAAMHgCotsJBSLVRQNAAAAAYmECgAJAACLVRSLhAoAEQAA
-DQAABACJhAoAEQAA6x+NDLUAAAAAi0QkFItQFIuECsAJAACDyCCJhArACQAA9kM4AXQh
-jQy1AAAAAItsJBSLVRSLhAoAEQAADQAAJACJhAoAEQAA9kMMAXQTuAEAAACJ8dPgCYfk
-FgAA6xGJ9rj+////ifHTwCGH5BYAAPZDDAF0E7gBAAAAifHT4AmH6BYAAOsRifa4/v//
-/4nx08Ahh+gWAAD2QwwCdBO4AQAAAInx0+AJh+wWAADrEYn2uP7///+J8dPAIYfsFgAA
-9kMMBHQTuAEAAACJ8dPgCYfwFgAA6xGJ9rj+////ifHTwCGH8BYAAPZDDAh0E7gBAAAA
-ifHT4AmH9BYAAOsRifa4/v///4nx08Ahh/QWAABT/3QkGOgz+///ugEAAACDxAiNdgCJ
-0FteX13DkItEJAjB4AKLVCQEi1IUi4QCAAgAAMOJ9otUJAjB4gKLRCQEi0gUi0QkDImE
-EQAIAAC4AQAAAMOQi0wkCItEJASLUBS4AQAAANPgiYJACAAAuAEAAADDifZWU4tUJBDB
-4gKLRCQMi3AUi4QWAAoAAInDg+MDdRq4AQAAAIpMJBDT4IuWQAgAAIXCdAW7AQAAAInY
-W17DjXYAV1ZTi3wkEIt0JBSLVxS4AQAAAInx0+CJgoAIAAC76AMAAIn2Vlfo/P///4PE
-CIXAdBCD7AxqZOj8////g8QQS3Xii0cUx4CACAAAAAAAAIXbD5XAD7bAW15fw5BVV1ZT
-g+wMi1wkJItsJCiLfCQsi3QkMMdEJAgAAAAAx0QkBAAAAADGRCQDAcZEJAIAg3wkNAAP
-hOQAAACD7AiLVCQoi4JoFgAAJf///39QUuj8////icGDxBCF9nQXikYcg+ABiEQkA4tX
-EIHi/38AAIlUJAiLUxCB4v9/AACLQwglAABAgIB8JAMAdWeFwHRjsACEwHQIi0QkOIlE
-JASLRCQIAdArRCQEO0QkNHdFidArRCQEAUQkCIX/dCKLRxAlAID//4tUJAiB4v9/AAAJ
-0IlHEPZGHAF1BcZEJAIBgHwkAgB0DoFjCP//v3+BYxAAgP//gUsIAACAIIB8JAIAdAuF
-7XQHgWUI//9/34PsCFH/dCQs6Pz///+DxBCNdgAPtkQkAoPEDFteX13DjXYAV1ZTi3Qk
-MItcJDiLfCQUi1QkGIHi/w8AAItEJCTB4BAJwvbDIHQGgcoAAIAAi0QkNMHgGSUAAAAe
-CdD2wwF0BQ0AAAAB9sMQdAUNAAAAIIlHCItEJCCJwsHiFPbDAnQGgcoAAAABiVcMi0Qk
-LMHgECUAAA8AiUcQi0QkKIlHFIP+/3QWifDB4A0lAOAPAAnQiUcMgU8IAAAAQPbDDHRL
-uAD/AH+KTCQ80/i6AAAAAKgBdDyJ2MHoA4PgAYP4ARnA99AlAAAAgPbDBHQFDQAAQAAJ
-RwiLRCRAJf9/AAAJRxCLRCQ8weAUCUcUugEAAACJ0FteX8ONdgBTi0QkFItMJByLXCQk
-i1QkDIXAdBXB4BQlAADwAAlCEItEJBDB4AUJQhSFyXQXicjB4BglAAAADwlCEItEJBjB
-4AoJQhSF23QSidjB4BwJQhCLRCQgweAPCUIUuAEAAABbw4n2U4tEJBCLTCQYi1wkHItU
-JAyDfCQUAHQQC0IMhcl1A4DMEIlCDOs5kIXJdBjHQggAAAAAiUIMi0MQiUIQi0MUiUIU
-6xzHQggAAAAAgMwQiUIMx0IQAAAAAMdCFAAAAACQx0IcAAAAAMdCGAAAAAC4AQAAAFvD
-jXYAi0wkCInKuA8AAAD2QRwBD4REAQAAi0EcJf4fAADR6GaJQSAPt0EaZolBIsZBJACL
-QRioAXUeqAJ0BMZBJAH2QhgIdASASSQC9kIYBHQGgEkkBIn2i0IcJQAAYADB6BWD+AF0
-IIP4AXIPg/gCdCmD+AN0N+tHjXYAikIUg+AfiEEl6zmQi0IUJeADAADB6AWDyICIQSXr
-JYtCFCUAfAAAwegKg8iAiEEl6xKLQhQlAIAPAMHoD4PIgIhBJZCLQhwlAOAfAMHoDYhB
-JotCGCXwAAAAwegEiEEni0IYJQAPAADB6AiIQSiLQhwlAABgAMHoFYP4AnQig/gCdwmD
-+AF0JusyifaD+AN1K4tCECUAAAAPwegYAEEokItCECUAAPAAwegUAEEoi0IQJQAADwDB
-6BAAQSiLQhglAPAAAMHoDIhBKQ+2Qh+D4AGD+AEZwIPAAohBKrgAAAAAw4n2i0QkBItM
-JAiLESOQLC8AAIkR99IhkCwvAADDkFOD7BCLXCQYjYOoFgAAUFPo/P///4tDFMeAJIEA
-AAAAAACLQxTHgCiBAAAAAAAAi0MUx0BAAAAAAItDFMeAMIEAAAAAAgCLQxTHgDiBAAAA
-AAACg8QYW8NTg+wQi1wkGItDFMdAQAYAAACNg6gWAABQU+j8////i0MUx4AkgQAAAAAA
-AItDFMeAKIEAAAAAAACDxBhbw4n2VlOLdCQQi1wkDLoAAAAAkI0Eko0EgmaLhIO0GQAA
-ZjsGdQWJ0Os0kI0Eko0Ego2Mg7AZAABmg3kEAHUUZosGZolBBGaLRgJmiUEGidDrDJBC
-g/o/drq4AAAAAFtew4n2i0QkBIuAsBkAAMOQi0QkBAVsFgAAw4n2VlOD7ASLdCQQifO4
-AAAAAIO+pAEAAAV1DGaDvqgBAAAJdQKwAYmDqBkAAIPsCGgAFQAAjYO0GQAAUOj8////
-uQAAAACDxBCQjQSJjQSBjRSDx4LEGQAA9AEAAMeCyBkAAMgAAADHgswZAADIAAAAx4LQ
-GQAAZAAAAMeC2BkAACgAAADHgtQZAAAHAAAAjYKwGQAAxkALAMZADADGQAkHxkAKAIO7
-qBkAAAB0FMeC9BkAAAz+vwDHgvgZAAA4/78AQYP5P3aCg7uoGQAAAHQqi1YUi4P0GQAA
-iYIsgQAAi1YUi4P4GQAAiYI0gQAAg+wMVuj8////g8QQx4OsGQAAZAAAAMeDpBkAAAEA
-AACDxARbXsOQU4PsCItcJBCDu6gZAAAAdCeD7AxT6Pz///+LQxTHgCyBAAAAAAAAg8QQ
-i0MUx4A0gQAAAAAAAJCDxAhbw412AFVXVlOB7IwAAACLlCSkAAAAi5wkqAAAAIusJKAA
-AACLhbAZAACJRCQUuAAAAACD+gUPhxIEAAD/JJVwUQAAid64AAAAAIP7BA+H+wMAAIuU
-JKAAAACLShSLkVCYAACB4v//D/CLhJ20LgAAweAUJQAA8A8JwomRUJgAAIu8JKAAAACL
-TxSLkVyYAACB4n+A//+LhJ3cLgAAweAHJYB/AAAJwomRXJgAAItPFIuRXJgAAIHi/3/A
-/4uEncguAADB4A8lAIA/AAnCiZFcmAAAi08Ui5FYmAAAgeL//wP8i4Sd8C4AAMHgEiUA
-APwDCcKJkViYAACLVCQUD7ZCBDnYcwj/hWwWAADrEotMJBQPtkEEOdh2Bv+FcBYAAInw
-i1QkFIhCBOkcAwAAx0QkSH8AAACNdCRIx0YEMgAAAMdEJEB/AAAAx0QkRCgAAADHRCQ4
-fwAAAMdEJDxNAAAAx0QkMH8AAADHRCQ0QAAAAMdEJCgfAAAAx0QkLBAAAADHRCQgPwAA
-AMdEJCQwAAAAhdsPlcAPtsCJRCQQi7wkoAAAAItPFIuRbJgAAIHi/z/g/4nDweMCiwQz
-weAOJQDAHwAJwomRbJgAAItPFIuRbJgAAIHi//8f8ItEHEDB4BUlAADgDwnCiZFsmAAA
-i08Ui5FomAAAgeL//wH/i0QcOMHgESUAAP4ACcKJkWiYAACLTxSLkWiYAACB4v///4CL
-RBwwweAYJQAAAH8JwomRaJgAAItPFIuBaJgAAIPg4ItUHCiD4h8J0ImBaJgAAItPFIuR
-bJgAAIDmwItEHCDB4AglAD8AAAnCiZFsmAAAg3wkEAB0FItXFIuCbJgAAIPIAYmCbJgA
-AOsZi4QkoAAAAItQFIuCbJgAAIPg/omCbJgAAIN8JBAAD5TAD7bAi0wkFA+2UQc50A+E
-jAEAAIN8JBAAdAj/hXwWAADrBv+FgBYAAIN8JBAAi3wkFA+URwfpZQEAAMdEJBgIAAAA
-jVQkGMdCBAYAAACF2w+VwA+22IuEJKAAAACLSBSLgQiiAACD4MCLFJqD4j8J0ImBCKIA
-AItUJBQPtkIIOdgPhBkBAACF23QI/4WEFgAA6wb/hYgWAACLTCQUiFkI6fsAAADHRCRw
-AAAAAMdEJHQEAAAAx0QkeAgAAACJ3rgAAAAAg/sCD4fYAAAAi7wkoAAAAItPFIuRWJgA
-AIHi/w/8/4tEnHDB4AwlAPADAAnCiZFYmAAAi1QkFA+2QgY52HMI/4WMFgAA6xKLTCQU
-D7ZBBjnYdgb/hZAWAACJ8ItUJBSIQgbreI1MJFCJTCQMvlBRAAD8uQgAAACLfCQM86W4
-AAAAAIP7B3dai4QkoAAAAItIFIuRJJkAAIDiAYtEnFDR4CX+AAAACcKJkSSZAACLVCQU
-D7ZCBTnYcwj/hXQWAADrEotMJBQPtkEFOdh2Bv+FeBYAAIt8JBSIXwWJ9rgBAAAAgcSM
-AAAAW15fXcNWU4PsBItMJBCJzouZsBkAAMdDDAAAAACDuagZAAAAD4SDAAAAgXsQAADA
-AHYKx0NAAAAAAOsMkLgAAMAAK0MQiUNAgXsYAADAAH4Mx0NEAAAAAOsOjXYAuAAAwAAr
-QxiJQ0SLURSLQ0CJgiyBAACLURSLQ0SJgjSBAACLQRTHgDCBAAAAAAIAi0EUx4A4gQAA
-AAAAAoPsCI2GqBYAAFBR6Pz///+DxBDHQzgAAAAAx0M8AAAAAIPEBFtew1dWU4tcJBCL
-i/wHAACDu6QZAAAAD4QiAQAAg7uwAQAAAQ+FFQEAAIuzsBkAAIB+BAN3GQ+2RgRAUGoB
-U+j8////g8QM6fMAAACNdgCAfgUGdxYPtkYFQFBqBVPo/P///4PEDOnUAAAAi7u8FgAA
-ifiD4H+D+D92CI1Hf8HoB+sJi4O8FgAAwegHOUYkfT+AfgcAdRxqAGoCU+j8////agBq
-BVPo/P///4PEGOmMAAAAgH4GAQ+HggAAAA+2RgZAUGoEU+j8////g8QM6285RiB9LIB+
-BwB0DWoBagJT6Pz///+DxAyAfgYBd1EPtkYGQFBqBFPo/P///4PEDOs+g+wIUVPo/P//
-/4PoAoPEEIP4AXcpgH4HAHUNagBqAlPo/P///4PEDIB+BgB0EGoAagRT6Pz///+DxAyN
-dgBbXl/DV1ZTi1wkEIuz/AcAAIO7pBkAAAAPhJYAAACDu7ABAAABD4WJAAAAi7uwGQAA
-gH8EA3cVD7ZHBEBQagFT6Pz///+DxAzraon2i4u8FgAAiciD4H+D+D92CI1Bf8HoB+sJ
-i4O8FgAAwegHOUcgfRmAfwYBdzwPtkcGQFBqBFPo/P///4PEDOspg+wIVlPo/P///4Po
-AoPEEIP4AXcUgH8GAHQOagBqBFPo/P///4PEDJBbXl/DV1ZTi3QkEIn3/7b8BwAAVugb
-9///jRSAjRSQjZyWtBkAAImesBkAAIPECIO+pBkAAAB0bIO+sAEAAAF0Y/+GnBYAAGoA
-agFW6Pz///9qAGoFVuj8////agBqBFbo/P///4PEJGoAagJW6Pz///9qAGoDVuj8////
-g+wEVuj8////g8QIgMwBUFbo/P///4PEFFboufz//4PEEOniAAAAkIB7BAB0Eg+2QwRQ
-agFW6Pz///+DxAyJ9oB7BQB0Eg+2QwVQagVW6Pz///+DxAyJ9oB7BwB0Eg+UwA+2wFBq
-Albo/P///4PEDIB7CAB0Eg+2QwhQagNW6Pz///+DxAyJ9oB7BgB0Eg+2QwZQagRW6Pz/
-//+DxAyJ9oO/qBkAAAB0P4PsDFbo/P///4PECIDk/lBW6Pz///+JNCToEfz//4tGFMeA
-MIEAAAAAAgCDxBCLRhTHgDiBAAAAAAAC6yOJ9oPsDFbo5/v//4k0JOj8////g8QIgMwB
-UFbo/P///4PEEFteX8ONdgBXVlOLdCQQi1wkFIn3i0YUx4AkgQAAAAAAAItGFMeAKIEA
-AAAAAACD7AiNhqgWAABQVuj8////iwOJhrwWAACLQwSJhsAWAACLQwiJhsQWAACLRhSL
-kCyBAACLiDSBAACJ0CUAAMAAg8QQPQAAwAB0DonIJQAAwAA9AADAAHVhi5+wGQAAK1NA
-idArQzgBh5QWAACJUziJyitTRInQK0M8AYeYFgAAiVM8i0M4O0MQdg+D7AxW6Mr7//+D
-xBCNdgCLQzw7Qxh2DIPsDFbo8/z//4PEEIPsDFbo6/r//4PEEFteX8NTg+wIi1wkEItE
-JBSLk7AZAACAeAURdSj/Qjj/g5QWAACLQjg7QhB2Q4PsDFPobvv//4kcJOiq+v//g8QQ
-6y2QgHgFGXUm/0I8/4OYFgAAi0I8O0IYdhWD7AxT6ID8//+JHCTofPr//4PEEJCDxAhb
-w412AFZTi3QkDIuWsBkAAIuOvBYAAInIg+B/g/g/dgiNQX/B6AfrCYuGvBYAAMHoBzlC
-JHxSOUIgfTGAegcAdA9qAWoCVuj8////g8QM62yAegYAdDIPtkIGSFBqBFbo/P///4PE
-DOtTjXYAgHoGAHQWD7ZCBkhQagRW6Pz///+DxAzrN412AIB6BQB0Fg+2QgVIUGoFVuj8
-////g8QM6xuNdgCAegQAdBIPtkIESFBqAVbo/P///4PEDJBbXsOQVVdWU4tUJBSLQhSL
-uOyAAACLqPCAAACLsPiAAACLmrAZAACDezQAdAU5czR2DrkAAAAA/4KgFgAA6ymQifEr
-SzSJ6CtDMIn6K1MsKcEp0bgpOVNf9+nB+g6JyMH4H4nRKcGJ9olzNIl7LIlrMInIW15f
-XcNVV1ZTg+wMi3wkIItUJCSJ+4u3sBkAAIsCiYe8FgAAi0IEiYfAFgAAi0IIiYfEFgAA
-V+hV////g8QEhcB5Gv+HpBYAAIPsDFfo8/j//4PEEOmvAQAAjXYAAUYMg7+oGQAAAA+E
-zAAAAIPsCI2HqBYAAFBX6Pz///+LRxSLkCyBAACLqDSBAACDxBA5VkB3CjluRHZ5OVZA
-djOD7Az/dkBSaIhRAABoAAAAAFfo/P///4tHFItWQImQLIEAAIPEIItHFMeAMIEAAAAA
-AgA5bkQPhi8BAACD7Az/dkRVaIhRAABoNAAAAFfo/P///4tHFItWRImQNIEAAIPEIItH
-FMeAOIEAAAAAAALp9wAAACtWQInQK0Y4AYeUFgAAiVY4ieorVkSJ0CtGPAGHmBYAAIlW
-PI12AIO7pBkAAAAPhMMAAACDv7ABAAABD4W2AAAAi4OsGQAAjQSAOUYMdkOLTgyJyA+v
-RhS7001iEPfjidDB6AY5Rjh3G4nID69GHPfjidDB6AY5Rjx3CVfoQv3//4PEBIPsDFfo
-pvf//4PEEOtli0YMO4OsGQAAdlqJwg+vVhC4001iEPfiidDB6AY5Rjh2FoPsDFfoMvj/
-/4k8JOhu9///g8QQ6y2LRgwPr0YYutNNYhD34onQwegGOUY8dhWD7AxX6ET5//+JPCTo
-QPf//4PEEJCDxAxbXl9dw1VXVlOD7AyLfCQgi2wkKItcJCy+AAAAAI0EdotPFIsUxaBR
-AACJVCQIi1QkJI0EQosEhaBRAACLVCQIiQQRQ/bDP3UQg+wMagHo/P///4PEEI12AEaD
-/g12vr4AAAAAkItPFIsU9QBTAACLBPUEUwAAiQQRQ/bDP3UOg+wMagHo/P///4PEEJBG
-g/5FdtK+AAAAAJCNBHaLTxSLFIXgVgAAAeiLBIXgVgAAiQQRQ/bDP3UNg+wMagHo/P//
-/4PEEEaD/j92zoPEDFteX13DifZVV1ZTg+wUi2wkLA+3RQJQD7dFAFDo/P///4PEEPZF
-AoB0bQ+/8I0cdsHjAo2zZF0AAIPsCGoI/3YE6Pz///+Jx4Hn/wAAAMHnBYuDZF0AAMHg
-BAnHZotOCItEJDCLUBSLggSiAACDxBBmgX0AtAl1C4PIEImCBKIAAOsbi1wkIItTFIPg
-74mCBKIAAOsJifaJwb8AAAAAZoH5kAB/BfbBAXQlg+wIaggPv8GD6BhQ6Pz///+Jw4Hj
-/wAAALgBAAAAg8QQ6y6J9oPsCGoID7/Bg+gYicLB6h8B0NH4UOj8////icOB4/8AAAC4
-AAAAAIPEEIn2weMC0eAJw4HLAQQAAItEJCCLSBSJ+CX/AAAAweAID7bTCdCJgZyYAACL
-RCQgi0gUifglAP8AAA+21wnQiYHQmAAAi1wkIImr/AcAALgBAAAAg8QMW15fXcONdgCL
-VCQIi0QkBIuAeBkAAIP6B3ch/ySVqF4AAIn2g8BEw4PASMODwEzDg8BQwwWUAAAAw4n2
-uAAAAADDifZVV1ZTgeyMAAAAi7wkoAAAAIuEJKgAAABmiUQkLon9vgAAAACLlCSkAAAA
-D7dCAiXwAQAAPcAAAAAPhKQBAAA9wAAAAH8QPaAAAAAPhCoBAADp9QEAAD1AAQAAdAs9
-UAEAAA+F4wEAAIuUJKQAAABmiwItoQ8AAGY96gR3HWaLheQIAABmiUQkJGaLleYIAABm
-iVQkIumUAAAAi5QkpAAAAGaLAi2MFAAAZj3vAHcaZouF6AgAAGaJRCQkZouV6ggAAGaJ
-VCQi62WLlCSkAAAAZosCLXwVAABmPeAAdxpmi4XsCAAAZolEJCRmi5XuCAAAZolUJCLr
-NouEJKQAAABmgThcFnYaZouV8AgAAGaJVCQkZouF8ggAAGaJRCQi6w5mx0QkIgAAZsdE
-JCQAAMdEJBgAAAAAx0QkHAAAAABmi5VmCAAAZolUJCxmi4VsCAAAZolEJCpmg71sCAAA
-AA+UwGYPtsBmiUQkKGaLlboIAABmiVQkJunaAAAAZouH9AgAAGaJRCQkZouX9ggAAGaJ
-VCQiD7eH/AgAAIlEJBwPt5cACQAAiVQkGGaLh2gIAABmiUQkLGaLl24IAABmiVQkKmaD
-v24IAAAAD5TAZg+2wGaJRCQoZouHvAgAAGaJRCQm63Jmi5f4CAAAZolUJCRmi4f6CAAA
-ZolEJCIPt5f+CAAAiVQkHA+3hwIJAACJRCQYZouXaggAAGaJVCQsZouHcAgAAGaJRCQq
-ZoO/cAgAAAAPlMBmD7bAZolEJChmi5e+CAAAZolUJCbrCrgAAAAA6QQDAAC7AAAAAA+3
-VCQuuUBVAACNBFuNBEKLBIGJRJwwQ4P7EHbti4QkpAAAAPZAAoB0LYPsDGoAandqA/90
-JDSNXCRMU+j8////g8QUagBqemoD/3QkMFPo/P///4PEILsAAAAAifaNBFuLTxSLFMVA
-VQAAi0ScMIkEEUb3xj8AAAB1D4PsDGoB6Pz///+DxBCJ9kOD+xB2zrsAAAAAi08UixTd
-4FkAAIsE3eRZAACJBBFG98Y/AAAAdQ2D7AxqAej8////g8QQQ3TTuwAAAAAPt1QkLolU
-JBSNBFuLTxSLFMXoWQAAiVQkDItUJBSNBEKLBIXoWQAAi1QkDIkEEUb3xj8AAAB1DYPs
-DGoB6Pz///+DxBBDdMG7AAAAAA+3RCQuiUQkEI0EW4tPFIsUxQBaAACJVCQMi1QkEI0E
-QosEhQBaAACLVCQMiQQRRvfGPwAAAHUNg+wMagHo/P///4PEEEN0wbsAAAAAD7dUJC65
-IFoAAI12AI0EW40EQosEgYlEnDBDg/sQdu2LlCSkAAAAD7dCAiVAAQAAPUABAAB1NYPs
-DGoDajNqAQ+3hVwJAABQjVwkTFPo/P///4PEFGoDai1qAQ+3hV4JAABQU+j8////g8Qg
-g+wMagBqX2oBD7dEJEBQjVwkTFPo/P///4PEFGoAamBqBA+3RCREUFPo/P///4PEFGoA
-amhqAw+3RCQ8UFPo/P///4PEFGoAamtqAw+3RCQ6UFPo/P///7sAAAAAg8QgkI0EW4tP
-FIsUxSBaAACLRJwwiQQRRvfGPwAAAHUPg+wMagHo/P///4PEEIn2Q4P7EHbOuwAAAAAP
-t1QkLrnAWwAAjXYAjQRbjQRCiwSBiUScMEOD+wd27YPsDGoAah1qBg+3RCQ+UI1cJExT
-6Pz///+DxBRqAGoEagEPt0QkQlBT6Pz///+7AAAAAIPEII12AI0EW4tPFIsUxcBbAACL
-RJwwiQQRRvfGPwAAAHUPg+wMagHo/P///4PEEIn2Q4P7B3bOx4VgGQAAAAAAALgBAAAA
-gcSMAAAAW15fXcNVV1ZTi2wkFItMJBiLfCQci1wkIIt0JCQPt8MPt9YPr8K6AAAAAIXA
-dGGJ2GY5z3RXD7fFD7fJKciNBICNBIDB4AIPt9cpyonRmff5icKJ2GaF0ngzifBmg/pk
-fysPv9IPt84Pr8q4ZAAAACnQD7fTD6/CAcG4H4XrUffpidDB+AXB+R9mKciQD7fQidBb
-Xl9dw4n2VVdWU4HsTAEAAIuEJGABAACJRCQcZsdEJBgAAGbHRCQWPwCLlCRsAQAAD7dC
-AiXwAQAAPdAAAAAPhIMAAAA90AAAAH8TPaAAAAB0Tj3AAAAAdG7pjQAAAD1QAQAAdBc9
-UAEAAH8JPUABAAB0Cet2PUAJAAB1b4tMJBxmi4F2CQAAZolEJCSJyAViCQAAiUQkII1A
-FolEJCjrVYtcJBxmi4OACwAAZolEJCSJ2AWICwAAiUQkII2AogAAAIlEJCjrLotUJBxm
-i4KACwAAZolEJCSJ0AWCCwAAiUQkII1ADIlEJCjrCrgAAAAA6dgCAACNdCQgg+wIaAgB
-AACNRCQ8UOj8////jawkyAAAAL8BAAAAuwAAAACDxBCNdgBmiXxcOEdDg/8/fvRmiVwk
-NmbHRCQyAQBmx0QkND8AuwAAAABmg3wkNgB0LIPsBFYPt0RcQFCLjCR4AQAAD7cBUOhy
-AgAAZolEXQCDxBBDD7dEJDY52H/UZotVAA+3RCQ2ZotMRf67AAAAAIP4AH5qZjlUXQB/
-CmaLVF0AZolcJBiJ2PfQZgNEJDYPt/iF/3QgZotEff5mO0R9AH4KZotEfQBmiUR9/kMP
-t0QkNjnYf7+7AAAAAGaDfCQ2AHQcD7dEJDaQZjlMXQB+CmaLTF0AZolcJBZDOdh/6g+/
-yoPBGbsfhetRicj364nQwfgEwfkfKciNBICNBIDR4GaJRCQaZsdEJBQAAL8AAAAAD7/I
-ic6JyPfriUQkCIlUJAyLRCQMwfgEwfkfKchAg/gAfjq4H4XrUffuidHB+QSJ8JmJyCnQ
-jUgBjXYAD7dUJBSLXCQci4MELwAAi1wkGGaJHFBm/0QkFEc5+X/fvwAAAAAPt0QkNonC
-ZotMJBpmOUxF/g+O5wAAAGaDfCQUPw+HCAEAAGaDRCQaMonWZotcJBpmOVxV/n5HD7/D
-icMPv1R9AInBKdGJyg+/TH0CKcgPr9CF0n4pkEdmi0QkGmY5RHX+fhsPv0R9AInaKcKJ
-0A+/VH0Cidkp0Q+vwYXAf9gPt1R8OtHiD7fSD7dEfDjR4A+3wA+3TH0CD7dcfQAPt3Qk
-GlJQUVNW6Df8//+DxBRAD7dMJBSLXCQci5MELwAAZtHoZokESouDBC8AAGaLVCQWZjkU
-SHYEZokUSGb/RCQUD7dUJDZmi0wkGmY5TFX+fg5mg3wkFD8Phif////rLWaDfCQUP3cl
-D7dMJBSLXCQci5MELwAAZotESv5miQRKZv9EJBRmg3wkFD9224tEJBxmx4CAGQAAAAC4
-AQAAAIHETAEAAFteX13DifZVV1ZTg+wci2wkOItcJDCLdCQ0jUQkGlBVD7fGUA+3w1Do
-QgEAAIPEEIXAdAsPt0QkGukpAQAAkIPsDI1EJCRQjUQkJlAPt0UEUP91AA+324lcJCBT
-6Pz///+DxBSNRCQgUI1EJCJQVQ+3RCQuUA+39lbodQEAAIPEFI1EJBxQjUQkHlBVD7dE
-JDBQVuhbAQAAg8QgjUQkDFBVD7dEJBpQD7dEJCJQ6L0AAACNRCQaUFUPt0QkLFAPt0Qk
-MlDopgAAAIPEIA+3RCQKD7dUJAwPt0wkFA+3XCQSUFJRU1botfr//4PEFInHjUQkDFBV
-D7dEJBZQD7dEJCRQ6GkAAACNRCQaUFUPt0QkKFAPt0QkNFDoUgAAAIPEIA+3RCQKD7dU
-JAwPt0wkEA+3XCQOUFJRU1boYfr//4PEFA+3wA+33w+3VCQYD7dMJBZQU1JR/3QkFOhB
-+v//g8QUD7fAjXYAg8QcW15fXcNVV1ZTg+wEi2wkIItEJBhmiUQkAot8JByLTQi+AAAA
-AGaDfQQAdE2QZotEJAJmOQF1No1RCLsAAAAAZoN5BgB0J412AGY5OnUTZotUWR6LRCQk
-ZokQuAEAAADrHYPCAkMPt0EGOdh/3IPBNEYPt0UEOfB/tLgAAAAAg8QEW15fXcONdgBX
-VlOLRCQYi3wkEIt0JBSLUAi5AAAAAA+3QASJw4P4AH4PifZmOTJ0CIPCNEE5y3/zg+wM
-/3QkLP90JCwPt0IGUI1CCFAPt8dQ6Pz///+DxCBbXl/DjXYAU4PsCItcJBCDuwQvAAAA
-dBuD7Az/swQvAADo/P///8eDBC8AAAAAAACDxBCDu3gZAAAAdBuD7Az/s3gZAADo/P//
-/8eDeBkAAAAAAACDxBCDxAhbw412AFZTg+wQi3QkIItcJBxotAAAAOj8////iYN4GQAA
-g8QQhcB1CMcGAgAAAOtwx4MILwAAgAAAAIPsDGiAAAAA6Pz///+JgwQvAACDxBCFwHUI
-xwYCAAAA60THg8gWAACoRgEAx4PMFgAAPDgBAMeD0BYAAFw6AQDHg9QWAAAMOQEAx4PY
-FgAAmDoBAMeD3BYAAJBAAQC4AQAAAI12AIPEBFtew5CQVVdWU4PsDIt8JCCLbCQoi1wk
-LL4AAAAAjQR2i08UixTF4F4AAIlUJAiLVCQkjQRCiwSF4F4AAItUJAiJBBFD9sM/dRCD
-7AxqAej8////g8QQjXYARoP+D3a+vgAAAACQi08UixT1YGAAAIsE9WRgAACJBBFD9sM/
-dQ6D7AxqAej8////g8QQkEaD/kJ20r4AAAAAkI0EdotPFIsUhYBiAAAB6IsEhYBiAACJ
-BBFD9sM/dQ2D7AxqAej8////g8QQRoP+P3bOg8QMW15fXcOJ9lVXVlOD7AyLbCQgi3Qk
-JMdEJAgAAAAAvwAAAABmgT6/Eg+HzQAAAA+3BolEJAQtkAgAALoFAAAAidOZ9/uF0nUj
-i0QkBI2cAODu//+4Z2ZmZvfrwfoCidjB+B+J0ynD60WNdgAPtw6NgVD3//+6BQAAAInT
-mff7uAAAAACF0g+FuAEAAI2cCaDu//+4Z2ZmZvfrwfoCidjB+B+J0ynDx0QkCAEAAADB
-4wKB4/8AAACD7AhqCFPo/P///4nDi1UUi4IEogAAg8QQZoE+tAl1EYPIEImCBKIAAOkb
-AQAAjXYAi1UUg+DviYIEogAA6QcBAACNdgBmiwa5FAAAALoAAAAAZvfxZoXSdUdmgT7/
-E3ZAg+wIaggPtw6B6cASAAC4Z2ZmZvfpidDB+APB+R8pyMHgAlDo/P///4nDg8QIagJq
-A+j8////iceDxBDpqAAAAGaLBrkKAAAAugAAAABm9/FmhdJ1P4PsCGoID7cOgenAEgAA
-uGdmZmb36YnQwfgCwfkfKcjR4FDo/P///4nDg8QIagJqAuj8////iceDxBDrV412AGaL
-BrkFAAAAugAAAABm9/G4AAAAAGaF0nV+g+wIaggPtw6B6cASAAC4Z2ZmZvfpidDR+MH5
-HynIUOj8////icODxAhqAmoB6Pz///+Jx4PEEI12AInZweEEjQS9AAAAAAnBi0QkCNHg
-CcGByQEQAACLVRQPtsGJgpyYAADB6QiLVRSJyIPgf4mC2JgAAIm1/AcAALgBAAAAg8QM
-W15fXcOLVCQIi0QkBIuAeBkAAIP6B3cd/ySVuGoAAIn2g8AEw4PACMODwAzDBawAAADD
-ifa4AAAAAMOJ9lVXVlOD7ByLbCQwi0QkOGaJRCQaiWwkFGbHRCQOAABmx0QkDAAAZsdE
-JAoAAGbHRCQIAACLtXgZAACJ6oHCPBYAAIlUJAS/AAAAAItUJDQPt0ICJfABAAA90AAA
-AA+EeAEAAD3QAAAAfxs9oAAAAA+EJAEAAD3AAAAAD4RbAQAA6Y0BAAA9UAEAAHQePVAB
-AAB/DD1AAQAAdBDpcwEAAD0ACAAAD4VoAQAAi1QkNGaLAi2hDwAAZj3qBHcli0QkFGaL
-gOQIAABmiUQkDotUJBRmi5LmCAAAZolUJAzpkwAAAItUJDRmiwItjBQAAGY97wB3IotE
-JBRmi4DoCAAAZolEJA6LVCQUZouS6ggAAGaJVCQM61+LVCQ0ZosCLXwVAABmPeAAdyKL
-RCQUZouA7AgAAGaJRCQOi1QkFGaLku4IAABmiVQkDOsri0QkNGaBOFwWdiCLVCQUZouS
-8AgAAGaJVCQOi0QkFGaLgPIIAABmiUQkDItUJBRmi5JsCAAAZolUJBKLRCQUZouAuggA
-AGaJRCQQ6YMAAACLVCQUZouS/AgAAGaJVCQKi0QkFGaLgAAJAABmiUQkCItUJBRmi5Ju
-CAAAZolUJBKLRCQUZouAvAgAAGaJRCQQ60GLVCQUZouS/ggAAGaJVCQIZolUJAqLRCQU
-ZouAcAgAAGaJRCQSi1QkFGaLkr4IAABmiVQkEOsKuAAAAADpbQQAALoAAAAAuYRlAACL
-BNGJBJZCdPe6AAAAAA+3TCQau4hlAACNBFKNBEGLBIOJRJYEQnTwugAAAAAPt0wkGrug
-ZQAAjQRSjQRBiwSDiUSWCEJ08LoAAAAAD7dMJBq7wGUAAI0EUo0EQYsEg4lElgxCg/on
-du2D7AxqAGguAQAAagEPt0QkKlCNXgxT6Pz///+DxBRqAGgOAQAAagKLVCRUD7cCUFPo
-/P///4PEFGoAaAEBAABqAotUJFQPt0ICUFPo/P///4PEIItEJDT2QAJAD4S3AAAAg+wM
-agNoqAAAAGoBi1QkHItCHA+/QAJQU+j8////g8QUagNoqQAAAGoBi1QkHItCHA+/QARQ
-U+j8////g8QUagNoqgAAAGoBi1QkHItCHA+/QAZQU+j8////g8QUagNorgAAAGoBi1Qk
-HItCHA+/QAhQU+j8////g8QUagNorwAAAGoBi1QkHItCHA+/QApQU+j8////g8QUagNo
-sAAAAGoBi1QkHItCHA+/QAxQU+j8////g8Qgi0QkNPZAAoB0OIPsDGoAaB8BAABqAw+3
-RCQiUI1eDFPo/P///4PEFGoAaCIBAABqAw+3RCQgUFPo/P///4PEIOs2g+wMagBoFwEA
-AGoDD7dEJCZQjV4MU+j8////g8QUagBoGgEAAGoDD7dEJCRQU+j8////g8QgD7eFrAEA
-ACXwAAAAg/gvfmFmg72sAQAANXQKZoO9rAEAAEV1TYPsDGoCalpqAmoCjV4MU+j8////
-g8QUagJqXGoCagJT6Pz///+DxBRqAmpeagJqAlPo/P///4PEFGoCaP4AAABqAWoCU+j8
-////g8QgZoO9qgEAAEF2ZIPsDGoBaBkBAABqAWoBjV4MU+j8////g8QUagNqAWoCagFT
-6Pz///+DxBRqA2oDagJqAVPo/P///4PEFGoDaIsAAABqAWoBU+j8////g8QUagNojAAA
-AGoBagFT6Pz///+DxCC6AAAAAA+3TCQau4BpAACJ9o0EUo0EQYsEg4mElqwAAABCg/oM
-duqLVCQ09kICQHQjg+wMagBqJWoCi1QkHItCHA+/AFCNhqwAAABQ6Pz///+DxCCD7Axq
-AGoOagYPt0QkKFCNhqwAAABQ6Pz///+7AAAAAIPEIItNFIsU3YBlAACLBJ6JBBFH98c/
-AAAAdQ2D7AxqAej8////g8QQQ3TXuwAAAACNBFuLTRSLFMWIZQAAi0SeBIkEEUf3xz8A
-AAB1DYPsDGoB6Pz///+DxBBDdNO7AAAAAI0EW4tNFIsUxaBlAACLRJ4IiQQRR/fHPwAA
-AHUNg+wMagHo/P///4PEEEN007sAAAAAjQRbi00UixTFwGUAAItEngyJBBFH98c/AAAA
-dQ+D7AxqAej8////g8QQifZDg/snds67AAAAAJCNBFuLTRSLFMWAaQAAi4SerAAAAIkE
-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
+/x/+/4n4weANJQDgAQAJwomTFJgAAFteX8ONdgCD7AyLVCQQi0QkFIP4P3YFuD8AAABm
+iYKUAgAAg+wEjUQkDFD/sswQAABS6Pz///+DxBzDVVdWU4PsFItsJCiLXCQsie//tcRQ
+AAD/tcBQAADo/P///4PECGogjYXIUAAAUOj8////ZouVlAIAAIPEEGaD+j9+Bbo/AAAA
+ZoP6Pn8KuQAAAABmhdJ1DouFmAIAAGaLjADAUwAAg+wEjUQkDlCNRCQQUGoBD7/CUA+/
+wVBTVeiEAgAAg8QgugAAAACFwA+EaAIAAIPsDP90JDRTjUQkHlCNRCQgUFX/l0gnAACD
+xCC6AAAAAIXAD4Q/AgAAg71oAgAAB3Q2g71oAgAAC3Qtg71oAgAACnQkg71oAgAACXQb
+g71oAgAACnUKZoO9bAIAAAN2CGaDh+ZQAAAEvgAAAABmi4cAKgAAZgGEd8hQAABmg7x3
+yFAAAD92CmbHhHfIUAAAPwBGg/4Pdt1mg78uEQAAAQ+HpgAAAGaDvW4CAABBd1wPt0MC
+JdAAAAA9wAAAAHVMZoE7tAl1Iw+2jyIRAAAPt4csEQAAKcG4Z2ZmZvfpidDR+MH5H2Yp
+yOsSD7aXIhEAALhnZmZm9+qJ0NHog+wID7fAUFXodAcAAIPEEL4AAAAAjRy1AAAAAItN
+FIuHwFAAAA+3VLACweIYgcoAAP8AD7cEsMHgCAz/Jf//AAAJwomUGYChAABGg/4ffsWL
+TRQPt5fOUAAAg+I/weIYD7eHzFAAAIPgP8HgEAnCD7eHylAAAIPgP8HgCAnCD7eHyFAA
+AIPgPwnCiZE0mQAAi00UD7eX1lAAAIPiP8HiGA+3h9RQAACD4D/B4BAJwg+3h9JQAACD
+4D/B4AgJwg+3h9BQAACD4D8JwomROJkAAItNFA+3l9xQAACD4j/B4hgPt4faUAAAg+A/
+weAQCcIPt4fmUAAAg+A/weAICcIPt4fYUAAAg+A/CcKJkTSiAACLTRQPt5fkUAAAg+I/
+weIYD7eH4lAAAIPgP8HgEAnCD7eH4FAAAIPgP8HgCAnCD7eH3lAAAIPgPwnCiZE4ogAA
+i1UUg7/oKQAAARnAg+DAg8B/iYI8mQAAugEAAACJ0IPEDFteX13DifZVV1ZTg+xUi2wk
+bItEJHBmiUQkJotUJHRmiVQkJIt0JGiJ8YHByFAAAIlMJCBmx0QkHj8AZsdEJBw/AA++
+RQXR4GaJRCQai4QkgAAAAGbHAMH/i1QkfGbHAj8AVf90JGzo/P///4hEJCG7AAAAAIPE
+EItMJGBmg7kEEgAAAA+EhQAAAA+2fCQRifiD4PiJRCQMjXYAZoO8XgYSAAAAdF1mD7ZE
+JBFmOYReBhIAAHQRD7eEXgYSAACD4AcM4DnHdTyJ2MHgBo2EMGQWAACD7AhQD7dFAFDo
+fgYAAIPEEIF8JAzgAAAAdQ5mOUQkFnYOZolEJBbrB2aJRCQW6wxDD7eGBBIAADnYf4wP
+t0UCJdAAAAA9wAAAAA+FogAAAIBkJBH4gEwkEQG7AAAAAGaDvgQSAAAAD4SPAAAAD7Z8
+JBGJ+oPi+IlUJAiQZoO8XgYSAAAAdF1mD7ZEJBFmOYReBhIAAHQRD7eEXgYSAACD4AcM
+4DnHdTyJ2MHgBo2EMGQWAACD7AhQD7dFAFDoygUAAIPEEIF8JAjgAAAAdQ5mOUQkFHYO
+ZolEJBTrB2aJRCQU6xhDD7eGBBIAADnYf4zrCmaLTCQWZolMJBT2RQMBdAiKhh4RAADr
+BoqGHxEAAIPsBA++wFBV/3QkbOj8////iEQkIIPEEPZFAkAPhNMBAACAfQIAeSaD7AyN
+RCQ8UA+3hiwWAABQjYYuFgAAUFX/dCR86GcGAACDxCDrJIPsDI1EJDxQD7eG2hUAAFCN
+htwVAABQVf90JHzoQQYAAIPEIA+3VCQSD75EJBApwg+3RCQWOcJ+AonCidH2RQIQdEBm
+gb4AEQAAADB2Eg+3hg4RAAAPv9I50H4CidCJwWaBvgARAAD/P3YYgH0CAHkSD7eGEBEA
+AA+/0TnQfgKJ0InBD7dUJDYPv8E5wn4CicJmi0QkHtHgidFmKcF5BbkAAAAAZjtMJBx+
+BItMJByDfCRwAA+EzQAAAItEJBhmiUgIZolIBmaJSARmiUgCZokIic+LRCQ0ZjnIdgKJ
+yItUJBhmiUIKi0QkGGaLEGaLRCQyZjnQdgKJ0ItUJBhmiUIMi0QkGGaLEItEJDBmOdB2
+AonQi1QkGGaJQg6JwmaBvgARAAD/P3ZFD7/ZgH0CAHkND7eGFBEAADnDfA3rDw+3hhIR
+AAA5w30EicjrFoB9AgB5CWaLhhQRAADrB2aLhhIRAACLTCQYZolBHusLi0wkGGaLAWaJ
+QR6LTCR4D78BiYb8KQAA6xKJzw+3RCQwD7/ROdB+AonQicKLRCR0ZokQi1QkeGaJOg+3
+RQKoIHUQJdAAAAA9wAAAAA+FDwEAAIPsDI1EJCxQD7eGTBYAAFCNhk4WAABQVf90JHzo
+ggQAAA+3TCQyD75EJDApwQ+3RCQ0g8QgOcF+AonBD7dUJCYPv8E5wn4CicJmi0QkHtHg
+idFmKcF5BbkAAAAAZjtMJBx+BItMJByDfCRwAHRqD7dEJCYPv9E50H4CidCLVCQYZolC
+EA+3RCQkD7/ROdB+AonQi1QkGGaJQhKJw2aJQhQPt0QkIg+/0TnQfgKJ0ItUJBhmiUIW
+ZolCGA+3VCQgD7/BOcJ+AonCi0wkGGaJURqJ0GaJURzrHg+3RCQkD7/ROdB+AonQicMP
+t0QkIA+/0TnQfgKJ0ItUJHRmOQJ+A2aJAotMJHhmORl9BGaJGZCDfCRwAHQYi1QkeA+/
+AomG1CkAAItMJGBmiYGWAgAAuAEAAACDxExbXl9dw1VXVlOD7BCLbCQk/3QkLP90JCxV
+/5VMJwAAg8QQugAAAACFwA+ErwAAAGaLvZQCAABmg/8/fgW/PwAAAGaD/z5/DGbHRCQG
+AABmhf91HouFmAIAAGaLhADKUwAAZolEJAbrCboAAAAA62+J9r4AAAAAO3QkKHNdkItE
+JCSNHPCD7ASNRCQOUI1EJBBQagAPv8dQD79EJBpQU1XoPfr//4PEIIXAdL1mD75DBmY7
+RCQKfghmi0QkCohDBmYPvkMHZjtEJAh+B4tEJAiIQwdGO3QkKHKkugEAAACJ0IPEDFte
+X13DkFVXVlOD7ECLbCRUZouFKhEAAGaJRCQOaiCNhchQAABQjUQkHFDo/P///2bHRCQe
+CACDxBAPt0QkDmaLVCQKZilURBC+AAAAAGbHRCQMAAAPt3wkDol8JARmg3x8EAB5CGbH
+RHwQAACQZoP+CHUKvg8AAADrUI12AItMJAQPv1RMEA+33g+3hF3IUAAAOcJ1NGaDvF3I
+UAAAAHUHZv9ETBDrFmaDfCQMMnYHZv9EfBDrB2b/THwQifa+AAAAAGb/RCQM6wFGZoP+
+D3aND7dEJA5mg3xEED9+B2bHREQQPwAPt0QkDg+3nEXIUAAAK1wkVHkGuwAAAACQD7dE
+JA4Pv0xEEIuVwFAAAGaLBFpmiQRKZv9EJA5mg3wkDg4PhhP///9mx0QkDggAD7dUJA5m
+i0RUEGaJhFXIUAAAZv9EJA5mg3wkDg524YPEPFteX13DkFdWU4PsIItcJDSLfCQwugAA
+AACQZoM80wB0D2aLBNNmiURUEEKD+gd+6onWg+wMjUQkGlCNRCQcUA+3wlCNRCQoUA+3
+x1Do/P///7oAAAAAg8QgOfJ9HYtEJBBmO0QkDHQSi0QkDIn2QjnyfQdmOURUEHX0i0Qk
+DGY7RCQOdQVmOfh0DLg/AAAAg3zTBAB0BWaLRNMCD7fAg8QgW15fw5BVV1ZTi2wkFItM
+JBiLfCQci1wkIIt0JCQPt8MPt9YPr8K6AAAAAIXAdGGJ2GY5z3RXD7fFD7fJKciNBICN
+BIDB4AIPt9cpyonRmff5icKJ2GaF0ngzifBmg/pkfysPv9IPt84Pr8q4ZAAAACnQD7fT
+D6/CAcG4H4XrUffpidDB+AXB+R9mKciQD7fQidBbXl9dw4n2VVdWU4PsPItsJFiLfCRc
+ugAAAAAPt8eJwYP4AH4UifaNBJJmi0RFCGaJRFQgQjnRf+6D7AyNRCQqUI1EJCxQD7ff
+U41EJDhQi1QkcA+3AlDo/P///74AAAAAZsdEJDoAALoAAAAAg8Qgg/sAfiuJ2It8JBxm
+i0wkHo12AGY5fFQgdQVmiVQkGmY5TFQgdQWJ1usGkEI50H/jD7f2jTS20eYPt0wuBg+3
+XCQajRyb0eMPt0QrBolEJAwPt3wkHg+3VCQciVQkFItEJFQPtxBR/3QkEFf/dCQgUuiO
+/v//g8QUi1QkYGaJQgYPt0QuBIlEJAwPt1QrBItEJFQPtwj/dCQMUlf/dCQgUehe/v//
+g8QUi1QkYGaJQgQPt0QuAolEJAwPt1QrAotEJFQPtwj/dCQMUlf/dCQgUegu/v//g8QU
+i1QkYGaJQgIPtwQuD7cUK4tcJFQPtwtQUlf/dCQgUegH/v//i1QkdGaJAoPEUFteX13D
+V1ZTi0wkFIt8JByLdCQgD7dUJBCNBJKNBICNFIUAAAAAD7dcJBiNHFkPtwGNBICNBICN
+BIX2////OdB2C2aLAWaJBmaJB+t0D7dD/o0EgI0EgI0EhQoAAAA50HMnZotD/maJBmaJ
+B+tTZosBZokGZokH60hmiwFmiQdmi0ECZokG6zmQOdlzNA+3AY0EgI0EgMHgAinQg/j3
+fAWD+Al+yQ+3QQKNBICNBICNBIX2////OdB3v4PBAjnZcsxbXl/Di0wkBI2RoCYAAA+3
+gXACAAAl8AAAAIPoMIP4P3cuoWRVAACJgaAmAACNBMCNBIVoVQAAiUIcx0IYAQAAAMdC
+DBQAAADHQhBVAAAAw6HkUwAAiQKNBMCNBIXoUwAAiUIcx0IYAQAAAMdCDBQAAADHQhAj
+AAAAw4n2VVdWU4PsDItUJCCLfCQkD7eCcAIAACXwAAAAg+gwg/g/d0lqAGokagGD7Axq
+B1L/kjwnAACDxBRQ6Kbj//+9AAAAAL5rAAAAuQAAAAC7awAAAIPEEIP4AXV0Zr5TALNT
+x0cQNwAAAOtljXYAagBqJWoGg+wMagdS/5I8JwAAg8QUUOhd4///vQAAAACDxBC+MgAA
+AIP4P3QDjXAEiemD+D90BblAAAAAjVkyieqD+D91Bo1VFI12AIlXDIP4P3UIjUPx6waN
+dgCNQwWJRxCLVwS4AAAAADnqcgQ58nYNOcpyBDnadgW4AQAAAIPEDFteX13DkItEJAQP
+v5AAKgAAA5D8KQAAi0gUweIJgeIAfgAAgM6AiZEwmQAAx4DQKQAAAQAAAMONdgBXVlOL
+fCQQifuNt6AmAAC4AAAAAIN+GAAPhOgAAACDv9ApAAABD4XVAAAAi0cUi4AwmQAAZoXA
+D4jDAAAAicLB6hmJVgQlAACAAcHoF4P4AnUcZoO/bgIAAEF2Dg+3hyoRAAAB0IlGBOsE
+g0YEBQ+3h3ACAAAl8AAAAIPoMIP4P3cjg+wMV+idAQAAg8QQi0YEO0YUcggrRhSJRgTr
+B8dGBAAAAADHg9ApAAAAAAAAg+wIVlfoH/7//4PEEIXAdUCD7AhWV+hCAAAAg8QQhcB0
+L4PsCFZX6E0AAACDxBCFwH4ex4PQKQAAAgAAAMeD5CkAAAEAAADHg8wpAAAAAAAAi4PQ
+KQAAW15fw4n2i0wkCLgAAAAAi1EEO1EMdgU7URByBbgBAAAAw1ZTi1wkEItEJAwPt4Bw
+AgAAJfAAAACD6DC+YFUAAIP4P3YFvuBTAACLA40EwI1EhgiJQxyLQwQ7QxByWLr/////
+gzsAD4SuAAAAi0MEiUMIO0MQcjeDOwB0Mon2ixNKiRONFNKNFJaLSxyLQhgrQRDR4ItL
+CCnBiUsIg8IIiVMcO0sQcgeDOwB10on2ugEAAADrZZCLQwS6AAAAADtDDHdXiwZIuv7/
+//85A3RLi0MEiUMIO0MMdziLBkg5A3MxkIsTQokTjRTSjRSWi0sci0IYK0EQ0eCLSwgp
+wYlLCIPCCIlTHDtLDHcHiwZIOQNy0LoCAAAAjXYAidBbXsONdgBXVlOLXCQQjbOgJgAA
+x0YUAAAAAGoAaiRqAYPsDGoHU/+TPCcAAIPEFFDoZeD//4PEEIP4AXVZi0YcD784agBq
+IGoEg+wMagdT/5M8JwAAg8QUUOg84P//g8QQg/8BdBqD/wFyDIP/AnQVg/8DdBnrH8dG
+FAAAAADrFolGFOsRjUQA+4lGFOsI0eCJRhSNdgBbXl/DVVdWU4PsFIt0JDCLXCQ0Vv90
+JDDo/P///4nFjXv/we8DS4PjB4PEEIX2fnKLRCQwweADiUQkCJCNDDOD+Qh+BbkIAAAA
+ugEAAADT4kq4AQAAAIjZ0+BIMcKKTCQI0+KJ0ffRi0QkICMMuIlMJASJ6IjZ0+CKTCQI
+0+Ah0AtEJASLVCQgiQS6jXQe+LkIAAAAKdnT7bsAAAAAR4X2f5qDxAxbXl9dw4n2VVdW
+U4PsDItEJCT2QANAdBuD7AhoAAIAAP90JCzo/P///4nHg8QQ61CNdgCLVCQkZoN6AgB5
+GIPsCGgABAAA/3QkLOj8////iceDxBDrKoPsCItUJCwPt0ICg+AQg/gBGcAl/gAAAIPA
+AlD/dCQs6Pz///+Jx4PEEL0AAAAAgz8AfjyQjURtAI1EhyAPtlgIweMCi1QkIItyFIPs
+DGoAD7ZAC1BqDldS6Pz///8Pt8CJhB4AhwAAg8QgRTkvf8WLRCQk9kACEA+FrwAAAIPs
+CGoI/3QkLOj8////ice9AAAAAIPEEIM4AA+OjgAAAIn2jURtAI10hyAPtkYIjQSFAIcA
+AIlEJAiAfgUAdWOLVCQgi1oUg+wMagAPtkYLUGoOV1Lo/P///w+3wItUJCiJBBODxCCA
+fgkAdDYPtkYJjQSCiUQkCItEJCCLWBSD7AxqAQ+2RgtQag5X/3QkPOj8////D7fAi1Qk
+KIkEE4PEIJBFOS8Pj3f///+NdgCDxAxbXl9dw1VXVlOD7ASLTCQYi0EUi4AcgAAAicOB
+44A/AACLRCQc9kADQHQexwQkBAEAAL4AABsAuBMAAAC/rA0AAL0UAAAA6xyQxwQk0gAA
+AL4AADYAuAkAAAC/SA0AAL0KAAAAi1EUCdgJ8A0AAIAfiYIcgAAAi0EUixQkiZBwEAAA
+i0EUibiwEAAAi0kUi4HwEAAAJf8D8P+J6sHiCgnQiYHwEAAAg8QEW15fXcOQkJBVV1ZT
+g+wUi3wkKIuH1CYAACX///9/UFfo/P///4nFi0cUi1AwidOB4/ADAADB6wSJ3oPEEIN8
+JCQAdBC4JQAAACnY0eiNNAPrCIn2g/sCg9b/Od50GItPFIHiD/z//4nwweAEJfADAAAJ
+wolRMIPsCFVX6Pz///853g+VwA+2wIPEHFteX13DVlOD7ASLTCQQi1QkFA+3gYQCAAC7
+AAAAADnQfiOD7AT/dCQcjQRSjQSAjYSBbCcAAFBR6Pz///+Jw4PEEI12AInYg8QEW17D
+VlOD7ASLTCQQi1QkFA+3gYQCAAC7AAAAADnQfiOD7ASNBFKNBICNhIFsJwAAUP90JCBR
+6Pz///+Jw4PEEI12AInYg8QEW17DVVdWU4PsDItsJCCLfCQkiemNlXwCAADHRCQICwAA
+AIP/AnQcg/8CdwuD/wF0VumJAAAAkIP/A3QXg/8EdCPrfA+3cghOgUwkCMAABQDrdZAP
+t3IIg+4CgUwkCMABBQDrYw+3cgiD7gONBHaNBIC6/////4O8hXAnAAAAD4XBAAAA60GQ
+vgAAAAAPt0IIicOD+AB+FY0Edo0EgIO8gXAnAAAAdAVGOfN/6w+3Qgi6/////znwD4SI
+AAAA6wi6/////+t/kI0Edo0EgI2cgWwnAAC6/////4N7BAB1ZoPsCGo8U+j8////iXsE
+g8QQg3wkKAB1NItEJAiJQwzHQxQCAAAAx0MY/////8dDHP8DAABmx0MgCgBmx0MiCgDH
+QzQAAAAA6xuNdgCLVCQoi0IwiUM0g+wEUlZV6Pz///+DxBCJ8onQg8QMW15fXcNTi0wk
+CItZFIuRWCcAAIHi/wMAAIuBYCcAAMHgECUAAP8DCcKJk6QAAACLWRSLkVwnAACB4v8D
+AACLgWQnAADB4BAlAAD/AwnCiZOoAAAAi1kUi4OsAAAAJQD8//+LkWgnAACB4v8DAAAJ
+0ImDrAAAAFvDkFdWU4t8JBCLTCQUD7eHhAIAAL4AAAAAOch2VY0ESY0EgI2ch2wnAAC+
+AAAAAIN7BAB0PcdDBAAAAAC4/v///9PAIYdYJwAAIYdcJwAAIYdgJwAAIYdkJwAAIYdo
+JwAAU1foJv///74BAAAAg8QIifaJ8FteX8OJ9lVXVlOD7AiLbCQci0wkIInui73MEAAA
+D7eFhAIAALoAAAAAOcgPhnUDAACNBEmNBICNnIVsJwAAugEAAACDewQAD4RZAwAAg3sY
+/3Uzhf90FQ+3RwIloAAAALofAAAAPaAAAAB0BboPAAAAuAEAAAA50HMP0eCDyAE50HL3
+6wSQi0MYjTyNAAAAAInCgeL/AwAAi0McweAKJQD8DwAJwotDFMHgFCUAAPAPCcKLRRSJ
+lDhAEAAAD7dDIsHgBCXwAAAAD7dTIIPiDwnQDQAgCACLVRSJhDqAEAAAx0QkBAAIAADH
+BCQAAQAAg3skAHQti1MkgeL///8Ai0MoweAYCcKLRRSJlDjACAAAg3soARnSsgCBwgEJ
+AACJVCQEg3swAHQejTyNAAAAAItVFItDMCX///8ADQAAAAGJhDoACQAAjTyNAAAAAItV
+FItDLCX//w8Ag3ssAHQFDQAAEACJhDrAEAAAg3swAHQO9kMMIHQIgUwkBAACAAD2QwxA
+dAqDZCQE8INMJAQC9kQkBA90JfZDDQF0B4NMJARA6wWDZCQEv4B7DAB5B4NMJAQg6waD
+ZCQE35D2Qw4BdAeBDCQAACAA9kMOgHQHgQwkAAIAAPZDDgR0DIEMJAAABADrE412APZD
+DgJ0CoEMJAAAAgCNdgD2Qw4IdAeBDCQAQAAA9kMOEHQHgQwkAAAQAItDBIP4AnQHg/gD
+dBPrV4FMJASiAAAAgQwkAAAlAOtGg0wkBGKDezAAdTOLFQAAAAArFQAAAACLhvApAAAp
+0CsFAAAAAMHgCo08jQAAAACLVRQNAAAAAYmEOgAJAACBDCQAAAQAkPZDOAF0B4EMJAAA
+JACNBI0AAAAAi1UUi3wkBIm8AsAJAACLVRSLPCSJvAIAEQAAg3s0AHQ6i1UUjUQJUImC
+AAsAAItVFItDNImCBAsAAItFFMeACAsAAAkAAACLVRSLhIrACQAAgMwQiYSKwAkAAPZD
+DAF0D7gBAAAA0+AJhlgnAADrDbj+////08AhhlgnAAD2QwwBdBG4AQAAANPgCYZcJwAA
+6w+J9rj+////08AhhlwnAAD2QwwCdBG4AQAAANPgCYZgJwAA6w+J9rj+////08AhhmAn
+AAD2QwwEdBG4AQAAANPgCYZkJwAA6w+J9rj+////08AhhmQnAAD2QwwIdBG4AQAAANPg
+CYZoJwAA6w+J9rj+////08AhhmgnAABTVeh8+///ugEAAACDxAiJ0IPECFteX13DifaL
+RCQIweACi1QkBItSFIuEAgAIAADDifaLVCQIweICi0QkBItIFItEJAyJhBEACAAAuAEA
+AADDkItMJAiLRCQEi1AUuAEAAADT4ImCQAgAALgBAAAAw4n2VlOLVCQQweICi0QkDItw
+FIuEFgAKAACJw4PjA3UauAEAAACKTCQQ0+CLlkAIAACFwnQFuwEAAACJ2Ftew412AFVX
+VlOD7AyLdCQgi3wkJItWFLgBAAAAifnT4ImCgAgAAL3oAwAAifZXVuj8////g8QIhcB0
+EIPsDGpk6Pz///+DxBBNdeJXVuj8////g8QIhcAPhPIAAACDvmgCAAAHdDaDvmgCAAAL
+dC2DvmgCAAAKdCSDvmgCAAAJdBuDvmgCAAAKD4XBAAAAZoO+bAIAAAMPh7MAAAC7AAAA
+AItGFIuQTIAAAMeAAIEAAGQACgCLThTB6goPt8INAAABAImB/IAAAItGFIuATIAAAMHo
+CjnQdAZDg/sBdsOLVhSLgkiAAAANAABAAImCSIAAAIPsDGjIAAAA6Pz///+LVhSLgvyA
+AAAl///+/4mC/IAAAIPEELtkAAAA6xBLdBuD7AxqCuj8////g8QQV1bo/P///4PECIXA
+deKLVhSLgkiAAAAl//+//4mCSIAAAItGFMeAgAgAAAAAAACF7Q+VwA+2wIPEDFteX13D
+kFVXVlOLbCQ0i3wkPIt0JBiLRCQUD7+AACoAAANEJCiD+D92Bbg/AAAAi1QkHIHi/w8A
+AMHgEAnC98cgAAAAdAaBygAAgACLRCQ4weAZJQAAAB4J0PfHAQAAAHQFDQAAAAH3xxAA
+AAB0BQ0AAAAgiUYIi1wkJMHjFItMJFDB4RmLVCRIweIdi0QkTMHgGwnZCdEJwffHAgAA
+AHQGgckAAAABiU4Mi0QkMMHgECUAAA8A98dAAAAAdAOAzICJRhCLRCQsiUYUg/3/dBSJ
+6MHgDSUA4A8ACUYMgU4IAAAAQPfHDAAAAHRLuAD/AH+KTCRA0/i6AAAAAKgBdDyJ+IPg
+CIP4ARnA99AlAAAAgPfHBAAAAHQFDQAAQAAJRgiLRCREJf9/AAAJRhCLRCRAweAUCUYU
+ugEAAACJ0FteX13DjXYAU4tEJBSLTCQci1wkJItUJAyFwHQbweAUJQAA8AALQhCAzICJ
+QhCLRCQQweAFCUIUhcl0HYnIweAYJQAAAA8LQhCAzICJQhCLRCQYweAKCUIUhdt0GInY
+weAcC0IQgMyAiUIQi0QkIMHgDwlCFLgBAAAAW8OLRCQIgUgIAAAAIMNTi0QkEItMJBiL
+XCQci1QkDIN8JBQAdBALQgyFyXUDgMwQiUIM6zmQhcl0GMdCCAAAAACJQgyLQxCJQhCL
+QxSJQhTrHMdCCAAAAACAzBCJQgzHQhAAAAAAx0IUAAAAAJDHQhwAAAAAx0IYAAAAALgB
+AAAAW8ONdgCLTCQIicq4DwAAAPZBHAEPhEUBAACLQRwl/h8AANHoZolBIA+3QRpmiUEi
+xkEkAItBGKgBdR6oAnQExkEkAfZCGAh0BIBJJAL2QhgEdAaASSQEifaLQhwlAABgAMHo
+FYP4AXQgg/gBcg+D+AJ0KYP4A3Q360eNdgCKQhSD4B+IQSXrOZCLQhQl4AMAAMHoBYPI
+gIhBJesli0IUJQB8AADB6AqDyICIQSXrEotCFCUAgA8AwegPg8iAiEElkItCHCUA4B8A
+wegNiEEmi0IYJfAAAADB6ASIQSeLQhglAA8AAMHoCIhBKItCHCUAAGAAwegVg/gCdCKD
++AJ3CYP4AXQm6zKJ9oP4A3Uri0IQJQAAAA/B6BgAQSiQi0IQJQAA8ADB6BQAQSiLQhAl
+AAAPAMHoEABBKItCGCUA8AAAwegMiEEpi0IcJQAAAAGD+AEZwIPAAohBKrgAAAAAw5CL
+RCQEi0wkCIsRI5DoUAAAiRH30iGQ6FAAAMOQU4PsEItcJBiNgxQnAABQU+j8////i0MU
+x4AkgQAAAAAAAItDFMeAKIEAAAAAAACLQxTHQEAAAAAAi0MUx4AwgQAAAAACAItDFMeA
+OIEAAAAAAAKDxBhbw1OD7BCLXCQYi0MUx0BABgAAAI2DFCcAAFBT6Pz///+LQxTHgCSB
+AAAAAAAAi0MUx4AogQAAAAAAAIPEGFvDifZWU4t0JBCLXCQMugAAAACQjQSSjQRCZouE
+wzQqAABmOwZ1BYnQ6zyQjQSSjQRCjYzDMCoAAGaDeQQAdRxmiwZmiUEEZotGAmaJQQaK
+RgSIQQiJ0OsOjXYAQoP6P3ayuAAAAABbXsOJ9otEJASLgDAqAADDkItEJAQF2CYAAMOJ
+9ldWU4t8JBCJ/rgAAAAAg79oAgAABXUMZoO/bAIAAAl1ArABiYYoKgAAg+wIaAAWAACN
+hjQqAABQ6Pz///+7AAAAAIPEEI12AIO/aAIAAAZ3E40Em40EQ8aExjwqAAAH6xGNdgCN
+BJuNBEPGhMY8KgAAAo0Em40EQ40MxseBSCoAAPQBAADHgUwqAADIAAAAx4FQKgAAyAAA
+AMeBVCoAAGQAAADHgVwqAAAoAAAAx4FYKgAABwAAAI2BMCoAAMZAEADGQBEAilAMiFAO
+xkAPAIO+KCoAAAB0FMeBeCoAAAz+vwDHgXwqAAA4/78AQ4P7Pw+GUv///4O+KCoAAAB0
+KotXFIuGeCoAAImCLIEAAItXFIuGfCoAAImCNIEAAIPsDFfo/P///4PEEMeGLCoAAGQA
+AACDjiQqAAABW15fw4n2U4PsCItcJBCDuygqAAAAdCeD7AxT6Pz///+LQxTHgCyBAAAA
+AAAAg8QQi0MUx4A0gQAAAAAAAJCDxAhbw412AFVXVlOB7IwAAACLlCSkAAAAi5wkqAAA
+AIusJKAAAACLhTAqAACJRCQUuAAAAACD+gYPh/oEAAD/JJXwVgAAid64AAAAAIP7BA+H
+4wQAAIuUJKAAAACLShSLkVCYAACB4v//D/CLhJ1wUAAAweAUJQAA8A8JwomRUJgAAIu8
+JKAAAACLTxSLkVyYAACB4n+A//+LhJ2YUAAAweAHJYB/AAAJwomRXJgAAItPFIuRXJgA
+AIHi/3/A/4uEnYRQAADB4A8lAIA/AAnCiZFcmAAAi08Ui5FYmAAAgeL//wP8i4SdrFAA
+AMHgEiUAAPwDCcKJkViYAACLVCQUD7ZCCTnYcwj/hdgmAADrEotMJBQPtkEJOdh2Bv+F
+3CYAAInwi1QkFIhCCekEBAAAx0QkSH8AAACNdCRIx0YEMgAAAMdEJEB/AAAAx0QkRCgA
+AADHRCQ4fwAAAMdEJDxNAAAAx0QkMH8AAADHRCQ0QAAAAMdEJCgfAAAAx0QkLBAAAADH
+RCQgPwAAAMdEJCQwAAAAhdsPlcAPtsCJRCQQi7wkoAAAAItPFIuRbJgAAIHi/z/g/4nD
+weMCiwQzweAOJQDAHwAJwomRbJgAAItPFIuRbJgAAIHi//8f8ItEHEDB4BUlAADgDwnC
+iZFsmAAAi08Ui5FomAAAgeL//wH/i0QcOMHgESUAAP4ACcKJkWiYAACLTxSLkWiYAACB
+4v///4CLRBwwweAYJQAAAH8JwomRaJgAAItPFIuBaJgAAIPg4ItUHCiD4h8J0ImBaJgA
+AItPFIuRbJgAAIDmwItEHCDB4AglAD8AAAnCiZFsmAAAg3wkEAB0FItXFIuCbJgAAIPI
+AYmCbJgAAOsZi4QkoAAAAItQFIuCbJgAAIPg/omCbJgAAIN8JBAAD5TAD7bAi0wkFA+2
+UQw50A+EdAIAAIN8JBAAdAj/hegmAADrBv+F7CYAAIN8JBAAi3wkFA+URwzpTQIAAMdE
+JBgIAAAAjVQkGMdCBAYAAACF2w+VwA+22IuEJKAAAACLSBSLgQiiAACD4MCLFJqD4j8J
+0ImBCKIAAItUJBQPtkINOdgPhAECAACF23QI/4XwJgAA6wb/hfQmAACLTCQUiFkN6eMB
+AADHRCRwAAAAAMdEJHQEAAAAx0QkeAgAAACJ3rgAAAAAg/sCD4fAAQAAi7wkoAAAAItP
+FIuRWJgAAIHi/w/8/4tEnHDB4AwlAPADAAnCiZFYmAAAi1QkFA+2Qgs52HMI/4X4JgAA
+6xKLTCQUD7ZBCznYdgb/hfwmAACJ8ItUJBSIQgvpXQEAAI1MJFCJTCQMvtBWAAD8uQgA
+AACLfCQM86WJ3rgAAAAAg/sHD4c5AQAAi4QkoAAAAItIFIuRJJkAAIDiAYtEnFDR4CX+
+AAAACcKJkSSZAACLVCQUD7ZCCjnYcwj/heAmAADrEotMJBQPtkEKOdh2Bv+F5CYAAInw
+i1QkFIhCCunaAAAAhdt1QIOlJCoAAP6D7Az/tCSsAAAA6Pz///+DxAT/tCSsAAAA6Pz/
+//+DxAiA5P5Q/7QkrAAAAOj8////g8QQ6ZYAAAD2hSQqAAABD4WJAAAAg70oKgAAAHRU
+g+wM/7QkrAAAAOj8////g8QIgOT+UP+0JKwAAADo/P///4uMJLAAAACLURSLhXgqAACJ
+giyBAACLURSLhXwqAACJgjSBAACJDCTo/P///4PEEOslg+wM/7QkrAAAAOj8////g8QI
+gMwBUP+0JKwAAADo/P///4PEEIONJCoAAAG4AQAAAIHEjAAAAFteX13DVlOD7ASLTCQQ
+ic6LmTAqAADHQxAAAAAAg7koKgAAAA+EgwAAAIF7FAAAwAB2CsdDRAAAAADrDJC4AADA
+ACtDFIlDRIF7HAAAwAB+DMdDSAAAAADrDo12ALgAAMAAK0MciUNIi1EUi0NEiYIsgQAA
+i1EUi0NIiYI0gQAAi0EUx4AwgQAAAAACAItBFMeAOIEAAAAAAAKD7AiNhhQnAABQUej8
+////g8QQx0M8AAAAAMdDQAAAAACDxARbXsNXVlOLdCQQi77MEAAA9oYkKgAAAQ+ELgEA
+AIueMCoAAIB7CQN3GoPsBA+2QwlAUGoBVuj8////g8QQ6QkBAACQikMKOkMIcxiD7AQP
+tsBAUGoFVuj8////g8QQ6egAAACLlignAACJ0IPgf4P4P3YIjUJ/wegH6wmLhignAADB
+6Ac5Qyh9SoB7DAB1IoPsBGoAagJW6Pz///+DxAxqAGoFVuj8////g8QQ6ZoAAACAewsB
+D4eQAAAAg+wED7ZDC0BQagRW6Pz///+DxBDreon2OUMkfTKAewwAdBCD7ARqAWoCVuj8
+////g8QQgHsLAXdXg+wED7ZDC0BQagRW6Pz///+DxBDrQYPsCFdW6Pz///+D6AKDxBCD
++AF3LIB7DAB1EIPsBGoAagJW6Pz///+DxBCAewsAdBCD7ARqAGoEVuj8////g8QQW15f
+w1dWU4tcJBCLu8wQAAD2gyQqAAABD4SSAAAAi7MwKgAAgH4JA3cWg+wED7ZGCUBQagFT
+6Pz///+DxBDrcIuTKCcAAInQg+B/g/g/dgiNQn/B6AfrCYuDKCcAAMHoBzlGJH0egH4L
+AXdEg+wED7ZGC0BQagRT6Pz///+DxBDrLon2g+wIV1Po/P///4PoAoPEEIP4AXcXgH4L
+AHQRg+wEagBqBFPo/P///4PEEJBbXl/DV1ZTi3QkEIn3/7bMEAAAVuj39f//jRSAjRRQ
+jZzWNCoAAImeMCoAAIPECPaGJCoAAAF0eIO+eAIAAAF0b/+GCCcAAIPsBGoAagFW6Pz/
+//+DxAxqAGoFVuj8////g8QMagBqBFbo/P///4PEDGoAagJW6Pz///+DxAxqAGoDVuj8
+////iTQk6Pz///+DxAiAzAFQVuj8////iTQk6Kf8//+DxBDp/AAAAI12AIB7CQB0FoPs
+BA+2QwlQagFW6Pz///+DxBCNdgCAewoAdBaD7AQPtkMKUGoFVuj8////g8QQjXYAgHsM
+AHQag+wEgHsMAA+UwA+2wFBqAlbo/P///4PEEJCAew0AdBaD7AQPtkMNUGoDVuj8////
+g8QQjXYAgHsLAHQWg+wED7ZDC1BqBFbo/P///4PEEI12AIO/KCoAAAB0P4PsDFbo/P//
+/4PECIDk/lBW6Pz///+JNCTo5fv//4tGFMeAMIEAAAAAAgCDxBCLRhTHgDiBAAAAAAAC
+6yOJ9oPsDFbou/v//4k0JOj8////g8QIgMwBUFbo/P///4PEEFteX8ONdgBXVlOLdCQQ
+i1wkFIn3i0YUx4AkgQAAAAAAAItGFMeAKIEAAAAAAACD7AiNhhQnAABQVuj8////iwOJ
+hignAACLQwSJhiwnAACLQwiJhjAnAACLRhSLkCyBAACLiDSBAACJ0CUAAMAAg8QQPQAA
+wAB0DonIJQAAwAA9AADAAHVhi58wKgAAK1NEidArQzwBhwAnAACJUzyJyitTSInQK0NA
+AYcEJwAAiVNAi0M8O0MUdg+D7AxW6J77//+DxBCNdgCLQ0A7Qxx2DIPsDFbo0/z//4PE
+EIPsDFbov/r//4PEEFteX8NTg+wIi1wkEItEJBSLkzAqAACAeAURdSj/Qjz/gwAnAACL
+Qjw7QhR2Q4PsDFPoQvv//4kcJOh++v//g8QQ6y2QgHgFGXUm/0JA/4MEJwAAi0JAO0Ic
+dhWD7AxT6GD8//+JHCToUPr//4PEEJCDxAhbw412AFZTg+wEi3QkEIuOMCoAAIuWKCcA
+AInQg+B/g/g/dgmNQn/B6AfrCpCLhignAADB6Ac5QSh8VjlBJH01gHkMAHQTg+wEagFq
+Albo/P///4PEEOtxkIB5CwB0MoPsBA+2QQtIUGoEVuj8////g8QQ61SAeQsAdBaD7AQP
+tkELSFBqBFbo/P///4PEEOs4gHkKAHQWg+wED7ZBCkhQagVW6Pz///+DxBDrHIB5CQB0
+FoPsBA+2QQlIUGoBVuj8////g8QQifaDxARbXsOJ9lVXVlOLVCQUi0IUi7jsgAAAi6jw
+gAAAi7D4gAAAi5owKgAAg3s4AHQFOXM4dg65AAAAAP+CDCcAAOspkInxK0s4iegrQzSJ
++itTMCnBKdG4KTlTX/fpwfoOicjB+B+J0SnBifaJcziJezCJazSJyFteX13DVVdWU4Ps
+DIt0JCCLfCQkifODvjAqAAAAD4T6AQAA9oYnKgAAQHQpi4bMEAAAD7dAAiXQAAAAPdAA
+AAB1E4PsCP90JDBW6Pz///+DxBCNdgD2hiQqAAABD4S7AQAAg7swKgAAAA+ErgEAAIur
+MCoAAIsHiYMoJwAAi0cEiYMsJwAAi0cIiYMwJwAAVuj8/v//iceDxASFwHkS/4MQJwAA
+g+wMVuhc+P//g8QQAX0Qg7soKgAAAA+ElQAAAIPsCI2DFCcAAFBW6Pz///+LRhSLkCyB
+AACLiDSBAACDxBA5VUR3CjlNSHZFOVVEdhmLRhSLVUSJkCyBAACLRhTHgDCBAAAAAAIA
+OU1ID4YKAQAAi0YUi1VIiZA0gQAAi0YUx4A4gQAAAAAAAunsAAAAK1VEidArRTwBgwAn
+AACJVTyJyitVSInQK0VAAYMEJwAAiVVA9oYkKgAAAQ+EuwAAAIuDLCoAAI0EgDlFEHZG
+i00QicgPr0UYu9NNYhD344nQwegGOUU8dx6JyA+vRSD344nQwegGOUVAdwyD7AxW6CD9
+//+DxBCD7AxW6Fj3//+DxBDrZ4tFEDuDLCoAAHZcicIPr1UUuNNNYhD34onQwegGOUU8
+dhaD7AxW6OT3//+JNCToIPf//4PEEOsvi0UQD69FHLrTTWIQ9+KJ0MHoBjlFQHYXg+wM
+VugC+f//iTQk6PL2//+DxBCNdgCDxAxbXl9dw7gAAAAAw4n2uAAAAADDifa4AAAAAMOJ
+9lZTg+wEi3QkEInzagBqAWoRVuj8////g8QQhcB1QoGOJCoAAAAAAECD7AxoAMAAAOj8
+////iYZQUAAAg8QQuAIAAACDvlBQAAAAdCKD7AxW6Pz///+JNCTojwMAAIPEEGbHg9Im
+AAD//7gAAAAAg8QEW17DU4PsCItcJBDHg6QCAAAAAAAAg7tQUAAAAHQlg+wMU+j8////
+g8QE/7NQUAAA6Pz////Hg1BQAAAAAAAAg8QQkIPECFvDjXYAVVdWU4PsIItsJDyLfCRA
+i0QkOIpAJohEJBOLVCQ4ZoN6IAB0E4N6LAB0DYtCLA+2AIlEJAzrCZDHRCQMAAAAAIB8
+JBMAdQuDfCQMAA+EaQEAAGaLD2aJTCQWZotHAmaJRCQUD7dfEA+3dxKNBFuNFMUAAAAA
+jUQqBMZHDAGLAIlEJByLRCQchcB0TY0EKosAiUQkGItUJBiLRCQYwegQZjnQD4SVAAAA
+Qw+3TCQWidi6AAAAAPfxidNGD7dMJBSJ8LoAAAAA9/GJ1onQweAQCdiJRwjrZ4n2jQRb
+jUTFAIsAiUQkGItUJBiLRCQYwegQZjnQdEhmi0wkFmbR6Q+3yY0EGQ+3VCQWiRQkugAA
+AAD3NCSJVCQIifApyA+3VCQUidG6AAAAAPfxweIQi0QkCAnQiUQkGItEJBiJRwiNDFvB
+4QOKRCQTiEQpFIpUJAyIVCkVi0QkNGaLgNImAACIRCkWi1QkOGaLQiIl/38AAGaJRCkI
+i0QkRItUJEiJRCkMiVQpEInwDQAA//+JBCmNQwEPt1QkFonRugAAAAD38WaJVxCNRgEP
+t1QkFInRugAAAAD38WaJVxL/RxiDxCBbXl9dw5BVV1ZTg+wUi2wkKIt8JCyLRCQ0xwAA
+AAAAuAAAAACAfwwAD4QIAQAAZosXZolUJA5mi08CZolMJAxmi18EZotPBo12AA+3w40E
+QI1ExQDHQAQBAAAAicaLAInCiwbB6BBmOcJ1C7gAAAAA6cEAAACQZjnRdX8Pt9uJXCQE
+jRxbweMDi1QrCItEJDCJEItUKwyJUASLVCsQiVAIi1QrFIlQDItUJARCD7dEJA6JRCQI
+idCZ93wkCGaJVwQPt8mJDCRBiUwkCA+3VCQMiciJ0Zn3+WaJVwb/RxSLBCTB4BALBCSJ
+BCvHBgAAAAC4AQAAAOs/jXYAi0QkNMcAAQAAAItHCIlEJBCJ2onOi0QkEInDi0QkEInB
+wekQZjnTD4Uj////ZjnxD4Ua////uAAAAACQg8QUW15fXcNTg+wQi1wkGGgcCAAAjYM0
+SAAAUOj8////x4NEUAAAFAAAAMeDSFAAABQAAACDxBhbw4n2U4PsEItcJBhoAMAAAP+z
+UFAAAOj8////g8QIahyNg1RQAABQ6Pz///9mx4NUUAAAAAhmx4NWUAAAAQiDxBhbw1dW
+U4t0JBCLhswQAACNvjRIAAD3hiQqAAAAAADAdFkPt0ACJdAAAAA90AAAAHVlg+wMVuj8
+////i0YUi5hUmQAAx4cYCAAABQAAAIHLAAAUAIk0JOj8////gMwCg8QIUFbo/P///4tG
+FIPLAYmYVJkAAIPEEOsdkIPsDFbo/P///4Dk/YPECFBW6Pz///+DxBCNdgBbXl/DU4Ps
+FItcJBxT6Pz///+A5P6DxAhQU+j8////i1MUi4JUmQAAg+D+iYJUmQAAg8QYW8OJ9lOD
+7AiLXCQQg7vMEAAAAHQxg+wMU+j8////g8QQ94MkKgAAAAAAwHQJg7t4AgAABnQQgOT9
+g+wIUFPo/P///4PEEIPECFvDkFOD7AiLXCQQi4PMEAAAD7dAAiXQAAAAPdAAAAB1PoPs
+DFPo/P///4Dk/oPECFBT6Pz///+LUxSLglSZAACD4P6JglSZAACJHCTo/P///4kcJOhW
+/v//g8QQjXYAg8QIW8ONdgCLVCQEi4LMEAAAD7dAAiXQAAAAPdAAAAB1Iv90JBD/dCQQ
+jYJUUAAAUP+yUFAAAP90JBhS6N/6//+DxBjDjXYAVVdWU4PsPItsJFDHRCQYAAAAAMdE
+JBwAAAAAjZ00SAAA6W4DAACJ9oN8JBwAdBGD7Az/dCRc6Pz///+DxBCJ9ot8JCAPtkQk
+LIlEJBQPtkwkLYF7BP8AAAB1HY2B/wAAAIlDBIH5/wAAAHUIuP8AAACNdgCJwetkgfn/
+AAAAdSSBewT+AQAAdBOBewT9AgAAdAqBewT8AwAAdQmQAUsE6zuNdgCBewT7BAAAdReB
++f8AAAB0D4HB+wQAAMdDBAAAAADrGIF7BP8AAAB2C4lLBLn/AAAA6wWQiUsEkI2B//7/
+/4P4FXYZjYHZ/v//g/gedg6NgQD7//+D+BR3QY12ALgAAAAAvvsEAACB+f8EAAB3Bb7/
+AAAAZjk7dgW4AID//w+31w+3wAHCD7cDKcIPt8aJzinGOfJ0BbkBAAAAg/kKD4ZNAgAA
+gfn/AAAAdQmDfCQUEXYCsQKNgQD7//+D+BR2C42Bwv7//4P4B3cQuQMAAACDQxQCg4ME
+CAAAAo1B/z39AQAAD4cIAgAA/0SLCI1B34P4C3ZQjUHLg/gFdkiNQYKD+A52QI2Bc///
+/4P4E3Y1jYFD////g/gVdiqNgZj+//+D+BR2H42B//7//4P4DXYUjYHZ/v//g/gHdgmD
++QMPhaYBAACLkwQIAACNQgGJgwQIAACDfCQUD3YN/0SLCI1CAomDBAgAAA+3gwgIAACL
+RIMIO0SLCHM5D7eDCggAADnIdAlmi4MKCAAA6wdmi4MMCAAAZomDDAgAAGaLgwgIAABm
+iYMKCAAAZomLCAgAAOtjD7eDCAgAADnIdCgPt4MKCAAAi0SDCDtEiwhzF2aLgwoIAABm
+iYMMCAAAZomLCggAAOswD7eDCggAADnIdCUPt4MICAAAOch0Gg+3gwwIAACLRIMIO0SL
+CHMJZomLDAgAAIn2uQMAAACLgwQIAACJRCQMugAAAABmg7xTCAgAAAB0QYXSdSlmg7sI
+CAAAA3Ufi0MUO0MQcxeD+AZ2EgNDEAFEJBgBgwQIAADrGI12AA+3hFMICAAAi3SDCAF0
+JBjrA4n2SUKD+gN2rYuDBAgAADuDEAgAAHZXi1QkGMHiB4nID6+DFAgAAA+vgwQIAAA5
+wnY8i0QkVIBIBAGD7AhqBo2DCAgAAFDo/P///8eDBAgAAAAAAACDxAho/AcAAI1DCFDo
+/P///4PEEOsNjXYAi3QkDImzBAgAAGaJO412AI1EJBxQjUQkJFCNhVRQAABQ/7VQUAAA
+6Pz///+DxBCFwA+Fbfz//4PEPFteX13DkItMJASLVCQIi4HMEAAAZosAZokCi4HMEAAA
+gEgECIBKBAiLgcwQAABmi0ACZolCAouBzBAAAIpABIhCBIuBzBAAAIpABYhCBbgAAAAA
+w5CQVVdWU4PsDIt8JCCLbCQoi1wkLL4AAAAAjQR2i08UixTFIFcAAIlUJAiLVCQkjQRC
+iwSFIFcAAItUJAiJBBFD9sM/dRCD7AxqAej8////g8QQjXYARoP+DXa+vgAAAACQi08U
+ixT1gFgAAIsE9YRYAACJBBFD9sM/dQ6D7AxqAej8////g8QQkEaD/kd20r4AAAAAkI0E
+dotPFIsUhWBcAAAB6IsEhWBcAACJBBFD9sM/dQ2D7AxqAej8////g8QQRoP+P3bOg8QM
+W15fXcOJ9lVXVlOD7BCLbCQki1QkKA+3QgJQD7cCUFXo/P///4PEEItcJCSAewIAeWkP
+v/CNHHbB4wKNs+RiAACD7AhqCP92BOj8////iceB5/8AAADB5wWLg+RiAADB4AQJx2aL
+TgiLVRSLggSiAACDxBCLXCQkZoE7tAl1DIPIEImCBKIAAOsYkItVFIPg74mCBKIAAOsJ
+ifaJwb8AAAAAZoH5kAB/BfbBAXQlg+wIaggPv8GD6BhQ6Pz///+Jw4Hj/wAAALgBAAAA
+g8QQ6y6J9oPsCGoID7/Bg+gYicLB6h8B0NH4UOj8////icOB4/8AAAC4AAAAAIPEEIn2
+weMC0eAJw4HLAQQAAItNFIn4Jf8AAADB4AgPttMJ0ImBnJgAAItNFIn4JQD/AAAPttcJ
+0ImB0JgAAItEJCSJhcwQAAC4AQAAAIPEDFteX13DjXYAi1QkCItEJASLgPgpAACD+gd3
+If8klShkAACJ9oPARMODwEjDg8BMw4PAUMMFlAAAAMOJ9rgAAAAAw4n2VVdWU4PsfIus
+JJAAAACLhCSYAAAAZolEJB6JbCQYvwAAAACLlCSUAAAAD7dCAiXwAQAAPcAAAAAPhOAB
+AAA9wAAAAH8QPaAAAAAPhFMBAADpQQIAAD1AAQAAdAs9UAEAAA+FLwIAAIuUJJQAAABm
+iwItoQ8AAGY96gR3JYtEJBhmi4DkEQAAZolEJA6LVCQYZouS5hEAAGaJVCQM6awAAACL
+lCSUAAAAZosCLYwUAABmPe8AdyKLRCQYZouA6BEAAGaJRCQOi1QkGGaLkuoRAABmiVQk
+DOt1i5QklAAAAGaLAi18FQAAZj3gAHcii0QkGGaLgOwRAABmiUQkDotUJBhmi5LuEQAA
+ZolUJAzrPouEJJQAAABmgThcFnYii1QkGGaLkvARAABmiVQkDotEJBhmi4DyEQAAZolE
+JAzrDmbHRCQMAABmx0QkDgAAx0QkCAAAAAC+AAAAAItUJBhmi5JoEQAAZolUJBaLRCQY
+ZouAbhEAAGaJRCQUi1QkGGaDum4RAAAAD5TAZg+2wGaJRCQSZouCvBEAAGaJRCQQ6f0A
+AACLVCQYZouS9BEAAGaJVCQOi0QkGGaLgPYRAABmiUQkDItUJBgPt7L8EQAAD7eCABIA
+AIlEJAhmi5JqEQAAZolUJBaLRCQYZouAcBEAAGaJRCQUi1QkGGaDunARAAAAD5TAZg+2
+wGaJRCQSZouCvhEAAGaJRCQQ6YIAAACLVCQYZouS+BEAAGaJVCQOi0QkGGaLgPoRAABm
+iUQkDItUJBgPt7L+EQAAD7eCAhIAAIlEJAhmi5JsEQAAZolUJBaLRCQYZouAchEAAGaJ
+RCQUi1QkGGaDunIRAAAAD5TAZg+2wGaJRCQSZouCwBEAAGaJRCQQ6wq4AAAAAOlVAwAA
+uwAAAAAPt1QkHrnAWgAAkI0EW40EQosEgYlEnCBDg/sQdu2LlCSUAAAAgHoCAHkqg+wM
+agBqd2oDVo1cJDxT6Pz///+DxBRqAGp6agP/dCQgU+j8////g8QguwAAAACQjQRbi00U
+ixTFwFoAAItEnCCJBBFH98c/AAAAdQ+D7AxqAej8////g8QQifZDg/sQds67AAAAAItN
+FIsU3WBfAACLBN1kXwAAiQQRR/fHPwAAAHUNg+wMagHo/P///4PEEEN007sAAAAAD7d0
+JB6NBFuLTRSLFMVoXwAAjQRGiwSFaF8AAIkEEUf3xz8AAAB1DYPsDGoB6Pz///+DxBBD
+dM27AAAAAA+3dCQejQRbi00UixTFgF8AAI0ERosEhYBfAACJBBFH98c/AAAAdQ2D7Axq
+Aej8////g8QQQ3TNuwAAAAAPt1QkHrmgXwAAjXYAjQRbjQRCiwSBiUScIEOD+xB27YuU
+JJQAAAAPt0ICJUABAAA9QAEAAHU9g+wMagNqM2oBi1QkMA+3glwSAABQjVwkPFPo/P//
+/4PEFGoDai1qAYtUJDAPt4JeEgAAUFPo/P///4PEIIPsDGoAal9qAQ+3RCQqUI1cJDxT
+6Pz///+DxBRqAGpgagQPt0QkLlBT6Pz///+DxBRqAGpoagMPt0QkJlBT6Pz///+DxBRq
+AGpragMPt0QkJFBT6Pz///+7AAAAAIPEIJCNBFuLTRSLFMWgXwAAi0ScIIkEEUf3xz8A
+AAB1D4PsDGoB6Pz///+DxBCJ9kOD+xB2zrsAAAAAD7dUJB65QGEAAI12AI0EW40EQosE
+gYlEnCBDg/sHdu2D7AxqAGodagYPt0QkKFCNXCQ8U+j8////g8QUagBqBGoBD7dEJCxQ
+U+j8////g8Qgi4QklAAAAGaDeAIAeAb2QANAdFSLlCSUAAAAD7dCAiUAQAAAg/gBGduD
+4w+DwxCD7AxqAGoTagVqH410JDxW6Pz///+DxBRqAGoYagVTVuj8////g8QUagBqMWoC
+agNW6Pz///+DxCC7AAAAAI12AI0EW4tNFIsUxUBhAACLRJwgiQQRR/fHPwAAAHUPg+wM
+agHo/P///4PEEIn2Q4P7B3bOi0QkGMeA0CkAAAAAAAC4AQAAAIPEfFteX13DjXYAVVdW
+U4tsJBSLTCQYi3wkHItcJCCLdCQkD7fDD7fWD6/CugAAAACFwHRhidhmOc90Vw+3xQ+3
+ySnIjQSAjQSAweACD7fXKcqJ0Zn3+YnCidhmhdJ4M4nwZoP6ZH8rD7/SD7fOD6/KuGQA
+AAAp0A+30w+vwgHBuB+F61H36YnQwfgFwfkfZinIkA+30InQW15fXcOJ9lVXVlOB7EwB
+AACLhCRgAQAAiUQkHGbHRCQYAABmx0QkFj8Ai5QkbAEAAA+3QgIl8AEAAD3QAAAAD4SD
+AAAAPdAAAAB/Ez2gAAAAdE49wAAAAHRu6Y0AAAA9UAEAAHQXPVABAAB/CT1AAQAAdAnr
+dj1ACQAAdW+LTCQcZouBdhIAAGaJRCQkicgFYhIAAIlEJCCNQBaJRCQo61WLXCQcZouD
+gBQAAGaJRCQkidgFiBQAAIlEJCCNgLYAAACJRCQo6y6LVCQcZouCgBQAAGaJRCQkidAF
+ghQAAIlEJCCNQCCJRCQo6wq4AAAAAOnYAgAAjXQkIIPsCGgIAQAAjUQkPFDo/P///42s
+JMgAAAC/AQAAALsAAAAAg8QQjXYAZol8XDhHQ4P/P370ZolcJDZmx0QkMgEAZsdEJDQ/
+ALsAAAAAZoN8JDYAdCyD7ARWD7dEXEBQi4wkeAEAAA+3AVDocgIAAGaJRF0Ag8QQQw+3
+RCQ2Odh/1GaLVQAPt0QkNmaLTEX+uwAAAACD+AB+amY5VF0Afwpmi1RdAGaJXCQYidj3
+0GYDRCQ2D7f4hf90IGaLRH3+ZjtEfQB+CmaLRH0AZolEff5DD7dEJDY52H+/uwAAAABm
+g3wkNgB0HA+3RCQ2kGY5TF0Afgpmi0xdAGaJXCQWQznYf+oPv8qDwRm7H4XrUYnI9+uJ
+0MH4BMH5HynIjQSAjQSA0eBmiUQkGmbHRCQUAAC/AAAAAA+/yInOicj364lEJAiJVCQM
+i0QkDMH4BMH5HynIQIP4AH46uB+F61H37onRwfkEifCZicgp0I1IAY12AA+3VCQUi1wk
+HIuDwFAAAItcJBhmiRxQZv9EJBRHOfl/378AAAAAD7dEJDaJwmaLTCQaZjlMRf4PjucA
+AABmg3wkFD8PhwgBAABmg0QkGjKJ1maLXCQaZjlcVf5+Rw+/w4nDD79UfQCJwSnRicoP
+v0x9AinID6/QhdJ+KZBHZotEJBpmOUR1/n4bD79EfQCJ2inCidAPv1R9AonZKdEPr8GF
+wH/YD7dUfDrR4g+30g+3RHw40eAPt8APt0x9Ag+3XH0AD7d0JBpSUFFTVug3/P//g8QU
+QA+3TCQUi1wkHIuTwFAAAGbR6GaJBEqLg8BQAABmi1QkFmY5FEh2BGaJFEhm/0QkFA+3
+VCQ2ZotMJBpmOUxV/n4OZoN8JBQ/D4Yn////6y1mg3wkFD93JQ+3TCQUi1wkHIuTwFAA
+AGaLREr+ZokESmb/RCQUZoN8JBQ/dtuLRCQcZseAACoAAAAAuAEAAACBxEwBAABbXl9d
+w4n2VVdWU4PsHItsJDiLXCQwi3QkNI1EJBpQVQ+3xlAPt8NQ6EIBAACDxBCFwHQLD7dE
+JBrpKQEAAJCD7AyNRCQkUI1EJCZQD7dFBFD/dQAPt9uJXCQgU+j8////g8QUjUQkIFCN
+RCQiUFUPt0QkLlAPt/ZW6HUBAACDxBSNRCQcUI1EJB5QVQ+3RCQwUFboWwEAAIPEII1E
+JAxQVQ+3RCQaUA+3RCQiUOi9AAAAjUQkGlBVD7dEJCxQD7dEJDJQ6KYAAACDxCAPt0Qk
+Cg+3VCQMD7dMJBQPt1wkElBSUVNW6LX6//+DxBSJx41EJAxQVQ+3RCQWUA+3RCQkUOhp
+AAAAjUQkGlBVD7dEJChQD7dEJDRQ6FIAAACDxCAPt0QkCg+3VCQMD7dMJBAPt1wkDlBS
+UVNW6GH6//+DxBQPt8APt98Pt1QkGA+3TCQWUFNSUf90JBToQfr//4PEFA+3wI12AIPE
+HFteX13DVVdWU4PsBItsJCCLRCQYZolEJAKLfCQci00IvgAAAABmg30EAHRNkGaLRCQC
+ZjkBdTaNUQi7AAAAAGaDeQYAdCeNdgBmOTp1E2aLVFkei0QkJGaJELgBAAAA6x2DwgJD
+D7dBBjnYf9yDwTRGD7dFBDnwf7S4AAAAAIPEBFteX13DjXYAV1ZTi0QkGIt8JBCLdCQU
+i1AIuQAAAAAPt0AEicOD+AB+D4n2ZjkydAiDwjRBOct/84PsDP90JCz/dCQsD7dCBlCN
+QghQD7fHUOj8////g8QgW15fw412AFOD7AiLXCQQg7vAUAAAAHQbg+wM/7PAUAAA6Pz/
+///Hg8BQAAAAAAAAg8QQg7v4KQAAAHQbg+wM/7P4KQAA6Pz////Hg/gpAAAAAAAAg8QQ
+g8QIW8ONdgC4AQAAAMOJ9roAAAAAi0QkCGaLAInBZjsFYGQAAHcMuGBkAABCZjsMkHb5
+D78ElWJkAADDVlOD7BCLdCQgi1wkHGi0AAAA6Pz///+Jg/gpAACDxBCFwHUMxwYCAAAA
+6YUAAACQx4PEUAAAgAAAAIPsDGiAAAAA6Pz///+Jg8BQAACDxBCFwHUIxwYCAAAA61jH
+gzQnAAA4dQEAx4M4JwAANGYBAMeDPCcAAFBoAQDHg0AnAAAEZwEAx4NEJwAAjGgBAMeD
+SCcAACBvAQDHg0wnAACQdQEAx4NQJwAAmHUBALgBAAAAjXYAg8QEW17DkJBVV1ZTg+wM
+i3wkIItsJCiLXCQsvgAAAACNBHaLTxSLFMWgZAAAiVQkCItUJCSNBEKLBIWgZAAAi1Qk
+CIkEEUP2wz91EIPsDGoB6Pz///+DxBCNdgBGg/4Pdr6+AAAAAJCLTxSLFPUgZgAAiwT1
+JGYAAIkEEUP2wz91DoPsDGoB6Pz///+DxBCQRoP+RHbSvgAAAACQjQR2i08UixSFYGgA
+AAHoiwSFYGgAAIkEEUP2wz91DYPsDGoB6Pz///+DxBBGg/4/ds6DxAxbXl9dw4n2VVdW
+U4PsDItsJCCLdCQkx0QkCAAAAAC/AAAAAGaBPr8SD4fNAAAAD7cGiUQkBC2QCAAAugUA
+AACJ05n3+4XSdSOLRCQEjZwA4O7//7hnZmZm9+vB+gKJ2MH4H4nTKcPrRY12AA+3Do2B
+UPf//7oFAAAAidOZ9/u4AAAAAIXSD4UcAgAAjZwJoO7//7hnZmZm9+vB+gKJ2MH4H4nT
+KcPHRCQIAQAAAMHjAoHj/wAAAIPsCGoIU+j8////icOLVRSLggSiAACDxBBmgT60CXUR
+g8gQiYIEogAA6X8BAACNdgCLVRSD4O+JggSiAADpawEAAI12AGaLDrsFAAAAugAAAACJ
+yGb382aD+gJ1TGaB+TsVd0WD6QKD7AhqCA+3yY0MiY2MCYBE//+4H4XrUffpidDB+APB
++R8pyEBQ6Pz///+Jw4PECGoCagDo/P///4nHg8QQ6QQBAABmiwa5FAAAALoAAAAAZvfx
+ZoXSdUdmgT7/E3ZAg+wIaggPtw6B6cASAAC4Z2ZmZvfpidDB+APB+R8pyMHgAlDo/P//
+/4nDg8QIagJqA+j8////iceDxBDpqAAAAGaLBrkKAAAAugAAAABm9/FmhdJ1P4PsCGoI
+D7cOgenAEgAAuGdmZmb36YnQwfgCwfkfKcjR4FDo/P///4nDg8QIagJqAuj8////iceD
+xBDrV412AGaLBrkFAAAAugAAAABm9/G4AAAAAGaF0nV+g+wIaggPtw6B6cASAAC4Z2Zm
+ZvfpidDR+MH5HynIUOj8////icODxAhqAmoB6Pz///+Jx4PEEI12AInZweEEjQS9AAAA
+AAnBi0QkCNHgCcGByQEQAACLVRQPtsGJgpyYAADB6QiLVRSJyIPgf4mC2JgAAIm1zBAA
+ALgBAAAAg8QMW15fXcOLVCQIi0QkBIuA+CkAAIP6B3cd/ySVmHAAAIn2g8AEw4PACMOD
+wAzDBawAAADDifa4AAAAAMOJ9lVXVlOD7ByLRCQ4ZolEJBqLVCQwiVQkFGbHRCQQAABm
+x0QkDgAAZsdEJAwAAGbHRCQKAACLuvgpAACBwqAmAACJVCQEvQAAAACLVCQ0D7dCAiXw
+AQAAPdAAAAAPhGMBAAA90AAAAH8bPaAAAAAPhBgBAAA9wAAAAA+ERgEAAOlvAQAAPVAB
+AAB0Hj1QAQAAfww9QAEAAHQQ6VUBAAA9AAgAAA+FSgEAAItUJDRmiwItoQ8AAGY96gR3
+JYtEJBRmi4DkEQAAZolEJBCLVCQUZouS5hEAAGaJVCQO6ZMAAACLVCQ0ZosCLYwUAABm
+Pe8AdyKLRCQUZouA6BEAAGaJRCQQi1QkFGaLkuoRAABmiVQkDutfi1QkNGaLAi18FQAA
+Zj3gAHcii0QkFGaLgOwRAABmiUQkEItUJBRmi5LuEQAAZolUJA7rK4tEJDRmgThcFnYg
+i1QkFGaLkvARAABmiVQkEItEJBRmi4DyEQAAZolEJA6LVCQUZouybhEAAGaLgrwRAABm
+iUQkEutxi1QkFGaLkvwRAABmiVQkDItEJBRmi4AAEgAAZolEJAqLVCQUZouycBEAAGaL
+gr4RAABmiUQkEus4i1QkFGaLkv4RAABmiVQkCmaJVCQMi0QkFGaLsHIRAABmi5DAEQAA
+ZolUJBLrCrgAAAAA6fEEAAC6AAAAALlkawAAiwTRiQSXQnT3ugAAAAAPt0wkGrtoawAA
+jQRSjQRBiwSDiUSXBEJ08LoAAAAAD7dMJBq7gGsAAI0EUo0EQYsEg4lElwhCdPC6AAAA
+AA+3TCQau6BrAACNBFKNBEGLBIOJRJcMQoP6J3btg+wMagBoLgEAAGoBD7fGUI1fDFPo
+/P///4PEFGoAaA4BAABqAotUJFQPtwJQU+j8////g8QUagBoAQEAAGoCi1QkVA+3QgJQ
+U+j8////g8Qgi0QkNPZAAkAPhLcAAACD7AxqA2ioAAAAagGLVCQci0IcD79AAlBT6Pz/
+//+DxBRqA2ipAAAAagGLVCQci0IcD79ABFBT6Pz///+DxBRqA2iqAAAAagGLVCQci0Ic
+D79ABlBT6Pz///+DxBRqA2iuAAAAagGLVCQci0IcD79ACFBT6Pz///+DxBRqA2ivAAAA
+agGLVCQci0IcD79AClBT6Pz///+DxBRqA2iwAAAAagGLVCQci0IcD79ADFBT6Pz///+D
+xCCLRCQ0gHgCAHk4g+wMagBoHwEAAGoDD7dEJCRQjV8MU+j8////g8QUagBoIgEAAGoD
+D7dEJCJQU+j8////g8Qg6zaD7AxqAGgXAQAAagMPt0QkKFCNXwxT6Pz///+DxBRqAGga
+AQAAagMPt0QkJlBT6Pz///+DxCCLVCQwD7eCcAIAACXwAAAAg+gwg/g/d3Vmg7pwAgAA
+NXQeZoO6cAIAAEV0FGaDunACAABGdApmg7pwAgAANnVNg+wMagJqWmoCagKNXwxT6Pz/
+//+DxBRqAmpcagJqAlPo/P///4PEFGoCal5qAmoCU+j8////g8QUagJo/gAAAGoBagJT
+6Pz///+DxCCLRCQwZoO4bgIAAEF2ZIPsDGoBaBkBAABqAWoBjV8MU+j8////g8QUagNq
+AWoCagFT6Pz///+DxBRqA2oDagJqAVPo/P///4PEFGoDaIsAAABqAWoBU+j8////g8QU
+agNojAAAAGoBagFT6Pz///+DxCC6AAAAAA+3TCQau2BvAACQjQRSjQRBiwSDiYSXrAAA
+AEKD+gx26otUJDT2QgJAdCOD7AxqAGolagKLVCQci0IcD78AUI2HrAAAAFDo/P///4PE
+IIPsDGoAag5qBg+3RCQqUI2HrAAAAFDo/P///4PEIItEJDT2QANAdQdmg3gCAHlCi1Qk
+NA+3QgIlAEAAAIP4ARnbg+MHg8MIg+wMagBqOmoEag+Nt6wAAABW6Pz///+DxBRqAGpG
+agRTVuj8////g8QguwAAAACLRCQwi0gUixTdYGsAAIsEn4kEEUX3xT8AAAB1DYPsDGoB
+6Pz///+DxBBDdNO7AAAAAI0EW4tUJDCLShSLFMVoawAAi0SfBIkEEUX3xT8AAAB1DYPs
+DGoB6Pz///+DxBBDdM+7AAAAAI0EW4tUJDCLShSLFMWAawAAi0SfCIkEEUX3xT8AAAB1
+DYPsDGoB6Pz///+DxBBDdM+7AAAAAJCNBFuLVCQwi0oUixTFoGsAAItEnwyJBBFF98U/
+AAAAdQ+D7AxqAej8////g8QQifZDg/sndsq7AAAAAJCNBFuLVCQwi0oUixTFYG8AAIuE
+n6wAAACJBBFF98U/AAAAdRCD7AxqAej8////g8QQjXYAQ4P7DHbGi0QkFMeA0CkAAAAA
+AAC4AQAAAIPEHFteX13DjXYAVVdWU4Hs/AMAAIuEJBAEAACJRCQYD7eAcAIAACXwAAAA
+g+gwg/g/dzaLVCQYZoO6cAIAADV0HmaDunACAABFdBRmg7pwAgAARnQKZoO6cAIAADZ1
+CsdEJBQCAAAA6wjHRCQUAQAAAIuMJBwEAAAPt0ECJfABAAA90AAAAHRpPdAAAAB/ED2g
+AAAAdEE9wAAAAHRU62w9UAEAAHQXPVABAAB/CT1AAQAAdAnrVT0ACAAAdU6LRCQYBWQa
+AACJRCQMi0wkGA+3kWgRAADrPotEJBgFcBoAAIlEJAyLTCQYD7eRahEAAOski0QkGAV8
+GgAAiUQkDItMJBgPt5FsEQAA6wq5AAAAAOn3BQAAi0wkDA+3QQa5AAAAAIXCD4TiBQAA
+i5QkGAQAAA+/AtHgZolEJASLjCQUBAAAD78B0eBmiUQkBmbHRCQord5mx0QkKq3ex0Qk
+CAAAAAC+AAAAAItEJAwPt1AGjVwkKI12AInQifHT+KgBdBiDfCQIAQ+H0QQAAItEJAhm
+iTRDQIlEJAhGg/4DdtiD7AyNRCQwUI1EJDBQi1QkIA+3QgRQ/zKLjCQ4BAAAD7cBUOic
+BQAAx0QkKAAAAACLbCRAg8QgO2wkJA+H9QEAAI12AI1ErQCNRIUAi0wkDItRCI0EgolE
+JBBmgXwkKq3eD4WXAAAAD7d0JCiNHLaNHJiD7AQPt3sGjTQ/Vo1DCFCNhCTcAgAAUOj8
+////g8QMVoPDEFONlCS8AgAAUuj8////g8QEjUwkPFGLVCQgD79CAlCNjCTEAgAAUY2E
+JOgCAABQV+iKBQAAg8QghcAPhPMDAACD7ARogAAAAI1UJDhSi0QkFMHgB42EBLwBAABQ
+6Pz///+DxBDpKQEAAA+3dCQojRy2i0wkEI0cmYPsBA+3ewaNND9WjUMIUI2EJNwCAABQ
+6Pz///+DxAxWg8MQU42UJLwCAABS6Pz///+DxASNTCQ8UYtUJCAPv0ICUI2MJMQCAABR
+jYQk6AIAAFBX6O8EAACDxCCFwA+EYgMAAIPsBGiAAAAAjVQkOFKLRCQUweAHjYQEvAEA
+AFDo/P///w+3dCQ6jRy2i0wkII0cmYPEDA+3ewaNND9WjUMIUI2EJNwCAABQ6Pz///+D
+xAxWg8MQU42UJLwCAABS6Pz///+DxASNTCQ8UYtUJCAPv0ICUI2MJMQCAABRjYQk6AIA
+AFBX6FwEAACDxCCFwA+E2QIAAIPsBGiAAAAAjVQkOFKLRCQUweAHjYQEvAAAAFDo/P//
+/4PEEP9EJAhFO2wkJA+GDv7//4tMJCCLRCQMixBmixxKi0QkJGaLPEIpyIlEJAhmgXwk
+Kq3eD4W4AAAAvgAAAACD7AyLRCQUweAGAfAPv4REvAEAAFAPv4R0wAEAAFAPt8dQD7fD
+UIuUJDgEAAAPtwJQ6OICAABmiYR0kAMAAIPEIEaD/j92uYPsCItMJCD/scBQAACNhCR8
+AwAAUOhnBAAAicJmwegPjQQCZtH4i5QkJAQAAGaJAmaLhCT+AwAAicJmweoPAdBm0fhm
+iUQkPouMJCgEAABmiQGLRCQ4i5QkMAQAAGaJAmaJQgKDxBDpOAIAAL4AAAAAD7fvD7f7
+ifaD7AyLXCQUweMGAfMPv4RcvAEAAFAPv4R0wAEAAFBVV4uMJDgEAAAPtwFQ6CgCAABm
+iYR0kAMAAIPEFA+/hFy8AAAAUA+/hHTAAAAAUFVXi5QkOAQAAA+3AlDo+QEAAGaJhHQQ
+AwAAg8QgRoP+P3aQg3wkFAIPhYsAAACNRCQeUItMJBz/scBQAACNhCT4AgAAUI2EJHwD
+AABQ6DUEAACJwmbB6A+NBAJm0fiLlCQkBAAAZokCZotEJC6JwmbB6g8B0GbR+GaJRCQ+
+ZouEJP4DAACJwmbB6g8B0GbR+IuMJCgEAABmiQGLRCQ4i5QkMAQAAGaJAmaLRCQ6ZolC
+AoPEEOklAQAAZotMJAZmOYwkbgMAAA+MqQAAAItEJARmOYQkbgMAAA+MlwAAAIPsCItU
+JCD/ssBQAACNhCT8AgAAUOjDAgAAicJmi0QkOouMJDAEAABmiQFmiUECidBmwegPjQQC
+ZtH4i5QkJAQAAGaJAmaLhCR+AwAAicJmweoPAdBm0fhmiUQkPouMJCgEAABmiQGDxBDp
+kQAAALkAAAAA6aYAAAC5AAAAAOmcAAAAuQAAAADpkgAAALkAAAAA6YgAAACD7AiLRCQg
+/7DAUAAAjYQkfAMAAFDoLAIAAInCi0QkOIuMJDAEAABmiQFmiUECidBmwegPjQQCZtH4
+i5QkJAQAAGaJAmaLhCT+AwAAicJmweoPAdBm0fhmiUQkPouMJCgEAABmiQGDxBC4PwAA
+AIuUJBgEAABmKwKLTCQYZomBACoAALkBAAAAiciBxPwDAABbXl9dw5BXVlOLXCQQi3Qk
+FItMJBiLfCQci1QkIIn4ZjnxdCQPt9sPt/aJ2CnwD7/SD6/CD7fJicop2g+/3w+v0wHQ
+KfGZ9/mYW15fw5BVV1ZTi3QkGItsJCCLfCQki1QkHA+3XCQUD7fKjQxOD7cGOdh2EscH
+AAAAAMdFAAAAAADrU412AA+3Qf452HcoD7fCSIkHiUUA6z2J0Cnw0fiJB4lFAOswidAp
+8NH4iUUAQIkH6yKJ9onyOc5zGon2D7cCOdh01A+3QgI52HfZg8ICOcpy6on2W15fXcON
+dgBVV1ZTg+wMi2wkMItUJCCLRCQsZolEJApmx0QkCAAAZsdEJAYBALgAAAAAZoP6AQ+G
+mwAAAL8AAAAAD7fCSIkEJI12AA+3RCQGi1QkJGY5PEJzETsEJH0MZv9EJAhm/0QkBon2
+D7dUJAaLXCQoD780Uw+3RCQID78MQ4tcJCQPtxRTD7cEQw+331ZRUlBT6JX+//+DxBRm
+iURdAGaLVCQKZjnQfBtmg/8/dxWQD7fHZotcJApmiVxFAEdmg/8/duxHZoP/Pw+Gef//
+/7gBAAAAg8QMW15fXcNVV1ZTg+wEi3wkGItsJBwPv0d+D78XKdCD+H5+DmaLR36D6H5m
+iUQkAusIZosHZolEJAJmi3d+uT8AAAAPv1d+idBIOcJ+FonCjXYASQ+/wQ+/BEc50H4F
+ZoXJee+Jyonzvj8AAACJ9o1C/4nBZoP4PncdD7/CZjkcR3wUicqNSv9mg/k+dwkPv8Jm
+ORxHfexmhdJ1G2aF9nglifYPv9Zmi0RVAmaJRFUAZk557+sQkA+/xmaJVEUAg+sCZk55
+qQ+/RCQCg8QEW15fXcNVV1ZTg+wQi3QkJGbHRCQCQAAPv0Z+i0wkKA+/ESnQg/h+fg5m
+i25+g+1+ZolsJA7rDItEJChmiwBmiUQkDmaLVn5miVQkDLk/AAAAD79Wfg+/RCQMSDnC
+fhOJwkkPv8EPvwRGOdB+BWaFyXnvi2wkKGaLRX6LVCQwZokCvz8AAACLXCQMjXYAi2wk
+MGY5XQB9DmaFyXUZZoN8JAJAdRGQZsdEJAIAAIt0JCi5PwAAAGaFyX4aD7/BZjkcRnwR
+ifZJZoXJfgkPv8FmORxGffFmhcl1JGaDfCQCAHUcZoX/eDgPv9eLTCQsZotEUQJmiQRR
+Zk957OsikA+/74lsJARmi0QkAgnIi1QkLGaJBGqD6wJmTw+Jb////w+/RCQOg8QQW15f
+XcOJ9lOD7AiLXCQQg7vAUAAAAHQbg+wM/7PAUAAA6Pz////Hg8BQAAAAAAAAg8QQg7v4
+KQAAAHQbg+wM/7P4KQAA6Pz////Hg/gpAAAAAAAAg8QQg8QIW8ONdgBVV1ZTi3wkGGaL
+dwS9AAAAALkBAAAAifaNBImNHIcPt1MED7/GOcJ9BonNZotzBEGD+QN+441ErQCNBIdm
+i1gQZotwCLkBAAAAjUStANHgkI0UCGY5XFcQfQpmi1xXEGaLdFcIQYP5A37mjQQ2ZinD
+idiYW15fXcNVV1ZTg+wIi3wkIItUJByLRCQkZscAAAAPt0cCJUABAAA9QAEAAHUUi0Qk
+HAVkGgAAi1gID7dQBOtSifYPt0cCJdAAAAA9wAAAAHQHPdAAAAB1EY2CZBoAAItYIA+3
+UBzrKon2D7dHAiWgAAAAuQEAAAA9oAAAAA+FuwEAAI2CZBoAAItYFA+3UBCJ9rkAAAAA
+hdIPjp8BAABmiw9mOwtyE40Eko0EgmY7TIOsdmZmOwtzLZBmi0MCi1QkJGaJAlP/dCQg
+6L/+//+LTCQwZokBuQEAAACDxAjpWwEAAI12AI0Eko0Ego1Eg6xmi1ACi0wkJGaJEVD/
+dCQg6In+//+LVCQwZokCuQEAAACDxAjpJQEAAJC9AAAAALkAAAAAOdF9ImaLB4nGZjsD
+dhiJyEGJxTnRfQ+NBImNBIFmOzSDd+uNdgCNBImNBIHB4AKJRCQED7c0GI1ErQCNRIUA
+weACiQQkD7csGCnuhfYPjoQAAACLRCQED79MGAKLBCQPv1QYAinRD7cHKegPr8EPr9YB
+0Jn3/maYi1QkJGaJAotEJAQB2FD/dCQg6Nv9//8Pv+gDXCQIU/90JCjoyv3//5gpxQ+3
+Fw+3AynCidcPr/1T/3QkMOiw/f//mA+vxo0EB5n3/maYi0wkQGaJAbkBAAAAg8QY60ON
+BImNBIGNFIUAAAAAZosHuQAAAABmOwQadShmi0QaAotMJCRmiQGNBBpQ/3QkIOhf/f//
+i1QkMGaJArkBAAAAg8QIiciDxAhbXl9dw4n2VVdWU4PsCItsJByLdCQgi3wkJMcEJAEA
+AAC7AAAAADn7cz2QjUQkBlCNRCQIUI0E3lBV6IT9//+DxBCFwHQVi0QkBIhE3gZmi0Qk
+BohE3gfrCYn2xwQkAAAAAEM5+3LEiwQkg8QIW15fXcOQVlOD7BCLdCQgi1wkHGjgAAAA
+6Pz///+Jg/gpAACDxBCFwHUMxwYCAAAA6Y0AAACQx4PEUAAAgAAAAIPsDGiAAAAA6Pz/
+//+Jg8BQAACDxBCFwHUIxwYCAAAA62DHg8RQAABAAAAAx4M0JwAA3IsBAMeDOCcAAIB2
+AQDHgzwnAAD4eQEAx4NAJwAAUHcBAMeDRCcAADB6AQDHg0gnAAAogQEAx4NMJwAA8I4B
+AMeDUCcAAAAAAAC4AQAAAJCDxARbXsOQkFVXVlOD7AyLfCQgi2wkKIt0JCy7AAAAAI0E
+W4tPFIsUxcBwAACJVCQIi1QkJI0EQosEhcBwAACLVCQIiQQRRvfGPwAAAHUNg+wMagHo
+/P///4PEEEOD+w92vrsAAAAAkItPFIsU3UByAACLBN1EcgAAiQQRRvfGPwAAAHUPg+wM
+agHo/P///4PEEIn2Q4H7igAAAHbLuwAAAACJ9o0EW4tPFIsUhaB2AAAB6IsEhaB2AACJ
BBFG98Y/AAAAdQ6D7AxqAej8////g8QQkEOD+z92yoPEDFteX13DifZVV1ZTg+wMi2wk
IIt0JCTHRCQIAAAAAL8AAAAAZoE+vxIPh80AAAAPtwaJRCQELZAIAAC6BQAAAInTmff7
hdJ1I4tEJASNnADg7v//uGdmZmb368H6AonYwfgfidMpw+tFjXYAD7cOjYFQ9///ugUA
-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
+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
-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
-AQAAEQEAAAEAAAAAAAAAAQAAAHAAAwAZAQAAHAEAAAEAAAAAAAAAAQAAADgAMAAkAQAA
-JwEAAAEAAAAAAAAAAQAAAFQAVQAvAQAAMgEAAAEAAAABAAAAAQAAAEQAVQA5AQAAPAEA
-AAEAAAABAAAAAQAAAEwACABDAQAARgEAAAAAAAAAAAAAAAAAAGAAUgBNAQAAUAEAAAEA
-AAABAAAAAQAAAGQANABiAQAAZQEAAAEAAAAAAAAAAQAAAHwAIABuAQAAcQEAAAEAAAAB
-AAAAAQAAAJgAWAB4AQAAewEAAAAAAAABAAAAAAAAAJwAUgCBAQAAhAEAAAEAAAABAAAA
-AQAAAKoAEACKAQAAjQEAAAEAAAAAAAAAAQAAALwAAwCWAQAAmQEAAAEAAAAAAAAAAQAA
-AL8ANgCkAQAApwEAAAEAAAAAAAAAAQAAAMQANwCvAQAAsgEAAAEAAAABAAAAAQAAAMsA
-NgC5AQAAvAEAAAAAAAAAAAAAAAAAANAANwDLAQAAzgEAAAEAAAAAAAAAAQAAANYAEADW
-AQAA2QEAAAEAAAABAAAAAQAAANoAAwDsAQAA7wEAAAAAAAAAAAAAAAAAADIDAwD3AQAA
-+gEAAAEAAAAAAAAAAQAAAN4AAwAAAgAAAwIAAAEAAAAAAAAAAQAAAOkANwAPAgAAEgIA
-AAEAAAAAAAAAAQAAAPYANwAaAgAAHQIAAAEAAAAAAAAAAQAAAPoANgAlAgAAKAIAAAEA
-AAAAAAAAAQAAAP8ANgAvAgAAMgIAAAEAAAAAAAAAAQAAAAwBMAA9AgAAQAIAAAEAAAAB
-AAAAAQAAABQBNwBIAgAASwIAAAEAAAAAAAAAAQAAACwBAwBTAgAAVgIAAAEAAAAAAAAA
-AQAAAEABEABdAgAAYAIAAAEAAAABAAAAAQAAAFQBAwBqAgAAbQIAAAEAAAAAAAAAAQAA
-AFgBIQB2AgAAeQIAAAEAAAABAAAAAQAAAFwBNQCDAgAAhgIAAAEAAAAAAAAAAQAAAGAB
-NwCOAgAAkQIAAAEAAAAAAAAAAQAAAGQBAwCZAgAAnAIAAAEAAAAAAAAAAQAAAGgBAwCi
-AgAApQIAAAEAAAAAAAAAAQAAAGwBUgCvAgAAsgIAAAEAAAABAAAAAQAAAHQBNwC3AgAA
-ugIAAAEAAAAAAAAAAQAAAHgBAwDCAgAAxQIAAAEAAAAAAAAAAQAAAHwBNwDMAgAAzwIA
-AAEAAAAAAAAAAQAAAIgBQADVAgAA2AIAAAEAAAAAAAAAAAAAAIkBQQDeAgAA4QIAAAEA
-AAAAAAAAAAAAAIoBSADoAgAA6wIAAAEAAAAAAAAAAAAAAIsBQwDyAgAA9QIAAAEAAAAA
-AAAAAAAAAIwBSgD8AgAA/wIAAAEAAAAAAAAAAAAAAI0BSwAGAwAACQMAAAEAAAAAAAAA
-AAAAAJABAwAQAwAAEwMAAAEAAAAAAAAAAQAAAI4BAwAaAwAAHQMAAAEAAAAAAAAAAQAA
-AJgBRQAoAwAAKwMAAAEAAAABAAAAAQAAAJoBRQA3AwAAOgMAAAEAAAAAAAAAAAAAAJsB
-SQBJAwAATAMAAAEAAAAAAAAAAAAAAJ4BAwBcAwAAXwMAAAEAAAAAAAAAAQAAAKwBAwBm
-AwAAaQMAAAEAAAAAAAAAAQAAAKYBAwBwAwAAcwMAAAEAAAAAAAAAAQAAALYBNQB7AwAA
-fgMAAAEAAAAAAAAAAQAAALgBNwCMAwAAjwMAAAEAAAAAAAAAAQAAALoBNwCZAwAAnAMA
-AAEAAAAAAAAAAQAAAL4BIQCnAwAAqgMAAAEAAAABAAAAAQAAACcDAwCwAwAAswMAAAEA
-AAAAAAAAAQAAAMoBAwC9AwAAwAMAAAAAAAAAAAAAAAAAAOQBEADJAwAAzAMAAAEAAAAB
-AAAAAQAAAOwBMADTAwAA1gMAAAEAAAABAAAAAQAAAPgBAwDdAwAA4AMAAAEAAAAAAAAA
-AQAAABACNwDoAwAA6wMAAAEAAAAAAAAAAQAAACoCIgD3AwAA+gMAAAEAAAAAAAAAAQAA
-AEICNwAGBAAACQQAAAEAAAAAAAAAAQAAAAACAwAQBAAAEwQAAAEAAAAAAAAAAQAAAEoC
-AwAYBAAAGwQAAAEAAAAAAAAAAQAAAE8CEAAkBAAAJwQAAAEAAAABAAAAAQAAAFwCAwAu
-BAAAMQQAAAEAAAAAAAAAAQAAAGACEQA2BAAAOQQAAAEAAAABAAAAAQAAAGgCNwBFBAAA
-SAQAAAEAAAAAAAAAAQAAAGwCNwBPBAAAUgQAAAEAAAAAAAAAAQAAAHYCEABbBAAAXgQA
-AAEAAAABAAAAAQAAAHoCAwBqBAAAbQQAAAEAAAAAAAAAAQAAAIICAwBzBAAAdgQAAAEA
-AAAAAAAAAQAAAIMCAwB+BAAAgQQAAAEAAAAAAAAAAQAAAKoCAwCIBAAAiwQAAAEAAAAA
-AAAAAQAAAL4CQgCYBAAAmwQAAAEAAAABAAAAAQAAAL8CNgClBAAAqAQAAAEAAAAAAAAA
-AQAAAMECNwC4BAAAuwQAAAEAAAAAAAAAAQAAAMYCNwDEBAAAxwQAAAEAAAABAAAAAQAA
-ANQCNwDUBAAA1wQAAAEAAAAAAAAAAQAAAPACNwDdBAAA4AQAAAEAAAAAAAAAAQAAAPQC
-NQDnBAAA6gQAAAEAAAAAAAAAAQAAAPgCAwD2BAAA+QQAAAEAAAAAAAAAAQAAAJ4ARwD/
-BAAAAgUAAAEAAAABAAAAAQAAAPwCRQAJBQAADAUAAAEAAAABAAAAAQAAAAwDMAAVBQAA
-GAUAAAEAAAAAAAAAAQAAABQDNgAqBQAALQUAAAEAAAAAAAAAAQAAABgDNgA1BQAAOAUA
-AAEAAAAAAAAAAQAAACQDAwA/BQAAQgUAAAEAAAAAAAAAAQAAABADAwBKBQAATQUAAAEA
-AAAAAAAAAQAAADoDNwBiBQAAZQUAAAEAAAAAAAAAAQAAAEgDEAB0BQAAdwUAAAEAAAAB
-AAAAAQAAAFoDRQCFBQAAiAUAAAEAAAAAAAAAAQAAAFwDOgCQBQAAkwUAAAEAAAABAAAA
-AQAAAF4DVgCeBQAAoQUAAAEAAAAAAAAAAQAAAMACAwCrBQAArgUAAAEAAAAAAAAAAQAA
-AHcDAwC3BQAAugUAAAEAAAAAAAAAAQAAAMwCAwDABQAAwwUAAAEAAAAAAAAAAQAAAAAA
-AAAAAAAAAAD/Af8BAwCYAZkBBwCYATALCACYATAMIAAgARAKIQAgAZkBIgAgATAMOgBg
-ARAKNwAwAZkBNQAwApkBNgAwA5kBMAAwBJkBOQAwBZkBNAAwBpkBMgAwA5kBMQAwA5kB
-EQAQAZkBEAAQARAKUgBQAZkBRQBQApkBRwBQA5kBQgBQBJkBWABQBZkBVQBQATAMVgBQ
-AjAMSQBQAlANQABAAUAKQQBAAUAKQwBAAkAKSABAARAKSgBAAUAKSwBAAUAKYABgAGAA
-YQBhAGEAYgBiAGIAYwBjAGMAZABkAGQAZQBlAGUAZgBmAGYAZwBnAGcAaABoAGgAaQBp
-AGkAagBqAGoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wECABAAABREFgUG
-cRbBFgUGAAAAAAAAAAAAAAAAUAEBABAAcRbBFh4AAAAAAAAAAAAAAAAAAAAAAAAAUAIB
-ABAAcRatFhcAAAAAAAAAAAAAAAAAAAAAAAAAUAMCABAAoBTIFBEGcRatFh4GAAAAAAAA
-AAAAAAAAUAQCABAAPBR4FBQAcRbBFhQAAAAAAAAAAAAAAAAAUAUCABAAcRbBFhEAAAAA
-AAAAAAAAAAAAAAAAAAAAMAECADAAPBTIFBQAfBVEFhsAAAAAAAAAAAAAAAAAMAIBADAA
-PBR4FBIAAAAAAAAAAAAAAAAAAAAAAAAAMAMBADAAPBTIFBQAAAAAAAAAAAAAAAAAAAAA
-AAAAMAQBADAAPBTIFBIAAAAAAAAAAAAAAAAAAAAAAAAAMAUBADAAPBR4FA8AAAAAAAAA
-AAAAAAAAAAAAAAAAMAYCADAAPBSgFBcAfBVEFh4AAAAAAAAAAAAAAAAAEAEDABAAjBTI
-FBcGPBR4FBEGcRbBFh4GAAAAAAAAIAECABAAPBTIFBcGcRbBFh4GAAAAAAAAAAAAAAAA
-YAEEABAAPBR4FBEGjBTIFBQGfBVEFhQGcRbBFh4GQAEBAEAAMhRuFBcAAAAAAAAAAAAA
-AAAAAAAAAAAAQAIDAEAAMhRuFBcAsBPYExcAOBN0ExcAAAAAAAAAAAD/AQIAEwAKFCYW
-BQYeFBIWBQYAAAAAAAAAAAAAAAAQAQMAEwCCFKoUFwZaFFoUEQaAFqgWHgYAAAAAAABg
-AQMAEwCCFKoUFwZaFFoUEQaAFqgWHgYAAAAAAABgAQQAEwB4FKAUFwZQFFAUEQaFFq0W
-HgakFRwWHgYQCgEAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wED
-AP8ACAlECQUGhQmFCQUG0AmsCgUGAAAAAAAAEAoBABQAhQmFCRQGAAAAAAAAAAAAAAAA
-AAAAAAAAMAoBADQAhQmFCRQGAAAAAAAAAAAAAAAAAAAAAAAAMAsBADQAhQmFCRQGAAAA
-AAAAAAAAAAAAAAAAAAAAMAwBADQAhQmFCRQGAAAAAAAAAAAAAAAAAAAAAAAAQAoBAEQA
-hQmFCRQGAAAAAAAAAAAAAAAAAAAAAAAAmQEBADQAhQmFCRQGAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAD/AQQA/wAICUQJBQZsCagJBQa0CbQJBQbQCawKBQZQDQIA
-/wBsCagJFAAICUQJFAAAAAAAAAAAAAAAAAAwCgEA/wCZCagJFAAAAAAAAAAAAAAAAAAA
-AAAAAAAwCwEAMQCACYoJFAAAAAAAAAAAAAAAAAAAAAAAAAAwDAEAMQBsCagJHgAAAAAA
-AAAAAAAAAAAAAAAAAAAQCgEAEQBsCZ4JGwYAAAAAAAAAAAAAAAAAAAAAAABACgIAQQBs
-CagJFAC0CbQJFAAAAAAAAAAAAAAAAACZAQEAMQBsCagJFAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABg
-AAAAAQAAAAAAAAAKAAAAOAEAAEABAABIAQAAaAEAAHABAAB4AQAAgAEAAIgBAACoAQAA
-sAEAAGYAAAABAAAAAAAAAAkAAAA4AQAAQAEAAFABAABoAQAAcAEAAHgBAACAAQAAkAEA
-ALABAAAAAAAAZwAAAAEAAAAAAAAACQAAADgBAABAAQAASAEAAGgBAABwAQAAeAEAAIAB
-AACIAQAAsAEAAAAAAABoAAAAAQAAAAAAAAAJAAAAOAEAAEABAABIAQAAaAEAAHABAAB4
-AQAAgAEAAIgBAACwAQAAAAAAAGEAAAAAAAAAAAAAAAgAAAA4AQAAQAEAAEgBAABoAQAA
-gAEAAIgBAACoAQAAsAEAAAAAAAAAAAAAYgAAAAIAAAAsAQAACgAAADgBAABAAQAASAEA
-AGgBAABwAQAAeAEAAIABAACIAQAAqAEAALABAABjAAAAAQAAAAAAAAAIAAAAOAEAAEAB
-AABIAQAAaAEAAHABAAB4AQAAiAEAALABAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAcAAAA4
-AQAAWAEAAGgBAABwAQAAeAEAAJgBAACwAQAAAAAAAAAAAAAAAAAAZQAAAAAAAAAAAAAA
-BQAAADgBAABIAQAAaAEAAIgBAACwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABpAAAAAAAA
-AAAAAAAIAAAAOAEAAFgBAABoAQAAcAEAAHgBAACAAQAAmAEAALABAAAAAAAAAAAAAGoA
-AAAAAAAAAAAAAAYAAAA4AQAASAEAAGgBAACAAQAAiAEAALABAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAEAAAAAAAAACQAAADgBAABAAQAA
-UAEAAGgBAABwAQAAeAEAAIABAACQAQAAsAEAAAAAAABmAAAAAQAAAAAAAAAJAAAAOAEA
-AEABAABQAQAAaAEAAHABAAB4AQAAgAEAAJABAACwAQAAAAAAAGcAAAABAAAAAAAAAAkA
-AAA4AQAAQAEAAEgBAABoAQAAcAEAAHgBAACAAQAAkAEAALABAAAAAAAAaAAAAAEAAAAA
-AAAACQAAADgBAABAAQAASAEAAGgBAABwAQAAeAEAAIABAACQAQAAsAEAAAAAAABhAAAA
-AAAAAAAAAAAHAAAAOAEAAEABAABQAQAAaAEAAIABAACQAQAAsAEAAAAAAAAAAAAAAAAA
-AGIAAAACAAAALAEAAAkAAAA4AQAAQAEAAFABAABoAQAAcAEAAHgBAACAAQAAkAEAALAB
-AAAAAAAAYwAAAAEAAAAAAAAACAAAADgBAABAAQAAUAEAAGgBAABwAQAAeAEAAJABAACw
-AQAAAAAAAAAAAABkAAAAAAAAAAAAAAAHAAAAOAEAAGABAABoAQAAcAEAAHgBAACgAQAA
-sAEAAAAAAAAAAAAAAAAAAGUAAAAAAAAAAAAAAAUAAAA4AQAAYAEAAGgBAACgAQAAsAEA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAaQAAAAAAAAAAAAAACAAAADgBAABgAQAAaAEAAHAB
-AAB4AQAAgAEAAKABAACwAQAAAAAAAAAAAABqAAAAAAAAAAAAAAAGAAAAOAEAAGABAABo
-AQAAgAEAAKABAACwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAEABiAFAAQAAuAEAABABSANQAQAAwgEAADABEAJAAQAAzgEAAAIAUAEBAEABBACg
-AAgAwAAgANAAuDwAAJg8AACqPAAAuDwAAJ48AAC4PAAAuDwAALg8AACkPAAAuDwAALg8
-AAC4PAAAuDwAALg8AAC4PAAAuDwAALg8AAC4PAAAuDwAALg8AAC4PAAAuDwAALg8AAC4
-PAAAuDwAALg8AAC4PAAAuDwAALg8AAC4PAAAuDwAALg8AACwPAAAij0AAJE9AAC8PQAA
-mD0AALw9AAC8PQAAvD0AALw9AACfPQAAvD0AAKY9AACtPQAAjBSgFLQUyBQAAHwVkBWk
-FbgVzBXgFfQVCBYcFjAWRBYAAAAAQAECAMwWAADWFgAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAYAE6AEABAADwFgAAMAEAAEABAAAAAAAAMAIAAEABAAAA
-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
+AADpfwEAAI12AItVFIPg74mCBKIAAOlrAQAAjXYAZosOuwUAAAC6AAAAAInIZvfzZoP6
+AnVMZoH5OxV3RYPpAoPsCGoID7fJjQyJjYwJgET//7gfhetR9+mJ0MH4A8H5HynIQFDo
+/P///4nDg8QIagJqAOj8////iceDxBDpBAEAAGaLBrkUAAAAugAAAABm9/FmhdJ1R2aB
+Pv8TdkCD7AhqCA+3DoHpwBIAALhnZmZm9+mJ0MH4A8H5HynIweACUOj8////icODxAhq
+AmoD6Pz///+Jx4PEEOmoAAAAZosGuQoAAAC6AAAAAGb38WaF0nU/g+wIaggPtw6B6cAS
+AAC4Z2ZmZvfpidDB+ALB+R8pyNHgUOj8////icODxAhqAmoC6Pz///+Jx4PEEOtXjXYA
+ZosGuQUAAAC6AAAAAGb38bgAAAAAZoXSdX6D7AhqCA+3DoHpwBIAALhnZmZm9+mJ0NH4
+wfkfKchQ6Pz///+Jw4PECGoCagHo/P///4nHg8QQjXYAidnB4QSNBL0AAAAACcGLRCQI
+0eAJwYHJARAAAItVFA+2wYmCnJgAAMHpCItVFInIg+B/iYLYmAAAibXMEAAAuAEAAACD
+xAxbXl9dw1VXVlOD7AyLbCQgi0QkKGaJRCQKiWwkBL8AAAAAi7X4KQAAi0QkJA+3QAIl
+8AEAAD3AAAAAdDo9wAAAAH8JPaAAAAB0C+tLPdAAAAB0I+tCi0QkBGaLgPQRAABmiUQk
+AotEJARmi4D2EQAAZokEJOsri0QkBGaLgPgRAABmiUQkAotEJARmi4D6EQAAZokEJOsK
+uAAAAADp4QEAALoAAAAAuaR5AACLBNGJBJZCdPe6AAAAAA+3TCQKu6h5AACNBFKNBEGL
+BIOJRJYEQnTwugAAAAAPt0wkCrvAeQAAjQRSjQRBiwSDiUSWCEJ08LoAAAAAD7dMJAq7
+4HkAAI0EUo0EQYsEg4lElgxCg/oadu2D7AxqAGioAAAAagMPt0QkGlCNXgxT6Pz///+D
+xBRqAGilAAAAagMPt0QkGFBT6Pz///+6AAAAAIPEIA+3TCQKu4B8AACNBFKNBEGLBIOJ
+RJZ4QoP6AnbtuwAAAACLTRSLFN2geQAAiwSeiQQRR/fHPwAAAHUNg+wMagHo/P///4PE
+EEN017sAAAAAjQRbi00UixTFqHkAAItEngSJBBFH98c/AAAAdQ2D7AxqAej8////g8QQ
+Q3TTuwAAAACNBFuLTRSLFMXAeQAAi0SeCIkEEUf3xz8AAAB1DYPsDGoB6Pz///+DxBBD
+dNO7AAAAAIn2jQRbi00UixTF4HkAAItEngyJBBFH98c/AAAAdQ+D7AxqAej8////g8QQ
+ifZDg/sads67AAAAAI0EW4tNFIsUxYB8AACLRJ54iQQRR/fHPwAAAHUQg+wMagHo/P//
+/4PEEI12AEOD+wJ2zYtEJATHgNApAAAAAAAAuAEAAACDxAxbXl9dw412AItUJAiLRCQE
+i4D4KQAAg/oHdxn/JJXIfAAAifaDwATDg8AIw4PADMODwHjDuAAAAADDifZVV1ZTi3wk
+GItsJCSLTCQci3QkFA+32Y0cXw+/1g+3BznCfRTHRQAAAAAAi0QkIMcAAAAAAOtlkA+/
+1g+3Q/45wnw1D7fBSIlFAItUJCCJAutKicgp+NH4iUUAi1QkIIkC6zmJyCn40fiLVCQg
+iQJAiUUA6yeNdgCJ+Tnfcx4Pv9aNdgAPtwE50HTHD7dBAjnCfNCDwQI52XLqifZbXl9d
+w412AFVXVlOD7BiLRCQwZolEJA6LTCQ0ZolMJAyLXCRAZolcJAqJxdHlZsdEJAgAALgA
+AAAAZoP7AQ+GBgEAAItEJAxmK0QkDmY7RCQID4LtAAAAD7dEJAqJRCQEjXYAjUQkFFCN
+RCQUUA+3RCQSUP90JEQPv8VQ6OP+//+DxBSDfCQUAHUIx0QkFAEAAACLVCQEjUL/O0Qk
+EHUIjUL+iUQkEJCLTCQQi1wkOGaLFEuLRCQUZjsUQ3UKi0QkPGaLDEjrSw+/zYtcJBCL
+RCQ4D780WInPKfeLVCQUi0QkPA+3BFAPr/iLRCQ4D78UUInQKciJBCSLRCQ8D7cMWIsE
+JA+vwY0EBynyidGZ9/mJwQ+3RCQIi1QkLMHiBgHCi1wkRGaJDFNm/0QkCIPFAotEJAxm
+K0QkDmY7RCQID4Mf////uAEAAACDxBhbXl9dw4n2V1ZTi1wkEIt0JBSLTCQYi3wkHItU
+JCCJ+GY58XQkD7fbD7f2idgp8A+/0g+vwg+3yYnKKdoPv98Pr9MB0Cnxmff5mFteX8OQ
+VVdWU4HsXAYAAIuEJHQGAABmiUQkNouUJHwGAABmiVQkNMdEJCgAAAAAjUQkTFCNRCRM
+UIuMJIAGAAAPt0EUUFEPv0QkRlDofP3//8dEJEQAAAAAg8QUkLgDAAAAK0QkMIlEJCyL
+VCRIjQRAjRzFAAAAAI0Eko0EgI0EQo0EQ4u0JHgGAACNFDBmi3ogZoX/D4T/AQAAZotC
+HotMJCiLtCSIBgAAZokETonN0eWNdCRAZotKLGaJTDUAi1QkTI0Eko0EgI0EQo0EQwOE
+JHgGAABmO0gsfglmi0AsZolENQCLbCQo0eVmi0QsQInCZsHqDwHQZtH4ZolELECNRCQ4
+iUQkIItUJEgPt/eLXCQsjQxbweECjQSSjQSAjQRCjQQBAfCLlCR4BgAAZotcQiqLRCQg
+ZolcBQCLVCRMjQSSjQSAjQRCAcGNBDGLlCR4BgAAZjtcQip+DmaLREIqi0wkIGaJRA0A
+i1wkKNHjZotEHDiJwmbB6g8B0GbR+GaJRBw4jYQkUAQAAFAPt/9Xi1QkUI0Eko0EgI0E
+QotUJDSNNFLB5gONBEYDhCSABgAAjVAiUoPALFAPv0QcSFAPv0QcVFD/dCRA6KL8//+N
+hCRsAgAAUFeLVCRwjQSSjQSAjQRCjQRGA4QknAYAAI1QIlKDwCxQD79EHGRQD79EHHBQ
+/3QkXOhl/P//vwAAAACDxDhmi0QcOGY7RBxAdHYPt0wkNolMJByLbCQo0eWJ9otcJCjB
+4wYB+w+/jFxQAgAAD7+0XFAEAACLVCRMi4QkeAYAAA+3FFCJVCQIi0QkSIuUJHgGAAAP
+twRCUVb/dCQQUP90JCzoQf3//4PEFGaJRFxQR2aLRCw4ZitELEAPt8A5+Heb/0QkKP9E
+JDCDfCQwAw+GtP3//4tUJECLhCSABgAAZokQvwAAAADHRCQwAAAAADt8JCgPg80BAACN
+dgCLRCQoSDtEJDB1GYtMJDBmi0RMOIPABIucJIQGAABmiQRL6yqLVCQw0eIPv0QUOA+/
+VBRCAdCJwsHqHwHQ0fiLdCQwi5QkhAYAAGaJBHK5AAAAAIN8JDAAdB6LXCQwi7QkhAYA
+AA+3TF7+D79EXEApwQ+3RCQ0KcGLVCQwweIHZotEFFKJw2YrXBRQidhmhdt1BbgBAAAA
+icOFyXkzi0QkMMHgBw+302aLbARQidAPr8GJ+0e+AAAAAGYB6HgCicaLhCSMBgAAZok0
+WEF43on2i0QkMNHgD79UBDiJVCQMD79UBEApVCQMi1wkMIu0JIQGAAAPtyxeD7dEJDQB
+xSnVi0QkDIlEJCQ56HYEiWwkJA+/RCQkicM5yH4ii1QkMMHiBon2jQQKQWaLRERQi7Qk
+jAYAAGaJBH5HOct/54tEJDDB4AYDRCQMZotURE6J02YrXERMidhmhdt1BbgBAAAAicM7
+bCQkdlAPv8U5yH5Ji0QkMMHgBgNEJAxmi0RETmaJRCQaicgrRCQkD7fTD6/CZgNEJBqJ
+/keJwmaD+H9+Bbp/AAAAi4QkjAYAAGaJFHBBD7/FOch/zP9EJDCLVCQoOVQkMA+CNv7/
+/4N8JDADdyGNdgCLTCQwi5wkhAYAAGaLREv+ZokES0GJTCQwg/kDduKD/393F5CLtCSM
+BgAAZotEfv5miQR+R4P/f3bqgcRcBgAAW15fXcONdgBVV1ZTg+wsi3wkQItMJEyJ/Yu3
+wFAAAA+3QQIl0AAAAD3AAAAAdAc90AAAAHUIjZ2MIgAA6x8Pt0ECJaAAAAC6AAAAAD2g
+AAAAD4UHAQAAjZ94HgAAi0cUi4BsogAAg+APZokEJFb/dCRUjUQkIFCNRCQiUA+3RCQQ
+UFMPtwFQV+iT+v//i08Ui5FYogAAgOY/D7dDHEjB4A4lAMAAAAnCiZFYogAAg8QgZoN8
+JBYAdBBmi0QkFvfYZomFACoAAOsJZseFACoAAAAAu4CiAAC5AAAAAA+2FM4PtkTOAsHg
+CAnCD7ZEzgTB4BAJwg+2RM4GweAYCcKLRxSJFBiDwwRBg/kfds+LXxSLFCSD4g8Pt0Qk
+GMHgBCXwAwAACcKNTCQYD7dBAsHgCiUA/AAACcIPt0EEweAQJQAAPwAJwg+3QQbB4BYl
+AADADwnCiZNsogAAugEAAACJ0IPELFteX13DU4PsCItcJBCDu8BQAAAAdBuD7Az/s8BQ
+AADo/P///8eDwFAAAAAAAACDxBCDu/gpAAAAdBuD7Az/s/gpAADo/P///8eD+CkAAAAA
+AACDxBCDxAhbw412AFOLXCQMugAAAAC5AwAAAJCJyCnQjQRAjQTDZoN4CAB0Bw+/QBTr
+DJBCg/oDduK4AAAAAFvDjXYAU4tcJAy6AAAAAIn2jQxSZotEywhmhcB0Dw+3wI0EiA+/
+REMS6w2J9kKD+gN23rgAAAAAW8ONdgBVV1ZTg+wIi2wkIItUJByLRCQkZscAAAAPt0UC
+JdAAAAA9wAAAAHQHPdAAAAB1CY2CjCIAAOshkA+3RQIloAAAAL4AAAAAPaAAAAAPhQsC
+AACNgngeAACQZotIFI14GL4AAAAAZoXJD4TvAQAAZotdAGY7H3IaD7fRjQSSjQSAjQRC
+ZjtcR5p2dWY7H3MxifZX/3QkIOgu////i1QkLGaJAlf/dCQo6OX+//+LVCQ4ZokCvgEA
+AACDxBDpnQEAAA+3wY0cgI0cm40cWI1cX5pT/3QkIOjv/v//i1QkLGaJAlP/dCQo6Kb+
+//+LVCQ4ZokCvgEAAACDxBDpXgEAALsAAAAAugAAAAAPt8GJxoP4AH4mZotFAInBZjsH
+dhuNdgCJ0EKJwznWfg+NBJKNBICNBEJmOwxHd+iNBJKNBICNBEKNDAAPtwQ5iUQkBI0E
+m40EgI0EQ40cAA+3BDspRCQEg3wkBAAPjqgAAACNNDlW/3QkIOhQ/v//mIlEJAgB+1P/
+dCQo6D/+//+YKUQkEA+3VQAPtwMpwonXD698JBBT/3QkMOgg/v//mA+vRCQcjQQHmfd8
+JBxmmItUJDxmiQJW/3QkOOjH/f//D7/wg8QgU/90JCDot/3//5gpxg+3VQAPtwMpwg+v
+8lP/dCQo6J79//+YD69EJBSNBAaZ93wkFGaYi1QkOGaJAr4BAAAAg8QQ60mNBJKNBICN
+BEKNFABmi0UAvgAAAABmOwQ6dS6NHDpT/3QkIOiN/f//i1QkLGaJAlP/dCQo6ET9//+L
+VCQ4ZokCZr4BAIPEEIn2ifCDxAhbXl9dw4n2VVdWU4PsCItsJByLdCQgi3wkJMcEJAEA
+AAC7AAAAADn7cz2QjUQkBlCNRCQIUI0E3lBV6GD9//+DxBCFwHQVi0QkBIhE3gZmi0Qk
+BohE3gfrCYn2xwQkAAAAAEM5+3LEiwQkg8QIW15fXcOQVlOD7BCLdCQgi1wkHGiEAAAA
+6Pz///+Jg/gpAACDxBCFwHUMxwYCAAAA6YUAAACQx4PEUAAAAAEAAIPsDGgAAQAA6Pz/
+//+Jg8BQAACDxBCFwHUIxwYCAAAA61jHgzQnAADgngEAx4M4JwAAIJABAMeDPCcAACyW
+AQDHg0AnAAD8kAEAx4NEJwAApJMBAMeDSCcAAICdAQDHg0wnAAAQogEAx4NQJwAAAAAA
+ALgBAAAAjXYAg8QEW17DkJBVV1ZTg+wMi3wkIItsJCSLdCQsuwAAAACNBFuLTxSLFMUA
+fQAAjURFAIsEhQB9AACJBBFG98Y/AAAAdRCD7AxqAej8////g8QQjXYAQ4P7HXbGuwAA
+AACQi08UixTd4H8AAIsE3eR/AACJBBFG98Y/AAAAdQ+D7AxqAej8////g8QQifZDg/t/
+ds67AAAAAJCNBFuLTxSLFIXggwAAA0QkKIsEheCDAACJBBFG98Y/AAAAdRCD7AxqAej8
+////g8QQjXYAQ4P7P3bGg8QMW15fXcOJ9lVXVlOD7AyLbCQgi3QkJMdEJAgAAAAAvwAA
+AABmgT6/Eg+HzQAAAA+3BolEJAQtkAgAALoFAAAAidOZ9/uF0nUji0QkBI2cAODu//+4
+Z2ZmZvfrwfoCidjB+B+J0ynD60WNdgAPtw6NgVD3//+6BQAAAInTmff7uAAAAACF0g+F
+HAIAAI2cCaDu//+4Z2ZmZvfrwfoCidjB+B+J0ynDx0QkCAEAAADB4wKB4/8AAACD7Ahq
+CFPo/P///4nDi1UUi4IEogAAg8QQZoE+tAl1EYPIEImCBKIAAOl/AQAAjXYAi1UUg+Dv
+iYIEogAA6WsBAACNdgBmiw67BQAAALoAAAAAichm9/Nmg/oCdUxmgfk7FXdFg+kCg+wI
+aggPt8mNDImNjAmARP//uB+F61H36YnQwfgDwfkfKchAUOj8////icODxAhqAmoA6Pz/
+//+Jx4PEEOkEAQAAZosGuRQAAAC6AAAAAGb38WaF0nVHZoE+/xN2QIPsCGoID7cOgenA
+EgAAuGdmZmb36YnQwfgDwfkfKcjB4AJQ6Pz///+Jw4PECGoCagHo/P///4nHg8QQ6agA
+AABmiwa5CgAAALoAAAAAZvfxZoXSdT+D7AhqCA+3DoHpwBIAALhnZmZm9+mJ0MH4AsH5
+HynI0eBQ6Pz///+Jw4PECGoCagHo/P///4nHg8QQ61eNdgBmiwa5BQAAALoAAAAAZvfx
+uAAAAABmhdJ1foPsCGoID7cOgenAEgAAuGdmZmb36YnQ0fjB+R8pyFDo/P///4nDg8QI
+agJqAej8////iceDxBCNdgCJ2cHhBI0EvQAAAAAJwYtEJAjR4AnBgckBEAAAi1UUD7bB
+iYKcmAAAwekIi1UUiciD4H+JgtiYAACJtcwQAAC4AQAAAIPEDFteX13DVVdWU4PsHIts
+JDCLRCQ4ZolEJBqJbCQUZsdEJBIAAGbHRCQQAABmx0QkDgAAZsdEJAwAAL8AAAAAi7X4
+KQAAi1QkNA+3QgIl8AEAAD3QAAAAD4QlAQAAPdAAAAB/Gz2gAAAAD4TxAAAAPcAAAAAP
+hAgBAADpJQEAAD1AAQAAdAs9UAEAAA+FEwEAAItUJDRmiwItoQ8AAGY96gR3JYtEJBRm
+i4DkEQAAZolEJBKLVCQUZouS5hEAAGaJVCQQ6eYAAACLVCQ0ZosCLYwUAABmPe8AdyWL
+RCQUZouA6BEAAGaJRCQSi1QkFGaLkuoRAABmiVQkEOmvAAAAi1QkNGaLAi18FQAAZj3g
+AHcii0QkFGaLgOwRAABmiUQkEotUJBRmi5LuEQAAZolUJBDre4tEJDRmgThcFnZwi1Qk
+FGaLkvARAABmiVQkEotEJBRmi4DyEQAAZolEJBDrTotUJBRmi5L0EQAAZolUJA6LRCQU
+ZouA9hEAAGaJRCQM6yyLVCQUZouS+BEAAGaJVCQOi0QkFGaLgPoRAABmiUQkDOsKuAAA
+AADpfQIAALoAAAAAueSGAACLBNGJBJZCdPe6AAAAAA+3TCQau+iGAACNBFKNBEGLBIOJ
+RJYEQnTwugAAAAAPt0wkGrsAhwAAjQRSjQRBiwSDiUSWCEJ08LoAAAAAD7dMJBq7IIcA
+AI0EUo0EQYsEg4lElgxCg/okdu2LVCQ0gHoCAA+JjQAAAIPsDGoAaPEAAABqAw+3RCQm
+UI1eDFPo/P///4PEFGoAaO4AAABqAw+3RCQkUFPo/P///4PEFGoCaCMBAABqAWoBU+j8
+////g8Qgg71oAgAACXQTg71oAgAACnVnZoO9bAIAAAN3XYPsDGoDaIMAAABqA2oDagbo
+/P///4PECFCNRgxQ6Pz///+DxCDrNoPsDGoAaPcAAABqAw+3RCQqUI1eDFPo/P///4PE
+FGoAaPQAAABqAw+3RCQoUFPo/P///4PEILoAAAAAD7dMJBq7oIoAAI0EUo0EQYsEg4mE
+lqAAAABCg/oCduq7AAAAAItNFIsU3eCGAACLBJ6JBBFH98c/AAAAdQ2D7AxqAej8////
+g8QQQ3TXuwAAAACNBFuLTRSLFMXohgAAi0SeBIkEEUf3xz8AAAB1DYPsDGoB6Pz///+D
+xBBDdNO7AAAAAI0EW4tNFIsUxQCHAACLRJ4IiQQRR/fHPwAAAHUNg+wMagHo/P///4PE
+EEN007sAAAAAjQRbi00UixTFIIcAAItEngyJBBFH98c/AAAAdQ+D7AxqAej8////g8QQ
+ifZDg/skds67AAAAAI0EW4tNFIsUxaCKAACLhJ6gAAAAiQQRR/fHPwAAAHUNg+wMagHo
+/P///4PEEEOD+wJ2zYtEJBTHgNApAAAAAAAAuAEAAACDxBxbXl9dw412AItUJAiLRCQE
+i4D4KQAAg/oHdx3/JJXoigAAifaDwATDg8AIw4PADMMFoAAAAMOJ9rgAAAAAw4n2VVdW
+U4t8JBiLbCQki0wkHIt0JBQPt9mNHF8Pv9YPtwc5wn0Ux0UAAAAAAItEJCDHAAAAAADr
+ZZAPv9YPt0P+OcJ8NQ+3wUiJRQCLVCQgiQLrSonIKfjR+IlFAItUJCCJAus5icgp+NH4
+i1QkIIkCQIlFAOsnjXYAifk533MeD7/WjXYAD7cBOdB0xw+3QQI5wnzQg8ECOdly6on2
+W15fXcONdgBVV1ZTg+wYi0QkMGaJRCQOi0wkNGaJTCQMi1wkQGaJXCQKicXR5WbHRCQI
+AAC4AAAAAGaD+wEPhgYBAACLRCQMZitEJA5mO0QkCA+C7QAAAA+3RCQKiUQkBI12AI1E
+JBRQjUQkFFAPt0QkElD/dCRED7/FUOjj/v//g8QUg3wkFAB1CMdEJBQBAAAAi1QkBI1C
+/ztEJBB1CI1C/olEJBCQi0wkEItcJDhmixRLi0QkFGY7FEN1CotEJDxmiwxI60sPv82L
+XCQQi0QkOA+/NFiJzyn3i1QkFItEJDwPtwRQD6/4i0QkOA+/FFCJ0CnIiQQki0QkPA+3
+DFiLBCQPr8GNBAcp8onRmff5icEPt0QkCItUJCzB4gYBwotcJERmiQxTZv9EJAiDxQKL
+RCQMZitEJA5mO0QkCA+DH////7gBAAAAg8QYW15fXcOJ9ldWU4tcJBCLdCQUi0wkGIt8
+JByLVCQgifhmOfF0JA+32w+39onYKfAPv9IPr8IPt8mJyinaD7/fD6/TAdAp8Zn3+Zhb
+Xl/DkFVXVlOB7FwGAACLhCR0BgAAZolEJDaLlCR8BgAAZolUJDTHRCQoAAAAAI1EJExQ
+jUQkTFCLjCSABgAAD7dBFFBRD79EJEZQ6Hz9///HRCREAAAAAIPEFJC4AwAAACtEJDCJ
+RCQsi1QkSI0EQI0cxQAAAACNBJKNBICNBEKNBEOLtCR4BgAAjRQwZot6IGaF/w+E/wEA
+AGaLQh6LTCQoi7QkiAYAAGaJBE6JzdHljXQkQGaLSixmiUw1AItUJEyNBJKNBICNBEKN
+BEMDhCR4BgAAZjtILH4JZotALGaJRDUAi2wkKNHlZotELECJwmbB6g8B0GbR+GaJRCxA
+jUQkOIlEJCCLVCRID7f3i1wkLI0MW8HhAo0Eko0EgI0EQo0EAQHwi5QkeAYAAGaLXEIq
+i0QkIGaJXAUAi1QkTI0Eko0EgI0EQgHBjQQxi5QkeAYAAGY7XEIqfg5mi0RCKotMJCBm
+iUQNAItcJCjR42aLRBw4icJmweoPAdBm0fhmiUQcOI2EJFAEAABQD7f/V4tUJFCNBJKN
+BICNBEKLVCQ0jTRSweYDjQRGA4QkgAYAAI1QIlKDwCxQD79EHEhQD79EHFRQ/3QkQOii
+/P//jYQkbAIAAFBXi1QkcI0Eko0EgI0EQo0ERgOEJJwGAACNUCJSg8AsUA+/RBxkUA+/
+RBxwUP90JFzoZfz//78AAAAAg8Q4ZotEHDhmO0QcQHR2D7dMJDaJTCQci2wkKNHlifaL
+XCQoweMGAfsPv4xcUAIAAA+/tFxQBAAAi1QkTIuEJHgGAAAPtxRQiVQkCItEJEiLlCR4
+BgAAD7cEQlFW/3QkEFD/dCQs6EH9//+DxBRmiURcUEdmi0QsOGYrRCxAD7fAOfh3m/9E
+JCj/RCQwg3wkMAMPhrT9//+LVCRAi4QkgAYAAGaJEL8AAAAAx0QkMAAAAAA7fCQoD4PN
+AQAAjXYAi0QkKEg7RCQwdRmLTCQwZotETDiDwASLnCSEBgAAZokES+sqi1QkMNHiD79E
+FDgPv1QUQgHQicLB6h8B0NH4i3QkMIuUJIQGAABmiQRyuQAAAACDfCQwAHQei1wkMIu0
+JIQGAAAPt0xe/g+/RFxAKcEPt0QkNCnBi1QkMMHiB2aLRBRSicNmK1wUUInYZoXbdQW4
+AQAAAInDhcl5M4tEJDDB4AcPt9Nmi2wEUInQD6/BiftHvgAAAABmAeh4AonGi4QkjAYA
+AGaJNFhBeN6J9otEJDDR4A+/VAQ4iVQkDA+/VARAKVQkDItcJDCLtCSEBgAAD7csXg+3
+RCQ0AcUp1YtEJAyJRCQkOeh2BIlsJCQPv0QkJInDOch+IotUJDDB4gaJ9o0ECkFmi0RE
+UIu0JIwGAABmiQR+RznLf+eLRCQwweAGA0QkDGaLVEROidNmK1xETInYZoXbdQW4AQAA
+AInDO2wkJHZQD7/FOch+SYtEJDDB4AYDRCQMZotERE5miUQkGonIK0QkJA+30w+vwmYD
+RCQaif5HicJmg/h/fgW6fwAAAIuEJIwGAABmiRRwQQ+/xTnIf8z/RCQwi1QkKDlUJDAP
+gjb+//+DfCQwA3chjXYAi0wkMIucJIQGAABmi0RL/maJBEtBiUwkMIP5A3big/9/dxeQ
+i7QkjAYAAGaLRH7+ZokEfkeD/3926oHEXAYAAFteX13DjXYAVVdWU4PsLIt8JECLVCRM
+if2Lt8BQAAAPt0ICJdAAAAA9wAAAAHQHPdAAAAB1CI2djCIAAOscD7dCAiWgAAAAjZ94
+HgAAPaAAAAB0Bo2fZBoAAItHFIuAbKIAAIPgD2aJBCRW/3QkVI1EJCBQjUQkIlAPt0Qk
+EFBTD7cCUFfolvr//4tPFIuRWKIAAIDmPw+3QxxIweAOJQDAAAAJwomRWKIAAIPEIGaD
+fCQWAHQQZotEJBb32GaJhQAqAADrCWbHhQAqAAAAALuAogAAuQAAAACNdgAPthTOD7ZE
+zgLB4AgJwg+2RM4EweAQCcIPtkTOBsHgGAnCi0cUiRQYg8MEQYP5H3bPi18UixQkg+IP
+D7dEJBjB4AQl8AMAAAnCjUwkGA+3QQLB4AolAPwAAAnCD7dBBMHgECUAAD8ACcIPt0EG
+weAWJQAAwA8JwomTbKIAALgBAAAAg8QsW15fXcOJ9lOD7AiLXCQQg7vAUAAAAHQbg+wM
+/7PAUAAA6Pz////Hg8BQAAAAAAAAg8QQg7v4KQAAAHQbg+wM/7P4KQAA6Pz////Hg/gp
+AAAAAAAAg8QQg8QIW8ONdgBTi1wkDLoAAAAAuQMAAACQicgp0I0EQI0Ew2aDeAgAdAcP
+v0AU6wyQQoP6A3biuAAAAABbw412AFOLXCQMugAAAACJ9o0MUmaLRMsIZoXAdA8Pt8CN
+BIgPv0RDEusNifZCg/oDdt64AAAAAFvDjXYAVVdWU4PsBItUJBiLRCQgZscAAACLTCQc
+D7dBAiXQAAAAPcAAAAB0Bz3QAAAAdQmNgowiAADrI5CLTCQcD7dBAiWgAAAAPaAAAAB1
+CI2CeB4AAOsGjYJkGgAAZotIFI14GLoAAAAAZoXJD4TtAQAAi0QkHGaLGGY7H3IZD7fR
+jQSSjQSAjQRCZjtcR5p2dmY7H3MxkFf/dCQc6Cr///+LTCQoZokBV/90JCTo4f7//4tU
+JDRmiQK6AQAAAIPEEOmZAQAAkA+3wY0cgI0cm40cWI1cX5pT/3QkHOjq/v//i0wkKGaJ
+AVP/dCQk6KH+//+LVCQ0ZokCugEAAACDxBDpWQEAAJC7AAAAALoAAAAAD7fBicaD+AB+
+KItMJBxmiwGJwWY7B3YaifaJ0EKJwznWfg+NBJKNBICNBEJmOwxHd+iNBJKNBICNBEKN
+DAAPtyw5jQSbjQSAjQRDjRwAD7cEOynFhe0PjqUAAAAB+YkMJFH/dCQc6E/+//8Pv/AB
++1P/dCQk6ED+//+YKcaLRCQsD7cQD7cDKcKJ1w+v/lP/dCQs6CL+//+YD6/FjQQHmff9
+ZpiLVCQ4ZokC/3QkGP90JDToyv3//w+/8IPEIFP/dCQc6Lr9//+YKcaLTCQkD7cRD7cD
+KcIPr/JT/3QkJOie/f//mA+vxY0EBpn3/WaYi1QkNGaJAroBAAAAg8QQ602NBJKNBICN
+BEKNDACLVCQcZosCugAAAABmOwQ5dS+NHDlT/3QkHOiO/f//i0wkKGaJAVP/dCQk6EX9
+//+LVCQ0ZokCugEAAACDxBCJ9onQg8QEW15fXcOJ9lVXVlOD7AiLbCQci3QkIIt8JCTH
+BCQBAAAAuwAAAAA5+3M9kI1EJAZQjUQkCFCNBN5QVehg/f//g8QQhcB0FYtEJASIRN4G
+ZotEJAaIRN4H6wmJ9scEJAAAAABDOftyxIsEJIPECFteX13DkFZTg+wQi3QkIItcJBxo
+rAAAAOj8////iYP4KQAAg8QQhcB1DMcGAgAAAOmFAAAAkMeDxFAAAAABAACD7AxoAAEA
+AOj8////iYPAUAAAg8QQhcB1CMcGAgAAAOtYx4M0JwAAnLMBAMeDOCcAADijAQDHgzwn
+AADkqgEAx4NAJwAADKQBAMeDRCcAALSmAQDHg0gnAAA8sgEAx4NMJwAAzLYBAMeDUCcA
+AAAAAAC4AQAAAI12AIPEBFtew5CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKFAWLFgo
+AACYCAAAqwgAAKsIAAC1CAAAkwoAAMkIAADTCAAA4wgAAJMKAADzCAAABwkAAF4JAAAf
+CQAANAkAAEkJAABwCQAAkwoAAJMKAADUCQAA6QkAAP8JAAAJCgAAvwgAABoKAAAtCgAA
+QAoAAJMKAACTCgAAjAoAAKD/o/+e/6D/o/+g/wAABQAKABQAHgAyAEYAVQBaAF8AZAAA
+AAoAFAAeACgAMgA8AEYAUABaAGQAwgAAAMQAAADFAAAA0AAAANoAAADkAAAAwgAAAMMA
+AADUAAAA8gAAAA0BAAAoAQAAzwAAAMoAAAACAFAhAQBAAQQAoAAIAMAAIADQAEAAUAEA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAGYGQAiBQYAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -1998,10 +2263,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAA4FUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAACoWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2030,36 +2296,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAABH
-AAAACJgAAAAAAAAMmAAApo6ECRCYAAAA4DI9FJgAAGsHAAAcmAAAAAAAACCYAAAAAgIC
-JJgAAA4OAAAomAAAAQICCiyYAAD8bwMAMJgAAAAAAAA0mAAADg4AADiYAAAHAAAAPJgA
-AAABAgBAmAAAAABjiUSYAACcFnITSJgAADO2GABMmAAAPGGEElCYAADguOgNVJgAAFlI
-BwBYmAAAur6AflyYAABeZjoxYJgAAAgdAABkmAAAAM4BAGiYAACQQZpAcJgAAA8AAAB0
-mAAAgAAAAHiYAAAEAAAAAJkAAAAAAAAEmQAAAAAAAAiZAAAAAAAADJkAAAAAgAAQmQAA
-AwAAAACbAAAAAAAABJsAACAAAAAImwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAAKAAA
-ABibAAAoAAAAHJsAAAQAAAAgmwAAJAAAACSbAAAUAAAAKJsAADQAAAAsmwAADAAAADCb
-AAAsAAAANJsAAAIAAAA4mwAAIgAAADybAAASAAAAQJsAADIAAABEmwAACgAAAEibAAAq
-AAAATJsAAAEAAABQmwAAIQAAAFSbAAARAAAAWJsAADEAAABcmwAACQAAAGCbAAApAAAA
-ZJsAAAUAAABomwAAJQAAAGybAAAVAAAAcJsAADUAAAB0mwAADQAAAHibAAAtAAAAfJsA
-AAMAAACAmwAAIwAAAISbAAATAAAAiJsAADMAAACMmwAACwAAAJCbAAArAAAAlJsAAAcA
-AACYmwAAJwAAAJybAAAXAAAAoJsAADcAAACkmwAADwAAAKibAAAvAAAArJsAAC8AAACw
-mwAALwAAALSbAAAvAAAAuJsAAC8AAAC8mwAALwAAAMCbAAAvAAAAxJsAAC8AAADImwAA
-LwAAAMybAAAvAAAA0JsAAC8AAADUmwAALwAAANibAAAvAAAA3JsAAC8AAADgmwAALwAA
-AOSbAAAvAAAA6JsAAC8AAADsmwAALwAAAPCbAAAvAAAA9JsAAC8AAAD4mwAALwAAAPyb
-AAAvAAAAAJoAAB0AAAAEmgAAXQAAAAiaAACdAAAADJoAAN0AAAAQmgAAHQEAABSaAAAh
-AAAAGJoAAGEAAAAcmgAAoQAAACCaAADhAAAAJJoAADEAAAAomgAAcQAAACyaAACxAAAA
-MJoAABwAAAA0mgAAXAAAADiaAAApAAAAPJoAAGkAAABAmgAAqQAAAESaAAAgAAAASJoA
-ABkAAABMmgAAWQAAAFCaAACZAAAAVJoAADAAAABYmgAABQAAAFyaAAAlAAAAYJoAAGUA
-AABkmgAApQAAAGiaAAAoAAAAbJoAAGgAAABwmgAAHwAAAHSaAAAeAAAAeJoAABgAAAB8
-mgAAWAAAAICaAACYAAAAhJoAAAMAAACImgAABAAAAIyaAABEAAAAkJoAAIQAAACUmgAA
-EwAAAJiaAAASAAAAnJoAAFIAAACgmgAAkgAAAKSaAADSAAAAqJoAACsAAACsmgAAKgAA
-ALCaAABqAAAAtJoAAKoAAAC4mgAAGwAAALyaAAAaAAAAwJoAAFoAAADEmgAAmgAAAMia
-AADaAAAAzJoAAAYAAADQmgAABgAAANSaAAAGAAAA2JoAAAYAAADcmgAABgAAAOCaAAAG
-AAAA5JoAAAYAAADomgAABgAAAOyaAAAGAAAA8JoAAAYAAAD0mgAABgAAAPiaAAAGAAAA
-/JoAAAYAAADUmAAAIAAAAMyYAAAEAAAAyJgAAAYBBgCcmAAAbQAAAMCYAAAAAAAA0JgA
-ABQAAAAJCQAAAAAAAgIGBgYGBgYCAgAAAAMABgAJADwAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAADwAAAAzAAAAAAAAAAAAAAAAAAAAAriAAAAIAAACgIAAAEY
-AAABAAAAQBgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQRXGQApEQQAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2067,7 +2303,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAANyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2099,88 +2334,43 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCY8J
-tAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAEAAAABAAAAAAAAG
-AAAABgAAAAYAMAAAABUAAAAVAAAAHQAAABUAAABAEAAAD/wvAA/8LwAf/C8AD/wvAEQQ
-AAAP/C8AD/wvAB/8LwAP/C8ASBAAAA/8LwAP/C8AH/wvAA/8LwBMEAAAD/wvAA/8LwAf
-/C8AD/wvAFAQAAAP/C8AD/wvAB/8LwAP/C8AVBAAAA/8LwAP/C8AH/wvAA/8LwBYEAAA
-D/wvAA/8LwAf/C8AD/wvAFwQAAAP/C8AD/wvAB/8LwAP/C8AYBAAAA/8LwAP/C8AH/wv
-AA/8LwBkEAAAD/wvAA/8LwAf/C8AD/wvAHAQAABoAQAA4AEAALgBAABoAQAAMBAAADAC
-AADgAQAAsAAAADACAACwEAAAmA0AAIARAABIHwAAmA0AAPAQAADgoAAAaEABAIBYAADg
-oAAAFIAAAAAEAAQACAAIADAAIAAEAAQcgAAAp4+NDs+PjQ6Vj2ABp4+NDgSYAAAAAAAA
-AwAAAAAAAAAAAAAAIJgAAAACAgIAAgICAAIBAgACAgIkmAAADg4AAA4OAAAHBwAADg4A
-ACiYAAABAAIKAQACCgAAAQUBAAIKNJgAAA4OAAAODgAADg4AAA4OAAA4mAAABwAAAAcA
-AAALAAAACwAAAESYAACcFnITpRZyE6gWchOcFnITSJgAAGe6GABnuhgAaboYAGm6GABQ
-mAAA4LQoDOC0KAzgtCgM4LQoDFiYAAAuDYB+Lg2Afi4NwH4uDYB+XJgAAF5dNzFeXTcx
-Xl06MV5dNzFgmAAAEL0AABC9AAA4vQAAEL0AAGSYAAAAzgEAAM4BAADOAQAAzgEAFJkA
-ABAnAAAQJwAAfBUAABAnAAAYmQAAkAEAAJABAACEAAAAkAEAAESZAAAgEOBvIBDgbyAJ
-4G8gEOBvgKEAAP8U/wX/FP8F/xT/Bf8Z/wXUmAAAEAAAABQAAAAQAAAAEAAAAAAAAAAM
-AAAAAAAAACgAAACcnISELAAAAHx8fHw0AAAABQAAAEAAAAAAAAAARAAAAAgAAABIAAAA
-CAAAAEwAAAAQAAAAUAAAAAAAAABUAAAAHwAAAAAIAAAAAAAABAgAAAAAAAAICAAAAAAA
-AAwIAAAAAAAAEAgAAAAAAAAUCAAAAAAAABgIAAAAAAAAHAgAAAAAAAAgCAAAAAAAACQI
-AAAAAAAAMBIAAAAAAAAEgAAAAAAAAAiAAAAAAAAADIAAAAAAAAAYgAAAAAAAACSAAAAA
-AAAAKIAAADAAAAAsgAAA//8HADCAAAD///8BNIAAADEAAAA4gAAAAAAAADyAAAAAAAAA
-QIAAAAAAAABEgAAAAgAAAEiAAAAAAAAAVIAAAAAAAABYgAAAAAAAAAiYAAAAAAAADJgA
-AJOQhC0QmAAAAOAyfRSYAABrDwAAHJgAAAAAAAAsmAAA/m8CADCYAAAAAAAAPJgAAAAB
-AgBAmAAAegFqIEyYAAA8YYQSVJgAAFkIAABomAAAkEGaQGyYAACBsAwFcJgAAA8AAAB0
-mAAAgAAAAHiYAAAMAAAAAJkAAAAAAAAEmQAAAAAAAAiZAAAAAAAADJkAAAAAgAAQmQAA
-AQAAAByZAAAqCQAAIJkAAAAAAAAkmQAABYoFACiZAAABAAAALJkAAAAAAAAwmQAAAAAA
-ADSZAAAAAAAAOJkAAAAAAAA8mQAAPwAAAECZAAAEAAAASJkAAAAAAABMmQAAAAAAAFCZ
-AAAAAAAAVJkAAEzxUF1YmQAAGAAAAFyZAACOaksAhKEAAP8F/waIoQAA/wf/B4yhAAD/
-CP8IkKEAAP8J/wmUoQAA/wr/CpihAAD/C/8LnKEAAP8M/wygoQAA/w3/DaShAAD/Dv8P
-qKEAAP8S/xKsoQAA/xP/FLChAAD/Ff8WtKEAAP8X/xm4oQAA/xr/G7yhAAD/Hf8ewKEA
-AP8g/yPEoQAA/yX/J8ihAAD/Kf8szKEAAP8v/zHQoQAA/zT/N9ShAAD/Ov862KEAAP86
-/zrcoQAA/zr/OuChAAD/Ov865KEAAP86/zrooQAA/zr/OuyhAAD/Ov868KEAAP86/zr0
-oQAA/zr/OvihAAD/Ov86/KEAAP86/zoAmwAAAAAAAASbAAAgAAAACJsAABAAAAAMmwAA
-MAAAABCbAAAIAAAAFJsAACgAAAAYmwAABAAAABybAAAkAAAAIJsAABQAAAAkmwAANAAA
-ACibAAAMAAAALJsAACwAAAAwmwAAAgAAADSbAAAiAAAAOJsAABIAAAA8mwAAMgAAAECb
-AAAKAAAARJsAACoAAABImwAABgAAAEybAAAmAAAAUJsAABYAAABUmwAANgAAAFibAAAO
-AAAAXJsAAC4AAABgmwAAAQAAAGSbAAAhAAAAaJsAABEAAABsmwAAMQAAAHCbAAAJAAAA
-dJsAACkAAAB4mwAABQAAAHybAAAlAAAAgJsAABUAAACEmwAANQAAAIibAAANAAAAjJsA
-AC0AAACQmwAAAwAAAJSbAAAjAAAAmJsAABMAAACcmwAAMwAAAKCbAAALAAAApJsAACsA
-AAComwAAKwAAAKybAAArAAAAsJsAACsAAAC0mwAAKwAAALibAAArAAAAvJsAACsAAADA
-mwAAKwAAAMSbAAArAAAAyJsAACsAAADMmwAAKwAAANCbAAArAAAA1JsAACsAAADYmwAA
-KwAAANybAAArAAAA4JsAACsAAADkmwAAKwAAAOibAAArAAAA7JsAACsAAADwmwAAKwAA
-APSbAAArAAAA+JsAAAIAAAD8mwAAFgAAANSYAAAgAAAA2JgAAGgQYAAAAAAAAAAAAACa
-AACpAQAAAAAAAASaAADpAQAAQAAAAAiaAAApAAAAgAAAAAyaAABpAAAAUAEAABCaAACZ
-AQAAkAEAABSaAADZAQAA0AEAABiaAAAZAAAAEAAAAByaAABZAAAARAAAACCaAACZAAAA
-hAAAACSaAAClAQAASAEAACiaAADlAQAAiAEAACyaAAAlAAAAyAEAADCaAADIAQAAFAAA
-ADSaAAAIAAAAQgAAADiaAABIAAAAggAAADyaAACIAAAAeAEAAECaAACYAQAAuAEAAESa
-AADYAQAA+AEAAEiaAAAYAAAAEgAAAEyaAABYAAAAUgAAAFCaAACYAAAAkgAAAFSaAACk
-AQAAfAEAAFiaAADkAQAAvAEAAFyaAAAkAAAA/AEAAGCaAABkAAAACgAAAGSaAACkAAAA
-SgAAAGiaAADkAAAAigAAAGyaAAAKAQAAWgEAAHCaAABKAQAAmgEAAHSaAACKAQAA2gEA
-AHiaAADKAQAADgAAAHyaAAAKAAAATgAAAICaAABKAAAAjgAAAISaAACKAAAAXgEAAIia
-AAC6AQAAngEAAIyaAAD6AQAA3gEAAJCaAAA6AAAACQAAAJSaAAB6AAAASQAAAJiaAACG
-AQAAiQAAAJyaAADGAQAAeQEAAKCaAAAGAAAAuQEAAKSaAABGAAAA+QEAAKiaAACGAAAA
-OQAAAKyaAADGAAAAeQAAALCaAADGAAAAuQAAALSaAADGAAAAvQEAALiaAADGAAAA/QEA
-ALyaAADGAAAAPQAAAMCaAADGAAAAfQAAAMSaAADGAAAAvQAAAMiaAADGAAAA/QAAAMya
-AADGAAAA/QAAANCaAADGAAAA/QAAANSaAADGAAAA/QAAANiaAADGAAAA/QAAANyaAADG
-AAAA/QAAAOCaAADGAAAA/QAAAOSaAADGAAAA/QAAAOiaAADGAAAA/QAAAOyaAADGAAAA
-/QAAAPCaAADGAAAA/QAAAPSaAADGAAAA/QAAAPiaAADGAAAA/QAAAPyaAADGAAAA/QAA
-AAEAAABGAAAAYAAAAAEAAABGAAAAYQAAAAEAAABGAAAAYgAAAAEAAABGAAAAYwAAAAEA
-AABGAAAAZAAAAAEAAABGAAAAZQAAAAEAAABGAAAAZgAAAAEAAABGAAAAZwAAAAEAAABG
-AAAAaAAAAAEAAABGAAAAaQAAAAEAAABGAAAAagAAAAEAAABGAAAAawAAAAEAAABGAAAA
-bAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAA
-AAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEA
-AABGAAAAdQAAAAEAAABGAAAAdgAAAAEAAABGAAAAdwAAAAEAAABGAAAAeAAAAAEAAABG
-AAAAeQAAAAEAAABGAAAAegAAAAEAAABGAAAAewAAAAEAAABGAAAAfAAAAAEAAABGAAAA
-fQAAAAEAAABGAAAAfgAAAAEAAABGAAAAfwAAAAEAAABGAAAAgAAAAAEAAABEAAAAfAAA
-AAEAAABGAAAAiAAAAAEAAABGAAAAjAAAAAEAAABGAAAAkAAAAAEAAABGAAAAlAAAAAEA
-AABGAAAAmAAAAAEAAABGAAAAnAAAAAEAAABGAAAAoAAAAAEAAABGAAAApAAAAAEAAABG
-AAAAqAAAAAEAAABGAAAArAAAAAEAAABGAAAAsAAAAAEAAABGAAAAtAAAAAACBwAAAAMA
-BgAJADwAAABjuwAAY7sAAI27AACNuwAAt7sAALe7AADhuwAA4bsAAAAAAAAAAAAACQAA
-AAQAAAAEAAEAAQABAAYAAABGRzgAAAAAAAAAAAAAAAAABAAAAAEAAQAEAAAARkc3AAAA
-AAAAAAAAAAAAAAMAAQABAAEAAwAAAEZHNgAAAAAAAAAAAAAAAAAEAAAAAAABAAEAAABG
-RzUAAAAAAAAAAAAAAAAABAABAAEAAAAAAAAARkc0AAAAAAAAAAAAAAAAAAQAAAABAAAA
-/v///0ZHMwAAAAAAAAAAAAAAAAADAAEAAQAAAP3///9GRzIAAAAAAAAAAAAAAAAABAAA
-AAAAAAD8////RkcxAAAAAAAAAAAAAAAAAAIAAQABAAAA+v///0ZHMAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBBUGQApEQQAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8A
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAABHAAAACJgAAAAAAAAMmAAApo6ECRCY
+AAAA4DI9FJgAAGsHAAAcmAAAAAAAACCYAAAAAgICJJgAAA4OAAAomAAAAQICCiyYAAD8
+bwMAMJgAAAAAAAA0mAAADg4AADiYAAAHAAAAPJgAAAABAgBAmAAAAABjiUSYAACcFnIT
+SJgAADO2GABMmAAAPGGEElCYAADguOgNVJgAAFlIBwBYmAAAur6AflyYAABeZjoxYJgA
+AAgdAABkmAAAAM4BAGiYAACQQZpAcJgAAA8AAAB0mAAAgAAAAHiYAAAEAAAAAJkAAAAA
+AAAEmQAAAAAAAAiZAAAAAAAADJkAAAAAgAAQmQAAAwAAAACbAAAAAAAABJsAACAAAAAI
+mwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAAKAAAABibAAAoAAAAHJsAAAQAAAAgmwAA
+JAAAACSbAAAUAAAAKJsAADQAAAAsmwAADAAAADCbAAAsAAAANJsAAAIAAAA4mwAAIgAA
+ADybAAASAAAAQJsAADIAAABEmwAACgAAAEibAAAqAAAATJsAAAEAAABQmwAAIQAAAFSb
+AAARAAAAWJsAADEAAABcmwAACQAAAGCbAAApAAAAZJsAAAUAAABomwAAJQAAAGybAAAV
+AAAAcJsAADUAAAB0mwAADQAAAHibAAAtAAAAfJsAAAMAAACAmwAAIwAAAISbAAATAAAA
+iJsAADMAAACMmwAACwAAAJCbAAArAAAAlJsAAAcAAACYmwAAJwAAAJybAAAXAAAAoJsA
+ADcAAACkmwAADwAAAKibAAAvAAAArJsAAC8AAACwmwAALwAAALSbAAAvAAAAuJsAAC8A
+AAC8mwAALwAAAMCbAAAvAAAAxJsAAC8AAADImwAALwAAAMybAAAvAAAA0JsAAC8AAADU
+mwAALwAAANibAAAvAAAA3JsAAC8AAADgmwAALwAAAOSbAAAvAAAA6JsAAC8AAADsmwAA
+LwAAAPCbAAAvAAAA9JsAAC8AAAD4mwAALwAAAPybAAAvAAAAAJoAAB0AAAAEmgAAXQAA
+AAiaAACdAAAADJoAAN0AAAAQmgAAHQEAABSaAAAhAAAAGJoAAGEAAAAcmgAAoQAAACCa
+AADhAAAAJJoAADEAAAAomgAAcQAAACyaAACxAAAAMJoAABwAAAA0mgAAXAAAADiaAAAp
+AAAAPJoAAGkAAABAmgAAqQAAAESaAAAgAAAASJoAABkAAABMmgAAWQAAAFCaAACZAAAA
+VJoAADAAAABYmgAABQAAAFyaAAAlAAAAYJoAAGUAAABkmgAApQAAAGiaAAAoAAAAbJoA
+AGgAAABwmgAAHwAAAHSaAAAeAAAAeJoAABgAAAB8mgAAWAAAAICaAACYAAAAhJoAAAMA
+AACImgAABAAAAIyaAABEAAAAkJoAAIQAAACUmgAAEwAAAJiaAAASAAAAnJoAAFIAAACg
+mgAAkgAAAKSaAADSAAAAqJoAACsAAACsmgAAKgAAALCaAABqAAAAtJoAAKoAAAC4mgAA
+GwAAALyaAAAaAAAAwJoAAFoAAADEmgAAmgAAAMiaAADaAAAAzJoAAAYAAADQmgAABgAA
+ANSaAAAGAAAA2JoAAAYAAADcmgAABgAAAOCaAAAGAAAA5JoAAAYAAADomgAABgAAAOya
+AAAGAAAA8JoAAAYAAAD0mgAABgAAAPiaAAAGAAAA/JoAAAYAAADUmAAAIAAAAMyYAAAE
+AAAAyJgAAAYBBgCcmAAAbQAAAMCYAAAAAAAA0JgAABQAAAAJCQAAAAAAAgIGBgYGBgYC
+AgAAAAMABgAJADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAA
+zAAAAAAAAAAAAAAAAAAAAAriAAAAIAAACgIAAAEYAAABAAAAQBgEAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAABQRXGQAiBQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2191,6 +2381,8 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAABYjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AACojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2214,99 +2406,99 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCY8JtAkICWwJtAnJ
-////yf///8n////J////wv////L////y////8v////L////0////wP///8D////A////
-wP///7r///+y////sv///7L///+y////sP///y3iAADm4QAA8+EAAGziAAAM4gAAX+IA
-AAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAEAAAABAAAAAAAAGAAAABgAAAAYAfO8AANDu
-AAAO7wAAHe8AACTvAAAz7wAAfO8AAHzvAAB87wAAfO8AAHzvAAB87wAAfO8AAHzvAAB8
-7wAAfO8AAFrvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBAAAA/8LwAP/C8A
-H/wvAA/8LwAP/C8ARBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8ASBAAAA/8LwAP/C8AH/wv
-AA/8LwAP/C8ATBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8AUBAAAA/8LwAP/C8AH/wvAA/8
-LwAP/C8AVBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8AWBAAAA/8LwAP/C8AH/wvAA/8LwAP
-/C8AXBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8AYBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8A
-ZBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8AMBAAADACAADgAQAAsAAAAGABAADgAQAAcBAA
-AGgBAADgAQAAuAEAAIwBAADgAQAAsBAAAGAOAACAEQAAHB8AADg+AACAEQAA8BAAAOCg
-AABoQAEAgFgAAOCwAABoQAEAFIAAAOgD6APgBuAGIAQgBEAIQAjgBuAGBJgAAAAAAAAD
-AAAAAAAAAAAAAAADAAAAIJgAAAACAgIAAgICAAIBAgACAgIAAgICJJgAAA4OAAAODgAA
-BwcAAA4OAAAODgAARJgAABwWchMlHHITKBdyE6IWchMlHHITYJgAABCdAAAQnQAAGJ0A
-ABidAAAQnQAAZJgAAADOAQAAzgEAAM4BAADOAQAAzgEAaJgAAJBBmkCQQZpAkEGaQJBB
-mkCQQZpAGJkAALgBAAC4AQAAhAAAAAgBAAC4AQAAJJkAAAWKBRAFigUQBYoFEAWKBRAF
-igUQMKIAAAAAAAAAAAAAAAAAAAgBAAAAAAAAAAAAAAAAAAAMAAAAAAAAADQAAAAFAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCY8JtAkAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ACAAAAAgAAAAQAAAAEAAAAAAAAYAAAAGAAAABgAwAAAAFQAAABUAAAAdAAAAFQAAAEAQ
+AAAP/C8AD/wvAB/8LwAP/C8ARBAAAA/8LwAP/C8AH/wvAA/8LwBIEAAAD/wvAA/8LwAf
+/C8AD/wvAEwQAAAP/C8AD/wvAB/8LwAP/C8AUBAAAA/8LwAP/C8AH/wvAA/8LwBUEAAA
+D/wvAA/8LwAf/C8AD/wvAFgQAAAP/C8AD/wvAB/8LwAP/C8AXBAAAA/8LwAP/C8AH/wv
+AA/8LwBgEAAAD/wvAA/8LwAf/C8AD/wvAGQQAAAP/C8AD/wvAB/8LwAP/C8AcBAAAGgB
+AADgAQAAuAEAAGgBAAAwEAAAMAIAAOABAACwAAAAMAIAALAQAACYDQAAgBEAAEgfAACY
+DQAA8BAAAOCgAABoQAEAgFgAAOCgAAAUgAAAAAQABAAIAAgAMAAgAAQABByAAACnj40O
+z4+NDpWPYAGnj40OBJgAAAAAAAADAAAAAAAAAAAAAAAgmAAAAAICAgACAgIAAgECAAIC
+AiSYAAAODgAADg4AAAcHAAAODgAAKJgAAAEAAgoBAAIKAAABBQEAAgo0mAAADg4AAA4O
+AAAODgAADg4AADiYAAAHAAAABwAAAAsAAAALAAAARJgAAJwWchOlFnITqBZyE5wWchNI
+mAAAZ7oYAGe6GABpuhgAaboYAFCYAADgtCgM4LQoDOC0KAzgtCgMWJgAAC4NgH4uDYB+
+Lg3Afi4NgH5cmAAAXl03MV5dNzFeXToxXl03MWCYAAAQvQAAEL0AADi9AAAQvQAAZJgA
+AADOAQAAzgEAAM4BAADOAQAUmQAAECcAABAnAAB8FQAAECcAABiZAACQAQAAkAEAAIQA
+AACQAQAARJkAACAQ4G8gEOBvIAngbyAQ4G+AoQAA/xT/Bf8U/wX/FP8F/xn/BdSYAAAQ
+AAAAFAAAABAAAAAQAAAAAAAAAAwAAAAAAAAAKAAAAJychIQsAAAAfHx8fDQAAAAFAAAA
QAAAAAAAAABEAAAACAAAAEgAAAAIAAAATAAAABAAAABQAAAAAAAAAFQAAAAfAAAAAAgA
AAAAAAAECAAAAAAAAAgIAAAAAAAADAgAAAAAAAAQCAAAAAAAABQIAAAAAAAAGAgAAAAA
-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
-+JkAABgAAAAEogAAAAAAAAiiAACIZz7QKKIAALUBAAA8ogAAr4nIEwSbAAAgAAAACJsA
-ABAAAAAMmwAAMAAAABCbAAAIAAAAFJsAACgAAAAYmwAABAAAABybAAAkAAAAIJsAABQA
-AAAkmwAANAAAACybAAAsAAAAMJsAAAIAAAA0mwAAIgAAADybAAAyAAAAQJsAAAoAAABE
-mwAAKgAAAEibAAAGAAAATJsAACYAAABQmwAAFgAAAFSbAAA2AAAAWJsAAA4AAABcmwAA
-LgAAAGCbAAABAAAAaJsAABEAAABsmwAAMQAAAHCbAAAJAAAAdJsAACkAAAB4mwAABQAA
-AHybAAAlAAAAgJsAABUAAACEmwAANQAAAIibAAANAAAAkJsAAAMAAACUmwAAIwAAAJib
-AAATAAAAoJsAAAsAAACkmwAAKwAAAKibAAArAAAArJsAACsAAACwmwAAKwAAALSbAAAr
+AAAcCAAAAAAAACAIAAAAAAAAJAgAAAAAAAAwEgAAAAAAAASAAAAAAAAACIAAAAAAAAAM
+gAAAAAAAABiAAAAAAAAAJIAAAAAAAAAogAAAMAAAACyAAAD//wcAMIAAAP///wE0gAAA
+MQAAADiAAAAAAAAAPIAAAAAAAABAgAAAAAAAAESAAAACAAAASIAAAAAAAABUgAAAAAAA
+AFiAAAAAAAAACJgAAAAAAAAMmAAAk5CELRCYAAAA4DJ9FJgAAGsPAAAcmAAAAAAAACyY
+AAD+bwIAMJgAAAAAAAA8mAAAAAECAECYAAB6AWogTJgAADxhhBJUmAAAWQgAAGiYAACQ
+QZpAbJgAAIGwDAVwmAAADwAAAHSYAACAAAAAeJgAAAwAAAAAmQAAAAAAAASZAAAAAAAA
+CJkAAAAAAAAMmQAAAACAABCZAAABAAAAHJkAACoJAAAgmQAAAAAAACSZAAAFigUAKJkA
+AAEAAAAsmQAAAAAAADCZAAAAAAAANJkAAAAAAAA4mQAAAAAAADyZAAA/AAAAQJkAAAQA
+AABImQAAAAAAAEyZAAAAAAAAUJkAAAAAAABUmQAATPFQXViZAAAYAAAAXJkAAI5qSwCE
+oQAA/wX/BoihAAD/B/8HjKEAAP8I/wiQoQAA/wn/CZShAAD/Cv8KmKEAAP8L/wucoQAA
+/wz/DKChAAD/Df8NpKEAAP8O/w+ooQAA/xL/EqyhAAD/E/8UsKEAAP8V/xa0oQAA/xf/
+GbihAAD/Gv8bvKEAAP8d/x7AoQAA/yD/I8ShAAD/Jf8nyKEAAP8p/yzMoQAA/y//MdCh
+AAD/NP831KEAAP86/zrYoQAA/zr/OtyhAAD/Ov864KEAAP86/zrkoQAA/zr/OuihAAD/
+Ov867KEAAP86/zrwoQAA/zr/OvShAAD/Ov86+KEAAP86/zr8oQAA/zr/OgCbAAAAAAAA
+BJsAACAAAAAImwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAAKAAAABibAAAEAAAAHJsA
+ACQAAAAgmwAAFAAAACSbAAA0AAAAKJsAAAwAAAAsmwAALAAAADCbAAACAAAANJsAACIA
+AAA4mwAAEgAAADybAAAyAAAAQJsAAAoAAABEmwAAKgAAAEibAAAGAAAATJsAACYAAABQ
+mwAAFgAAAFSbAAA2AAAAWJsAAA4AAABcmwAALgAAAGCbAAABAAAAZJsAACEAAABomwAA
+EQAAAGybAAAxAAAAcJsAAAkAAAB0mwAAKQAAAHibAAAFAAAAfJsAACUAAACAmwAAFQAA
+AISbAAA1AAAAiJsAAA0AAACMmwAALQAAAJCbAAADAAAAlJsAACMAAACYmwAAEwAAAJyb
+AAAzAAAAoJsAAAsAAACkmwAAKwAAAKibAAArAAAArJsAACsAAACwmwAAKwAAALSbAAAr
AAAAuJsAACsAAAC8mwAAKwAAAMCbAAArAAAAxJsAACsAAADImwAAKwAAAMybAAArAAAA
0JsAACsAAADUmwAAKwAAANibAAArAAAA3JsAACsAAADgmwAAKwAAAOSbAAArAAAA6JsA
-ACsAAADsmwAAKwAAAPCbAAArAAAA9JsAACsAAAD4mwAAAgAAAPybAAAWAAAAAAAAAAAA
-AAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyY
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAADgAAAA4AAAAOAAAADgAAAA4AJyYAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAA
-AMAAAACAAAAAgAAAAJyYAAD5AAQA+QAEAP8ABAD9AAQA/QAEANSYAAAAAAAAAAAAAAQA
-AAAEAAAABAAAAAAAAAAAAAAAAJoAAKkBAAAAAAAABJoAAOkBAABAAAAACJoAACkAAACA
+ACsAAADsmwAAKwAAAPCbAAArAAAA9JsAACsAAAD4mwAAAgAAAPybAAAWAAAA1JgAACAA
+AADYmAAAaBBgAAAAAAAAAAAAAJoAAKkBAAAAAAAABJoAAOkBAABAAAAACJoAACkAAACA
AAAADJoAAGkAAABQAQAAEJoAAJkBAACQAQAAFJoAANkBAADQAQAAGJoAABkAAAAQAAAA
HJoAAFkAAABEAAAAIJoAAJkAAACEAAAAJJoAAKUBAABIAQAAKJoAAOUBAACIAQAALJoA
ACUAAADIAQAAMJoAAMgBAAAUAAAANJoAAAgAAABCAAAAOJoAAEgAAACCAAAAPJoAAIgA
@@ -2321,792 +2513,1446 @@ AMYAAAC9AQAAuJoAAMYAAAD9AQAAvJoAAMYAAAA9AAAAwJoAAMYAAAB9AAAAxJoAAMYA
AAC9AAAAyJoAAMYAAAD9AAAAzJoAAMYAAAD9AAAA0JoAAMYAAAD9AAAA1JoAAMYAAAD9
AAAA2JoAAMYAAAD9AAAA3JoAAMYAAAD9AAAA4JoAAMYAAAD9AAAA5JoAAMYAAAD9AAAA
6JoAAMYAAAD9AAAA7JoAAMYAAAD9AAAA8JoAAMYAAAD9AAAA9JoAAMYAAAD9AAAA+JoA
-AMYAAAD9AAAA/JoAAMYAAAD9AAAA1JgAACAAAADUmAAAEAAAABQAAAAQAAAAEAAAABQA
-AADYmAAAaBBgAGgQYABoEGAAaBBgAGgQYAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AJyYAAAAAAAQAAAAEAAAABAAAAAQAAAAEJyYAAAAAAAEAAAABAAAAAQAAAAEAAAABJyY
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAoAAAAAAAAAAJyYAADAADgA
-gAA4AMAAOALAADgAwAA4AJyYAAAGAAIABgACAAYAAAAGAAIABgACAJyYAACJAAAAiQAA
-AIkAAACJAAAAiQAAAJyYAACgAAAAoAAAAKAAAACgAAAAoAAAAJyYAAAHAAQABwAEAAcA
-BAAHAAQABwAEANSYAAAaAAAAGgAAABoAAAAaAAAAGgAAAAAAAAAAAAAAnJgAAEAAAABI
-AAAAQAAAAEAAAABAAAAAnJgAABAAAAAQAAAAEAAAABAAAAAQAAAAnJgAAAgAAAAIAAAA
-CAAAAAgAAAAIAAAAnJgAAE8AAABPAAAATwAAAE8AAABPAAAAnJgAAPEAAADxAAAAYQAA
-APEAAADxAAAAnJgAAE+QAABPkAAATJAAAE+QAABPkAAAnJgAAFoSAABaEgAAmhIAAFoS
-AABaEgAAzJgAAA4AAAAOAAAADwAAAA4AAAAOAAAAAQAAAEYAAABgAAAAAQAAAEYAAABh
-AAAAAQAAAEYAAABiAAAAAQAAAEYAAABjAAAAAQAAAEYAAABkAAAAAQAAAEYAAABlAAAA
-AQAAAEYAAABmAAAAAQAAAEYAAABnAAAAAQAAAEYAAABoAAAAAQAAAEYAAABpAAAAAQAA
-AEYAAABqAAAAAQAAAEYAAABrAAAAAQAAAEYAAABsAAAAAQAAAEYAAAB0AAAAAQAAAEYA
-AAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0
-AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB1AAAAAQAAAEYAAAB2AAAA
-AQAAAEYAAAB3AAAAAQAAAEYAAAB4AAAAAQAAAEYAAAB5AAAAAQAAAEYAAAB6AAAAAQAA
-AEYAAAB7AAAAAQAAAEYAAAB8AAAAAQAAAEYAAAB9AAAAAQAAAEYAAAB+AAAAAQAAAEYA
-AAB/AAAAAQAAAEYAAACAAAAAAQAAAEQAAAB8AAAAAQAAAEYAAACIAAAAAQAAAEYAAACM
-AAAAAQAAAEYAAACQAAAAAQAAAEYAAACUAAAAAQAAAEYAAACYAAAAAQAAAEYAAACcAAAA
-AQAAAEYAAACgAAAAAQAAAEYAAACkAAAAAQAAAEYAAACoAAAAAQAAAEYAAACsAAAAAQAA
-AEYAAACwAAAAAQAAAEYAAAC0AAAAlToBAHg6AQB8OgEAgDoBAJA6AQCQOgEAhDoBAIg6
-AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAFYAAABWAAAAVgAAAFYAAABWAAAAc
-gAAAp5ONEs8TiAmVE+AEqxPgEs8TiAkomAAAAQACCgEAAgoAAQIFAQACCgEAAgo0mAAA
-Dg4AAA4OAAAODgAADg4AAA4OAAA4mAAABwAAAAcAAAALAAAACwAAAAsAAABImAAAbdoY
-AG3aGAB1yhgAdcoYAHXKGABQmAAA4LToDeC06A3gtOgN4LToDeC06A1YmAAALg2Afi4N
-gH4uDeh+Lg3ofi4NgH5cmAAAXmY3MV5mNzFeZjcxXmY3MV5mNzFsmAAAgbAMBYGwDAWB
-sAwFgbAMBYGwDAUUmQAA0AcAANAHAABMBAAAmAgAANAHAABEmQAAIBC49yAQuPcQDbj3
-EBC49xAQuPcEogAAAAAAAAAAAAAIAAAACAAAAAgAAAAIogAAiGe+1ohnvtaIZz7QiGc+
-0IhnPtAMogAAQAEsZEABLGRgwUJkYMFCZGDBQmQcogAACoCDGAqAgxgKgHMYCoCDGAqA
-gxgwEgAAAAAAACyYAAD+LwIAPJgAAAABAgBMmAAAPGGEEjCZAACCSAAAQJkAAAQAAAB0
-mQAAAAAAACiiAAC1AQAAPKIAAK+JyBMEmwAAAQAAAAibAAACAAAADJsAAAMAAAAQmwAA
-BAAAABSbAAAFAAAAGJsAAAgAAAAcmwAACQAAACCbAAAKAAAAJJsAAAsAAAAsmwAADQAA
-ADCbAAAQAAAANJsAABEAAAA8mwAAEwAAAECbAAAUAAAARJsAABUAAABImwAAGAAAAEyb
-AAAZAAAAUJsAABoAAABUmwAAGwAAAFibAAAcAAAAXJsAAB0AAABgmwAAIAAAAGibAAAi
-AAAAbJsAACMAAABwmwAAJAAAAHSbAAAlAAAAeJsAACgAAAB8mwAAKQAAAICbAAAqAAAA
-hJsAACsAAACImwAALAAAAJCbAAAwAAAAlJsAADEAAACYmwAAMgAAAKCbAAA0AAAApJsA
-ADUAAAComwAANQAAAKybAAA1AAAAsJsAADUAAAC0mwAANQAAALibAAA1AAAAvJsAADUA
-AADAmwAANQAAAMSbAAA1AAAAyJsAADUAAADMmwAANQAAANCbAAA1AAAA1JsAADUAAADY
-mwAANQAAANybAAA1AAAA4JsAADUAAADkmwAANQAAAOibAAA1AAAA7JsAADUAAADwmwAA
-NQAAAPSbAAA1AAAA+JsAABAAAAD8mwAAGgAAAAAAAAAAAAAAAJoAAAcAAAAHAAAABJoA
-AEcAAABHAAAACJoAAIcAAACHAAAADJoAAKABAACgAQAAEJoAAOABAADgAQAAFJoAACAA
-AAAgAAAAGJoAAGAAAABgAAAAHJoAAKEBAAChAQAAIJoAAOEBAADhAQAAJJoAACEAAAAh
-AAAAKJoAAGEAAABhAAAALJoAAGIBAABiAQAAMJoAAKIBAACiAQAANJoAAOIBAADiAQAA
-OJoAACIAAAAiAAAAPJoAAGIAAABiAAAAQJoAAGMBAABjAQAARJoAAKMBAACjAQAASJoA
-AOMBAADjAQAATJoAACMAAAAjAAAAUJoAAGMAAABjAAAAVJoAAIQBAACEAQAAWJoAAMQB
-AADEAQAAXJoAAAQAAAAEAAAAYJoAAOoBAAALAAAAZJoAACoAAABLAAAAaJoAAGoAAACL
-AAAAbJoAAKoAAACsAQAAcJoAAKsBAADsAQAAdJoAAOsBAAAsAAAAeJoAACsAAAASAAAA
-fJoAAGsAAABSAAAAgJoAAKsAAACSAAAAhJoAAKwBAACTAQAAiJoAAOwBAADTAQAAjJoA
-ACwAAAATAAAAkJoAADoAAABTAAAAlJoAAHoAAACTAAAAmJoAALoAAACUAQAAnJoAALsB
-AADUAQAAoJoAAPsBAAAUAAAApJoAADsAAAA6AAAAqJoAAHsAAAB6AAAArJoAALsAAAC6
-AAAAsJoAALwBAAC7AQAAtJoAAPwBAAD7AQAAuJoAADwAAAA7AAAAvJoAAHwAAAB7AAAA
-wJoAALwAAAC7AAAAxJoAAPwAAAC8AQAAyJoAAPwAAAD8AQAAzJoAAPwAAAA8AAAA0JoA
-APwAAAB8AAAA1JoAAPwAAAC8AAAA2JoAAPwAAAD8AAAA3JoAAPwAAAD8AAAA4JoAAPwA
-AAD8AAAA5JoAAPwAAAD8AAAA6JoAAPwAAAD8AAAA7JoAAPwAAAD8AAAA8JoAAPwAAAD8
-AAAA9JoAAPwAAAD8AAAA+JoAAPwAAAD8AAAA/JoAAPwAAAD8AAAA1JgAACAAAADQmAAA
-CAQGAwgEBwMIBAYDCAQGAwgEBwPcmAAAwMCgAMDAoADAwOAAwMDgAMDA4AAAAAAAAAAA
-AJyYAAAAAAAPAAAADwAAAA8AAAAPAAAAD5yYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyY
-AAAAAIAAAACAAAAAgAAAAIAAAACAAJyYAAAAACoAAAAqAAAAKgAAACoAAAAqAJyYAAAA
-AAEAAAABAAAAAQAAAAEAAAABAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAABgA
-AAAYAAAAGAAAABgAAAAYAJyYAAAAAGAAAABgAAAAbgAAAG4AAABuAJyYAAAAAMcAAADH
-AAAAxwAAAMcAAADHAJyYAAAAAEsAAABLAAAASwAAAEsAAABLAJyYAAAAAEgEAABIBAAA
-SAQAAEgEAABIBJyYAAAAAEwAAABMAAAATAAAAEwAAABMAJyYAAAAAOQAAADkAAAA5AAA
-AOQAAADkAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAPwAAAD8AAAA/AAAAPwA
-AAD8AJyYAAAAAP8AAAD/AAAA/wAAAP8AAAD/AJyYAAAAAD8EAAA/BAAAPwQAAD8EAAA/
-BJyYAAAAAAwAAAAMAAAADAAAAAwAAAAMAJyYAAAAABkCAAAZAgAAGQIAABkCAAAZApyY
-AAAAACQAAAAkAAAAJAAAACQAAAAkAJyYAAAAALQAAAC0AAAAtAAAALQAAAC0AJyYAAAA
-AJkAAACZAAAAmQAAAJkAAACZAJyYAAAAAFAAAABQAAAAUAAAAFAAAABQAJyYAAAAACoA
-AAAqAAAAKgAAACoAAAAqAJyYAAAAABIAAAASAAAAEgAAABIAAAASAJyYAAAAADLAAAAy
-wAAAMsAAADLAAAAywJyYAAAAAHQBAAB0AQAAdAEAAHQBAAB0AZyYAAAAABEAAAARAAAA
-EQAAABEAAAARAJyYAAAAACiGAAAohgAAKIYAACiGAAAohpyYAAAAAIQxAACEMQAAhDEA
-AIQxAACEMZyYAACAAPIAgADyAIAA8gCAAPIAgADyAJyYAAAZACcAGQAnABkAJwAZACcA
-GQAnAJyYAAADAAAAAwAAAAMAAAADAAAAAwAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AJyYAACyAAAAsgAAALIAAACyAAAAsgAAAJyYAACEILAAhCCwAIQgsACEILAAhCCwAJyY
-AACkJUEApCVBAKQlQQCkJUEApCVBAJyYAAAgkhEAIJIRACCSEQAgkhEAIJIRAJyYAAAA
-SBoAAEgaAABIGgAASBoAAEgaANiYAAAwAgsAMAILADACCwAwAgsAMAILAJyYAACUAAAA
-lAAAAJQAAACUAAAAlAAAAJyYAACRAAAAkQAAAJEAAACRAAAAkQAAAJyYAAASAAAAEgAA
-ABIAAAASAAAAEgAAAJyYAACAAAAAgAAAAIAAAACAAAAAgAAAAJyYAADZAAAA2QAAANkA
-AADZAAAA2QAAAJyYAABgAAAAYAAAAGAAAABgAAAAYAAAAJyYAADwAAAA8AAAAPAAAADw
-AAAA8AAAAJyYAACiAAAAogAAAKIAAACiAAAAogAAAJyYAABSAAAAUgAAAFIAAABSAAAA
-UgAAAJyYAADUAAAA1AAAANQAAADUAAAA1AAAAJyYAADMFAAAzBQAAMwUAADMFAAAzBQA
-AJyYAACMBAAAjAQAAIwEAACMBAAAjAQAAMSYAAADAAAAAwAAAAMAAAADAAAAAwAAAOhK
-AQDtSgEA1EoBANhKAQDoSgEA6EoBANxKAQDgSgEAAAAAAAAAAAAwAAAAFQAAABUAAAAV
-AAAAFQAAABUAAAAcgAAAp5ONEs8TiAmVE+AEqxPgEs8TiAkomAAAAQACCgEAAgoAAAIF
-AQACCgEAAgo0mAAAAA4AAAAOAAAADgAAAA4AAAAOAAA4mAAAAgAAAAIAAAAKAAAACgAA
-AAoAAABImAAAbdoYAG3aGABkahoAZGoaAGRqGgBQmAAA4LToDeC06A3asOgN2rCYDNqw
-6A1YmAAALg2Afi4NgH4uDeh+Lg3Ifi4NgH5cmAAAXmY3MV5mNzFeZjcxXmA5MV5mNzFs
-mAAAgbAMBYGwDAWBsAwFgbAMBYGwDAUUmQAA0AcAANAHAABMBAAAmAgAANAHAABEmQAA
-ABC49wAQuPcADbj3ABC49wAQuPcEogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIogAAiGe+
-1ohnvtaIZz7QiGc+0IhnPtAMogAAQAEsAEABLABAwUIAQMFCAEDBQgAcogAACoCDGAqA
-gxgKgGMYCoCDGAqAgxgwEgAA4AMAAGCAAAAPAAAAGIEAAAAAAAAcgQAAAAAAACCBAAAA
-AAAAJIEAAAAAAAAogQAAAAAAACyBAAAAAAAAMIEAAAAAAAA0gQAAAAAAADiBAAAAAAAA
-PIEAAAAAAABAgQAAqAAAgESBAAAAAAAALJgAAACgAAA8mAAAAAQgAEyYAAA8I4QScJgA
-AB8AAAB0mAAAgAAAAHiYAAAOAAAAgJkAAAAAAACEmQAAAACAAqCZAAAAAAAA4JkAAAAA
-AADkmQAAqqqqquiZAAB4ZEY87JkAAKoAAADwmQAADAAAAPSZAAD/AAAA+JkAABQAAAAo
-ogAAtQkAADyiAACviciTTKIAAAEAAABQogAAAKAAAFSiAAAAAAAAWKIAAIBTxwxcogAA
-AQ8PD2CiAAABD2lfZKIAABGKQQBoogAAAAAAAGyiAABqwTAMcKIAACAIggB0ogAAqnwb
-AHiiAADOOeccfKIAAM4BFwUAowAAAAABGASjAAACJgMwCKMAAAY+B0gMowAACkwLVhCj
-AAAPYBpkFKMAABtuT3gYowAAWnyPhhyjAABbhs+OIKMAAA+XT50kowAAj6HPpSijAAAf
-r1+1LKMAAJ+5370wowAAP8d/zTSjAAC/0f/VOKMAAAAAAAA8owAAAAAAAECjAAAAAAAA
-RKMAAAAAAABIowAA////P0yjAAD///8/UKMAAP///z9UowAA//8DAFijAAAfqqh5XKMA
-AA9CbAZgowAAByIoD2SjAACFFmAXaKMAAAQRgB9sowAAAwygN3CjAACDCMQ/dKMAAAMI
-wFd4owAAggbYX3yjAACCBOB/gKMAALp7PH+EowAA8H8w8wSbAAABAAAACJsAAAIAAAAM
-mwAAAwAAABCbAAAEAAAAFJsAAAUAAAAYmwAACAAAABybAAAJAAAAIJsAAAoAAAAkmwAA
-CwAAACybAAANAAAAMJsAABAAAAA0mwAAEQAAADybAAATAAAAQJsAABQAAABEmwAAFQAA
-AEibAAAYAAAATJsAABkAAABQmwAAGgAAAFSbAAAbAAAAWJsAABwAAABcmwAAHQAAAGCb
-AAAgAAAAaJsAACIAAABsmwAAIwAAAHCbAAAkAAAAdJsAACUAAAB4mwAAKAAAAHybAAAp
-AAAAgJsAACoAAACEmwAAKwAAAIibAAAsAAAAkJsAADAAAACUmwAAMQAAAJibAAAyAAAA
-oJsAADQAAACkmwAANQAAAKibAAA1AAAArJsAADUAAACwmwAANQAAALSbAAA1AAAAuJsA
-ADUAAAC8mwAANQAAAMCbAAA1AAAAxJsAADUAAADImwAANQAAAMybAAA1AAAA0JsAADUA
-AADUmwAANQAAANibAAA1AAAA3JsAADUAAADgmwAANQAAAOSbAAA1AAAA6JsAADUAAADs
-mwAANQAAAPCbAAA1AAAA9JsAADUAAAD4mwAAEAAAAPybAAAaAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAJoAAAAAAAAAAAAABJoAAAAAAABAAAAACJoAAAAAAACAAAAADJoA
-AAAAAACBAQAAEJoAAAAAAADBAQAAFJoAAAAAAAABAAAAGJoAAAAAAABBAAAAHJoAAAAA
-AACBAAAAIJoAAAAAAABoAQAAJJoAAAAAAACoAQAAKJoAAAAAAADoAQAALJoAAAAAAAAo
-AAAAMJoAAAAAAABoAAAANJoAAAAAAACJAQAAOJoAAAAAAADJAQAAPJoAAAAAAAAJAAAA
-QJoAAAAAAABJAAAARJoAAAAAAACJAAAASJoAAAAAAACQAQAATJoAAAAAAADQAQAAUJoA
-AAAAAAAQAAAAVJoAAAAAAABQAAAAWJoAAAAAAACQAAAAXJoAAAAAAACRAQAAYJoAAAAA
-AADRAQAAZJoAAAAAAAARAAAAaJoAAAAAAABRAAAAbJoAAAAAAACRAAAAcJoAAAAAAAB4
-AQAAdJoAAAAAAAC4AQAAeJoAAAAAAAD4AQAAfJoAAAAAAAA4AAAAgJoAAAAAAAB4AAAA
-hJoAAAAAAACZAQAAiJoAAAAAAADZAQAAjJoAAAAAAAAZAAAAkJoAAAAAAABZAAAAlJoA
-AAAAAACZAAAAmJoAAAAAAADZAAAAnJoAAAAAAAD5AAAAoJoAAAAAAAD5AAAApJoAAAAA
-AAD5AAAAqJoAAAAAAAD5AAAArJoAAAAAAAD5AAAAsJoAAAAAAAD5AAAAtJoAAAAAAAD5
-AAAAuJoAAAAAAAD5AAAAvJoAAAAAAAD5AAAAwJoAAAAAAAD5AAAAxJoAAAAAAAD5AAAA
-yJoAAAAAAAD5AAAAzJoAAAAAAAD5AAAA0JoAAAAAAAD5AAAA1JoAAAAAAAD5AAAA2JoA
-AAAAAAD5AAAA3JoAAAAAAAD5AAAA4JoAAAAAAAD5AAAA5JoAAAAAAAD5AAAA6JoAAAAA
-AAD5AAAA7JoAAAAAAAD5AAAA8JoAAAAAAAD5AAAA9JoAAAAAAAD5AAAA+JoAAAAAAAD5
-AAAA/JoAAAAAAAD5AAAA1JgAACAAAADQmAAACBQAAggUAQIIFAACCBQAAggUAQLcmAAA
-wCCgAMAgoADAIOAAwCDgAMAg4AAAAAAAAAAAAJyYAAAAAADwAAAA8AAAAPAAAADwAAAA
-8JyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAADAAAAAwAAAAMAAAADAAAAA5yY
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAJyYAAAAAEBAAABAQAAAQEAAAEBAAABAQJyYAAAAAAVlAAAF
-ZQAABWUAAAVlAAAFZZyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAJyYAAAAAEIAAABCAAAAQgAAAEIAAABCAJyYAAAAALUAAAC1AAAAtQAA
-ALUAAAC1AJyYAAAAAAMAAAADAAAAAwAAAAMAAAADAJyYAAAAAPcAAAD3AAAA9wAAAPcA
-AAD3AJyYAAAAAJ0AAACdAAAAnQAAAJ0AAACdAJyYAAAAACIAAAAiAAAAIgAAACIAAAAi
-AJyYAAAAACIEAAAiBAAAIgQAACIEAAAiBJyYAAAYACMAGAAjABgAIwAYACMAGAAjAJyY
-AAAAACgAAAAoAGAAKABgACgAYAAoAJyYAADAAFAAwABQAMMAUADDAFAAwwBQAJyYAAB/
-AAQAfwAEAH8ABAB/AAQAfwAEAJyYAABYBAAAWAQAAFgEAABYBAAAWAQAAJyYAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAJyYAAAAwAAAAMAAAADAAAAAwAAAAMAAANiYAAAwAkAAMAJA
-ADACQAAwAkAAMAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAZAAAAGQAAABk
+AMYAAAD9AAAA/JoAAMYAAAD9AAAAAQAAAEYAAABgAAAAAQAAAEYAAABhAAAAAQAAAEYA
+AABiAAAAAQAAAEYAAABjAAAAAQAAAEYAAABkAAAAAQAAAEYAAABlAAAAAQAAAEYAAABm
+AAAAAQAAAEYAAABnAAAAAQAAAEYAAABoAAAAAQAAAEYAAABpAAAAAQAAAEYAAABqAAAA
+AQAAAEYAAABrAAAAAQAAAEYAAABsAAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAA
+AEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYA
+AAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB1AAAAAQAAAEYAAAB2AAAAAQAAAEYAAAB3
+AAAAAQAAAEYAAAB4AAAAAQAAAEYAAAB5AAAAAQAAAEYAAAB6AAAAAQAAAEYAAAB7AAAA
+AQAAAEYAAAB8AAAAAQAAAEYAAAB9AAAAAQAAAEYAAAB+AAAAAQAAAEYAAAB/AAAAAQAA
+AEYAAACAAAAAAQAAAEQAAAB8AAAAAQAAAEYAAACIAAAAAQAAAEYAAACMAAAAAQAAAEYA
+AACQAAAAAQAAAEYAAACUAAAAAQAAAEYAAACYAAAAAQAAAEYAAACcAAAAAQAAAEYAAACg
+AAAAAQAAAEYAAACkAAAAAQAAAEYAAACoAAAAAQAAAEYAAACsAAAAAQAAAEYAAACwAAAA
+AQAAAEYAAAC0AAAAAAIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAnhYLAGIWCgA6FgkAHBYI
+AOoVBwCaFQUAShUEAAMVAgBZFAAAAAABAAAAAwAGAAkAPwAAAEO/AABDvwAAbb8AAG2/
+AACXvwAAl78AAMG/AADBvwAAAAAAAAAAAAAAAAAACQAAAAQAAAAEAAEAAQABAAYAAABG
+RzgAAAAAAAAAAAAAAAAABAAAAAEAAQAEAAAARkc3AAAAAAAAAAAAAAAAAAMAAQABAAEA
+AwAAAEZHNgAAAAAAAAAAAAAAAAAEAAAAAAABAAEAAABGRzUAAAAAAAAAAAAAAAAABAAB
+AAEAAAAAAAAARkc0AAAAAAAAAAAAAAAAAAQAAAABAAAA/v///0ZHMwAAAAAAAAAAAAAA
+AAADAAEAAQAAAP3///9GRzIAAAAAAAAAAAAAAAAABAAAAAAAAAD8////RkcxAAAAAAAA
+AAAAAAAAAAIAAQABAAAA+v///0ZHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAFBBUGQAiBQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCY8JtAkICWwJtAnJ////yf///8n/
+///J////wv////L////y////8v////L////0////wP///8D////A////wP///7r///+y
+////sv///7L///+y////sP///////////wAAQusAAO7qAAD76gAAgOsAABTrAAB06wAA
+AAAAAAAAAAAgAAAAIAAAAEAAAABAAAAAAAAGAAAABgAAAAYAnhYLAGIWCgA6FgkAHBYI
+AOoVBwCaFQUAShUEAAMVAgBZFAAAuAsBAAAAAAB0/AAA7fkAADL6AABW+gAAkPoAAKL6
+AAB0/AAAdPwAAHT8AAB0/AAAdPwAANT6AAB0/AAAdPwAAHT8AAB0/AAA5voAABP7AAB0
+/AAAYvsAAI37AAB0/AAAYPoAAHT8AAB0/AAAdPwAAMz7AADh+wAAdPwAAPv7AABr/AAA
+a/wAAEX8AABN/AAAVfwAAF38AABl/AAAAAAAAAYAAAABAAAAAgAAAAMAAAAEAAAABQAA
+APD9AADw/QAAr/wAAPD9AADw/QAA0/wAAPD9AADw/QAA8P0AAPD9AADw/QAA+/wAAPD9
+AADw/QAA8P0AAPD9AAAU/QAA8P0AAPD9AAAs/QAAz/0AAPD9AADw/QAA8P0AAPD9AADw
+/QAAUP0AAFD9AADw/QAAr/0AAAAAAAAAAAAAAAAAAEAQAAAP/C8AD/wvAB/8LwAP/C8A
+D/wvAEQQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAEgQAAAP/C8AD/wvAB/8LwAP/C8AD/wv
+AEwQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAFAQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAFQQ
+AAAP/C8AD/wvAB/8LwAP/C8AD/wvAFgQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAFwQAAAP
+/C8AD/wvAB/8LwAP/C8AD/wvAGAQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAGQQAAAP/C8A
+D/wvAB/8LwAP/C8AD/wvADAQAAAwAgAA4AEAALAAAABgAQAA4AEAAHAQAABoAQAA4AEA
+ALgBAACMAQAA4AEAALAQAABgDgAAgBEAABwfAAA4PgAAgBEAAPAQAADgoAAAaEABAIBY
+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
+qw/gEs8PiAkomAAAAQACCgEAAgoAAQEFAQACCgEAAgo0mAAADg4AAA4OAAAODgAADg4A
+AA4OAAA4mAAABwAAAAcAAAALAAAACwAAAAsAAABImAAAWtoYAFraGABpyhgAacoYAGnK
+GABQmAAA4LToDeC06A3gtOgN4LToDeC06A1YmAAALg2Afi4NgH4uTeh+Lk3ofi4NgH5c
+mAAAXmY3MV5mNzFeZjcxXmY3MV5hNzFsmAAAgbAMBYGwDAWBsAwFgLAMBYCwDAUUmQAA
+ECcAABAnAAB8FQAA+CoAABAnAABEmQAAIBC49yAQuPcgDbj3IBC49yAQuPcMogAAakEs
+ZGpBLGRqQUBkakFAZGpBQGQcogAACoCDGAqAgxgKgHMYCoCDGAqAgxgAAAAAAAAAAAAA
+AAAAAAAAMBIAAAAAAAAImAAAAAAAACyYAAD+LwIAPJgAAAABAgBMmAAAPGGEEjCZAACD
+SAAAQJkAAAQAAABYmQAA/wAAAHSZAAAAAAAA+JkAABgAAAAEogAAAAAAAAiiAACIZz7Q
+KKIAALUBAAA8ogAAr4nIEwSbAAAgAAAACJsAABAAAAAMmwAAMAAAABCbAAAIAAAAFJsA
+ACgAAAAYmwAABAAAABybAAAkAAAAIJsAABQAAAAkmwAANAAAACybAAAsAAAAMJsAAAIA
+AAA0mwAAIgAAADybAAAyAAAAQJsAAAoAAABEmwAAKgAAAEibAAAGAAAATJsAACYAAABQ
+mwAAFgAAAFSbAAA2AAAAWJsAAA4AAABcmwAALgAAAGCbAAABAAAAaJsAABEAAABsmwAA
+MQAAAHCbAAAJAAAAdJsAACkAAAB4mwAABQAAAHybAAAlAAAAgJsAABUAAACEmwAANQAA
+AIibAAANAAAAkJsAAAMAAACUmwAAIwAAAJibAAATAAAAoJsAAAsAAACkmwAAKwAAAKib
+AAArAAAArJsAACsAAACwmwAAKwAAALSbAAArAAAAuJsAACsAAAC8mwAAKwAAAMCbAAAr
+AAAAxJsAACsAAADImwAAKwAAAMybAAArAAAA0JsAACsAAADUmwAAKwAAANibAAArAAAA
+3JsAACsAAADgmwAAKwAAAOSbAAArAAAA6JsAACsAAADsmwAAKwAAAPCbAAArAAAA9JsA
+ACsAAAD4mwAAAgAAAPybAAAWAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAA
+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
+AAABAAAARgAAAGEAAAABAAAARgAAAGIAAAABAAAARgAAAGMAAAABAAAARgAAAGQAAAAB
+AAAARgAAAGUAAAABAAAARgAAAGYAAAABAAAARgAAAGcAAAABAAAARgAAAGgAAAABAAAA
+RgAAAGkAAAABAAAARgAAAGoAAAABAAAARgAAAGsAAAABAAAARgAAAGwAAAABAAAARgAA
+AHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQA
+AAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHUAAAAB
+AAAARgAAAHYAAAABAAAARgAAAHcAAAABAAAARgAAAHgAAAABAAAARgAAAHkAAAABAAAA
+RgAAAHoAAAABAAAARgAAAHsAAAABAAAARgAAAHwAAAABAAAARgAAAH0AAAABAAAARgAA
+AH4AAAABAAAARgAAAH8AAAABAAAARgAAAIAAAAABAAAARAAAAHwAAAABAAAARgAAAIgA
+AAABAAAARgAAAIwAAAABAAAARgAAAJAAAAABAAAARgAAAJQAAAABAAAARgAAAJgAAAAB
+AAAARgAAAJwAAAABAAAARgAAAKAAAAABAAAARgAAAKQAAAABAAAARgAAAKgAAAABAAAA
+RgAAAKwAAAABAAAARgAAALAAAAABAAAARgAAALQAAACJaAEAbGgBAHBoAQB0aAEAhGgB
+AIRoAQB4aAEAfGgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4WBgBiFgQAOhYDABwW
+AgDqFQEAmhUAAEoVAAADFQEAWRQDALgLBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw
+AAAAFYAAABWAAAAVgAAAFYAAABWAAAAcgAAAp5ONEs8TiAmVE+AEqxPgEs8TiAkomAAA
+AQACCgEAAgoAAQIFAQACCgEAAgo0mAAADg4AAA4OAAAODgAADg4AAA4OAAA4mAAABwAA
+AAcAAAALAAAACwAAAAsAAABImAAAbdoYAG3aGAB1yhgAdcoYAHXKGABQmAAA4LToDeC0
+6A3gtOgN4LToDeC06A1YmAAALg2Afi4NgH4uDeh+Lg3ofi4NgH5cmAAAXmY3MV5mNzFe
+ZjcxXmY3MV5mNzFsmAAAgbAMBYGwDAWBsAwFgbAMBYGwDAUUmQAA0AcAANAHAABMBAAA
+mAgAANAHAABEmQAAIBC49yAQuPcQDbj3EBC49xAQuPcEogAAAAAAAAAAAAAIAAAACAAA
+AAgAAAAIogAAiGe+1ohnvtaIZz7QiGc+0IhnPtAMogAAQAEsZEABLGRgwUJkYMFCZGDB
+QmQcogAACoCDGAqAgxgKgHMYCoCDGAqAgxgwEgAAAAAAAAiYAAAAAAAALJgAAP4vAgA8
+mAAAAAECAEyYAAA8YYQSMJkAAIJIAABAmQAABAAAAFiZAAD/AAAAdJkAAAAAAAAoogAA
+tQEAADyiAACvicgTBJsAAAEAAAAImwAAAgAAAAybAAADAAAAEJsAAAQAAAAUmwAABQAA
+ABibAAAIAAAAHJsAAAkAAAAgmwAACgAAACSbAAALAAAALJsAAA0AAAAwmwAAEAAAADSb
+AAARAAAAPJsAABMAAABAmwAAFAAAAESbAAAVAAAASJsAABgAAABMmwAAGQAAAFCbAAAa
+AAAAVJsAABsAAABYmwAAHAAAAFybAAAdAAAAYJsAACAAAABomwAAIgAAAGybAAAjAAAA
+cJsAACQAAAB0mwAAJQAAAHibAAAoAAAAfJsAACkAAACAmwAAKgAAAISbAAArAAAAiJsA
+ACwAAACQmwAAMAAAAJSbAAAxAAAAmJsAADIAAACgmwAANAAAAKSbAAA1AAAAqJsAADUA
+AACsmwAANQAAALCbAAA1AAAAtJsAADUAAAC4mwAANQAAALybAAA1AAAAwJsAADUAAADE
+mwAANQAAAMibAAA1AAAAzJsAADUAAADQmwAANQAAANSbAAA1AAAA2JsAADUAAADcmwAA
+NQAAAOCbAAA1AAAA5JsAADUAAADomwAANQAAAOybAAA1AAAA8JsAADUAAAD0mwAANQAA
+APibAAAQAAAA/JsAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmgAABwAAAAcA
+AAAEmgAARwAAAEcAAAAImgAAhwAAAIcAAAAMmgAAoAEAAKABAAAQmgAA4AEAAOABAAAU
+mgAAIAAAACAAAAAYmgAAYAAAAGAAAAAcmgAAoQEAAKEBAAAgmgAA4QEAAOEBAAAkmgAA
+IQAAACEAAAAomgAAYQAAAGEAAAAsmgAAYgEAAGIBAAAwmgAAogEAAKIBAAA0mgAA4gEA
+AOIBAAA4mgAAIgAAACIAAAA8mgAAYgAAAGIAAABAmgAAYwEAAGMBAABEmgAAowEAAKMB
+AABImgAA4wEAAOMBAABMmgAAIwAAACMAAABQmgAAYwAAAGMAAABUmgAAhAEAAIQBAABY
+mgAAxAEAAMQBAABcmgAABAAAAAQAAABgmgAA6gEAAAsAAABkmgAAKgAAAEsAAABomgAA
+agAAAIsAAABsmgAAqgAAAKwBAABwmgAAqwEAAOwBAAB0mgAA6wEAACwAAAB4mgAAKwAA
+ABIAAAB8mgAAawAAAFIAAACAmgAAqwAAAJIAAACEmgAArAEAAJMBAACImgAA7AEAANMB
+AACMmgAALAAAABMAAACQmgAAOgAAAFMAAACUmgAAegAAAJMAAACYmgAAugAAAJQBAACc
+mgAAuwEAANQBAACgmgAA+wEAABQAAACkmgAAOwAAADoAAAComgAAewAAAHoAAACsmgAA
+uwAAALoAAACwmgAAvAEAALsBAAC0mgAA/AEAAPsBAAC4mgAAPAAAADsAAAC8mgAAfAAA
+AHsAAADAmgAAvAAAALsAAADEmgAA/AAAALwBAADImgAA/AAAAPwBAADMmgAA/AAAADwA
+AADQmgAA/AAAAHwAAADUmgAA/AAAALwAAADYmgAA/AAAAPwAAADcmgAA/AAAAPwAAADg
+mgAA/AAAAPwAAADkmgAA/AAAAPwAAADomgAA/AAAAPwAAADsmgAA/AAAAPwAAADwmgAA
+/AAAAPwAAAD0mgAA/AAAAPwAAAD4mgAA/AAAAPwAAAD8mgAA/AAAAPwAAADUmAAAIAAA
+ANCYAAAIBAYDCAQHAwgEBgMIBAYDCAQHA9yYAADAIKAAwCCgAMAg4ADAIOAAwCDgAAAA
+AAAAAAAAnJgAAAAAAA8AAAAPAAAADwAAAA8AAAAPnJgAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAnJgAAAAAgAAAAIAAAACAAAAAgAAAAIAAnJgAAAAAKgAAACoAAAAqAAAAKgAAACoA
+nJgAAAAAAQAAAAEAAAABAAAAAQAAAAEAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgA
+AAAAGAAAABgAAAAYAAAAGAAAABgAnJgAAAAAYAAAAGAAAABuAAAAbgAAAG4AnJgAAAAA
+xwAAAMcAAADHAAAAxwAAAMcAnJgAAAAASwAAAEsAAABLAAAASwAAAEsAnJgAAAAASAQA
+AEgEAABIBAAASAQAAEgEnJgAAAAATAAAAEwAAABMAAAATAAAAEwAnJgAAAAA5AAAAOQA
+AADkAAAA5AAAAOQAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAA/AAAAPwAAAD8
+AAAA/AAAAPwAnJgAAAAA/wAAAP8AAAD/AAAA/wAAAP8AnJgAAAAAPwQAAD8EAAA/BAAA
+PwQAAD8EnJgAAAAADAAAAAwAAAAMAAAADAAAAAwAnJgAAAAAGQIAABkCAAAZAgAAGQIA
+ABkCnJgAAAAAJAAAACQAAAAkAAAAJAAAACQAnJgAAAAAtAAAALQAAAC0AAAAtAAAALQA
+nJgAAAAAmQAAAJkAAACZAAAAmQAAAJkAnJgAAAAAUAAAAFAAAABQAAAAUAAAAFAAnJgA
+AAAAKgAAACoAAAAqAAAAKgAAACoAnJgAAAAAEgAAABIAAAASAAAAEgAAABIAnJgAAAAA
+MsAAADLAAAAywAAAMsAAADLAnJgAAAAAdAEAAHQBAAB0AQAAdAEAAHQBnJgAAAAAEQAA
+ABEAAAARAAAAEQAAABEAnJgAAAAAKIYAACiGAAAohgAAKIYAACiGnJgAAAAAhDEAAIQx
+AACEMQAAhDEAAIQxnJgAAIAA8gCAAPIAgADyAIAA8gCAAPIAnJgAABkAJwAZACcAGQAn
+ABkAJwAZACcAnJgAAAMAAAADAAAAAwAAAAMAAAADAAAAnJgAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAnJgAALIAAACyAAAAsgAAALIAAACyAAAAnJgAAIQgsACEILAAhCCwAIQgsACE
+ILAAnJgAAKQlQQCkJUEApCVBAKQlQQCkJUEAnJgAACCSEQAgkhEAIJIRACCSEQAgkhEA
+nJgAAABIGgAASBoAAEgaAABIGgAASBoA2JgAADACCwAwAgsAMAILADACCwAwAgsAnJgA
+AJQAAACUAAAAlAAAAJQAAACUAAAAnJgAAJEAAACRAAAAkQAAAJEAAACRAAAAnJgAABIA
+AAASAAAAEgAAABIAAAASAAAAnJgAAIAAAACAAAAAgAAAAIAAAACAAAAAnJgAANkAAADZ
+AAAA2QAAANkAAADZAAAAnJgAAGAAAABgAAAAYAAAAGAAAABgAAAAnJgAAPAAAADwAAAA
+8AAAAPAAAADwAAAAnJgAAKIAAACiAAAAogAAAKIAAACiAAAAnJgAAFIAAABSAAAAUgAA
+AFIAAABSAAAAnJgAANQAAADUAAAA1AAAANQAAADUAAAAnJgAAMwUAADMFAAAzBQAAMwU
+AADMFAAAnJgAAIwEAACMBAAAjAQAAIwEAACMBAAAxJgAAAMAAAADAAAAAwAAAAMAAAAD
+AAAAKHoBAC16AQAUegEAGHoBACh6AQAoegEAHHoBACB6AQAAAAAAAAAAADAAAAAVAAAA
+FQAAABUAAAAVAAAAFQAAAByAAACnk40SzxOICZUT4ASrE+ASzxOICSiYAAABAAIKAQAC
+CgAAAgUBAAIKAQACCjSYAAAADgAAAA4AAAAOAAAADgAAAA4AADiYAAACAAAAAgAAAAoA
+AAAKAAAACgAAAEiYAABt2hgAbdoYAGRqGgBkahoAZGoaAFCYAADgtOgN4LToDdqw6A3a
+sJgM2rDoDViYAAAuDYB+Lg2Afi4N6H4uDch+Lg2AflyYAABeZjcxXmY3MV5mNzFeYDkx
+XmY3MWyYAACBsAwFgbAMBYGwDAWBsAwFgbAMBRSZAADQBwAA0AcAAEwEAACYCAAA0AcA
+AESZAAAAELj3ABC49wANuPcAELj3ABC49wSiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAii
+AACIZ77WiGe+1ohnPtCIZz7QiGc+0AyiAABAASwAQAEsAEDBQgBAwUIAQMFCAByiAAAK
+gIMYCoCDGAqAYxgKgIMYCoCDGDASAADgAwAAYIAAAA8AAAAYgQAAAAAAAByBAAAAAAAA
+IIEAAAAAAAAkgQAAAAAAACiBAAAAAAAALIEAAAAAAAAwgQAAAAAAADSBAAAAAAAAOIEA
+AAAAAAA8gQAAAAAAAECBAACoAACARIEAAAAAAAAImAAAAAAAACyYAAAAoAAAPJgAAAAE
+IABMmAAAPCOEEnCYAAAfAAAAdJgAAIAAAAB4mAAADgAAAFiZAAD/AAAAgJkAAAAAAACE
+mQAAAACAAqCZAAAAAAAA4JkAAAAAAADkmQAAqqqqquiZAAB4ZEY87JkAAKoAAADwmQAA
+DAAAAPSZAAD/AAAA+JkAABQAAAAoogAAtQkAADyiAACviciTTKIAAAEAAABQogAAAKAA
+AFSiAAAAAAAAWKIAAIBTxwxcogAAAQ8PD2CiAAABD2lfZKIAABGKQQBoogAAAAAAAGyi
+AABqwTAMcKIAACAIggB0ogAAqnwbAHiiAADOOeccfKIAAM4BFwUAowAAAAABGASjAAAC
+JgMwCKMAAAY+B0gMowAACkwLVhCjAAAPYBpkFKMAABtuT3gYowAAWnyPhhyjAABbhs+O
+IKMAAA+XT50kowAAj6HPpSijAAAfr1+1LKMAAJ+5370wowAAP8d/zTSjAAC/0f/VOKMA
+AAAAAAA8owAAAAAAAECjAAAAAAAARKMAAAAAAABIowAA////P0yjAAD///8/UKMAAP//
+/z9UowAA//8DAFijAAAfqqh5XKMAAA9CbAZgowAAByIoD2SjAACFFmAXaKMAAAQRgB9s
+owAAAwygN3CjAACDCMQ/dKMAAAMIwFd4owAAggbYX3yjAACCBOB/gKMAALp7PH+EowAA
+8H8w8wSbAAABAAAACJsAAAIAAAAMmwAAAwAAABCbAAAEAAAAFJsAAAUAAAAYmwAACAAA
+ABybAAAJAAAAIJsAAAoAAAAkmwAACwAAACybAAANAAAAMJsAABAAAAA0mwAAEQAAADyb
+AAATAAAAQJsAABQAAABEmwAAFQAAAEibAAAYAAAATJsAABkAAABQmwAAGgAAAFSbAAAb
+AAAAWJsAABwAAABcmwAAHQAAAGCbAAAgAAAAaJsAACIAAABsmwAAIwAAAHCbAAAkAAAA
+dJsAACUAAAB4mwAAKAAAAHybAAApAAAAgJsAACoAAACEmwAAKwAAAIibAAAsAAAAkJsA
+ADAAAACUmwAAMQAAAJibAAAyAAAAoJsAADQAAACkmwAANQAAAKibAAA1AAAArJsAADUA
+AACwmwAANQAAALSbAAA1AAAAuJsAADUAAAC8mwAANQAAAMCbAAA1AAAAxJsAADUAAADI
+mwAANQAAAMybAAA1AAAA0JsAADUAAADUmwAANQAAANibAAA1AAAA3JsAADUAAADgmwAA
+NQAAAOSbAAA1AAAA6JsAADUAAADsmwAANQAAAPCbAAA1AAAA9JsAADUAAAD4mwAAEAAA
+APybAAAaAAAAAAAAAAAAAAAAmgAAAAAAAAAAAAAEmgAAAAAAAEAAAAAImgAAAAAAAIAA
+AAAMmgAAAAAAAIEBAAAQmgAAAAAAAMEBAAAUmgAAAAAAAAEAAAAYmgAAAAAAAEEAAAAc
+mgAAAAAAAIEAAAAgmgAAAAAAAGgBAAAkmgAAAAAAAKgBAAAomgAAAAAAAOgBAAAsmgAA
+AAAAACgAAAAwmgAAAAAAAGgAAAA0mgAAAAAAAIkBAAA4mgAAAAAAAMkBAAA8mgAAAAAA
+AAkAAABAmgAAAAAAAEkAAABEmgAAAAAAAIkAAABImgAAAAAAAJABAABMmgAAAAAAANAB
+AABQmgAAAAAAABAAAABUmgAAAAAAAFAAAABYmgAAAAAAAJAAAABcmgAAAAAAAJEBAABg
+mgAAAAAAANEBAABkmgAAAAAAABEAAABomgAAAAAAAFEAAABsmgAAAAAAAJEAAABwmgAA
+AAAAAHgBAAB0mgAAAAAAALgBAAB4mgAAAAAAAPgBAAB8mgAAAAAAADgAAACAmgAAAAAA
+AHgAAACEmgAAAAAAAJkBAACImgAAAAAAANkBAACMmgAAAAAAABkAAACQmgAAAAAAAFkA
+AACUmgAAAAAAAJkAAACYmgAAAAAAANkAAACcmgAAAAAAAPkAAACgmgAAAAAAAPkAAACk
+mgAAAAAAAPkAAAComgAAAAAAAPkAAACsmgAAAAAAAPkAAACwmgAAAAAAAPkAAAC0mgAA
+AAAAAPkAAAC4mgAAAAAAAPkAAAC8mgAAAAAAAPkAAADAmgAAAAAAAPkAAADEmgAAAAAA
+APkAAADImgAAAAAAAPkAAADMmgAAAAAAAPkAAADQmgAAAAAAAPkAAADUmgAAAAAAAPkA
+AADYmgAAAAAAAPkAAADcmgAAAAAAAPkAAADgmgAAAAAAAPkAAADkmgAAAAAAAPkAAADo
+mgAAAAAAAPkAAADsmgAAAAAAAPkAAADwmgAAAAAAAPkAAAD0mgAAAAAAAPkAAAD4mgAA
+AAAAAPkAAAD8mgAAAAAAAPkAAADUmAAAIAAAANCYAAAIFAACCBQBAggUAAIIFAACCBQB
+AtyYAADAIKAAwCCgAMAg4ADAIOAAwCDgAAAAAAAAAAAAnJgAAAAAAPAAAADwAAAA8AAA
+APAAAADwnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAMAAAADAAAAAwAAAAMA
+AAADnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+nJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAQEAAAEBAAABAQAAAQEAAAEBAnJgAAAAA
+BWUAAAVlAAAFZQAABWUAAAVlnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAnJgAAAAAQgAAAEIAAABCAAAAQgAAAEIAnJgAAAAAtQAAALUA
+AAC1AAAAtQAAALUAnJgAAAAAAwAAAAMAAAADAAAAAwAAAAMAnJgAAAAA9wAAAPcAAAD3
+AAAA9wAAAPcAnJgAAAAAnQAAAJ0AAACdAAAAnQAAAJ0AnJgAAAAAIgAAACIAAAAiAAAA
+IgAAACIAnJgAAAAAIgQAACIEAAAiBAAAIgQAACIEnJgAABgAIwAYACMAGAAjABgAIwAY
+ACMAnJgAAAAAKAAAACgAYAAoAGAAKABgACgAnJgAAMAAUADAAFAAwwBQAMMAUADDAFAA
+nJgAAH8ABAB/AAQAfwAEAH8ABAB/AAQAnJgAAFgEAABYBAAAWAQAAFgEAABYBAAAnJgA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAADAAAAAwAAAAMAAAADAAAAAwAAA2JgAADAC
+QAAwAkAAMAJAADACQAAwAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAABkAAAA
+ZAAAAGQAAABkAAAAZAAAnJgAAAAIAAAACAAAAAgAAAAIAAAACAAAzJgAAA4AAAAOAAAA
+DgAAAA4AAAAOAAAAWJYBAF2WAQBIlgEATJYBAFiWAQBYlgEAUJYBAFSWAQAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAwAAAAFQAAABUAAAAVAAAAFQAAABUAAAAcgAAAp5ONEs8T
+iAmVE+AEqxPgEs8TiAkomAAAAQACCgEAAgoAAQIFAQACCgEAAgo0mAAADg4AAA4OAAAO
+DgAADg4AAA4OAAA4mAAABwAAAAcAAAALAAAACwAAAAsAAABImAAAYfoYAGH6GABjGhoA
+YxoaAGMaGgBQmAAA4LSYDOC0mAzasJgM2rCYDNqwmAxYmAAALg3Ifi4NyH4uDch+Lg3I
+fi4NyH5cmAAAXmA5MV5gOTFeYDkxXmA5MV5gOTFsmAAAgbAMBYGwDAWBsAwFgbAMBYGw
+DAUUmQAA0AcAANAHAABMBAAAmAgAANAHAABEmQAAABC49wAQuPcADbj3ABC49wAQuPcE
+ogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIogAAiGe+1ohnvtaIZz7QiGc+0IhnPtAMogAA
+4MEuAODBLgAgwSoAIMEqACDBKgAcogAACoCDGAqAgxgKgGMYCoCDGAqAgxgAowAAAAAB
+GAAAARgAAAEYAAABGAAAARgEowAAAiYDMAImAzACJgMwAiYDMAImAzAIowAABj4HSAY+
+B0gGPgdIBj4HSAY+B0gMowAACkwLVgpMC1YKTAtWCkwLVgpMC1YQowAAD2AaZA9gGmQP
+YBpkD2AaZA9gGmQUowAAG25PeBtuT3gbbk94G25PeBtuT3gYowAAWnyPhlp8j4ZafI+G
+WnyPhlp8j4YcowAAW4bPkFuGz5Bbhs+OW4bPjluGz44gowAAD5dPnQ+XT50Pl0+bD5dP
+mw+XT5skowAAj6PPp4+jz6ePn8+jj5/Po4+fz6MoowAAH69ftR+vX7Ufr1+zH69fsx+v
+X7MsowAAn7nfvZ+5372fud+7n7nfu5+537swowAAP8V/yz/Ff8s/x3/LP8d/yz/Hf8s0
+owAAv9H/1b/R/9W/0f/Tv9H/07/R/9MAAAAAAAAAAAAAAAAAAAAAMBIAAOADAABoQAAA
+EAAAAGCAAAAPAAAAnIAAAAAAAACggAAAAAAAABiBAAAAAAAAHIEAAAAAAAAggQAAAAAA
+ACSBAAAAAAAAKIEAAAAAAAAsgQAAAAAAADCBAAAAAAAANIEAAAAAAAA4gQAAAAAAADyB
+AAAAAAAAQIEAAPkDAIBEgQAAAAAAAAiYAAAAAAAALJgAAACgAAA8mAAAAAQgAEyYAAA8
+I4QScJgAAB8AAAB0mAAAgAAAAHiYAAAOAAAAWJkAAP8fCACAmQAAAAAAAISZAAAAAIAC
+oJkAAAAAAADgmQAAAAAAAOSZAACqqqqq6JkAAHhkRjzsmQAAqgAAAPCZAAAMAAAA9JkA
+AP8AAAD4mQAAFAAAACiiAAC1CQAAPKIAAK+JyJNMogAAAQAAAFCiAAAAoAAAVKIAAAAA
+AABYogAAgFPHDFyiAAABDw8PYKIAAAEPaV9kogAAEYpBAGiiAAAAAAAAbKIAAGrBMAxw
+ogAAIAiCAHSiAACqfBsIeKIAAM455xx8ogAAzgEXBTijAAAAAAAAPKMAAAAAAABAowAA
+AAAAAESjAAAAAAAASKMAAP///z9MowAA////P1CjAAD///8/VKMAAP//AwBYowAAH6qo
+eVyjAAAPQmwGYKMAAAciKA9kowAAhRZgF2ijAAAEEYAfbKMAAAMMoDdwowAAgwjEP3Sj
+AAADCMBXeKMAAIIG2F98owAAggTgf4CjAAC6ezx/hKMAAPB/MPMEmwAAAQAAAAibAAAC
+AAAADJsAAAMAAAAQmwAABAAAABSbAAAFAAAAGJsAAAgAAAAcmwAACQAAACCbAAAKAAAA
+JJsAAAsAAAAsmwAADQAAADCbAAAQAAAANJsAABEAAAA8mwAAEwAAAECbAAAUAAAARJsA
+ABUAAABImwAAGAAAAEybAAAZAAAAUJsAABoAAABUmwAAGwAAAFibAAAcAAAAXJsAAB0A
+AABgmwAAIAAAAGibAAAiAAAAbJsAACMAAABwmwAAJAAAAHSbAAAlAAAAeJsAACgAAAB8
+mwAAKQAAAICbAAAqAAAAhJsAACsAAACImwAALAAAAJCbAAAwAAAAlJsAADEAAACYmwAA
+MgAAAKCbAAA0AAAApJsAADUAAAComwAANQAAAKybAAA1AAAAsJsAADUAAAC0mwAANQAA
+ALibAAA1AAAAvJsAADUAAADAmwAANQAAAMSbAAA1AAAAyJsAADUAAADMmwAANQAAANCb
+AAA1AAAA1JsAADUAAADYmwAANQAAANybAAA1AAAA4JsAADUAAADkmwAANQAAAOibAAA1
+AAAA7JsAADUAAADwmwAANQAAAPSbAAA1AAAA+JsAABAAAAD8mwAAGgAAAACaAAAAAAAA
+AAAAAASaAABAAAAAQAAAAAiaAACAAAAAgAAAAAyaAAChAQAAYQEAABCaAADhAQAAoQEA
+ABSaAAAhAAAA4QEAABiaAABhAAAAIQAAAByaAACIAQAAYQAAACCaAADIAQAAiAEAACSa
+AAAIAAAAyAEAACiaAABIAAAACAAAACyaAACIAAAASAAAADCaAACpAQAAiAAAADSaAADp
+AQAAaQEAADiaAAApAAAAqQEAADyaAABpAAAA6QEAAECaAADQAQAAKQAAAESaAAAQAAAA
+aQAAAEiaAABQAAAAkAEAAEyaAACQAAAA0AEAAFCaAACxAQAAEAAAAFSaAADxAQAAUAAA
+AFiaAAAxAAAAkAAAAFyaAABxAAAAcQEAAGCaAAC4AQAAsQEAAGSaAAD4AQAA8QEAAGia
+AAA4AAAAMQAAAGyaAAB4AAAAcQAAAHCaAACZAQAAmAEAAHSaAADZAQAA2AEAAHiaAAAZ
+AAAAGAAAAHyaAABZAAAAWAAAAICaAACZAAAAmAAAAISaAADZAAAAeQEAAIiaAAD5AAAA
+uQEAAIyaAAD5AAAA+QEAAJCaAAD5AAAAOQAAAJSaAAD5AAAAeQAAAJiaAAD5AAAAuQAA
+AJyaAAD5AAAA+QAAAKCaAAD5AAAA+QAAAKSaAAD5AAAA+QAAAKiaAAD5AAAA+QAAAKya
+AAD5AAAA+QAAALCaAAD5AAAA+QAAALSaAAD5AAAA+QAAALiaAAD5AAAA+QAAALyaAAD5
+AAAA+QAAAMCaAAD5AAAA+QAAAMSaAAD5AAAA+QAAAMiaAAD5AAAA+QAAAMyaAAD5AAAA
++QAAANCaAAD5AAAA+QAAANSaAAD5AAAA+QAAANiaAAD5AAAA+QAAANyaAAD5AAAA+QAA
+AOCaAAD5AAAA+QAAAOSaAAD5AAAA+QAAAOiaAAD5AAAA+QAAAOyaAAD5AAAA+QAAAPCa
+AAD5AAAA+QAAAPSaAAD5AAAA+QAAAPiaAAD5AAAA+QAAAPyaAAD5AAAA+QAAANSYAAAg
+AAAA0JgAAAgAAAAIAAAACAAAAAgAAAAIAAAA3JgAAMAAoADAAKAAwADgAMAA4ADAAOAA
+AAAAAAAAAACcmAAAAAAAMwAAADMAAAAzAAAAMwAAADOcmAAAAAAAAQAAAAEAAAABAAAA
+AQAAAAGcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAHwAAAB8AAAAfAAAAHwAAAB+c
+mAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAC4AAAAuAAAALgAAAC4AAAAuACcmAAA
+AAC3AAAAtwAAALcAAAC3AAAAtwCcmAAAAACEAAAAhAAAAIQAAACEAAAAhACcmAAAAACY
+AAAAmAAAAJgAAACYAAAAmACcmAAAAADAAAAAwAAAAMAAAADAAAAAwACcmAAAAAD/AAAA
+/wAAAP8AAAD/AAAA/wCcmAAAAAD/AAAA/wAAAP8AAAD/AAAA/wCcmAAAAAD/AAAA/wAA
+AP8AAAD/AAAA/wCcmAAAAAD/AAAA/wAAAP8AAAD/AAAA/wCcmAAAAADXAAAA1wAAANcA
+AADXAAAA1wCcmAAAAABhAAAAYQAAAGEAAABhAAAAYQCcmAAAAAD+AAAA/gAAAP4AAAD+
+AAAA/gCcmAAAAADeAAAA3gAAAN4AAADeAAAA3gCcmAAAAAB/AAAAfwAAAH8AAAB/AAAA
+fwCcmAAAAAA9BAAAPQQAAD0EAAA9BAAAPQScmAAAAAB3AAAAdwAAAHcAAAB3AAAAdwCc
+mAAAAABEAAAARAAAAEQAAABEAAAARACcmAAAAACYAAAAmAAAAJgAAACYAAAAmACcmAAA
+gAAQAIAAEACAABAAgAAQAIAAEACcmAAANMAFADTABQA0wAUANMAFADTABQCcmAAA8AAx
+APAAMQDwADEA8AAxAPAAMQCcmAAAHwEMAB8BDAAfAQwAHwEMAB8BDACcmAAAQABRAEAA
+UQBAAFEAQABRAEAAUQCcmAAA2gBQANoAUADaAFAA2gBQANoAUACcmAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAACcmAAAREAAAERAAABEQAAAREAAAERAAACcmAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAACcmAAAwGAAAMBgAADAYAAAwGAAAMBgAACcmAAAACwAAAAsAAAANgAAADYA
+AAAsAADImAAAAwQAAAMEAAADBAAAAwQAAAMEAAAAAAAAAAAAAJyYAAAAZAAAAGQAAABk
AAAAZAAAAGQAAJyYAAAACAAAAAgAAAAIAAAACAAAAAgAAMyYAAAOAAAADgAAAA4AAAAO
-AAAADgAAAPRiAQD5YgEA5GIBAOhiAQD0YgEA9GIBAOxiAQDwYgEAQVI1MjEwAEFSNTIx
-MQBBUjUyMTIAUkY1MTExAFJGNTExMgBSRjI0MTMAQXRoZXJvcyAyMzEzIFdpU29DAEF0
-aGVyb3MgNTIxMiAoRlBHQSkAQXRoZXJvcyA1MjExIChGUEdBKQBBdGhlcm9zIDUyMTAA
-QXRoZXJvcyA1MjExAEF0aGVyb3MgNTMxMiBXaVNvQwBBdGhlcm9zIDUyMTIAREIAREVC
-VUcATkEATk9fQ09VTlRSWV9TRVQAQUwAQUxCQU5JQQBEWgBBTEdFUklBAEFSAEFSR0VO
-VElOQQBBTQBBUk1FTklBAEFVAEFVU1RSQUxJQQBBVABBVVNUUklBAEFaAEFaRVJCQUlK
-QU4AQkgAQkFIUkFJTgBCWQBCRUxBUlVTAEJFAEJFTEdJVU0AQloAQkVMSVpFAEJPAEJP
-TFZJQQBCUgBCUkFaSUwAQk4AQlJVTkVJIERBUlVTU0FMQU0AQkcAQlVMR0FSSUEAQ0EA
-Q0FOQURBAENMAENISUxFAENOAENISU5BAENPAENPTE9NQklBAENSAENPU1RBIFJJQ0EA
-SFIAQ1JPQVRJQQBDWQBDWVBSVVMAQ1oAQ1pFQ0ggUkVQVUJMSUMAREsAREVOTUFSSwBE
-TwBET01JTklDQU4gUkVQVUJMSUMARUMARUNVQURPUgBFRwBFR1lQVABTVgBFTCBTQUxW
-QURPUgBFRQBFU1RPTklBAEZJAEZJTkxBTkQARlIARlJBTkNFAEYyAEZSQU5DRV9SRVMA
-R0UAR0VPUkdJQQBERQBHRVJNQU5ZAEdSAEdSRUVDRQBHVABHVUFURU1BTEEASE4ASE9O
-RFVSQVMASEsASE9ORyBLT05HAEhVAEhVTkdBUlkASVMASUNFTEFORABJTgBJTkRJQQBJ
-RABJTkRPTkVTSUEASVIASVJBTgBJRQBJUkVMQU5EAElMAElTUkFFTABJVABJVEFMWQBK
-UABKQVBBTgBKMQBKQVBBTjEASjIASkFQQU4yAEozAEpBUEFOMwBKNABKQVBBTjQASjUA
-SkFQQU41AEpPAEpPUkRBTgBLWgBLQVpBS0hTVEFOAEtQAE5PUlRIIEtPUkVBAEtSAEtP
-UkVBIFJFUFVCTElDAEsyAEtPUkVBIFJFUFVCTElDMgBLVwBLVVdBSVQATFYATEFUVklB
-AExCAExFQkFOT04ATEkATElFQ0hURU5TVEVJTgBMVABMSVRIVUFOSUEATFUATFVYRU1C
-T1VSRwBNTwBNQUNBVQBNSwBNQUNFRE9OSUEATVkATUFMQVlTSUEATVgATUVYSUNPAE1D
-AE1PTkFDTwBNQQBNT1JPQ0NPAE5MAE5FVEhFUkxBTkRTAE5aAE5FVyBaRUFMQU5EAE5P
-AE5PUldBWQBPTQBPTUFOAFBLAFBBS0lTVEFOAFBBAFBBTkFNQQBQRQBQRVJVAFBIAFBI
-SUxJUFBJTkVTAFBMAFBPTEFORABQVABQT1JUVUdBTABQUgBQVUVSVE8gUklDTwBRQQBR
-QVRBUgBSTwBST01BTklBAFJVAFJVU1NJQQBTQQBTQVVESSBBUkFCSUEAU0cAU0lOR0FQ
-T1JFAFNLAFNMT1ZBSyBSRVBVQkxJQwBTSQBTTE9WRU5JQQBaQQBTT1VUSCBBRlJJQ0EA
-RVMAU1BBSU4AU0UAU1dFREVOAENIAFNXSVRaRVJMQU5EAFNZAFNZUklBAFRXAFRBSVdB
-TgBUSABUSEFJTEFORABUVABUUklOSURBRCAmIFRPQkFHTwBUTgBUVU5JU0lBAFRSAFRV
-UktFWQBVQQBVS1JBSU5FAEFFAFVOSVRFRCBBUkFCIEVNSVJBVEVTAEdCAFVOSVRFRCBL
-SU5HRE9NAFVTAFVOSVRFRCBTVEFURVMAVVkAVVJVR1VBWQBVWgBVWkJFS0lTVEFOAFZF
-AFZFTkVaVUVMQQBWTgBWSUVUIE5BTQBZRQBZRU1FTgBaVwBaSU1CQUJXRQAlczogcGh5
-Q250MSAweCV4LCByZXNldHRpbmcgY291bnRlciB2YWx1ZSB0byAweCV4CgAAJXM6IHBo
-eUNudDIgMHgleCwgcmVzZXR0aW5nIGNvdW50ZXIgdmFsdWUgdG8gMHgleAoAAAAAAAAw
-LjkuMTQuOQAAAAAAAAAABwAAAA4AAAAVAAAAHAAAACMAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAJBOIExEAiBPsExEAHhSCFA8AghTmFBIAXhVdFhQAXRbBFhQAwRba
-FhcAjBSgFLQUyBQ8FFAUZBR4FAAAMhRGFFoUbhQAAGwJhQmeCYoJqAkAAGwJhQmeCYoJ
-AABsCYUJngmKCQAAbAmFCZ4JigkAAHEWhRaZFq0WwRYAAFoUghSqFAAAgBaoFgAAfBWQ
-FaQVuBXMFeAV9BUIFhwWMBZEFgAAcQl2CXsJgAmPCZQJmQmjCQAAcQl2CXsJgAmPCZQJ
-mQkAAHEJdgl7CYAJjwmUCZkJAABxCXYJewmACY8JlAmZCQAAtAkAAIUJAAA8FFAUZBR4
-FAAAAAABAAAAagAAAAEAAAB8AAAABAAAAIYAAAAEAAAAkgAAAAQAAACcAAAABAAAAKYA
-AAABAAAAsAAAAAIAAAC8AAAAAgAAAMQAAAABAAAAygAAAAQAAADiAAAABAAAAPQAAAAE
-AAAABAEAAAQAAAAUAQAABAAAACQBAAAgAAAAKAEAADIURhRaFG4UAABaFIIUqhSAFqgW
-AAB8FZAVpBW4FcwV4BX0FQgWHBYwFkQWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AGAAAACoCQAAAQAAAKMJAAABAAAAtAkAAAEAAABnAAAAqAkAAAEAAACjCQAAAQAAALQJ
-AAABAAAAYQAAAKgJAAABAAAAowkAAAEAAAC0CQAAAQAAAGUAAACoCQAAAQAAAKMJAAAB
-AAAAtAkAAAEAAABKAAAAqAkAAAAAAACjCQAAAAAAALQJAAABAAAASwAAAKgJAAABAAAA
-owkAAAEAAAC0CQAAAQAAAGoAAACoCQAAAQAAAKMJAAABAAAAtAkAAAEAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8AEgAAAAAAAQLgLgoAmAIAAAAAAQJQRg4AJAIA
-AAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQAAAAAAQKAuwgAYAQAAAAAAQLw0gwAbAQAAAAA
+AAAADgAAABSrAQAZqwEAAKsBAASrAQAUqwEAFKsBAAirAQAMqwEAQVI1MjEwAEFSNTIx
+MQBBUjUyMTIAUkY1MTExAFJGNTExMgBSRjI0MTMAUkY1NDEzAEF0aGVyb3MgMjMxMyBX
+aVNvQwBBdGhlcm9zIDU0MjQAQXRoZXJvcyAyMzE3IFdpU29DAEF0aGVyb3MgNTIxMiAo
+RlBHQSkAQXRoZXJvcyA1MjExIChGUEdBKQBBdGhlcm9zIDUyMTAAQXRoZXJvcyA1MjEx
+AEF0aGVyb3MgNTMxMiBXaVNvQwBBdGhlcm9zIDIzMTUgV2lTb0MAQXRoZXJvcyA1MjEy
+AERCAERFQlVHAE5BAE5PX0NPVU5UUllfU0VUAEFMAEFMQkFOSUEARFoAQUxHRVJJQQBB
+UgBBUkdFTlRJTkEAQU0AQVJNRU5JQQBBVQBBVVNUUkFMSUEAQVQAQVVTVFJJQQBBWgBB
+WkVSQkFJSkFOAEJIAEJBSFJBSU4AQlkAQkVMQVJVUwBCRQBCRUxHSVVNAEJaAEJFTEla
+RQBCTwBCT0xWSUEAQlIAQlJBWklMAEJOAEJSVU5FSSBEQVJVU1NBTEFNAEJHAEJVTEdB
+UklBAENBAENBTkFEQQBDTABDSElMRQBDTgBDSElOQQBDTwBDT0xPTUJJQQBDUgBDT1NU
+QSBSSUNBAEhSAENST0FUSUEAQ1kAQ1lQUlVTAENaAENaRUNIIFJFUFVCTElDAERLAERF
+Tk1BUksARE8ARE9NSU5JQ0FOIFJFUFVCTElDAEVDAEVDVUFET1IARUcARUdZUFQAU1YA
+RUwgU0FMVkFET1IARUUARVNUT05JQQBGSQBGSU5MQU5EAEZSAEZSQU5DRQBGMgBGUkFO
+Q0VfUkVTAEdFAEdFT1JHSUEAREUAR0VSTUFOWQBHUgBHUkVFQ0UAR1QAR1VBVEVNQUxB
+AEhOAEhPTkRVUkFTAEhLAEhPTkcgS09ORwBIVQBIVU5HQVJZAElTAElDRUxBTkQASU4A
+SU5ESUEASUQASU5ET05FU0lBAElSAElSQU4ASUUASVJFTEFORABJTABJU1JBRUwASVQA
+SVRBTFkASlAASkFQQU4ASkFQQU4xAEpBUEFOMgBKQVBBTjMASkFQQU40AEpBUEFONQBK
+QVBBTjYASkFQQU43AEpBUEFOOABKQVBBTjkASkFQQU4xMABKQVBBTjExAEpBUEFOMTIA
+SkFQQU4xMwBKQVBBTjE0AEpBUEFOMTUASkFQQU4xNgBKQVBBTjE3AEpBUEFOMTgASkFQ
+QU4xOQBKQVBBTjIwAEpBUEFOMjEASkFQQU4yMgBKQVBBTjIzAEpBUEFOMjQASk8ASk9S
+REFOAEtaAEtBWkFLSFNUQU4AS1AATk9SVEggS09SRUEAS1IAS09SRUEgUkVQVUJMSUMA
+SzIAS09SRUEgUkVQVUJMSUMyAEszAEtPUkVBIFJFUFVCTElDMwBLVwBLVVdBSVQATFYA
+TEFUVklBAExCAExFQkFOT04ATEkATElFQ0hURU5TVEVJTgBMVABMSVRIVUFOSUEATFUA
+TFVYRU1CT1VSRwBNTwBNQUNBVQBNSwBNQUNFRE9OSUEATVkATUFMQVlTSUEATVQATUFM
+VEEATVgATUVYSUNPAE1DAE1PTkFDTwBNQQBNT1JPQ0NPAE5MAE5FVEhFUkxBTkRTAE5a
+AE5FVyBaRUFMQU5EAE5PAE5PUldBWQBPTQBPTUFOAFBLAFBBS0lTVEFOAFBBAFBBTkFN
+QQBQRQBQRVJVAFBIAFBISUxJUFBJTkVTAFBMAFBPTEFORABQVABQT1JUVUdBTABQUgBQ
+VUVSVE8gUklDTwBRQQBRQVRBUgBSTwBST01BTklBAFJVAFJVU1NJQQBTQQBTQVVESSBB
+UkFCSUEAU0cAU0lOR0FQT1JFAFNLAFNMT1ZBSyBSRVBVQkxJQwBTSQBTTE9WRU5JQQBa
+QQBTT1VUSCBBRlJJQ0EARVMAU1BBSU4AU0UAU1dFREVOAENIAFNXSVRaRVJMQU5EAFNZ
+AFNZUklBAFRXAFRBSVdBTgBUSABUSEFJTEFORABUVABUUklOSURBRCAmIFRPQkFHTwBU
+TgBUVU5JU0lBAFRSAFRVUktFWQBVQQBVS1JBSU5FAEFFAFVOSVRFRCBBUkFCIEVNSVJB
+VEVTAEdCAFVOSVRFRCBLSU5HRE9NAFVTAFVOSVRFRCBTVEFURVMAUFMAVU5JVEVEIFNU
+QVRFUyAoUFVCTElDIFNBRkVUWSkAVVkAVVJVR1VBWQBVWgBVWkJFS0lTVEFOAFZFAFZF
+TkVaVUVMQQBWTgBWSUVUIE5BTQBZRQBZRU1FTgBaVwBaSU1CQUJXRQAAAAAAAAAAAAAA
+AAAAAAAAMC45LjE3LjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAA4AAAAV
+AAAAHAAAACMAAAAqAAAAAAAAAAAA/wH/AQAAAAAAAAAAAAD/////////fwAAAAADAJgB
+mQEAAAAAAAAAAAAA/////////38AAAAABwCYATALAAAAAAAAAAAAAP////////9/AAAA
+AAgAmAEwDAAAAAAAAAAAAAD/////////fwAAAAAgACABEAoAAAAAAAAAAAAA////////
+/38AAAAAIQAgAZkBAAAAAAAAAAAAAP////////9/AAAAACIAIAEwDAAAAAAAAAAAAAD/
+////////fwAAAAA6AGABEAoAAAAAAAAAAAAA/////////38AAAAAOwBgAZkBAAAAAAAA
+AAAAAP////////9/AAAAABIAZQEQCgAAAwAAAAAAAAD/////////fwAAAAA3ADABmQEA
+AAMAAAAAAAAA/////////38AAAAANQAwApkBAAADAAAAAAAAAP////////9/AAAAADYA
+MAOZAQAAAwAAAAAAAAD/////////fwAAAAAwADAEmQEAAAMAAAAAAAAA/////////38A
+AAAAOQAwBZkBAAADAAAAAAAAAP////////9/AAAAADQAMAaZAQAAAwAAAAAAAAD/////
+////fwAAAAAyADADmQEAAAMAAAAAAAAA/////////38AAAAAMQAwA5kBAAAAAAAAAAAA
+AP////////9/AAAAABEAEAGZAQAAAAAAAAAAAAD/////////fwAAAAAQABABEAoAAAAA
+AAAAAAAA/////////38AAAAAUgBQAZkBAAAAAAAAAAAAAP////////9/AAAAAEUAUAKZ
+AQAAAAAAAAAAAAD/////////fwAAAABHAFADmQEAAAAAAAAAAAAA/////////38AAAAA
+QgBQBJkBAAAAAAAAAAAAAP////////9/AAAAAFgAUAWZAQAAAAAAAAAAAAD/////////
+fwAAAABbAFAGmQEAAAAAAAAAAAAA/////////38AAAAAXQBQCJkBAAAAAAAAAAAAAP//
+//////9/AAAAAF4AUAmZAQAAAAAAAAAAAAD/////////fwAAAABQAFADEAoAAAAAAAAA
+AAAA/////////38AAAAAVQBQATAMAAAAAAAAAAAAAP////////9/AAAAAFYAUAIwDAAA
+AAAAAAAAAAD/////////fwAAAABJAFACUA0AAAAAAAAAAAAA/////////38AAAAAQABA
+AUAKAABGAAAABAAAACgAAAAAAAAAiAEAAEEAQAFACgAARwAAAAQAAABoAAAAAAAAAIkB
+AABIAEABEAoAAEYAAAAEAAAACAAAAAAAAACKAQAASgBAAUAKAABGAAAABAAAAAgYAAAA
+AAAAjAEAAEsAQAFACgAARgAAAAQAAAAIYAAAAAAAAI0BAABMAEABUAoAAEYAAAAEAAAA
+CAAAAAAAAACPAQAAQwBAAkAKAABHAAAABAAAAHAAAAAAAAAAiwEAAPAAQANACgAARgAA
+AAQAAAAgAAAAAAAAAAAAAACAAEADQAoAAEcAAAAEAAAAYAAAAAAAAACnDwAA8QBAA0AK
+AABGAAAABAAAAAAYAAAAAAAAAAAAAIEAQANACgAARgAAAAQAAAAAYAAAAAAAAKgPAACC
+AEADUAoAAEYAAAAEAAAAAAAAAAAAAACpDwAA8gBAAxAKAABGAAAABAAAAAAAAAAAAAAA
+AAAAAIMAQARACgAARwAAAAQAAABggAAAAAAAAKoPAAD0AEAEQAoAAEYAAAAEAAAAAJgA
+AAAAAAAAAAAAhABABEAKAABGAAAABAAAAADgAAAAAAAAqw8AAIUAQARQCgAARgAAAAQA
+AAAAgAAAAAAAAKwPAAD1AEAEEAoAAEYAAAAEAAAAAIAAAAAAAAAAAAAAhgBABUAKAABH
+AAAABAAAAGCAAAAAAAAArQ8AAIcAQAVACgAARgAAAAQAAAAA4AAAAAAAAK4PAACIAEAF
+UAoAAEYAAAAEAAAAAIAAAAAAAACvDwAAiQBABkAKAABHAAAABAAAAGgAAAAAAAAAsA8A
+AIoAQAZACgAARgAAAAQAAAAIYAAAAAAAALEPAACLAEAGUAoAAEYAAAAEAAAACAAAAAAA
+AACyDwAAjABAB0AKAABHAAAABAAAAGiAAAAAAAAAsw8AAI0AQAdACgAARgAAAAQAAAAI
+4AAAAAAAALQPAACOAEAHUAoAAEYAAAAEAAAACIAAAAAAAAC1DwAAjwBACEAKAABHAAAA
+BAAAAGiAAAAAAAAAtg8AAJAAQAhACgAARgAAAAQAAAAI4AAAAAAAALcPAACRAEAIUAoA
+AEYAAAAEAAAACIAAAAAAAAC4DwAA9gBACUAKAABHAAAABAAAAGCAAAAAAAAAAAAAAPcA
+QAtACgAARwAAAAQAAABggAAAAAAAAAAAAABgAGAAYAAAAAAAAAAAAAAA/////////38A
+AAAAYQBhAGEAAAADAAAAAAAAAP////////9/AAAAAGIAYgBiAAAAAgAAAAAAAAD/////
+////fwAAAABjAGMAYwAAAAAAAAAAAAAA/////////38AAAAAZABkAGQAAAADAAAAAAAA
+AP////////9/AAAAAGUAZQBlAAAAAwAAAAAAAAD/////////fwAAAABmAGYAZgAAAAAA
+AAAAAAAA/////////38AAAAAZwBnAGcAAAAAAAAAAAAAAP////////9/AAAAAGgAaABo
+AAAAAAAAAAAAAAD/////////fwAAAABpAGkAaQAAAAMAAAAAAAAA/////////38AAAAA
+agBqAGoAAAADAAAAAAAAAP////////9/AAAAAAAAAAAAAAAAAAAAAGUAAAABAAAA////
+/4AAAAD/////AAAAAEpQAAC0DwAAAAAAAGoAAAABAAAA/////4AAAAD/////AAAAAEpQ
+AAC0DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BAADZAAAA3AAAAAEAAAAB
+AAAAAQAAAFgbAAAAABAA4gAAAOUAAAABAAAAAQAAAAEAAABYGwAACAADAPQAAAD3AAAA
+AQAAAAAAAAABAAAAWBsAAAwAAwD/AAAAAgEAAAEAAAAAAAAAAQAAAFgbAAAgAEcACgEA
+AA0BAAAAAAAAAAAAAAAAAABYGwAAMwAwABcBAAAaAQAAAQAAAAAAAAABAAAAWBsAACQA
+IQAiAQAAJQEAAAEAAAABAAAAAQAAAFgbAAAoADcALwEAADIBAAABAAAAAAAAAAEAAABY
+GwAAHwAwADoBAAA9AQAAAQAAAAEAAAABAAAAWBsAADAAWwBIAQAASwEAAAEAAAAAAAAA
+AQAAAFgbAABwAAMAUwEAAFYBAAABAAAAAAAAAAEAAABYGwAAOAA3AF4BAABhAQAAAQAA
+AAAAAAABAAAAWBsAAFQAVQBpAQAAbAEAAAEAAAABAAAAAQAAAFgbAABEAFUAcwEAAHYB
+AAABAAAAAQAAAAEAAABYGwAATAA7AH0BAACAAQAAAQAAAAAAAAAAAAAAWBsAAGAAUgCH
+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
+AAAAPBR4FBQAFBQAAAAAAAAAAAUAAAAAAAAAAAAAADwUeBQXABQUAAAAAAAAAAAFAAAA
+AAAAAAAAAAA8FHgUFwYUFAAAAAAAAAAAAQAAAAAAAAAAAAAAPBTIFBQGFBQCAAAAAAAA
+AAQAAAAAAAAAAAAAAHgUoBQXABQUAQAAAAAAAAAFAAAAAAAAAAAAAACMFKAUFwAUFAMA
+AAAAAAAABQAAAAAAAAAAAAAAjBTIFBIAFBQDAAAAAAAAAAUAAAAAAAAAAAAAAIwUyBQU
+ABQUBwAAAAAAAAAFgAAAAAAAAAAAAACMFMgUFAYUFAMAAAAAAAAAAQAAAAAAAAACAAAA
+jBTIFBcGFBQDAAAAAAAAAAEAAAAAAAAAAgAAAIwUyBQXBhQUAwAAAAAAAAABAAAAAAAA
+AAAAAACMFMgUHgAUFAAAAAAAAAAAAAAAAAAAAAAAAAAAjBREFgUGFBQDAAAAAAAAAAAA
+AAAAAAAAAAAAAKAUyBQRBhQUAwAAAAAAAAABAAAAAAAAAAAAAAB8FfQVHgYUFAIAAAAA
+AAAABAAAAAAAAAAAAAAAfBVEFhQGFBQDAAAAAAAAAAEAAAAAAAAABAAAAHwVRBYbABQU
+AwAAAAAAAAAFAAAAAAAAAAAAAAB8FUQWHgAUFAMAAAAAAAAABQAAAAAAAAAAAAAAfBVE
+FhcAFBQHAAAAAAAAAAGAAAAAAAAAAAAAAHEWrRYXABQUAAAAAAAAAAAAAAAAAAAAAAAA
+AABxFq0WHgYUFAAAAAAAAAAAAAAAAAAAAAAAAAAAcRatFh4GFBQCAAAAAAAAAAQAAAAA
+AAAAAAAAAHEWwRYFBhQUAAAAAAAAAAAAAAAAAAAAAAAAAABxFsEWEQAUFAAAAAAAAAAA
+AAAAAAAAAAAAAAAAcRbBFhQAFBQAAAAAAAAAAAAAAAAAAAAAAAAAAHEWwRYeABQUAAAA
+AAAAAAAAAAAAAAAAAAAAAABxFsEWHgYUFAAAAAAAAAAAAAAAAAAAAAADAAAAcRbBFh4G
+FBQAAAAAAAAAAAAAAAAAAAAAAAAAADgTdBMeABQUAAAAAAAAAAAABAAAAAAAAAAAAACw
+E9gTHgAUFAAAAAAAAAAAAAQAAAAAAAAAAAAAMhRuFB4AFBQDAAAAAAAAAAAEAAAAAAAA
+AAAAADwUeBQeABQUAwAAAAAAAAAABAAAAAAAAAAAAACMFMgUHgAUFAMAAAAAAAAAAAQA
+AAAAAAAAAAAAcRbBFh4AFBQAAAAAAAAAAAAEAAAAAAAAAAAAAHwVRBYeABQUAwAAAAAA
+AAAABAAAAAAAAAAAAAAAAAAAAAAAAAoUWhQFBigoAAAAAAAAAAAAAAAAAAAAAAAAAACC
+FNIUBQYoKAEAAAAAAAAAAAAAAAAAAAAAAAAA+hRyFQUGKCgAAAAAAAAAAAAAAAAAAAAA
+AAAAAJoVEhYFBigoAQAAAAAAAAAAAAAAAAAAAAAAAAAeFEYUBQYoKAAAAAAAAAAAAAAA
+AAAAAAAAAAAAbhS+FAUGKCgBAAAAAAAAAAAAAAAAAAAAAAAAAOYUXhUFBigoAAAAAAAA
+AAAAAAAAAAAAAAAAAACGFSYWBQYoKAEAAAAAAAAAAAAAAAAAAAAAAAAAUBR4FBEGKCgA
+AAAAAAAAAAAAAAAAAAAAAAAAAFAUeBQXBigoAAAAAAAAAAAAAAAAAAAAAAAAAABaFFoU
+EQYoKAAAAAAAAAAAAAAAAAAAAAAAAAAAWhRaFBcAKCgAAAAAAAAAAAAAAAAAAAAAAAAA
+AKAUoBQXBigoAQAAAAAAAAACAAAAAAAAAAAAAACgFKAUFAYoKAEAAAAAAAAAAgAAAAAA
+AAAAAAAAghSCFBEAKCgBAAAAAAAAAAIAAAAAAAAAAAAAAKoUqhQUACgoAQAAAAAAAAAC
+AAAAAAAAAAAAAACCFKoUFAAoKAEAAAAAAAAAAgAAAAAAAAAAAAAAghSqFBcGKCgBAAAA
+AAAAAAIAAAAAAAAAAAAAAKQVHBYUBigoAQAAAAAAAAACAAAAAAAAAAAAAACAFqgWFAAo
+KAAAAAAAAAAAAAAAAAAAAAAAAAAAgBaoFh4GKCgAAAAAAAAAAAAAAAAAAAAAAAAAAIUW
+rRYeBigoAAAAAAAAAAAAAAAAAAAAAAAAAABaFIIUDwAoKAMAAAAAAAAAAAQAAAAAAAAA
+AAAAqhSqFBIAKCgDAAAAAAAAAAAEAAAAAAAAAAAAAKQVHBYUACgoAwAAAAAAAAAABAAA
+AAAAAAAAAACAFqgWFAAoKAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAICUQJBQYU
+BQAAAAAAAAAAAAAAAAAAAAAAAAAACAlECRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAGwJ
+qAkFBhQFAAAAAAAAAAAAAAAAAAAAAAAAAABsCagJFAAUBQAAAAAAAAAAIAAAAAAAAAAA
+AAAAbAmoCR4AFAUAAAAAAAAAAAAAAAAAAAAAAAAAAGwJngkbBhQFAAAAAAAAAAAAAAAA
+AAAAAAAAAABsCZ4JFAAUBQAAAAAAAAAAIAAAAAAAAAAAAAAAgAmKCRQAFAUAAAAAAAAA
+AAAAAAAAAAAAAAAAAJkJqAkUABQFAAAAAAAAAAAAAAAAAAAAAAAAAACjCagJFAAUBQAA
+AAAAAAAAICAAAAAAAAAAAAAAtAm0CQUGFAUAAAAAAAAAAAAAAAAAAAAAAAAAALQJtAkU
+ABQFAAAAAAAAAAAgKAAAAAAAAAAAAADQCawKBQYUBQAAAAAAAAAAAAAAAAAAAAAAAAAA
+CAlECRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAGwJbAkUABQFAAAAAAAAAAAAAAAAAAAA
+AAAAAABxCYAJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAhQmKCRQAFAUAAAAAAAAAAAAA
+AAAAAAAAAAAAAI8JmQkUABQFAAAAAAAAAAAAAAAAAAAAAAAAAACeCZ4JFAAUBQAAAAAA
+AAAAAAAAAAAAAAAAAAAAowmjCRQAFAUAAAAAAAAAAAAEAAAAAACAAAAAAKMJowkUABQF
+AAAAAAAAAAAAAAAAAAAAgAAAAACoCagJFAAUBQAAAAAAAAAAAAQAAAAAAIAAAAAAqAmo
+CRQAFAUAAAAAAAAAAAAAAAAAAACAAAAAALQJtAkUABQFAAAAAAAAAAAABAAAAAAAgAAA
+AAC0CbQJFAAUBQAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAgJRAkFBhQFAAAAAAAAAAAA
+AAAAAAAAAAAAAAAICUQJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAbAmoCQUGFAUAAAAA
+AAAAAAAAAAAAAAAAAAAAAGwJqAkUABQFAAAAAAAAAABAAAAAAAAAAAAAAABsCagJHgAU
+BQAAAAAAAAAAAAAAAAAAAAAAAAAAbAmeCRsGFAUAAAAAAAAAAAAAAAAAAAAAAAAAAGwJ
+ngkUABQFAAAAAAAAAABAAAAAAAAAAAAAAACACYoJFAAUBQAAAAAAAAAAAAAAAAAAAAAA
+AAAAmQmoCRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAANAJrAoFBhQFAAAAAAAAAAAAAAAA
+AAAAAAAAAACjCagJFAAUBQAAAAAAAAAAICAAAAAAAAAAAAAACAlECRQAFAUAAAAAAAAA
+AAAAAAAAAAAAAAAAAGwJbAkUABQFAAAAAAAAAAAAAAAAAAAAAAAAAABxCYAJFAAUBQAA
+AAAAAAAAAAAAAAAAAAAAAAAAhQmKCRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAI8JmQkU
+ABQFAAAAAAAAAAAAAAAAAAAAAAAAAACeCZ4JFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAA
+owmjCRQAFAUAAAAAAAAAAAAEAAAAAACAAAAAAKMJowkUABQFAAAAAAAAAAAAAAAAAAAA
+gAAAAACoCagJFAAUBQAAAAAAAAAAAAQAAAAAAIAAAAAAqAmoCRQAFAUAAAAAAAAAAAAA
+AAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAlECQUGKCgAAAAAAAAAAAAAAAAA
+AAAAAAAAAIUJhQkFBigoAAAAAAAAAAAAAAAAAAAAAAAAAACFCYUJFAYoKAAAAAAAAAAA
+AAAAAAAAAAAAAAAAhQmFCRIGKCgAAAAAAAAAAAAEAAAAAAAAAAAAANAJrAoFBigoAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BEAABAAAAAAAAAAAA
+AAAAAAAAAAAAAAACAAggAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAABEkAAAAAAAA
+AAAAAAAAAAUUAAAAAAAAAAAAAAAAAAAFAgAAAAAAAAAAAAAAAAAAEwAAAAAAAAAAAAAA
+AAAAAFABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFADEAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAABAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAFAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAGMAACAAAA
+AAAAAAMAAAAAAAAAAAAAAACAQACAAAAAAAAAAAAAAAAACAkAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAFAIMAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAQAAQAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAJMAACAAAAAAAAAAQAAAAAAAAAAwAA
+AAAABCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABMAAC
+AAAAAAAAAAQAAAAAAAAAAwAAAACAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAADACMAACAAAAAAAAAAQAAAAAAAAAAwAAAABAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADADMAACAAAAAAAAAAQAAAAAAAAA
+AwAAAACAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAE
+MAACAAAAAAAAAAQAAAAAAAAAAwAAAABAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAADAFMAACAAAAAAAAAAQAAAAAAAAAAwAAAAAQAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGMAACAAAAAAAAAAQAAAAA
+AAAAAwAAAAAAEQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ABABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAEAAgAAAAAAAAAAAAAABBIAAAAAAAAA
+AAAAAAAAABEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAACABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIABAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGABEAABAAAAAAAAAAMA
+AAAAAAAAAAAAAAAggEAAAgAAAAAAAAAAAAAAxBAAAAAAAAAAAAAAAAAAACEEAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAGUBEAABAAAAAAAAAAMAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABQAAAAAAAAAAAAAgAAAAAAAAAAgAAAAAEAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACQAAAAAAAAAAA
+ABAAAAAAAAAAAgAAAMcFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAEADQAAAAAAAAAAAAACAAAAAAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEQAAEAAAAAAAAAACAAAAAAAAAAgAAAACA
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFQAAEAAAA
+AAAAAACAAAAAAAAAAgAAAACAQAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAEAGQAAAAAAAAAAAAAgAAAAAAAAAAgAAAACIAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAHQAAEAAAAAAAAAAiAAAAAAAAAAgAA
+AACEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIQAAE
+AAAAAAAAAAiAAAAAAAAAAgAAAACEQAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAEAJQAAAAAAAAAAAAACAAAAAAAAAAgAAAMeBAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEALQAAEAAAAAAAAAACAAAAAAAAA
+AgAAAMeBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAN
+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAADAK/wAAAAAAAAAAAIAAAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA
+AAAAAQAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADALMAAAAAAAAAAAAAABAAAA
+AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAA
+ADAMMAAAAAAAAAAAAAACAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAA
+AAAABAAAAAAAAAAAAAAAAAAAABAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA
+AAAAAAAgAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEAKQAAAAAAAAAAAAGB4
+AAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAEAKAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAA
+AAAAAFAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAA
+AAAAAAAABAAAAAAAAAAAAAAAAAAAAJkBMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA
+AAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAGAA/wADAAAAAAAA
+AAAEAAAAAAAACAAAAAAAAAAA4AMAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAADArwAAAAAAAAAAAAAAAAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAA
+AAAAAAAAAGYA/wADAAAAAAAAAAAEAAAAAAAACAAAAAAAAAAA4AMAAAAAAAAAAAAAAMAC
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAA8AEAAAAA
+AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGcA/wADAAAAAAAAAAAEAAAAAAAACAAAAAAA
+AAAA4AMAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADALwAA
+AAAAAAAAAAAAAAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGgA/wADAAAA
+AAAAAAAEAAAAAAAACAAAAAAAAAAA4AMAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAADAVwAAAAAAAAAAAAAAAAAA8BUAAAAAAAAAAAAAAAAACAAAAAAA
+AAAAAAAAAAAAAGEA/wADAAAAAAAAAAAEAAAAAAAAEAAAAAAAAAAA4AMAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADArwAAAAAAAAAAAAAAAAAA8AsA
+AAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGIA/wADAAAAAAAAAAAEAAAAAAAAEAAA
+AAAAAAAA4AMAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA
+rwAAAAAAAAAAAAAAAAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGMA/wAD
+AAAAAAAAAAAEAAAAAAAACAAAAAAAAAAA4AEAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAADALwAAAAAAAAAAAAAAAAAA8AsAAAAAAAAAAAAAAAAACAAA
+AAAAAAAAAAAAAAAAAGQA/wADAAAAAAAAAAAEAAAAAAAAEAAAAAAAAAAAwAEAAAAAAAAA
+AAAAAMACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAA
+8AEAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGUA/wADAAAAAAAAAAAEAAAAAAAA
+EAAAAAAAAAAAwAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AADALwAAAAAAAAAAAAAAAAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGkA
+/wADAAAAAAAAAAAEAAAAAAAAEAAAAAAAAAAAwAMAAAAAAAAAAAAAAMACAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAA8AEAAAAAAAAAAAAAAAAA
+CAAAAAAAAAAAAAAAAAAAAGoA/wADAAAAAAAAAAAEAAAAAAAAEAAAAAAAAAAAwAMAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADALwAAAAAAAAAAAAAA
+AAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAJgB/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAQADwAPMAiIHwAPMAQQCAAIMAiYGAAIMASADyAPUAioHyAPUAQwD2APcA
+i4H2APcASgDxAPQAjIHxAPQASwCBAIQAjYGBAIQATACCAIUAj4GCAIUAAAAAAAAAAAAA
+AAAAiAHwAPMAiQGAAIMAigHyAPUAiwH2APcAjAHxAPQAjQGBAIQAjwGCAIUAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAECcBcLAIwAAAAAAAECKCMPABIAAAAAAAEC4C4KAJgCAAAAAAECUEYOACQCAAAAAAEC
+wF0JALAEAAAAAAECoIwNAEgEAAAAAAECgLsIAGAEAAAAAAEC8NIMAGwEAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDcBcL
-AIwAAAAAAAEDKCMPABIAAAAAAAED4C4KAJgCAAAAAAEDUEYOACQCAAAAAAEDwF0JALAE
-AAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAEAAAAAAED8NIMAGwEAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA3AXCwCMAAAA
+AAABAygjDwASAAAAAAABA+AuCgCYAgAAAAABA1BGDgAkAgAAAAABA8BdCQCwBAAAAAAB
+A6CMDQBIBAAAAAABA4C7CABgBAAAAAABA/DSDABsBAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAnAXCwCMAAAAAAABAigj
-DwASAAAAAAABAuAuCgCYAgAAAAABAlBGDgAkAgAAAAABAsBdCQCwBAAAAAABAqCMDQBI
-BAAAAAABAoC7CABgBAAAAAABAvDSDABsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8AEgAA
+AAAAAQLgLgoAmAIAAAAAAQJQRg4AJAIAAAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQAAAAA
+AQKAuwgAYAQAAAAAAQLw0gwAbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMPABIAAAAAAAED4C4KAJgC
+AAAAAAEDUEYOACQCAAAAAAEDwF0JALAEAAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAEAAAA
+AAED8NIMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNwFwsAjAAAAAAAAQMoIw8AEgAAAAAAAQPg
-LgoAmAIAAAAAAQNQRg4AJAIAAAAAAQPAXQkAsAQAAAAAAQOgjA0ASAQAAAAAAQOAuwgA
-YAQAAAAAAQPw0gwAbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAABAOgDCwCCAAAAAAABANAHCgSEAQAAAAABAHwVCQSLAQAAAAABAPgqCASW
+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAEA6AMLAIIAAAAAAAEA0AcKBIQBAAAAAAEAfBUJBIsBAAAAAAEA
-+CoIBJYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAABKIAAAAAAAAAAAAACKIAAEZGPlBGRj5QDKIAAGxBgGRsQYBkEKIA
+AAOgmQEDoJkBFKIAABDWTAQQ1kwEGKIAAEAAgBNAAIATHKIAAGAA4BtgAOAbIKIAAAqA
+UwwKgFMMJKIAADvfFAA73xQAKKIAALUBAAC1AQAALKIAACAAAAAgAAAAnJgAAAAAAAAA
+AAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAA
+nJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgA
+AAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAOAAAADgAnJgAAAAAAAAAAAAAnJgAAAAA
+AAAAAAAAnJgAAAAAAAAAAAAAnJgAAPkABAD5AAQA1JgAAAAAAAAEAAAAAAAAAAAAAAAA
+AAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAA
+AAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAQAAAAEJyYAAAAAAAEAAAABJyYAAAAAAAAAAAA
+AJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAACpyYAACAADgAgAA4ApyY
+AAAGAAIABgAAAJyYAACSAAAAkgAAAJyYAACgAAAAoAAAAJyYAAAHAAQABwAEANSYAAAa
+AAAAGgAAAJyYAABIAAAASAAAAJyYAAAQAAAAEAAAAJyYAAAIAAAACAAAAJyYAAAPAAAA
+DwAAAJyYAADyAAAAYgAAAJyYAABPkAAATJAAAJyYAABaEgAAmhIAAMyYAAAOAAAADwAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8AEgAAAAAAAQLgLgoAmAIAAAAAAQJQRg4AJAIA
+AAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQAAAAAAQKAuwgAYAQAAAAAAQLw0gwAbAQAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAEogAAAAAAAAAAAAAIogAARkY+UEZGPlAMogAAbEGAZGxB
-gGQQogAAA6CZAQOgmQEUogAAENZMBBDWTAQYogAAQACAE0AAgBMcogAAYADgG2AA4Bsg
-ogAACoBTDAqAUwwkogAAO98UADvfFAAoogAAtQEAALUBAAAsogAAIAAAACAAAACcmAAA
-AAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAAA
-AAAAAACcmAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAAAAAAA
-AACcmAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAA4AAAAOACcmAAAAAAAAAAAAACc
-mAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAA+QAEAPkABADUmAAAAAAAAAQAAAAAAAAA
-AAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgA
-AAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAABAAAAAQnJgAAAAAAAQAAAAEnJgAAAAA
-AAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAKnJgAAIAAOACA
-ADgCnJgAAAYAAgAGAAAAnJgAAJIAAACSAAAAnJgAAKAAAACgAAAAnJgAAAcABAAHAAQA
-1JgAABoAAAAaAAAAnJgAAEgAAABIAAAAnJgAABAAAAAQAAAAnJgAAAgAAAAIAAAAnJgA
-AA8AAAAPAAAAnJgAAPIAAABiAAAAnJgAAE+QAABMkAAAnJgAAFoSAACaEgAAzJgAAA4A
-AAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAABAnAXCwCMAAAAAAABAigjDwASAAAAAAABAuAuCgCYAgAAAAABAlBG
-DgAkAgAAAAABAsBdCQCwBAAAAAABAqCMDQBIBAAAAAABAoC7CABgBAAAAAABAvDSDABs
-BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECuAsL
+AIYAAAAAAAEClBEPAAkAAAAAAAECcBcKAIwCAAAAAAECKCMOABICAAAAAAEC4C4JAJgE
+AAAAAAECUEYNACQEAAAAAAECwF0IADAEAAAAAAECeGkMADYEAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AQNwFwsAjAAAAAAAAQMoIw8AEgAAAAAAAQPgLgoAmAIAAAAAAQNQRg4AJAIAAAAAAQPA
-XQkAsAQAAAAAAQOgjA0ASAQAAAAAAQOAuwgAYAQAAAAAAQPw0gwAbAQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtwFCwCDAAAAAAABAsoI
+DwAEAAAAAAABArgLCgCGAgAAAAABApQRDgAJAgAAAAABAnAXCQCMBAAAAAABAigjDQAS
+BAAAAAABAuAuCAAYBAAAAAABArw0DAAbBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA6AMbAIIAAAAA
-AAEA0AcaBIQBAAAAAAEAfBUZBIsBAAAAAAEA+CoYBJYBAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNwFwsAjAAAAAAAAQPgLgoAmAIAAAAAAQNQ
+Rg4AJAIAAAAAAQPAXQkAsAMAAAAAAQOgjA0ASAMAAAAAAQOAuwgAYAMAAAAAAQPw0gwA
+bAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAOgDGwACAAAAAAABANAHGgQEAQAA
-AAABAHwVGQQLAgAAAAABAPgqGAQWAwAAAAAAAnAXCwAMBAAAAAAAAigjDwASBAAAAAAB
-AuAuCgAYBgAAAAABAlBGDgAkBgAAAAABAsBdCQAwCAAAAAABAqCMDQBICAAAAAABAoC7
-CABgCAAAAAABAvDSDABsCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAQT0AQcAgQAAAAAAAQToAwIAiwEAAAAAAQTQBwYAlgIA
-AAAAAQS4CwEAlgMAAAAAAQJwFwsAjAQAAAAAAQIoIw8AEgQAAAAAAQLgLgoAmAYAAAAA
-AQJQRg4AJAYAAAAAAQLAXQkAsAgAAAAAAQKgjA0ASAgAAAAAAQKAuwgAYAgAAAAAAQLw
-0gwAbAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-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
-KSAzLjQuMiBbRnJlZUJTRF0gMjAwNDA3MjgAAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0
-YWIALnJlbC50ZXh0AC5yZWwucm9kYXRhAC5yb2RhdGEuc3RyMS4xAC5yb2RhdGEuc3Ry
-MS40AC5yZWwuZGF0YQAuYnNzAC5jb21tZW50AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAB8AAAABAAAABgAAAAAAAAA0AAAAYmwBAAAAAAAAAAAA
-BAAAAAAAAAAbAAAACQAAAAAAAAAAAAAAZDICAPAWAAAMAAAAAQAAAAQAAAAIAAAAKQAA
-AAEAAAACAAAAAAAAAKBsAQAIdwAAAAAAAAAAAAAgAAAAAAAAACUAAAAJAAAAAAAAAAAA
-AABUSQIAEBkAAAwAAAADAAAABAAAAAgAAAAxAAAAAQAAADIAAAAAAAAAqOMBAMwFAAAA
-AAAAAAAAAAEAAAABAAAAQAAAAAEAAAAyAAAAAAAAAHTpAQBnAAAAAAAAAAAAAAAEAAAA
-AQAAAFMAAAABAAAAAwAAAAAAAADg6QEA5BYAAAAAAAAAAAAAIAAAAAAAAABPAAAACQAA
-AAAAAAAAAAAAZGICALAAAAAMAAAABwAAAAQAAAAIAAAAWQAAAAgAAAADAAAAAAAAAOAA
-AgCwAQAAAAAAAAAAAAAgAAAAAAAAAF4AAAABAAAAAAAAAAAAAADgAAIAywYAAAAAAAAA
-AAAAAQAAAAAAAAARAAAAAwAAAAAAAAAAAAAAqwcCAGcAAAAAAAAAAAAAAAEAAAAAAAAA
-AQAAAAIAAAAAAAAAAAAAAEQKAgCgFwAADQAAAAgAAAAEAAAAEAAAAAkAAAADAAAAAAAA
-AAAAAADkIQIAgBAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAwABAAAAAAAAAAAAAAAAAAMAAwAAAAAAAAAAAAAAAAADAAUAAAAAAAAAAAAA
-AAAAAwAGAAAAAAAAAAAAAAAAAAMABwAAAAAAAAAAAAAAAAADAAkAAAAAAAAAAAAAAAAA
-AwAKAAEAAADQiQAAqAAAABIAAQAMAAAARHsAAAYAAAASAAEAFwAAAJDvAAC7AAAAEgAB
-ACIAAABwYQAAdAAAABIAAQAtAAAA/OUAAI8AAAASAAEAOAAAAHRXAADbAAAAEgABAEMA
-AACoMwEA5AAAABIAAQBOAAAA4AIAAKQBAAARAAcAWQAAADjzAAAjAAAAEgABAGQAAABo
-WQAAMQAAABIAAQBvAAAAlE4AADwAAAASAAEAegAAAITsAAAlAAAAEgABAIUAAABU6QAA
-EwAAABIAAQCQAAAA2N8AAAwAAAASAAEAmwAAAPjNAAC6AAAAEgABAKYAAAB81gAA5QAA
-ABIAAQCxAAAAXAgAADwAAAASAAEAvAAAAITCAACWAAAAEgABAMcAAAA0rQAAiwAAABIA
-AQDSAAAAHJsAAAsAAAASAAEA3QAAABh/AAAlAAAAEgABAOgAAAAg8gAABgAAABIAAQDz
-AAAAjM0AAAYAAAASAAEA/gAAAEjeAAAXAAAAEgABAAkBAABY/gAAewAAABIAAQAUAQAA
-DAYAAHUAAAASAAEAHwEAAAyNAAAGAAAAEgABACoBAADIJgEAdQAAABIAAQA1AQAACIIA
-AAYAAAASAAEAQAEAACibAAAPAAAAEgABAEsBAABADgAApAEAABEABwBWAQAAPOsAAHQA
-AAASAAEAYQEAAAyAAABuAAAAEgABAGwBAAC8AgAALAAAABIAAQB3AQAAuCgBAFgAAAAS
-AAEAggEAAKirAAAhAAAAEgABAI0BAAAAAAAAAAAAABAAAACuAQAAiF4AAEEAAAASAAEA
-uQEAAPTEAACWAAAAEgABAMQBAABYYAAAJAAAABIAAQDPAQAA6JIAAEgAAAASAAEA2gEA
-AByWAAB4AAAAEgABAOUBAADIxQAAOQAAABIAAQDwAQAAEIIAAGEAAAASAAEA+wEAAMhd
-AAAzAAAAEgABAAYCAACIewAAOQAAABIAAQARAgAAZJgAAEoAAAASAAEAHAIAALDrAAAg
-AAAAEgABACcCAAC86gAAYAAAABIAAQAyAgAA6P4AADcAAAASAAEAPQIAALjOAABXAAAA
-EgABAEgCAABgWQAABgAAABIAAQBTAgAA0OsAAHgAAAASAAEAXgIAAAhQAADIBQAAEgAB
-AGkCAAAIlwAAHgEAABIAAQB0AgAAqOcAACYAAAASAAEAfwIAAGgCAABTAAAAEgABAIoC
-AAAc6wAAIAAAABIAAQCVAgAAvBcBAAIBAAASAAEAoAIAABjyAAAGAAAAEgABAKsCAABg
-3QAALAAAABIAAQC2AgAAnM8AAPEAAAASAAEAwQIAAABgAAAZAAAAEgABAMwCAABIjQAA
-mwAAABIAAQDXAgAAvJEAAHsAAAASAAEA4gIAAKR6AAAhAAAAEgABAO0CAABMHAEAiAAA
-ABIAAQD4AgAAhHAAAPIBAAASAAEAAwMAAKhiAAABAAAAEgABAA4DAADUHAEASAAAABIA
-AQAZAwAA4HwAADUCAAASAAEAJAMAABgBAABQAQAAEgABADMDAACsCQEA5gIAABIAAQA+
-AwAAKPIAAIcAAAASAAEASQMAANyWAAARAAAAEgABAFQDAAAUGwEAOAEAABIAAQBfAwAA
-4O0AAM4AAAASAAEAagMAALzyAAAPAAAAEgABAHUDAAAAlAAADgAAABIAAQCAAwAABMYA
-AN8AAAASAAEAiwMAAIzFAAA5AAAAEgABAJYDAAAIpwAAUwAAABIAAQChAwAA0FUAABAA
-AAASAAEArAMAABxgAAA7AAAAEgABALcDAADoAgAAKAEAABIAAQDNAwAAIAMBACEAAAAS
-AAEA2AMAAHSCAACWAAAAEgABAOMDAABQYQAAIAAAABIAAQDuAwAA5IsAABYAAAASAAEA
-+QMAANT+AAASAAAAEgABAAQEAACgswAAKgAAABIAAQAPBAAAnOEAAIIDAAASAAEAGgQA
-ACjfAAALAAAAEgABACUEAAA4WgAAiAAAABIAAQAwBAAAxIoAADgAAAASAAEAOwQAANwq
-AQA9AAAAEgABAEYEAAAY4AAA+AAAABIAAQBRBAAAwJYAAAEAAAASAAEAXAQAACBeAABl
-AAAAEgABAGcEAAAwkQAAiwAAABIAAQByBAAAlMQAAF8AAAASAAEAfQQAAJDQAACnBQAA
-EgABAIgEAABsGgEApgAAABIAAQCTBAAANOkAAAYAAAASAAEAngQAAECQAAAhAAAAEgAB
-AKkEAADU8wAAVwAAABIAAQC0BAAAbCUBAPUAAAASAAEAvwQAAJicAABFAAAAEgABAMoE
-AAA4XQAAKQAAABIAAQDVBAAASOwAACMAAAASAAEA4AQAADjWAABBAAAAEgABAOsEAAAM
-zAAAHwAAABIAAQD2BAAAECkBAD4AAAASAAEAAQUAABDyAAAGAAAAEgABAAwFAAAAAAAA
-AAAAABAAAAAZBQAAgHwAAGAAAAASAAEAJAUAABhnAABFAAAAEgABAC8FAACwKQEACwAA
-ABIAAQA6BQAABOgAAHcAAAASAAEARQUAAGwEAADFAAAAEgABAFYFAABUHwEA8wMAABIA
-AQBhBQAAfGAAAEQAAAASAAEAbAUAALCAAACPAAAAEgABAHcFAABo6QAAEQAAABIAAQCC
-BQAAjDQBAHEAAAASAAEAjQUAAJBmAABXAAAAEgABAJgFAAAUjQAAMQAAABIAAQCjBQAA
-FKkAACABAAASAAEArgUAAMh6AAB5AAAAEgABALkFAAAAEAAApAEAABEABwDEBQAArPQA
-ADgAAAASAAEAzwUAAEzwAAAsAAAAEgABANoFAAB4igAASgAAABIAAQDlBQAA4JwAAOUA
-AAASAAEA8AUAAKzsAAA0AQAAEgABAPsFAAAMlQAAXAAAABIAAQAGBgAAyJYAABMAAAAS
-AAEAEQYAALDuAADgAAAAEgABABwGAABkHQEAAQEAABIAAQAnBgAAHCsBAFQEAAASAAEA
-MgYAACiYAAA6AAAAEgABAD0GAADEWAAACwAAABIAAQBIBgAA/IoAAOgAAAASAAEAUwYA
-ABzbAABKAAAAEgABAF4GAADs5gAAJwAAABIAAQBpBgAAMGMAACQAAAASAAEAdAYAAMBr
-AQCiAAAAEgABAH8GAAC46AAAOAAAABIAAQCKBgAAwBEAAKQBAAARAAcAlQYAAIzMAABl
-AAAAEgABAKAGAAA4mwAADwAAABIAAQCrBgAAYGcAAC0BAAASAAEAtgYAADzlAAAhAAAA
-EgABAMEGAAAU5wAAlAAAABIAAQDMBgAA1FYAAGgAAAASAAEA1wYAAMgpAQATAQAAEgAB
-AOIGAAAwbwAAFAAAABIAAQDtBgAAeGUAAA8AAAASAAEA+AYAABxfAACqAAAAEgABAAMH
-AAD4ZgAAHQAAABIAAQAOBwAAjOYAAF8AAAASAAEAGQcAALAAAQDxAQAAEgABACQHAAD0
-zAAABgAAABIAAQAvBwAA4CMBAFsAAAASAAEAOgcAAARlAAAjAAAAEgABAEUHAABgBgAA
-pAEAABEABwBQBwAAwFoAAIwBAAASAAEAWwcAAEx7AAA5AAAAEgABAGYHAADoZgAADgAA
-ABIAAQBxBwAAAAAAAAAAAAAQAAAAkQcAAJBoAAAwBgAAEgABAJwHAAAAAAAACQAAABEA
-BwCsBwAANAUAAHUAAAASAAEAvQcAADiSAAAqAAAAEgABAMgHAABk1wAAUgAAABIAAQDT
-BwAA4OcAACIAAAASAAEA3gcAAKxiAAABAAAAEgABAOkHAAC4lgAABgAAABIAAQD0BwAA
-nJoAAAsAAAASAAEA/wcAAOSNAACIAAAAEgABAAoIAACU6QAAHgEAABIAAQAVCAAA3GQA
-AAYAAAASAAEAIAgAAAAAAAAAAAAAEAAAAC8IAACQkgAAMwAAABIAAQA6CAAA/PEAABQA
-AAASAAEARQgAAOTxAAAWAAAAEgABAFAIAABo2wAAOAAAABIAAQBbCAAAwG4AAG4AAAAS
-AAEAZggAAIiVAAB0AAAAEgABAHEIAAA86QAAFwAAABIAAQB8CAAANN8AAKIAAAASAAEA
-hwgAAGzsAAAXAAAAEgABAJIIAADYkwAAJgAAABIAAQCdCAAAVPQAAFYAAAASAAEAqAgA
-ACAyAQCFAQAAEgABALMIAABsjgAAuAEAABIAAQC+CAAAAGYAABcAAAASAAEAyQgAAMCQ
-AABAAAAAEgABANQIAACsdAAAHwAAABIAAQDfCAAAfPMAAFcAAAASAAEA6ggAAGSSAAAs
-AAAAEgABAPUIAABYkwAAgAAAABIAAQAACQAAyF8AACYAAAASAAEACwkAAGAjAQAfAAAA
-EgABABYJAAAAAAAAAAAAABAAAAAlCQAAaFwAACEAAAASAAEAMAkAAKDlAABZAAAAEgAB
-ADsJAAAgCAAApAEAABEABwBGCQAAdJwAAA4AAAASAAEAUQkAAPyLAABgAAAAEgABAFwJ
-AADkAAAAMwAAABIAAQBqCQAAJF0AABIAAAASAAEAdQkAAKAEAACkAQAAEQAHAIAJAAAc
-nAAAVwAAABIAAQCLCQAAXIwAAAsAAAASAAEAlgkAAAwAAAAcAAAAEQAHAKgJAADMXgAA
-HAAAABIAAQCzCQAA5N8AADQAAAASAAEAvgkAAFhkAAB4AAAAEgABAMkJAAAwNgEADAIA
-ABIAAQDUCQAA0GQAAAsAAAASAAEA3wkAAAjzAAAtAAAAEgABAOoJAACYSQAAmQAAABIA
-AQD1CQAASCMBABYAAAASAAEAAAoAAMSbAABXAAAAEgABAAsKAACUlgAAIwAAABIAAQAW
-CgAA3PIAACkAAAASAAEAIQoAACzMAAAeAAAAEgABACwKAAAcHQEASAAAABIAAQA3CgAA
-/JUAACAAAAASAAEAQgoAAECBAAAGAAAAEgABAE0KAADECAEAsQAAABIAAQBYCgAAaIwA
-AKIAAAASAAEAYwoAAJTNAABhAAAAEgABAG4KAADgCQAApAEAABEABwB5CgAA6GUAABcA
-AAASAAEAhAoAALwpAQAKAAAAEgABAI8KAABoWAAAXAAAABIAAQCaCgAAKGUAAEMAAAAS
-AAEApQoAAMTHAAAtBAAAEgABALAKAADkYgAASgAAABIAAQC7CgAAsJoAAAYAAAASAAEA
-xgoAAKDbAAA4AQAAEgABANEKAACEnAAAEgAAABIAAQDcCgAAsEsAADcAAAASAAEA5woA
-AOTdAABiAAAAEgABAPIKAACYCgAAbwAAABIAAQD9CgAAqJoAAAYAAAASAAEACAsAABAH
-AABLAQAAEgABABMLAAA03QAAKgAAABIAAQAeCwAABGIAAHgAAAASAAEAKQsAAGxlAAAL
-AAAAEgABADQLAADklAAAKAAAABIAAQA/CwAAIBYBAHYAAAASAAEASgsAAJxdAAAsAAAA
-EgABAFULAAB4CQEANAAAABIAAQBgCwAAEAQAAFsAAAASAAEAawsAAGDlAABAAAAAEgAB
-AHYLAAAAAAAAAAAAABAAAACGCwAAzLMAAIQBAAASAAEAkQsAAFBYAAAWAAAAEgABAJwL
-AABkJgEAYgAAABIAAQCnCwAA/F0AACQAAAASAAEAsgsAABDhAACMAAAAEgABAL0LAACg
-lAAARAAAABIAAQDICwAA/MwAAI4AAAASAAEA0wsAAAAAAAAAAAAAEAAAAPMLAACEBgAA
-igAAABIAAQD+CwAAjFwAAE0AAAASAAEACQwAANxcAABAAAAAEgABABQMAAAAkQAALwAA
-ABIAAQAfDAAAnFkAAJsAAAASAAEAKgwAADCTAAAnAAAAEgABADUMAAC41wAAoQIAABIA
-AQBADAAA8JYAABUAAAASAAEASwwAAOT0AAARAQAAEgABAFYMAABMXAAAHAAAABIAAQBh
-DAAAAAAAAAAAAAAQAAAAbwwAACSQAAAcAAAAEgABAHoMAAD8CAAAUwAAABIAAQCFDAAA
-sGIAADIAAAASAAEAkAwAAKSbAAAfAAAAEgABAJsMAACwmAAALAAAABIAAQCmDAAAvG8A
-AMgAAAASAAEAsQwAABhmAAAfAAAAEgABALwMAADoXgAANAAAABIAAQDHDAAAIOUAABwA
-AAASAAEA0gwAAMzyAAAPAAAAEgABAN0MAADEkgAAJAAAABIAAQDoDAAAwN0AACQAAAAS
-AAEA8wwAALgEAQALBAAAEgABAP4MAADAYAAALgAAABIAAQAJDQAA8F8AAA4AAAASAAEA
-FA0AAMCaAABbAAAAEgABAB8NAAA8JAEALQEAABIAAQAqDQAAEJQAABkAAAASAAEANQ0A
-AEiBAADAAAAAEgABAEANAABkkAAAWQAAABIAAQBLDQAAxJYAAAEAAAASAAEAVg0AAMR7
-AAC7AAAAEgABAGENAACAEwAApAEAABEABwBsDQAAPFcAADgAAAASAAEAdw0AANBYAACO
-AAAAEgABAIINAACM3QAAMwAAABIAAQCNDQAAnCgBABsAAAASAAEAmA0AALTqAAAGAAAA
-EgABAKMNAABolAAAOAAAABIAAQCuDQAAuJoAAAYAAAASAAEAuQ0AAGAVAQDAAAAAEgAB
-AMQNAAAQmgAAjAAAABIAAQDPDQAAyJ0AACsJAAASAAEA2g0AAEAVAACkAQAAEQAHAOUN
-AABkXQAANQAAABIAAQDwDQAArAUAAF0AAAASAAEA+w0AAEAnAQBaAQAAEgABAAYOAADc
-HgEAdgAAABIAAQARDgAA5GQAAB4AAAASAAEAHA4AAIhlAAAPAAAAEgABACcOAABolQAA
-IAAAABIAAQAyDgAAsPIAAAsAAAASAAEAPQ4AAJhlAABNAAAAEgABAEgOAADkYQAAIAAA
-ABIAAQBTDgAA5IcAABAAAAASAAEAXg4AAFAJAABHAQAAEgABAGkOAAC0zgAAAQAAABIA
-AQB0DgAAQH8AAEoAAAASAAEAfw4AAHSbAAAXAAAAEgABAIoOAACgYgAABgAAABIAAQCV
-DgAAWMcAAGsAAAASAAEAoA4AAFzzAAAfAAAAEgABAKsOAAAARwEAogAAABIAAQC2DgAA
-fGIAACMAAAASAAEAwQ4AAFhPAABAAAAAEgABAMwOAAC0RQAA4gMAABIAAQDiDgAALPQA
-ACcAAAASAAEA7Q4AADhmAABXAAAAEgABAPgOAAD49QAAXggAABIAAQADDwAAYN4AAMYA
-AAASAAEADg8AAEzMAAA9AAAAEgABABkPAACMmwAAFwAAABIAAQAkDwAAjH8AAH0AAAAS
-AAEALw8AAGg4AAB8AAAAEgABADoPAABEbwAAdwAAABIAAQBFDwAASJsAACkAAAASAAEA
-UA8AAPSmAAASAAAAEgABAFsPAAA8VgAAlgAAABIAAQBmDwAADIMAAAEAAAASAAEAcQ8A
-APBgAABgAAAAEgABAHwPAACYwQAAPwAAABIAAQCHDwAAcPEAAHQAAAASAAEAkg8AAPDo
-AABEAAAAEgABAJ0PAAAslAAAOwAAABIAAQCoDwAAaIMAAHoEAAASAAEAsw8AAHB3AAC5
-AgAAEgABAL4PAAB86QAAFQAAABIAAQDJDwAA9MsAABYAAAASAAEA1A8AAHRcAQCqAAAA
-EgABAN8PAACwTAAAkAAAABIAAQDqDwAAfOgAADsAAAASAAEA9Q8AANjcAABZAAAAEgAB
-AAAQAAAg/wAAjgEAABIAAQALEAAAgCMBAB4AAAASAAEAFhAAAFzaAAC+AAAAEgABACEQ
-AAAAAAAAAAAAABAAAAAwEAAAHF0AAAYAAAASAAEAOxAAAHyAAAAzAAAAEgABAEYQAADQ
-5wAADgAAABIAAQBREAAAXKcAALgBAAASAAEAXBAAANBOAACGAAAAEgABAHUQAACgIwEA
-PQAAABIAAQAAenowMDViNTg0NgB6ejAwMmRiMTFjAHp6MDJkYmY4NzUAenowMmRiYjFi
-MgB6ejAwMmRiNDYwAHp6MGI3YjgzNjgAenowNWI4YzY1YQB6ejAwNWI0MGFkAHp6MDVi
-OTQyZWQAenowZDk0Y2QwNAB6ejAwMTlmNDcwAHp6MDJkYmU3M2QAenowMDViNjkyYgB6
-ejBiNmQyMzI1AHp6MDA1Yjg1M2QAenowMDE2ZDkyZQB6ejBjZmIxODc1AHp6MDAyZGIz
-MWMAenowMmRhYmJhYwB6ejAwMGI2YzY4AHp6MDAwYjZiZjgAenowMmRiNWJmMAB6ejAx
-NmUxZGZkAHp6MGI3MGU5OGMAenowNmUwZjZjMgB6ejAwNjdkMmIxAHp6MGI2Y2EzMjUA
-enowMDViNmNmZAB6ejAxNmUwZGZkAHp6MDAwYjZmNjgAenowMDViNDhhZAB6ejAyZGJm
-MWIyAHp6MDA1Yjg4Y2IAenowMzNlYzhiZgB6ejBkYjRjOTRkAHp6MDJkYjNiYWMAYXRo
-X2hhbF9kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUAenowMGI2ZjE2MQB6ejBkYzU4NzE4
-AHp6MGRiMDkxMGUAenowMGI2ZTI3YQB6ejAyZGJiYWIyAHp6MGI2ZDFlZmYAenowMDVi
-NjRmZAB6ejAwMGI2ZDUyAHp6MGI2YzllZmYAenowMmRiZDg3NQB6ejAyZGIzMWIyAHp6
-MDBiNzA5MjMAenowMDBiNmQxZAB6ejAwYjZkNDUwAHp6MGI2YzIzMjUAenowMmRiZGFi
-MgB6ejAwMDViNjMyAHp6MDZkZjJmNTcAenowMDE2ZGE1MAB6ejAwMDY3ZDMyAHp6MDBi
-NmQ5MjMAenowMDJkYjUxYwB6ejAxNmRhN2YwAHp6MDE2ZGNiZmUAenowMDE2ZGVjMQB6
-ejAwMTZkZjJjAHp6MGI4MTQ2MTIAenowMTZkOTkyMAB6ejAyZGIxYmFjAHp6MGRjNzg3
-MTgAenowNWI3MDFlMAB6ejAwMGI2YjEwAHp6MGI3MDllZmYAenowMTZkZjg5YgBhdGhf
-aGFsX2F0dGFjaAB6ejA2ZTE0ZGQxAHp6MDE2ZGFiMmQAenowMmRiMTM1ZAB6ejBlMGI2
-ZjIzAHp6MDE2ZTI5MWQAenowMDBiNmZlOAB6ejAwMTZkOTQ4AHp6MDE2ZTIwOWIAenow
-YjcwMWVmZgB6ejAwMGI2YzlkAHp6MDAwNWI1YTIAenowMmRiMTcwYQBhdGhfaGFsX2Nv
-bXB1dGV0eHRpbWUAenowMmRiNWJhYwB6ejAwNWI4MTNkAHp6MDBiNmM5MjMAenowYjZj
-ZTk4YwB6ejAwNWI3ZjlkAHp6MGI3MDFkMDIAenowNmUwNDYwZQB6ejAyZGI1NzYzAHp6
-MDZmMjMyY2MAenowZTA3ODM3OQB6ejAwMmRhZjYyAHp6MGI4NTQ2MTIAenowMDBiNmI5
-MAB6ejAxNmQ5ZWZhAHp6MDAyZGIyNjAAenowMTZkZTA1MQB6ejAwMDViNmIyAHp6MDVi
-N2YxMTQAenowMzQ3NDZiNAB6ejAyZGJkZGZkAHp6MDA4ZWYzMDkAenowMGI3MTc3ZAB6
-ejAwYjcwZjNkAHp6MDE2ZDg5MjAAenowMmRiMWFiMgB6ejAwMDViNjIyAHp6MDAwYjZm
-NzgAenowYjZiNDk1MAB6ejAwNWI3NjMwAGF0aF9oYWxfZnJlZQB6ejA1Yjc5YjFiAHp6
-MDBiNzA3M2QAenowYjVmY2EyNgB6ejAxNmRmYmYxAGF0aF9oYWxfbWh6MmllZWUAenow
-MTZlMTg5YgB6ejBkYzM0OTRkAHp6MDAyZGM2MGIAenowMmRiMzM1ZAB6ejBiNmM1M2E0
-AHp6MGY4ZWYzMDgAenowZGE0Y2QwNAB6ejA1Yjc0MWUwAHp6MDJkYTliYWMAenowMTZl
-YzlhZAB6ejAwYjcxNzNkAHp6MDE2ZDlkNDEAenowZGMxMmMxZgB6ejAwNWI4NGZkAHp6
-MDA1YjhhYmQAenowMGI3MDEyMwB6ejAwNWI2NTJiAHp6MDJkYjM4NzUAenowMTZlMzA5
-YgB6ejAwNWI2MGIyAHp6MDJkYjE4NzUAenowMmRiMTc2MwB6ejBiN2Y4MzY4AHp6MGRj
-MzJjMWYAenowMGI3MDE2MQB6ejAxNmQ3ZDQxAHp6MDAxNmNkMzIAenowZGI0OTEwZQB6
-ejAwNWI0OGVkAHp6MDAyZGM4MGIAenowMmRiMzNlZAB6ejAwNWI4MGZkAHp6MDJkYmZk
-ZmQAenowMTZlNjQ4YQB6ejBkYmYyYzFmAHp6MDAyZGFmZjIAenowMDViNzc5ZAB6ejAw
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMPABIAAAAAAAED4C4KAJgCAAAAAAED
+UEYOACQCAAAAAAEDwF0JALAEAAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAEAAAAAAED8NIM
+AGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAOgDGwCCAAAAAAABANAHGgSEAQAAAAABAHwVGQSLAQAAAAABAPgqGASWAQAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDoAxsAggAA
+AAAAAQDQBxoEhAEAAAAAAQB8FRkEiwIAAAAAAQD4KhgElgMAAAAAAAJwFwsADAQAAAAA
+AAIoIw8AEgQAAAAAAQLgLgoAGAYAAAAAAQJQRg4AJAYAAAAAAQLAXQkAMAgAAAAAAQKg
+jA0ASAgAAAAAAQKAuwgAYAgAAAAAAQLw0gwAbAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE+gADAIEAZAJkAgEE9AEHAIEA
+yQHJAQEE6AMCAIIB5ADkAAEE0AcGAIQCoACgAAEEuAsBAIYDjACMAAECcBcLAIwEPAA8
+AAECKCMPABIEPAA8AAEC4C4KAJgGMAAwAAECUEYOACQGMAAwAAECwF0JADAILAAsAAEC
+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
+EgAAABIAAQCuBAAAjLcAACoAAAASAAEAuQQAAKTqAACWAwAAEgABAMQEAADM5wAACwAA
+ABIAAQDPBAAA4FwAAIgAAAASAAEA2gQAAOBhAQA9AAAAEgABAOUEAABgjgAAOAAAABIA
+AQDwBAAAfGEBAGEAAAASAAEA+wQAAIxNAQA9AAAAEgABAAYFAAAg6QAA+AAAABIAAQAR
+BQAAbJoAAAEAAAASAAEAHAUAAORgAABlAAAAEgABACcFAADsyAAAFAAAABIAAQAyBQAA
+qJsAAAEAAAASAAEAPQUAAGTVAABnBwAAEgABAEgFAACwOwEApgAAABIAAQBTBQAANPIA
+AAYAAAASAAEAXgUAADSUAAAhAAAAEgABAGkFAAD4AQEAVwAAABIAAQB0BQAASH4AAAYA
+AAASAAEAfwUAAIRHAQA9AQAAEgABAIoFAAAUnwAARQAAABIAAQCVBQAA6F8AAD8AAAAS
+AAEAoAUAALj0AAAjAAAAEgABAKsFAADM3AAAYwAAABIAAQC2BQAA2M8AAB8AAAASAAEA
+wQUAAIxLAQA+AAAAEgABAMwFAAAAAAAAAAAAABAAAADZBQAAjH8AAGAAAAASAAEA5AUA
+AJDSAAAGAAAAEgABAO8FAAAsXAEABgAAABIAAQD6BQAAAGoAAEUAAAASAAEABQYAADhJ
+AQAMAAAAEgABABAGAAA0TAEACwAAABIAAQAbBgAACPEAAHcAAAASAAEAJgYAAGAFAAAI
+AgAAEgABADcGAADYQQEAqgMAABIAAQBCBgAAXGMAAEQAAAASAAEATQYAALyDAACPAAAA
+EgABAFgGAABgmgAAAQAAABIAAQBjBgAAUPIAABEAAAASAAEAbgYAAEiGAAAGAAAAEgAB
+AHkGAABQWAEAcQAAABIAAQCEBgAAeGkAAFcAAAASAAEAjwYAADRcAQAGAAAAEgABAJoG
+AABQ4gAAiQAAABIAAQClBgAADJEAAC8AAAASAAEAsAYAAECrAABcAQAAEgABALsGAADA
+fQAAhwAAABIAAQDGBgAAdCIBACkGAAASAAEA0QYAANACAQA4AAAAEgABANwGAAAI/gAA
+LAAAABIAAQDnBgAAXJ8AAOUAAAASAAEA8gYAAABhAQAyAAAAEgABAP0GAACE9gAAIwIA
+ABIAAQAIBwAARJgAAFwAAAASAAEAEwcAAHSaAAATAAAAEgABAB4HAADE+QAAwAIAABIA
+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
+AQAuDQAAEgABAF8RAABg5gAAaQEAABIAAQBqEQAAGNAAAD0AAAASAAEAdREAAAieAAAX
+AAAAEgABAIARAACI0gAABgAAABIAAQCLEQAAmIIAAH0AAAASAAEAlhEAAAg/AAB8AAAA
+EgABAKERAAAUhQAADAAAABIAAQCsEQAAMHIAAHMAAAASAAEAtxEAAMSdAAApAAAAEgAB
+AMIRAAAgqQAAEgAAABIAAQDNEQAAVFkAAG0AAAASAAEA2BEAAByGAAABAAAAEgABAOMR
+AACgYwAAYAAAABIAAQDuEQAAeMUAAD8AAAASAAEA+REAAEj/AABoAAAAEgABAAQSAADw
+8QAARAAAABIAAQAPEgAAkJcAADcAAAASAAEAGhIAAKyGAACeBAAAEgABACUSAACEegAA
+uQIAABIAAQAwEgAAZPIAABUAAAASAAEAOxIAAMDPAAAWAAAAEgABAEYSAABcjwEAwgAA
+ABIAAQBREgAAgPEAADcAAAASAAEAXBIAANjkAABZAAAAEgABAGcSAACcFAEALgIAABIA
+AQByEgAAvEUBAB4AAAASAAEAfRIAAJiNAABGAAAAEgABAIgSAADc4gAAgwAAABIAAQCT
+EgAA4F8AAAYAAAASAAEAnhIAALSaAAALAAAAEgABAKkSAACIgwAAMwAAABIAAQC0EgAA
+1PAAAA4AAAASAAEAvxIAAARaAQAgAgAAEgABAMoSAAC4MQEA4wAAABIAAQDVEgAAiKkA
+ALgBAAASAAEA4BIAAIBBAABhAAAAEgABAPkSAADcRQEAPQAAABIAAQAAenowMDViNTg0
+NgB6ejBkYzE5OGRlAHp6MDAyZGIxMWMAenowMmRiZjg3NQB6ejA1YjYzYzY0AHp6MDJk
+YmIxYjIAenowMmRiMjA1MwB6ejAwMmRiYTQyAHp6MGZiYjFlM2YAenowYjc5ZWE5NAB6
+ejA1YjhjNjVhAHp6MDAxNmQ1NGQAenowMDViNDBhZAB6ejA1Yjk0MmVkAHp6MGQ4ZGM2
+MmMAenowMDE5ZjQ3MAB6ejAyZGQ5NDJkAHp6MDJkYmU3M2QAenowMDViNjkyYgB6ejBi
+NmQyMzI1AHp6MDA1Yjg1M2QAenowMDE2ZDkyZQB6ejBjZmIxODc1AHp6MDAyZGIzMWMA
+enowMmRhYmJhYwB6ejAyZGJjODUxAHp6MDAwYjZjNjgAenowMDBiNmJmOAB6ejAwYjZj
+ZjVlAHp6MDE2ZTFkZmQAenowYjZmNTBiOAB6ejA2ZTBhNGZlAHp6MDA2N2QyYjEAenow
+YjZjYTMyNQB6ejAwNWI2Y2ZkAHp6MDE2ZTBkZmQAenowMDBiNmY2OABhdGhfaGFsX3By
+b2Nlc3Nfbm9pc2VmbG9vcgB6ejAwNWI0OGFkAHp6MDJkYmYxYjIAenowMDViODhjYgB6
+ejAzM2VjOGJmAHp6MGRiNDI1YzUAYXRoX2hhbF9kbWFfYmVhY29uX3Jlc3BvbnNlX3Rp
+bWUAenowMGI2ZjE2MQB6ejA2ZTAwYjhhAHp6MDJkYmZjMWQAenowZGM0ZTM5MAB6ejBk
+YWZlZDg2AHp6MDBiNmUyN2EAenowMmRiYmFiMgB6ejBiNmQxZWZmAHp6MDE2ZDkwZGQA
+enowMmRiZTg1MQB6ejAwNWI2NGZkAHp6MDAwYjZkNTIAenowYjZjOWVmZgB6ejAxNmUw
+MGRkAHp6MDBiNmU4MjIAenowMmRiZDg3NQB6ejAyZGIzMWIyAHp6MDBiNzA5MjMAenow
+MGI2ZDQ1MAB6ejAwMGI2ZDFkAHp6MGI2YzIzMjUAenowMmRiZGFiMgB6ejAwMDViNjMy
+AHp6MDZkZWRkOTMAenowMDE2ZGE1MAB6ejAwMDY3ZDMyAHp6MDBiNmQ5MjMAenowMDJk
+YjUxYwB6ejAxNmRjYmZlAHp6MDBiNzAxNDUAenowMDE2ZGVjMQB6ejAwMTZkZjJjAHp6
+MGI3ZmFkM2UAenowMTZkOTkyMAB6ejAyZGIxYmFjAHp6MGRjNmUzOTAAenowNWI3MDFl
+MAB6ejAwMGI2YjEwAHp6MGI3MDllZmYAenowMTZkZjg5YgBhdGhfaGFsX2F0dGFjaAB6
+ejA2ZTBmYzBkAHp6MDE2ZGFiMmQAenowMmRiMTM1ZAB6ejBlMDQ2ODRiAHp6MDE2ZTI5
+MWQAenowMDBiNmZlOAB6ejAwY2ZiM2UwAHp6MDAxNmQ5NDgAenowMTZlMjA5YgB6ejBi
+NzAxZWZmAHp6MDAwYjZjOWQAenowMDA1YjVhMgB6ejAyZGIxNzBhAGF0aF9oYWxfY29t
+cHV0ZXR4dGltZQB6ejAyZGI1YmFjAHp6MDA1YjgxM2QAenowMGI2YzkyMwB6ejBiNmI1
+MGI4AHp6MDA1YjdmOWQAenowYjcwMWQwMgB6ejA2ZGZmNDRhAHp6MDJkYjU3NjMAenow
+NmVlYWY2MAB6ejAxNmUzMThjAHp6MGUwMDdjYTEAenowMDJkYWQxZAB6ejAwMmRhZjYy
+AHp6MGI4M2FkM2UAenowMDBiNmI5MAB6ejAxNmQ5ZWZhAHp6MDE2ZGUwNTEAenowMDJk
+YWIxZAB6ejAwMDViNmIyAHp6MDViN2YxMTQAenowNGFlMDMxZgB6ejAyZGJkZGZkAHp6
+MDA1NDdmZWQAenowMGI2YmY1ZQB6ejAwYjcxNzdkAHp6MDBiNzBmM2QAenowMTZkODky
+MAB6ejAyZGIxYWIyAHp6MDAwNWI2MjIAenowMDBiNmY3OAB6ejBiNjliMDdjAGF0aF9o
+YWxfZnJlZQB6ejA1Yjc5YjFiAHp6MGRjMzk4ZGUAenowNWI2YmM2NAB6ejAwYjcwNzNk
+AHp6MDJkYmViYmQAenowYjVlMzE1MgB6ejAxNmRmYmYxAGF0aF9oYWxfbWh6MmllZWUA
+enowMTZlMTg5YgB6ejBkYzJhNWM1AHp6MDAyZGM2MGIAenowNmRmMGI4YQB6ejAyZGIz
+MzVkAHp6MDBiNmUwYjIAenowYjZjNTNhNAB6ejBmNTRkMWIwAHp6MDJkYjBlZTIAenow
+YjZmZDM2MwB6ejBkOWRjNjJjAHp6MDViNzQxZTAAenowMmRhOWJhYwB6ejBkYzIxZDNh
+AHp6MDBiNzE3M2QAenowMTZkOWQ0MQB6ejAwNWI4NGZkAHp6MDE2ZGUxMWQAenowMDVi
+OGFiZAB6ejAwYjcwMTIzAHp6MDA1YjY1MmIAenowMmRiMzg3NQB6ejAxNmUzMDliAHp6
+MDA1YjYwYjIAenowMmRiMTg3NQB6ejAwMmRiODQyAHp6MDJkYjE3NjMAenowYjdkZWE5
+NAB6ejAwYjcwMTYxAHp6MDE2ZDdkNDEAenowMDE2Y2QzMgB6ejA2ZGUwYjhhAHp6MDZk
+OWRkOTMAenowZGIzZWQ4NgB6ejAwNWI0OGVkAHp6MDAyZGM4MGIAenowMDJkYmM0MgB6
+ejAwYjZmMDIyAHp6MDJkYmE4NTEAenowMmRiMzNlZAB6ejAwNWI4MGZkAHp6MDA1Yjdm
+MmUAenowMmRiZmRmZAB6ejAxNmU2NDhhAHp6MDAyZGFmZjIAenowMDViNzc5ZAB6ejAw
MGI2ZWU4AHp6MDE2ZTQ0OGEAenowMGI2ZjZiYwB6ejAxNmRhOTIwAHp6MDViNzgxZTAA
-enowZTI3M2E0ZAB6ejAwMmRjYTBiAHp6MDJkYjFiZjAAenowMDViNDRhZAB6ejA2ZGU0
-NjBlAHp6MGI2ZjllZmYAenowMGI2YzZiYwBhdGhfaGFsX2FkZGl0aW9uYWxfc3diYV9i
-YWNrb2ZmAHp6MDAwMmRiOTIAYXRoX2hhbF92ZXJzaW9uAGF0aF9oYWxfaWVlZTJtaHoA
-enowMmRiNzlhZQB6ejBiNmNmMDA5AHp6MDAxNmUxMmMAenowMDE2ZDllNAB6ejAwNWI1
-Y2IyAHp6MDE2ZGEyNTEAenowNmZhMzJjYwB6ejA2ZTAyZjU3AHp6MDA1YjZlMzAAYXRo
-X2hhbF9tYWxsb2MAenowMDBiNmRkMgB6ejA1YjZjYmQ1AHp6MDE2ZGIyNTEAenowZTE3
-ODM3OQB6ejAxNmRkMDUxAHp6MDJkYmQxYjIAenowZGE5YzRmNgB6ejAyZGMxNzYzAHp6
-MDE2ZGYwNTEAenowMDE2ZDk1MAB6ejAwYjcwNmJjAHp6MDAxNmQ4NzIAenowNmRmNDYw
-ZQB6ejA1YjhjMmVkAHp6MDZmZjE3ZTcAenowYjZmOWQwMgB6ejBkNGVmMzA4AHp6MDE2
-ZGJiZmUAenowMTZlNTQ4YQB6ejAwMTZkODUwAHp6MDAwYjZmZjgAYXRoX2hhbF9tZW1j
-cHkAenowMmRiYmRmZAB6ejA2ZGI1ZWI2AHp6MDE2ZWI5YWQAenowMGI2Y2ViYwB6ejBk
-OWI4Yjc5AGF0aF9oYWxfcHJvYmUAenowMDJkYjA2MAB6ejAxNmVhOWFkAHp6MDAwZWYz
-MDkAenowMmRiMzc2MwBhdGhfaGFsX2J1aWxkb3B0cwB6ejAyZGFmMzVkAHp6MGRiNGNk
-MDQAenowMTZkZjI1MQB6ejAwMGI2YzEwAHp6MDE2ZDkyNTEAenowYjcyMWFlZAB6ejA2
-N2NmY2FlAHp6MDAwYjZjZjgAenowY2NlZjMwOAB6ejAyZGFmYWIyAHp6MDViOTJhZWQA
-enowMDViOGNjYgB6ejBiNmQ5ZWZmAHp6MDJkYjExYjIAenowZTE3M2E0ZAB6ejAyZGJm
-ZmIxAHp6MDJkYmY3NjMAenowMDViNjhmZAB6ejAwNWI0NGVkAHp6MGI3MTFhZWQAenow
-YjVmY2EzNAB6ejBkOGI4Yjc5AHp6MDE2ZDhiMmQAenowMTZlMDg5YgB6ejAyZGJiODc1
-AHp6MDE2ZDk3ZjAAenowYjgzODM2OAB6ejAwYjZmZWJjAHp6MGU5OTkzMTMAenowMGI2
-ZWE3YQB6ejAzM2U4ZmJmAHp6MDA1YjcyMzAAenowY2ZhNTg3NQB6ejAyZGI5OWFlAHp6
-MDJkYjlhYjIAenowMDBiNmJlOAB6ejBkOTljNGY2AHp6MGRlZDhhNTcAenowMTZkYWJm
-ZQB6ejBiNzA5ZDAyAHp6MDE5ZjNhMDEAenowNzA3MTdlNwBhdGhfaGFsX21lbXplcm8A
-enowNmUwNGRkMQB6ejBiNjhlOThjAHp6MDE2ZTJkZmQAenowMDBiNmQyMgB6ejA3MDIz
-MmNjAHp6MGRjNTQ5NGQAenowMGI3MGY3ZABhdGhfaGFsX3N3X2JlYWNvbl9yZXNwb25z
-ZV90aW1lAHp6MDlmNjlkMmUAenowMDViNjU3YQB6ejA2ZjcxN2U3AHp6MDZkYTVlYjYA
-enowYjdkNDYxMgB6ejAwYjZmOTYxAHp6MGI2YjBjOTAAenowMmRiZDM1ZAB6ejAwNWI4
-OGZkAHp6MDJkYWZkZmQAYXRoX2hhbF9kZWxheQB6ejAyZGIxZGZkAHp6MDY3ZDJmNDEA
-enowMmRhZjg3NQB6ejBiODA3NzQxAHp6MDE2ZDhkNDEAenowMDJkYWU5MgB6ejBiN2M3
-NzQxAHp6MDJkYmIzNWQAenowMmRiM2RmZAB6ejAyZGI1M2VkAHp6MDAwYjZkYTIAenow
-MDBiNmUyMgB6ejA1YjgwMDQxAHp6MGQ4OWM0ZjYAenowMDE2ZDg0OAB6ejAxNmQ5YjJk
-AHp6MGUzNzNhNGQAenowMDE2ZTAyYwB6ejAwYjcwNzdkAHp6MDA1YjY5N2EAenowMDE2
-ZGFlNAB6ejAxNmUxMDliAHp6MDA1YjRhMmQAenowZGY3ODM3OQB6ejAyZGJkNzYzAHp6
-MDAwYjZlNTIAenowNWI2YzZkYgB6ejBjYTVmMzI5AHp6MGRiMjkxMGUAenowMmRiM2Jm
-MAB6ejA2ZDc4YTRjAHp6MDE2ZTAyNTEAenowMDAyZGJiMgB6ejAwMmRkODZkAHp6MDJk
-YjU5YWUAenowMDY3ZDIyMQB6ejAwNWI4OTNkAHp6MDViODFiMWIAenowMTZkODdmMAB6
-ejAyZGIxM2VkAHp6MDBiNmQxMjMAenowMDBiNmNlOAB6ejA1YjhhYWVkAHp6MDJkYWYx
-YjIAenowMDA1YjVlMgB6ejAzM2ViZmJmAHp6MDViNjg2ZGIAenowMDBiNmVmOAB6ejBi
-NzE5YWVkAHp6MDA1YjU4YjIAenowNWI3ZGIxYgB6ejBiODQ3NzQxAHp6MDAxNmQ3MzIA
-enowMmRhZGFiMgB6ejBmNGRlMzA3AGF0aF9oYWxfaW5pdF9jaGFubmVscwB6ejAwYjZk
-NmJjAHp6MGM0ZWYzMDgAenowMDAyZGJkMgB6ejBkYWI4Yjc5AHp6MDE2ZTBiODcAenow
-NWI5MDJlZAB6ejBkYzM4NzE4AHp6MGFhMmVlYzEAenowMDBiNmMxZAB6ejA1YjhlYWVk
-AHp6MDA1YjdiOWQAenowMDViNTQ0NgB6ejA1YjY0NmRiAHp6MDBiNmY5MjMAenowZGRk
-OGE1NwB6ejAxNmUxMjUxAHp6MGRjNzQ5NGQAenowMmRiMzcwYQB6ejAwMDViNjcyAHp6
-MDZkZjRkZDEAenowMmRiZjM1ZAB6ejAwMGI2Yzc4AHp6MDAxNmQ4MzIAenowM2U5NzM1
-MwB6ejAyZGI1NzBhAHp6MDA1YjZkN2EAenowMDJkYjI5MgB6ejAwNWI5MGNiAHp6MDA1
-YjVjNDYAYXRoX2hhbF9wcmludGYAenowNmQ5NWViNgB6ejAxNmRmYjg3AHp6MDAxNmRh
-NDgAenowMDJkYjA5MgBhdGhfaGFsX2dldHdpcmVsZXNzbW9kZXMAenowMTZlMWI4NwB5
-AAAAAQMAAJEAAAABAwAAsAAAAAEDAAC/AAAAAQMAAMUAAAABAwAAzQAAAAEDAADVAAAA
-AQMAAM0BAAACbQAA5AEAAAJoAQD8AQAAAj0AAJ4CAAACHQEA4AYAAAJcAAD2BgAAAlwA
-ADQHAAABAgAAHwsAAAECAAAyCwAAAQIAANMOAAACvgAAmhMAAAIKAQDgHwAAAgoBAOEq
-AAABAgAA8yoAAAECAAAOOQAAAQIAAD45AAABAgAAmTkAAAECAADOOQAAAQIAAD46AAAB
-AgAAYDoAAAECAAByOgAAAQIAAOo6AAABAgAA9DoAAAECAAAKOwAAAQIAABQ7AAABAgAA
-OTsAAAECAABBOwAAAQIAAHE8AAABAgAAlDwAAAECAAAaPQAAAQIAAGs9AAABAgAAhj0A
-AAECAAAdPgAAAQIAACU+AAABAgAAmT4AAAECAACnPgAAAQIAAK8+AAABAgAA2D4AAAEC
-AAAZPwAAAQIAACE/AAABAgAAfT8AAAECAADRPwAAAQIAAOE/AAABAgAADUAAAAECAAAU
-QAAAAQIAAGVAAAABAgAAekAAAAECAACDQAAAAQIAAJFAAAABAgAAtEAAAAECAAC9QAAA
-AQIAAD1BAAABBQAAXkEAAAEFAABmQQAAAQUAABlCAAABAgAAIkIAAAECAABfQgAAAQIA
-AINCAAABAgAA3UIAAAECAAD0QgAAAQIAAA5DAAABAgAARUYAAAJ4AQC6RgAAAQIAAMBG
-AAABAgAADUkAAAECAAAcSQAAAQEAAK1KAAABAgAAa0wAAAK0AADkTAAAAQUAAO1MAAAB
-BQAAMU0AAAEFAADATQAAAQIAAHxPAAABAgAAH1AAAAK+AABAUAAAAQIAAEZQAAAC1AAA
-xFAAAAIjAQBCUQAAAikAAHBRAAACFAEAolEAAAIUAQDRUQAAAhQBACFSAAACFAEAXVIA
-AAIUAQAsVQAAAhQBAKZVAAACegAA2FUAAAJ6AABjVgAAASwAAHdWAAABEgEA+lYAAAId
-AQA6XAAAAmUAAGBcAAAC1AAAfFwAAALUAACtXAAAAkAAAERdAAACDgEAWF0AAAJqAAB7
-XgAAAjYBADdfAAAC1AAAqF8AAAJEAQC5XwAAAqwAAAxhAAACIQAAL2EAAAJBAQBoYQAA
-AiEAAIJhAAACIQAAuGEAAAJBAQD8YQAAAiEAABZiAAACIQAATGIAAAJBAQCXYgAAAiEA
-ANdiAAACAAEAI2MAAAIYAABMYwAAAh8BALZjAAACHQEA3WMAAAIdAQA2ZQAAAdwAAEVl
-AAABDwAAXWUAAAITAQDKZQAAAh0BAPVoAAACIwEAgWsAAAKnAAA3bAAAAQIAAGxsAAAC
-aQEAjm0AAAIdAQCybQAAAkAAAL9tAAACiAAA6G0AAAJOAAAHbgAAAnQAADpuAAACYwEA
-WW4AAAILAAB4bgAAAgIBAFRvAAAC4gAAiW8AAAIdAQClbwAAAh0BANFvAAAC4gAAJHAA
-AAIdAQBNcAAAAh0BAFlwAAAC4gAAvXAAAAIdAQDdcAAAAh0BAAdxAAACHQEAeHEAAAId
-AQCYcQAAAh0BAMVxAAACHQEA6XEAAAJAAAAVcgAAAogAAClyAAACHQEANnIAAAKIAACh
-cgAAAh0BALRyAAACQAAAL3YAAAECAACAdwAAAQIAAIp3AAAC1AAAlHcAAAECAACedwAA
-AtQAAPt3AAACKQAAI3gAAAIpAACneQAAAikAAMN5AAACKQAA3HkAAAIpAAA9egAAAuYA
-AHB6AAACKQAA7noAAAJAAAANewAAAh0BABN7AAACSQAAeXsAAAJLAQC1ewAAAv4AAC98
-AAACCgEAbnwAAAKvAACXfwAAApUAAKh/AAACNgEA2n8AAAI2AQD3fwAAAjYBAPmAAAAC
-HQEAKYEAAAJAAABfgwAAAikAAHmDAAACvgAAmoMAAAECAACggwAAAtQAABWEAAACdwEA
-V4QAAAIdAQDuhAAAAh0BACmFAAACMQEAhIUAAAIxAQDBhQAAAjEBACSGAAABAgAAaYYA
-AAJdAQCmhgAAAh0BAM6GAAACHQEACYcAAAIxAQA9hwAAAmQBAGCHAAACMQEAwYcAAAJK
-AQDshwAAAnoAAMWIAAACHQEAVYkAAALNAAAnigAAASwAADuKAAABEgEAj4oAAAJaAQCg
-igAAAh0BABWQAAACuwAAOJAAAALUAABUkAAAAtQAAJGQAAACQAAATpEAAAIxAQDIkQAA
-AigBANyRAAACMAAA65EAAALQAAAMkgAAAigBAC6SAAACvwAAKJMAAALwAABMkwAAAQIA
-AHOTAAAC1AAABJUAAALwAAAolQAAAiEAAEeVAAACQQEAgJUAAAIhAACalQAAAiEAANCV
-AAACQQEAFJYAAAIhAAAulgAAAiEAAGSWAAACQQEAr5YAAAIhAABXmAAAAgABAKOYAAAC
-GAAAzJgAAAIfAQA7mQAAAh0BAGGZAAACHQEA5ZoAAAGtAADtmgAAAfIAAPWaAAAB1wAA
-DZsAAAITAQBhmwAAAkAAAEieAAAC5gAASZ8AAAJ3AQBioAAAAikAAHKgAAACKQAAgKAA
-AAEFAACaoAAAAQUAAMWgAAABBQAA16AAAAEFAAACoQAAAQIAABWhAAABAgAALaEAAAEC
-AABBoQAAAQIAAFmhAAABAgAAXqEAAAECAAAZpAAAAgsBANOkAAACHQEA96QAAAJAAAAH
-pQAAAhoAAISlAAAC9wAAIaYAAAJrAAAxpgAAAkgAAGSmAAACjwAAg6YAAALEAACipgAA
-AjEAABinAAACPQEASKcAAAIdAQBxpwAAAj0BABKoAAACHQEAUagAAAIdAQCrqAAAAh0B
-AOCoAAACHQEA7KgAAAI9AQDaqQAAAhoAAO6pAAACHQEA+KkAAAIaAABeqgAAAh0BAHGq
-AAACQAAAqqoAAAJ/AADCqgAAAQIAAM+qAAACKQAA4KoAAAECAAAOqwAAAikAADirAAAC
-KQAASqwAAAIdAQBnrAAAAisAAFCtAAACVAEAgK0AAAECAAAjrwAAAQUAAESvAAABBQAA
-Ya8AAAEFAAApsAAAAQUAAD2wAAACKQAAWbAAAAEFAABqsAAAAikAAIewAAACKQAAmbAA
-AAEFAACqsAAAAikAAMewAAACKQAA17AAAAEFAAD5sAAAAQUAABGxAAABBQAAE7IAAAI+
-AADqtAAAAhIAAG+1AAABBgAAdLUAAAIKAQCBtQAAAQYAAIa1AAACCgEAi7UAAAEGAACj
-tQAAAQYAALK1AAABBgAAubUAAAEGAADCtQAAAQYAANC1AAABBgAA6LUAAAEGAAD/tQAA
-AQYAAAy2AAABBgAAHbYAAAEGAABBtgAAAQYAAGS2AAABBgAAcrYAAAEGAAB8tgAAAQYA
-AO22AAABBgAALrcAAAEGAACytwAAAQYAAMC3AAABBgAA5rcAAAEGAAAJuAAAAQYAACG4
-AAABBgAAJrgAAAEGAABPuAAAAQYAAFS4AAABBgAA0rgAAAEGAADfuAAAAm0BACe5AAAC
-/AAAX7sAAAECAACbvAAAAQIAAIu9AAACYgAApMEAAAECAAC6wQAAAQIAAFvDAAABAgAA
-nsMAAAECAACxwwAAAQIAANrDAAABAgAA9MMAAAECAAAWxAAAAQIAACnEAAABAgAAAMUA
-AALeAAARxQAAAvAAAE7FAAAC8AAAesUAAALwAAC5xQAAAksBAPXFAAAC/gAAi8YAAAIK
-AQDSxgAAAlgAAGvKAAABEgEAccoAAAEsAACBygAAAbEAALPMAAACWgEAxMwAAAIdAQAH
-zwAAAikAACXPAAABAgAANs8AAAECAABDzwAAAQIAAFDPAAABAgAAq88AAAK+AADVzwAA
-AQIAANvPAAAC1AAAr9AAAAJFAADP0AAAAmUBAO/QAAACcAEAadEAAAIXAACT0QAAAjoA
-AD/SAAACbwEAptIAAAJvAQDW0gAAAm8BABvTAAACbwEAatMAAAJvAQDV0wAAAQIAANrT
-AAABAgAAJdQAAAJdAQBu1AAAAh0BAHbUAAACOgAAltQAAAIdAQDL1AAAAm8BAPvUAAAC
-GQEAJtUAAAKaAABL1QAAAmwBAF7VAAACUgEActUAAAIFAQCY1QAAAm8BAPHVAAACowAA
-GdYAAAJ2AABC1gAAAmcAAGjWAAACZQEAcNYAAAJ6AABN1wAAAh0BALPaAAABLAAAx9oA
-AAESAQAz2wAAAnkBAETbAAACHQEABd0AAAJAAAA83gAAAsYAAOLhAAABAgAAuuMAAAIP
-AQAG5QAAAg8BADTlAAAC1AAAUOUAAALUAAAI5wAAAQIAAC/nAAAC1AAA2OoAAAIhAAD7
-6gAAAkEBADTrAAACIQAATusAAAIhAACE6wAAAkEBAMjrAAACIQAA4usAAAIhAAAY7AAA
-AkEBAGPsAAACIQAAe+wAAAIgAAC37AAAAhMAAOvtAAACEwAAzO4AAAECAACE7wAAAgAB
-AD/wAAACGAAAaPAAAAIfAQCb8AAAAh0BAMHwAAACHQEAafIAAAEmAABx8gAAAZwAAHjy
-AAABNAEAgfIAAAGJAACI8gAAAT8BAKHyAAACEwEA9fIAAAJAAAAk8wAAAioAACzzAAAC
-ygAAU/MAAAJ4AAB39QAAAoQAAFb2AAACZQEAc/YAAALmAAAz9wAAAlQAADv3AAACQgAA
-SPcAAAJwAQBF+AAAAQIAAFf4AAABAgAAcfgAAAIdAQCH+AAAAQIAAKL4AAABAgAAuPgA
-AAIdAQDm+AAAAlMAAAr6AAACUAAAWPoAAALvAABo+gAAAioBAAv7AAACIAAAPPwAAAId
-AQAA/QAAAoAAAF79AAACDAAAbv0AAAKoAACA/QAAAkAAAJr9AAACjgAAzf0AAAI4AADs
-/QAAAicAAAv+AAACPAAA+P4AAAJlAQBP/wAAAmUBAGcAAQACHQEAhgABAAIdAQDFAAEA
-AuYAAM4CAQACHQEA4QIBAAJAAAAEAwEAAmUBAM4DAQACXQAApAQBAAIpAADnBQEAArwA
-AKQJAQACUAAAygkBAAIKAQDbCQEAAgoBAA4KAQABAgAAywwBAAJtAQD3DAEAAhIAAIwO
-AQAC/AAAjhEBAALUAAD/EgEAAjwBAD0UAQACPAEAPBYBAAECAABMFgEAAQIAAG0WAQAB
-AgAAeRYBAAECAADzGAEAAQIAAP0YAQABAgAAgRoBAAIpAAA8GwEAAlEAAHUbAQACXAAA
-oxsBAAJRAADpGwEAAlwAACQcAQACXAAAZRwBAALGAADAHAEAAsYAAAgdAQACSwEAUB0B
-AAL+AAALHgEAAgoBAFIeAQACTQAA1yEBAAESAQDdIQEAASwAAOshAQABsQAAByQBAAJ5
-AQAYJAEAAh0BAI0kAQACxgAAUiUBAALGAADJKAEAAmYBACspAQACZgEAAyoBAAIKAQC6
-KgEAAioAAPIqAQACeAAAVisBAAECAADxLgEAAQIAABEwAQACZgEAaTABAAKTAACIMAEA
-ApMAAMYwAQACkwAA0DABAAKTAADwMAEAApMAAAoxAQACkwAAITEBAAKTAAAwMQEAAggB
-AEsxAQACkwAAXjEBAAKTAACpMQEAApMAAOoxAQACkwAA+TEBAAIIAQAUMgEAApMAAGky
-AQACkwAAczIBAAKTAAB9MgEAApMAAIoyAQACkwAAlDIBAAKTAACdMgEAAlYBAKoyAQAC
-yQAAzzIBAAKTAADnMgEAApMAAAEzAQACkwAAFzMBAAKTAAAvMwEAApMAAEYzAQACVgEA
-UzMBAALJAACNMwEAAlYBAJozAQACyQAA2zMBAAJmAQBDNQEAApMAAFw1AQACkwAAeDUB
-AAKTAACUNQEAApMAALA1AQACkwAApDYBAAJmAQDRNgEAAQIAANY2AQABBAAA3DYBAAJz
-AQANNwEAAQIAABI3AQABBAAAGDcBAAJzAQBdOAEAAQIAAG84AQABAgAAhjgBAAIdAQCi
-OAEAAQIAAKk4AQABAgAAvDgBAAIdAQDZOAEAAQIAAOI4AQABAgAA9TgBAAIdAQAiOQEA
-An8AADo5AQABAgAARzkBAAIpAABYOQEAAQIAALw5AQACKQAA6jkBAAIpAAByOgEAAQIA
-APg8AQABAgAALz0BAAJuAABCPQEAAm4AAFk9AQABAgAAcz0BAAIdAQCNPQEAAQIAAJQ9
-AQABAgAAqj0BAAIdAQDLPQEAAQIAAN09AQABAgAA9z0BAAIdAQAYPgEAAQIAACo+AQAB
-AgAARD4BAAIdAQBZPgEAAQIAAKE+AQACbgAAuD4BAAJuAADUPgEAAm4AAOk+AQACbgAA
-/j4BAAJuAAATPwEAAm4AACk/AQABAgAAQz8BAAIdAQBdPwEAAQIAAIw/AQACbgAAoT8B
-AAJuAAC5PwEAAQIAANM/AQACHQEAkUEBAAIKAQC6RAEAAjwBAJpGAQACPAEAw0YBAAJ6
-AADnRgEAAnoAABNHAQACvgAAP0cBAAK+AABeRwEAAQEAAGhHAQABAQAAckcBAAEBAAB8
-RwEAAQEAAIZHAQABAQAAkEcBAAEBAADFRwEAAQIAANdHAQABAgAA7kcBAAIdAQAKSAEA
-AQIAABFIAQABAgAAJEgBAAIdAQBBSAEAAQIAAEpIAQABAgAAXUgBAAIdAQAqSQEAAikA
-AKhJAQACKQAAtkkBAAIpAAD8SQEAAikAAApKAQACKQAAUkoBAAIpAABgSgEAAikAAM5K
-AQABAgAAEk0BAAECAAAqTQEAAQIAAElNAQABAgAAaE0BAAECAACWTQEAAm4AALBNAQAC
-bgAAy00BAAJuAAD6TQEAAm4AABhOAQACbgAANk4BAAJuAABUTgEAAm4AAHJOAQACbgAA
-kE4BAAJuAAC4TgEAAm4AANBOAQACbgAA8E4BAAJuAAAITwEAAm4AAERPAQACbgAAVU8B
-AAJuAABmTwEAAm4AAHpPAQACbgAAnk8BAAJuAACvTwEAAm4AAMBPAQACbgAA1E8BAAJu
-AADoTwEAAm4AAPpPAQABAgAAPFABAAJuAABaUAEAAm4AAGxQAQABAgAAhVABAAIdAQCd
-UAEAAQIAALdQAQACHQEAz1ABAAECAADpUAEAAh0BAAFRAQABAgAAG1EBAAIdAQA5UQEA
-AQIAAFZRAQACHQEAilMBAALUAACfUwEAAtQAAPJTAQAC1AAAJVQBAALUAAA6VAEAAtQA
-AI1UAQAC1AAAuFQBAALUAADNVAEAAtQAACBVAQAC1AAAN1wBAAJ6AABbXAEAAnoAAIdc
-AQACvgAAs1wBAAK+AADcXAEAAQEAAOZcAQABAQAA8FwBAAEBAAD6XAEAAQEAAARdAQAB
-AQAADl0BAAEBAABBXQEAAQIAAFNdAQABAgAAbV0BAAIdAQCGXQEAAQIAAI1dAQABAgAA
-o10BAAIdAQDFXQEAAQIAAM5dAQABAgAA5F0BAAIdAQCyXgEAAikAADBfAQACKQAAPl8B
-AAIpAACEXwEAAikAAJJfAQACKQAA2l8BAAIpAADoXwEAAikAAOJgAQABAgAA+mABAAEC
-AAAZYQEAAQIAADhhAQABAgAAZmEBAAJuAAB+YQEAAm4AAJBhAQABAgAAsmEBAAECAADL
-YQEAAh0BAONhAQABAgAA/WEBAAIdAQAVYgEAAQIAAC9iAQACHQEASWIBAAECAABjYgEA
-Ah0BAIBiAQABAgAAmmIBAAIdAQDeYgEAAQIAAINrAQACegAAp2sBAAJ6AADTawEAAr4A
-AP9rAQACvgAAHmwBAAEBAAAobAEAAQEAADJsAQABAQAAPGwBAAEBAABGbAEAAQEAAFBs
-AQABAQAAAAAAAAEBAAAEAAAAAQEAAAgAAAABAQAADAAAAAEBAAAQAAAAAQEAABQAAAAB
-AQAAGAAAAAEBAAAcAAAAAQEAACAAAAABAQAAJAAAAAEBAAAoAAAAAQEAACwAAAABAQAA
-MAAAAAEBAAA0AAAAAQEAADgAAAABAQAAPAAAAAEBAADkAAAAAQMAAOgAAAABAwAA/AAA
-AAEDAAAAAQAAAQMAABQBAAABAwAAGAEAAAEDAAAsAQAAAQMAADABAAABAwAARAEAAAED
-AABIAQAAAQMAAFwBAAABAwAAYAEAAAEDAAB0AQAAAQMAAHgBAAABAwAAjAEAAAEDAACQ
-AQAAAQMAAKQBAAABAwAAqAEAAAEDAAC8AQAAAQMAAMABAAABAwAA1AEAAAEDAADYAQAA
-AQMAAOwBAAABAwAA8AEAAAEDAAAEAgAAAQMAAAgCAAABAwAAHAIAAAEDAAAgAgAAAQMA
-ADQCAAABAwAAOAIAAAEDAABMAgAAAQMAAFACAAABAwAAZAIAAAEDAABoAgAAAQMAAHwC
-AAABAwAAgAIAAAEDAACUAgAAAQMAAJgCAAABAwAArAIAAAEDAACwAgAAAQMAAMQCAAAB
-AwAAyAIAAAEDAADcAgAAAQMAAOACAAABAwAA9AIAAAEDAAD4AgAAAQMAAAwDAAABAwAA
-EAMAAAEDAAAkAwAAAQMAACgDAAABAwAAPAMAAAEDAABAAwAAAQMAAFQDAAABAwAAWAMA
-AAEDAABsAwAAAQMAAHADAAABAwAAhAMAAAEDAACIAwAAAQMAAJwDAAABAwAAoAMAAAED
-AAC0AwAAAQMAALgDAAABAwAAzAMAAAEDAADQAwAAAQMAAOQDAAABAwAA6AMAAAEDAAD8
-AwAAAQMAAAAEAAABAwAAFAQAAAEDAAAYBAAAAQMAACwEAAABAwAAMAQAAAEDAABEBAAA
-AQMAAEgEAAABAwAAXAQAAAEDAABgBAAAAQMAAHQEAAABAwAAeAQAAAEDAACMBAAAAQMA
-AJAEAAABAwAApAQAAAEDAACoBAAAAQMAALwEAAABAwAAwAQAAAEDAADUBAAAAQMAANgE
-AAABAwAA7AQAAAEDAADwBAAAAQMAAAQFAAABAwAACAUAAAEDAAAcBQAAAQMAACAFAAAB
-AwAANAUAAAEDAAA4BQAAAQMAAEwFAAABAwAAUAUAAAEDAABkBQAAAQMAAGgFAAABAwAA
-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
-AAABAQAA9BYAAAECAAD4FgAAAQIAACgXAAABAgAAKBgAAAH2AAAsGAAAAVoAADAYAAAB
-sgAANBgAAAGkAAA4GAAAAcMAADwYAAABSwAAQBgAAAHOAABEGAAAAVwBAEgYAAABMwEA
-TBgAAAGvAABQGAAAATUAAFQYAAABewAAWBgAAAFOAABcGAAAARwAAGAYAAABTQEAZBgA
-AAF1AQBoGAAAASgAAGwYAAABggAAcBgAAAHuAAB0GAAAATABAHgYAAABJAAAfBgAAAEz
-AACAGAAAAV4AAIQYAAABYgEAiBgAAAEDAQCMGAAAAaUAAJAYAAABRQEAlBgAAAFIAQCY
-GAAAAfMAAJwYAAABzAAAoBgAAAEkAQCkGAAAAYUAAKgYAAABVwEArBgAAAGwAACwGAAA
-AacAALQYAAABfAAAuBgAAAGfAAC8GAAAAUwAAMAYAAABuAAAxBgAAAEgAQDIGAAAAfgA
-AMwYAAABmQAA0BgAAAEcAQDUGAAAAdUAANgYAAABFQEA3BgAAAEtAADgGAAAAaYAAOQY
-AAABQAEA6BgAAAEGAQDsGAAAAQ4BAPAYAAABNAAA9BgAAAFqAAD4GAAAASwBAPwYAAAB
-0gAAABkAAAFGAAAEGQAAAS8AAAgZAAABgQAADBkAAAEJAAAQGQAAAeAAABQZAAABJQEA
-GBkAAAFjAQAcGQAAAV8AACAZAAABCwAAJBkAAAFJAQAoGQAAAQIBACwZAAABUwEAMBkA
-AAE7AAA0GQAAARcBADgZAAABEQAAPBkAAAGuAABAGQAAAWUAAEQZAAAB4gAASBkAAAHk
-AABMGQAAAb0AAFAZAAABRAEAVBkAAAGsAABYGQAAAWEBAFwZAAABDQAAYBkAAAE1AQBk
-GQAAAaIAAGgZAAABDAEAbBkAAAH1AABwGQAAAZUAAHQZAAABNgEAeBkAAAEBAAB8GQAA
-ASsBAIAZAAABdAEAhBkAAAEUAQCMGQAAAUABAJAZAAABBgEAlBkAAAEOAQCYGQAAATQA
-AJwZAAABagAA6CUAAAEtAQDsJQAAAUoBAPAlAAABPgEA9CUAAAFgAQD4JQAAAWwAAPwl
-AAABhwAAACYAAAFiAAAEJgAAAS4AAAgmAAABVwAADCYAAAFYAAAQJgAAATIAABQmAAAB
-UAEAGCYAAAH3AAAcJgAAAWsBACAmAAABdwAAJCYAAAFaAQAoJgAAAesAACwmAAABnQAA
-MCYAAAGqAAA0JgAAAREBADgmAAABHgAAPCYAAAHxAABAJgAAARYAAEQmAAABTAEASCYA
-AAEbAABMJgAAASUAAFAmAAABngAAVCYAAAFfAQBYJgAAAU4BAFwmAAABWwEAYCYAAAEh
-AQBkJgAAAd0AAGgmAAAB6AAAbCYAAAHYAABwJgAAAfsAAHQmAAABcwAAeCYAAAGNAAB8
-JgAAAWkAAIAmAAABMgEAhCYAAAGUAACIJgAAATYAAIwmAAABIgEAkCYAAAEeAQCUJgAA
-AXAAAJgmAAABzQAAnCYAAAEYAQCgJgAAAdEAAKQmAAABtQAAqCYAAAHQAACsJgAAASgB
-ALAmAAABvwAAtCYAAAEwAAC4JgAAAVYAALwmAAAByAAAwCYAAAEvAQDEJgAAAToBAMgm
-AAABEAEAzCYAAAEZAADQJgAAAVIAANQmAAABGgEA2CYAAAGPAADcJgAAAUYBAOAmAAAB
-xAAA5CYAAAHtAADoJgAAATEAAOwmAAAB6QAA8CYAAAEiAAD0JgAAAUcAAPgmAAABhgAA
-/CYAAAHLAAAAJwAAAbsAAAQnAAABPQEACCcAAAG6AAAMJwAAAf8AABAnAAAB+QAAFCcA
-AAE7AQAYJwAAAQgAABwnAAABlgAAICcAAAFmAAAkJwAAAYwAACgnAAABYAAALCcAAAHZ
-AAAwJwAAAd4AADQnAAAB8AAAOCcAAAEBAAA8JwAAAQQBAEAnAAABFgEARCcAAAExAQBM
-JwAAAbUAAFAnAAAB0AAAVCcAAAEoAQBYJwAAAb8AAFwnAAABMAAAWDsAAAEBAABcOwAA
-AQEAAGA7AAABAQAAZDsAAAEBAABoOwAAAQEAAGw7AAABAQAAcDsAAAEBAAB0OwAAAQEA
-AMg8AAABUQAAzDwAAAF2AADQPAAAAVgBANQ8AAABYQAA2DwAAAHHAADcPAAAAakAAOA8
-AAABBwEA5DwAAAFKAADoPAAAAZIAAOw8AAABTQAA8DwAAAHsAAD0PAAAAUMBAPg8AAAB
-gAAA/DwAAAHnAAAAPQAAAdMAAAQ9AAABeQEACD0AAAFxAQAMPQAAAasAABA9AAABLgEA
-FD0AAAFyAAAYPQAAAQ0BABw9AAABIwAAID0AAAFCAQAkPQAAATgBACg9AAABRwEALD0A
-AAFVAAAwPQAAAScBADQ9AAAB6gAAOD0AAAHlAAA8PQAAARAAAEA9AAABUQEARD0AAAFx
-AABIPQAAAc8AAEw9AAABVgEAUD0AAAHJAABUPQAAAYoAAFg9AAABGwEAXD0AAAHjAABg
-PQAAAQ4AAGQ9AAABkQAAaD0AAAEKAABsPQAAAYsAAHA9AAABJgEAdD0AAAGgAAB4PQAA
-AQkBAHw9AAABmAAAgD0AAAGhAACEPQAAAQEBAIg9AAABRAAAjD0AAAEpAQCQPQAAATcB
-AJQ9AAAB/QAAmD0AAAF2AQCcPQAAAT8AAKA9AAABtwAApD0AAAGbAACoPQAAAWYBAKw9
-AAABQgAAsD0AAAGDAAC0PQAAAWoBALg9AAABOAAAvD0AAAFBAADAPQAAAScAAMQ9AAAB
-NwAAyD0AAAE8AADMPQAAAXUAANA9AAABFQAA1D0AAAFoAADYPQAAAeEAANw9AAABYwAA
-4D0AAAEPAQDkPQAAAWUBAOg9AAABwQAA7D0AAAF5AADwPQAAAUMAAPQ9AAABHQAA+D0A
-AAFyAQD8PQAAAfoAAAA+AAABwgAABD4AAAGXAAAIPgAAAR8AAAw+AAABWQEAED4AAAFk
-AAAUPgAAAcYAABg+AAABtgAAHD4AAAHFAAAgPgAAAdYAACQ+AAABbwEALD4AAAEBAQAw
-PgAAAUQAADQ+AAABKQEAOD4AAAE3AQA8PgAAAf0AAPxEAAABAQAAAEUAAAEBAAAERQAA
-AQEAAAhFAAABAQAADEUAAAEBAAAQRQAAAQEAAEBFAAABAQAAREUAAAEBAABIRQAAAQEA
-AExFAAABAQAAUEUAAAEBAABURQAAAQEAAFhFAAABAQAAXEUAAAEBAABgRQAAAQEAAGRF
-AAABAQAAaEUAAAEBAABsRQAAAQEAAHBFAAABAQAAdEUAAAEBAAB4RQAAAQEAAHxFAAAB
-AQAAgEUAAAEBAABwUQAAAQEAAHRRAAABAQAAeFEAAAEBAAB8UQAAAQEAAIBRAAABAQAA
-hFEAAAEBAACoXgAAAQEAAKxeAAABAQAAsF4AAAEBAAC0XgAAAQEAALheAAABAQAAvF4A
-AAEBAADAXgAAAQEAAMReAAABAQAAuGoAAAEBAAC8agAAAQEAAMBqAAABAQAAxGoAAAEB
-AADIagAAAQEAAMxqAAABAQAA0GoAAAEBAADUagAAAQEAAOh2AAABAQAA7HYAAAEBAADw
-dgAAAQEAAPR2AAABAQAA+HYAAAEBAAD8dgAAAQEAAAB3AAABAQAABHcAAAEBAAAMAAAA
-AQMAABAAAAABAwAAFAAAAAEDAAAYAAAAAQMAABwAAAABAwAAIAAAAAEDAAA8AQAAAQUA
-AEQBAAABBQAATAEAAAEFAABUAQAAAQUAAFwBAAABBQAAZAEAAAEFAABsAQAAAQUAAHQB
-AAABBQAAfAEAAAEFAACEAQAAAQUAAIwBAAABBQAAlAEAAAEFAACcAQAAAQUAAKQBAAAB
-BQAArAEAAAEFAAC0AQAAAQUAAA==
+enowMDBiNmYxYwB6ejAwMmRjYTBiAHp6MDA1YjQ0YWQAenowMmRhZWVlMgB6ejA2ZGRm
+NDRhAHp6MGZhYzBjOWIAenowYjZmOWVmZgB6ejAwYjZjNmJjAGF0aF9oYWxfYWRkaXRp
+b25hbF9zd2JhX2JhY2tvZmYAenowMDAyZGI5MgBhdGhfaGFsX3ZlcnNpb24AenowZGM1
+OThkZQB6ejAyZGJhYzJlAHp6MDJkYjc5YWUAenowMDE2ZTUzMgB6ejBiNmNmMDA5AHp6
+MDAxNmUxMmMAenowMDE2ZDllNAB6ejAwMDJkYWVhAHp6MDA1YjVjYjIAenowMTZkYTI1
+MQB6ejA2ZjZhZjYwAHp6MDZkZmRkOTMAYXRoX2hhbF9tYWxsb2MAenowMDBiNmRkMgB6
+ejAyZGQ5MmFkAHp6MDE2ZGIyNTEAenowZTEwN2NhMQB6ejAwYjZjNzVlAHp6MDE2ZGQw
+NTEAenowMmRiZDFiMgB6ejAyZGMxNzYzAHp6MGI2OTBkNmQAenowMTZkZjA1MQB6ejAw
+MTZkOTUwAHp6MDBiNzA2YmMAenowMGI2ZjA0ZAB6ejAwMTZkODcyAHp6MDZkZWY0NGEA
+enowMGI2ZThiMgB6ejA1YjhjMmVkAHp6MDZmYjk0N2IAenowZWJiMWUzZgB6ejBiNmY5
+ZDAyAHp6MGQxNGQxYjAAenowYjQ4MDMxZQB6ejAxNmRiYmZlAHp6MDE2ZTU0OGEAenow
+MDE2ZDg1MAB6ejAwMGI2ZmY4AGF0aF9oYWxfbWVtY3B5AHp6MDJkYmNiYmQAenowMTZk
+YTBkZAB6ejAyZGJiZGZkAHp6MDJkYjI4NTEAenowMmRiZGMxZAB6ejA2ZGIwY2YyAHp6
+MDE2ZWI5YWQAenowMGI2Y2ViYwB6ejBkOTQ4NGExAGF0aF9oYWxfcHJvYmUAenowMTZl
+YTlhZAB6ejBmZDRkMWIwAHp6MDJkYjM3NjMAYXRoX2hhbF9idWlsZG9wdHMAenowMmRh
+ZjM1ZAB6ejA2ZGRkZDkzAHp6MDBiNmYwYjIAenowZGFkYzYyYwB6ejAxNmRmMjUxAHp6
+MDE2ZDkyNTEAenowMmRiMDg1MQB6ejBiNzIxYWVkAHp6MDY3Y2ZjYWUAenowMDBiNmNm
+OAB6ejBjOTRkMWIwAHp6MDJkYWZhYjIAenowNWI5MmFlZAB6ejA1YjhjM2U0AHp6MDA1
+YjhjY2IAenowYjZkOWVmZgB6ejAyZGIxMWIyAHp6MDJkYmZmYjEAenowMmRiZjc2MwB6
+ejAwNWI2OGZkAHp6MDA1YjQ0ZWQAenowYjcxMWFlZAB6ejAwMTZkNDRkAHp6MGI1ZTMx
+NjAAenowZDg0ODRhMQB6ejAxNmQ4YjJkAHp6MDE2ZTA4OWIAenowMmRiYjg3NQB6ejAy
+ZGFlODUxAHp6MGI4MWVhOTQAenowMTZkZWMxZgB6ejAwYjZmZWJjAHp6MGU4OTQ5MDcA
+enowMGI2ZWE3YQB6ejAzM2U4ZmJmAHp6MGNmYTU4NzUAenowMmRiOTlhZQB6ejAyZGI5
+YWIyAHp6MDAwYjZiZTgAenowZGU2ODM3ZgB6ejAxNmRhYmZlAHp6MDAwYjcwMWMAenow
+YjcwOWQwMgB6ejA2N2QyNWUyAHp6MDE5ZjNhMDEAenowNzAzOTQ3YgBhdGhfaGFsX21l
+bXplcm8AenowNmRmZmMwZAB6ejBiNjc1MGI4AHp6MDE2ZTJkZmQAenowMDBiNmQyMgB6
+ejA2ZmVhZjYwAHp6MGRjNGE1YzUAenowMGI3MGY3ZABhdGhfaGFsX3N3X2JlYWNvbl9y
+ZXNwb25zZV90aW1lAHp6MDAxNmQ2NGQAenowOWY2NGI2YQB6ejAwNWI2NTdhAHp6MDZm
+Mzk0N2IAenowNmRhMGNmMgB6ejBiN2JhZDNlAHp6MDBiNmY5NjEAenowYjY5NzNiYwB6
+ejAyZGJkMzVkAHp6MDA1Yjg4ZmQAenowMmRiYmMxZAB6ejAyZGFmZGZkAHp6MDZkN2Rk
+OTMAYXRoX2hhbF9kZWxheQB6ejAyZGIxZGZkAHp6MDY3ZDJmNDEAenowMmRhZjg3NQB6
+ejBiN2VkZTZkAHp6MDE2ZDhkNDEAenowMDJkYWU5MgB6ejBiN2FkZTZkAHp6MGRhZGIw
+ZGUAenowMmRiYjM1ZAB6ejAyZGIzZGZkAHp6MDJkYjUzZWQAenowMTZkY2VhZQB6ejAw
+MGI2ZGEyAHp6MDAwYjZlMjIAenowNWI4MDA0MQB6ejAyZGFjZWUyAHp6MDAxNmQ4NDgA
+enowMTZkOWIyZAB6ejAwMmRhOTFkAHp6MDAxNmUwMmMAenowMGI3MDc3ZAB6ejAwNWI2
+OTdhAHp6MDAxNmRhZTQAenowMTZlMTA5YgB6ejAwNWI0YTJkAHp6MDE2ZGUwZGQAenow
+MTZkZjBkZAB6ejBkZjA3Y2ExAHp6MDJkYmQ3NjMAenowMDBiNmU1MgB6ejA2N2QwYzQ3
+AHp6MDViNmM2ZGIAenowYzMxNWViNQB6ejBkYjFlZDg2AHp6MDZkNDA2ZTAAenowMTZl
+MDI1MQB6ejAwMDJkYmIyAHp6MDAyZGQ4NmQAenowMDE2ZTE0ZAB6ejAyZGI1OWFlAHp6
+MDA2N2QyMjEAenowMTZkODBkZAB6ejAwYjZlMDIyAHp6MDA1Yjg5M2QAenowNWI4MWIx
+YgB6ejAyZGIxM2VkAHp6MDBiNmQxMjMAenowMDBiNmNlOAB6ejA1YjhhYWVkAHp6MGI2
+ZWQzNjMAenowMmRhZjFiMgB6ejAwMDViNWUyAHp6MDMzZWJmYmYAenowNWI2ODZkYgB6
+ejAwMGI2ZWY4AHp6MDAwYjZmOWMAenowYjcxOWFlZAB6ejAwNWI1OGIyAHp6MDViN2Ri
+MWIAenowYjgyZGU2ZAB6ejAwMTZkNzMyAHp6MDJkYWRhYjIAenowZjQ1ZTZlMwBhdGhf
+aGFsX2luaXRfY2hhbm5lbHMAenowMGI2ZDZiYwB6ejBjMTRkMWIwAHp6MDAwMmRiZDIA
+enowZGE0ODRhMQB6ejAxNmUwYjg3AHp6MDViOTAyZWQAenowNWI2N2M2NAB6ejBkYzJl
+MzkwAHp6MGE2MGQxNDUAenowMmRiYWJiZAB6ejAwMGI2YzFkAHp6MDViOGVhZWQAenow
+MDViN2I5ZAB6ejAwNWI1NDQ2AHp6MDViNjQ2ZGIAenowMGI2ZjkyMwB6ejBkZDY4Mzdm
+AHp6MDE2ZTEyNTEAenowZGM2YTVjNQB6ejAyZGIzNzBhAHp6MDAwNWI2NzIAenowNmRl
+ZmMwZAB6ejAyZGJmMzVkAHp6MDAwYjZjNzgAenowMDE2ZDgzMgB6ejAyZGI1NzBhAHp6
+MDA1YjZkN2EAenowMDJkYjI5MgB6ejAwNWI5MGNiAHp6MGI2ZjUzNjMAenowMDViNWM0
+NgB6ejA2ZDkwY2YyAHp6MDZkOGRkOTMAenowMTZkZmI4NwB6ejAwMTZkYTQ4AHp6MDAy
+ZGFmMDAAenowYjY2MzFhOAB6ejAwMmRiMDkyAGF0aF9oYWxfZ2V0d2lyZWxlc3Ntb2Rl
+cwB6ejAxNmUxYjg3AAYAAAABAwAAXwAAAAEDAACPAAAAAQMAANAAAAABAwAA3AAAAAED
+AADtAAAAAQMAAPQAAAABAwAA+wAAAAEDAAACAQAAAQMAAAkBAAABAwAADQIAAAJ8AAAk
+AgAAAp8BADwCAAACSQAA9gIAAAJKAQDbBQAAAsoAAL0GAAACygAAfgcAAAIyAQCIBwAA
+AQIAAK4HAAACMgEAuAcAAAECAABACAAAAmkAAFYIAAACaQAAlAgAAAECAAAFDgAAAg4B
+ACEOAAACMgEAMw4AAAECAACmDgAAAjIBALIOAAABAgAAJQ8AAAECAACrDwAAAQIAAL4P
+AAABAgAAXxMAAALcAAAmGAAAAjQBAFsbAAACiQAACSUAAALcAAAyJQAAAjQBALElAAAC
+NAEAKSYAAAI0AQCJJgAAAokAAIkwAAABAgAAmzAAAAECAABJQAAAAQQAAHVAAAABBAAA
+70AAAAEEAAD4QAAAAQQAAFNCAAABBAAAWkIAAAEEAAC/QgAAAQQAAMZCAAABBAAADEMA
+AAEEAAAfQwAAAQQAACZDAAAC9wAAcUMAAAEEAAA7RAAAAQQAAEVEAAABBAAAtUQAAAEE
+AADJRAAAAQQAANFEAAABBAAALEgAAAECAAA0SAAAAQIAAORIAAABBAAAFUkAAAEEAABD
+SQAAAQQAAHRJAAABBAAAokkAAAEEAADQSQAAAQQAABlLAAACNAEAaUwAAAECAACOTAAA
+AQEAAE1OAAACDgEAI08AAAIOAQBlTwAAAg4BAFRRAAABBAAAZlEAAAEEAABzUQAAAQQA
+ANhRAAABBAAA6lEAAAEEAAD3UQAAAQQAAJdSAAAC3AAAuFIAAAECAAC+UgAAAvcAAEZT
+AAACUAEAxlMAAAIwAAD0UwAAAj8BACZUAAACPwEAVVQAAAI/AQClVAAAAj8BAOFUAAAC
+PwEAllUAAAGXAACgVQAAAXUBAKpVAAABgQAAzlcAAAI/AQBKWAAAAokAAHxYAAACiQAA
+cFkAAAEyAAB/WQAAATwBALlZAAACfAEA4l4AAAJyAAAIXwAAAvcAACRfAAAC9wAAOl8A
+AAECAABDXwAAAvcAAHVfAAACTAAACWAAAAI4AQAcYAAAAnkAAD9hAAACZwEAD2IAAAL3
+AAC8YwAAAicAAN9jAAACcwEAGGQAAAInAAAyZAAAAicAAGhkAAACcwEArGQAAAInAAAu
+ZQAAAicAAGRlAAACcwEAr2UAAAInAAD7ZQAAAikBAEdmAAACHQAAcGYAAAJMAQDlZgAA
+AkoBAA1nAAACSgEAHmgAAAECAQAtaAAAARMAAEVoAAACPgEAsmgAAAJKAQCnawAAAg4B
+AP5rAAACUAEAFm4AAALCAADMbgAAAQIAAABvAAACoAEASnAAAAJKAQBucAAAAkwAAHtw
+AAACngAApHAAAAJaAAC/cAAAAoQAAPJwAAACmgEAEXEAAAIMAAAwcQAAAisBAD5yAAAC
+CgEAc3IAAAJKAQCPcgAAAkoBALdyAAACCgEACnMAAAJKAQAzcwAAAkoBAEBzAAACCgEA
+fXMAAAIOAQDEcwAAAkoBAORzAAACSgEAC3QAAAJKAQCCdAAAAkoBAKJ0AAACSgEAz3QA
+AAJKAQDzdAAAAkwAACB1AAACngAANHUAAAJKAQA+dQAAAp4AALV1AAACSgEAyHUAAAJM
+AABDeQAAAQIAAJR6AAABAgAAnnoAAAL3AACoegAAAQIAALJ6AAAC9wAAD3sAAAIwAAA3
+ewAAAjAAALt8AAACMAAA13wAAAIwAADwfAAAAjAAAGt9AAACMAAA6H0AAAJMAAAJfgAA
+AkoBAA9+AAACVQAAhX4AAAJ/AQDBfgAAAigBADt/AAACNAEAen8AAALLAACjggAAAqwA
+ALSCAAACZwEA5oIAAAJnAQADgwAAAmcBAAWEAAACSgEANYQAAAJMAACjhgAAAjAAAL2G
+AAAC3AAA3oYAAAECAADkhgAAAvcAAGOHAAACsAEApYcAAAJKAQA6iAAAAkoBAHWIAAAC
+YAEA0IgAAAJgAQANiQAAAmABAHCJAAABAgAAtYkAAAKTAQDyiQAAAkoBABqKAAACSgEA
+VYoAAAJgAQCCigAAAewAAIyKAAABQQAAlooAAAHhAACnigAAApsBAMqKAAACYAEAKYsA
+AAJ+AQBdiwAAAjEBAGWLAAACiQAAQYwAAAJKAQDbjAAAAu4AAG2NAAACYAEAJI4AAAEy
+AAAzjgAAATwBAFaOAAACqAEACZQAAALaAAAslAAAAvcAAEiUAAAC9wAAXpQAAAECAABn
+lAAAAvcAAKWUAAACTAAAYZUAAALzAAB9lQAAAlcBAJCVAAACOAAAjJYAAAIYAQCwlgAA
+AQIAANeWAAAC9wAAYJgAAAInAAB/mAAAAnMBALiYAAACJwAA0pgAAAInAAAImQAAAnMB
+AEyZAAACJwAAzpkAAAInAAAEmgAAAnMBAE+aAAACJwAA55oAAALvAAAjmwAAAikBAG+b
+AAACHQAAmJsAAAJMAQDemwAAAkoBAAWcAAACSgEAYZ0AAAHHAABpnQAAARoBAHGdAAAB
+/gAAiZ0AAAI+AQDdnQAAAkwAAMSgAAACDgEA7KEAAAKwAQACowAAAjAAABKjAAACMAAA
+IKMAAAEEAAA6owAAAQQAAGWjAAABBAAAd6MAAAEEAACiowAAAQIAALWjAAABAgAAzaMA
+AAECAADhowAAAQIAAPmjAAABAgAA/qMAAAECAAAfpgAAAjUBAAqnAAACSgEALqcAAAJM
+AAA7pwAAAh8AALinAAACIAEAXqgAAAJUAACRqAAAAqUAALCoAAAC4wAAz6gAAAI5AABC
+qQAAAm4BAHKpAAACSgEAm6kAAAJuAQA6qgAAAkoBAHmqAAACSgEA06oAAAJKAQAIqwAA
+AkoBABWrAAACbgEAU6sAAAIOAQAurAAAAh8AAEKsAAACSgEATKwAAAIfAADGrAAAAkoB
+ANmsAAACTAAAFq0AAAKRAAAzrQAAAQIAAECtAAACMAAAUa0AAAECAAB5rQAAAjAAAKSt
+AAACMAAAtq4AAAJKAQDBrwAAAokBAPGvAAABAgAAVrAAAAECAABdsAAAAQIAAG+wAAAB
+AgAA+7EAAAEEAAAcsgAAAQQAADmyAAABBAAAAbMAAAEEAAAVswAAAjAAADGzAAABBAAA
+QrMAAAIwAABfswAAAjAAAHGzAAABBAAAgrMAAAIwAACfswAAAjAAAK+zAAABBAAA0bMA
+AAEEAADpswAAAQQAAAS2AAAC7wAA1rgAAAIWAABbuQAAAQUAAGC5AAACNAEAbbkAAAEF
+AAByuQAAAjQBAHe5AAABBQAAj7kAAAEFAACeuQAAAQUAAKW5AAABBQAArrkAAAEFAAC8
+uQAAAQUAANS5AAABBQAA67kAAAEFAAD4uQAAAQUAAAm6AAABBQAALboAAAEFAABQugAA
+AQUAAF66AAABBQAAaLoAAAEFAADZugAAAQUAABq7AAABBQAAnrsAAAEFAACsuwAAAQUA
+ANK7AAABBQAA9bsAAAEFAAANvAAAAQUAABK8AAABBQAAO7wAAAEFAABAvAAAAQUAAL68
+AAABBQAAB70AAAImAQA/vwAAAQIAAHvAAAABAgAAa8EAAAJvAACExQAAAQIAAJrFAAAB
+AgAAN8cAAAECAAB6xwAAAQIAAI3HAAABAgAAtscAAAECAADQxwAAAQIAAPLHAAABAgAA
+BcgAAAECAAAMyQAAAgQBAB3JAAACGAEAWskAAAIYAQCGyQAAAhgBAMXJAAACfwEAAcoA
+AAIoAQCLygAAAjQBANLKAAACZQAAWM4AAAE8AQBezgAAATIAAG7OAAABzQAAf9AAAAKP
+AQCQ0AAAAkoBALvTAAACMAAA2dMAAAECAADq0wAAAQIAAPfTAAABAgAABNQAAAECAABf
+1AAAAtwAAInUAAABAgAAj9QAAAL3AAA/1QAAAQIAAEvVAAAC9wAAg9UAAAJRAACk1QAA
+ApwBACPWAAACpgEAedYAAAIcAACj1gAAAkUAAOvXAAACpQEAgNgAAAKlAQCw2AAAAqUB
+APXYAAACpQEARNkAAAKlAQCv2QAAAQIAALTZAAABAgAA/9kAAAKTAQCc2gAAAkoBAKTa
+AAACRQAAxNoAAAJKAQD72gAAAqUBACzbAAABCAEANtsAAAG3AAA/2wAAAkQBAIbbAAAC
+0wAAq9sAAAKwAADS2wAAAqMBAOXbAAAChwEABdwAAAItAQAr3AAAAqUBAIbcAAACvgAA
+rdwAAAKGAADW3AAAAnYAAPncAAACtwAAAd0AAAJGAAAO3QAAApwBAB7dAAACMQEAJt0A
+AAKJAAAB3gAAAkoBAB3iAAACtgAAPeIAAAGnAQBK4gAAAQEAAJ3iAAACtgAAIOMAAAEy
+AAAv4wAAATwBAFfjAAACmwAABeUAAAJMAAA85gAAAuQAAOrqAAABAgAA1uwAAAI5AQAi
+7gAAAjkBAFDuAAAC9wAAbO4AAAL3AACQ7gAAAvcAAK7uAAAC9wAAIPAAAAECAABH8AAA
+AvcAAK/yAAACDwAA4PIAAAInAAAD8wAAAnMBADzzAAACJwAAVvMAAAInAACM8wAAAnMB
+ANDzAAACJwAAUvQAAAInAACI9AAAAnMBANP0AAACJwAAa/UAAAJzAQBT9gAAAiYAAI/2
+AAACGAAAs/gAAAIYAACp+QAAAQIAALD5AAABAgAAv/kAAAECAADp+QAAAQIAACf8AAAC
+jwAAQfwAAAECAAB5/AAAAikBAKv8AAABAgAAwP0AAAECAADG/QAAAqkAAPz9AAACHQAA
+JP4AAAJMAQBe/gAAAkoBAIL+AAACSgEAMQABAAEtAABLAAEAAeUAAF8AAQAB8gAAaQAB
+AAG0AABxAAEAAWMBAHkAAQAB3gAAgAABAAEXAACJAAEAAXABAJAAAQAB5QAAlwABAAHy
+AACuAAEAAj4BAAEBAQACTAAAPAEBAAIxAABEAQEAAuoAAFEBAQAC6QAAdwEBAAKIAAD+
+AwEAApgAABUEAQACcwAAnQQBAAKcAQC6BAEAAg4BAB8FAQAC1wAANAUBAALqAACxBQEA
+Ag0AABwGAQACYAAAJAYBAAJOAAAxBgEAAqYBAC0HAQABAgAAPwcBAAECAABZBwEAAkoB
+AG8HAQABAgAAlgcBAAECAACsBwEAAkoBAOoHAQACJAEAVgkBAAJcAAB/CQEAAlYBAAMK
+AQACnwAAEwoBAAIXAQAjCgEAAlkBALMKAQACJgAAtgsBAAK7AADZCwEAAjQAAOYLAQAC
+XwAAmgwBAAJKAQC8DAEAAkoBAM0MAQACSgEAAg0BAAJKAQCXDQEAAlAAAOwNAQACkgAA
+Sw4BAALDAABdDgEAAkwAAGoOAQACpAAA7Q4BAAImAQBXEAEAAkQAAHIQAQACLgAAjRAB
+AAJIAADaEAEAAj0BADYRAQACSwAARxEBAAJxAQAqEgEAAg4BAEoSAQACsgEAnxIBAAJK
+AQDDEgEAArsAABMTAQACSgEAIhMBAAJcAACXEwEAAp8AAKcTAQACFwEAchQBAAKcAQDM
+FAEAApwBAIEWAQACSgEAoBYBAAJKAQDqFgEAAg4BANkYAQAC1wAA3RkBAAJKAQDwGQEA
+AkwAABEaAQACnAEA3hoBAAJqAAA0GwEAAikBAFAcAQACMAAAnB8BAAIPAABeIQEAAtEA
+AIQpAQACXAAAqikBAAI0AQC7KQEAAjQBAO4pAQABAgAA9SwBAAIWAAB9LgEAAiYBABAy
+AQABAgAAwjIBAAL3AAAzNAEAAm0BAHE1AQACbQEAczcBAAECAACDNwEAAQIAAKE3AQAB
+AgAArTcBAAECAAA2OgEAAQIAAEA6AQABAgAAxTsBAAIwAAB2PAEAAl0AAJw8AQACXQAA
+yDwBAAJdAAABPQEAAmkAAC89AQACXQAAez0BAAJpAAC2PQEAAmkAAKE+AQAC5AAA/D4B
+AALkAABEPwEAAn8BAIw/AQACKAEAg0ABAAI0AQDZQAEAAlkAAA9EAQABPAEAFUQBAAEy
+AAAjRAEAAc0AAEdGAQACsgEAWEYBAAJKAQBlRgEAArIBABJHAQACSgEAPUcBAAJKAQBH
+RwEAArIBAEVLAQACnQEAp0sBAAKdAQCFTAEAAjQBAG5NAQACMQAAok0BAAKIAAAGTgEA
+AQIAAKRRAQABAgAANFIBAAJ2AABDUgEAAosBAFZSAQAC6AAAg1IBAAKLAQCWUgEAAugA
+AMNSAQACMQAA11IBAAKLAQDqUgEAAugAAKlTAQACnQEA91MBAAKpAAAYVAEAAqkAAFlU
+AQACqQAAZlQBAAKpAACJVAEAAqkAAKhUAQACqQAAwlQBAAKpAADRVAEAAjIBAO9UAQAC
+qQAABVUBAAKpAABDVQEAAqkAAIVVAQACqQAAllUBAAIyAQC0VQEAAqkAAAxWAQACqQAA
+GVYBAAKpAAAmVgEAAqkAADNWAQACqQAAQFYBAAKpAABIVgEAAosBAFVWAQAC6AAAflYB
+AAKpAACaVgEAAqkAALxWAQACqQAA1lYBAAKpAADyVgEAAqkAAApXAQACiwEAF1cBAALo
+AABRVwEAAosBAF5XAQAC6AAAn1cBAAKdAQAOWQEAAqkAACtZAQACqQAAR1kBAAKpAABj
+WQEAAqkAAH9ZAQACqQAASloBAAITAQDLWgEAAp0BAE9cAQACpwAAbVwBAALcAACNXAEA
+Ai8BANBcAQACLwEA3lwBAAKJAAAJYAEAAjQBADxgAQACNAEATWABAAI0AQCcYAEAAi8B
+AL1gAQACiwEAymABAALoAADlYAEAAosBAPJgAQAC6AAACmEBAAKLAQAXYQEAAugAAEph
+AQACiwEAb2EBAALoAACfYQEAAosBAKxhAQAC6AAAxmEBAAIvAQBXYgEAAi8BAH1lAQAC
+NAEAmGUBAAI0AQDMZQEAAlIBAFVmAQABAgAAZ2YBAAECAAB+ZgEAAkoBAJpmAQABAgAA
+oWYBAAECAAC0ZgEAAkoBANFmAQABAgAA2mYBAAECAADtZgEAAkoBAB5nAQACkQAAOmcB
+AAECAABHZwEAAjAAAFhnAQABAgAAuGcBAAIwAADmZwEAAjAAAGZoAQABAgAAN2sBAAEC
+AABsawEAAn0AAH9rAQACfQAAlWsBAAECAACvawEAAkoBAMlrAQABAgAA0GsBAAECAADm
+awEAAkoBAANsAQABAgAADWwBAAECAAAjbAEAAkoBAEBsAQABAgAASmwBAAECAABgbAEA
+AkoBAHVsAQABAgAAwWwBAAJ9AADcbAEAAn0AAPhsAQACfQAADW0BAAJ9AAAibQEAAn0A
+ADdtAQACfQAATW0BAAECAABnbQEAAkoBAIFtAQABAgAAsG0BAAJ9AADFbQEAAn0AAAxu
+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
+AABsAAAAAQEAAHAAAAABAQAAdAAAAAEBAAB4AAAAAQEAAMgBAAABHwEAzAEAAAFnAADQ
+AQAAAc4AANQBAAABvwAA2AEAAAGVAQDcAQAAAeIAAOABAAABVwAA5AEAAAHwAADoAQAA
+ARwBAOwBAAABXQEA8AEAAAHFAAD0AQAAAQsAAPgBAAABCAAA/AEAAAFaAQAAAgAAAasA
+AAQCAAABkgEACAIAAAFiAQAMAgAAAcsAABACAAABPwAAFAIAAAGKAAAYAgAAAVoAABwC
+AAABIgAAIAIAAAGBAQAkAgAAAawBACgCAAABLwAALAIAAAGUAAAwAgAAAV8BADQCAAAB
+KgAAOAIAAAE9AAA8AgAAAWsAAEACAAABmQEARAIAAAGUAQBIAgAAASwBAEwCAAABwAAA
+UAIAAAF4AQBUAgAAAXsBAFgCAAABGwEAXAIAAAHtAABgAgAAAVEBAGQCAAABmQAAaAIA
+AAGMAQBsAgAAAcwAAHACAAABwgAAdAIAAAGNAAB4AgAAAboAAHwCAAABWAAAgAIAAAHW
+AACEAgAAAU0BAIgCAAABIQEAjAIAAAGvAACQAgAAAUgBAJQCAAAB+gAAmAIAAAF0AQCc
+AgAAAWQBAKACAAABQAEApAIAAAEzAACoAgAAAcEAAKwCAAABcgEAsAIAAAEuAQC0AgAA
+ATgBALgCAAABPgAAvAIAAAF5AADAAgAAAVsBAMQCAAAB9QAAyAIAAAFSAADMAgAAATcA
+ANACAAABkwAA1AIAAAEJAADYAgAAAQYBANwCAAABUwEA4AIAAAFJAQDkAgAAAQcBAOgC
+AAABmgEA7AIAAAFsAADwAgAAAQwAAPQCAAABfQEA+AIAAAG4AAD8AgAAASIBAAADAAAB
+KwEABAMAAAGIAQAIAwAAAUcBAAwDAAABsQAAEAMAAAFHAAAUAwAAAUIBABgDAAABFQAA
+HAMAAAHJAAAgAwAAAXIAACQDAAABCgEAKAMAAAELAQAsAwAAAWkBADADAAABfAEANAMA
+AAGYAQA4AwAAARAAADwDAAABZgEAQAMAAAE2AQBEAwAAAR4BAEgDAAABrAAATAMAAAFn
+AQBQAwAAAQEAAFQDAAABqgEAWAMAAAE/AQBgAwAAAXIBAGQDAAABLgEAaAMAAAE4AQBs
+AwAAAT4AAHADAAABeQAAdAMAAAEBAACoGAAAAVwBAKwYAAABfgEAsBgAAAFvAQC0GAAA
+AZcBALgYAAABZgAAvBgAAAF6AADAGAAAAZ0AAMQYAAABbwAAyBgAAAESAADMGAAAAXsA
+ANAYAAABggEA1BgAAAGRAQDYGAAAAYsAANwYAAAByAAA4BgAAAEOAADkGAAAATYAAOgY
+AAABZAAA7BgAAAFlAADwGAAAAToAAPQYAAABhQEA+BgAAAEgAQD8GAAAAaIBAAAZAAAB
+hwAABBkAAAGPAQAIGQAAARQBAAwZAAABtQAAEBkAAAE7AQAUGQAAASQAABgZAAABGQEA
+HBkAAAEbAAAgGQAAAYABACQZAAAB+AAAKBkAAAEhAAAsGQAAASsAADAZAAABuQAANBkA
+AAGWAQA4GQAAAYMBADwZAAABkAEAQBkAAAFOAQBEGQAAAQMBAEgZAAABEAEATBkAAAH/
+AABQGQAAASUBAFQZAAABgwAAWBkAAAGiAABcGQAAAXgAAGAZAAABYQEAZBkAAAGqAABo
+GQAAAUIAAGwZAAABTwEAcBkAAAFLAQB0GQAAAX8AAHgZAAABOwAAfBkAAAFlAQCAGQAA
+Ae4AAIQZAAABQwEAiBkAAAH0AACMGQAAAdIAAJAZAAAB8wAAlBkAAAFXAQCYGQAAAd0A
+AJwZAAABOAAAoBkAAAFjAACkGQAAAecAAKgZAAABXgEArBkAAAFsAQCwGQAAAToBALQZ
+AAABHgAAuBkAAAFeAAC8GQAAAUUBAMAZAAABqwEAxBkAAAFKAADIGQAAAaUAAMwZAAAB
+eQEA0BkAAAHjAADUGQAAARYBANgZAAABIAAA3BkAAAEMAQDgGQAAATkAAOQZAAABEQEA
+6BkAAAH8AADsGQAAAZUAAPAZAAABKAAA9BkAAAFTAAD4GQAAAZwAAPwZAAAB6wAAABoA
+AAHaAAAEGgAAAW4BAAgaAAAB2QAADBoAAAFpAQAQGgAAAagBABQaAAABBwAAGBoAAAGt
+AAAcGgAAAXQAACAaAAABbQAAJBoAAAEAAQAoGgAAAQQBACwaAAABGAEAMBoAAAEBAAA0
+GgAAAUEBADgaAAABYAEAQBoAAAHSAABEGgAAAfMAAEgaAAABVwEATBoAAAHdAABQGgAA
+ATgAAFQaAAABAQAA9DYAAAEBAAD4NgAAAQEAAPw2AAABAQAAADcAAAEBAAAENwAAAQEA
+AAg3AAABAQAADDcAAAEBAAAQNwAAAQEAAOg4AAABXQAA7DgAAAGGAADwOAAAAY0BAPQ4
+AAABbgAA+DgAAAFGAAD8OAAAAeYAAAA5AAABxAAABDkAAAEwAQAIOQAAAT0BAAw5AAAB
+dQAAEDkAAAEvAQAUOQAAAYwAABg5AAAB0AAAHDkAAAGaAAAgOQAAAbYAACQ5AAABVgAA
+KDkAAAGoAAAsOQAAAVkAADA5AAABFQEANDkAAAF3AQA4OQAAAZIAADw5AAABDwEAQDkA
+AAH2AABEOQAAAbIBAEg5AAABpwEATDkAAAHGAABQOQAAAYIAAFQ5AAABNwEAWDkAAAEp
+AABcOQAAAXYBAGA5AAABagEAZDkAAAGOAABoOQAAAXoBAGw5AAABYQAAcDkAAAFVAQB0
+OQAAARIBAHg5AAABDQEAfDkAAAEUAACAOQAAAYYBAIQ5AAABgAAAiDkAAAHxAACMOQAA
+AYsBAJA5AAAB6AAAlDkAAAGgAACYOQAAAUYBAJw5AAABrgEAoDkAAAERAACkOQAAAacA
+AKg5AAABCgAArDkAAAGhAACwOQAAAVQBALQ5AAABvAAAuDkAAAH5AAC8OQAAAUAAAMA5
+AAABMwEAxDkAAAGuAADIOQAAAb0AAMw5AAABKgEA0DkAAAFPAADUOQAAAVgBANg5AAAB
+aAEA3DkAAAEnAQDgOQAAAa0BAOQ5AAABSwAA6DkAAAHVAADsOQAAAbMAAPA5AAABnQEA
+9DkAAAFOAAD4OQAAAZYAAPw5AAABoQEAADoAAAGyAAAEOgAAAdsAAAg6AAABRAAADDoA
+AAFNAAAQOgAAAS4AABQ6AAABQwAAGDoAAAE8AAAcOgAAAfsAACA6AAABSAAAJDoAAAGF
+AAAoOgAAATUAACw6AAABNAAAMDoAAAEaAAA0OgAAAXcAADg6AAABCQEAPDoAAAFwAABA
+OgAAATkBAEQ6AAABnAEASDoAAAHfAABMOgAAAWkBAFA6AAABmwAAVDoAAAGpAQBYOgAA
+ASMBAFw6AAAB4AAAYDoAAAElAABkOgAAAY4BAGg6AAABcQAAbDoAAAHkAABwOgAAAdQA
+AHQ6AAAB/QAAeDoAAAGlAQCAOgAAASoBAIQ6AAABTwAAiDoAAAFYAQCMOgAAAWgBAJA6
+AAABJwEAlDoAAAGvAQCkSQAAAQEAAKhJAAABAQAArEkAAAEBAACwSQAAAQEAALRJAAAB
+AQAAuEkAAAEBAAAMSgAAAQEAABBKAAABAQAAFEoAAAEBAAAYSgAAAQEAABxKAAABAQAA
+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
+AAA=
====
-
diff --git a/usr/src/uts/common/io/ath/hal_x86_64.o.uu b/usr/src/uts/common/io/ath/hal_x86_64.o.uu
index 9ef4c90f80..312e482a5d 100644
--- a/usr/src/uts/common/io/ath/hal_x86_64.o.uu
+++ b/usr/src/uts/common/io/ath/hal_x86_64.o.uu
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting, Atheros
+ * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting, Atheros
* Communications, Inc. All rights reserved.
*
* Use is subject to license terms.
@@ -36,1971 +36,2311 @@
* SUCH DAMAGES.
*
*/
-#define ATH_HAL_VERSION "0.9.14.9"
#pragma ident "%Z%%M% %I% %E% SMI"
+#define ATH_HAL_VERSION "0.9.17.2"
begin-base64 644 hal.o
-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
+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
-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
+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
-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
+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
-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
+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
-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
+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
-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
+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
-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
+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
-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
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAoAFAAeADIARgBV
-AFoAXwBkAAAAAAAAAAAAAAAAAAoAFAAeACgAMgA8AEYAUABaAGQAAAAAAAAAAAAAAMIA
-AADEAAAAxQAAANAAAADaAAAA5AAAAAAAAAAAAAAAwgAAAMMAAADUAAAA8gAAAA0BAAAo
-AQAAAAAAAAAAAABOT05FAAAAAAAA/wFGQ0MAAAAAABAASANNS0sAAAAAAEAAiAFFVFNJ
-AAAAADcAOgMAAAAAAAAAAAAAAAAAAAAA/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
-AAEAAAABAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAA
-AAAIAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAADAADAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAACAARwAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAzADAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
-AAEAAAAAAAAAJAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAACgA
-OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAfADAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAMAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AQAAAAAAAAABAAAAAAAAAHAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAA
-AAAAAAA4ADAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAVABVAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAEQAVQAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAEAAAABAAAAAQAAAAAAAABMAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAYABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAA
-AGQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAB8ACAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAmABYAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAEAAAAAAAAAAAAAAJwAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAA
-AQAAAAAAAACqABAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAvAAD
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAL8ANgAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAADEADcAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
-AAAAAQAAAAEAAAAAAAAAywA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAANAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAADWABAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAA2gADAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAADIDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA
-AAAAAQAAAAAAAADeAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAA
-6QA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAPYANwAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAD6ADYAAAAAAAAAAAAAAAAAAAAAAAAA
-AAABAAAAAAAAAAEAAAAAAAAA/wA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
-AAAAAAAAAAwBMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAUATcA
-AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAALAEDAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAEABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
-AAABAAAAAQAAAAAAAABUAQMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAA
-AAAAWAEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAFwBNQAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABgATcAAAAAAAAAAAAAAAAAAAAA
-AAAAAAABAAAAAAAAAAEAAAAAAAAAZAEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA
-AAABAAAAAAAAAGgBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABs
-AVIAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAdAE3AAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAHgBAwAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAEAAAAAAAAAAQAAAAAAAAB8ATcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEA
-AAAAAAAAiAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAIkBQQAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACKAUgAAAAAAAAAAAAAAAAA
-AAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAiwFDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
-AAAAAAAAAAAAAAAAAIwBSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA
-AACNAUsAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkAEDAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAI4BAwAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAEAAAAAAAAAAQAAAAAAAACYAUUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAA
-AAEAAAAAAAAAmgFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAJsB
-SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACeAQMAAAAAAAAAAAAA
-AAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAArAEDAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AQAAAAAAAAABAAAAAAAAAKYBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAA
-AAAAAAC2ATUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAuAE3AAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAALoBNwAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAEAAAAAAAAAAQAAAAAAAAC+ASEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
-AQAAAAEAAAAAAAAAJwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAA
-AMoBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkARAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAA7AEwAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAQAAAAEAAAABAAAAAAAAAPgBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA
-AQAAAAAAAAAQAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAKgIi
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAEICNwAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
-AAAAAAAAAAEAAAAAAAAASgIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAA
-AAAAAE8CEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAABcAgMAAAAA
-AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAYAIRAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAQAAAAEAAAABAAAAAAAAAGgCNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA
-AAAAAQAAAAAAAABsAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAA
-dgIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAHoCAwAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAACCAgMAAAAAAAAAAAAAAAAAAAAAAAAA
-AAABAAAAAAAAAAEAAAAAAAAAgwIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
-AAAAAAAAAKoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAC+AkIA
-AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAvwI2AAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAMECNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
-AAAAAAAAAQAAAAAAAADGAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAA
-AAAA1AI3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAPACNwAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAD0AjUAAAAAAAAAAAAAAAAAAAAA
-AAAAAAABAAAAAAAAAAEAAAAAAAAA+AIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA
-AAABAAAAAAAAAJ4ARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAD8
-AkUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAADAMwAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAABQDNgAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAEAAAAAAAAAAQAAAAAAAAAYAzYAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEA
-AAAAAAAAJAMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAABADAwAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAA6AzcAAAAAAAAAAAAAAAAA
-AAAAAAAAAAABAAAAAAAAAAEAAAAAAAAASAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
-AAEAAAABAAAAAAAAAFoDRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAA
-AABcAzoAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAXgNWAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAMACAwAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAEAAAAAAAAAAQAAAAAAAAB3AwMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
-AAEAAAAAAAAAzAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wH/AQMAmAGZAQcAmAEwCwgAmAEwDCAAIAEQ
-CiEAIAGZASIAIAEwDDoAYAEQCjcAMAGZATUAMAKZATYAMAOZATAAMASZATkAMAWZATQA
-MAaZATIAMAOZATEAMAOZAREAEAGZARAAEAEQClIAUAGZAUUAUAKZAUcAUAOZAUIAUASZ
-AVgAUAWZAVUAUAEwDFYAUAIwDEkAUAJQDUAAQAFACkEAQAFACkMAQAJACkgAQAEQCkoA
-QAFACksAQAFACmAAYABgAGEAYQBhAGIAYgBiAGMAYwBjAGQAZABkAGUAZQBlAGYAZgBm
-AGcAZwBnAGgAaABoAGkAaQBpAGoAagBqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAP8BAgAQAAAURBYFBnEWwRYFBgAAAAAAAAAAAAAAAFABAQAQAHEWwRYeAAAAAAAA
-AAAAAAAAAAAAAAAAAFACAQAQAHEWrRYXAAAAAAAAAAAAAAAAAAAAAAAAAFADAgAQAKAU
-yBQRBnEWrRYeBgAAAAAAAAAAAAAAAFAEAgAQADwUeBQUAHEWwRYUAAAAAAAAAAAAAAAA
-AFAFAgAQAHEWwRYRAAAAAAAAAAAAAAAAAAAAAAAAADABAgAwADwUyBQUAHwVRBYbAAAA
-AAAAAAAAAAAAADACAQAwADwUeBQSAAAAAAAAAAAAAAAAAAAAAAAAADADAQAwADwUyBQU
-AAAAAAAAAAAAAAAAAAAAAAAAADAEAQAwADwUyBQSAAAAAAAAAAAAAAAAAAAAAAAAADAF
-AQAwADwUeBQPAAAAAAAAAAAAAAAAAAAAAAAAADAGAgAwADwUoBQXAHwVRBYeAAAAAAAA
-AAAAAAAAABABAwAQAIwUyBQXBjwUeBQRBnEWwRYeBgAAAAAAACABAgAQADwUyBQXBnEW
-wRYeBgAAAAAAAAAAAAAAAGABBAAQADwUeBQRBowUyBQUBnwVRBYUBnEWwRYeBkABAQBA
-ADIUbhQXAAAAAAAAAAAAAAAAAAAAAAAAAEACAwBAADIUbhQXALAT2BMXADgTdBMXAAAA
-AAAAAAAA/wECABMAChQmFgUGHhQSFgUGAAAAAAAAAAAAAAAAEAEDABMAghSqFBcGWhRa
-FBEGgBaoFh4GAAAAAAAAYAEDABMAghSqFBcGWhRaFBEGgBaoFh4GAAAAAAAAAAAAAAAA
-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
+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
+JBBIifVIifu/rAAAAOgAAAAASImDCC4AAEiFwHQgx4PwVgAAAAEAAL8AAQAA6AAAAABI
+iYPoVgAASIXAdQ7HRQACAAAAuAAAAADrXUjHgyArAAAAAAAASMeDKCsAAAAAAABIx4Mw
+KwAAAAAAAEjHgzgrAAAAAAAASMeDQCsAAAAAAABIx4NIKwAAAAAAAEjHg1ArAAAAAAAA
+SMeDWCsAAAAAAAC4AQAAAEiLXCQISItsJBBIg8QYw5CQAAAAAAAAAAAAAAAAAAAAAChQ
+FixYKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKD/o/+e/6D/o/+g/wAAAAAA
+AAUACgAUAB4AMgBGAFUAWgBfAGQAAAAAAAAAAAAAAAAACgAUAB4AKAAyADwARgBQAFoA
+ZAAAAAAAAAAAAAAAwgAAAMQAAADFAAAA0AAAANoAAADkAAAAAAAAAAAAAADCAAAAwwAA
+ANQAAADyAAAADQEAACgBAADPAAAAygAAAAIAUCEBAEABBACgAAgAwAAgANAAQABQAQAA
+AAAAAAAAJAGYGQAiBQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAABmAAAAAQAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAACYAABH
+AAAACJgAAAAAAAAMmAAApo6ECRCYAAAA4DI9FJgAAGsHAAAcmAAAAAAAACCYAAAAAgIC
+JJgAAA4OAAAomAAAAQICCiyYAAD8bwMAMJgAAAAAAAA0mAAADg4AADiYAAAHAAAAPJgA
+AAABAgBAmAAAAABjiUSYAACcFnITSJgAADO2GABMmAAAPGGEElCYAADguOgNVJgAAFlI
+BwBYmAAAur6AflyYAABeZjoxYJgAAAgdAABkmAAAAM4BAGiYAACQQZpAcJgAAA8AAAB0
+mAAAgAAAAHiYAAAEAAAAAJkAAAAAAAAEmQAAAAAAAAiZAAAAAAAADJkAAAAAgAAQmQAA
+AwAAAACbAAAAAAAABJsAACAAAAAImwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAAKAAA
+ABibAAAoAAAAHJsAAAQAAAAgmwAAJAAAACSbAAAUAAAAKJsAADQAAAAsmwAADAAAADCb
+AAAsAAAANJsAAAIAAAA4mwAAIgAAADybAAASAAAAQJsAADIAAABEmwAACgAAAEibAAAq
+AAAATJsAAAEAAABQmwAAIQAAAFSbAAARAAAAWJsAADEAAABcmwAACQAAAGCbAAApAAAA
+ZJsAAAUAAABomwAAJQAAAGybAAAVAAAAcJsAADUAAAB0mwAADQAAAHibAAAtAAAAfJsA
+AAMAAACAmwAAIwAAAISbAAATAAAAiJsAADMAAACMmwAACwAAAJCbAAArAAAAlJsAAAcA
+AACYmwAAJwAAAJybAAAXAAAAoJsAADcAAACkmwAADwAAAKibAAAvAAAArJsAAC8AAACw
+mwAALwAAALSbAAAvAAAAuJsAAC8AAAC8mwAALwAAAMCbAAAvAAAAxJsAAC8AAADImwAA
+LwAAAMybAAAvAAAA0JsAAC8AAADUmwAALwAAANibAAAvAAAA3JsAAC8AAADgmwAALwAA
+AOSbAAAvAAAA6JsAAC8AAADsmwAALwAAAPCbAAAvAAAA9JsAAC8AAAD4mwAALwAAAPyb
+AAAvAAAAAJoAAB0AAAAEmgAAXQAAAAiaAACdAAAADJoAAN0AAAAQmgAAHQEAABSaAAAh
+AAAAGJoAAGEAAAAcmgAAoQAAACCaAADhAAAAJJoAADEAAAAomgAAcQAAACyaAACxAAAA
+MJoAABwAAAA0mgAAXAAAADiaAAApAAAAPJoAAGkAAABAmgAAqQAAAESaAAAgAAAASJoA
+ABkAAABMmgAAWQAAAFCaAACZAAAAVJoAADAAAABYmgAABQAAAFyaAAAlAAAAYJoAAGUA
+AABkmgAApQAAAGiaAAAoAAAAbJoAAGgAAABwmgAAHwAAAHSaAAAeAAAAeJoAABgAAAB8
+mgAAWAAAAICaAACYAAAAhJoAAAMAAACImgAABAAAAIyaAABEAAAAkJoAAIQAAACUmgAA
+EwAAAJiaAAASAAAAnJoAAFIAAACgmgAAkgAAAKSaAADSAAAAqJoAACsAAACsmgAAKgAA
+ALCaAABqAAAAtJoAAKoAAAC4mgAAGwAAALyaAAAaAAAAwJoAAFoAAADEmgAAmgAAAMia
+AADaAAAAzJoAAAYAAADQmgAABgAAANSaAAAGAAAA2JoAAAYAAADcmgAABgAAAOCaAAAG
+AAAA5JoAAAYAAADomgAABgAAAOyaAAAGAAAA8JoAAAYAAAD0mgAABgAAAPiaAAAGAAAA
+/JoAAAYAAADUmAAAIAAAAMyYAAAEAAAAyJgAAAYBBgCcmAAAbQAAAMCYAAAAAAAA0JgA
+ABQAAAAAAAAAAAAAAAkJAAAAAAACAgYGBgYGBgICAAAAAwAGAAkAPAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAADwAAAAzAAAAAAAAAAAAAAAAAAAAAriAAAAIAAACgIAAAEY
+AAABAAAAQBgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQRXGQAiBQYAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAGcAAAABAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAEAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAACAAAAAAAAAAAAAAAKAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAAEAAAAAAAAAAAAAAAgAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAAAAAAAABwAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUAAAAAAAAAAAAAAAAAAAAFAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaQAAAAAAAAAAAAAAAAAAAAgA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqAAAAAAAAAAAAAAAAAAAA
-BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAEA
-AAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAAA
-AQAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGcA
-AAABAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-aAAAAAEAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AABhAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAGIAAAACAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAYwAAAAEAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAABkAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAGUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAaQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAABqAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAGIAUABAAAAAAAAAAAAABABSANQAQAAAAAA
-AAAAAAAwARACQAEAAAAAAAAAAAAAAgBQAQEAQAEEAKAACADAACAA0AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjBSg
-FLQUyBQAAAAAAAAAAHwVkBWkFbgVzBXgFfQVCBYcFjAWRBYAAAAAAAAAAAAAQAECAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAGABOgBAAQAAAAAAAAAAAAAwAQAAQAEAAAAAAAAAAAAAMAIAAEABAAAAAAAA
-AAAAADADAABAAQAAAAAAAAAAAAAwBAAAQAEAAAAAAAAAAAAAMAUAAEABAAAAAAAAAAAA
-ADAGAABAAQAAAAAAAAAAAAAwCgAAQAEAAAAAAAAAAAAAMAsAAEABAAAAAAAAAAAAADAM
-AABAAQAAAAAAAAAAAABoAGgAQAEAAAAAAAAAAAAAQAJDAEABAAAAAAAAAAAAAEAKQwCg
-AAAAAAAAAAAAAABACkMAwAAAAAAAAAAAAAAAQAFBAEABAAAAAAAAAAAAAEAKQQCgAAAA
-AAAAAAAAAABACkEAwAAAAAAAAAAAAAAAQABDAEEASABKAEsAAAAAACQBmBkAKREEAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2049,36 +2389,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAmAAARwAAAAiYAAAAAAAADJgAAKaOhAkQmAAAAOAyPRSYAABrBwAAHJgAAAAA
-AAAgmAAAAAICAiSYAAAODgAAKJgAAAECAgosmAAA/G8DADCYAAAAAAAANJgAAA4OAAA4
-mAAABwAAADyYAAAAAQIAQJgAAAAAY4lEmAAAnBZyE0iYAAAzthgATJgAADxhhBJQmAAA
-4LjoDVSYAABZSAcAWJgAALq+gH5cmAAAXmY6MWCYAAAIHQAAZJgAAADOAQBomAAAkEGa
-QHCYAAAPAAAAdJgAAIAAAAB4mAAABAAAAACZAAAAAAAABJkAAAAAAAAImQAAAAAAAAyZ
-AAAAAIAAEJkAAAMAAAAAmwAAAAAAAASbAAAgAAAACJsAABAAAAAMmwAAMAAAABCbAAAI
-AAAAFJsAACgAAAAYmwAAKAAAABybAAAEAAAAIJsAACQAAAAkmwAAFAAAACibAAA0AAAA
-LJsAAAwAAAAwmwAALAAAADSbAAACAAAAOJsAACIAAAA8mwAAEgAAAECbAAAyAAAARJsA
-AAoAAABImwAAKgAAAEybAAABAAAAUJsAACEAAABUmwAAEQAAAFibAAAxAAAAXJsAAAkA
-AABgmwAAKQAAAGSbAAAFAAAAaJsAACUAAABsmwAAFQAAAHCbAAA1AAAAdJsAAA0AAAB4
-mwAALQAAAHybAAADAAAAgJsAACMAAACEmwAAEwAAAIibAAAzAAAAjJsAAAsAAACQmwAA
-KwAAAJSbAAAHAAAAmJsAACcAAACcmwAAFwAAAKCbAAA3AAAApJsAAA8AAAComwAALwAA
-AKybAAAvAAAAsJsAAC8AAAC0mwAALwAAALibAAAvAAAAvJsAAC8AAADAmwAALwAAAMSb
-AAAvAAAAyJsAAC8AAADMmwAALwAAANCbAAAvAAAA1JsAAC8AAADYmwAALwAAANybAAAv
-AAAA4JsAAC8AAADkmwAALwAAAOibAAAvAAAA7JsAAC8AAADwmwAALwAAAPSbAAAvAAAA
-+JsAAC8AAAD8mwAALwAAAACaAAAdAAAABJoAAF0AAAAImgAAnQAAAAyaAADdAAAAEJoA
-AB0BAAAUmgAAIQAAABiaAABhAAAAHJoAAKEAAAAgmgAA4QAAACSaAAAxAAAAKJoAAHEA
-AAAsmgAAsQAAADCaAAAcAAAANJoAAFwAAAA4mgAAKQAAADyaAABpAAAAQJoAAKkAAABE
-mgAAIAAAAEiaAAAZAAAATJoAAFkAAABQmgAAmQAAAFSaAAAwAAAAWJoAAAUAAABcmgAA
-JQAAAGCaAABlAAAAZJoAAKUAAABomgAAKAAAAGyaAABoAAAAcJoAAB8AAAB0mgAAHgAA
-AHiaAAAYAAAAfJoAAFgAAACAmgAAmAAAAISaAAADAAAAiJoAAAQAAACMmgAARAAAAJCa
-AACEAAAAlJoAABMAAACYmgAAEgAAAJyaAABSAAAAoJoAAJIAAACkmgAA0gAAAKiaAAAr
-AAAArJoAACoAAACwmgAAagAAALSaAACqAAAAuJoAABsAAAC8mgAAGgAAAMCaAABaAAAA
-xJoAAJoAAADImgAA2gAAAMyaAAAGAAAA0JoAAAYAAADUmgAABgAAANiaAAAGAAAA3JoA
-AAYAAADgmgAABgAAAOSaAAAGAAAA6JoAAAYAAADsmgAABgAAAPCaAAAGAAAA9JoAAAYA
-AAD4mgAABgAAAPyaAAAGAAAA1JgAACAAAADMmAAABAAAAMiYAAAGAQYAnJgAAG0AAADA
-mAAAAAAAANCYAAAUAAAAAAAAAAAAAAAJCQAAAAAAAgIGBgYGBgYCAgAAAAMABgAJADwA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAMwAAAAAAAAAAAAAAAAAAAAK4gAA
-ACAAAAoCAAABGAAAAQAAAEAYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE
-VxkAKREEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2110,7 +2420,84 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAABsCY8JtAkAAP///////wAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAACAAAAAgAAAAQAAAAEAAAAAAAAYAAAAGAAAABgAwAAAAFQAAABUA
+AAAdAAAAFQAAAEAQAAAP/C8AD/wvAB/8LwAP/C8ARBAAAA/8LwAP/C8AH/wvAA/8LwBI
+EAAAD/wvAA/8LwAf/C8AD/wvAEwQAAAP/C8AD/wvAB/8LwAP/C8AUBAAAA/8LwAP/C8A
+H/wvAA/8LwBUEAAAD/wvAA/8LwAf/C8AD/wvAFgQAAAP/C8AD/wvAB/8LwAP/C8AXBAA
+AA/8LwAP/C8AH/wvAA/8LwBgEAAAD/wvAA/8LwAf/C8AD/wvAGQQAAAP/C8AD/wvAB/8
+LwAP/C8AcBAAAGgBAADgAQAAuAEAAGgBAAAwEAAAMAIAAOABAACwAAAAMAIAALAQAACY
+DQAAgBEAAEgfAACYDQAA8BAAAOCgAABoQAEAgFgAAOCgAAAUgAAAAAQABAAIAAgAMAAg
+AAQABByAAACnj40Oz4+NDpWPYAGnj40OBJgAAAAAAAADAAAAAAAAAAAAAAAgmAAAAAIC
+AgACAgIAAgECAAICAiSYAAAODgAADg4AAAcHAAAODgAAKJgAAAEAAgoBAAIKAAABBQEA
+Ago0mAAADg4AAA4OAAAODgAADg4AADiYAAAHAAAABwAAAAsAAAALAAAARJgAAJwWchOl
+FnITqBZyE5wWchNImAAAZ7oYAGe6GABpuhgAaboYAFCYAADgtCgM4LQoDOC0KAzgtCgM
+WJgAAC4NgH4uDYB+Lg3Afi4NgH5cmAAAXl03MV5dNzFeXToxXl03MWCYAAAQvQAAEL0A
+ADi9AAAQvQAAZJgAAADOAQAAzgEAAM4BAADOAQAUmQAAECcAABAnAAB8FQAAECcAABiZ
+AACQAQAAkAEAAIQAAACQAQAARJkAACAQ4G8gEOBvIAngbyAQ4G+AoQAA/xT/Bf8U/wX/
+FP8F/xn/BdSYAAAQAAAAFAAAABAAAAAQAAAAAAAAAAwAAAAAAAAAKAAAAJychIQsAAAA
+fHx8fDQAAAAFAAAAQAAAAAAAAABEAAAACAAAAEgAAAAIAAAATAAAABAAAABQAAAAAAAA
+AFQAAAAfAAAAAAgAAAAAAAAECAAAAAAAAAgIAAAAAAAADAgAAAAAAAAQCAAAAAAAABQI
+AAAAAAAAGAgAAAAAAAAcCAAAAAAAACAIAAAAAAAAJAgAAAAAAAAwEgAAAAAAAASAAAAA
+AAAACIAAAAAAAAAMgAAAAAAAABiAAAAAAAAAJIAAAAAAAAAogAAAMAAAACyAAAD//wcA
+MIAAAP///wE0gAAAMQAAADiAAAAAAAAAPIAAAAAAAABAgAAAAAAAAESAAAACAAAASIAA
+AAAAAABUgAAAAAAAAFiAAAAAAAAACJgAAAAAAAAMmAAAk5CELRCYAAAA4DJ9FJgAAGsP
+AAAcmAAAAAAAACyYAAD+bwIAMJgAAAAAAAA8mAAAAAECAECYAAB6AWogTJgAADxhhBJU
+mAAAWQgAAGiYAACQQZpAbJgAAIGwDAVwmAAADwAAAHSYAACAAAAAeJgAAAwAAAAAmQAA
+AAAAAASZAAAAAAAACJkAAAAAAAAMmQAAAACAABCZAAABAAAAHJkAACoJAAAgmQAAAAAA
+ACSZAAAFigUAKJkAAAEAAAAsmQAAAAAAADCZAAAAAAAANJkAAAAAAAA4mQAAAAAAADyZ
+AAA/AAAAQJkAAAQAAABImQAAAAAAAEyZAAAAAAAAUJkAAAAAAABUmQAATPFQXViZAAAY
+AAAAXJkAAI5qSwCEoQAA/wX/BoihAAD/B/8HjKEAAP8I/wiQoQAA/wn/CZShAAD/Cv8K
+mKEAAP8L/wucoQAA/wz/DKChAAD/Df8NpKEAAP8O/w+ooQAA/xL/EqyhAAD/E/8UsKEA
+AP8V/xa0oQAA/xf/GbihAAD/Gv8bvKEAAP8d/x7AoQAA/yD/I8ShAAD/Jf8nyKEAAP8p
+/yzMoQAA/y//MdChAAD/NP831KEAAP86/zrYoQAA/zr/OtyhAAD/Ov864KEAAP86/zrk
+oQAA/zr/OuihAAD/Ov867KEAAP86/zrwoQAA/zr/OvShAAD/Ov86+KEAAP86/zr8oQAA
+/zr/OgCbAAAAAAAABJsAACAAAAAImwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAAKAAA
+ABibAAAEAAAAHJsAACQAAAAgmwAAFAAAACSbAAA0AAAAKJsAAAwAAAAsmwAALAAAADCb
+AAACAAAANJsAACIAAAA4mwAAEgAAADybAAAyAAAAQJsAAAoAAABEmwAAKgAAAEibAAAG
+AAAATJsAACYAAABQmwAAFgAAAFSbAAA2AAAAWJsAAA4AAABcmwAALgAAAGCbAAABAAAA
+ZJsAACEAAABomwAAEQAAAGybAAAxAAAAcJsAAAkAAAB0mwAAKQAAAHibAAAFAAAAfJsA
+ACUAAACAmwAAFQAAAISbAAA1AAAAiJsAAA0AAACMmwAALQAAAJCbAAADAAAAlJsAACMA
+AACYmwAAEwAAAJybAAAzAAAAoJsAAAsAAACkmwAAKwAAAKibAAArAAAArJsAACsAAACw
+mwAAKwAAALSbAAArAAAAuJsAACsAAAC8mwAAKwAAAMCbAAArAAAAxJsAACsAAADImwAA
+KwAAAMybAAArAAAA0JsAACsAAADUmwAAKwAAANibAAArAAAA3JsAACsAAADgmwAAKwAA
+AOSbAAArAAAA6JsAACsAAADsmwAAKwAAAPCbAAArAAAA9JsAACsAAAD4mwAAAgAAAPyb
+AAAWAAAA1JgAACAAAADYmAAAaBBgAAAAAAAAAAAAAJoAAKkBAAAAAAAABJoAAOkBAABA
+AAAACJoAACkAAACAAAAADJoAAGkAAABQAQAAEJoAAJkBAACQAQAAFJoAANkBAADQAQAA
+GJoAABkAAAAQAAAAHJoAAFkAAABEAAAAIJoAAJkAAACEAAAAJJoAAKUBAABIAQAAKJoA
+AOUBAACIAQAALJoAACUAAADIAQAAMJoAAMgBAAAUAAAANJoAAAgAAABCAAAAOJoAAEgA
+AACCAAAAPJoAAIgAAAB4AQAAQJoAAJgBAAC4AQAARJoAANgBAAD4AQAASJoAABgAAAAS
+AAAATJoAAFgAAABSAAAAUJoAAJgAAACSAAAAVJoAAKQBAAB8AQAAWJoAAOQBAAC8AQAA
+XJoAACQAAAD8AQAAYJoAAGQAAAAKAAAAZJoAAKQAAABKAAAAaJoAAOQAAACKAAAAbJoA
+AAoBAABaAQAAcJoAAEoBAACaAQAAdJoAAIoBAADaAQAAeJoAAMoBAAAOAAAAfJoAAAoA
+AABOAAAAgJoAAEoAAACOAAAAhJoAAIoAAABeAQAAiJoAALoBAACeAQAAjJoAAPoBAADe
+AQAAkJoAADoAAAAJAAAAlJoAAHoAAABJAAAAmJoAAIYBAACJAAAAnJoAAMYBAAB5AQAA
+oJoAAAYAAAC5AQAApJoAAEYAAAD5AQAAqJoAAIYAAAA5AAAArJoAAMYAAAB5AAAAsJoA
+AMYAAAC5AAAAtJoAAMYAAAC9AQAAuJoAAMYAAAD9AQAAvJoAAMYAAAA9AAAAwJoAAMYA
+AAB9AAAAxJoAAMYAAAC9AAAAyJoAAMYAAAD9AAAAzJoAAMYAAAD9AAAA0JoAAMYAAAD9
+AAAA1JoAAMYAAAD9AAAA2JoAAMYAAAD9AAAA3JoAAMYAAAD9AAAA4JoAAMYAAAD9AAAA
+5JoAAMYAAAD9AAAA6JoAAMYAAAD9AAAA7JoAAMYAAAD9AAAA8JoAAMYAAAD9AAAA9JoA
+AMYAAAD9AAAA+JoAAMYAAAD9AAAA/JoAAMYAAAD9AAAAAQAAAEYAAABgAAAAAQAAAEYA
+AABhAAAAAQAAAEYAAABiAAAAAQAAAEYAAABjAAAAAQAAAEYAAABkAAAAAQAAAEYAAABl
+AAAAAQAAAEYAAABmAAAAAQAAAEYAAABnAAAAAQAAAEYAAABoAAAAAQAAAEYAAABpAAAA
+AQAAAEYAAABqAAAAAQAAAEYAAABrAAAAAQAAAEYAAABsAAAAAQAAAEYAAAB0AAAAAQAA
+AEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYA
+AAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB1AAAAAQAAAEYAAAB2
+AAAAAQAAAEYAAAB3AAAAAQAAAEYAAAB4AAAAAQAAAEYAAAB5AAAAAQAAAEYAAAB6AAAA
+AQAAAEYAAAB7AAAAAQAAAEYAAAB8AAAAAQAAAEYAAAB9AAAAAQAAAEYAAAB+AAAAAQAA
+AEYAAAB/AAAAAQAAAEYAAACAAAAAAQAAAEQAAAB8AAAAAQAAAEYAAACIAAAAAQAAAEYA
+AACMAAAAAQAAAEYAAACQAAAAAQAAAEYAAACUAAAAAQAAAEYAAACYAAAAAQAAAEYAAACc
+AAAAAQAAAEYAAACgAAAAAQAAAEYAAACkAAAAAQAAAEYAAACoAAAAAQAAAEYAAACsAAAA
+AQAAAEYAAACwAAAAAQAAAEYAAAC0AAAAAAIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAnhYL
+AGIWCgA6FgkAHBYIAOoVBwCaFQUAShUEAAMVAgBZFAAAAAABAAAAAwAGAAkAPwAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAABAAAAAQAAQABAAEABgAAAEZHOAAAAAAA
+AAAAAAAAAAAEAAAAAQABAAQAAABGRzcAAAAAAAAAAAAAAAAAAwABAAEAAQADAAAARkc2
+AAAAAAAAAAAAAAAAAAQAAAAAAAEAAQAAAEZHNQAAAAAAAAAAAAAAAAAEAAEAAQAAAAAA
+AABGRzQAAAAAAAAAAAAAAAAABAAAAAEAAAD+////RkczAAAAAAAAAAAAAAAAAAMAAQAB
+AAAA/f///0ZHMgAAAAAAAAAAAAAAAAAEAAAAAAAAAPz///9GRzEAAAAAAAAAAAAAAAAA
+AgABAAEAAAD6////RkcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAUEFQZACIFBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2125,83 +2512,7 @@ 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
-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
-OvyhAAD/Ov86AJsAAAAAAAAEmwAAIAAAAAibAAAQAAAADJsAADAAAAAQmwAACAAAABSb
-AAAoAAAAGJsAAAQAAAAcmwAAJAAAACCbAAAUAAAAJJsAADQAAAAomwAADAAAACybAAAs
-AAAAMJsAAAIAAAA0mwAAIgAAADibAAASAAAAPJsAADIAAABAmwAACgAAAESbAAAqAAAA
-SJsAAAYAAABMmwAAJgAAAFCbAAAWAAAAVJsAADYAAABYmwAADgAAAFybAAAuAAAAYJsA
-AAEAAABkmwAAIQAAAGibAAARAAAAbJsAADEAAABwmwAACQAAAHSbAAApAAAAeJsAAAUA
-AAB8mwAAJQAAAICbAAAVAAAAhJsAADUAAACImwAADQAAAIybAAAtAAAAkJsAAAMAAACU
-mwAAIwAAAJibAAATAAAAnJsAADMAAACgmwAACwAAAKSbAAArAAAAqJsAACsAAACsmwAA
-KwAAALCbAAArAAAAtJsAACsAAAC4mwAAKwAAALybAAArAAAAwJsAACsAAADEmwAAKwAA
-AMibAAArAAAAzJsAACsAAADQmwAAKwAAANSbAAArAAAA2JsAACsAAADcmwAAKwAAAOCb
-AAArAAAA5JsAACsAAADomwAAKwAAAOybAAArAAAA8JsAACsAAAD0mwAAKwAAAPibAAAC
-AAAA/JsAABYAAADUmAAAIAAAANiYAABoEGAAAAAAAAAAAAAAmgAAqQEAAAAAAAAEmgAA
-6QEAAEAAAAAImgAAKQAAAIAAAAAMmgAAaQAAAFABAAAQmgAAmQEAAJABAAAUmgAA2QEA
-ANABAAAYmgAAGQAAABAAAAAcmgAAWQAAAEQAAAAgmgAAmQAAAIQAAAAkmgAApQEAAEgB
-AAAomgAA5QEAAIgBAAAsmgAAJQAAAMgBAAAwmgAAyAEAABQAAAA0mgAACAAAAEIAAAA4
-mgAASAAAAIIAAAA8mgAAiAAAAHgBAABAmgAAmAEAALgBAABEmgAA2AEAAPgBAABImgAA
-GAAAABIAAABMmgAAWAAAAFIAAABQmgAAmAAAAJIAAABUmgAApAEAAHwBAABYmgAA5AEA
-ALwBAABcmgAAJAAAAPwBAABgmgAAZAAAAAoAAABkmgAApAAAAEoAAABomgAA5AAAAIoA
-AABsmgAACgEAAFoBAABwmgAASgEAAJoBAAB0mgAAigEAANoBAAB4mgAAygEAAA4AAAB8
-mgAACgAAAE4AAACAmgAASgAAAI4AAACEmgAAigAAAF4BAACImgAAugEAAJ4BAACMmgAA
-+gEAAN4BAACQmgAAOgAAAAkAAACUmgAAegAAAEkAAACYmgAAhgEAAIkAAACcmgAAxgEA
-AHkBAACgmgAABgAAALkBAACkmgAARgAAAPkBAAComgAAhgAAADkAAACsmgAAxgAAAHkA
-AACwmgAAxgAAALkAAAC0mgAAxgAAAL0BAAC4mgAAxgAAAP0BAAC8mgAAxgAAAD0AAADA
-mgAAxgAAAH0AAADEmgAAxgAAAL0AAADImgAAxgAAAP0AAADMmgAAxgAAAP0AAADQmgAA
-xgAAAP0AAADUmgAAxgAAAP0AAADYmgAAxgAAAP0AAADcmgAAxgAAAP0AAADgmgAAxgAA
-AP0AAADkmgAAxgAAAP0AAADomgAAxgAAAP0AAADsmgAAxgAAAP0AAADwmgAAxgAAAP0A
-AAD0mgAAxgAAAP0AAAD4mgAAxgAAAP0AAAD8mgAAxgAAAP0AAAABAAAARgAAAGAAAAAB
-AAAARgAAAGEAAAABAAAARgAAAGIAAAABAAAARgAAAGMAAAABAAAARgAAAGQAAAABAAAA
-RgAAAGUAAAABAAAARgAAAGYAAAABAAAARgAAAGcAAAABAAAARgAAAGgAAAABAAAARgAA
-AGkAAAABAAAARgAAAGoAAAABAAAARgAAAGsAAAABAAAARgAAAGwAAAABAAAARgAAAHQA
-AAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAAB
-AAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHUAAAABAAAA
-RgAAAHYAAAABAAAARgAAAHcAAAABAAAARgAAAHgAAAABAAAARgAAAHkAAAABAAAARgAA
-AHoAAAABAAAARgAAAHsAAAABAAAARgAAAHwAAAABAAAARgAAAH0AAAABAAAARgAAAH4A
-AAABAAAARgAAAH8AAAABAAAARgAAAIAAAAABAAAARAAAAHwAAAABAAAARgAAAIgAAAAB
-AAAARgAAAIwAAAABAAAARgAAAJAAAAABAAAARgAAAJQAAAABAAAARgAAAJgAAAABAAAA
-RgAAAJwAAAABAAAARgAAAKAAAAABAAAARgAAAKQAAAABAAAARgAAAKgAAAABAAAARgAA
-AKwAAAABAAAARgAAALAAAAABAAAARgAAALQAAAAAAgcAAAADAAYACQA8AAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAACQAAAAQAAAAEAAEAAQABAAYAAABGRzgAAAAAAAAAAAAAAAAA
-BAAAAAEAAQAEAAAARkc3AAAAAAAAAAAAAAAAAAMAAQABAAEAAwAAAEZHNgAAAAAAAAAA
-AAAAAAAEAAAAAAABAAEAAABGRzUAAAAAAAAAAAAAAAAABAABAAEAAAAAAAAARkc0AAAA
-AAAAAAAAAAAAAAQAAAABAAAA/v///0ZHMwAAAAAAAAAAAAAAAAADAAEAAQAAAP3///9G
-RzIAAAAAAAAAAAAAAAAABAAAAAAAAAD8////RkcxAAAAAAAAAAAAAAAAAAIAAQABAAAA
-+v///0ZHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBBU
-GQApEQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2248,150 +2559,343 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAmP
-CbQJCAlsCbQJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAABAAAAAQAAAAAAABgAA
-AAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAABAEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwBEEAAAD/wvAA/8LwAf
-/C8AD/wvAA/8LwBIEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwBMEAAAD/wvAA/8LwAf/C8A
-D/wvAA/8LwBQEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwBUEAAAD/wvAA/8LwAf/C8AD/wv
-AA/8LwBYEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwBcEAAAD/wvAA/8LwAf/C8AD/wvAA/8
-LwBgEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwBkEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwAw
-EAAAMAIAAOABAACwAAAAYAEAAOABAABwEAAAaAEAAOABAAC4AQAAjAEAAOABAACwEAAA
-YA4AAIARAAAcHwAAOD4AAIARAADwEAAA4KAAAGhAAQCAWAAA4LAAAGhAAQAUgAAA6APo
-A+AG4AYgBCAEQAhACOAG4AYEmAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAgmAAAAAICAgAC
-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
-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
-Dg4AAA4OAAAODgAADg4AAA4OAAA4mAAABwAAAAcAAAALAAAACwAAAAsAAABImAAAWtoY
-AFraGABpyhgAacoYAGnKGABQmAAA4LToDeC06A3gtOgN4LToDeC06A1YmAAALg2Afi4N
-gH4uTeh+Lk3ofi4NgH5cmAAAXmY3MV5mNzFeZjcxXmY3MV5hNzFsmAAAgbAMBYGwDAWB
-sAwFgLAMBYCwDAUUmQAAECcAABAnAAB8FQAA+CoAABAnAABEmQAAIBC49yAQuPcgDbj3
-IBC49yAQuPcMogAAakEsZGpBLGRqQUBkakFAZGpBQGQcogAACoCDGAqAgxgKgHMYCoCD
-GAqAgxgAAAAAAAAAAAAAAAAAAAAAMBIAAAAAAAAsmAAA/i8CADyYAAAAAQIATJgAADxh
-hBIwmQAAg0gAAECZAAAEAAAAdJkAAAAAAAD4mQAAGAAAAASiAAAAAAAACKIAAIhnPtAo
-ogAAtQEAADyiAACvicgTBJsAACAAAAAImwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAA
-KAAAABibAAAEAAAAHJsAACQAAAAgmwAAFAAAACSbAAA0AAAALJsAACwAAAAwmwAAAgAA
-ADSbAAAiAAAAPJsAADIAAABAmwAACgAAAESbAAAqAAAASJsAAAYAAABMmwAAJgAAAFCb
-AAAWAAAAVJsAADYAAABYmwAADgAAAFybAAAuAAAAYJsAAAEAAABomwAAEQAAAGybAAAx
-AAAAcJsAAAkAAAB0mwAAKQAAAHibAAAFAAAAfJsAACUAAACAmwAAFQAAAISbAAA1AAAA
-iJsAAA0AAACQmwAAAwAAAJSbAAAjAAAAmJsAABMAAACgmwAACwAAAKSbAAArAAAAqJsA
-ACsAAACsmwAAKwAAALCbAAArAAAAtJsAACsAAAC4mwAAKwAAALybAAArAAAAwJsAACsA
-AADEmwAAKwAAAMibAAArAAAAzJsAACsAAADQmwAAKwAAANSbAAArAAAA2JsAACsAAADc
-mwAAKwAAAOCbAAArAAAA5JsAACsAAADomwAAKwAAAOybAAArAAAA8JsAACsAAAD0mwAA
-KwAAAPibAAACAAAA/JsAABYAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwJjwm0CQgJbAm0Cf//
+/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAgAAAAIAAAAEAAAABAAAAAAAAGAAAABgAAAAYAnhYLAGIWCgA6FgkA
+HBYIAOoVBwCaFQUAShUEAAMVAgBZFAAAuAsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAQAAAAIAAAAD
+AAAABAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAEAQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAEQQAAAP/C8AD/wv
+AB/8LwAP/C8AD/wvAEgQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAEwQAAAP/C8AD/wvAB/8
+LwAP/C8AD/wvAFAQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAFQQAAAP/C8AD/wvAB/8LwAP
+/C8AD/wvAFgQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAFwQAAAP/C8AD/wvAB/8LwAP/C8A
+D/wvAGAQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAGQQAAAP/C8AD/wvAB/8LwAP/C8AD/wv
+ADAQAAAwAgAA4AEAALAAAABgAQAA4AEAAHAQAABoAQAA4AEAALgBAACMAQAA4AEAALAQ
+AABgDgAAgBEAABwfAAA4PgAAgBEAAPAQAADgoAAAaEABAIBYAADgsAAAaEABABSAAADo
+A+gD4AbgBiAEIARACEAI4AbgBgSYAAAAAAAAAwAAAAAAAAAAAAAAAwAAACCYAAAAAgIC
+AAICAgACAQIAAgICAAICAiSYAAAODgAADg4AAAcHAAAODgAADg4AAESYAAAcFnITJRxy
+EyIXchOiFnITJRxyE2CYAAAQnQAAEJ0AABidAAAYnQAAEJ0AAGSYAAAAzgEAAM4BAADO
+AQAAzgEAAM4BAGiYAACQQZpAkEGaQJBBmkCQQZpAkEGaQBiZAAC4AQAAuAEAAIQAAAAI
+AQAAuAEAACSZAAAFigUQBYoFEAWKBRAFigUQBYoFEDCiAAAAAAAAAAAAAAAAAAAIAQAA
+AAAAAAAAAAAAAAAADAAAAAAAAAA0AAAABQAAAEAAAAAAAAAARAAAAAgAAABIAAAACAAA
+AEwAAAAQAAAAUAAAAAAAAABUAAAAHwAAAAAIAAAAAAAABAgAAAAAAAAICAAAAAAAAAwI
+AAAAAAAAEAgAAAAAAAAUCAAAAAAAABgIAAAAAAAAHAgAAAAAAAAgCAAAAAAAACQIAAAA
+AAAAcBIAAAAAAAA4EAAAAAAAAHgQAAAAAAAAuBAAAAAAAAD4EAAAAAAAADgRAAAAAAAA
+eBEAAAAAAAC4EQAAAAAAAPgRAAAAAAAAOBIAAAAAAAB4EgAAAAAAALgSAAAAAAAA+BIA
+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
+AAAAQJsAAAoAAABEmwAAKgAAAEibAAAGAAAATJsAACYAAABQmwAAFgAAAFSbAAA2AAAA
+WJsAAA4AAABcmwAALgAAAGCbAAABAAAAaJsAABEAAABsmwAAMQAAAHCbAAAJAAAAdJsA
+ACkAAAB4mwAABQAAAHybAAAlAAAAgJsAABUAAACEmwAANQAAAIibAAANAAAAkJsAAAMA
+AACUmwAAIwAAAJibAAATAAAAoJsAAAsAAACkmwAAKwAAAKibAAArAAAArJsAACsAAACw
+mwAAKwAAALSbAAArAAAAuJsAACsAAAC8mwAAKwAAAMCbAAArAAAAxJsAACsAAADImwAA
+KwAAAMybAAArAAAA0JsAACsAAADUmwAAKwAAANibAAArAAAA3JsAACsAAADgmwAAKwAA
+AOSbAAArAAAA6JsAACsAAADsmwAAKwAAAPCbAAArAAAA9JsAACsAAAD4mwAAAgAAAPyb
+AAAWAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
nJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAA
-OAAAADgAAAA4AAAAOAAAADgAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAwAAAAIAAAACAAAAAnJgAAPkABAD5AAQA
-/wAEAP0ABAD9AAQA1JgAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAmgAAqQEA
-AAAAAAAEmgAA6QEAAEAAAAAImgAAKQAAAIAAAAAMmgAAaQAAAFABAAAQmgAAmQEAAJAB
-AAAUmgAA2QEAANABAAAYmgAAGQAAABAAAAAcmgAAWQAAAEQAAAAgmgAAmQAAAIQAAAAk
-mgAApQEAAEgBAAAomgAA5QEAAIgBAAAsmgAAJQAAAMgBAAAwmgAAyAEAABQAAAA0mgAA
-CAAAAEIAAAA4mgAASAAAAIIAAAA8mgAAiAAAAHgBAABAmgAAmAEAALgBAABEmgAA2AEA
-APgBAABImgAAGAAAABIAAABMmgAAWAAAAFIAAABQmgAAmAAAAJIAAABUmgAApAEAAHwB
-AABYmgAA5AEAALwBAABcmgAAJAAAAPwBAABgmgAAZAAAAAoAAABkmgAApAAAAEoAAABo
-mgAA5AAAAIoAAABsmgAACgEAAFoBAABwmgAASgEAAJoBAAB0mgAAigEAANoBAAB4mgAA
-ygEAAA4AAAB8mgAACgAAAE4AAACAmgAASgAAAI4AAACEmgAAigAAAF4BAACImgAAugEA
-AJ4BAACMmgAA+gEAAN4BAACQmgAAOgAAAAkAAACUmgAAegAAAEkAAACYmgAAhgEAAIkA
-AACcmgAAxgEAAHkBAACgmgAABgAAALkBAACkmgAARgAAAPkBAAComgAAhgAAADkAAACs
-mgAAxgAAAHkAAACwmgAAxgAAALkAAAC0mgAAxgAAAL0BAAC4mgAAxgAAAP0BAAC8mgAA
-xgAAAD0AAADAmgAAxgAAAH0AAADEmgAAxgAAAL0AAADImgAAxgAAAP0AAADMmgAAxgAA
-AP0AAADQmgAAxgAAAP0AAADUmgAAxgAAAP0AAADYmgAAxgAAAP0AAADcmgAAxgAAAP0A
-AADgmgAAxgAAAP0AAADkmgAAxgAAAP0AAADomgAAxgAAAP0AAADsmgAAxgAAAP0AAADw
-mgAAxgAAAP0AAAD0mgAAxgAAAP0AAAD4mgAAxgAAAP0AAAD8mgAAxgAAAP0AAADUmAAA
-IAAAAAAAAAAAAAAA1JgAABAAAAAUAAAAEAAAABAAAAAUAAAAAAAAAAAAAADYmAAAaBBg
-AGgQYABoEGAAaBBgAGgQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAnJgAAAAAOAAAADgAAAA4AAAAOAAAADgAnJgAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAwAAA
+AIAAAACAAAAAnJgAAPkABAD5AAQA/wAEAP0ABAD9AAQA1JgAAAAAAAAAAAAABAAAAAQA
+AAAEAAAAAAAAAAAAAAAAmgAAqQEAAAAAAAAEmgAA6QEAAEAAAAAImgAAKQAAAIAAAAAM
+mgAAaQAAAFABAAAQmgAAmQEAAJABAAAUmgAA2QEAANABAAAYmgAAGQAAABAAAAAcmgAA
+WQAAAEQAAAAgmgAAmQAAAIQAAAAkmgAApQEAAEgBAAAomgAA5QEAAIgBAAAsmgAAJQAA
+AMgBAAAwmgAAyAEAABQAAAA0mgAACAAAAEIAAAA4mgAASAAAAIIAAAA8mgAAiAAAAHgB
+AABAmgAAmAEAALgBAABEmgAA2AEAAPgBAABImgAAGAAAABIAAABMmgAAWAAAAFIAAABQ
+mgAAmAAAAJIAAABUmgAApAEAAHwBAABYmgAA5AEAALwBAABcmgAAJAAAAPwBAABgmgAA
+ZAAAAAoAAABkmgAApAAAAEoAAABomgAA5AAAAIoAAABsmgAACgEAAFoBAABwmgAASgEA
+AJoBAAB0mgAAigEAANoBAAB4mgAAygEAAA4AAAB8mgAACgAAAE4AAACAmgAASgAAAI4A
+AACEmgAAigAAAF4BAACImgAAugEAAJ4BAACMmgAA+gEAAN4BAACQmgAAOgAAAAkAAACU
+mgAAegAAAEkAAACYmgAAhgEAAIkAAACcmgAAxgEAAHkBAACgmgAABgAAALkBAACkmgAA
+RgAAAPkBAAComgAAhgAAADkAAACsmgAAxgAAAHkAAACwmgAAxgAAALkAAAC0mgAAxgAA
+AL0BAAC4mgAAxgAAAP0BAAC8mgAAxgAAAD0AAADAmgAAxgAAAH0AAADEmgAAxgAAAL0A
+AADImgAAxgAAAP0AAADMmgAAxgAAAP0AAADQmgAAxgAAAP0AAADUmgAAxgAAAP0AAADY
+mgAAxgAAAP0AAADcmgAAxgAAAP0AAADgmgAAxgAAAP0AAADkmgAAxgAAAP0AAADomgAA
+xgAAAP0AAADsmgAAxgAAAP0AAADwmgAAxgAAAP0AAAD0mgAAxgAAAP0AAAD4mgAAxgAA
+AP0AAAD8mgAAxgAAAP0AAADUmAAAIAAAAAAAAAAAAAAA1JgAABAAAAAUAAAAEAAAABAA
+AAAUAAAAAAAAAAAAAADYmAAAaBBgAGgQYABoEGAAaBBgAGgQYAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAACcmAAAAAAAEAAAABAAAAAQAAAAEAAAABCcmAAAAAAABAAAAAQAAAAEAAAA
-BAAAAAScmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAKAAAAAAAAAACc
-mAAAwAA4AIAAOADAADgCwAA4AMAAOACcmAAABgACAAYAAgAGAAAABgACAAYAAgCcmAAA
-iQAAAIkAAACJAAAAiQAAAIkAAACcmAAAoAAAAKAAAACgAAAAoAAAAKAAAACcmAAABwAE
-AAcABAAHAAQABwAEAAcABADUmAAAGgAAABoAAAAaAAAAGgAAABoAAAAAAAAAAAAAAJyY
-AABAAAAASAAAAEAAAABAAAAAQAAAAJyYAAAQAAAAEAAAABAAAAAQAAAAEAAAAJyYAAAI
-AAAACAAAAAgAAAAIAAAACAAAAJyYAABPAAAATwAAAE8AAABPAAAATwAAAJyYAADxAAAA
-8QAAAGEAAADxAAAA8QAAAJyYAABPkAAAT5AAAEyQAABPkAAAT5AAAJyYAABaEgAAWhIA
-AJoSAABaEgAAWhIAAMyYAAAOAAAADgAAAA8AAAAOAAAADgAAAAEAAABGAAAAYAAAAAEA
-AABGAAAAYQAAAAEAAABGAAAAYgAAAAEAAABGAAAAYwAAAAEAAABGAAAAZAAAAAEAAABG
-AAAAZQAAAAEAAABGAAAAZgAAAAEAAABGAAAAZwAAAAEAAABGAAAAaAAAAAEAAABGAAAA
-aQAAAAEAAABGAAAAagAAAAEAAABGAAAAawAAAAEAAABGAAAAbAAAAAEAAABGAAAAdAAA
-AAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEA
-AABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdQAAAAEAAABG
-AAAAdgAAAAEAAABGAAAAdwAAAAEAAABGAAAAeAAAAAEAAABGAAAAeQAAAAEAAABGAAAA
-egAAAAEAAABGAAAAewAAAAEAAABGAAAAfAAAAAEAAABGAAAAfQAAAAEAAABGAAAAfgAA
-AAEAAABGAAAAfwAAAAEAAABGAAAAgAAAAAEAAABEAAAAfAAAAAEAAABGAAAAiAAAAAEA
-AABGAAAAjAAAAAEAAABGAAAAkAAAAAEAAABGAAAAlAAAAAEAAABGAAAAmAAAAAEAAABG
-AAAAnAAAAAEAAABGAAAAoAAAAAEAAABGAAAApAAAAAEAAABGAAAAqAAAAAEAAABGAAAA
-rAAAAAEAAABGAAAAsAAAAAEAAABGAAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAwAAAAFYAAABWAAAAVgAAAFYAAABWAAAAcgAAAp5ONEs8TiAmV
-E+AEqxPgEs8TiAkomAAAAQACCgEAAgoAAQIFAQACCgEAAgo0mAAADg4AAA4OAAAODgAA
-Dg4AAA4OAAA4mAAABwAAAAcAAAALAAAACwAAAAsAAABImAAAbdoYAG3aGAB1yhgAdcoY
-AHXKGABQmAAA4LToDeC06A3gtOgN4LToDeC06A1YmAAALg2Afi4NgH4uDeh+Lg3ofi4N
-gH5cmAAAXmY3MV5mNzFeZjcxXmY3MV5mNzFsmAAAgbAMBYGwDAWBsAwFgbAMBYGwDAUU
-mQAA0AcAANAHAABMBAAAmAgAANAHAABEmQAAIBC49yAQuPcQDbj3EBC49xAQuPcEogAA
-AAAAAAAAAAAIAAAACAAAAAgAAAAIogAAiGe+1ohnvtaIZz7QiGc+0IhnPtAMogAAQAEs
-ZEABLGRgwUJkYMFCZGDBQmQcogAACoCDGAqAgxgKgHMYCoCDGAqAgxgwEgAAAAAAACyY
-AAD+LwIAPJgAAAABAgBMmAAAPGGEEjCZAACCSAAAQJkAAAQAAAB0mQAAAAAAACiiAAC1
-AQAAPKIAAK+JyBMEmwAAAQAAAAibAAACAAAADJsAAAMAAAAQmwAABAAAABSbAAAFAAAA
+AAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAEAAAABAAAAAQAAAAEAAA
+ABCcmAAAAAAABAAAAAQAAAAEAAAABAAAAAScmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc
+mAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAA
+AAAAAAAAAAAAAAAKAAAAAAAAAACcmAAAwAA4AIAAOADAADgCwAA4AMAAOACcmAAABgAC
+AAYAAgAGAAAABgACAAYAAgCcmAAAiQAAAIkAAACJAAAAiQAAAIkAAACcmAAAoAAAAKAA
+AACgAAAAoAAAAKAAAACcmAAABwAEAAcABAAHAAQABwAEAAcABADUmAAAGgAAABoAAAAa
+AAAAGgAAABoAAAAAAAAAAAAAAJyYAABAAAAASAAAAEAAAABAAAAAQAAAAJyYAAAQAAAA
+EAAAABAAAAAQAAAAEAAAAJyYAAAIAAAACAAAAAgAAAAIAAAACAAAAJyYAABPAAAATwAA
+AE8AAABPAAAATwAAAJyYAADxAAAA8QAAAGEAAADxAAAA8QAAAJyYAABPkAAAT5AAAEyQ
+AABPkAAAT5AAAJyYAABaEgAAWhIAAJoSAABaEgAAWhIAAMyYAAAOAAAADgAAAA8AAAAO
+AAAADgAAAAEAAABGAAAAYAAAAAEAAABGAAAAYQAAAAEAAABGAAAAYgAAAAEAAABGAAAA
+YwAAAAEAAABGAAAAZAAAAAEAAABGAAAAZQAAAAEAAABGAAAAZgAAAAEAAABGAAAAZwAA
+AAEAAABGAAAAaAAAAAEAAABGAAAAaQAAAAEAAABGAAAAagAAAAEAAABGAAAAawAAAAEA
+AABGAAAAbAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABG
+AAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAA
+dAAAAAEAAABGAAAAdQAAAAEAAABGAAAAdgAAAAEAAABGAAAAdwAAAAEAAABGAAAAeAAA
+AAEAAABGAAAAeQAAAAEAAABGAAAAegAAAAEAAABGAAAAewAAAAEAAABGAAAAfAAAAAEA
+AABGAAAAfQAAAAEAAABGAAAAfgAAAAEAAABGAAAAfwAAAAEAAABGAAAAgAAAAAEAAABE
+AAAAfAAAAAEAAABGAAAAiAAAAAEAAABGAAAAjAAAAAEAAABGAAAAkAAAAAEAAABGAAAA
+lAAAAAEAAABGAAAAmAAAAAEAAABGAAAAnAAAAAEAAABGAAAAoAAAAAEAAABGAAAApAAA
+AAEAAABGAAAAqAAAAAEAAABGAAAArAAAAAEAAABGAAAAsAAAAAEAAABGAAAAtAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeFgYAYhYEADoWAwAcFgIA
+6hUBAJoVAABKFQAAAxUBAFkUAwC4CwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAA
+ABWAAAAVgAAAFYAAABWAAAAVgAAAHIAAAKeTjRLPE4gJlRPgBKsT4BLPE4gJKJgAAAEA
+AgoBAAIKAAECBQEAAgoBAAIKNJgAAA4OAAAODgAADg4AAA4OAAAODgAAOJgAAAcAAAAH
+AAAACwAAAAsAAAALAAAASJgAAG3aGABt2hgAdcoYAHXKGAB1yhgAUJgAAOC06A3gtOgN
+4LToDeC06A3gtOgNWJgAAC4NgH4uDYB+Lg3ofi4N6H4uDYB+XJgAAF5mNzFeZjcxXmY3
+MV5mNzFeZjcxbJgAAIGwDAWBsAwFgbAMBYGwDAWBsAwFFJkAANAHAADQBwAATAQAAJgI
+AADQBwAARJkAACAQuPcgELj3EA249xAQuPcQELj3BKIAAAAAAAAAAAAACAAAAAgAAAAI
+AAAACKIAAIhnvtaIZ77WiGc+0IhnPtCIZz7QDKIAAEABLGRAASxkYMFCZGDBQmRgwUJk
+HKIAAAqAgxgKgIMYCoBzGAqAgxgKgIMYMBIAAAAAAAAImAAAAAAAACyYAAD+LwIAPJgA
+AAABAgBMmAAAPGGEEjCZAACCSAAAQJkAAAQAAABYmQAA/wAAAHSZAAAAAAAAKKIAALUB
+AAA8ogAAr4nIEwSbAAABAAAACJsAAAIAAAAMmwAAAwAAABCbAAAEAAAAFJsAAAUAAAAY
+mwAACAAAABybAAAJAAAAIJsAAAoAAAAkmwAACwAAACybAAANAAAAMJsAABAAAAA0mwAA
+EQAAADybAAATAAAAQJsAABQAAABEmwAAFQAAAEibAAAYAAAATJsAABkAAABQmwAAGgAA
+AFSbAAAbAAAAWJsAABwAAABcmwAAHQAAAGCbAAAgAAAAaJsAACIAAABsmwAAIwAAAHCb
+AAAkAAAAdJsAACUAAAB4mwAAKAAAAHybAAApAAAAgJsAACoAAACEmwAAKwAAAIibAAAs
+AAAAkJsAADAAAACUmwAAMQAAAJibAAAyAAAAoJsAADQAAACkmwAANQAAAKibAAA1AAAA
+rJsAADUAAACwmwAANQAAALSbAAA1AAAAuJsAADUAAAC8mwAANQAAAMCbAAA1AAAAxJsA
+ADUAAADImwAANQAAAMybAAA1AAAA0JsAADUAAADUmwAANQAAANibAAA1AAAA3JsAADUA
+AADgmwAANQAAAOSbAAA1AAAA6JsAADUAAADsmwAANQAAAPCbAAA1AAAA9JsAADUAAAD4
+mwAAEAAAAPybAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJoAAAcAAAAHAAAA
+BJoAAEcAAABHAAAACJoAAIcAAACHAAAADJoAAKABAACgAQAAEJoAAOABAADgAQAAFJoA
+ACAAAAAgAAAAGJoAAGAAAABgAAAAHJoAAKEBAAChAQAAIJoAAOEBAADhAQAAJJoAACEA
+AAAhAAAAKJoAAGEAAABhAAAALJoAAGIBAABiAQAAMJoAAKIBAACiAQAANJoAAOIBAADi
+AQAAOJoAACIAAAAiAAAAPJoAAGIAAABiAAAAQJoAAGMBAABjAQAARJoAAKMBAACjAQAA
+SJoAAOMBAADjAQAATJoAACMAAAAjAAAAUJoAAGMAAABjAAAAVJoAAIQBAACEAQAAWJoA
+AMQBAADEAQAAXJoAAAQAAAAEAAAAYJoAAOoBAAALAAAAZJoAACoAAABLAAAAaJoAAGoA
+AACLAAAAbJoAAKoAAACsAQAAcJoAAKsBAADsAQAAdJoAAOsBAAAsAAAAeJoAACsAAAAS
+AAAAfJoAAGsAAABSAAAAgJoAAKsAAACSAAAAhJoAAKwBAACTAQAAiJoAAOwBAADTAQAA
+jJoAACwAAAATAAAAkJoAADoAAABTAAAAlJoAAHoAAACTAAAAmJoAALoAAACUAQAAnJoA
+ALsBAADUAQAAoJoAAPsBAAAUAAAApJoAADsAAAA6AAAAqJoAAHsAAAB6AAAArJoAALsA
+AAC6AAAAsJoAALwBAAC7AQAAtJoAAPwBAAD7AQAAuJoAADwAAAA7AAAAvJoAAHwAAAB7
+AAAAwJoAALwAAAC7AAAAxJoAAPwAAAC8AQAAyJoAAPwAAAD8AQAAzJoAAPwAAAA8AAAA
+0JoAAPwAAAB8AAAA1JoAAPwAAAC8AAAA2JoAAPwAAAD8AAAA3JoAAPwAAAD8AAAA4JoA
+APwAAAD8AAAA5JoAAPwAAAD8AAAA6JoAAPwAAAD8AAAA7JoAAPwAAAD8AAAA8JoAAPwA
+AAD8AAAA9JoAAPwAAAD8AAAA+JoAAPwAAAD8AAAA/JoAAPwAAAD8AAAA1JgAACAAAAAA
+AAAAAAAAANCYAAAIBAYDCAQHAwgEBgMIBAYDCAQHAwAAAAAAAAAA3JgAAMAgoADAIKAA
+wCDgAMAg4ADAIOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAA8AAAAPAAAA
+DwAAAA8AAAAPnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAgAAAAIAAAACAAAAA
+gAAAAIAAnJgAAAAAKgAAACoAAAAqAAAAKgAAACoAnJgAAAAAAQAAAAEAAAABAAAAAQAA
+AAEAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAGAAAABgAAAAYAAAAGAAAABgA
+nJgAAAAAYAAAAGAAAABuAAAAbgAAAG4AnJgAAAAAxwAAAMcAAADHAAAAxwAAAMcAnJgA
+AAAASwAAAEsAAABLAAAASwAAAEsAnJgAAAAASAQAAEgEAABIBAAASAQAAEgEnJgAAAAA
+TAAAAEwAAABMAAAATAAAAEwAnJgAAAAA5AAAAOQAAADkAAAA5AAAAOQAnJgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAnJgAAAAA/AAAAPwAAAD8AAAA/AAAAPwAnJgAAAAA/wAAAP8A
+AAD/AAAA/wAAAP8AnJgAAAAAPwQAAD8EAAA/BAAAPwQAAD8EnJgAAAAADAAAAAwAAAAM
+AAAADAAAAAwAnJgAAAAAGQIAABkCAAAZAgAAGQIAABkCnJgAAAAAJAAAACQAAAAkAAAA
+JAAAACQAnJgAAAAAtAAAALQAAAC0AAAAtAAAALQAnJgAAAAAmQAAAJkAAACZAAAAmQAA
+AJkAnJgAAAAAUAAAAFAAAABQAAAAUAAAAFAAnJgAAAAAKgAAACoAAAAqAAAAKgAAACoA
+nJgAAAAAEgAAABIAAAASAAAAEgAAABIAnJgAAAAAMsAAADLAAAAywAAAMsAAADLAnJgA
+AAAAdAEAAHQBAAB0AQAAdAEAAHQBnJgAAAAAEQAAABEAAAARAAAAEQAAABEAnJgAAAAA
+KIYAACiGAAAohgAAKIYAACiGnJgAAAAAhDEAAIQxAACEMQAAhDEAAIQxnJgAAIAA8gCA
+APIAgADyAIAA8gCAAPIAnJgAABkAJwAZACcAGQAnABkAJwAZACcAnJgAAAMAAAADAAAA
+AwAAAAMAAAADAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAALIAAACyAAAAsgAA
+ALIAAACyAAAAnJgAAIQgsACEILAAhCCwAIQgsACEILAAnJgAAKQlQQCkJUEApCVBAKQl
+QQCkJUEAnJgAACCSEQAgkhEAIJIRACCSEQAgkhEAnJgAAABIGgAASBoAAEgaAABIGgAA
+SBoA2JgAADACCwAwAgsAMAILADACCwAwAgsAnJgAAJQAAACUAAAAlAAAAJQAAACUAAAA
+nJgAAJEAAACRAAAAkQAAAJEAAACRAAAAnJgAABIAAAASAAAAEgAAABIAAAASAAAAnJgA
+AIAAAACAAAAAgAAAAIAAAACAAAAAnJgAANkAAADZAAAA2QAAANkAAADZAAAAnJgAAGAA
+AABgAAAAYAAAAGAAAABgAAAAnJgAAPAAAADwAAAA8AAAAPAAAADwAAAAnJgAAKIAAACi
+AAAAogAAAKIAAACiAAAAnJgAAFIAAABSAAAAUgAAAFIAAABSAAAAnJgAANQAAADUAAAA
+1AAAANQAAADUAAAAnJgAAMwUAADMFAAAzBQAAMwUAADMFAAAnJgAAIwEAACMBAAAjAQA
+AIwEAACMBAAAxJgAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAMAAAABUAAAAVAAAAFQAAABUAAAAVAAAAHIAAAKeTjRLPE4gJlRPgBKsT4BLPE4gJ
+KJgAAAEAAgoBAAIKAAACBQEAAgoBAAIKNJgAAAAOAAAADgAAAA4AAAAOAAAADgAAOJgA
+AAIAAAACAAAACgAAAAoAAAAKAAAASJgAAG3aGABt2hgAZGoaAGRqGgBkahoAUJgAAOC0
+6A3gtOgN2rDoDdqwmAzasOgNWJgAAC4NgH4uDYB+Lg3ofi4NyH4uDYB+XJgAAF5mNzFe
+ZjcxXmY3MV5gOTFeZjcxbJgAAIGwDAWBsAwFgbAMBYGwDAWBsAwFFJkAANAHAADQBwAA
+TAQAAJgIAADQBwAARJkAAAAQuPcAELj3AA249wAQuPcAELj3BKIAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAACKIAAIhnvtaIZ77WiGc+0IhnPtCIZz7QDKIAAEABLABAASwAQMFCAEDB
+QgBAwUIAHKIAAAqAgxgKgIMYCoBjGAqAgxgKgIMYMBIAAOADAABggAAADwAAABiBAAAA
+AAAAHIEAAAAAAAAggQAAAAAAACSBAAAAAAAAKIEAAAAAAAAsgQAAAAAAADCBAAAAAAAA
+NIEAAAAAAAA4gQAAAAAAADyBAAAAAAAAQIEAAKgAAIBEgQAAAAAAAAiYAAAAAAAALJgA
+AACgAAA8mAAAAAQgAEyYAAA8I4QScJgAAB8AAAB0mAAAgAAAAHiYAAAOAAAAWJkAAP8A
+AACAmQAAAAAAAISZAAAAAIACoJkAAAAAAADgmQAAAAAAAOSZAACqqqqq6JkAAHhkRjzs
+mQAAqgAAAPCZAAAMAAAA9JkAAP8AAAD4mQAAFAAAACiiAAC1CQAAPKIAAK+JyJNMogAA
+AQAAAFCiAAAAoAAAVKIAAAAAAABYogAAgFPHDFyiAAABDw8PYKIAAAEPaV9kogAAEYpB
+AGiiAAAAAAAAbKIAAGrBMAxwogAAIAiCAHSiAACqfBsAeKIAAM455xx8ogAAzgEXBQCj
+AAAAAAEYBKMAAAImAzAIowAABj4HSAyjAAAKTAtWEKMAAA9gGmQUowAAG25PeBijAABa
+fI+GHKMAAFuGz44gowAAD5dPnSSjAACPoc+lKKMAAB+vX7UsowAAn7nfvTCjAAA/x3/N
+NKMAAL/R/9U4owAAAAAAADyjAAAAAAAAQKMAAAAAAABEowAAAAAAAEijAAD///8/TKMA
+AP///z9QowAA////P1SjAAD//wMAWKMAAB+qqHlcowAAD0JsBmCjAAAHIigPZKMAAIUW
+YBdoowAABBGAH2yjAAADDKA3cKMAAIMIxD90owAAAwjAV3ijAACCBthffKMAAIIE4H+A
+owAAuns8f4SjAADwfzDzBJsAAAEAAAAImwAAAgAAAAybAAADAAAAEJsAAAQAAAAUmwAA
+BQAAABibAAAIAAAAHJsAAAkAAAAgmwAACgAAACSbAAALAAAALJsAAA0AAAAwmwAAEAAA
+ADSbAAARAAAAPJsAABMAAABAmwAAFAAAAESbAAAVAAAASJsAABgAAABMmwAAGQAAAFCb
+AAAaAAAAVJsAABsAAABYmwAAHAAAAFybAAAdAAAAYJsAACAAAABomwAAIgAAAGybAAAj
+AAAAcJsAACQAAAB0mwAAJQAAAHibAAAoAAAAfJsAACkAAACAmwAAKgAAAISbAAArAAAA
+iJsAACwAAACQmwAAMAAAAJSbAAAxAAAAmJsAADIAAACgmwAANAAAAKSbAAA1AAAAqJsA
+ADUAAACsmwAANQAAALCbAAA1AAAAtJsAADUAAAC4mwAANQAAALybAAA1AAAAwJsAADUA
+AADEmwAANQAAAMibAAA1AAAAzJsAADUAAADQmwAANQAAANSbAAA1AAAA2JsAADUAAADc
+mwAANQAAAOCbAAA1AAAA5JsAADUAAADomwAANQAAAOybAAA1AAAA8JsAADUAAAD0mwAA
+NQAAAPibAAAQAAAA/JsAABoAAAAAAAAAAAAAAACaAAAAAAAAAAAAAASaAAAAAAAAQAAA
+AAiaAAAAAAAAgAAAAAyaAAAAAAAAgQEAABCaAAAAAAAAwQEAABSaAAAAAAAAAQAAABia
+AAAAAAAAQQAAAByaAAAAAAAAgQAAACCaAAAAAAAAaAEAACSaAAAAAAAAqAEAACiaAAAA
+AAAA6AEAACyaAAAAAAAAKAAAADCaAAAAAAAAaAAAADSaAAAAAAAAiQEAADiaAAAAAAAA
+yQEAADyaAAAAAAAACQAAAECaAAAAAAAASQAAAESaAAAAAAAAiQAAAEiaAAAAAAAAkAEA
+AEyaAAAAAAAA0AEAAFCaAAAAAAAAEAAAAFSaAAAAAAAAUAAAAFiaAAAAAAAAkAAAAFya
+AAAAAAAAkQEAAGCaAAAAAAAA0QEAAGSaAAAAAAAAEQAAAGiaAAAAAAAAUQAAAGyaAAAA
+AAAAkQAAAHCaAAAAAAAAeAEAAHSaAAAAAAAAuAEAAHiaAAAAAAAA+AEAAHyaAAAAAAAA
+OAAAAICaAAAAAAAAeAAAAISaAAAAAAAAmQEAAIiaAAAAAAAA2QEAAIyaAAAAAAAAGQAA
+AJCaAAAAAAAAWQAAAJSaAAAAAAAAmQAAAJiaAAAAAAAA2QAAAJyaAAAAAAAA+QAAAKCa
+AAAAAAAA+QAAAKSaAAAAAAAA+QAAAKiaAAAAAAAA+QAAAKyaAAAAAAAA+QAAALCaAAAA
+AAAA+QAAALSaAAAAAAAA+QAAALiaAAAAAAAA+QAAALyaAAAAAAAA+QAAAMCaAAAAAAAA
++QAAAMSaAAAAAAAA+QAAAMiaAAAAAAAA+QAAAMyaAAAAAAAA+QAAANCaAAAAAAAA+QAA
+ANSaAAAAAAAA+QAAANiaAAAAAAAA+QAAANyaAAAAAAAA+QAAAOCaAAAAAAAA+QAAAOSa
+AAAAAAAA+QAAAOiaAAAAAAAA+QAAAOyaAAAAAAAA+QAAAPCaAAAAAAAA+QAAAPSaAAAA
+AAAA+QAAAPiaAAAAAAAA+QAAAPyaAAAAAAAA+QAAANSYAAAgAAAAAAAAAAAAAADQmAAA
+CBQAAggUAQIIFAACCBQAAggUAQIAAAAAAAAAANyYAADAIKAAwCCgAMAg4ADAIOAAwCDg
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAADwAAAA8AAAAPAAAADwAAAA8JyY
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAADAAAAAwAAAAMAAAADAAAAA5yYAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAJyYAAAAAEBAAABAQAAAQEAAAEBAAABAQJyYAAAAAAVlAAAFZQAA
+BWUAAAVlAAAFZZyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAJyYAAAAAEIAAABCAAAAQgAAAEIAAABCAJyYAAAAALUAAAC1AAAAtQAAALUA
+AAC1AJyYAAAAAAMAAAADAAAAAwAAAAMAAAADAJyYAAAAAPcAAAD3AAAA9wAAAPcAAAD3
+AJyYAAAAAJ0AAACdAAAAnQAAAJ0AAACdAJyYAAAAACIAAAAiAAAAIgAAACIAAAAiAJyY
+AAAAACIEAAAiBAAAIgQAACIEAAAiBJyYAAAYACMAGAAjABgAIwAYACMAGAAjAJyYAAAA
+ACgAAAAoAGAAKABgACgAYAAoAJyYAADAAFAAwABQAMMAUADDAFAAwwBQAJyYAAB/AAQA
+fwAEAH8ABAB/AAQAfwAEAJyYAABYBAAAWAQAAFgEAABYBAAAWAQAAJyYAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAJyYAAAAwAAAAMAAAADAAAAAwAAAAMAAANiYAAAwAkAAMAJAADAC
+QAAwAkAAMAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAZAAAAGQAAABkAAAA
+ZAAAAGQAAJyYAAAACAAAAAgAAAAIAAAACAAAAAgAAMyYAAAOAAAADgAAAA4AAAAOAAAA
+DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAFQAAABUA
+AAAVAAAAFQAAABUAAAAcgAAAp5ONEs8TiAmVE+AEqxPgEs8TiAkomAAAAQACCgEAAgoA
+AQIFAQACCgEAAgo0mAAADg4AAA4OAAAODgAADg4AAA4OAAA4mAAABwAAAAcAAAALAAAA
+CwAAAAsAAABImAAAYfoYAGH6GABjGhoAYxoaAGMaGgBQmAAA4LSYDOC0mAzasJgM2rCY
+DNqwmAxYmAAALg3Ifi4NyH4uDch+Lg3Ifi4NyH5cmAAAXmA5MV5gOTFeYDkxXmA5MV5g
+OTFsmAAAgbAMBYGwDAWBsAwFgbAMBYGwDAUUmQAA0AcAANAHAABMBAAAmAgAANAHAABE
+mQAAABC49wAQuPcADbj3ABC49wAQuPcEogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIogAA
+iGe+1ohnvtaIZz7QiGc+0IhnPtAMogAA4MEuAODBLgAgwSoAIMEqACDBKgAcogAACoCD
+GAqAgxgKgGMYCoCDGAqAgxgAowAAAAABGAAAARgAAAEYAAABGAAAARgEowAAAiYDMAIm
+AzACJgMwAiYDMAImAzAIowAABj4HSAY+B0gGPgdIBj4HSAY+B0gMowAACkwLVgpMC1YK
+TAtWCkwLVgpMC1YQowAAD2AaZA9gGmQPYBpkD2AaZA9gGmQUowAAG25PeBtuT3gbbk94
+G25PeBtuT3gYowAAWnyPhlp8j4ZafI+GWnyPhlp8j4YcowAAW4bPkFuGz5Bbhs+OW4bP
+jluGz44gowAAD5dPnQ+XT50Pl0+bD5dPmw+XT5skowAAj6PPp4+jz6ePn8+jj5/Po4+f
+z6MoowAAH69ftR+vX7Ufr1+zH69fsx+vX7MsowAAn7nfvZ+5372fud+7n7nfu5+537sw
+owAAP8V/yz/Ff8s/x3/LP8d/yz/Hf8s0owAAv9H/1b/R/9W/0f/Tv9H/07/R/9MAAAAA
+AAAAAAAAAAAAAAAAMBIAAOADAABoQAAAEAAAAGCAAAAPAAAAnIAAAAAAAACggAAAAAAA
+ABiBAAAAAAAAHIEAAAAAAAAggQAAAAAAACSBAAAAAAAAKIEAAAAAAAAsgQAAAAAAADCB
+AAAAAAAANIEAAAAAAAA4gQAAAAAAADyBAAAAAAAAQIEAAPkDAIBEgQAAAAAAAAiYAAAA
+AAAALJgAAACgAAA8mAAAAAQgAEyYAAA8I4QScJgAAB8AAAB0mAAAgAAAAHiYAAAOAAAA
+WJkAAP8fCACAmQAAAAAAAISZAAAAAIACoJkAAAAAAADgmQAAAAAAAOSZAACqqqqq6JkA
+AHhkRjzsmQAAqgAAAPCZAAAMAAAA9JkAAP8AAAD4mQAAFAAAACiiAAC1CQAAPKIAAK+J
+yJNMogAAAQAAAFCiAAAAoAAAVKIAAAAAAABYogAAgFPHDFyiAAABDw8PYKIAAAEPaV9k
+ogAAEYpBAGiiAAAAAAAAbKIAAGrBMAxwogAAIAiCAHSiAACqfBsIeKIAAM455xx8ogAA
+zgEXBTijAAAAAAAAPKMAAAAAAABAowAAAAAAAESjAAAAAAAASKMAAP///z9MowAA////
+P1CjAAD///8/VKMAAP//AwBYowAAH6qoeVyjAAAPQmwGYKMAAAciKA9kowAAhRZgF2ij
+AAAEEYAfbKMAAAMMoDdwowAAgwjEP3SjAAADCMBXeKMAAIIG2F98owAAggTgf4CjAAC6
+ezx/hKMAAPB/MPMEmwAAAQAAAAibAAACAAAADJsAAAMAAAAQmwAABAAAABSbAAAFAAAA
GJsAAAgAAAAcmwAACQAAACCbAAAKAAAAJJsAAAsAAAAsmwAADQAAADCbAAAQAAAANJsA
ABEAAAA8mwAAEwAAAECbAAAUAAAARJsAABUAAABImwAAGAAAAEybAAAZAAAAUJsAABoA
AABUmwAAGwAAAFibAAAcAAAAXJsAAB0AAABgmwAAIAAAAGibAAAiAAAAbJsAACMAAABw
@@ -2400,1838 +2904,2297 @@ LAAAAJCbAAAwAAAAlJsAADEAAACYmwAAMgAAAKCbAAA0AAAApJsAADUAAAComwAANQAA
AKybAAA1AAAAsJsAADUAAAC0mwAANQAAALibAAA1AAAAvJsAADUAAADAmwAANQAAAMSb
AAA1AAAAyJsAADUAAADMmwAANQAAANCbAAA1AAAA1JsAADUAAADYmwAANQAAANybAAA1
AAAA4JsAADUAAADkmwAANQAAAOibAAA1AAAA7JsAADUAAADwmwAANQAAAPSbAAA1AAAA
-+JsAABAAAAD8mwAAGgAAAAAAAAAAAAAAAJoAAAcAAAAHAAAABJoAAEcAAABHAAAACJoA
-AIcAAACHAAAADJoAAKABAACgAQAAEJoAAOABAADgAQAAFJoAACAAAAAgAAAAGJoAAGAA
-AABgAAAAHJoAAKEBAAChAQAAIJoAAOEBAADhAQAAJJoAACEAAAAhAAAAKJoAAGEAAABh
-AAAALJoAAGIBAABiAQAAMJoAAKIBAACiAQAANJoAAOIBAADiAQAAOJoAACIAAAAiAAAA
-PJoAAGIAAABiAAAAQJoAAGMBAABjAQAARJoAAKMBAACjAQAASJoAAOMBAADjAQAATJoA
-ACMAAAAjAAAAUJoAAGMAAABjAAAAVJoAAIQBAACEAQAAWJoAAMQBAADEAQAAXJoAAAQA
-AAAEAAAAYJoAAOoBAAALAAAAZJoAACoAAABLAAAAaJoAAGoAAACLAAAAbJoAAKoAAACs
-AQAAcJoAAKsBAADsAQAAdJoAAOsBAAAsAAAAeJoAACsAAAASAAAAfJoAAGsAAABSAAAA
-gJoAAKsAAACSAAAAhJoAAKwBAACTAQAAiJoAAOwBAADTAQAAjJoAACwAAAATAAAAkJoA
-ADoAAABTAAAAlJoAAHoAAACTAAAAmJoAALoAAACUAQAAnJoAALsBAADUAQAAoJoAAPsB
-AAAUAAAApJoAADsAAAA6AAAAqJoAAHsAAAB6AAAArJoAALsAAAC6AAAAsJoAALwBAAC7
-AQAAtJoAAPwBAAD7AQAAuJoAADwAAAA7AAAAvJoAAHwAAAB7AAAAwJoAALwAAAC7AAAA
-xJoAAPwAAAC8AQAAyJoAAPwAAAD8AQAAzJoAAPwAAAA8AAAA0JoAAPwAAAB8AAAA1JoA
-APwAAAC8AAAA2JoAAPwAAAD8AAAA3JoAAPwAAAD8AAAA4JoAAPwAAAD8AAAA5JoAAPwA
-AAD8AAAA6JoAAPwAAAD8AAAA7JoAAPwAAAD8AAAA8JoAAPwAAAD8AAAA9JoAAPwAAAD8
-AAAA+JoAAPwAAAD8AAAA/JoAAPwAAAD8AAAA1JgAACAAAAAAAAAAAAAAANCYAAAIBAYD
-CAQHAwgEBgMIBAYDCAQHAwAAAAAAAAAA3JgAAMDAoADAwKAAwMDgAMDA4ADAwOAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAA8AAAAPAAAADwAAAA8AAAAPnJgAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAgAAAAIAAAACAAAAAgAAAAIAAnJgAAAAAKgAA
-ACoAAAAqAAAAKgAAACoAnJgAAAAAAQAAAAEAAAABAAAAAQAAAAEAnJgAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAnJgAAAAAGAAAABgAAAAYAAAAGAAAABgAnJgAAAAAYAAAAGAAAABu
-AAAAbgAAAG4AnJgAAAAAxwAAAMcAAADHAAAAxwAAAMcAnJgAAAAASwAAAEsAAABLAAAA
-SwAAAEsAnJgAAAAASAQAAEgEAABIBAAASAQAAEgEnJgAAAAATAAAAEwAAABMAAAATAAA
-AEwAnJgAAAAA5AAAAOQAAADkAAAA5AAAAOQAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-nJgAAAAA/AAAAPwAAAD8AAAA/AAAAPwAnJgAAAAA/wAAAP8AAAD/AAAA/wAAAP8AnJgA
-AAAAPwQAAD8EAAA/BAAAPwQAAD8EnJgAAAAADAAAAAwAAAAMAAAADAAAAAwAnJgAAAAA
-GQIAABkCAAAZAgAAGQIAABkCnJgAAAAAJAAAACQAAAAkAAAAJAAAACQAnJgAAAAAtAAA
-ALQAAAC0AAAAtAAAALQAnJgAAAAAmQAAAJkAAACZAAAAmQAAAJkAnJgAAAAAUAAAAFAA
-AABQAAAAUAAAAFAAnJgAAAAAKgAAACoAAAAqAAAAKgAAACoAnJgAAAAAEgAAABIAAAAS
-AAAAEgAAABIAnJgAAAAAMsAAADLAAAAywAAAMsAAADLAnJgAAAAAdAEAAHQBAAB0AQAA
-dAEAAHQBnJgAAAAAEQAAABEAAAARAAAAEQAAABEAnJgAAAAAKIYAACiGAAAohgAAKIYA
-ACiGnJgAAAAAhDEAAIQxAACEMQAAhDEAAIQxnJgAAIAA8gCAAPIAgADyAIAA8gCAAPIA
-nJgAABkAJwAZACcAGQAnABkAJwAZACcAnJgAAAMAAAADAAAAAwAAAAMAAAADAAAAnJgA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAALIAAACyAAAAsgAAALIAAACyAAAAnJgAAIQg
-sACEILAAhCCwAIQgsACEILAAnJgAAKQlQQCkJUEApCVBAKQlQQCkJUEAnJgAACCSEQAg
-khEAIJIRACCSEQAgkhEAnJgAAABIGgAASBoAAEgaAABIGgAASBoA2JgAADACCwAwAgsA
-MAILADACCwAwAgsAnJgAAJQAAACUAAAAlAAAAJQAAACUAAAAnJgAAJEAAACRAAAAkQAA
-AJEAAACRAAAAnJgAABIAAAASAAAAEgAAABIAAAASAAAAnJgAAIAAAACAAAAAgAAAAIAA
-AACAAAAAnJgAANkAAADZAAAA2QAAANkAAADZAAAAnJgAAGAAAABgAAAAYAAAAGAAAABg
-AAAAnJgAAPAAAADwAAAA8AAAAPAAAADwAAAAnJgAAKIAAACiAAAAogAAAKIAAACiAAAA
-nJgAAFIAAABSAAAAUgAAAFIAAABSAAAAnJgAANQAAADUAAAA1AAAANQAAADUAAAAnJgA
-AMwUAADMFAAAzBQAAMwUAADMFAAAnJgAAIwEAACMBAAAjAQAAIwEAACMBAAAxJgAAAMA
-AAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAABUAAAAVAAAA
-FQAAABUAAAAVAAAAHIAAAKeTjRLPE4gJlRPgBKsT4BLPE4gJKJgAAAEAAgoBAAIKAAAC
-BQEAAgoBAAIKNJgAAAAOAAAADgAAAA4AAAAOAAAADgAAOJgAAAIAAAACAAAACgAAAAoA
-AAAKAAAASJgAAG3aGABt2hgAZGoaAGRqGgBkahoAUJgAAOC06A3gtOgN2rDoDdqwmAza
-sOgNWJgAAC4NgH4uDYB+Lg3ofi4NyH4uDYB+XJgAAF5mNzFeZjcxXmY3MV5gOTFeZjcx
-bJgAAIGwDAWBsAwFgbAMBYGwDAWBsAwFFJkAANAHAADQBwAATAQAAJgIAADQBwAARJkA
-AAAQuPcAELj3AA249wAQuPcAELj3BKIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKIAAIhn
-vtaIZ77WiGc+0IhnPtCIZz7QDKIAAEABLABAASwAQMFCAEDBQgBAwUIAHKIAAAqAgxgK
-gIMYCoBjGAqAgxgKgIMYMBIAAOADAABggAAADwAAABiBAAAAAAAAHIEAAAAAAAAggQAA
-AAAAACSBAAAAAAAAKIEAAAAAAAAsgQAAAAAAADCBAAAAAAAANIEAAAAAAAA4gQAAAAAA
-ADyBAAAAAAAAQIEAAKgAAIBEgQAAAAAAACyYAAAAoAAAPJgAAAAEIABMmAAAPCOEEnCY
-AAAfAAAAdJgAAIAAAAB4mAAADgAAAICZAAAAAAAAhJkAAAAAgAKgmQAAAAAAAOCZAAAA
-AAAA5JkAAKqqqqromQAAeGRGPOyZAACqAAAA8JkAAAwAAAD0mQAA/wAAAPiZAAAUAAAA
-KKIAALUJAAA8ogAAr4nIk0yiAAABAAAAUKIAAACgAABUogAAAAAAAFiiAACAU8cMXKIA
-AAEPDw9gogAAAQ9pX2SiAAARikEAaKIAAAAAAABsogAAasEwDHCiAAAgCIIAdKIAAKp8
-GwB4ogAAzjnnHHyiAADOARcFAKMAAAAAARgEowAAAiYDMAijAAAGPgdIDKMAAApMC1YQ
-owAAD2AaZBSjAAAbbk94GKMAAFp8j4YcowAAW4bPjiCjAAAPl0+dJKMAAI+hz6UoowAA
-H69ftSyjAACfud+9MKMAAD/Hf800owAAv9H/1TijAAAAAAAAPKMAAAAAAABAowAAAAAA
-AESjAAAAAAAASKMAAP///z9MowAA////P1CjAAD///8/VKMAAP//AwBYowAAH6qoeVyj
-AAAPQmwGYKMAAAciKA9kowAAhRZgF2ijAAAEEYAfbKMAAAMMoDdwowAAgwjEP3SjAAAD
-CMBXeKMAAIIG2F98owAAggTgf4CjAAC6ezx/hKMAAPB/MPMEmwAAAQAAAAibAAACAAAA
-DJsAAAMAAAAQmwAABAAAABSbAAAFAAAAGJsAAAgAAAAcmwAACQAAACCbAAAKAAAAJJsA
-AAsAAAAsmwAADQAAADCbAAAQAAAANJsAABEAAAA8mwAAEwAAAECbAAAUAAAARJsAABUA
-AABImwAAGAAAAEybAAAZAAAAUJsAABoAAABUmwAAGwAAAFibAAAcAAAAXJsAAB0AAABg
-mwAAIAAAAGibAAAiAAAAbJsAACMAAABwmwAAJAAAAHSbAAAlAAAAeJsAACgAAAB8mwAA
-KQAAAICbAAAqAAAAhJsAACsAAACImwAALAAAAJCbAAAwAAAAlJsAADEAAACYmwAAMgAA
-AKCbAAA0AAAApJsAADUAAAComwAANQAAAKybAAA1AAAAsJsAADUAAAC0mwAANQAAALib
-AAA1AAAAvJsAADUAAADAmwAANQAAAMSbAAA1AAAAyJsAADUAAADMmwAANQAAANCbAAA1
-AAAA1JsAADUAAADYmwAANQAAANybAAA1AAAA4JsAADUAAADkmwAANQAAAOibAAA1AAAA
-7JsAADUAAADwmwAANQAAAPSbAAA1AAAA+JsAABAAAAD8mwAAGgAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAACaAAAAAAAAAAAAAASaAAAAAAAAQAAAAAiaAAAAAAAAgAAAAAya
-AAAAAAAAgQEAABCaAAAAAAAAwQEAABSaAAAAAAAAAQAAABiaAAAAAAAAQQAAAByaAAAA
-AAAAgQAAACCaAAAAAAAAaAEAACSaAAAAAAAAqAEAACiaAAAAAAAA6AEAACyaAAAAAAAA
-KAAAADCaAAAAAAAAaAAAADSaAAAAAAAAiQEAADiaAAAAAAAAyQEAADyaAAAAAAAACQAA
-AECaAAAAAAAASQAAAESaAAAAAAAAiQAAAEiaAAAAAAAAkAEAAEyaAAAAAAAA0AEAAFCa
-AAAAAAAAEAAAAFSaAAAAAAAAUAAAAFiaAAAAAAAAkAAAAFyaAAAAAAAAkQEAAGCaAAAA
-AAAA0QEAAGSaAAAAAAAAEQAAAGiaAAAAAAAAUQAAAGyaAAAAAAAAkQAAAHCaAAAAAAAA
-eAEAAHSaAAAAAAAAuAEAAHiaAAAAAAAA+AEAAHyaAAAAAAAAOAAAAICaAAAAAAAAeAAA
-AISaAAAAAAAAmQEAAIiaAAAAAAAA2QEAAIyaAAAAAAAAGQAAAJCaAAAAAAAAWQAAAJSa
-AAAAAAAAmQAAAJiaAAAAAAAA2QAAAJyaAAAAAAAA+QAAAKCaAAAAAAAA+QAAAKSaAAAA
-AAAA+QAAAKiaAAAAAAAA+QAAAKyaAAAAAAAA+QAAALCaAAAAAAAA+QAAALSaAAAAAAAA
-+QAAALiaAAAAAAAA+QAAALyaAAAAAAAA+QAAAMCaAAAAAAAA+QAAAMSaAAAAAAAA+QAA
-AMiaAAAAAAAA+QAAAMyaAAAAAAAA+QAAANCaAAAAAAAA+QAAANSaAAAAAAAA+QAAANia
-AAAAAAAA+QAAANyaAAAAAAAA+QAAAOCaAAAAAAAA+QAAAOSaAAAAAAAA+QAAAOiaAAAA
-AAAA+QAAAOyaAAAAAAAA+QAAAPCaAAAAAAAA+QAAAPSaAAAAAAAA+QAAAPiaAAAAAAAA
-+QAAAPyaAAAAAAAA+QAAANSYAAAgAAAAAAAAAAAAAADQmAAACBQAAggUAQIIFAACCBQA
-AggUAQIAAAAAAAAAANyYAADAIKAAwCCgAMAg4ADAIOAAwCDgAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAJyYAAAAAADwAAAA8AAAAPAAAADwAAAA8JyYAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAJyYAAAAAAADAAAAAwAAAAMAAAADAAAAA5yYAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyY
-AAAAAEBAAABAQAAAQEAAAEBAAABAQJyYAAAAAAVlAAAFZQAABWUAAAVlAAAFZZyYAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAEIA
-AABCAAAAQgAAAEIAAABCAJyYAAAAALUAAAC1AAAAtQAAALUAAAC1AJyYAAAAAAMAAAAD
-AAAAAwAAAAMAAAADAJyYAAAAAPcAAAD3AAAA9wAAAPcAAAD3AJyYAAAAAJ0AAACdAAAA
-nQAAAJ0AAACdAJyYAAAAACIAAAAiAAAAIgAAACIAAAAiAJyYAAAAACIEAAAiBAAAIgQA
-ACIEAAAiBJyYAAAYACMAGAAjABgAIwAYACMAGAAjAJyYAAAAACgAAAAoAGAAKABgACgA
-YAAoAJyYAADAAFAAwABQAMMAUADDAFAAwwBQAJyYAAB/AAQAfwAEAH8ABAB/AAQAfwAE
-AJyYAABYBAAAWAQAAFgEAABYBAAAWAQAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyY
-AAAAwAAAAMAAAADAAAAAwAAAAMAAANiYAAAwAkAAMAJAADACQAAwAkAAMAJAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAZAAAAGQAAABkAAAAZAAAAGQAAJyYAAAACAAA
-AAgAAAAIAAAACAAAAAgAAMyYAAAOAAAADgAAAA4AAAAOAAAADgAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AABBUjUyMTAAQVI1MjExAEFSNTIxMgBSRjUxMTEAUkY1MTEyAFJGMjQxMwBBdGhlcm9z
-IDIzMTMgV2lTb0MAQXRoZXJvcyA1MjEyIChGUEdBKQBBdGhlcm9zIDUyMTEgKEZQR0Ep
-AEF0aGVyb3MgNTIxMABBdGhlcm9zIDUyMTEAQXRoZXJvcyA1MzEyIFdpU29DAEF0aGVy
-b3MgNTIxMgBEQgBERUJVRwBOQQBOT19DT1VOVFJZX1NFVABBTABBTEJBTklBAERaAEFM
-R0VSSUEAQVIAQVJHRU5USU5BAEFNAEFSTUVOSUEAQVUAQVVTVFJBTElBAEFUAEFVU1RS
-SUEAQVoAQVpFUkJBSUpBTgBCSABCQUhSQUlOAEJZAEJFTEFSVVMAQkUAQkVMR0lVTQBC
-WgBCRUxJWkUAQk8AQk9MVklBAEJSAEJSQVpJTABCTgBCUlVORUkgREFSVVNTQUxBTQBC
-RwBCVUxHQVJJQQBDQQBDQU5BREEAQ0wAQ0hJTEUAQ04AQ0hJTkEAQ08AQ09MT01CSUEA
-Q1IAQ09TVEEgUklDQQBIUgBDUk9BVElBAENZAENZUFJVUwBDWgBDWkVDSCBSRVBVQkxJ
-QwBESwBERU5NQVJLAERPAERPTUlOSUNBTiBSRVBVQkxJQwBFQwBFQ1VBRE9SAEVHAEVH
-WVBUAFNWAEVMIFNBTFZBRE9SAEVFAEVTVE9OSUEARkkARklOTEFORABGUgBGUkFOQ0UA
-RjIARlJBTkNFX1JFUwBHRQBHRU9SR0lBAERFAEdFUk1BTlkAR1IAR1JFRUNFAEdUAEdV
-QVRFTUFMQQBITgBIT05EVVJBUwBISwBIT05HIEtPTkcASFUASFVOR0FSWQBJUwBJQ0VM
-QU5EAElOAElORElBAElEAElORE9ORVNJQQBJUgBJUkFOAElFAElSRUxBTkQASUwASVNS
-QUVMAElUAElUQUxZAEpQAEpBUEFOAEoxAEpBUEFOMQBKMgBKQVBBTjIASjMASkFQQU4z
-AEo0AEpBUEFONABKNQBKQVBBTjUASk8ASk9SREFOAEtaAEtBWkFLSFNUQU4AS1AATk9S
-VEggS09SRUEAS1IAS09SRUEgUkVQVUJMSUMASzIAS09SRUEgUkVQVUJMSUMyAEtXAEtV
-V0FJVABMVgBMQVRWSUEATEIATEVCQU5PTgBMSQBMSUVDSFRFTlNURUlOAExUAExJVEhV
-QU5JQQBMVQBMVVhFTUJPVVJHAE1PAE1BQ0FVAE1LAE1BQ0VET05JQQBNWQBNQUxBWVNJ
-QQBNWABNRVhJQ08ATUMATU9OQUNPAE1BAE1PUk9DQ08ATkwATkVUSEVSTEFORFMATloA
-TkVXIFpFQUxBTkQATk8ATk9SV0FZAE9NAE9NQU4AUEsAUEFLSVNUQU4AUEEAUEFOQU1B
-AFBFAFBFUlUAUEgAUEhJTElQUElORVMAUEwAUE9MQU5EAFBUAFBPUlRVR0FMAFBSAFBV
-RVJUTyBSSUNPAFFBAFFBVEFSAFJPAFJPTUFOSUEAUlUAUlVTU0lBAFNBAFNBVURJIEFS
-QUJJQQBTRwBTSU5HQVBPUkUAU0sAU0xPVkFLIFJFUFVCTElDAFNJAFNMT1ZFTklBAFpB
-AFNPVVRIIEFGUklDQQBFUwBTUEFJTgBTRQBTV0VERU4AQ0gAU1dJVFpFUkxBTkQAU1kA
-U1lSSUEAVFcAVEFJV0FOAFRIAFRIQUlMQU5EAFRUAFRSSU5JREFEICYgVE9CQUdPAFRO
-AFRVTklTSUEAVFIAVFVSS0VZAFVBAFVLUkFJTkUAQUUAVU5JVEVEIEFSQUIgRU1JUkFU
-RVMAR0IAVU5JVEVEIEtJTkdET00AVVMAVU5JVEVEIFNUQVRFUwBVWQBVUlVHVUFZAFVa
-AFVaQkVLSVNUQU4AVkUAVkVORVpVRUxBAFZOAFZJRVQgTkFNAFlFAFlFTUVOAFpXAFpJ
-TUJBQldFAAAAAAAAAAAAAAAAACVzOiBwaHlDbnQxIDB4JXgsIHJlc2V0dGluZyBjb3Vu
-dGVyIHZhbHVlIHRvIDB4JXgKAAAAAAAAAAAAAAAAAAAlczogcGh5Q250MiAweCV4LCBy
-ZXNldHRpbmcgY291bnRlciB2YWx1ZSB0byAweCV4CgAAAAAAAAAAAAAAAAAAMC45LjE0
-LjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBOIExEAiBPsExEA
-HhSCFA8AghTmFBIAXhVdFhQAXRbBFhQAwRbaFhcAAAAAAAAAjBSgFLQUyBQ8FFAUZBR4
-FAAAMhRGFFoUbhQAAGwJhQmeCYoJqAkAAGwJhQmeCYoJAABsCYUJngmKCQAAbAmFCZ4J
-igkAAHEWhRaZFq0WwRYAAFoUghSqFAAAgBaoFgAAfBWQFaQVuBXMFeAV9BUIFhwWMBZE
-FgAAAAAAAAAAAABxCXYJewmACY8JlAmZCaMJAAAAAAAAAAAAAAAAAAAAAHEJdgl7CYAJ
-jwmUCZkJAABxCXYJewmACY8JlAmZCQAAcQl2CXsJgAmPCZQJmQkAALQJAACFCQAAPBRQ
-FGQUeBQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA
-AAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAE
-AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAA
-AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAA
-AAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAA
-AAAAAAAAIAAAAAAAAAAAAAAAAAAAADIURhRaFG4UAABaFIIUqhSAFqgWAAAAAAAAAAAA
-AAAAfBWQFaQVuBXMFeAV9BUIFhwWMBZEFgAAAAAAAAAAAABgAAAAqAkAAAEAAACjCQAA
-AQAAALQJAAABAAAAZwAAAKgJAAABAAAAowkAAAEAAAC0CQAAAQAAAGEAAACoCQAAAQAA
-AKMJAAABAAAAtAkAAAEAAABlAAAAqAkAAAEAAACjCQAAAQAAALQJAAABAAAASgAAAKgJ
-AAAAAAAAowkAAAAAAAC0CQAAAQAAAEsAAACoCQAAAQAAAKMJAAABAAAAtAkAAAEAAABq
-AAAAqAkAAAEAAACjCQAAAQAAALQJAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECcBcLAIwAAAAA
-AAECKCMPABIAAAAAAAEC4C4KAJgCAAAAAAECUEYOACQCAAAAAAECwF0JALAEAAAAAAEC
-oIwNAEgEAAAAAAECgLsIAGAEAAAAAAEC8NIMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA3AXCwCMAAAAAAABAygjDwASAAAA
-AAABA+AuCgCYAgAAAAABA1BGDgAkAgAAAAABA8BdCQCwBAAAAAABA6CMDQBIBAAAAAAB
-A4C7CABgBAAAAAABA/DSDABsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8AEgAAAAAAAQLgLgoAmAIA
-AAAAAQJQRg4AJAIAAAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQAAAAAAQKAuwgAYAQAAAAA
-AQLw0gwAbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMPABIAAAAAAAED4C4KAJgCAAAAAAEDUEYOACQC
-AAAAAAEDwF0JALAEAAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAEAAAAAAED8NIMAGwEAAAA
++JsAABAAAAD8mwAAGgAAAACaAAAAAAAAAAAAAASaAABAAAAAQAAAAAiaAACAAAAAgAAA
+AAyaAAChAQAAYQEAABCaAADhAQAAoQEAABSaAAAhAAAA4QEAABiaAABhAAAAIQAAABya
+AACIAQAAYQAAACCaAADIAQAAiAEAACSaAAAIAAAAyAEAACiaAABIAAAACAAAACyaAACI
+AAAASAAAADCaAACpAQAAiAAAADSaAADpAQAAaQEAADiaAAApAAAAqQEAADyaAABpAAAA
+6QEAAECaAADQAQAAKQAAAESaAAAQAAAAaQAAAEiaAABQAAAAkAEAAEyaAACQAAAA0AEA
+AFCaAACxAQAAEAAAAFSaAADxAQAAUAAAAFiaAAAxAAAAkAAAAFyaAABxAAAAcQEAAGCa
+AAC4AQAAsQEAAGSaAAD4AQAA8QEAAGiaAAA4AAAAMQAAAGyaAAB4AAAAcQAAAHCaAACZ
+AQAAmAEAAHSaAADZAQAA2AEAAHiaAAAZAAAAGAAAAHyaAABZAAAAWAAAAICaAACZAAAA
+mAAAAISaAADZAAAAeQEAAIiaAAD5AAAAuQEAAIyaAAD5AAAA+QEAAJCaAAD5AAAAOQAA
+AJSaAAD5AAAAeQAAAJiaAAD5AAAAuQAAAJyaAAD5AAAA+QAAAKCaAAD5AAAA+QAAAKSa
+AAD5AAAA+QAAAKiaAAD5AAAA+QAAAKyaAAD5AAAA+QAAALCaAAD5AAAA+QAAALSaAAD5
+AAAA+QAAALiaAAD5AAAA+QAAALyaAAD5AAAA+QAAAMCaAAD5AAAA+QAAAMSaAAD5AAAA
++QAAAMiaAAD5AAAA+QAAAMyaAAD5AAAA+QAAANCaAAD5AAAA+QAAANSaAAD5AAAA+QAA
+ANiaAAD5AAAA+QAAANyaAAD5AAAA+QAAAOCaAAD5AAAA+QAAAOSaAAD5AAAA+QAAAOia
+AAD5AAAA+QAAAOyaAAD5AAAA+QAAAPCaAAD5AAAA+QAAAPSaAAD5AAAA+QAAAPiaAAD5
+AAAA+QAAAPyaAAD5AAAA+QAAANSYAAAgAAAAAAAAAAAAAADQmAAACAAAAAgAAAAIAAAA
+CAAAAAgAAAAAAAAAAAAAANyYAADAAKAAwACgAMAA4ADAAOAAwADgAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAJyYAAAAAAAzAAAAMwAAADMAAAAzAAAAM5yYAAAAAAABAAAAAQAA
+AAEAAAABAAAAAZyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAfAAAAHwAAAB8AAAAf
+AAAAH5yYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAALgAAAC4AAAAuAAAALgAAAC4
+AJyYAAAAALcAAAC3AAAAtwAAALcAAAC3AJyYAAAAAIQAAACEAAAAhAAAAIQAAACEAJyY
+AAAAAJgAAACYAAAAmAAAAJgAAACYAJyYAAAAAMAAAADAAAAAwAAAAMAAAADAAJyYAAAA
+AP8AAAD/AAAA/wAAAP8AAAD/AJyYAAAAAP8AAAD/AAAA/wAAAP8AAAD/AJyYAAAAAP8A
+AAD/AAAA/wAAAP8AAAD/AJyYAAAAAP8AAAD/AAAA/wAAAP8AAAD/AJyYAAAAANcAAADX
+AAAA1wAAANcAAADXAJyYAAAAAGEAAABhAAAAYQAAAGEAAABhAJyYAAAAAP4AAAD+AAAA
+/gAAAP4AAAD+AJyYAAAAAN4AAADeAAAA3gAAAN4AAADeAJyYAAAAAH8AAAB/AAAAfwAA
+AH8AAAB/AJyYAAAAAD0EAAA9BAAAPQQAAD0EAAA9BJyYAAAAAHcAAAB3AAAAdwAAAHcA
+AAB3AJyYAAAAAEQAAABEAAAARAAAAEQAAABEAJyYAAAAAJgAAACYAAAAmAAAAJgAAACY
+AJyYAACAABAAgAAQAIAAEACAABAAgAAQAJyYAAA0wAUANMAFADTABQA0wAUANMAFAJyY
+AADwADEA8AAxAPAAMQDwADEA8AAxAJyYAAAfAQwAHwEMAB8BDAAfAQwAHwEMAJyYAABA
+AFEAQABRAEAAUQBAAFEAQABRAJyYAADaAFAA2gBQANoAUADaAFAA2gBQAJyYAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAJyYAABEQAAAREAAAERAAABEQAAAREAAAJyYAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAJyYAADAYAAAwGAAAMBgAADAYAAAwGAAAJyYAAAALAAAACwAAAA2
+AAAANgAAACwAAMiYAAADBAAAAwQAAAMEAAADBAAAAwQAAAAAAAAAAAAAnJgAAABkAAAA
+ZAAAAGQAAABkAAAAZAAAnJgAAAAIAAAACAAAAAgAAAAIAAAACAAAzJgAAA4AAAAOAAAA
+DgAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFSNTIxMABBUjUyMTEAQVI1MjEyAFJGNTEx
+MQBSRjUxMTIAUkYyNDEzAFJGNTQxMwBBdGhlcm9zIDIzMTMgV2lTb0MAQXRoZXJvcyA1
+NDI0AEF0aGVyb3MgMjMxNyBXaVNvQwBBdGhlcm9zIDUyMTIgKEZQR0EpAEF0aGVyb3Mg
+NTIxMSAoRlBHQSkAQXRoZXJvcyA1MjEwAEF0aGVyb3MgNTIxMQBBdGhlcm9zIDUzMTIg
+V2lTb0MAQXRoZXJvcyAyMzE1IFdpU29DAEF0aGVyb3MgNTIxMgBEQgBERUJVRwBOQQBO
+T19DT1VOVFJZX1NFVABBTABBTEJBTklBAERaAEFMR0VSSUEAQVIAQVJHRU5USU5BAEFN
+AEFSTUVOSUEAQVUAQVVTVFJBTElBAEFUAEFVU1RSSUEAQVoAQVpFUkJBSUpBTgBCSABC
+QUhSQUlOAEJZAEJFTEFSVVMAQkUAQkVMR0lVTQBCWgBCRUxJWkUAQk8AQk9MVklBAEJS
+AEJSQVpJTABCTgBCUlVORUkgREFSVVNTQUxBTQBCRwBCVUxHQVJJQQBDQQBDQU5BREEA
+Q0wAQ0hJTEUAQ04AQ0hJTkEAQ08AQ09MT01CSUEAQ1IAQ09TVEEgUklDQQBIUgBDUk9B
+VElBAENZAENZUFJVUwBDWgBDWkVDSCBSRVBVQkxJQwBESwBERU5NQVJLAERPAERPTUlO
+SUNBTiBSRVBVQkxJQwBFQwBFQ1VBRE9SAEVHAEVHWVBUAFNWAEVMIFNBTFZBRE9SAEVF
+AEVTVE9OSUEARkkARklOTEFORABGUgBGUkFOQ0UARjIARlJBTkNFX1JFUwBHRQBHRU9S
+R0lBAERFAEdFUk1BTlkAR1IAR1JFRUNFAEdUAEdVQVRFTUFMQQBITgBIT05EVVJBUwBI
+SwBIT05HIEtPTkcASFUASFVOR0FSWQBJUwBJQ0VMQU5EAElOAElORElBAElEAElORE9O
+RVNJQQBJUgBJUkFOAElFAElSRUxBTkQASUwASVNSQUVMAElUAElUQUxZAEpQAEpBUEFO
+AEpBUEFOMQBKQVBBTjIASkFQQU4zAEpBUEFONABKQVBBTjUASkFQQU42AEpBUEFONwBK
+QVBBTjgASkFQQU45AEpBUEFOMTAASkFQQU4xMQBKQVBBTjEyAEpBUEFOMTMASkFQQU4x
+NABKQVBBTjE1AEpBUEFOMTYASkFQQU4xNwBKQVBBTjE4AEpBUEFOMTkASkFQQU4yMABK
+QVBBTjIxAEpBUEFOMjIASkFQQU4yMwBKQVBBTjI0AEpPAEpPUkRBTgBLWgBLQVpBS0hT
+VEFOAEtQAE5PUlRIIEtPUkVBAEtSAEtPUkVBIFJFUFVCTElDAEsyAEtPUkVBIFJFUFVC
+TElDMgBLMwBLT1JFQSBSRVBVQkxJQzMAS1cAS1VXQUlUAExWAExBVFZJQQBMQgBMRUJB
+Tk9OAExJAExJRUNIVEVOU1RFSU4ATFQATElUSFVBTklBAExVAExVWEVNQk9VUkcATU8A
+TUFDQVUATUsATUFDRURPTklBAE1ZAE1BTEFZU0lBAE1UAE1BTFRBAE1YAE1FWElDTwBN
+QwBNT05BQ08ATUEATU9ST0NDTwBOTABORVRIRVJMQU5EUwBOWgBORVcgWkVBTEFORABO
+TwBOT1JXQVkAT00AT01BTgBQSwBQQUtJU1RBTgBQQQBQQU5BTUEAUEUAUEVSVQBQSABQ
+SElMSVBQSU5FUwBQTABQT0xBTkQAUFQAUE9SVFVHQUwAUFIAUFVFUlRPIFJJQ08AUUEA
+UUFUQVIAUk8AUk9NQU5JQQBSVQBSVVNTSUEAU0EAU0FVREkgQVJBQklBAFNHAFNJTkdB
+UE9SRQBTSwBTTE9WQUsgUkVQVUJMSUMAU0kAU0xPVkVOSUEAWkEAU09VVEggQUZSSUNB
+AEVTAFNQQUlOAFNFAFNXRURFTgBDSABTV0lUWkVSTEFORABTWQBTWVJJQQBUVwBUQUlX
+QU4AVEgAVEhBSUxBTkQAVFQAVFJJTklEQUQgJiBUT0JBR08AVE4AVFVOSVNJQQBUUgBU
+VVJLRVkAVUEAVUtSQUlORQBBRQBVTklURUQgQVJBQiBFTUlSQVRFUwBHQgBVTklURUQg
+S0lOR0RPTQBVUwBVTklURUQgU1RBVEVTAFBTAFVOSVRFRCBTVEFURVMgKFBVQkxJQyBT
+QUZFVFkpAFVZAFVSVUdVQVkAVVoAVVpCRUtJU1RBTgBWRQBWRU5FWlVFTEEAVk4AVklF
+VCBOQU0AWUUAWUVNRU4AWlcAWklNQkFCV0UAAAAAAAAAAAAAAAAAAAAAADAuOS4xNy4y
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wH/AQAAAAAAAAAA
+AAD/////////fwAAAAAAAAAAAwCYAZkBAAAAAAAAAAAAAP////////9/AAAAAAAAAAAH
+AJgBMAsAAAAAAAAAAAAA/////////38AAAAAAAAAAAgAmAEwDAAAAAAAAAAAAAD/////
+////fwAAAAAAAAAAIAAgARAKAAAAAAAAAAAAAP////////9/AAAAAAAAAAAhACABmQEA
+AAAAAAAAAAAA/////////38AAAAAAAAAACIAIAEwDAAAAAAAAAAAAAD/////////fwAA
+AAAAAAAAOgBgARAKAAAAAAAAAAAAAP////////9/AAAAAAAAAAA7AGABmQEAAAAAAAAA
+AAAA/////////38AAAAAAAAAABIAZQEQCgAAAwAAAAAAAAD/////////fwAAAAAAAAAA
+NwAwAZkBAAADAAAAAAAAAP////////9/AAAAAAAAAAA1ADACmQEAAAMAAAAAAAAA////
+/////38AAAAAAAAAADYAMAOZAQAAAwAAAAAAAAD/////////fwAAAAAAAAAAMAAwBJkB
+AAADAAAAAAAAAP////////9/AAAAAAAAAAA5ADAFmQEAAAMAAAAAAAAA/////////38A
+AAAAAAAAADQAMAaZAQAAAwAAAAAAAAD/////////fwAAAAAAAAAAMgAwA5kBAAADAAAA
+AAAAAP////////9/AAAAAAAAAAAxADADmQEAAAAAAAAAAAAA/////////38AAAAAAAAA
+ABEAEAGZAQAAAAAAAAAAAAD/////////fwAAAAAAAAAAEAAQARAKAAAAAAAAAAAAAP//
+//////9/AAAAAAAAAABSAFABmQEAAAAAAAAAAAAA/////////38AAAAAAAAAAEUAUAKZ
+AQAAAAAAAAAAAAD/////////fwAAAAAAAAAARwBQA5kBAAAAAAAAAAAAAP////////9/
+AAAAAAAAAABCAFAEmQEAAAAAAAAAAAAA/////////38AAAAAAAAAAFgAUAWZAQAAAAAA
+AAAAAAD/////////fwAAAAAAAAAAWwBQBpkBAAAAAAAAAAAAAP////////9/AAAAAAAA
+AABdAFAImQEAAAAAAAAAAAAA/////////38AAAAAAAAAAF4AUAmZAQAAAAAAAAAAAAD/
+////////fwAAAAAAAAAAUABQAxAKAAAAAAAAAAAAAP////////9/AAAAAAAAAABVAFAB
+MAwAAAAAAAAAAAAA/////////38AAAAAAAAAAFYAUAIwDAAAAAAAAAAAAAD/////////
+fwAAAAAAAAAASQBQAlANAAAAAAAAAAAAAP////////9/AAAAAAAAAABAAEABQAoAAEYA
+AAAEAAAAKAAAAAAAAACIAQAAAAAAAEEAQAFACgAARwAAAAQAAABoAAAAAAAAAIkBAAAA
+AAAASABAARAKAABGAAAABAAAAAgAAAAAAAAAigEAAAAAAABKAEABQAoAAEYAAAAEAAAA
+CBgAAAAAAACMAQAAAAAAAEsAQAFACgAARgAAAAQAAAAIYAAAAAAAAI0BAAAAAAAATABA
+AVAKAABGAAAABAAAAAgAAAAAAAAAjwEAAAAAAABDAEACQAoAAEcAAAAEAAAAcAAAAAAA
+AACLAQAAAAAAAPAAQANACgAARgAAAAQAAAAgAAAAAAAAAAAAAAAAAAAAgABAA0AKAABH
+AAAABAAAAGAAAAAAAAAApw8AAAAAAADxAEADQAoAAEYAAAAEAAAAABgAAAAAAAAAAAAA
+AAAAAIEAQANACgAARgAAAAQAAAAAYAAAAAAAAKgPAAAAAAAAggBAA1AKAABGAAAABAAA
+AAAAAAAAAAAAqQ8AAAAAAADyAEADEAoAAEYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAIMA
+QARACgAARwAAAAQAAABggAAAAAAAAKoPAAAAAAAA9ABABEAKAABGAAAABAAAAACYAAAA
+AAAAAAAAAAAAAACEAEAEQAoAAEYAAAAEAAAAAOAAAAAAAACrDwAAAAAAAIUAQARQCgAA
+RgAAAAQAAAAAgAAAAAAAAKwPAAAAAAAA9QBABBAKAABGAAAABAAAAACAAAAAAAAAAAAA
+AAAAAACGAEAFQAoAAEcAAAAEAAAAYIAAAAAAAACtDwAAAAAAAIcAQAVACgAARgAAAAQA
+AAAA4AAAAAAAAK4PAAAAAAAAiABABVAKAABGAAAABAAAAACAAAAAAAAArw8AAAAAAACJ
+AEAGQAoAAEcAAAAEAAAAaAAAAAAAAACwDwAAAAAAAIoAQAZACgAARgAAAAQAAAAIYAAA
+AAAAALEPAAAAAAAAiwBABlAKAABGAAAABAAAAAgAAAAAAAAAsg8AAAAAAACMAEAHQAoA
+AEcAAAAEAAAAaIAAAAAAAACzDwAAAAAAAI0AQAdACgAARgAAAAQAAAAI4AAAAAAAALQP
+AAAAAAAAjgBAB1AKAABGAAAABAAAAAiAAAAAAAAAtQ8AAAAAAACPAEAIQAoAAEcAAAAE
+AAAAaIAAAAAAAAC2DwAAAAAAAJAAQAhACgAARgAAAAQAAAAI4AAAAAAAALcPAAAAAAAA
+kQBACFAKAABGAAAABAAAAAiAAAAAAAAAuA8AAAAAAAD2AEAJQAoAAEcAAAAEAAAAYIAA
+AAAAAAAAAAAAAAAAAPcAQAtACgAARwAAAAQAAABggAAAAAAAAAAAAAAAAAAAYABgAGAA
+AAAAAAAAAAAAAP////////9/AAAAAAAAAABhAGEAYQAAAAMAAAAAAAAA/////////38A
+AAAAAAAAAGIAYgBiAAAAAgAAAAAAAAD/////////fwAAAAAAAAAAYwBjAGMAAAAAAAAA
+AAAAAP////////9/AAAAAAAAAABkAGQAZAAAAAMAAAAAAAAA/////////38AAAAAAAAA
+AGUAZQBlAAAAAwAAAAAAAAD/////////fwAAAAAAAAAAZgBmAGYAAAAAAAAAAAAAAP//
+//////9/AAAAAAAAAABnAGcAZwAAAAAAAAAAAAAA/////////38AAAAAAAAAAGgAaABo
+AAAAAAAAAAAAAAD/////////fwAAAAAAAAAAaQBpAGkAAAADAAAAAAAAAP////////9/
+AAAAAAAAAABqAGoAagAAAAMAAAAAAAAA/////////38AAAAAAAAAAGUAAAABAAAA////
+/4AAAAD/////AAAAAEpQAAC0DwAAAAAAAGoAAAABAAAA/////4AAAAD/////AAAAAEpQ
+AAC0DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAEAAAABAAAAAQAAAFgbAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
+AQAAAAEAAABYGwAACAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsA
+AAwAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAAgAEcAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYGwAAMwAwAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAQAAAAAAAAABAAAAWBsAACQAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAA
+AQAAAFgbAAAoADcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAHwAw
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAWBsAADAAWwAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAABwAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+AAAAAAAAAAEAAABYGwAAOAA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAA
+WBsAAFQAVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAFgbAABEAFUAAAAA
+AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAABYGwAATAA7AAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAQAAAAAAAAAAAAAAWBsAAGAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB
+AAAAAQAAAFgbAABkADQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAA
+fAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAWBsAAJgAWwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAFgbAACcAFIAAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAAAAAQAAAAEAAABYGwAAqgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
+AAAAWBsAALwAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAC/ADYA
+AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAxAA3AAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAQAAAAEAAAABAAAAWBsAAMsANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
+AAAAAAAAAQAAAFgbAADQADcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABY
+GwAA1gAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAWBsAANoAAwAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgbAAAyAzYAAAAAAAAAAAAAAAAAAAAA
+AAAAAAABAAAAAAAAAAEAAABYGwAA3gADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA
+AAABAAAAWBsAAOkANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAD2
+ADcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAA+gA3AAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAP8ANgAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAEAAAAAAAAAAQAAAFgbAAAMATAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEA
+AABYGwAAFAE3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAACwBNwAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAABAARAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAABAAAAAQAAAAEAAABYGwAAVAEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+AAAAAAABAAAAWBsAAFgBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAFgb
+AABcATcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAYAE3AAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAGQBWwAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAEAAAAAAAAAAQAAAFgbAABoAVIAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
+AAEAAABYGwAAbAFSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAWBsAAHQB
+NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAB4AQMAAAAAAAAAAAAA
+AAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAfAE3AAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AQAAAAAAAAABAAAAWBsAAIgBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA
+AFgbAACJAUEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABYGwAAigFIAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAWBsAAIsBQwAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAEAAAAAAAAAAAAAAFgbAACMAUoAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
+AAAAAAAAAABYGwAAjQFLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAWBsA
+AI8BTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAACnD4AAAAAAAAAA
+AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABYGwAAqA+BAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAQAAAAAAAAAAAAAAWBsAAKkPggAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA
+AAAAAFgbAACqD4MAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABYGwAAqw+E
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAWBsAAKwPhQAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAACtD4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+AAAAAAAAAAAAAABYGwAArg+HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA
+WBsAAK8PiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAACwD4kAAAAA
+AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABYGwAAsQ+KAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAQAAAAAAAAAAAAAAWBsAALIPiwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA
+AAAAAAAAAFgbAACzD4wAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABYGwAA
+tA+NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAWBsAALUPjgAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAAC2D48AAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAAAAAAAAAAAAAABYGwAAtw+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA
+AAAAWBsAALgPkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAACQAUIA
+AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAjgEDAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAJgBRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
+AAABAAAAAQAAAFgbAACaAUUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABY
+GwAAmwFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAWBsAAJwBXgAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAACeAQMAAAAAAAAAAAAAAAAAAAAA
+AAAAAAABAAAAAAAAAAEAAABYGwAArAE3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA
+AAABAAAAWBsAAKYBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAC2
+ATcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAuAE3AAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAALoBNwAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAEAAAAAAAAAAQAAAFgbAAC+ASEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEA
+AABYGwAAJwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAMoBXQAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAADWATcAAAAAAAAAAAAAAAAA
+AAAAAAAAAAABAAAAAAAAAAEAAABYGwAA5AEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+AAEAAAABAAAAWBsAAOwBMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAFgb
+AAD4AQMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAEAI3AAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAACoCIgAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAEAAAAAAAAAAQAAAFgbAABCAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
+AAEAAABYGwAAAAJbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAEoC
+AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAABPAhAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAABAAAAAQAAAAEAAABYGwAAXAJSAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AQAAAAAAAAABAAAAWBsAAGACUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAA
+AFgbAABoAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAbAI3AAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAHYCEAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAEAAAABAAAAAQAAAFgbAAB6AgMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
+AAAAAAEAAABYGwAAggIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsA
+AIMCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAACqAgMAAAAAAAAA
+AAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAvgJbAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAQAAAAEAAAABAAAAWBsAAL8CNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA
+AQAAAFgbAADBAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAxgI7
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAANQCNwAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAADwAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+AAAAAAAAAAEAAABYGwAA9AI3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAA
+WBsAAPgCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAACeAFAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAABYGwAA/AIDAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAQAAAAAAAAABAAAAWBsAAAwDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA
+AAAAAQAAAFgbAAAUAzYAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAA
+GAM2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAACQDAwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAAQAwMAAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAAAAAAAAAAEAAABYGwAAOgM3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
+AAAAWBsAAEgDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAMEWAABKAxIA
+AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAABYGwAAWgNFAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAFwDOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
+AAABAAAAAQAAAFgbAABeA1YAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABY
+GwAAwAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAHcDAwAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAADMAgMAAAAAAAAAAAAAAAAAAAAA
+AAAAAAABAAAAAAAAAAEAAABYGwAAAAAAAAAAAAAzEz0TFwAKBQAAAAAAAAAAEAAAAAAA
+AAAQAAAAAAAAAEcTURMXAAoFAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAOBN0ExcAFBQA
+AAAAAAAAABAAAAAAAAAABwAAAAAAAABOE3sTGwYFBQAAAAAAAAAAAQAAAAAAAAAAAAAA
+AAAAAFETeRMeBgoFAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAVhN0EyEGFAUAAAAAAAAA
+AAEAAAAAAAAAAAAAAAAAAACrE7ATFwAKBQAAAAAAAAAAEAAAAAAAAAAMAAAAAAAAALAT
+2BMXABQUAAAAAAAAAAAQAAAAAAAAAAIAAAAAAAAAvxO/ExcACgUAAAAAAAAAABAAAAAA
+AAAADAAAAAAAAAAAFHgUBQYUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIUbhQXABQU
+AAAAAAAAAAAYAAAAAAAAAAEAAAAAAAAAMhRuFBQAFBQAAAAAAAAAABgAAAAAAAAAAQAA
+AAAAAAA8FHgUDwAUFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADwUeBQRBhQUAAAAAAAA
+AAABAAAAAAAAAAEAAAAAAAAAPBR4FBIAFBQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA8
+FHgUFAAUFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADwUeBQXABQUAAAAAAAAAAAFAAAA
+AAAAAAAAAAAAAAAAPBR4FBcGFBQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAA8FMgUFAYU
+FAIAAAAAAAAABAAAAAAAAAAAAAAAAAAAAHgUoBQXABQUAQAAAAAAAAAFAAAAAAAAAAAA
+AAAAAAAAjBSgFBcAFBQDAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACMFMgUEgAUFAMAAAAA
+AAAABQAAAAAAAAAAAAAAAAAAAIwUyBQUABQUBwAAAAAAAAAFgAAAAAAAAAAAAAAAAAAA
+jBTIFBQGFBQDAAAAAAAAAAEAAAAAAAAAAgAAAAAAAACMFMgUFwYUFAMAAAAAAAAAAQAA
+AAAAAAACAAAAAAAAAIwUyBQXBhQUAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAjBTIFB4A
+FBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMFEQWBQYUFAMAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAKAUyBQRBhQUAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAfBX0FR4GFBQCAAAA
+AAAAAAQAAAAAAAAAAAAAAAAAAAB8FUQWFAYUFAMAAAAAAAAAAQAAAAAAAAAEAAAAAAAA
+AHwVRBYbABQUAwAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfBVEFh4AFBQDAAAAAAAAAAUA
+AAAAAAAAAAAAAAAAAAB8FUQWFwAUFAcAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAHEWrRYX
+ABQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcRatFh4GFBQAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAABxFq0WHgYUFAIAAAAAAAAABAAAAAAAAAAAAAAAAAAAAHEWwRYFBhQUAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAcRbBFhEAFBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AABxFsEWFAAUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEWwRYeABQUAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAcRbBFh4GFBQAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABxFsEW
+HgYUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgTdBMeABQUAAAAAAAAAAAABAAAAAAA
+AAAAAAAAAAAAsBPYEx4AFBQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAyFG4UHgAUFAMA
+AAAAAAAAAAQAAAAAAAAAAAAAAAAAADwUeBQeABQUAwAAAAAAAAAABAAAAAAAAAAAAAAA
+AAAAjBTIFB4AFBQDAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABxFsEWHgAUFAAAAAAAAAAA
+AAQAAAAAAAAAAAAAAAAAAHwVRBYeABQUAwAAAAAAAAAABAAAAAAAAAAAAAAAAAAAChRa
+FAUGKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCFNIUBQYoKAEAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAPoUchUFBigoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmhUSFgUGKCgB
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeFEYUBQYoKAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAG4UvhQFBigoAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5hReFQUGKCgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAACGFSYWBQYoKAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAU
+eBQRBigoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUBR4FBcGKCgAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAABaFFoUEQYoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFoUWhQXACgo
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoBSgFBcGKCgBAAAAAAAAAAIAAAAAAAAAAAAA
+AAAAAACgFKAUFAYoKAEAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIIUghQRACgoAQAAAAAA
+AAACAAAAAAAAAAAAAAAAAAAAqhSqFBQAKCgBAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACC
+FKoUFAAoKAEAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIIUqhQXBigoAQAAAAAAAAACAAAA
+AAAAAAAAAAAAAAAApBUcFhQGKCgBAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAFqgWFAAo
+KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAWqBYeBigoAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAhRatFh4GKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaFIIUDwAoKAMAAAAA
+AAAAAAQAAAAAAAAAAAAAAAAAAKoUqhQSACgoAwAAAAAAAAAABAAAAAAAAAAAAAAAAAAA
+pBUcFhQAKCgDAAAAAAAAAAAEAAAAAAAAAAAAAAAAAACAFqgWFAAoKAAAAAAAAAAAAAQA
+AAAAAAAAAAAAAAAAAAgJRAkFBhQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAlECRQA
+FAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCagJBQYUBQAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAGwJqAkUABQFAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAbAmoCR4AFAUAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAABsCZ4JGwYUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AGwJngkUABQFAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAgAmKCRQAFAUAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAACZCagJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKMJqAkU
+ABQFAAAAAAAAAAAgIAAAAAAAAAAAAAAAAAAAtAm0CQUGFAUAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAC0CbQJFAAUBQAAAAAAAAAAICgAAAAAAAAAAAAAAAAAANAJrAoFBhQFAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAACAlECRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AABsCWwJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEJgAkUABQFAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAhQmKCRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPCZkJ
+FAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4JngkUABQFAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAowmjCRQAFAUAAAAAAAAAAAAEAAAAAACAAAAAAAAAAACjCaMJFAAUBQAA
+AAAAAAAAAAAAAAAAAIAAAAAAAAAAAKgJqAkUABQFAAAAAAAAAAAABAAAAAAAgAAAAAAA
+AAAAqAmoCRQAFAUAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAC0CbQJFAAUBQAAAAAAAAAA
+AAQAAAAAAIAAAAAAAAAAALQJtAkUABQFAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAACAlE
+CQUGFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICUQJFAAUBQAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAGwJqAkFBhQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAmoCRQAFAUA
+AAAAAAAAAEAAAAAAAAAAAAAAAAAAAABsCagJHgAUBQAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAGwJngkbBhQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAmeCRQAFAUAAAAAAAAA
+AEAAAAAAAAAAAAAAAAAAAACACYoJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJkJ
+qAkUABQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AmsCgUGFAUAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAACjCagJFAAUBQAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAgJRAkUABQF
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAlsCRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAABxCYAJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUJigkUABQFAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAjwmZCRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACe
+CZ4JFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKMJowkUABQFAAAAAAAAAAAABAAA
+AAAAgAAAAAAAAAAAowmjCRQAFAUAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACoCagJFAAU
+BQAAAAAAAAAAAAQAAAAAAIAAAAAAAAAAAKgJqAkUABQFAAAAAAAAAAAAAAAAAAAAgAAA
+AAAAAAAACAlECQUGKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFCYUJBQYoKAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAIUJhQkUBigoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+hQmFCRIGKCgAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAADQCawKBQYoKAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAP8BEAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACCAA
+AAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAESQAAAAAAAAAAAAAAAAABRQAAAAAAAAA
+AAAAAAAAAAUCAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAUAEQAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAABQAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFADEAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAUAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAA
+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBRAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAFAGMAAAAAAAAgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAIBA
+AIAAAAAAAAAAAAAAAAAICQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAgwAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAEAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAABQCTAAAAAAAAIAAAAAAAAABAAAAAAAAAADAAAAAAAAAAAA
+BCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABMAAAAAAA
+AgAAAAAAAAAEAAAAAAAAAAMAAAAAAAAAAIBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAMAIwAAAAAAACAAAAAAAAAAQAAAAAAAAAAwAAAAAAAAAA
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAzAAAAAA
+AAIAAAAAAAAABAAAAAAAAAADAAAAAAAAAACAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAADAEMAAAAAAAAgAAAAAAAAAEAAAAAAAAAAMAAAAAAAAA
+AEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUwAAAA
+AAACAAAAAAAAAAQAAAAAAAAAAwAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAwBjAAAAAAAAIAAAAAAAAABAAAAAAAAAADAAAAAAAA
+AAAAEQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABEAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAQACAAAAAAAAAAAAAAAEEgAAAAAA
+AAAAAAAAAAAAESAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAICAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASIAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgARAA
+AAAAAAEAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAggEAAAgAAAAAAAAAAAAAAxBAAAAAA
+AAAAAAAAAAAAACEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUBEAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAA
+AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAFA
+AAAAAAAAAAAAAAAAAAgAAAAAAAAAAgAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAkAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAAAA
+AAAAAMcFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAD
+QAAAAAAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQARAAAAAAAAEAAAAAAAAAACAAAAAAAAAAgAA
+AAAAAAAAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA
+BUAAAAAAAAQAAAAAAAAAAIAAAAAAAAACAAAAAAAAAACAQAACAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAGQAAAAAAAAAAAAAAAAAAIAAAAAAAAAAIA
+AAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+QAdAAAAAAAAEAAAAAAAAAAiAAAAAAAAAAgAAAAAAAAAAhEAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACEAAAAAAAAQAAAAAAAAACIAAAAAAAAAC
+AAAAAAAAAACEQAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AEAJQAAAAAAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAx4EAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAtAAAAAAAAEAAAAAAAAAACAAAAAAAAA
+AgAAAAAAAADHgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AABQDf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAK/wAAAAAAAAAAAAAAAACAAAAAAAAA
+AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAA
+AAAAMAswAAAAAAAAAAAAAAAAAAABAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAA
+AAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAwDDAAAAAAAAAAAAAAAAAAAAIAAAAA
+AAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAA
+AAAAABAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAA
+AAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQApAAAAAAAAAAAAAAAAAAGB4AAAA
+AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAABACgAAAAAAAAAAAAAAAAAAQAQAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAA
+AAAAAABQCkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAI
+AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAJkBMAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAA
+AAAAAAAAYAD/AAAAAAADAAAAAAAAAAAEAAAAAAAACAAAAAAAAAAAAAAAAOADAAAAAAAA
+AAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwK8AAAAAAAAAAAAAAAAA
+APALAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAABmAP8AAAAAAAMAAAAAAAAAAAQA
+AAAAAAAIAAAAAAAAAAAAAAAA4AMAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAA8AEAAAAAAAAAAAAAAAAACAAAAAAAAAAA
+AAAAAAAAAGcA/wAAAAAAAwAAAAAAAAAABAAAAAAAAAgAAAAAAAAAAAAAAADgAwAAAAAA
+AAAAAAAAwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvAAAAAAAAAAAAAAAA
+AADwCwAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAaAD/AAAAAAADAAAAAAAAAAAE
+AAAAAAAACAAAAAAAAAAAAAAAAOADAAAAAAAAAAAAAADAAgAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAwFcAAAAAAAAAAAAAAAAAAPAVAAAAAAAAAAAAAAAAAAgAAAAAAAAA
+AAAAAAAAAABhAP8AAAAAAAMAAAAAAAAAAAQAAAAAAAAQAAAAAAAAAAAAAAAA4AMAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADArwAAAAAAAAAAAAAA
+AAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGIA/wAAAAAAAwAAAAAAAAAA
+BAAAAAAAABAAAAAAAAAAAAAAAADgAwAAAAAAAAAAAAAAwAIAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAMCvAAAAAAAAAAAAAAAAAADwCwAAAAAAAAAAAAAAAAAIAAAAAAAA
+AAAAAAAAAAAAYwD/AAAAAAADAAAAAAAAAAAEAAAAAAAACAAAAAAAAAAAAAAAAOABAAAA
+AAAAAAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwC8AAAAAAAAAAAAA
+AAAAAPALAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAABkAP8AAAAAAAMAAAAAAAAA
+AAQAAAAAAAAQAAAAAAAAAAAAAAAAwAEAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAA8AEAAAAAAAAAAAAAAAAACAAAAAAA
+AAAAAAAAAAAAAGUA/wAAAAAAAwAAAAAAAAAABAAAAAAAABAAAAAAAAAAAAAAAADAAQAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvAAAAAAAAAAAA
+AAAAAADwCwAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAaQD/AAAAAAADAAAAAAAA
+AAAEAAAAAAAAEAAAAAAAAAAAAAAAAMADAAAAAAAAAAAAAADAAgAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAwAcAAAAAAAAAAAAAAAAAAPABAAAAAAAAAAAAAAAAAAgAAAAA
+AAAAAAAAAAAAAABqAP8AAAAAAAMAAAAAAAAAAAQAAAAAAAAQAAAAAAAAAAAAAAAAwAMA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADALwAAAAAAAAAA
+AAAAAAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAJgB/wAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAQADwAPMAiIHwAPMAQQCAAIMAiYGAAIMASADyAPUAioHyAPUAQwD2
+APcAi4H2APcASgDxAPQAjIHxAPQASwCBAIQAjYGBAIQATACCAIUAj4GCAIUAAAAAAAAA
+AAAAAAAAiAHwAPMAiQGAAIMAigHyAPUAiwH2APcAjAHxAPQAjQGBAIQAjwGCAIUAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAECcBcLAIwAAAAAAAECKCMPABIAAAAAAAEC4C4KAJgCAAAAAAECUEYOACQCAAAA
+AAECwF0JALAEAAAAAAECoIwNAEgEAAAAAAECgLsIAGAEAAAAAAEC8NIMAGwEAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAOgD
-CwCCAAAAAAABANAHCgSEAQAAAAABAHwVCQSLAQAAAAABAPgqCASWAQAAAAAAAAAAAAAA
+AAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA3AXCwCM
+AAAAAAABAygjDwASAAAAAAABA+AuCgCYAgAAAAABA1BGDgAkAgAAAAABA8BdCQCwBAAA
+AAABA6CMDQBIBAAAAAABA4C7CABgBAAAAAABA/DSDABsBAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8A
+EgAAAAAAAQLgLgoAmAIAAAAAAQJQRg4AJAIAAAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQA
+AAAAAQKAuwgAYAQAAAAAAQLw0gwAbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-BKIAAAAAAAAAAAAACKIAAEZGPlBGRj5QDKIAAGxBgGRsQYBkEKIAAAOgmQEDoJkBFKIA
-ABDWTAQQ1kwEGKIAAEAAgBNAAIATHKIAAGAA4BtgAOAbIKIAAAqAUwwKgFMMJKIAADvf
-FAA73xQAKKIAALUBAAC1AQAALKIAACAAAAAgAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMPABIAAAAAAAED4C4K
+AJgCAAAAAAEDUEYOACQCAAAAAAEDwF0JALAEAAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAE
+AAAAAAED8NIMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAABAOgDCwCCAAAAAAABANAHCgSEAQAAAAABAHwVCQSLAQAAAAABAPgq
+CASWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAABKIAAAAAAAAAAAAACKIAAEZGPlBGRj5QDKIAAGxBgGRsQYBk
+EKIAAAOgmQEDoJkBFKIAABDWTAQQ1kwEGKIAAEAAgBNAAIATHKIAAGAA4BtgAOAbIKIA
+AAqAUwwKgFMMJKIAADvfFAA73xQAKKIAALUBAAC1AQAALKIAACAAAAAgAAAAnJgAAAAA
+AAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAA
AAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAA
-nJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgA
-AAAAAAAAAAAAnJgAAAAAOAAAADgAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAA
-AAAAAAAAnJgAAPkABAD5AAQA1JgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAA
-AAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAA
-AAAAAJyYAAAAAAAQAAAAEJyYAAAAAAAEAAAABJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAA
-AJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAACpyYAACAADgAgAA4ApyYAAAGAAIABgAAAJyY
-AACSAAAAkgAAAJyYAACgAAAAoAAAAJyYAAAHAAQABwAEANSYAAAaAAAAGgAAAJyYAABI
-AAAASAAAAJyYAAAQAAAAEAAAAJyYAAAIAAAACAAAAJyYAAAPAAAADwAAAJyYAADyAAAA
-YgAAAJyYAABPkAAATJAAAJyYAABaEgAAmhIAAMyYAAAOAAAADwAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJwFwsA
-jAAAAAAAAQIoIw8AEgAAAAAAAQLgLgoAmAIAAAAAAQJQRg4AJAIAAAAAAQLAXQkAsAQA
-AAAAAQKgjA0ASAQAAAAAAQKAuwgAYAQAAAAAAQLw0gwAbAQAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMP
-ABIAAAAAAAED4C4KAJgCAAAAAAEDUEYOACQCAAAAAAEDwF0JALAEAAAAAAEDoIwNAEgE
-AAAAAAEDgLsIAGAEAAAAAAED8NIMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAOgDGwCCAAAAAAABANAHGgSEAQAAAAABAHwV
-GQSLAQAAAAABAPgqGASWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAQDoAxsAAgAAAAAAAQDQBxoEBAEAAAAAAQB8FRkECwIAAAAAAQD4
-KhgEFgMAAAAAAAJwFwsADAQAAAAAAAIoIw8AEgQAAAAAAQLgLgoAGAYAAAAAAQJQRg4A
-JAYAAAAAAQLAXQkAMAgAAAAAAQKgjA0ASAgAAAAAAQKAuwgAYAgAAAAAAQLw0gwAbAgA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAEE9AEHAIEAAAAAAAEE6AMCAIsBAAAAAAEE0AcGAJYCAAAAAAEEuAsBAJYDAAAAAAEC
-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
-AAAAABQAAABUAwAAAAAAAAAAAAAGAAAAAAAAABQAAABsAwAAAAAAAAAAAAABAAAAAAAA
-ABQAAACEAwAAAAAAAAAAAAABAAAAAAAAABwAAACcAwAAAAAAAAAAAAAkAAAAAAAAAEQO
-EAAAAAAAHAAAALwDAAAAAAAAAAAAAC8AAAAAAAAARA4QAAAAAAAcAAAA3AMAAAAAAAAA
-AAAADgAAAAAAAABEDhAAAAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAABQAAAAcAAAA
-AAAAAAAAAAAzAAAAAAAAABwAAAA0AAAAAAAAAAAAAACVAAAAAAAAAEQOIEqGAoMDFAAA
-AFQAAAAAAAAAAAAAAC0AAAAAAAAAJAAAAGwAAAAAAAAAAAAAAHsAAAAAAAAARA4gTowC
-hgODBAAAAAAAABQAAACUAAAAAAAAAAAAAAAHAAAAAAAAABQAAACsAAAAAAAAAAAAAAAG
-AAAAAAAAABQAAADEAAAAAAAAAAAAAAAbAAAAAAAAABQAAADcAAAAAAAAAAAAAAAgAAAA
-AAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAABwAAAAcAAAAAAAAAAAAAAAxAAAAAAAA
-AEEOEIMCAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAFAAAABwAAAAAAAAAAAAAAAgA
-AAAAAAAAFAAAADQAAAAAAAAAAAAAAAgAAAAAAAAAFAAAAEwAAAAAAAAAAAAAAAwAAAAA
-AAAAJAAAAGQAAAAAAAAAAAAAAEsAAAAAAAAAQQ4QQQ4YRA4ggwOGAgAAABQAAACMAAAA
-AAAAAAAAAAAUAAAAAAAAABQAAACkAAAAAAAAAAAAAAAUAAAAAAAAABQAAAC8AAAAAAAA
-AAAAAAAVAAAAAAAAABQAAADUAAAAAAAAAAAAAABSAAAAAAAAABQAAADsAAAAAAAAAAAA
-AABSAAAAAAAAABQAAAAEAQAAAAAAAAAAAAALAAAAAAAAABQAAAAcAQAAAAAAAAAAAAAc
-AAAAAAAAABQAAAA0AQAAAAAAAAAAAAA7AAAAAAAAABQAAABMAQAAAAAAAAAAAAAfAQAA
-AAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAADwAAAAcAAAAAAAAAAAAAAAkBgAAAAAA
-AEIOEEIOGEIOIEIOKEEOMEEOOEQOQIMHhgaMBY0EjgOPAgAAAAAAAAAUAAAAXAAAAAAA
-AAAAAAAAXAAAAAAAAAAcAAAAdAAAAAAAAAAAAAAAGAAAAAAAAABEDhAAAAAAABwAAACU
-AAAAAAAAAAAAAABrAAAAAAAAAEEOEIMCAAAAHAAAALQAAAAAAAAAAAAAAOQAAAAAAAAA
-RA4gSoYCgwM8AAAA1AAAAAAAAAAAAAAA9gEAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhE
-DkCDB4YGjAWNBI4DjwIAAAAAAAAAJAAAABQBAAAAAAAAAAAAAHQAAAAAAAAARA4gTowC
-hgODBAAAAAAAABQAAAA8AQAAAAAAAAAAAACtAAAAAAAAABwAAABUAQAAAAAAAAAAAADl
-AAAAAAAAAEEOEIMCAAAAFAAAAHQBAAAAAAAAAAAAABgAAAAAAAAAPAAAAIwBAAAAAAAA
-AAAAAOgCAAAAAAAAQg4QQg4YQg4gQg4oQQ4wQQ44RA5AgweGBowFjQSOA48CAAAAAAAA
-ACwAAADMAQAAAAAAAAAAAADKAgAAAAAAAEIOEEEOGEEOIEQOkAGDBIYDjAIAAAAAACQA
-AAD8AQAAAAAAAAAAAACPAAAAAAAAAEQOIE6MAoYDgwQAAAAAAAAUAAAAJAIAAAAAAAAA
-AAAAHAAAAAAAAAAkAAAAPAIAAAAAAAAAAAAAdwAAAAAAAABBDhBBDhhEDiCDA4YCAAAA
-FAAAAGQCAAAAAAAAAAAAAAYAAAAAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAHAAA
-ABwAAAAAAAAAAAAAAC0AAAAAAAAARA4QAAAAAAAcAAAAPAAAAAAAAAAAAAAAMwAAAAAA
-AABEDhAAAAAAACQAAABcAAAAAAAAAAAAAADdAAAAAAAAAEQOMFiOAo0DjASGBYMGAAAU
-AAAAhAAAAAAAAAAAAAAAXgAAAAAAAAAUAAAAnAAAAAAAAAAAAAAAYAIAAAAAAAAUAAAA
-tAAAAAAAAAAAAAAAKQAAAAAAAAAUAAAAzAAAAAAAAAAAAAAAQQAAAAAAAAAkAAAA5AAA
-AAAAAAAAAAAAkgAAAAAAAABEDiBOjAKGA4MEAAAAAAAAFAAAAAwBAAAAAAAAAAAAAGcA
-AAAAAAAAFAAAACQBAAAAAAAAAAAAADIAAAAAAAAAJAAAADwBAAAAAAAAAAAAAJgAAAAA
-AAAAQQ4QQQ4YRA4ggwOGAgAAABQAAABkAQAAAAAAAAAAAAAGAAAAAAAAABQAAAB8AQAA
-AAAAAAAAAACvAAAAAAAAABQAAACUAQAAAAAAAAAAAAAGAAAAAAAAABQAAACsAQAAAAAA
-AAAAAABKAAAAAAAAABQAAADEAQAAAAAAAAAAAACMAAAAAAAAABQAAADcAQAAAAAAAAAA
-AAABAAAAAAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAABwAAAAcAAAAAAAAAAAAAABb
-AAAAAAAAAEQOEAAAAAAAPAAAADwAAAAAAAAAAAAAAI4EAAAAAAAAQg4QQg4YQg4gQg4o
-QQ4wQQ44RA5QgweGBowFjQSOA48CAAAAAAAAABwAAAB8AAAAAAAAAAAAAAAOAAAAAAAA
-AEQOEAAAAAAAHAAAAJwAAAAAAAAAAAAAAPcAAAAAAAAAQQ4QRA4wgwIUAAAAvAAAAAAA
-AAAAAAAAOAAAAAAAAAAcAAAA1AAAAAAAAAAAAAAAqwAAAAAAAABEDiBKhgKDAxQAAAAA
-AAAAAQABeBAMBwiQAQAAAAAAABQAAAAcAAAAAAAAAAAAAACkAAAAAAAAACQAAAA0AAAA
-AAAAAAAAAABGAAAAAAAAAEEOEEEOGEQOIIMDhgIAAAAUAAAAXAAAAAAAAAAAAAAANwAA
-AAAAAAAUAAAAdAAAAAAAAAAAAAAA4wAAAAAAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAA
-AAAUAAAAHAAAAAAAAAAAAAAAEwAAAAAAAAAUAAAANAAAAAAAAAAAAAAAVwAAAAAAAAAU
+nJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAOAAAADgAnJgAAAAAAAAAAAAAnJgA
+AAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAPkABAD5AAQA1JgAAAAAAAAEAAAAAAAAAAAA
+AAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAA
+AAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAQAAAAEJyYAAAAAAAEAAAABJyYAAAAAAAA
+AAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAACpyYAACAADgAgAA4
+ApyYAAAGAAIABgAAAJyYAACSAAAAkgAAAJyYAACgAAAAoAAAAJyYAAAHAAQABwAEANSY
+AAAaAAAAGgAAAJyYAABIAAAASAAAAJyYAAAQAAAAEAAAAJyYAAAIAAAACAAAAJyYAAAP
+AAAADwAAAJyYAADyAAAAYgAAAJyYAABPkAAATJAAAJyYAABaEgAAmhIAAMyYAAAOAAAA
+DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8AEgAAAAAAAQLgLgoAmAIAAAAAAQJQRg4A
+JAIAAAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQAAAAAAQKAuwgAYAQAAAAAAQLw0gwAbAQA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC
+uAsLAIYAAAAAAAEClBEPAAkAAAAAAAECcBcKAIwCAAAAAAECKCMOABICAAAAAAEC4C4J
+AJgEAAAAAAECUEYNACQEAAAAAAECwF0IADAEAAAAAAECeGkMADYEAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtwFCwCDAAAAAAAB
+AsoIDwAEAAAAAAABArgLCgCGAgAAAAABApQRDgAJAgAAAAABAnAXCQCMBAAAAAABAigj
+DQASBAAAAAABAuAuCAAYBAAAAAABArw0DAAbBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNwFwsAjAAAAAAAAQPgLgoAmAIAAAAA
+AQNQRg4AJAIAAAAAAQPAXQkAsAMAAAAAAQOgjA0ASAMAAAAAAQOAuwgAYAMAAAAAAQPw
+0gwAbAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMPABIAAAAAAAED4C4KAJgCAAAA
+AAEDUEYOACQCAAAAAAEDwF0JALAEAAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAEAAAAAAED
+8NIMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAABAOgDGwCCAAAAAAABANAHGgSEAQAAAAABAHwVGQSLAQAAAAABAPgqGASWAQAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDoAxsA
+ggAAAAAAAQDQBxoEhAEAAAAAAQB8FRkEiwIAAAAAAQD4KhgElgMAAAAAAAJwFwsADAQA
+AAAAAAIoIw8AEgQAAAAAAQLgLgoAGAYAAAAAAQJQRg4AJAYAAAAAAQLAXQkAMAgAAAAA
+AQKgjA0ASAgAAAAAAQKAuwgAYAgAAAAAAQLw0gwAbAgAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0A
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE+gADAIEAZAJkAgEE9AEH
+AIEAyQHJAQEE6AMCAIIB5ADkAAEE0AcGAIQCoACgAAEEuAsBAIYDjACMAAECcBcLAIwE
+PAA8AAECKCMPABIEPAA8AAEC4C4KAJgGMAAwAAECUEYOACQGMAAwAAECwF0JADAILAAs
+AAECoIwNAEgILAAsAAECgLsIAGAILAAsAAEC8NIMAGwILAAsAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAAAAAUAAAAHAAAAAAAAAAA
+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
+AAAAAAAAAAAANwAAAAAAAAAUAAAAbAAAAAAAAAAAAAAA6wAAAAAAAAAUAAAAAAAAAAEA
+AXgQDAcIkAEAAAAAAAAUAAAAHAAAAAAAAAAAAAAAEwAAAAAAAAAUAAAANAAAAAAAAAAA
+AAAAWwAAAAAAAAAUAAAATAAAAAAAAAAAAAAABwAAAAAAAAAUAAAAZAAAAAAAAAAAAAAA
+hAAAAAAAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAAAAAUAAAAHAAAAAAAAAAAAAAABgAA
+AAAAAAAUAAAANAAAAAAAAAAAAAAALgAAAAAAAAAUAAAATAAAAAAAAAAAAAAAmQAAAAAA
+AAAUAAAAZAAAAAAAAAAAAAAAhwAAAAAAAAAkAAAAfAAAAAAAAAAAAAAAqgEAAAAAAABE
+DjBUjQKMA4YEgwUAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAHAAAABwAAAAAAAAA
+AAAAACAAAAAAAAAARA4QAAAAAAAcAAAAPAAAAAAAAAAAAAAAHwAAAAAAAABEDhAAAAAA
+ABwAAABcAAAAAAAAAAAAAAAdAAAAAAAAAEQOEAAAAAAAFAAAAHwAAAAAAAAAAAAAAAYA
+AAAAAAAAHAAAAJQAAAAAAAAAAAAAAGMAAAAAAAAARA4gSoYCgwMUAAAAtAAAAAAAAAAA
+AAAAMQAAAAAAAAAUAAAAzAAAAAAAAAAAAAAABgAAAAAAAAAkAAAA5AAAAAAAAAAAAAAA
+WgAAAAAAAABEDiBOjQKMA4MEAAAAAAAAFAAAAAwBAAAAAAAAAAAAAC0AAAAAAAAAFAAA
+ACQBAAAAAAAAAAAAACQAAAAAAAAAFAAAADwBAAAAAAAAAAAAACwAAAAAAAAAFAAAAFQB
+AAAAAAAAAAAAAB8AAAAAAAAAHAAAAGwBAAAAAAAAAAAAAGcAAAAAAAAARA4QAAAAAAAU
+AAAAjAEAAAAAAAAAAAAAMwAAAAAAAAAUAAAApAEAAAAAAAAAAAAAGAAAAAAAAAAUAAAA
+vAEAAAAAAAAAAAAALgAAAAAAAAAUAAAA1AEAAAAAAAAAAAAABgAAAAAAAAAUAAAA7AEA
+AAAAAAAAAAAACQAAAAAAAAAkAAAABAIAAAAAAAAAAAAArAAAAAAAAABBDhBBDhhEDiCD
+A4YCAAAAFAAAACwCAAAAAAAAAAAAABoAAAAAAAAAFAAAAEQCAAAAAAAAAAAAAAsAAAAA
+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
+AAAAAAAAAIYAAAAAAAAAQg4QQQ4YQQ4ggwSGA4wCABQAAAB8AgAAAAAAAAAAAAAGAAAA
+AAAAABQAAACUAgAAAAAAAAAAAAAGAAAAAAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAA
+ABwAAAAcAAAAAAAAAAAAAAAtAAAAAAAAAEQOEAAAAAAAHAAAADwAAAAAAAAAAAAAADMA
+AAAAAAAARA4QAAAAAAAkAAAAXAAAAAAAAAAAAAAA3QAAAAAAAABEDjBYjgKNA4wEhgWD
+BgAAFAAAAIQAAAAAAAAAAAAAAF4AAAAAAAAAFAAAAJwAAAAAAAAAAAAAAGACAAAAAAAA
+FAAAALQAAAAAAAAAAAAAACkAAAAAAAAAFAAAAMwAAAAAAAAAAAAAAEEAAAAAAAAAJAAA
+AOQAAAAAAAAAAAAAAJIAAAAAAAAARA4gTowChgODBAAAAAAAABQAAAAMAQAAAAAAAAAA
+AABnAAAAAAAAABQAAAAkAQAAAAAAAAAAAAAyAAAAAAAAACQAAAA8AQAAAAAAAAAAAACY
+AAAAAAAAAEEOEEEOGEQOIIMDhgIAAAAUAAAAZAEAAAAAAAAAAAAArwAAAAAAAAAUAAAA
+fAEAAAAAAAAAAAAABgAAAAAAAAAUAAAAlAEAAAAAAAAAAAAACAAAAAAAAAAUAAAArAEA
+AAAAAAAAAAAASgAAAAAAAAAUAAAAxAEAAAAAAAAAAAAAjAAAAAAAAAAUAAAA3AEAAAAA
+AAAAAAAAAQAAAAAAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAAAAAUAAAAHAAAAAAAAAAA
+AAAABgAAAAAAAAAUAAAANAAAAAAAAAAAAAAABgAAAAAAAAAUAAAATAAAAAAAAAAAAAAA
+BgAAAAAAAAAUAAAAZAAAAAAAAAAAAAAACgAAAAAAAAAUAAAAfAAAAAAAAAAAAAAABgAA
+AAAAAAAUAAAAlAAAAAAAAAAAAAAAAQAAAAAAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAA
+AAAcAAAAHAAAAAAAAAAAAAAAWwAAAAAAAABEDhAAAAAAADwAAAA8AAAAAAAAAAAAAAC5
+BAAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOUIMHhgaMBY0EjgOPAgAAAAAAAAAcAAAA
+fAAAAAAAAAAAAAAAGgAAAAAAAABBDhCDAgAAABwAAACcAAAAAAAAAAAAAAD3AAAAAAAA
+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
-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
+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
-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
-AAAAFAAAACwDAAAAAAAAAAAAAAYAAAAAAAAAFAAAAEQDAAAAAAAAAAAAAAEAAAAAAAAA
-FAAAAFwDAAAAAAAAAAAAAAEAAAAAAAAAFAAAAHQDAAAAAAAAAAAAABAAAAAAAAAAFAAA
-AIwDAAAAAAAAAAAAAA4AAAAAAAAAFAAAAKQDAAAAAAAAAAAAAA4AAAAAAAAAFAAAALwD
-AAAAAAAAAAAAAA8BAAAAAAAAHAAAANQDAAAAAAAAAAAAACkAAAAAAAAARA4QAAAAAAAc
-AAAA9AMAAAAAAAAAAAAALwAAAAAAAABEDhAAAAAAABwAAAAUBAAAAAAAAAAAAAAWAAAA
-AAAAAEQOEAAAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAFAAAABwAAAAAAAAAAAAA
-ADMAAAAAAAAAHAAAADQAAAAAAAAAAAAAAJUAAAAAAAAARA4gSoYCgwMUAAAAVAAAAAAA
-AAAAAAAAKAAAAAAAAAAUAAAAbAAAAAAAAAAAAAAALgAAAAAAAAAkAAAAhAAAAAAAAAAA
-AAAAjAAAAAAAAABEDiBOjAKGA4MEAAAAAAAAFAAAAKwAAAAAAAAAAAAAAAcAAAAAAAAA
-FAAAAMQAAAAAAAAAAAAAAAYAAAAAAAAAFAAAANwAAAAAAAAAAAAAAAYAAAAAAAAAFAAA
-APQAAAAAAAAAAAAAAAYAAAAAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAHAAAABwA
-AAAAAAAAAAAAAEgAAAAAAAAAQQ4QgwIAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAAAAAU
+ABwAAADEAgAAAAAAAAAAAAAeAAAAAAAAAEQOEAAAAAAAFAAAAOQCAAAAAAAAAAAAAA4A
+AAAAAAAAFAAAAPwCAAAAAAAAAAAAAEoAAAAAAAAAJAAAABQDAAAAAAAAAAAAAJoAAAAA
+AAAARA4wWI4CjQOMBIYFgwYAABwAAAA8AwAAAAAAAAAAAAAhAAAAAAAAAEQOEAAAAAAA
+FAAAAFwDAAAAAAAAAAAAAAYAAAAAAAAAFAAAAHQDAAAAAAAAAAAAAAEAAAAAAAAAFAAA
+AIwDAAAAAAAAAAAAAAYAAAAAAAAAFAAAAKQDAAAAAAAAAAAAAAEAAAAAAAAAFAAAALwD
+AAAAAAAAAAAAAAEAAAAAAAAAFAAAANQDAAAAAAAAAAAAABAAAAAAAAAAFAAAAOwDAAAA
+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
+AAAARA4QAAAAAAAUAAAA9AMAAAAAAAAAAAAAQgAAAAAAAAAUAAAADAQAAAAAAAAAAAAA
+dwAAAAAAAAAUAAAAJAQAAAAAAAAAAAAAJgAAAAAAAAAkAAAAPAQAAAAAAAAAAAAAqQAA
+AAAAAABEDiBOjAKGA4MEAAAAAAAAFAAAAGQEAAAAAAAAAAAAABgAAAAAAAAAFAAAAHwE
+AAAAAAAAAAAAABYBAAAAAAAAFAAAAJQEAAAAAAAAAAAAAEIAAAAAAAAAFAAAAKwEAAAA
+AAAAAAAAAGYAAAAAAAAAHAAAAMQEAAAAAAAAAAAAABQAAAAAAAAARA4QAAAAAAAUAAAA
+AAAAAAEAAXgQDAcIkAEAAAAAAAAkAAAAHAAAAAAAAAAAAAAAqQAAAAAAAABEDiBOjAKG
+A4MEAAAAAAAAHAAAAEQAAAAAAAAAAAAAAC0AAAAAAAAARA4QAAAAAAAcAAAAZAAAAAAA
+AAAAAAAAMwAAAAAAAABEDhAAAAAAACQAAACEAAAAAAAAAAAAAAD0AAAAAAAAAEQOMFiO
+Ao0DjASGBYMGAAAUAAAArAAAAAAAAAAAAAAAcAAAAAAAAAAcAAAAxAAAAAAAAAAAAAAA
+cQAAAAAAAABEDhAAAAAAABwAAADkAAAAAAAAAAAAAADFAwAAAAAAAEQOEAAAAAAAFAAA
+AAQBAAAAAAAAAAAAAA8AAAAAAAAAFAAAABwBAAAAAAAAAAAAABQAAAAAAAAAFAAAADQB
+AAAAAAAAAAAAABkAAAAAAAAAFAAAAEwBAAAAAAAAAAAAADEAAAAAAAAAJAAAAGQBAAAA
+AAAAAAAAAGQAAAAAAAAAQg4QQQ4YQQ4ggwSGA4wCABQAAACMAQAAAAAAAAAAAACQAAAA
+AAAAABQAAACkAQAAAAAAAAAAAAAGAAAAAAAAABQAAAC8AQAAAAAAAAAAAAAIAAAAAAAA
+ABQAAADUAQAAAAAAAAAAAABKAAAAAAAAABQAAADsAQAAAAAAAAAAAACxAAAAAAAAABQA
+AAAEAgAAAAAAAAAAAAABAAAAAAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAABQAAAAc
+AAAAAAAAAAAAAAAGAAAAAAAAABQAAAA0AAAAAAAAAAAAAAAGAAAAAAAAABQAAABMAAAA
+AAAAAAAAAAAGAAAAAAAAABQAAABkAAAAAAAAAAAAAAAvAAAAAAAAABQAAAB8AAAAAAAA
+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
-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
-AAAAAAByAQAAAAAAAEQOQFSNAowDhgSDBQAAAAAUAAAARAMAAAAAAAAAAAAAYAAAAAAA
-AAAcAAAAXAMAAAAAAAAAAAAApQAAAAAAAABBDhCDAgAAABQAAAB8AwAAAAAAAAAAAACd
-AAAAAAAAABwAAACUAwAAAAAAAAAAAABDAAAAAAAAAEQOEAAAAAAAFAAAALQDAAAAAAAA
-AAAAAEIAAAAAAAAAFAAAAMwDAAAAAAAAAAAAAHcAAAAAAAAAFAAAAOQDAAAAAAAAAAAA
-ACYAAAAAAAAAJAAAAPwDAAAAAAAAAAAAAKkAAAAAAAAARA4gTowChgODBAAAAAAAABQA
-AAAkBAAAAAAAAAAAAAAYAAAAAAAAABQAAAA8BAAAAAAAAAAAAAAWAQAAAAAAABQAAABU
-BAAAAAAAAAAAAABCAAAAAAAAABQAAABsBAAAAAAAAAAAAABRAAAAAAAAABQAAAAAAAAA
-AQABeBAMBwiQAQAAAAAAACQAAAAcAAAAAAAAAAAAAACpAAAAAAAAAEQOIE6MAoYDgwQA
-AAAAAAAcAAAARAAAAAAAAAAAAAAALQAAAAAAAABEDhAAAAAAABwAAABkAAAAAAAAAAAA
-AAAzAAAAAAAAAEQOEAAAAAAAJAAAAIQAAAAAAAAAAAAAAAEBAAAAAAAARA4wWI4CjQOM
-BIYFgwYAABQAAACsAAAAAAAAAAAAAABwAAAAAAAAABwAAADEAAAAAAAAAAAAAABxAAAA
-AAAAAEQOEAAAAAAAHAAAAOQAAAAAAAAAAAAAAO8DAAAAAAAARA4QAAAAAAAUAAAABAEA
-AAAAAAAAAAAADwAAAAAAAAAUAAAAHAEAAAAAAAAAAAAAFAAAAAAAAAAUAAAANAEAAAAA
-AAAAAAAAGQAAAAAAAAAUAAAATAEAAAAAAAAAAAAAMQAAAAAAAAAkAAAAZAEAAAAAAAAA
-AAAAZAAAAAAAAABCDhBBDhhBDiCDBIYDjAIAFAAAAIwBAAAAAAAAAAAAAAYAAAAAAAAA
-FAAAAKQBAAAAAAAAAAAAAJAAAAAAAAAAFAAAALwBAAAAAAAAAAAAAAYAAAAAAAAAFAAA
-ANQBAAAAAAAAAAAAAEoAAAAAAAAAFAAAAOwBAAAAAAAAAAAAALEAAAAAAAAAFAAAAAQC
-AAAAAAAAAAAAAAEAAAAAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAHAAAABwAAAAA
-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
-AAAAQQ4QgwIAAAAcAAAAjAMAAAAAAAAAAAAAzwAAAAAAAABBDhCDAgAAABwAAACsAwAA
-AAAAAAAAAACqAAAAAAAAAEQOEAAAAAAAHAAAAMwDAAAAAAAAAAAAAJQAAAAAAAAARA4Q
-AAAAAAAcAAAA7AMAAAAAAAAAAAAAFgAAAAAAAABEDhAAAAAAABQAAAAAAAAAAQABeBAM
-BwiQAQAAAAAAABwAAAAcAAAAAAAAAAAAAACVAAAAAAAAAEQOIEqGAoMDFAAAADwAAAAA
-AAAAAAAAACgAAAAAAAAAFAAAAFQAAAAAAAAAAAAAAC4AAAAAAAAAJAAAAGwAAAAAAAAA
-AAAAAHsAAAAAAAAARA4gTowChgODBAAAAAAAABQAAACUAAAAAAAAAAAAAAATAAAAAAAA
-ABQAAACsAAAAAAAAAAAAAAARAAAAAAAAABQAAADEAAAAAAAAAAAAAAAGAAAAAAAAABQA
-AADcAAAAAAAAAAAAAAAGAAAAAAAAABQAAAD0AAAAAAAAAAAAAAAGAAAAAAAAABQAAAAA
-AAAAAQABeBAMBwiQAQAAAAAAABwAAAAcAAAAAAAAAAAAAABzAAAAAAAAAEEOEIMCAAAA
-FAAAAAAAAAABAAF4EAwHCJABAAAAAAAAFAAAABwAAAAAAAAAAAAAAAgAAAAAAAAAFAAA
-ADQAAAAAAAAAAAAAAAgAAAAAAAAAFAAAAEwAAAAAAAAAAAAAAAwAAAAAAAAAHAAAAGQA
-AAAAAAAAAAAAADAAAAAAAAAARA4QAAAAAAAcAAAAhAAAAAAAAAAAAAAAJgAAAAAAAABB
-DhCDAgAAABwAAACkAAAAAAAAAAAAAAAhAAAAAAAAAEQOEAAAAAAAFAAAAMQAAAAAAAAA
-AAAAABUAAAAAAAAAFAAAANwAAAAAAAAAAAAAAFIAAAAAAAAAFAAAAPQAAAAAAAAAAAAA
-AFIAAAAAAAAAFAAAAAwBAAAAAAAAAAAAACoAAAAAAAAAFAAAACQBAAAAAAAAAAAAAFoA
-AAAAAAAAFAAAADwBAAAAAAAAAAAAADAAAAAAAAAAJAAAAFQBAAAAAAAAAAAAAP4AAAAA
-AAAAQQ4QQQ4YRA4ggwOGAgAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAADwAAAAcAAAA
-AAAAAAAAAABYCAAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOgAGDB4YGjAWNBI4DjwIA
-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
-ACQAAACkAAAAAAAAAAAAAAAQAQAAAAAAAEEOEEEOGEQOIIMDhgIAAAAcAAAAzAAAAAAA
-AAAAAAAAMAAAAAAAAABBDhCDAgAAABwAAADsAAAAAAAAAAAAAAANBAAAAAAAAEQOgAEA
-AAAAHAAAAAwBAAAAAAAAAAAAAKcAAAAAAAAAQQ4QgwIAAAAcAAAALAEAAAAAAAAAAAAA
-HgEAAAAAAABEDiBKhgKDAxwAAABMAQAAAAAAAAAAAACsAAAAAAAAAEQOIEqGAoMDJAAA
-AGwBAAAAAAAAAAAAAK0BAAAAAAAAQg4QQQ4YQQ4ggwSGA4wCACQAAACUAQAAAAAAAAAA
-AADRAAAAAAAAAEIOEEEOGEEOIIMEhgOMAgAcAAAAvAEAAAAAAAAAAAAATwAAAAAAAABB
-DhCDAgAAABwAAADcAQAAAAAAAAAAAACGAAAAAAAAAEQOEAAAAAAAFAAAAPwBAAAAAAAA
-AAAAAHgAAAAAAAAAJAAAABQCAAAAAAAAAAAAAEkCAAAAAAAARA4wVI0CjAOGBIMFAAAA
-ABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAADwAAAAcAAAAAAAAAAAAAADfAAAAAAAAAEIO
-EEIOGEIOIEIOKEEOMEEOOEQOQIMHhgaMBY0EjgOPAgAAAAAAAAAsAAAAXAAAAAAAAAAA
-AAAALAEAAAAAAABCDhBCDhhBDiBBDihEDjCDBYYEjAONAgAUAAAAjAAAAAAAAAAAAAAA
-OwAAAAAAAAA8AAAApAAAAAAAAAAAAAAAegUAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhE
-DrABgweGBowFjQSOA48CAAAAAAAAHAAAAOQAAAAAAAAAAAAAAIcAAAAAAAAAQQ4QgwIA
-AAA8AAAABAEAAAAAAAAAAAAAsgMAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhHDoADgweG
-BowFjQSOA48CAAAAAAAAJAAAAEQBAAAAAAAAAAAAAGABAAAAAAAARA5AVI0CjAOGBIMF
-AAAAABQAAABsAQAAAAAAAAAAAABoAAAAAAAAABwAAACEAQAAAAAAAAAAAABDAAAAAAAA
-AEQOEAAAAAAAHAAAAKQBAAAAAAAAAAAAAEgAAAAAAAAAQQ4QgwIAAAAcAAAAxAEAAAAA
-AAAAAAAArgAAAAAAAABEDiBKhgKDAxQAAAAAAAAAAQABeBAMBwiQAQAAAAAAADwAAAAc
-AAAAAAAAAAAAAADfAAAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOQIMHhgaMBY0EjgOP
-AgAAAAAAAAA0AAAAXAAAAAAAAAAAAAAAdAIAAAAAAABCDhBCDhhCDiBBDihBDjCDBoYF
-jASNA44CAAAAAAAAABQAAACUAAAAAAAAAAAAAAA2AAAAAAAAADwAAACsAAAAAAAAAAAA
-AADzBgAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOYIMHhgaMBY0EjgOPAgAAAAAAAAA8
-AAAA7AAAAAAAAAAAAAAA0AYAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhHDuAIgweGBowF
-jQSOA48CAAAAAAAAFAAAACwBAAAAAAAAAAAAAD0AAAAAAAAAFAAAAEQBAAAAAAAAAAAA
-AHEAAAAAAAAAPAAAAFwBAAAAAAAAAAAAAMgAAAAAAAAAQg4QQg4YQg4gQg4oQQ4wQQ44
-RA5AgweGBowFjQSOA48CAAAAAAAAABQAAACcAQAAAAAAAAAAAAC2AAAAAAAAACQAAAC0
-AQAAAAAAAAAAAAD7AAAAAAAAAEIOEEEOGEEOIIMEhgOMAgAcAAAA3AEAAAAAAAAAAAAA
-SAAAAAAAAABBDhCDAgAAABwAAAD8AQAAAAAAAAAAAAC4AAAAAAAAAEQOIEqGAoMDFAAA
-AAAAAAABAAF4EAwHCJABAAAAAAAAPAAAABwAAAAAAAAAAAAAAOIAAAAAAAAAQg4QQg4Y
-Qg4gQg4oQQ4wQQ44RA5AgweGBowFjQSOA48CAAAAAAAAADQAAABcAAAAAAAAAAAAAAB0
-AgAAAAAAAEIOEEIOGEIOIEEOKEEOMIMGhgWMBI0DjgIAAAAAAAAAPAAAAJQAAAAAAAAA
-AAAAAKICAAAAAAAAQg4QQg4YQg4gQg4oQQ4wQQ44RA5AgweGBowFjQSOA48CAAAAAAAA
-ABQAAADUAAAAAAAAAAAAAAAzAAAAAAAAABQAAADsAAAAAAAAAAAAAABpAAAAAAAAADwA
-AAAEAQAAAAAAAAAAAAAjAQAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOUIMHhgaMBY0E
-jgOPAgAAAAAAAAAUAAAARAEAAAAAAAAAAAAAPQAAAAAAAAA8AAAAXAEAAAAAAAAAAAAA
-2QQAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhHDpANgweGBowFjQSOA48CAAAAAAAANAAA
-AJwBAAAAAAAAAAAAAIoBAAAAAAAAQg4QQg4YQg4gQQ4oQQ4wRA5QgwaGBYwEjQOOAgAA
-AAAcAAAA1AEAAAAAAAAAAAAASAAAAAAAAABBDhCDAgAAABwAAAD0AQAAAAAAAAAAAACu
-AAAAAAAAAEQOIEqGAoMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdDQzogKEdOVSkg
-My4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdO
-VSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzog
-KEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdD
-QzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQA
-AEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4z
-LjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkg
-My4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdO
-VSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzog
-KEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdD
-QzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQA
-AEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4z
-LjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkg
-My4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdO
-VSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzog
-KEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdD
-QzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQA
-AEdDQzogKEdOVSkgMy4zLjQAAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0YWIALnJlbGEu
-dGV4dAAucmVsYS5yb2RhdGEALnJvZGF0YS5zdHIxLjEALnJvZGF0YS5zdHIxLjMyAC5y
-ZWxhLmRhdGEALnJlbGEuZWhfZnJhbWUALmJzcwAuY29tbWVudAAubm90ZS5HTlUtc3Rh
-Y2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAACAAAAABAAAABgAAAAAAAAAAAAAAAAAAAEAAAAAAAAAA8WEB
-AAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAbAAAABAAAAAAAAAAAAAAAAAAAAAAA
-AAB4hwIAAAAAAGhAAAAAAAAADwAAAAEAAAAIAAAAAAAAABgAAAAAAAAAKwAAAAEAAAAC
-AAAAAAAAAAAAAAAAAAAAQGIBAAAAAAAIiQAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAA
-AAAAACYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAODHAgAAAAAAMEsAAAAAAAAPAAAAAwAA
-AAgAAAAAAAAAGAAAAAAAAAAzAAAAAQAAADIAAAAAAAAAAAAAAAAAAABI6wEAAAAAAMwF
-AAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAQgAAAAEAAAAyAAAAAAAAAAAAAAAA
-AAAAIPEBAAAAAABzAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAABAAAAAAAAAFcAAAABAAAA
-AwAAAAAAAAAAAAAAAAAAAKDxAQAAAAAApBcAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA
-AAAAAABSAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQEwMAAAAAABACAAAAAAAADwAAAAcA
-AAAIAAAAAAAAABgAAAAAAAAAYgAAAAEAAAACAAAAAAAAAAAAAAAAAAAASAkCAAAAAADg
-QQAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAF0AAAAEAAAAAAAAAAAAAAAAAAAA
-AAAAACAVAwAAAAAAIC4AAAAAAAAPAAAACQAAAAgAAAAAAAAAGAAAAAAAAABsAAAACAAA
-AAMAAAAAAAAAAAAAAAAAAABASwIAAAAAALABAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA
-AAAAAAAAcQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAQEsCAAAAAABOAwAAAAAAAAAAAAAA
-AAAAAQAAAAAAAAAAAAAAAAAAAHoAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAI5OAgAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAwAAAAAAAAAAAAAAAAAA
-AAAAAACOTgIAAAAAAIoAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAIA
-AAAAAAAAAAAAAAAAAAAAAAAAWFMCAAAAAACgIwAAAAAAABAAAAAKAAAACAAAAAAAAAAY
-AAAAAAAAAAkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAPh2AgAAAAAAgBAAAAAAAAAAAAAA
-AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAB
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAFAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAwAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAHAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAwALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAJAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAwAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwANAAAAAAAAAAAAAAAA
-AAAAAAABAAAAEgABADiGAAAAAAAApAAAAAAAAAAMAAAAEgABAJ93AAAAAAAABgAAAAAA
-AAAXAAAAEgABADznAAAAAAAAlAAAAAAAAAAiAAAAEgABAD1eAAAAAAAAlwAAAAAAAAAt
-AAAAEgABAPXdAAAAAAAAkQAAAAAAAAA4AAAAEgABAL5UAAAAAAAA1AAAAAAAAABDAAAA
-EgABAMspAQAAAAAA0QAAAAAAAABOAAAAEQAHAKADAAAAAAAApAEAAAAAAABZAAAAEgAB
-AGrqAAAAAAAAIQAAAAAAAABkAAAAEgABAIpWAAAAAAAALgAAAAAAAABvAAAAEgABAIZL
-AAAAAAAAMQAAAAAAAAB6AAAAEgABAGfkAAAAAAAAIgAAAAAAAACFAAAAEgABABLhAAAA
-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
-AwAAEgABAMP1AAAAAAAAEwAAAAAAAAAEBAAAEgABAByuAAAAAAAAIgAAAAAAAAAPBAAA
-EgABAMrZAAAAAAAAYQMAAAAAAAAaBAAAEgABAGrXAAAAAAAABwAAAAAAAAAlBAAAEgAB
-AFFXAAAAAAAAhwAAAAAAAAAwBAAAEgABACKHAAAAAAAANwAAAAAAAAA7BAAAEgABAHAh
-AQAAAAAAMAAAAAAAAABGBAAAEgABAEnYAAAAAAAA9gAAAAAAAABRBAAAEgABAP+SAAAA
-AAAAAQAAAAAAAABcBAAAEgABACxbAAAAAAAAZwAAAAAAAABnBAAAEgABAGaNAAAAAAAA
-kAAAAAAAAAByBAAAEgABAMG9AAAAAAAAUQAAAAAAAAB9BAAAEgABAJvJAAAAAAAABwUA
-AAAAAACIBAAAEgABAFERAQAAAAAAuQAAAAAAAACTBAAAEgABAPjgAAAAAAAABgAAAAAA
-AACeBAAAEgABAHiMAAAAAAAAHwAAAAAAAACpBAAAEgABAPLqAAAAAAAAUgAAAAAAAAC0
-BAAAEgABAHAcAQAAAAAA+AAAAAAAAAC/BAAAEgABAPuXAAAAAAAAOwAAAAAAAADKBAAA
-EgABAGtaAAAAAAAAJQAAAAAAAADVBAAAEgABADLkAAAAAAAAIQAAAAAAAADgBAAAEgAB
-AKLOAAAAAAAAPQAAAAAAAADrBAAAEgABAP3EAAAAAAAAFAAAAAAAAAD2BAAAEgABAMkf
-AQAAAAAAOQAAAAAAAAABBQAAEgABAHLpAAAAAAAABgAAAAAAAAAMBQAAEAAAAAAAAAAA
-AAAAAAAAAAAAAAAZBQAAEgABAOV4AAAAAAAAXgAAAAAAAAAkBQAAEgABAHNjAAAAAAAA
-OwAAAAAAAAAvBQAAEgABAFAgAQAAAAAACAAAAAAAAAA6BQAAEgABANbfAAAAAAAAdwAA
-AAAAAABFBQAAEgABANwDAAAAAAAAkQAAAAAAAABWBQAAEgABAJAWAQAAAAAAtwMAAAAA
-AABhBQAAEgABAD9dAAAAAAAAQQAAAAAAAABsBQAAEgABADh9AAAAAAAAmAAAAAAAAAB3
-BQAAEgABACLhAAAAAAAADgAAAAAAAACCBQAAEgABAJwqAQAAAAAATwAAAAAAAACNBQAA
-EgABAPpiAAAAAAAAUgAAAAAAAACYBQAAEgABAFKJAAAAAAAALgAAAAAAAACjBQAAEgAB
-AOyjAAAAAAAABgEAAAAAAACuBQAAEgABACh3AAAAAAAAdwAAAAAAAAC5BQAAEQAHAMAQ
-AAAAAAAApAEAAAAAAADEBQAAEgABAMjrAAAAAAAAMAAAAAAAAADPBQAAEgABANDnAAAA
-AAAAFgAAAAAAAADaBQAAEgABANyGAAAAAAAARgAAAAAAAADlBQAAEgABADaYAAAAAAAA
-3AAAAAAAAADwBQAAEgABAInkAAAAAAAAOgEAAAAAAAD7BQAAEgABAP2QAAAAAAAAbgAA
-AAAAAAAGBgAAEgABAAGTAAAAAAAAEAAAAAAAAAARBgAAEgABAJLmAAAAAAAAqgAAAAAA
-AAAcBgAAEgABAHUUAQAAAAAAMgEAAAAAAAAnBgAAEgABAKAhAQAAAAAADQQAAAAAAAAy
-BgAAEgABADyUAAAAAAAAKQAAAAAAAAA9BgAAEgABAPZVAAAAAAAABwAAAAAAAABIBgAA
-EgABAFmHAAAAAAAA4wAAAAAAAABTBgAAEgABAIbTAAAAAAAARgAAAAAAAABeBgAAEgAB
-ANveAAAAAAAAIAAAAAAAAABpBgAAEgABAAhgAAAAAAAADgAAAAAAAAB0BgAAEgABAENh
-AQAAAAAArgAAAAAAAAB/BgAAEgABAILgAAAAAAAANQAAAAAAAACKBgAAEQAHAIASAAAA
-AAAApAEAAAAAAACVBgAAEgABAFvFAAAAAAAAZAAAAAAAAACgBgAAEgABAMiWAAAAAAAA
-DAAAAAAAAACrBgAAEgABAK5jAAAAAAAAHwEAAAAAAAC2BgAAEgABAEzdAAAAAAAAHwAA
-AAAAAADBBgAAEgABAPveAAAAAAAAlgAAAAAAAADMBgAAEgABACJUAAAAAAAAZQAAAAAA
-AADXBgAAEgABAGAgAQAAAAAAEAEAAAAAAADiBgAAEgABAFBrAAAAAAAAGAAAAAAAAADt
-BgAAEgABAAxiAAAAAAAACAAAAAAAAAD4BgAAEgABAAxcAAAAAAAAogAAAAAAAAADBwAA
-EgABAFdjAAAAAAAAHAAAAAAAAAAOBwAAEgABAIbeAAAAAAAAVQAAAAAAAAAZBwAAEgAB
-AMb3AAAAAAAA0AEAAAAAAAAkBwAAEgABAL/FAAAAAAAABgAAAAAAAAAvBwAAEgABALQa
-AQAAAAAAWgAAAAAAAAA6BwAAEgABALBhAAAAAAAAIAAAAAAAAABFBwAAEQAHACAHAAAA
-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
-CgAAEgABAAPUAAAAAAAANQEAAAAAAADRCgAAEgABAPCXAAAAAAAACwAAAAAAAADcCgAA
-EgABAKlIAAAAAAAAKwAAAAAAAADnCgAAEgABADnWAAAAAAAAYwAAAAAAAADyCgAAEgAB
-APcIAAAAAAAAaAAAAAAAAAD9CgAAEgABAF2WAAAAAAAABgAAAAAAAAAICwAAEgABADMG
-AAAAAAAAugAAAAAAAAATCwAAEgABAKjVAAAAAAAAIgAAAAAAAAAeCwAAEgABAPJeAAAA
-AAAAmgAAAAAAAAApCwAAEgABAARiAAAAAAAACAAAAAAAAAA0CwAAEgABANWQAAAAAAAA
-KAAAAAAAAAA/CwAAEgABANsMAQAAAAAAfAAAAAAAAABKCwAAEgABAL1aAAAAAAAAJAAA
-AAAAAABVCwAAEgABAIYAAQAAAAAALAAAAAAAAABgCwAAEgABAIgDAAAAAAAAVAAAAAAA
-AABrCwAAEgABAGvdAAAAAAAAMQAAAAAAAAB2CwAAEAAAAAAAAAAAAAAAAAAAAAAAAACG
-CwAAEgABAD6uAAAAAAAAgAEAAAAAAACRCwAAEgABAJRVAAAAAAAAEwAAAAAAAACcCwAA
-EgABAGgdAQAAAAAAVQAAAAAAAACnCwAAEgABAA1bAAAAAAAAHwAAAAAAAACyCwAAEgAB
-AD/ZAAAAAAAAiwAAAAAAAAC9CwAAEgABAJSQAAAAAAAAQQAAAAAAAADICwAAEgABAMXF
-AAAAAAAAkAAAAAAAAADTCwAAEAAAAAAAAAAAAAAAAAAAAAAAAADzCwAAEgABAIEFAAAA
-AAAAsgAAAAAAAAD+CwAAEgABAMNZAAAAAAAAYwAAAAAAAAAJDAAAEgABACZaAAAAAAAA
-MQAAAAAAAAAUDAAAEgABADWNAAAAAAAAMQAAAAAAAAAfDAAAEgABALhWAAAAAAAAmQAA
-AAAAAAAqDAAAEgABAD6PAAAAAAAAIAAAAAAAAAA1DAAAEgABAA7QAAAAAAAAvgIAAAAA
-AABADAAAEgABAB+TAAAAAAAADgAAAAAAAABLDAAAEgABAPjrAAAAAAAA/gAAAAAAAABW
-DAAAEgABAIRZAAAAAAAAIAAAAAAAAABhDAAAEAAAAAAAAAAAAAAAAAAAAAAAAABvDAAA
-EgABAFiMAAAAAAAAIAAAAAAAAAB6DAAAEgABAIAHAAAAAAAAQwAAAAAAAACFDAAAEgAB
-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
-AAAAAADfDwAAEgABAK1JAAAAAAAAlQAAAAAAAADqDwAAEgABAE3gAAAAAAAANQAAAAAA
-AAD1DwAAEgABADjVAAAAAAAAbQAAAAAAAAAAEAAAEgABAAr2AAAAAAAAvAEAAAAAAAAL
-EAAAEgABAGoaAQAAAAAAGQAAAAAAAAAWEAAAEgABAMzSAAAAAAAAugAAAAAAAAAhEAAA
-EAAAAAAAAAAAAAAAAAAAAAAAAAAwEAAAEgABAFdaAAAAAAAABgAAAAAAAAA7EAAAEgAB
-AAZ9AAAAAAAAMgAAAAAAAABGEAAAEgABAKvfAAAAAAAACwAAAAAAAABREAAAEgABADmi
-AAAAAAAAswEAAAAAAABcEAAAEgABALdLAAAAAAAAmwAAAAAAAAB1EAAAEgABAIMaAQAA
-AAAAMQAAAAAAAAAAenowMDViNTg0NgB6ejAwMmRiMTFjAHp6MDJkYmY4NzUAenowMmRi
-YjFiMgB6ejAwMmRiNDYwAHp6MGI3YjgzNjgAenowNWI4YzY1YQB6ejAwNWI0MGFkAHp6
-MDViOTQyZWQAenowZDk0Y2QwNAB6ejAwMTlmNDcwAHp6MDJkYmU3M2QAenowMDViNjky
-YgB6ejBiNmQyMzI1AHp6MDA1Yjg1M2QAenowMDE2ZDkyZQB6ejBjZmIxODc1AHp6MDAy
-ZGIzMWMAenowMmRhYmJhYwB6ejAwMGI2YzY4AHp6MDAwYjZiZjgAenowMmRiNWJmMAB6
-ejAxNmUxZGZkAHp6MGI3MGU5OGMAenowNmUwZjZjMgB6ejAwNjdkMmIxAHp6MGI2Y2Ez
-MjUAenowMDViNmNmZAB6ejAxNmUwZGZkAHp6MDAwYjZmNjgAenowMDViNDhhZAB6ejAy
-ZGJmMWIyAHp6MDA1Yjg4Y2IAenowMzNlYzhiZgB6ejBkYjRjOTRkAHp6MDJkYjNiYWMA
-YXRoX2hhbF9kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUAenowMGI2ZjE2MQB6ejBkYzU4
-NzE4AHp6MGRiMDkxMGUAenowMGI2ZTI3YQB6ejAyZGJiYWIyAHp6MGI2ZDFlZmYAenow
-MDViNjRmZAB6ejAwMGI2ZDUyAHp6MGI2YzllZmYAenowMmRiZDg3NQB6ejAyZGIzMWIy
-AHp6MDBiNzA5MjMAenowMDBiNmQxZAB6ejAwYjZkNDUwAHp6MGI2YzIzMjUAenowMmRi
-ZGFiMgB6ejAwMDViNjMyAHp6MDZkZjJmNTcAenowMDE2ZGE1MAB6ejAwMDY3ZDMyAHp6
-MDBiNmQ5MjMAenowMDJkYjUxYwB6ejAxNmRhN2YwAHp6MDE2ZGNiZmUAenowMDE2ZGVj
-MQB6ejAwMTZkZjJjAHp6MGI4MTQ2MTIAenowMTZkOTkyMAB6ejAyZGIxYmFjAHp6MGRj
-Nzg3MTgAenowNWI3MDFlMAB6ejAwMGI2YjEwAHp6MGI3MDllZmYAenowMTZkZjg5YgBh
-dGhfaGFsX2F0dGFjaAB6ejA2ZTE0ZGQxAHp6MDE2ZGFiMmQAenowMmRiMTM1ZAB6ejBl
-MGI2ZjIzAHp6MDE2ZTI5MWQAenowMDBiNmZlOAB6ejAwMTZkOTQ4AHp6MDE2ZTIwOWIA
-enowYjcwMWVmZgB6ejAwMGI2YzlkAHp6MDAwNWI1YTIAenowMmRiMTcwYQBhdGhfaGFs
-X2NvbXB1dGV0eHRpbWUAenowMmRiNWJhYwB6ejAwNWI4MTNkAHp6MDBiNmM5MjMAenow
-YjZjZTk4YwB6ejAwNWI3ZjlkAHp6MGI3MDFkMDIAenowNmUwNDYwZQB6ejAyZGI1NzYz
-AHp6MDZmMjMyY2MAenowZTA3ODM3OQB6ejAwMmRhZjYyAHp6MGI4NTQ2MTIAenowMDBi
-NmI5MAB6ejAxNmQ5ZWZhAHp6MDAyZGIyNjAAenowMTZkZTA1MQB6ejAwMDViNmIyAHp6
-MDViN2YxMTQAenowMzQ3NDZiNAB6ejAyZGJkZGZkAHp6MDA4ZWYzMDkAenowMGI3MTc3
-ZAB6ejAwYjcwZjNkAHp6MDE2ZDg5MjAAenowMmRiMWFiMgB6ejAwMDViNjIyAHp6MDAw
-YjZmNzgAenowYjZiNDk1MAB6ejAwNWI3NjMwAGF0aF9oYWxfZnJlZQB6ejA1Yjc5YjFi
-AHp6MDBiNzA3M2QAenowYjVmY2EyNgB6ejAxNmRmYmYxAGF0aF9oYWxfbWh6MmllZWUA
-enowMTZlMTg5YgB6ejBkYzM0OTRkAHp6MDAyZGM2MGIAenowMmRiMzM1ZAB6ejBiNmM1
-M2E0AHp6MGY4ZWYzMDgAenowZGE0Y2QwNAB6ejA1Yjc0MWUwAHp6MDJkYTliYWMAenow
-MTZlYzlhZAB6ejAwYjcxNzNkAHp6MDE2ZDlkNDEAenowZGMxMmMxZgB6ejAwNWI4NGZk
-AHp6MDA1YjhhYmQAenowMGI3MDEyMwB6ejAwNWI2NTJiAHp6MDJkYjM4NzUAenowMTZl
-MzA5YgB6ejAwNWI2MGIyAHp6MDJkYjE4NzUAenowMmRiMTc2MwB6ejBiN2Y4MzY4AHp6
-MGRjMzJjMWYAenowMGI3MDE2MQB6ejAxNmQ3ZDQxAHp6MDAxNmNkMzIAenowZGI0OTEw
-ZQB6ejAwNWI0OGVkAHp6MDAyZGM4MGIAenowMmRiMzNlZAB6ejAwNWI4MGZkAHp6MDJk
-YmZkZmQAenowMTZlNjQ4YQB6ejBkYmYyYzFmAHp6MDAyZGFmZjIAenowMDViNzc5ZAB6
-ejAwMGI2ZWU4AHp6MDE2ZTQ0OGEAenowMGI2ZjZiYwB6ejAxNmRhOTIwAHp6MDViNzgx
-ZTAAenowZTI3M2E0ZAB6ejAwMmRjYTBiAHp6MDJkYjFiZjAAenowMDViNDRhZAB6ejA2
-ZGU0NjBlAHp6MGI2ZjllZmYAenowMGI2YzZiYwBhdGhfaGFsX2FkZGl0aW9uYWxfc3di
-YV9iYWNrb2ZmAHp6MDAwMmRiOTIAYXRoX2hhbF92ZXJzaW9uAGF0aF9oYWxfaWVlZTJt
-aHoAenowMmRiNzlhZQB6ejBiNmNmMDA5AHp6MDAxNmUxMmMAenowMDE2ZDllNAB6ejAw
-NWI1Y2IyAHp6MDE2ZGEyNTEAenowNmZhMzJjYwB6ejA2ZTAyZjU3AHp6MDA1YjZlMzAA
-YXRoX2hhbF9tYWxsb2MAenowMDBiNmRkMgB6ejA1YjZjYmQ1AHp6MDE2ZGIyNTEAenow
-ZTE3ODM3OQB6ejAxNmRkMDUxAHp6MDJkYmQxYjIAenowZGE5YzRmNgB6ejAyZGMxNzYz
-AHp6MDE2ZGYwNTEAenowMDE2ZDk1MAB6ejAwYjcwNmJjAHp6MDAxNmQ4NzIAenowNmRm
-NDYwZQB6ejA1YjhjMmVkAHp6MDZmZjE3ZTcAenowYjZmOWQwMgB6ejBkNGVmMzA4AHp6
-MDE2ZGJiZmUAenowMTZlNTQ4YQB6ejAwMTZkODUwAHp6MDAwYjZmZjgAYXRoX2hhbF9t
-ZW1jcHkAenowMmRiYmRmZAB6ejA2ZGI1ZWI2AHp6MDE2ZWI5YWQAenowMGI2Y2ViYwB6
-ejBkOWI4Yjc5AGF0aF9oYWxfcHJvYmUAenowMDJkYjA2MAB6ejAxNmVhOWFkAHp6MDAw
-ZWYzMDkAenowMmRiMzc2MwBhdGhfaGFsX2J1aWxkb3B0cwB6ejAyZGFmMzVkAHp6MGRi
-NGNkMDQAenowMTZkZjI1MQB6ejAwMGI2YzEwAHp6MDE2ZDkyNTEAenowYjcyMWFlZAB6
-ejA2N2NmY2FlAHp6MDAwYjZjZjgAenowY2NlZjMwOAB6ejAyZGFmYWIyAHp6MDViOTJh
-ZWQAenowMDViOGNjYgB6ejBiNmQ5ZWZmAHp6MDJkYjExYjIAenowZTE3M2E0ZAB6ejAy
-ZGJmZmIxAHp6MDJkYmY3NjMAenowMDViNjhmZAB6ejAwNWI0NGVkAHp6MGI3MTFhZWQA
-enowYjVmY2EzNAB6ejBkOGI4Yjc5AHp6MDE2ZDhiMmQAenowMTZlMDg5YgB6ejAyZGJi
-ODc1AHp6MDE2ZDk3ZjAAenowYjgzODM2OAB6ejAwYjZmZWJjAHp6MGU5OTkzMTMAenow
-MGI2ZWE3YQB6ejAzM2U4ZmJmAHp6MDA1YjcyMzAAenowY2ZhNTg3NQB6ejAyZGI5OWFl
-AHp6MDJkYjlhYjIAenowMDBiNmJlOAB6ejBkOTljNGY2AHp6MGRlZDhhNTcAenowMTZk
-YWJmZQB6ejBiNzA5ZDAyAHp6MDE5ZjNhMDEAenowNzA3MTdlNwBhdGhfaGFsX21lbXpl
-cm8AenowNmUwNGRkMQB6ejBiNjhlOThjAHp6MDE2ZTJkZmQAenowMDBiNmQyMgB6ejA3
-MDIzMmNjAHp6MGRjNTQ5NGQAenowMGI3MGY3ZABhdGhfaGFsX3N3X2JlYWNvbl9yZXNw
-b25zZV90aW1lAHp6MDlmNjlkMmUAenowMDViNjU3YQB6ejA2ZjcxN2U3AHp6MDZkYTVl
-YjYAenowYjdkNDYxMgB6ejAwYjZmOTYxAHp6MGI2YjBjOTAAenowMmRiZDM1ZAB6ejAw
-NWI4OGZkAHp6MDJkYWZkZmQAYXRoX2hhbF9kZWxheQB6ejAyZGIxZGZkAHp6MDY3ZDJm
-NDEAenowMmRhZjg3NQB6ejBiODA3NzQxAHp6MDE2ZDhkNDEAenowMDJkYWU5MgB6ejBi
-N2M3NzQxAHp6MDJkYmIzNWQAenowMmRiM2RmZAB6ejAyZGI1M2VkAHp6MDAwYjZkYTIA
-enowMDBiNmUyMgB6ejA1YjgwMDQxAHp6MGQ4OWM0ZjYAenowMDE2ZDg0OAB6ejAxNmQ5
-YjJkAHp6MGUzNzNhNGQAenowMDE2ZTAyYwB6ejAwYjcwNzdkAHp6MDA1YjY5N2EAenow
-MDE2ZGFlNAB6ejAxNmUxMDliAHp6MDA1YjRhMmQAenowZGY3ODM3OQB6ejAyZGJkNzYz
-AHp6MDAwYjZlNTIAenowNWI2YzZkYgB6ejBjYTVmMzI5AHp6MGRiMjkxMGUAenowMmRi
-M2JmMAB6ejA2ZDc4YTRjAHp6MDE2ZTAyNTEAenowMDAyZGJiMgB6ejAwMmRkODZkAHp6
-MDJkYjU5YWUAenowMDY3ZDIyMQB6ejAwNWI4OTNkAHp6MDViODFiMWIAenowMTZkODdm
-MAB6ejAyZGIxM2VkAHp6MDBiNmQxMjMAenowMDBiNmNlOAB6ejA1YjhhYWVkAHp6MDJk
-YWYxYjIAenowMDA1YjVlMgB6ejAzM2ViZmJmAHp6MDViNjg2ZGIAenowMDBiNmVmOAB6
-ejBiNzE5YWVkAHp6MDA1YjU4YjIAenowNWI3ZGIxYgB6ejBiODQ3NzQxAHp6MDAxNmQ3
-MzIAenowMmRhZGFiMgB6ejBmNGRlMzA3AGF0aF9oYWxfaW5pdF9jaGFubmVscwB6ejAw
-YjZkNmJjAHp6MGM0ZWYzMDgAenowMDAyZGJkMgB6ejBkYWI4Yjc5AHp6MDE2ZTBiODcA
-enowNWI5MDJlZAB6ejBkYzM4NzE4AHp6MGFhMmVlYzEAenowMDBiNmMxZAB6ejA1Yjhl
-YWVkAHp6MDA1YjdiOWQAenowMDViNTQ0NgB6ejA1YjY0NmRiAHp6MDBiNmY5MjMAenow
-ZGRkOGE1NwB6ejAxNmUxMjUxAHp6MGRjNzQ5NGQAenowMmRiMzcwYQB6ejAwMDViNjcy
-AHp6MDZkZjRkZDEAenowMmRiZjM1ZAB6ejAwMGI2Yzc4AHp6MDAxNmQ4MzIAenowM2U5
-NzM1MwB6ejAyZGI1NzBhAHp6MDA1YjZkN2EAenowMDJkYjI5MgB6ejAwNWI5MGNiAHp6
-MDA1YjVjNDYAYXRoX2hhbF9wcmludGYAenowNmQ5NWViNgB6ejAxNmRmYjg3AHp6MDAx
-NmRhNDgAenowMDJkYjA5MgBhdGhfaGFsX2dldHdpcmVsZXNzbW9kZXMAenowMTZlMWI4
-NwBkAAAAAAAAAAsAAAADAAAAKgAAAAAAAAB6AAAAAAAAAAsAAAADAAAAPQAAAAAAAACb
-AAAAAAAAAAsAAAADAAAAUQAAAAAAAACsAAAAAAAAAAsAAAADAAAAZQAAAAAAAAC0AAAA
-AAAAAAsAAAADAAAAcgAAAAAAAAC8AAAAAAAAAAsAAAADAAAAfwAAAAAAAADEAAAAAAAA
-AAsAAAADAAAAkgAAAAAAAABzAQAAAAAAAAIAAABvAAAA/P////////99AQAAAAAAAAIA
-AABqAQAA/P////////+HAQAAAAAAAAIAAAA/AAAA/P////////8nAgAAAAAAAAIAAAAf
-AQAA/P/////////8BQAAAAAAAAIAAABeAAAA/P////////8ZBgAAAAAAAAIAAABeAAAA
-/P////////9IBgAAAAAAAAsAAAACAAAAAAAAAAAAAABtCQAAAAAAAAsAAAACAAAAgAAA
-AAAAAAB2CQAAAAAAAAsAAAACAAAAoAAAAAAAAAD9DAAAAAAAAAIAAADAAAAA/P//////
-//+SEQAAAAAAAAIAAAAMAQAA/P////////+OHQAAAAAAAAIAAAAMAQAA/P////////95
-KAAAAAAAAAsAAAACAAAA4AAAAAAAAACLKAAAAAAAAAsAAAACAAAAwAAAAAAAAAAxNgAA
-AAAAAAsAAAACAAAAYBIAAAAAAABeNgAAAAAAAAsAAAACAAAAQAEAAAAAAACwNgAAAAAA
-AAsAAAACAAAAIBgAAAAAAADtNgAAAAAAAAIAAAACAAAAHBgAAAAAAABwNwAAAAAAAAsA
-AAACAAAAQgEAAAAAAACPNwAAAAAAAAsAAAACAAAAZBIAAAAAAAChNwAAAAAAAAsAAAAC
-AAAAYhIAAAAAAAAVOAAAAAAAAAsAAAACAAAAgBMAAAAAAAAcOAAAAAAAAAsAAAACAAAA
-gBUAAAAAAAA2OAAAAAAAAAsAAAACAAAAABcAAAAAAAA9OAAAAAAAAAsAAAACAAAAIBYA
-AAAAAABiOAAAAAAAAAsAAAACAAAAUCEAAAAAAABpOAAAAAAAAAsAAAACAAAAZCEAAAAA
-AACHOQAAAAAAAAsAAAACAAAAZCEAAAAAAACvOQAAAAAAAAsAAAACAAAAaCEAAAAAAAA+
-OgAAAAAAAAsAAAACAAAA8BcAAAAAAACBOgAAAAAAAAsAAAACAAAAQAEAAAAAAACtOgAA
-AAAAAAsAAAACAAAAcCIAAAAAAAAlOwAAAAAAAAsAAAACAAAAQAEAAAAAAABBOwAAAAAA
-AAsAAAACAAAAUAEAAAAAAACnOwAAAAAAAAsAAAACAAAAIBgAAAAAAACuOwAAAAAAAAsA
-AAACAAAAMBgAAAAAAADTOwAAAAAAAAsAAAACAAAAMBgAAAAAAAAHPAAAAAAAAAsAAAAC
-AAAAMBgAAAAAAABCPAAAAAAAAAsAAAACAAAAQAEAAAAAAABJPAAAAAAAAAsAAAACAAAA
-UAEAAAAAAAC4PAAAAAAAAAsAAAACAAAAYhIAAAAAAAAKPQAAAAAAAAsAAAACAAAAXAEA
-AAAAAAAYPQAAAAAAAAsAAAACAAAAQAEAAAAAAABIPQAAAAAAAAsAAAACAAAAQAEAAAAA
-AABfPQAAAAAAAAsAAAACAAAAYAEAAAAAAAClPQAAAAAAAAsAAAACAAAAQCMAAAAAAAAA
-PgAAAAAAAAsAAAACAAAAQCMAAAAAAACFPgAAAAAAAAsAAAAFAAAAwAIAAAAAAACmPgAA
-AAAAAAsAAAAFAAAAwAIAAAAAAABmPwAAAAAAAAsAAAACAAAAQAEAAAAAAAC0PwAAAAAA
-AAsAAAACAAAAQAEAAAAAAADbPwAAAAAAAAsAAAACAAAAYBIAAAAAAABUQAAAAAAAAAsA
-AAACAAAAJBgAAAAAAABqQAAAAAAAAAsAAAACAAAAoBwAAAAAAAB/QAAAAAAAAAsAAAAC
-AAAAIBgAAAAAAABHQwAAAAAAAAIAAAB6AQAA/P/////////GQwAAAAAAAAsAAAACAAAA
-UCEAAAAAAADNQwAAAAAAAAsAAAACAAAAZCEAAAAAAAABRgAAAAAAAAsAAAACAAAAZCEA
-AAAAAAATRgAAAAAAAAsAAAABAAAAikIAAAAAAACVRwAAAAAAAAsAAAACAAAAIBgAAAAA
-AABnSQAAAAAAAAIAAAC2AAAA/P/////////XSQAAAAAAAAsAAAAFAAAAYAAAAAAAAACv
-SgAAAAAAAAsAAAACAAAAIBgAAAAAAABwTAAAAAAAAAsAAAACAAAAUCQAAAAAAABFTQAA
-AAAAAAIAAADAAAAA/P////////9mTQAAAAAAAAsAAAACAAAAYCQAAAAAAABuTQAAAAAA
-AAIAAADWAAAA/P/////////hTQAAAAAAAAIAAAAlAQAA/P////////9hTgAAAAAAAAIA
-AAArAAAA/P////////+WTgAAAAAAAAIAAAAWAQAA/P/////////KTgAAAAAAAAIAAAAW
-AQAA/P/////////2TgAAAAAAAAIAAAAWAQAA/P////////9JTwAAAAAAAAIAAAAWAQAA
-/P////////+HTwAAAAAAAAIAAAAWAQAA/P////////+IUgAAAAAAAAIAAAAWAQAA/P//
-//////8KUwAAAAAAAAIAAAB8AAAA/P////////86UwAAAAAAAAIAAAB8AAAA/P//////
-//+xUwAAAAAAAAIAAAAuAAAA/P/////////GUwAAAAAAAAIAAAAUAQAA/P////////9J
-VAAAAAAAAAIAAAAfAQAA/P////////9lWQAAAAAAAAIAAABnAAAA/P////////+bWQAA
-AAAAAAIAAADWAAAA/P////////+1WQAAAAAAAAIAAADWAAAA/P/////////1WQAAAAAA
-AAIAAABCAAAA/P////////91WgAAAAAAAAIAAAAQAQAA/P////////+KWgAAAAAAAAIA
-AABsAAAA/P////////+KWwAAAAAAAAIAAAA4AQAA/P////////8kXAAAAAAAAAIAAADW
-AAAA/P////////+ZXAAAAAAAAAIAAABGAQAA/P////////+jXAAAAAAAAAIAAACuAAAA
-/P/////////SXQAAAAAAAAIAAAAjAAAA/P/////////zXQAAAAAAAAIAAABDAQAA/P//
-//////80XgAAAAAAAAIAAAAjAAAA/P////////9lXgAAAAAAAAIAAAAjAAAA/P//////
-//+YXgAAAAAAAAIAAABDAQAA/P/////////pXgAAAAAAAAIAAAAjAAAA/P////////8a
-XwAAAAAAAAIAAAAjAAAA/P////////9NXwAAAAAAAAIAAABDAQAA/P////////+kXwAA
-AAAAAAIAAAAjAAAA/P/////////QXwAAAAAAAAIAAAACAQAA/P//////////XwAAAAAA
-AAIAAAAaAAAA/P////////8NYAAAAAAAAAIAAAAhAQAA/P////////90YAAAAAAAAAIA
-AAAfAQAA/P////////+UYAAAAAAAAAIAAAAfAQAA/P/////////ZYQAAAAAAAAsAAADe
-AAAAAAAAAAAAAADnYQAAAAAAAAsAAAARAAAAAAAAAAAAAAD4YQAAAAAAAAIAAAAVAQAA
-/P////////9PYgAAAAAAAAIAAAAfAQAA/P////////8tZQAAAAAAAAIAAAAlAQAA/P//
-//////+uZwAAAAAAAAIAAACpAAAA/P////////9waAAAAAAAAAsAAAACAAAAAC4AAAAA
-AACsaAAAAAAAAAIAAABrAQAA/P/////////UaQAAAAAAAAIAAAAfAQAA/P/////////+
-aQAAAAAAAAIAAABCAAAA/P////////8JagAAAAAAAAIAAACKAAAA/P////////8sagAA
-AAAAAAIAAABQAAAA/P////////9GagAAAAAAAAIAAAB2AAAA/P////////92agAAAAAA
-AAIAAABlAQAA/P////////+RagAAAAAAAAIAAAANAAAA/P////////+sagAAAAAAAAIA
-AAAEAQAA/P////////98awAAAAAAAAIAAADkAAAA/P////////+qawAAAAAAAAIAAAAf
-AQAA/P/////////GawAAAAAAAAIAAAAfAQAA/P/////////3awAAAAAAAAIAAADkAAAA
-/P////////9JbAAAAAAAAAIAAAAfAQAA/P////////9ubAAAAAAAAAIAAAAfAQAA/P//
-//////+FbAAAAAAAAAIAAADkAAAA/P/////////9bAAAAAAAAAIAAAAfAQAA/P//////
-//8cbQAAAAAAAAIAAAAfAQAA/P////////8+bQAAAAAAAAIAAAAfAQAA/P////////+x
-bQAAAAAAAAIAAAAfAQAA/P/////////QbQAAAAAAAAIAAAAfAQAA/P/////////9bQAA
-AAAAAAIAAAAfAQAA/P////////8nbgAAAAAAAAIAAABCAAAA/P////////9SbgAAAAAA
-AAIAAACKAAAA/P////////9gbgAAAAAAAAIAAAAfAQAA/P////////9rbgAAAAAAAAIA
-AACKAAAA/P/////////ebgAAAAAAAAIAAAAfAQAA/P/////////1bgAAAAAAAAIAAABC
-AAAA/P////////9ecgAAAAAAAAsAAAACAAAAUjMAAAAAAADMcwAAAAAAAAsAAAACAAAA
-YDMAAAAAAADRcwAAAAAAAAIAAADWAAAA/P/////////icwAAAAAAAAsAAAACAAAAQDMA
-AAAAAADqcwAAAAAAAAIAAADWAAAA/P////////9GdAAAAAAAAAIAAAArAAAA/P//////
-//9tdAAAAAAAAAIAAAArAAAA/P/////////6dQAAAAAAAAIAAAArAAAA/P////////8V
-dgAAAAAAAAIAAAArAAAA/P////////8tdgAAAAAAAAIAAAArAAAA/P////////+WdgAA
-AAAAAAIAAADoAAAA/P/////////MdgAAAAAAAAIAAAArAAAA/P////////9UdwAAAAAA
-AAIAAABCAAAA/P////////9sdwAAAAAAAAIAAAAfAQAA/P////////90dwAAAAAAAAIA
-AABLAAAA/P/////////MdwAAAAAAAAIAAABNAQAA/P//////////dwAAAAAAAAIAAAAA
-AQAA/P////////+IeAAAAAAAAAIAAAAMAQAA/P/////////BeAAAAAAAAAIAAACxAAAA
-/P////////8lfAAAAAAAAAIAAACXAAAA/P////////84fAAAAAAAAAIAAAA4AQAA/P//
-//////9nfAAAAAAAAAIAAAA4AQAA/P////////+DfAAAAAAAAAIAAAA4AQAA/P//////
-//+HfQAAAAAAAAIAAAAfAQAA/P////////++fQAAAAAAAAIAAABCAAAA/P////////+2
-fwAAAAAAAAIAAAArAAAA/P/////////lfwAAAAAAAAIAAADAAAAA/P////////8GgAAA
-AAAAAAsAAAACAAAAwDMAAAAAAAAOgAAAAAAAAAIAAADWAAAA/P////////+CgAAAAAAA
-AAIAAAB5AQAA/P/////////BgAAAAAAAAAIAAAAfAQAA/P////////9PgQAAAAAAAAIA
-AAAfAQAA/P////////+HgQAAAAAAAAIAAAAzAQAA/P/////////mgQAAAAAAAAIAAAAz
-AQAA/P////////8hggAAAAAAAAIAAAAzAQAA/P////////+PggAAAAAAAAsAAAACAAAA
-UD0AAAAAAADXggAAAAAAAAIAAABfAQAA/P////////8QgwAAAAAAAAIAAAAfAQAA/P//
-//////83gwAAAAAAAAIAAAAfAQAA/P////////9vgwAAAAAAAAIAAAAzAQAA/P//////
-//+ggwAAAAAAAAIAAABmAQAA/P/////////FgwAAAAAAAAIAAAAzAQAA/P////////8n
-hAAAAAAAAAIAAABMAQAA/P////////9ShAAAAAAAAAIAAAB8AAAA/P////////9DhQAA
-AAAAAAIAAAAfAQAA/P////////+3hQAAAAAAAAIAAADPAAAA/P////////+HhgAAAAAA
-AAIAAAAuAAAA/P////////+chgAAAAAAAAIAAAAUAQAA/P/////////zhgAAAAAAAAIA
-AABcAQAA/P////////8BhwAAAAAAAAIAAAAfAQAA/P////////9IjAAAAAAAAAIAAAC9
-AAAA/P////////9vjAAAAAAAAAIAAADWAAAA/P////////+JjAAAAAAAAAIAAADWAAAA
-/P/////////TjAAAAAAAAAIAAABCAAAA/P////////+HjQAAAAAAAAIAAAAzAQAA/P//
-//////8AjgAAAAAAAAIAAAAqAQAA/P////////8VjgAAAAAAAAIAAAAyAAAA/P//////
-//8jjgAAAAAAAAIAAADSAAAA/P////////9EjgAAAAAAAAIAAAAqAQAA/P////////9k
-jgAAAAAAAAIAAADBAAAA/P////////81jwAAAAAAAAIAAADyAAAA/P////////9TjwAA
-AAAAAAsAAAACAAAAYD0AAAAAAAB+jwAAAAAAAAIAAADWAAAA/P/////////0kAAAAAAA
-AAIAAADyAAAA/P////////8ikQAAAAAAAAIAAAAjAAAA/P////////8/kQAAAAAAAAIA
-AABDAQAA/P////////+AkQAAAAAAAAIAAAAjAAAA/P////////+xkQAAAAAAAAIAAAAj
-AAAA/P/////////kkQAAAAAAAAIAAABDAQAA/P////////81kgAAAAAAAAIAAAAjAAAA
-/P////////9mkgAAAAAAAAIAAAAjAAAA/P////////+ZkgAAAAAAAAIAAABDAQAA/P//
-///////wkgAAAAAAAAIAAAAjAAAA/P////////9clAAAAAAAAAIAAAACAQAA/P//////
-//+LlAAAAAAAAAIAAAAaAAAA/P////////+ZlAAAAAAAAAIAAAAhAQAA/P////////8I
-lQAAAAAAAAIAAAAfAQAA/P////////8olQAAAAAAAAIAAAAfAQAA/P////////+MlgAA
-AAAAAAsAAACvAAAAAAAAAAAAAACVlgAAAAAAAAsAAAD0AAAAAAAAAAAAAACelgAAAAAA
-AAsAAADZAAAAAAAAAAAAAACvlgAAAAAAAAIAAAAVAQAA/P/////////zlgAAAAAAAAIA
-AABCAAAA/P////////+SmQAAAAAAAAIAAADoAAAA/P////////97mgAAAAAAAAIAAAB5
-AQAA/P////////9/mwAAAAAAAAIAAAArAAAA/P////////+RmwAAAAAAAAIAAAArAAAA
-/P////////+gmwAAAAAAAAsAAAAFAAAAjA0AAAAAAAC+mwAAAAAAAAsAAAAFAAAAmA0A
-AAAAAADqmwAAAAAAAAsAAAAFAAAAYAwAAAAAAAAknAAAAAAAAAsAAAACAAAAgD0AAAAA
-AABVnAAAAAAAAAsAAAACAAAAoEUAAAAAAACEnAAAAAAAAAsAAAACAAAAQEAAAAAAAACL
-nAAAAAAAAAsAAAACAAAAREAAAAAAAAAwnwAAAAAAAAIAAAANAQAA/P/////////VnwAA
-AAAAAAIAAAAfAQAA/P//////////nwAAAAAAAAIAAABCAAAA/P////////8KoAAAAAAA
-AAIAAAAcAAAA/P////////+CoAAAAAAAAAIAAAD5AAAA/P////////8foQAAAAAAAAIA
-AABtAAAA/P////////8roQAAAAAAAAIAAABKAAAA/P////////9boQAAAAAAAAIAAACR
-AAAA/P////////92oQAAAAAAAAIAAADGAAAA/P////////+RoQAAAAAAAAIAAAAzAAAA
-/P////////8DogAAAAAAAAIAAAA/AQAA/P////////8sogAAAAAAAAIAAAAfAQAA/P//
-//////9cogAAAAAAAAIAAAA/AQAA/P/////////vogAAAAAAAAIAAAAfAQAA/P//////
-//8kowAAAAAAAAIAAAAfAQAA/P////////96owAAAAAAAAIAAAAfAQAA/P////////+o
-owAAAAAAAAIAAAAfAQAA/P////////+/owAAAAAAAAIAAAA/AQAA/P////////+jpAAA
-AAAAAAIAAAAcAAAA/P////////+xpAAAAAAAAAIAAAAfAQAA/P////////+8pAAAAAAA
-AAIAAAAcAAAA/P////////8opQAAAAAAAAIAAAAfAQAA/P////////8/pQAAAAAAAAIA
-AABCAAAA/P////////+FpQAAAAAAAAIAAACBAAAA/P////////+dpQAAAAAAAAsAAAAC
-AAAAhEkAAAAAAACqpQAAAAAAAAIAAAArAAAA/P/////////hpQAAAAAAAAIAAAArAAAA
-/P////////8JpgAAAAAAAAIAAAArAAAA/P////////8IpwAAAAAAAAIAAAAfAQAA/P//
-//////8lpwAAAAAAAAIAAAAtAAAA/P/////////ypwAAAAAAAAIAAABWAQAA/P//////
-//8eqAAAAAAAAAsAAAACAAAAyEoAAAAAAACYqQAAAAAAAAsAAAAFAAAA/A0AAAAAAAC3
-qQAAAAAAAAsAAAAFAAAACA4AAAAAAADWqQAAAAAAAAsAAAAFAAAAvA4AAAAAAAB3qgAA
-AAAAAAsAAAAFAAAARA4AAAAAAACQqgAAAAAAAAIAAAArAAAA/P////////+vqgAAAAAA
-AAsAAAAFAAAAUA4AAAAAAADEqgAAAAAAAAIAAAArAAAA/P/////////mqgAAAAAAAAIA
-AAArAAAA/P/////////8qgAAAAAAAAsAAAAFAAAAXA4AAAAAAAARqwAAAAAAAAIAAAAr
-AAAA/P////////8vqwAAAAAAAAIAAAArAAAA/P////////9DqwAAAAAAAAsAAAAFAAAA
-jA4AAAAAAABmqwAAAAAAAAsAAAAFAAAAwA0AAAAAAACDrAAAAAAAAAIAAABAAAAA/P//
-//////9ZrwAAAAAAAAIAAAAUAAAA/P/////////trwAAAAAAAAsAAAAGAAAAAAAAAAAA
-AADyrwAAAAAAAAIAAAAMAQAA/P/////////+rwAAAAAAAAsAAAAGAAAAIAEAAAAAAAAD
-sAAAAAAAAAIAAAAMAQAA/P////////8KsAAAAAAAAAsAAAAGAAAACAAAAAAAAAARsAAA
-AAAAAAsAAAAGAAAAiAAAAAAAAAA0sAAAAAAAAAIAAAAGAAAAAgAAAAAAAAA7sAAAAAAA
-AAIAAAAGAAAA/P////////9EsAAAAAAAAAIAAAAGAAAA/v////////9SsAAAAAAAAAIA
-AAAGAAAAAgAAAAAAAAB2sAAAAAAAAAIAAAAGAAAAAgAAAAAAAACFsAAAAAAAAAIAAAAG
-AAAAAgAAAAAAAACXsAAAAAAAAAIAAAAGAAAAAgAAAAAAAAC6sAAAAAAAAAIAAAAGAAAA
-AgAAAAAAAADgsAAAAAAAAAIAAAAGAAAAAgAAAAAAAADusAAAAAAAAAIAAAAGAAAAAgAA
-AAAAAAD3sAAAAAAAAAIAAAAGAAAAAgAAAAAAAABksQAAAAAAAAsAAAAGAAAAIAEAAAAA
-AACksQAAAAAAAAIAAAAGAAAAAgAAAAAAAABSsgAAAAAAAAsAAAAGAAAAIAEAAAAAAABx
-sgAAAAAAAAIAAAAGAAAAAgAAAAAAAACLsgAAAAAAAAsAAAAGAAAAIAEAAAAAAACRsgAA
-AAAAAAEAAAAGAAAAHgEAAAAAAAC8sgAAAAAAAAsAAAAGAAAAIgEAAAAAAADDsgAAAAAA
-AAsAAAAGAAAAIAEAAAAAAABhswAAAAAAAAsAAAAGAAAAoAEAAAAAAABpswAAAAAAAAIA
-AABvAQAA/P////////+qswAAAAAAAAIAAAD+AAAA/P////////8BtQAAAAAAAAsAAAAC
-AAAA2EoAAAAAAAAntgAAAAAAAAsAAAACAAAAzEoAAAAAAABOtwAAAAAAAAIAAABkAAAA
-/P/////////SugAAAAAAAAIAAAACAAAAIEsAAAAAAADtugAAAAAAAAsAAAACAAAAKEsA
-AAAAAACAvAAAAAAAAAsAAAACAAAAKEsAAAAAAACuvAAAAAAAAAsAAAACAAAAIEsAAAAA
-AAC1vAAAAAAAAAsAAAACAAAAKEsAAAAAAAADvQAAAAAAAAIAAAACAAAAHEsAAAAAAAAg
-vQAAAAAAAAIAAAACAAAAHEsAAAAAAAAtvQAAAAAAAAsAAAACAAAAIEsAAAAAAAA0vQAA
-AAAAAAsAAAACAAAAKEsAAAAAAAAsvgAAAAAAAAIAAADgAAAA/P////////8/vgAAAAAA
-AAIAAADyAAAA/P////////92vgAAAAAAAAIAAADyAAAA/P////////+hvgAAAAAAAAIA
-AADyAAAA/P/////////hvgAAAAAAAAIAAABNAQAA/P////////8UvwAAAAAAAAIAAAAA
-AQAA/P////////+6vwAAAAAAAAIAAAAMAQAA/P/////////6vwAAAAAAAAIAAABaAAAA
-/P////////94wwAAAAAAAAIAAAAUAQAA/P////////9+wwAAAAAAAAIAAAAuAAAA/P//
-//////+PwwAAAAAAAAIAAACzAAAA/P////////+ExQAAAAAAAAIAAABcAQAA/P//////
-//+SxQAAAAAAAAIAAAAfAQAA/P////////+qxwAAAAAAAAIAAAArAAAA/P////////+9
-yAAAAAAAAAIAAADAAAAA/P/////////jyAAAAAAAAAsAAAACAAAAQEwAAAAAAADryAAA
-AAAAAAIAAADWAAAA/P////////+wyQAAAAAAAAIAAABHAAAA/P/////////byQAAAAAA
-AAIAAABnAQAA/P/////////syQAAAAAAAAIAAAByAQAA/P////////9dygAAAAAAAAIA
-AAAZAAAA/P////////+DygAAAAAAAAIAAAA8AAAA/P////////8fywAAAAAAAAIAAABx
-AQAA/P////////97ywAAAAAAAAIAAABxAQAA/P////////+hywAAAAAAAAIAAABxAQAA
-/P/////////UywAAAAAAAAIAAABxAQAA/P////////8YzAAAAAAAAAIAAABxAQAA/P//
-//////+EzAAAAAAAAAsAAAACAAAA0FUAAAAAAACLzAAAAAAAAAsAAAACAAAA1lUAAAAA
-AADXzAAAAAAAAAIAAABfAQAA/P////////8SzQAAAAAAAAIAAAAfAQAA/P////////8a
-zQAAAAAAAAIAAAA8AAAA/P////////85zQAAAAAAAAIAAAAfAQAA/P////////9ozQAA
-AAAAAAIAAABxAQAA/P////////+LzQAAAAAAAAIAAAAbAQAA/P////////+nzQAAAAAA
-AAIAAACcAAAA/P/////////FzQAAAAAAAAIAAABuAQAA/P/////////SzQAAAAAAAAIA
-AABUAQAA/P/////////izQAAAAAAAAIAAAAHAQAA/P////////8HzgAAAAAAAAIAAABx
-AQAA/P////////9lzgAAAAAAAAIAAAClAAAA/P////////9+zgAAAAAAAAIAAAB4AAAA
-/P////////+nzgAAAAAAAAIAAABpAAAA/P/////////RzgAAAAAAAAIAAABnAQAA/P//
-///////ZzgAAAAAAAAIAAAB8AAAA/P/////////HzwAAAAAAAAIAAAAfAQAA/P//////
-//8b0wAAAAAAAAIAAAAuAAAA/P////////8w0wAAAAAAAAIAAAAUAQAA/P////////+d
-0wAAAAAAAAIAAAB7AQAA/P////////+r0wAAAAAAAAIAAAAfAQAA/P////////901QAA
-AAAAAAIAAABCAAAA/P////////+T1gAAAAAAAAIAAADIAAAA/P////////8h2gAAAAAA
-AAsAAAACAAAA4FUAAAAAAADP2wAAAAAAAAIAAAARAQAA/P/////////93AAAAAAAAAIA
-AAARAQAA/P////////9D3QAAAAAAAAIAAADWAAAA/P////////9d3QAAAAAAAAIAAADW
-AAAA/P/////////w3gAAAAAAAAsAAAACAAAAIFYAAAAAAAAT3wAAAAAAAAIAAADWAAAA
-/P////////944gAAAAAAAAIAAAAjAAAA/P////////+Z4gAAAAAAAAIAAABDAQAA/P//
-///////a4gAAAAAAAAIAAAAjAAAA/P////////8L4wAAAAAAAAIAAAAjAAAA/P//////
-//8+4wAAAAAAAAIAAABDAQAA/P////////+P4wAAAAAAAAIAAAAjAAAA/P/////////A
-4wAAAAAAAAIAAAAjAAAA/P/////////z4wAAAAAAAAIAAABDAQAA/P////////9K5AAA
-AAAAAAIAAAAjAAAA/P////////9e5AAAAAAAAAIAAAAiAAAA/P////////+O5AAAAAAA
-AAIAAAAVAAAA/P/////////I5QAAAAAAAAIAAAAVAAAA/P////////+k5gAAAAAAAAsA
-AAACAAAAQFYAAAAAAAAz5wAAAAAAAAIAAAACAQAA/P/////////H5wAAAAAAAAIAAAAa
-AAAA/P/////////V5wAAAAAAAAIAAAAhAQAA/P////////8R6AAAAAAAAAIAAAAfAQAA
-/P////////8x6AAAAAAAAAIAAAAfAQAA/P////////+56QAAAAAAAAsAAAAoAAAAAAAA
-AAAAAADC6QAAAAAAAAsAAACeAAAAAAAAAAAAAADL6QAAAAAAAAsAAAA2AQAAAAAAAAAA
-AADU6QAAAAAAAAsAAACLAAAAAAAAAAAAAADd6QAAAAAAAAsAAABBAQAAAAAAAAAAAADu
-6QAAAAAAAAIAAAAVAQAA/P////////8z6gAAAAAAAAIAAABCAAAA/P////////9c6gAA
-AAAAAAIAAAAsAAAA/P////////9k6gAAAAAAAAIAAADMAAAA/P////////+C6gAAAAAA
-AAIAAAB6AAAA/P////////997AAAAAAAAAIAAACGAAAA/P////////957QAAAAAAAAIA
-AABnAQAA/P////////+R7QAAAAAAAAIAAADoAAAA/P////////9U7gAAAAAAAAIAAABW
-AAAA/P////////9c7gAAAAAAAAIAAABEAAAA/P////////9n7gAAAAAAAAIAAAByAQAA
-/P////////9E7wAAAAAAAAsAAAACAAAA4FYAAAAAAABT7wAAAAAAAAsAAAACAAAA4FYA
-AAAAAABp7wAAAAAAAAIAAAAfAQAA/P////////9/7wAAAAAAAAsAAAACAAAAQFkAAAAA
-AACj7wAAAAAAAAsAAAACAAAARFkAAAAAAAC57wAAAAAAAAIAAAAfAQAA/P/////////j
-7wAAAAAAAAIAAABVAAAA/P////////8L8QAAAAAAAAIAAABSAAAA/P////////9R8QAA
-AAAAAAIAAADxAAAA/P////////9e8QAAAAAAAAIAAAAsAQAA/P////////8C8gAAAAAA
-AAIAAAAiAAAA/P////////9N8wAAAAAAAAIAAAAfAQAA/P////////8L9AAAAAAAAAIA
-AACCAAAA/P////////9j9AAAAAAAAAIAAAAOAAAA/P////////9v9AAAAAAAAAIAAACq
-AAAA/P////////+G9AAAAAAAAAIAAABCAAAA/P////////+g9AAAAAAAAAIAAACQAAAA
-/P/////////O9AAAAAAAAAIAAAA6AAAA/P/////////n9AAAAAAAAAIAAAApAAAA/P//
-//////8A9QAAAAAAAAIAAAA+AAAA/P/////////q9QAAAAAAAAIAAABnAQAA/P//////
-//9S9gAAAAAAAAIAAABnAQAA/P////////9y9wAAAAAAAAIAAAAfAQAA/P////////+M
-9wAAAAAAAAIAAAAfAQAA/P/////////a9wAAAAAAAAIAAADoAAAA/P/////////M+QAA
-AAAAAAIAAAAfAQAA/P/////////j+QAAAAAAAAIAAABCAAAA/P////////8N+gAAAAAA
-AAIAAABnAQAA/P/////////O+gAAAAAAAAIAAABfAAAA/P////////+v+wAAAAAAAAIA
-AAArAAAA/P/////////e/AAAAAAAAAIAAAC+AAAA/P////////+pAAEAAAAAAAIAAABS
-AAAA/P/////////WAAEAAAAAAAIAAAAMAQAA/P/////////nAAEAAAAAAAIAAAAMAQAA
-/P////////8YAQEAAAAAAAsAAAACAAAAeF8AAAAAAAAKBAEAAAAAAAIAAABvAQAA/P//
-//////8wBAEAAAAAAAIAAAAUAAAA/P/////////ABQEAAAAAAAIAAAD+AAAA/P//////
-///cCAEAAAAAAAIAAADWAAAA/P////////8kCgEAAAAAAAIAAAA+AQAA/P////////9l
-CwEAAAAAAAIAAAA+AQAA/P/////////1DAEAAAAAAAIAAAACAAAAIGEAAAAAAAAJDQEA
-AAAAAAsAAAACAAAAKGEAAAAAAAApDQEAAAAAAAIAAAACAAAAoF8AAAAAAAA5DQEAAAAA
-AAsAAAACAAAAqF8AAAAAAACzDwEAAAAAAAsAAAACAAAAoF8AAAAAAAC6DwEAAAAAAAsA
-AAACAAAAIGEAAAAAAABrEQEAAAAAAAIAAAArAAAA/P////////8wEgEAAAAAAAIAAABT
-AAAA/P////////9yEgEAAAAAAAIAAABeAAAA/P////////+eEgEAAAAAAAIAAABTAAAA
-/P/////////uEgEAAAAAAAIAAABeAAAA/P////////8qEwEAAAAAAAIAAABeAAAA/P//
-//////9+EwEAAAAAAAIAAADIAAAA/P/////////bEwEAAAAAAAIAAADIAAAA/P//////
-//8rFAEAAAAAAAIAAABNAQAA/P////////9oFAEAAAAAAAIAAAAAAQAA/P////////9C
-FQEAAAAAAAIAAAAMAQAA/P////////+CFQEAAAAAAAIAAABPAAAA/P/////////nGAEA
-AAAAAAIAAAAUAQAA/P/////////tGAEAAAAAAAIAAAAuAAAA/P/////////8GAEAAAAA
-AAIAAACzAAAA/P/////////dGgEAAAAAAAIAAAB7AQAA/P/////////rGgEAAAAAAAIA
-AAAfAQAA/P////////91GwEAAAAAAAIAAADIAAAA/P////////9FHAEAAAAAAAIAAADI
-AAAA/P////////+AHwEAAAAAAAIAAABoAQAA/P/////////gHwEAAAAAAAIAAABoAQAA
-/P////////+cIAEAAAAAAAIAAAAMAQAA/P////////9RIQEAAAAAAAIAAAAsAAAA/P//
-//////9+IQEAAAAAAAIAAAB6AAAA/P/////////BIQEAAAAAAAsAAAACAAAAkGIAAAAA
-AABAJgEAAAAAAAIAAABoAQAA/P/////////oJgEAAAAAAAIAAACVAAAA/P////////8R
-JwEAAAAAAAIAAACVAAAA/P////////8nJwEAAAAAAAIAAAAKAQAA/P////////9HJwEA
-AAAAAAIAAACVAAAA/P////////9fJwEAAAAAAAIAAACVAAAA/P/////////rJwEAAAAA
-AAIAAAAKAQAA/P////////8LKAEAAAAAAAIAAACVAAAA/P////////93KAEAAAAAAAIA
-AACVAAAA/P////////+JKAEAAAAAAAIAAACVAAAA/P////////+bKAEAAAAAAAIAAACV
-AAAA/P////////+tKAEAAAAAAAIAAACVAAAA/P////////+/KAEAAAAAAAIAAACVAAAA
-/P/////////HKAEAAAAAAAIAAABYAQAA/P/////////XKAEAAAAAAAIAAADLAAAA/P//
-///////7KAEAAAAAAAIAAACVAAAA/P////////8SKQEAAAAAAAIAAACVAAAA/P//////
-//8rKQEAAAAAAAIAAACVAAAA/P////////9CKQEAAAAAAAIAAACVAAAA/P////////9Z
-KQEAAAAAAAIAAACVAAAA/P////////9sKQEAAAAAAAIAAABYAQAA/P////////98KQEA
-AAAAAAIAAADLAAAA/P////////+yKQEAAAAAAAIAAABYAQAA/P/////////CKQEAAAAA
-AAIAAADLAAAA/P/////////8KQEAAAAAAAIAAABoAQAA/P////////9oKwEAAAAAAAIA
-AACVAAAA/P////////9SLAEAAAAAAAIAAABoAQAA/P////////+ILAEAAAAAAAsAAAAC
-AAAAwGIAAAAAAACPLAEAAAAAAAsAAAAEAAAAAAAAAAAAAACcLAEAAAAAAAIAAAB1AQAA
-/P/////////TLAEAAAAAAAsAAAACAAAAwGIAAAAAAADaLAEAAAAAAAsAAAAEAAAAQAAA
-AAAAAADnLAEAAAAAAAIAAAB1AQAA/P////////9SLgEAAAAAAAsAAAACAAAA4GIAAAAA
-AACCLgEAAAAAAAIAAAAfAQAA/P////////+YLgEAAAAAAAsAAAACAAAAQGQAAAAAAACk
-LgEAAAAAAAsAAAACAAAARGQAAAAAAAC4LgEAAAAAAAIAAAAfAQAA/P/////////LLgEA
-AAAAAAsAAAACAAAAIGgAAAAAAAD5LgEAAAAAAAIAAAAfAQAA/P////////8tLwEAAAAA
-AAIAAACBAAAA/P////////9FLwEAAAAAAAsAAAACAAAAxG4AAAAAAABSLwEAAAAAAAIA
-AAArAAAA/P////////+yLwEAAAAAAAIAAAArAAAA/P/////////aLwEAAAAAAAIAAAAr
-AAAA/P////////9QMAEAAAAAAAsAAAACAAAACHAAAAAAAACxMgEAAAAAAAsAAAACAAAA
-gGYAAAAAAADyMgEAAAAAAAIAAABwAAAA/P////////8NMwEAAAAAAAIAAABwAAAA/P//
-//////8gMwEAAAAAAAsAAAACAAAAgGYAAAAAAAA9MwEAAAAAAAIAAAAfAQAA/P//////
-//9TMwEAAAAAAAsAAAACAAAAIGsAAAAAAABeMwEAAAAAAAsAAAACAAAAJGsAAAAAAABz
-MwEAAAAAAAIAAAAfAQAA/P////////+DMwEAAAAAAAsAAAACAAAAMGsAAAAAAAC1MwEA
-AAAAAAIAAAAfAQAA/P/////////FMwEAAAAAAAsAAAACAAAAUGsAAAAAAAD3MwEAAAAA
-AAIAAAAfAQAA/P////////8NNAEAAAAAAAsAAAACAAAAgGsAAAAAAABgNAEAAAAAAAIA
-AABwAAAA/P////////+ANAEAAAAAAAIAAABwAAAA/P////////+iNAEAAAAAAAIAAABw
-AAAA/P////////+/NAEAAAAAAAIAAABwAAAA/P/////////cNAEAAAAAAAIAAABwAAAA
-/P/////////5NAEAAAAAAAIAAABwAAAA/P////////8MNQEAAAAAAAsAAAACAAAAgGsA
-AAAAAAApNQEAAAAAAAIAAAAfAQAA/P////////9CNQEAAAAAAAsAAAACAAAAIG0AAAAA
-AAB9NQEAAAAAAAIAAABwAAAA/P////////+aNQEAAAAAAAIAAABwAAAA/P////////+t
-NQEAAAAAAAsAAAACAAAAIG0AAAAAAADKNQEAAAAAAAIAAAAfAQAA/P////////9oNwEA
-AAAAAAIAAAAMAQAA/P////////+FOgEAAAAAAAIAAAA+AQAA/P////////8vPAEAAAAA
-AAIAAAA+AQAA/P////////9OPAEAAAAAAAIAAAB8AAAA/P////////9vPAEAAAAAAAIA
-AAB8AAAA/P////////+aPAEAAAAAAAIAAADAAAAA/P////////+6PAEAAAAAAAIAAADA
-AAAA/P/////////fPAEAAAAAAAsAAAABAAAAODwBAAAAAADqPAEAAAAAAAsAAAABAAAA
-NC4BAAAAAAD1PAEAAAAAAAsAAAABAAAAPzABAAAAAAAAPQEAAAAAAAsAAAABAAAAEy8B
-AAAAAAALPQEAAAAAAAsAAAABAAAAejABAAAAAAAWPQEAAAAAAAsAAAABAAAAezYBAAAA
-AABOPQEAAAAAAAsAAAACAAAAYHAAAAAAAAB+PQEAAAAAAAIAAAAfAQAA/P////////+U
-PQEAAAAAAAsAAAACAAAA4HEAAAAAAACgPQEAAAAAAAsAAAACAAAA5HEAAAAAAAC0PQEA
-AAAAAAIAAAAfAQAA/P/////////HPQEAAAAAAAsAAAACAAAAAHQAAAAAAAD1PQEAAAAA
-AAIAAAAfAQAA/P/////////mPgEAAAAAAAIAAAArAAAA/P////////9jPwEAAAAAAAIA
-AAArAAAA/P////////+8PwEAAAAAAAIAAAArAAAA/P////////8WQAEAAAAAAAIAAAAr
-AAAA/P////////8nQAEAAAAAAAIAAAArAAAA/P////////+UQAEAAAAAAAsAAAACAAAA
-WHwAAAAAAABvQgEAAAAAAAsAAAACAAAABHcAAAAAAACPQgEAAAAAAAsAAAACAAAAEHcA
-AAAAAAC4QgEAAAAAAAsAAAACAAAAMHcAAAAAAADhQgEAAAAAAAsAAAACAAAAYHcAAAAA
-AAAaQwEAAAAAAAIAAABwAAAA/P////////86QwEAAAAAAAIAAABwAAAA/P////////9b
-QwEAAAAAAAIAAABwAAAA/P////////+KQwEAAAAAAAIAAABwAAAA/P////////+uQwEA
-AAAAAAIAAABwAAAA/P/////////SQwEAAAAAAAIAAABwAAAA/P/////////2QwEAAAAA
-AAIAAABwAAAA/P////////8aRAEAAAAAAAIAAABwAAAA/P////////8+RAEAAAAAAAIA
-AABwAAAA/P////////9mRAEAAAAAAAIAAABwAAAA/P////////+ZRAEAAAAAAAIAAABw
-AAAA/P////////+2RAEAAAAAAAIAAABwAAAA/P////////8DRQEAAAAAAAIAAABwAAAA
-/P////////8gRQEAAAAAAAIAAABwAAAA/P////////89RQEAAAAAAAIAAABwAAAA/P//
-//////9aRQEAAAAAAAIAAABwAAAA/P////////+KRQEAAAAAAAIAAABwAAAA/P//////
-//+nRQEAAAAAAAIAAABwAAAA/P/////////ERQEAAAAAAAIAAABwAAAA/P/////////h
-RQEAAAAAAAIAAABwAAAA/P/////////+RQEAAAAAAAIAAABwAAAA/P////////8QRgEA
-AAAAAAsAAAACAAAAIHsAAAAAAABaRgEAAAAAAAIAAABwAAAA/P////////97RgEAAAAA
-AAIAAABwAAAA/P////////+KRgEAAAAAAAsAAAACAAAAAHcAAAAAAACoRgEAAAAAAAIA
-AAAfAQAA/P////////+/RgEAAAAAAAsAAAACAAAAEHcAAAAAAADdRgEAAAAAAAIAAAAf
-AQAA/P/////////0RgEAAAAAAAsAAAACAAAAMHcAAAAAAAASRwEAAAAAAAIAAAAfAQAA
-/P////////8pRwEAAAAAAAsAAAACAAAAYHcAAAAAAABHRwEAAAAAAAIAAAAfAQAA/P//
-//////9hRwEAAAAAAAsAAAACAAAAIHsAAAAAAACCRwEAAAAAAAIAAAAfAQAA/P//////
-///DSQEAAAAAAAIAAADWAAAA/P/////////WSQEAAAAAAAIAAADWAAAA/P////////9M
-SgEAAAAAAAIAAADWAAAA/P////////9fSgEAAAAAAAIAAADWAAAA/P////////+xSgEA
-AAAAAAIAAADWAAAA/P/////////fSgEAAAAAAAIAAADWAAAA/P/////////ySgEAAAAA
-AAIAAADWAAAA/P////////9ASwEAAAAAAAIAAADWAAAA/P////////+5UQEAAAAAAAIA
-AAB8AAAA/P/////////aUQEAAAAAAAIAAAB8AAAA/P////////8FUgEAAAAAAAIAAADA
-AAAA/P////////8lUgEAAAAAAAIAAADAAAAA/P////////9UUgEAAAAAAAsAAAABAAAA
-o1EBAAAAAABfUgEAAAAAAAsAAAABAAAAMD0BAAAAAABqUgEAAAAAAAsAAAABAAAAg0AB
-AAAAAAB1UgEAAAAAAAsAAAABAAAADz4BAAAAAACAUgEAAAAAAAsAAAABAAAAuUABAAAA
-AACLUgEAAAAAAAsAAAABAAAArEcBAAAAAADCUgEAAAAAAAsAAAACAAAAoHwAAAAAAADy
-UgEAAAAAAAIAAAAfAQAA/P////////8IUwEAAAAAAAsAAAACAAAAIH4AAAAAAAAUUwEA
-AAAAAAsAAAACAAAAJH4AAAAAAAAoUwEAAAAAAAIAAAAfAQAA/P////////8+UwEAAAAA
-AAsAAAACAAAAgIIAAAAAAABsUwEAAAAAAAIAAAAfAQAA/P////////9dVAEAAAAAAAIA
-AAArAAAA/P/////////aVAEAAAAAAAIAAAArAAAA/P////////8zVQEAAAAAAAIAAAAr
-AAAA/P////////+NVQEAAAAAAAIAAAArAAAA/P////////+eVQEAAAAAAAIAAAArAAAA
-/P////////9/VgEAAAAAAAsAAAACAAAAhIUAAAAAAACdVgEAAAAAAAsAAAACAAAAkIUA
-AAAAAADFVgEAAAAAAAsAAAACAAAAsIUAAAAAAADtVgEAAAAAAAsAAAACAAAA4IUAAAAA
-AAAoVwEAAAAAAAIAAABwAAAA/P////////9FVwEAAAAAAAIAAABwAAAA/P////////9V
-VwEAAAAAAAsAAAACAAAAgIgAAAAAAAB+VwEAAAAAAAsAAAACAAAAgIUAAAAAAACbVwEA
-AAAAAAIAAAAfAQAA/P////////+yVwEAAAAAAAsAAAACAAAAkIUAAAAAAADQVwEAAAAA
-AAIAAAAfAQAA/P/////////nVwEAAAAAAAsAAAACAAAAsIUAAAAAAAAFWAEAAAAAAAIA
-AAAfAQAA/P////////8cWAEAAAAAAAsAAAACAAAA4IUAAAAAAAA6WAEAAAAAAAIAAAAf
-AQAA/P////////9UWAEAAAAAAAsAAAACAAAAgIgAAAAAAAByWAEAAAAAAAIAAAAfAQAA
-/P////////+tWAEAAAAAAAsAAAACAAAAyIgAAAAAAAARYQEAAAAAAAIAAAB8AAAA/P//
-//////8yYQEAAAAAAAIAAAB8AAAA/P////////9dYQEAAAAAAAIAAADAAAAA/P//////
-//99YQEAAAAAAAIAAADAAAAA/P////////+iYQEAAAAAAAsAAAABAAAA+2ABAAAAAACt
-YQEAAAAAAAsAAAABAAAApFIBAAAAAAC4YQEAAAAAAAsAAAABAAAAnFgBAAAAAADDYQEA
-AAAAAAsAAAABAAAAhlMBAAAAAADOYQEAAAAAAAsAAAABAAAA+lUBAAAAAADZYQEAAAAA
-AAsAAAABAAAAcV8BAAAAAAAAAAAAAAAAAAEAAAABAAAATAYAAAAAAAAIAAAAAAAAAAEA
-AAABAAAA4QYAAAAAAAAQAAAAAAAAAAEAAAABAAAA4QYAAAAAAAAYAAAAAAAAAAEAAAAB
-AAAA4QYAAAAAAAAgAAAAAAAAAAEAAAABAAAA5wYAAAAAAAAoAAAAAAAAAAEAAAABAAAA
-4QYAAAAAAAAwAAAAAAAAAAEAAAABAAAAVQYAAAAAAAA4AAAAAAAAAAEAAAABAAAAYgYA
-AAAAAABAAAAAAAAAAAEAAAABAAAA5wYAAAAAAABIAAAAAAAAAAEAAAABAAAAaQYAAAAA
-AABQAAAAAAAAAAEAAAABAAAAcAYAAAAAAABYAAAAAAAAAAEAAAABAAAAoQYAAAAAAABg
-AAAAAAAAAAEAAAABAAAAgwYAAAAAAABoAAAAAAAAAAEAAAABAAAAlQYAAAAAAABwAAAA
-AAAAAAEAAAABAAAAmwYAAAAAAAB4AAAAAAAAAAEAAAABAAAAqQYAAAAAAABIAQAAAAAA
-AAEAAAADAAAAnwAAAAAAAABQAQAAAAAAAAEAAAADAAAAogAAAAAAAABwAQAAAAAAAAEA
-AAADAAAAqAAAAAAAAAB4AQAAAAAAAAEAAAADAAAAqwAAAAAAAACYAQAAAAAAAAEAAAAD
-AAAAugAAAAAAAACgAQAAAAAAAAEAAAADAAAAvQAAAAAAAADAAQAAAAAAAAEAAAADAAAA
-xQAAAAAAAADIAQAAAAAAAAEAAAADAAAAyAAAAAAAAADoAQAAAAAAAAEAAAADAAAA0AAA
-AAAAAADwAQAAAAAAAAEAAAADAAAA0wAAAAAAAAAQAgAAAAAAAAEAAAADAAAA3QAAAAAA
-AAAYAgAAAAAAAAEAAAADAAAA4AAAAAAAAAA4AgAAAAAAAAEAAAADAAAA6AAAAAAAAABA
-AgAAAAAAAAEAAAADAAAA6wAAAAAAAABgAgAAAAAAAAEAAAADAAAA9QAAAAAAAABoAgAA
-AAAAAAEAAAADAAAA+AAAAAAAAACIAgAAAAAAAAEAAAADAAAAAAEAAAAAAACQAgAAAAAA
-AAEAAAADAAAAAwEAAAAAAACwAgAAAAAAAAEAAAADAAAADgEAAAAAAAC4AgAAAAAAAAEA
-AAADAAAAEQEAAAAAAADYAgAAAAAAAAEAAAADAAAAGQEAAAAAAADgAgAAAAAAAAEAAAAD
-AAAAHAEAAAAAAAAAAwAAAAAAAAEAAAADAAAAJAEAAAAAAAAIAwAAAAAAAAEAAAADAAAA
-JwEAAAAAAAAoAwAAAAAAAAEAAAADAAAALwEAAAAAAAAwAwAAAAAAAAEAAAADAAAAMgEA
-AAAAAABQAwAAAAAAAAEAAAADAAAAOQEAAAAAAABYAwAAAAAAAAEAAAADAAAAPAEAAAAA
-AAB4AwAAAAAAAAEAAAADAAAAQwEAAAAAAACAAwAAAAAAAAEAAAADAAAARgEAAAAAAACg
-AwAAAAAAAAEAAAADAAAATQEAAAAAAACoAwAAAAAAAAEAAAADAAAAUAEAAAAAAADIAwAA
-AAAAAAEAAAADAAAAYgEAAAAAAADQAwAAAAAAAAEAAAADAAAAZQEAAAAAAADwAwAAAAAA
-AAEAAAADAAAAbgEAAAAAAAD4AwAAAAAAAAEAAAADAAAAcQEAAAAAAAAYBAAAAAAAAAEA
-AAADAAAAeAEAAAAAAAAgBAAAAAAAAAEAAAADAAAAewEAAAAAAABABAAAAAAAAAEAAAAD
-AAAAgQEAAAAAAABIBAAAAAAAAAEAAAADAAAAhAEAAAAAAABoBAAAAAAAAAEAAAADAAAA
-igEAAAAAAABwBAAAAAAAAAEAAAADAAAAjQEAAAAAAACQBAAAAAAAAAEAAAADAAAAlgEA
-AAAAAACYBAAAAAAAAAEAAAADAAAAmQEAAAAAAAC4BAAAAAAAAAEAAAADAAAApAEAAAAA
-AADABAAAAAAAAAEAAAADAAAApwEAAAAAAADgBAAAAAAAAAEAAAADAAAArwEAAAAAAADo
-BAAAAAAAAAEAAAADAAAAsgEAAAAAAAAIBQAAAAAAAAEAAAADAAAAuQEAAAAAAAAQBQAA
-AAAAAAEAAAADAAAAvAEAAAAAAAAwBQAAAAAAAAEAAAADAAAAywEAAAAAAAA4BQAAAAAA
-AAEAAAADAAAAzgEAAAAAAABYBQAAAAAAAAEAAAADAAAA1gEAAAAAAABgBQAAAAAAAAEA
-AAADAAAA2QEAAAAAAACABQAAAAAAAAEAAAADAAAA7AEAAAAAAACIBQAAAAAAAAEAAAAD
-AAAA7wEAAAAAAACoBQAAAAAAAAEAAAADAAAA9wEAAAAAAACwBQAAAAAAAAEAAAADAAAA
-+gEAAAAAAADQBQAAAAAAAAEAAAADAAAAAAIAAAAAAADYBQAAAAAAAAEAAAADAAAAAwIA
-AAAAAAD4BQAAAAAAAAEAAAADAAAADwIAAAAAAAAABgAAAAAAAAEAAAADAAAAEgIAAAAA
-AAAgBgAAAAAAAAEAAAADAAAAGgIAAAAAAAAoBgAAAAAAAAEAAAADAAAAHQIAAAAAAABI
-BgAAAAAAAAEAAAADAAAAJQIAAAAAAABQBgAAAAAAAAEAAAADAAAAKAIAAAAAAABwBgAA
-AAAAAAEAAAADAAAALwIAAAAAAAB4BgAAAAAAAAEAAAADAAAAMgIAAAAAAACYBgAAAAAA
-AAEAAAADAAAAPQIAAAAAAACgBgAAAAAAAAEAAAADAAAAQAIAAAAAAADABgAAAAAAAAEA
-AAADAAAASAIAAAAAAADIBgAAAAAAAAEAAAADAAAASwIAAAAAAADoBgAAAAAAAAEAAAAD
-AAAAUwIAAAAAAADwBgAAAAAAAAEAAAADAAAAVgIAAAAAAAAQBwAAAAAAAAEAAAADAAAA
-XQIAAAAAAAAYBwAAAAAAAAEAAAADAAAAYAIAAAAAAAA4BwAAAAAAAAEAAAADAAAAagIA
-AAAAAABABwAAAAAAAAEAAAADAAAAbQIAAAAAAABgBwAAAAAAAAEAAAADAAAAdgIAAAAA
-AABoBwAAAAAAAAEAAAADAAAAeQIAAAAAAACIBwAAAAAAAAEAAAADAAAAgwIAAAAAAACQ
-BwAAAAAAAAEAAAADAAAAhgIAAAAAAACwBwAAAAAAAAEAAAADAAAAjgIAAAAAAAC4BwAA
-AAAAAAEAAAADAAAAkQIAAAAAAADYBwAAAAAAAAEAAAADAAAAmQIAAAAAAADgBwAAAAAA
-AAEAAAADAAAAnAIAAAAAAAAACAAAAAAAAAEAAAADAAAAogIAAAAAAAAICAAAAAAAAAEA
-AAADAAAApQIAAAAAAAAoCAAAAAAAAAEAAAADAAAArwIAAAAAAAAwCAAAAAAAAAEAAAAD
-AAAAsgIAAAAAAABQCAAAAAAAAAEAAAADAAAAtwIAAAAAAABYCAAAAAAAAAEAAAADAAAA
-ugIAAAAAAAB4CAAAAAAAAAEAAAADAAAAwgIAAAAAAACACAAAAAAAAAEAAAADAAAAxQIA
-AAAAAACgCAAAAAAAAAEAAAADAAAAzAIAAAAAAACoCAAAAAAAAAEAAAADAAAAzwIAAAAA
-AADICAAAAAAAAAEAAAADAAAA1QIAAAAAAADQCAAAAAAAAAEAAAADAAAA2AIAAAAAAADw
-CAAAAAAAAAEAAAADAAAA3gIAAAAAAAD4CAAAAAAAAAEAAAADAAAA4QIAAAAAAAAYCQAA
-AAAAAAEAAAADAAAA6AIAAAAAAAAgCQAAAAAAAAEAAAADAAAA6wIAAAAAAABACQAAAAAA
-AAEAAAADAAAA8gIAAAAAAABICQAAAAAAAAEAAAADAAAA9QIAAAAAAABoCQAAAAAAAAEA
-AAADAAAA/AIAAAAAAABwCQAAAAAAAAEAAAADAAAA/wIAAAAAAACQCQAAAAAAAAEAAAAD
-AAAABgMAAAAAAACYCQAAAAAAAAEAAAADAAAACQMAAAAAAAC4CQAAAAAAAAEAAAADAAAA
-EAMAAAAAAADACQAAAAAAAAEAAAADAAAAEwMAAAAAAADgCQAAAAAAAAEAAAADAAAAGgMA
-AAAAAADoCQAAAAAAAAEAAAADAAAAHQMAAAAAAAAICgAAAAAAAAEAAAADAAAAKAMAAAAA
-AAAQCgAAAAAAAAEAAAADAAAAKwMAAAAAAAAwCgAAAAAAAAEAAAADAAAANwMAAAAAAAA4
-CgAAAAAAAAEAAAADAAAAOgMAAAAAAABYCgAAAAAAAAEAAAADAAAASQMAAAAAAABgCgAA
-AAAAAAEAAAADAAAATAMAAAAAAACACgAAAAAAAAEAAAADAAAAXAMAAAAAAACICgAAAAAA
-AAEAAAADAAAAXwMAAAAAAACoCgAAAAAAAAEAAAADAAAAZgMAAAAAAACwCgAAAAAAAAEA
-AAADAAAAaQMAAAAAAADQCgAAAAAAAAEAAAADAAAAcAMAAAAAAADYCgAAAAAAAAEAAAAD
-AAAAcwMAAAAAAAD4CgAAAAAAAAEAAAADAAAAewMAAAAAAAAACwAAAAAAAAEAAAADAAAA
-fgMAAAAAAAAgCwAAAAAAAAEAAAADAAAAjAMAAAAAAAAoCwAAAAAAAAEAAAADAAAAjwMA
-AAAAAABICwAAAAAAAAEAAAADAAAAmQMAAAAAAABQCwAAAAAAAAEAAAADAAAAnAMAAAAA
-AABwCwAAAAAAAAEAAAADAAAApwMAAAAAAAB4CwAAAAAAAAEAAAADAAAAqgMAAAAAAACY
-CwAAAAAAAAEAAAADAAAAsAMAAAAAAACgCwAAAAAAAAEAAAADAAAAswMAAAAAAADACwAA
-AAAAAAEAAAADAAAAvQMAAAAAAADICwAAAAAAAAEAAAADAAAAwAMAAAAAAADoCwAAAAAA
-AAEAAAADAAAAyQMAAAAAAADwCwAAAAAAAAEAAAADAAAAzAMAAAAAAAAQDAAAAAAAAAEA
-AAADAAAA0wMAAAAAAAAYDAAAAAAAAAEAAAADAAAA1gMAAAAAAAA4DAAAAAAAAAEAAAAD
-AAAA3QMAAAAAAABADAAAAAAAAAEAAAADAAAA4AMAAAAAAABgDAAAAAAAAAEAAAADAAAA
-6AMAAAAAAABoDAAAAAAAAAEAAAADAAAA6wMAAAAAAACIDAAAAAAAAAEAAAADAAAA9wMA
-AAAAAACQDAAAAAAAAAEAAAADAAAA+gMAAAAAAACwDAAAAAAAAAEAAAADAAAABgQAAAAA
-AAC4DAAAAAAAAAEAAAADAAAACQQAAAAAAADYDAAAAAAAAAEAAAADAAAAEAQAAAAAAADg
-DAAAAAAAAAEAAAADAAAAEwQAAAAAAAAADQAAAAAAAAEAAAADAAAAGAQAAAAAAAAIDQAA
-AAAAAAEAAAADAAAAGwQAAAAAAAAoDQAAAAAAAAEAAAADAAAAJAQAAAAAAAAwDQAAAAAA
-AAEAAAADAAAAJwQAAAAAAABQDQAAAAAAAAEAAAADAAAALgQAAAAAAABYDQAAAAAAAAEA
-AAADAAAAMQQAAAAAAAB4DQAAAAAAAAEAAAADAAAANgQAAAAAAACADQAAAAAAAAEAAAAD
-AAAAOQQAAAAAAACgDQAAAAAAAAEAAAADAAAARQQAAAAAAACoDQAAAAAAAAEAAAADAAAA
-SAQAAAAAAADIDQAAAAAAAAEAAAADAAAATwQAAAAAAADQDQAAAAAAAAEAAAADAAAAUgQA
-AAAAAADwDQAAAAAAAAEAAAADAAAAWwQAAAAAAAD4DQAAAAAAAAEAAAADAAAAXgQAAAAA
-AAAYDgAAAAAAAAEAAAADAAAAagQAAAAAAAAgDgAAAAAAAAEAAAADAAAAbQQAAAAAAABA
-DgAAAAAAAAEAAAADAAAAcwQAAAAAAABIDgAAAAAAAAEAAAADAAAAdgQAAAAAAABoDgAA
-AAAAAAEAAAADAAAAfgQAAAAAAABwDgAAAAAAAAEAAAADAAAAgQQAAAAAAACQDgAAAAAA
-AAEAAAADAAAAiAQAAAAAAACYDgAAAAAAAAEAAAADAAAAiwQAAAAAAAC4DgAAAAAAAAEA
-AAADAAAAmAQAAAAAAADADgAAAAAAAAEAAAADAAAAmwQAAAAAAADgDgAAAAAAAAEAAAAD
-AAAApQQAAAAAAADoDgAAAAAAAAEAAAADAAAAqAQAAAAAAAAIDwAAAAAAAAEAAAADAAAA
-uAQAAAAAAAAQDwAAAAAAAAEAAAADAAAAuwQAAAAAAAAwDwAAAAAAAAEAAAADAAAAxAQA
-AAAAAAA4DwAAAAAAAAEAAAADAAAAxwQAAAAAAABYDwAAAAAAAAEAAAADAAAA1AQAAAAA
-AABgDwAAAAAAAAEAAAADAAAA1wQAAAAAAACADwAAAAAAAAEAAAADAAAA3QQAAAAAAACI
-DwAAAAAAAAEAAAADAAAA4AQAAAAAAACoDwAAAAAAAAEAAAADAAAA5wQAAAAAAACwDwAA
-AAAAAAEAAAADAAAA6gQAAAAAAADQDwAAAAAAAAEAAAADAAAA9gQAAAAAAADYDwAAAAAA
-AAEAAAADAAAA+QQAAAAAAAD4DwAAAAAAAAEAAAADAAAA/wQAAAAAAAAAEAAAAAAAAAEA
-AAADAAAAAgUAAAAAAAAgEAAAAAAAAAEAAAADAAAACQUAAAAAAAAoEAAAAAAAAAEAAAAD
-AAAADAUAAAAAAABIEAAAAAAAAAEAAAADAAAAFQUAAAAAAABQEAAAAAAAAAEAAAADAAAA
-GAUAAAAAAABwEAAAAAAAAAEAAAADAAAAKgUAAAAAAAB4EAAAAAAAAAEAAAADAAAALQUA
-AAAAAACYEAAAAAAAAAEAAAADAAAANQUAAAAAAACgEAAAAAAAAAEAAAADAAAAOAUAAAAA
-AADAEAAAAAAAAAEAAAADAAAAPwUAAAAAAADIEAAAAAAAAAEAAAADAAAAQgUAAAAAAADo
-EAAAAAAAAAEAAAADAAAASgUAAAAAAADwEAAAAAAAAAEAAAADAAAATQUAAAAAAAAQEQAA
-AAAAAAEAAAADAAAAYgUAAAAAAAAYEQAAAAAAAAEAAAADAAAAZQUAAAAAAAA4EQAAAAAA
-AAEAAAADAAAAdAUAAAAAAABAEQAAAAAAAAEAAAADAAAAdwUAAAAAAABgEQAAAAAAAAEA
-AAADAAAAhQUAAAAAAABoEQAAAAAAAAEAAAADAAAAiAUAAAAAAACIEQAAAAAAAAEAAAAD
-AAAAkAUAAAAAAACQEQAAAAAAAAEAAAADAAAAkwUAAAAAAACwEQAAAAAAAAEAAAADAAAA
-ngUAAAAAAAC4EQAAAAAAAAEAAAADAAAAoQUAAAAAAADYEQAAAAAAAAEAAAADAAAAqwUA
-AAAAAADgEQAAAAAAAAEAAAADAAAArgUAAAAAAAAAEgAAAAAAAAEAAAADAAAAtwUAAAAA
-AAAIEgAAAAAAAAEAAAADAAAAugUAAAAAAAAoEgAAAAAAAAEAAAADAAAAwAUAAAAAAAAw
-EgAAAAAAAAEAAAADAAAAwwUAAAAAAAA4GAAAAAAAAAEAAAAFAAAAgAEAAAAAAABAGAAA
-AAAAAAEAAAAFAAAAkAEAAAAAAABIGAAAAAAAAAEAAAAFAAAAoAEAAAAAAABQGAAAAAAA
-AAEAAAAFAAAA4AEAAAAAAABYGAAAAAAAAAEAAAAFAAAA8AEAAAAAAABgGAAAAAAAAAEA
-AAAFAAAAAAIAAAAAAABoGAAAAAAAAAEAAAAFAAAAEAIAAAAAAABwGAAAAAAAAAEAAAAF
-AAAAIAIAAAAAAAB4GAAAAAAAAAEAAAAFAAAAYAIAAAAAAACAGAAAAAAAAAEAAAAFAAAA
-cAIAAAAAAACgGAAAAAAAAAEAAAAFAAAAgAEAAAAAAACoGAAAAAAAAAEAAAAFAAAAkAEA
-AAAAAACwGAAAAAAAAAEAAAAFAAAAsAEAAAAAAAC4GAAAAAAAAAEAAAAFAAAA4AEAAAAA
-AADAGAAAAAAAAAEAAAAFAAAA8AEAAAAAAADIGAAAAAAAAAEAAAAFAAAAAAIAAAAAAADQ
-GAAAAAAAAAEAAAAFAAAAEAIAAAAAAADYGAAAAAAAAAEAAAAFAAAAMAIAAAAAAADgGAAA
-AAAAAAEAAAAFAAAAcAIAAAAAAAAIGQAAAAAAAAEAAAAFAAAAgAEAAAAAAAAQGQAAAAAA
-AAEAAAAFAAAAkAEAAAAAAAAYGQAAAAAAAAEAAAAFAAAAoAEAAAAAAAAgGQAAAAAAAAEA
-AAAFAAAA4AEAAAAAAAAoGQAAAAAAAAEAAAAFAAAA8AEAAAAAAAAwGQAAAAAAAAEAAAAF
-AAAAAAIAAAAAAAA4GQAAAAAAAAEAAAAFAAAAEAIAAAAAAABAGQAAAAAAAAEAAAAFAAAA
-IAIAAAAAAABIGQAAAAAAAAEAAAAFAAAAcAIAAAAAAABwGQAAAAAAAAEAAAAFAAAAgAEA
-AAAAAAB4GQAAAAAAAAEAAAAFAAAAkAEAAAAAAACAGQAAAAAAAAEAAAAFAAAAoAEAAAAA
-AACIGQAAAAAAAAEAAAAFAAAA4AEAAAAAAACQGQAAAAAAAAEAAAAFAAAA8AEAAAAAAACY
-GQAAAAAAAAEAAAAFAAAAAAIAAAAAAACgGQAAAAAAAAEAAAAFAAAAEAIAAAAAAACoGQAA
-AAAAAAEAAAAFAAAAIAIAAAAAAACwGQAAAAAAAAEAAAAFAAAAcAIAAAAAAADYGQAAAAAA
-AAEAAAAFAAAAgAEAAAAAAADgGQAAAAAAAAEAAAAFAAAAkAEAAAAAAADoGQAAAAAAAAEA
-AAAFAAAAoAEAAAAAAADwGQAAAAAAAAEAAAAFAAAA4AEAAAAAAAD4GQAAAAAAAAEAAAAF
-AAAAEAIAAAAAAAAAGgAAAAAAAAEAAAAFAAAAIAIAAAAAAAAIGgAAAAAAAAEAAAAFAAAA
-YAIAAAAAAAAQGgAAAAAAAAEAAAAFAAAAcAIAAAAAAAAwGgAAAAAAAAEAAAAFAAAAaAEA
-AAAAAABAGgAAAAAAAAEAAAAFAAAAgAEAAAAAAABIGgAAAAAAAAEAAAAFAAAAkAEAAAAA
-AABQGgAAAAAAAAEAAAAFAAAAoAEAAAAAAABYGgAAAAAAAAEAAAAFAAAA4AEAAAAAAABg
-GgAAAAAAAAEAAAAFAAAA8AEAAAAAAABoGgAAAAAAAAEAAAAFAAAAAAIAAAAAAABwGgAA
-AAAAAAEAAAAFAAAAEAIAAAAAAAB4GgAAAAAAAAEAAAAFAAAAIAIAAAAAAACAGgAAAAAA
-AAEAAAAFAAAAYAIAAAAAAACIGgAAAAAAAAEAAAAFAAAAcAIAAAAAAACoGgAAAAAAAAEA
-AAAFAAAAgAEAAAAAAACwGgAAAAAAAAEAAAAFAAAAkAEAAAAAAAC4GgAAAAAAAAEAAAAF
-AAAAoAEAAAAAAADAGgAAAAAAAAEAAAAFAAAA4AEAAAAAAADIGgAAAAAAAAEAAAAFAAAA
-8AEAAAAAAADQGgAAAAAAAAEAAAAFAAAAAAIAAAAAAADYGgAAAAAAAAEAAAAFAAAAIAIA
-AAAAAADgGgAAAAAAAAEAAAAFAAAAcAIAAAAAAAAQGwAAAAAAAAEAAAAFAAAAgAEAAAAA
-AAAYGwAAAAAAAAEAAAAFAAAAwAEAAAAAAAAgGwAAAAAAAAEAAAAFAAAA4AEAAAAAAAAo
-GwAAAAAAAAEAAAAFAAAA8AEAAAAAAAAwGwAAAAAAAAEAAAAFAAAAAAIAAAAAAAA4GwAA
-AAAAAAEAAAAFAAAAQAIAAAAAAABAGwAAAAAAAAEAAAAFAAAAcAIAAAAAAAB4GwAAAAAA
-AAEAAAAFAAAAgAEAAAAAAACAGwAAAAAAAAEAAAAFAAAAoAEAAAAAAACIGwAAAAAAAAEA
-AAAFAAAA4AEAAAAAAACQGwAAAAAAAAEAAAAFAAAAIAIAAAAAAACYGwAAAAAAAAEAAAAF
-AAAAcAIAAAAAAADgGwAAAAAAAAEAAAAFAAAAgAEAAAAAAADoGwAAAAAAAAEAAAAFAAAA
-wAEAAAAAAADwGwAAAAAAAAEAAAAFAAAA4AEAAAAAAAD4GwAAAAAAAAEAAAAFAAAA8AEA
-AAAAAAAAHAAAAAAAAAEAAAAFAAAAAAIAAAAAAAAIHAAAAAAAAAEAAAAFAAAAEAIAAAAA
-AAAQHAAAAAAAAAEAAAAFAAAAQAIAAAAAAAAYHAAAAAAAAAEAAAAFAAAAcAIAAAAAAABI
-HAAAAAAAAAEAAAAFAAAAgAEAAAAAAABQHAAAAAAAAAEAAAAFAAAAoAEAAAAAAABYHAAA
-AAAAAAEAAAAFAAAA4AEAAAAAAABgHAAAAAAAAAEAAAAFAAAAEAIAAAAAAABoHAAAAAAA
-AAEAAAAFAAAAIAIAAAAAAABwHAAAAAAAAAEAAAAFAAAAcAIAAAAAAAC4HAAAAAAAAAEA
-AAAFAAAAgAEAAAAAAADAHAAAAAAAAAEAAAAFAAAAkAEAAAAAAADIHAAAAAAAAAEAAAAF
-AAAAsAEAAAAAAADQHAAAAAAAAAEAAAAFAAAA4AEAAAAAAADYHAAAAAAAAAEAAAAFAAAA
-8AEAAAAAAADgHAAAAAAAAAEAAAAFAAAAAAIAAAAAAADoHAAAAAAAAAEAAAAFAAAAEAIA
-AAAAAADwHAAAAAAAAAEAAAAFAAAAMAIAAAAAAAD4HAAAAAAAAAEAAAAFAAAAcAIAAAAA
-AAAgHQAAAAAAAAEAAAAFAAAAgAEAAAAAAAAoHQAAAAAAAAEAAAAFAAAAkAEAAAAAAAAw
-HQAAAAAAAAEAAAAFAAAAsAEAAAAAAAA4HQAAAAAAAAEAAAAFAAAA4AEAAAAAAABAHQAA
-AAAAAAEAAAAFAAAA8AEAAAAAAABIHQAAAAAAAAEAAAAFAAAAAAIAAAAAAABQHQAAAAAA
-AAEAAAAFAAAAEAIAAAAAAABYHQAAAAAAAAEAAAAFAAAAMAIAAAAAAABgHQAAAAAAAAEA
-AAAFAAAAcAIAAAAAAACIHQAAAAAAAAEAAAAFAAAAgAEAAAAAAACQHQAAAAAAAAEAAAAF
-AAAAkAEAAAAAAACYHQAAAAAAAAEAAAAFAAAAoAEAAAAAAACgHQAAAAAAAAEAAAAFAAAA
-4AEAAAAAAACoHQAAAAAAAAEAAAAFAAAA8AEAAAAAAACwHQAAAAAAAAEAAAAFAAAAAAIA
-AAAAAAC4HQAAAAAAAAEAAAAFAAAAEAIAAAAAAADAHQAAAAAAAAEAAAAFAAAAMAIAAAAA
-AADIHQAAAAAAAAEAAAAFAAAAcAIAAAAAAADwHQAAAAAAAAEAAAAFAAAAgAEAAAAAAAD4
-HQAAAAAAAAEAAAAFAAAAkAEAAAAAAAAAHgAAAAAAAAEAAAAFAAAAoAEAAAAAAAAIHgAA
-AAAAAAEAAAAFAAAA4AEAAAAAAAAQHgAAAAAAAAEAAAAFAAAA8AEAAAAAAAAYHgAAAAAA
-AAEAAAAFAAAAAAIAAAAAAAAgHgAAAAAAAAEAAAAFAAAAEAIAAAAAAAAoHgAAAAAAAAEA
-AAAFAAAAMAIAAAAAAAAwHgAAAAAAAAEAAAAFAAAAcAIAAAAAAABYHgAAAAAAAAEAAAAF
-AAAAgAEAAAAAAABgHgAAAAAAAAEAAAAFAAAAkAEAAAAAAABoHgAAAAAAAAEAAAAFAAAA
-sAEAAAAAAABwHgAAAAAAAAEAAAAFAAAA4AEAAAAAAAB4HgAAAAAAAAEAAAAFAAAAEAIA
-AAAAAACAHgAAAAAAAAEAAAAFAAAAMAIAAAAAAACIHgAAAAAAAAEAAAAFAAAAcAIAAAAA
-AACwHgAAAAAAAAEAAAAFAAAAaAEAAAAAAADAHgAAAAAAAAEAAAAFAAAAgAEAAAAAAADI
-HgAAAAAAAAEAAAAFAAAAkAEAAAAAAADQHgAAAAAAAAEAAAAFAAAAsAEAAAAAAADYHgAA
-AAAAAAEAAAAFAAAA4AEAAAAAAADgHgAAAAAAAAEAAAAFAAAA8AEAAAAAAADoHgAAAAAA
-AAEAAAAFAAAAAAIAAAAAAADwHgAAAAAAAAEAAAAFAAAAEAIAAAAAAAD4HgAAAAAAAAEA
-AAAFAAAAMAIAAAAAAAAAHwAAAAAAAAEAAAAFAAAAcAIAAAAAAAAoHwAAAAAAAAEAAAAF
-AAAAgAEAAAAAAAAwHwAAAAAAAAEAAAAFAAAAkAEAAAAAAAA4HwAAAAAAAAEAAAAFAAAA
-sAEAAAAAAABAHwAAAAAAAAEAAAAFAAAA4AEAAAAAAABIHwAAAAAAAAEAAAAFAAAA8AEA
-AAAAAABQHwAAAAAAAAEAAAAFAAAAAAIAAAAAAABYHwAAAAAAAAEAAAAFAAAAMAIAAAAA
-AABgHwAAAAAAAAEAAAAFAAAAcAIAAAAAAACQHwAAAAAAAAEAAAAFAAAAgAEAAAAAAACY
-HwAAAAAAAAEAAAAFAAAA0AEAAAAAAACgHwAAAAAAAAEAAAAFAAAA4AEAAAAAAACoHwAA
-AAAAAAEAAAAFAAAA8AEAAAAAAACwHwAAAAAAAAEAAAAFAAAAAAIAAAAAAAC4HwAAAAAA
-AAEAAAAFAAAAUAIAAAAAAADAHwAAAAAAAAEAAAAFAAAAcAIAAAAAAAD4HwAAAAAAAAEA
-AAAFAAAAgAEAAAAAAAAAIAAAAAAAAAEAAAAFAAAA0AEAAAAAAAAIIAAAAAAAAAEAAAAF
-AAAA4AEAAAAAAAAQIAAAAAAAAAEAAAAFAAAAUAIAAAAAAAAYIAAAAAAAAAEAAAAFAAAA
-cAIAAAAAAABgIAAAAAAAAAEAAAAFAAAAgAEAAAAAAABoIAAAAAAAAAEAAAAFAAAA0AEA
-AAAAAABwIAAAAAAAAAEAAAAFAAAA4AEAAAAAAAB4IAAAAAAAAAEAAAAFAAAA8AEAAAAA
-AACAIAAAAAAAAAEAAAAFAAAAAAIAAAAAAACIIAAAAAAAAAEAAAAFAAAAEAIAAAAAAACQ
-IAAAAAAAAAEAAAAFAAAAUAIAAAAAAACYIAAAAAAAAAEAAAAFAAAAcAIAAAAAAADIIAAA
-AAAAAAEAAAAFAAAAgAEAAAAAAADQIAAAAAAAAAEAAAAFAAAA0AEAAAAAAADYIAAAAAAA
-AAEAAAAFAAAA4AEAAAAAAADgIAAAAAAAAAEAAAAFAAAAEAIAAAAAAADoIAAAAAAAAAEA
-AAAFAAAAUAIAAAAAAADwIAAAAAAAAAEAAAAFAAAAcAIAAAAAAAAoIQAAAAAAAAEAAAAF
-AAAAgAIAAAAAAAA4IQAAAAAAAAEAAAAFAAAAigIAAAAAAABIIQAAAAAAAAEAAAAFAAAA
-oAIAAAAAAABoIQAAAAAAAAEAAAABAAAA0TkAAAAAAABwIQAAAAAAAAEAAAABAAAAszkA
-AAAAAAB4IQAAAAAAAAEAAAABAAAAxTkAAAAAAACAIQAAAAAAAAEAAAABAAAA0TkAAAAA
-AACIIQAAAAAAAAEAAAABAAAAuTkAAAAAAACQIQAAAAAAAAEAAAABAAAA0TkAAAAAAACY
-IQAAAAAAAAEAAAABAAAA0TkAAAAAAACgIQAAAAAAAAEAAAABAAAA0TkAAAAAAACoIQAA
-AAAAAAEAAAABAAAAvzkAAAAAAACwIQAAAAAAAAEAAAABAAAA0TkAAAAAAAC4IQAAAAAA
-AAEAAAABAAAA0TkAAAAAAADAIQAAAAAAAAEAAAABAAAA0TkAAAAAAADIIQAAAAAAAAEA
-AAABAAAA0TkAAAAAAADQIQAAAAAAAAEAAAABAAAA0TkAAAAAAADYIQAAAAAAAAEAAAAB
-AAAA0TkAAAAAAADgIQAAAAAAAAEAAAABAAAA0TkAAAAAAADoIQAAAAAAAAEAAAABAAAA
-0TkAAAAAAADwIQAAAAAAAAEAAAABAAAA0TkAAAAAAAD4IQAAAAAAAAEAAAABAAAA0TkA
-AAAAAAAAIgAAAAAAAAEAAAABAAAA0TkAAAAAAAAIIgAAAAAAAAEAAAABAAAA0TkAAAAA
-AAAQIgAAAAAAAAEAAAABAAAA0TkAAAAAAAAYIgAAAAAAAAEAAAABAAAA0TkAAAAAAAAg
-IgAAAAAAAAEAAAABAAAA0TkAAAAAAAAoIgAAAAAAAAEAAAABAAAA0TkAAAAAAAAwIgAA
-AAAAAAEAAAABAAAA0TkAAAAAAAA4IgAAAAAAAAEAAAABAAAA0TkAAAAAAABAIgAAAAAA
-AAEAAAABAAAA0TkAAAAAAABIIgAAAAAAAAEAAAABAAAA0TkAAAAAAABQIgAAAAAAAAEA
-AAABAAAA0TkAAAAAAABYIgAAAAAAAAEAAAABAAAA0TkAAAAAAABgIgAAAAAAAAEAAAAB
-AAAA0TkAAAAAAABoIgAAAAAAAAEAAAABAAAAyzkAAAAAAABwIgAAAAAAAAEAAAABAAAA
-sToAAAAAAAB4IgAAAAAAAAEAAAABAAAAsToAAAAAAACAIgAAAAAAAAEAAAABAAAA1DoA
-AAAAAACIIgAAAAAAAAEAAAABAAAAuDoAAAAAAACQIgAAAAAAAAEAAAABAAAA1DoAAAAA
-AACYIgAAAAAAAAEAAAABAAAA1DoAAAAAAACgIgAAAAAAAAEAAAABAAAA1DoAAAAAAACo
-IgAAAAAAAAEAAAABAAAA1DoAAAAAAACwIgAAAAAAAAEAAAABAAAAvzoAAAAAAAC4IgAA
-AAAAAAEAAAABAAAA1DoAAAAAAADAIgAAAAAAAAEAAAABAAAAxjoAAAAAAADIIgAAAAAA
-AAEAAAABAAAAzToAAAAAAAAIIwAAAAAAAAEAAAACAAAA0CIAAAAAAAAQIwAAAAAAAAEA
-AAACAAAA4CIAAAAAAABIIwAAAAAAAAEAAAACAAAAACMAAAAAAACYJAAAAAAAAAEAAAD4
-AAAAAAAAAAAAAACgJAAAAAAAAAEAAABcAAAAAAAAAAAAAACoJAAAAAAAAAEAAAC0AAAA
-AAAAAAAAAACwJAAAAAAAAAEAAACmAAAAAAAAAAAAAAC4JAAAAAAAAAEAAADFAAAAAAAA
-AAAAAADAJAAAAAAAAAEAAABNAAAAAAAAAAAAAADIJAAAAAAAAAEAAADQAAAAAAAAAAAA
-AADQJAAAAAAAAAEAAABeAQAAAAAAAAAAAADYJAAAAAAAAAEAAAA1AQAAAAAAAAAAAADg
-JAAAAAAAAAEAAACxAAAAAAAAAAAAAADoJAAAAAAAAAEAAAA3AAAAAAAAAAAAAADwJAAA
-AAAAAAEAAAB9AAAAAAAAAAAAAAD4JAAAAAAAAAEAAABQAAAAAAAAAAAAAAAAJQAAAAAA
-AAEAAAAeAAAAAAAAAAAAAAAIJQAAAAAAAAEAAABPAQAAAAAAAAAAAAAQJQAAAAAAAAEA
-AAB3AQAAAAAAAAAAAAAYJQAAAAAAAAEAAAAqAAAAAAAAAAAAAAAgJQAAAAAAAAEAAACE
-AAAAAAAAAAAAAAAoJQAAAAAAAAEAAADwAAAAAAAAAAAAAAAwJQAAAAAAAAEAAAAyAQAA
-AAAAAAAAAAA4JQAAAAAAAAEAAAAmAAAAAAAAAAAAAABAJQAAAAAAAAEAAAA1AAAAAAAA
-AAAAAABIJQAAAAAAAAEAAABgAAAAAAAAAAAAAABQJQAAAAAAAAEAAABkAQAAAAAAAAAA
-AABYJQAAAAAAAAEAAAAFAQAAAAAAAAAAAABgJQAAAAAAAAEAAACnAAAAAAAAAAAAAABo
-JQAAAAAAAAEAAABHAQAAAAAAAAAAAABwJQAAAAAAAAEAAABKAQAAAAAAAAAAAAB4JQAA
-AAAAAAEAAAD1AAAAAAAAAAAAAACAJQAAAAAAAAEAAADOAAAAAAAAAAAAAACIJQAAAAAA
-AAEAAAAmAQAAAAAAAAAAAACQJQAAAAAAAAEAAACHAAAAAAAAAAAAAACYJQAAAAAAAAEA
-AABZAQAAAAAAAAAAAACgJQAAAAAAAAEAAACyAAAAAAAAAAAAAACoJQAAAAAAAAEAAACp
-AAAAAAAAAAAAAACwJQAAAAAAAAEAAAB+AAAAAAAAAAAAAAC4JQAAAAAAAAEAAAChAAAA
-AAAAAAAAAADAJQAAAAAAAAEAAABOAAAAAAAAAAAAAADIJQAAAAAAAAEAAAC6AAAAAAAA
-AAAAAADQJQAAAAAAAAEAAAAiAQAAAAAAAAAAAADYJQAAAAAAAAEAAAD6AAAAAAAAAAAA
-AADgJQAAAAAAAAEAAACbAAAAAAAAAAAAAADoJQAAAAAAAAEAAAAeAQAAAAAAAAAAAADw
-JQAAAAAAAAEAAADXAAAAAAAAAAAAAAD4JQAAAAAAAAEAAAAXAQAAAAAAAAAAAAAAJgAA
-AAAAAAEAAAAvAAAAAAAAAAAAAAAIJgAAAAAAAAEAAACoAAAAAAAAAAAAAAAQJgAAAAAA
-AAEAAABCAQAAAAAAAAAAAAAYJgAAAAAAAAEAAAAIAQAAAAAAAAAAAAAgJgAAAAAAAAEA
-AAAQAQAAAAAAAAAAAAAoJgAAAAAAAAEAAAA2AAAAAAAAAAAAAAAwJgAAAAAAAAEAAABs
-AAAAAAAAAAAAAAA4JgAAAAAAAAEAAAAuAQAAAAAAAAAAAABAJgAAAAAAAAEAAADUAAAA
-AAAAAAAAAABIJgAAAAAAAAEAAABIAAAAAAAAAAAAAABQJgAAAAAAAAEAAAAxAAAAAAAA
-AAAAAABYJgAAAAAAAAEAAACDAAAAAAAAAAAAAABgJgAAAAAAAAEAAAALAAAAAAAAAAAA
-AABoJgAAAAAAAAEAAADiAAAAAAAAAAAAAABwJgAAAAAAAAEAAAAnAQAAAAAAAAAAAAB4
-JgAAAAAAAAEAAABlAQAAAAAAAAAAAACAJgAAAAAAAAEAAABhAAAAAAAAAAAAAACIJgAA
-AAAAAAEAAAANAAAAAAAAAAAAAACQJgAAAAAAAAEAAABLAQAAAAAAAAAAAACYJgAAAAAA
-AAEAAAAEAQAAAAAAAAAAAACgJgAAAAAAAAEAAABVAQAAAAAAAAAAAACoJgAAAAAAAAEA
-AAA9AAAAAAAAAAAAAACwJgAAAAAAAAEAAAAZAQAAAAAAAAAAAAC4JgAAAAAAAAEAAAAT
-AAAAAAAAAAAAAADAJgAAAAAAAAEAAACwAAAAAAAAAAAAAADIJgAAAAAAAAEAAABnAAAA
-AAAAAAAAAADQJgAAAAAAAAEAAADkAAAAAAAAAAAAAADYJgAAAAAAAAEAAADmAAAAAAAA
-AAAAAADgJgAAAAAAAAEAAAC/AAAAAAAAAAAAAADoJgAAAAAAAAEAAABGAQAAAAAAAAAA
-AADwJgAAAAAAAAEAAACuAAAAAAAAAAAAAAD4JgAAAAAAAAEAAABjAQAAAAAAAAAAAAAA
-JwAAAAAAAAEAAAAPAAAAAAAAAAAAAAAIJwAAAAAAAAEAAAA3AQAAAAAAAAAAAAAQJwAA
-AAAAAAEAAACkAAAAAAAAAAAAAAAYJwAAAAAAAAEAAAAOAQAAAAAAAAAAAAAgJwAAAAAA
-AAEAAAD3AAAAAAAAAAAAAAAoJwAAAAAAAAEAAACXAAAAAAAAAAAAAAAwJwAAAAAAAAEA
-AAA4AQAAAAAAAAAAAAA4JwAAAAAAAAEAAAABAAAAQ1MAAAAAAABAJwAAAAAAAAEAAAAt
-AQAAAAAAAAAAAABIJwAAAAAAAAEAAAB2AQAAAAAAAAAAAABQJwAAAAAAAAEAAAAWAQAA
-AAAAAAAAAABgJwAAAAAAAAEAAABCAQAAAAAAAAAAAABoJwAAAAAAAAEAAAAIAQAAAAAA
-AAAAAABwJwAAAAAAAAEAAAAQAQAAAAAAAAAAAAB4JwAAAAAAAAEAAAA2AAAAAAAAAAAA
-AACAJwAAAAAAAAEAAABsAAAAAAAAAAAAAAD4MwAAAAAAAAEAAAAvAQAAAAAAAAAAAAAA
-NAAAAAAAAAEAAABMAQAAAAAAAAAAAAAINAAAAAAAAAEAAABAAQAAAAAAAAAAAAAQNAAA
-AAAAAAEAAABiAQAAAAAAAAAAAAAYNAAAAAAAAAEAAABuAAAAAAAAAAAAAAAgNAAAAAAA
-AAEAAACJAAAAAAAAAAAAAAAoNAAAAAAAAAEAAABkAAAAAAAAAAAAAAAwNAAAAAAAAAEA
-AAAwAAAAAAAAAAAAAAA4NAAAAAAAAAEAAABZAAAAAAAAAAAAAABANAAAAAAAAAEAAABa
-AAAAAAAAAAAAAABINAAAAAAAAAEAAAA0AAAAAAAAAAAAAABQNAAAAAAAAAEAAABSAQAA
-AAAAAAAAAABYNAAAAAAAAAEAAAD5AAAAAAAAAAAAAABgNAAAAAAAAAEAAABtAQAAAAAA
-AAAAAABoNAAAAAAAAAEAAAB5AAAAAAAAAAAAAABwNAAAAAAAAAEAAABcAQAAAAAAAAAA
-AAB4NAAAAAAAAAEAAADtAAAAAAAAAAAAAACANAAAAAAAAAEAAACfAAAAAAAAAAAAAACI
-NAAAAAAAAAEAAACsAAAAAAAAAAAAAACQNAAAAAAAAAEAAAATAQAAAAAAAAAAAACYNAAA
-AAAAAAEAAAAgAAAAAAAAAAAAAACgNAAAAAAAAAEAAADzAAAAAAAAAAAAAACoNAAAAAAA
-AAEAAAAYAAAAAAAAAAAAAACwNAAAAAAAAAEAAABOAQAAAAAAAAAAAAC4NAAAAAAAAAEA
-AAAdAAAAAAAAAAAAAADANAAAAAAAAAEAAAAnAAAAAAAAAAAAAADINAAAAAAAAAEAAACg
-AAAAAAAAAAAAAADQNAAAAAAAAAEAAABhAQAAAAAAAAAAAADYNAAAAAAAAAEAAABQAQAA
-AAAAAAAAAADgNAAAAAAAAAEAAABdAQAAAAAAAAAAAADoNAAAAAAAAAEAAAAjAQAAAAAA
-AAAAAADwNAAAAAAAAAEAAADfAAAAAAAAAAAAAAD4NAAAAAAAAAEAAADqAAAAAAAAAAAA
-AAAANQAAAAAAAAEAAADaAAAAAAAAAAAAAAAINQAAAAAAAAEAAAD9AAAAAAAAAAAAAAAQ
-NQAAAAAAAAEAAAB1AAAAAAAAAAAAAAAYNQAAAAAAAAEAAACPAAAAAAAAAAAAAAAgNQAA
-AAAAAAEAAABrAAAAAAAAAAAAAAAoNQAAAAAAAAEAAAA0AQAAAAAAAAAAAAAwNQAAAAAA
-AAEAAACWAAAAAAAAAAAAAAA4NQAAAAAAAAEAAAA4AAAAAAAAAAAAAABANQAAAAAAAAEA
-AAAkAQAAAAAAAAAAAABINQAAAAAAAAEAAAAgAQAAAAAAAAAAAABQNQAAAAAAAAEAAABy
-AAAAAAAAAAAAAABYNQAAAAAAAAEAAADPAAAAAAAAAAAAAABgNQAAAAAAAAEAAAAaAQAA
-AAAAAAAAAABoNQAAAAAAAAEAAADTAAAAAAAAAAAAAABwNQAAAAAAAAEAAAC3AAAAAAAA
-AAAAAAB4NQAAAAAAAAEAAADSAAAAAAAAAAAAAACANQAAAAAAAAEAAAAqAQAAAAAAAAAA
-AACINQAAAAAAAAEAAADBAAAAAAAAAAAAAACQNQAAAAAAAAEAAAAyAAAAAAAAAAAAAACY
-NQAAAAAAAAEAAABYAAAAAAAAAAAAAACgNQAAAAAAAAEAAADKAAAAAAAAAAAAAACoNQAA
-AAAAAAEAAAAxAQAAAAAAAAAAAACwNQAAAAAAAAEAAAA8AQAAAAAAAAAAAAC4NQAAAAAA
-AAEAAAASAQAAAAAAAAAAAADANQAAAAAAAAEAAAAbAAAAAAAAAAAAAADINQAAAAAAAAEA
-AABUAAAAAAAAAAAAAADQNQAAAAAAAAEAAAAcAQAAAAAAAAAAAADYNQAAAAAAAAEAAACR
-AAAAAAAAAAAAAADgNQAAAAAAAAEAAABIAQAAAAAAAAAAAADoNQAAAAAAAAEAAADGAAAA
-AAAAAAAAAADwNQAAAAAAAAEAAADvAAAAAAAAAAAAAAD4NQAAAAAAAAEAAAAzAAAAAAAA
-AAAAAAAANgAAAAAAAAEAAADrAAAAAAAAAAAAAAAINgAAAAAAAAEAAAAkAAAAAAAAAAAA
-AAAQNgAAAAAAAAEAAABJAAAAAAAAAAAAAAAYNgAAAAAAAAEAAACIAAAAAAAAAAAAAAAg
-NgAAAAAAAAEAAADNAAAAAAAAAAAAAAAoNgAAAAAAAAEAAAC9AAAAAAAAAAAAAAAwNgAA
-AAAAAAEAAAA/AQAAAAAAAAAAAAA4NgAAAAAAAAEAAAC8AAAAAAAAAAAAAABANgAAAAAA
-AAEAAAABAQAAAAAAAAAAAABINgAAAAAAAAEAAAD7AAAAAAAAAAAAAABQNgAAAAAAAAEA
-AAA9AQAAAAAAAAAAAABYNgAAAAAAAAEAAAAKAAAAAAAAAAAAAABgNgAAAAAAAAEAAACY
-AAAAAAAAAAAAAABoNgAAAAAAAAEAAABoAAAAAAAAAAAAAABwNgAAAAAAAAEAAACOAAAA
-AAAAAAAAAAB4NgAAAAAAAAEAAABiAAAAAAAAAAAAAACANgAAAAAAAAEAAADbAAAAAAAA
-AAAAAACINgAAAAAAAAEAAADgAAAAAAAAAAAAAACQNgAAAAAAAAEAAADyAAAAAAAAAAAA
-AACYNgAAAAAAAAEAAAABAAAAUoUAAAAAAACgNgAAAAAAAAEAAAAGAQAAAAAAAAAAAACo
-NgAAAAAAAAEAAAAYAQAAAAAAAAAAAACwNgAAAAAAAAEAAAAzAQAAAAAAAAAAAADANgAA
-AAAAAAEAAAC3AAAAAAAAAAAAAADINgAAAAAAAAEAAADSAAAAAAAAAAAAAADQNgAAAAAA
-AAEAAAAqAQAAAAAAAAAAAADYNgAAAAAAAAEAAADBAAAAAAAAAAAAAADgNgAAAAAAAAEA
-AAAyAAAAAAAAAAAAAADYSgAAAAAAAAEAAAABAAAABbUAAAAAAADgSgAAAAAAAAEAAAAB
-AAAABbUAAAAAAADoSgAAAAAAAAEAAAABAAAALLUAAAAAAADwSgAAAAAAAAEAAAABAAAA
-LLUAAAAAAAD4SgAAAAAAAAEAAAABAAAAU7UAAAAAAAAASwAAAAAAAAEAAAABAAAAU7UA
-AAAAAAAISwAAAAAAAAEAAAABAAAAerUAAAAAAAAQSwAAAAAAAAEAAAABAAAAerUAAAAA
-AAB4TAAAAAAAAAEAAABTAAAAAAAAAAAAAACATAAAAAAAAAEAAAB4AAAAAAAAAAAAAACI
-TAAAAAAAAAEAAABaAQAAAAAAAAAAAACQTAAAAAAAAAEAAABjAAAAAAAAAAAAAACYTAAA
-AAAAAAEAAADJAAAAAAAAAAAAAACgTAAAAAAAAAEAAACrAAAAAAAAAAAAAACoTAAAAAAA
-AAEAAAAJAQAAAAAAAAAAAACwTAAAAAAAAAEAAABMAAAAAAAAAAAAAAC4TAAAAAAAAAEA
-AACUAAAAAAAAAAAAAADATAAAAAAAAAEAAABPAAAAAAAAAAAAAADITAAAAAAAAAEAAADu
-AAAAAAAAAAAAAADQTAAAAAAAAAEAAABFAQAAAAAAAAAAAADYTAAAAAAAAAEAAACCAAAA
-AAAAAAAAAADgTAAAAAAAAAEAAADpAAAAAAAAAAAAAADoTAAAAAAAAAEAAADVAAAAAAAA
-AAAAAADwTAAAAAAAAAEAAAB7AQAAAAAAAAAAAAD4TAAAAAAAAAEAAABzAQAAAAAAAAAA
-AAAATQAAAAAAAAEAAACtAAAAAAAAAAAAAAAITQAAAAAAAAEAAAAwAQAAAAAAAAAAAAAQ
-TQAAAAAAAAEAAAB0AAAAAAAAAAAAAAAYTQAAAAAAAAEAAAAPAQAAAAAAAAAAAAAgTQAA
-AAAAAAEAAAAlAAAAAAAAAAAAAAAoTQAAAAAAAAEAAABEAQAAAAAAAAAAAAAwTQAAAAAA
-AAEAAAA6AQAAAAAAAAAAAAA4TQAAAAAAAAEAAABJAQAAAAAAAAAAAABATQAAAAAAAAEA
-AABXAAAAAAAAAAAAAABITQAAAAAAAAEAAAApAQAAAAAAAAAAAABQTQAAAAAAAAEAAADs
-AAAAAAAAAAAAAABYTQAAAAAAAAEAAADnAAAAAAAAAAAAAABgTQAAAAAAAAEAAAASAAAA
-AAAAAAAAAABoTQAAAAAAAAEAAABTAQAAAAAAAAAAAABwTQAAAAAAAAEAAABzAAAAAAAA
-AAAAAAB4TQAAAAAAAAEAAADRAAAAAAAAAAAAAACATQAAAAAAAAEAAABYAQAAAAAAAAAA
-AACITQAAAAAAAAEAAADLAAAAAAAAAAAAAACQTQAAAAAAAAEAAACMAAAAAAAAAAAAAACY
-TQAAAAAAAAEAAAAdAQAAAAAAAAAAAACgTQAAAAAAAAEAAADlAAAAAAAAAAAAAACoTQAA
-AAAAAAEAAAAQAAAAAAAAAAAAAACwTQAAAAAAAAEAAACTAAAAAAAAAAAAAAC4TQAAAAAA
-AAEAAAAMAAAAAAAAAAAAAADATQAAAAAAAAEAAACNAAAAAAAAAAAAAADITQAAAAAAAAEA
-AAAoAQAAAAAAAAAAAADQTQAAAAAAAAEAAACiAAAAAAAAAAAAAADYTQAAAAAAAAEAAAAL
-AQAAAAAAAAAAAADgTQAAAAAAAAEAAACaAAAAAAAAAAAAAADoTQAAAAAAAAEAAACjAAAA
-AAAAAAAAAADwTQAAAAAAAAEAAAADAQAAAAAAAAAAAAD4TQAAAAAAAAEAAABGAAAAAAAA
-AAAAAAAATgAAAAAAAAEAAAArAQAAAAAAAAAAAAAITgAAAAAAAAEAAAA5AQAAAAAAAAAA
-AAAQTgAAAAAAAAEAAAD/AAAAAAAAAAAAAAAYTgAAAAAAAAEAAAB4AQAAAAAAAAAAAAAg
-TgAAAAAAAAEAAABBAAAAAAAAAAAAAAAoTgAAAAAAAAEAAAC5AAAAAAAAAAAAAAAwTgAA
-AAAAAAEAAACdAAAAAAAAAAAAAAA4TgAAAAAAAAEAAABoAQAAAAAAAAAAAABATgAAAAAA
-AAEAAABEAAAAAAAAAAAAAABITgAAAAAAAAEAAACFAAAAAAAAAAAAAABQTgAAAAAAAAEA
-AABsAQAAAAAAAAAAAABYTgAAAAAAAAEAAAA6AAAAAAAAAAAAAABgTgAAAAAAAAEAAABD
-AAAAAAAAAAAAAABoTgAAAAAAAAEAAAApAAAAAAAAAAAAAABwTgAAAAAAAAEAAAA5AAAA
-AAAAAAAAAAB4TgAAAAAAAAEAAAA+AAAAAAAAAAAAAACATgAAAAAAAAEAAAB3AAAAAAAA
-AAAAAACITgAAAAAAAAEAAAAXAAAAAAAAAAAAAACQTgAAAAAAAAEAAABqAAAAAAAAAAAA
-AACYTgAAAAAAAAEAAADjAAAAAAAAAAAAAACgTgAAAAAAAAEAAABlAAAAAAAAAAAAAACo
-TgAAAAAAAAEAAAARAQAAAAAAAAAAAACwTgAAAAAAAAEAAABnAQAAAAAAAAAAAAC4TgAA
-AAAAAAEAAADDAAAAAAAAAAAAAADATgAAAAAAAAEAAAB7AAAAAAAAAAAAAADITgAAAAAA
-AAEAAABFAAAAAAAAAAAAAADQTgAAAAAAAAEAAAAfAAAAAAAAAAAAAADYTgAAAAAAAAEA
-AAB0AQAAAAAAAAAAAADgTgAAAAAAAAEAAAD8AAAAAAAAAAAAAADoTgAAAAAAAAEAAADE
-AAAAAAAAAAAAAADwTgAAAAAAAAEAAACZAAAAAAAAAAAAAAD4TgAAAAAAAAEAAAAhAAAA
-AAAAAAAAAAAATwAAAAAAAAEAAABbAQAAAAAAAAAAAAAITwAAAAAAAAEAAABmAAAAAAAA
-AAAAAAAQTwAAAAAAAAEAAADIAAAAAAAAAAAAAAAYTwAAAAAAAAEAAAC4AAAAAAAAAAAA
-AAAgTwAAAAAAAAEAAADHAAAAAAAAAAAAAAAoTwAAAAAAAAEAAADYAAAAAAAAAAAAAAAw
-TwAAAAAAAAEAAABxAQAAAAAAAAAAAABATwAAAAAAAAEAAAADAQAAAAAAAAAAAABITwAA
-AAAAAAEAAABGAAAAAAAAAAAAAABQTwAAAAAAAAEAAAArAQAAAAAAAAAAAABYTwAAAAAA
-AAEAAAA5AQAAAAAAAAAAAABgTwAAAAAAAAEAAAD/AAAAAAAAAAAAAADgVQAAAAAAAAEA
-AAABAAAAWtoAAAAAAADoVQAAAAAAAAEAAAABAAAAJdoAAAAAAADwVQAAAAAAAAEAAAAB
-AAAALdoAAAAAAAD4VQAAAAAAAAEAAAABAAAAj9oAAAAAAAAAVgAAAAAAAAEAAAABAAAA
-O9oAAAAAAAAIVgAAAAAAAAEAAAABAAAAh9oAAAAAAABAVgAAAAAAAAEAAAABAAAAMucA
-AAAAAABIVgAAAAAAAAEAAAABAAAAqOYAAAAAAABQVgAAAAAAAAEAAAABAAAA1OYAAAAA
-AABYVgAAAAAAAAEAAAABAAAAK+cAAAAAAABgVgAAAAAAAAEAAAABAAAA3eYAAAAAAABo
-VgAAAAAAAAEAAAABAAAA5uYAAAAAAABwVgAAAAAAAAEAAAABAAAAMucAAAAAAAB4VgAA
-AAAAAAEAAAABAAAAMucAAAAAAACAVgAAAAAAAAEAAAABAAAAMucAAAAAAACIVgAAAAAA
-AAEAAAABAAAAMucAAAAAAACQVgAAAAAAAAEAAAABAAAAMucAAAAAAACYVgAAAAAAAAEA
-AAABAAAAMucAAAAAAACgVgAAAAAAAAEAAAABAAAAMucAAAAAAACoVgAAAAAAAAEAAAAB
-AAAAMucAAAAAAACwVgAAAAAAAAEAAAABAAAAMucAAAAAAAC4VgAAAAAAAAEAAAABAAAA
-MucAAAAAAADAVgAAAAAAAAEAAAABAAAADucAAAAAAACQYgAAAAAAAAEAAAABAAAAoyUB
-AAAAAACYYgAAAAAAAAEAAAABAAAAxSEBAAAAAACgYgAAAAAAAAEAAAABAAAAoCIBAAAA
-AACoYgAAAAAAAAEAAAABAAAAPCQBAAAAAACwYgAAAAAAAAEAAAABAAAAmiQBAAAAAAC4
-YgAAAAAAAAEAAAABAAAAESUBAAAAAAAIcAAAAAAAAAEAAAABAAAAVDABAAAAAAAQcAAA
-AAAAAAEAAAABAAAAWDABAAAAAAAYcAAAAAAAAAEAAAABAAAAXTABAAAAAAAgcAAAAAAA
-AAEAAAABAAAAYjABAAAAAAAocAAAAAAAAAEAAAABAAAAdDABAAAAAAAwcAAAAAAAAAEA
-AAABAAAAdDABAAAAAAA4cAAAAAAAAAEAAAABAAAAZzABAAAAAABAcAAAAAAAAAEAAAAB
-AAAAbDABAAAAAABYfAAAAAAAAAEAAAABAAAAs0ABAAAAAABgfAAAAAAAAAEAAAABAAAA
-mEABAAAAAABofAAAAAAAAAEAAAABAAAAnEABAAAAAABwfAAAAAAAAAEAAAABAAAAoUAB
-AAAAAAB4fAAAAAAAAAEAAAABAAAAs0ABAAAAAACAfAAAAAAAAAEAAAABAAAAs0ABAAAA
-AACIfAAAAAAAAAEAAAABAAAApkABAAAAAACQfAAAAAAAAAEAAAABAAAAq0ABAAAAAADI
-iAAAAAAAAAEAAAABAAAAyVgBAAAAAADQiAAAAAAAAAEAAAABAAAAsVgBAAAAAADYiAAA
-AAAAAAEAAAABAAAAtVgBAAAAAADgiAAAAAAAAAEAAAABAAAAulgBAAAAAADoiAAAAAAA
-AAEAAAABAAAAyVgBAAAAAADwiAAAAAAAAAEAAAABAAAAyVgBAAAAAAD4iAAAAAAAAAEA
-AAABAAAAv1gBAAAAAAAAiQAAAAAAAAEAAAABAAAAxFgBAAAAAAAgAAAAAAAAAAEAAAAD
-AAAAAAAAAAAAAAAoAAAAAAAAAAEAAAADAAAABwAAAAAAAAAwAAAAAAAAAAEAAAADAAAA
-DgAAAAAAAAA4AAAAAAAAAAEAAAADAAAAFQAAAAAAAABAAAAAAAAAAAEAAAADAAAAHAAA
-AAAAAABIAAAAAAAAAAEAAAADAAAAIwAAAAAAAACIAQAAAAAAAAEAAAAFAAAAkAAAAAAA
-AACYAQAAAAAAAAEAAAAFAAAAogAAAAAAAACoAQAAAAAAAAEAAAAFAAAArAAAAAAAAAC4
-AQAAAAAAAAEAAAAFAAAAuAAAAAAAAADIAQAAAAAAAAEAAAAFAAAAwgAAAAAAAADYAQAA
-AAAAAAEAAAAFAAAAzAAAAAAAAADoAQAAAAAAAAEAAAAFAAAA1gAAAAAAAAD4AQAAAAAA
-AAEAAAAFAAAA4gAAAAAAAAAIAgAAAAAAAAEAAAAFAAAA6gAAAAAAAAAYAgAAAAAAAAEA
-AAAFAAAA8AAAAAAAAAAoAgAAAAAAAAEAAAAFAAAAEAEAAAAAAAA4AgAAAAAAAAEAAAAF
-AAAAMAEAAAAAAABIAgAAAAAAAAEAAAAFAAAAQAEAAAAAAABYAgAAAAAAAAEAAAAFAAAA
-UAEAAAAAAABoAgAAAAAAAAEAAAAFAAAAYAEAAAAAAAB4AgAAAAAAAAEAAAAFAAAAZAEA
-AAAAAAAgAAAAAAAAAAEAAAABAAAAAAAAAAAAAAA4AAAAAAAAAAEAAAABAAAAzwAAAAAA
-AABYAAAAAAAAAAEAAAABAAAA/AAAAAAAAAB4AAAAAAAAAAEAAAABAAAA9AEAAAAAAACw
-AAAAAAAAAAEAAAABAAAARQIAAAAAAADIAAAAAAAAAAEAAAABAAAAZgIAAAAAAADgAAAA
-AAAAAAEAAAABAAAAiAMAAAAAAAD4AAAAAAAAAAEAAAABAAAA3AMAAAAAAAAQAQAAAAAA
-AAEAAAABAAAAbQQAAAAAAAAoAQAAAAAAAAEAAAABAAAAxQQAAAAAAABAAQAAAAAAAAEA
-AAABAAAADQUAAAAAAABYAQAAAAAAAAEAAAABAAAAgQUAAAAAAACQAQAAAAAAAAEAAAAB
-AAAAMwYAAAAAAACoAQAAAAAAAAEAAAABAAAA7QYAAAAAAADAAQAAAAAAAAEAAAABAAAA
-HAcAAAAAAADgAQAAAAAAAAEAAAABAAAAgAcAAAAAAAAAAgAAAAAAAAEAAAABAAAAwwcA
-AAAAAAAYAgAAAAAAAAEAAAABAAAA9wgAAAAAAABIAgAAAAAAAAEAAAABAAAAYAkAAAAA
-AABoAgAAAAAAAAEAAAABAAAAzAkAAAAAAACAAgAAAAAAAAEAAAABAAAAEAoAAAAAAACY
-AgAAAAAAAAEAAAABAAAANQoAAAAAAADIAgAAAAAAAAEAAAABAAAA0wwAAAAAAADwAgAA
-AAAAAAEAAAABAAAAtw0AAAAAAAAQAwAAAAAAAAEAAAABAAAAGhAAAAAAAABQAwAAAAAA
-AAEAAAABAAAAohQAAAAAAABoAwAAAAAAAAEAAAABAAAACxUAAAAAAACoAwAAAAAAAAEA
-AAABAAAA9RoAAAAAAADIAwAAAAAAAAEAAAABAAAA0RsAAAAAAAAIBAAAAAAAAAEAAAAB
-AAAAOx0AAAAAAAAwBAAAAAAAAAEAAAABAAAAxh4AAAAAAABwBAAAAAAAAAEAAAABAAAA
-7SEAAAAAAACwBAAAAAAAAAEAAAABAAAAQiQAAAAAAADwBAAAAAAAAAEAAAABAAAAUSgA
-AAAAAAAoBQAAAAAAAAEAAAABAAAAnjUAAAAAAABgBQAAAAAAAAEAAAABAAAAHDYAAAAA
-AAB4BQAAAAAAAAEAAAABAAAAKTYAAAAAAACQBQAAAAAAAAEAAAABAAAAVjYAAAAAAACo
-BQAAAAAAAAEAAAABAAAAgzYAAAAAAADQBQAAAAAAAAEAAAABAAAAEzcAAAAAAAD4BQAA
-AAAAAAEAAAABAAAAuDcAAAAAAAAQBgAAAAAAAAEAAAABAAAA1DcAAAAAAAAoBgAAAAAA
-AAEAAAABAAAABjgAAAAAAABABgAAAAAAAAEAAAABAAAARjgAAAAAAACABgAAAAAAAAEA
-AAABAAAApTkAAAAAAACYBgAAAAAAAAEAAAABAAAA1zkAAAAAAADQBgAAAAAAAAEAAAAB
-AAAASzoAAAAAAADwBgAAAAAAAAEAAAABAAAAYjoAAAAAAAAQBwAAAAAAAAEAAAABAAAA
-4DoAAAAAAAAwBwAAAAAAAAEAAAABAAAA+DoAAAAAAABIBwAAAAAAAAEAAAABAAAAHTsA
-AAAAAABgBwAAAAAAAAEAAAABAAAAVzsAAAAAAACABwAAAAAAAAEAAAABAAAAfTsAAAAA
-AACwBwAAAAAAAAEAAAABAAAA9jwAAAAAAADQBwAAAAAAAAEAAAABAAAAPj0AAAAAAADo
-BwAAAAAAAAEAAAABAAAAcT0AAAAAAAAoCAAAAAAAAAEAAAABAAAAcj4AAAAAAABICAAA
-AAAAAAEAAAABAAAA5j4AAAAAAABoCAAAAAAAAAEAAAABAAAAHj8AAAAAAACICAAAAAAA
-AAEAAAABAAAAlz8AAAAAAACoCAAAAAAAAAEAAAABAAAABEAAAAAAAADoCAAAAAAAAAEA
-AAABAAAAikIAAAAAAAAACQAAAAAAAAEAAAABAAAAskIAAAAAAABACQAAAAAAAAEAAAAB
-AAAAnkYAAAAAAABgCQAAAAAAAAEAAAABAAAAN0cAAAAAAACgCQAAAAAAAAEAAAABAAAA
-qUgAAAAAAADACQAAAAAAAAEAAAABAAAA1EgAAAAAAAAACgAAAAAAAAEAAAABAAAArUkA
-AAAAAAAoCgAAAAAAAAEAAAABAAAAQkoAAAAAAABoCgAAAAAAAAEAAAABAAAAhksAAAAA
-AACICgAAAAAAAAEAAAABAAAAt0sAAAAAAACwCgAAAAAAAAEAAAABAAAAUkwAAAAAAADQ
-CgAAAAAAAAEAAAABAAAAlUwAAAAAAAAoCwAAAAAAAAEAAAABAAAAHE0AAAAAAABoCwAA
-AAAAAAEAAAABAAAANVMAAAAAAACICwAAAAAAAAEAAAABAAAAQ1MAAAAAAACgCwAAAAAA
-AAEAAAABAAAAYFMAAAAAAADQCwAAAAAAAAEAAAABAAAAlFMAAAAAAADoCwAAAAAAAAEA
-AAABAAAAIlQAAAAAAAAQDAAAAAAAAAEAAAABAAAAh1QAAAAAAAAoDAAAAAAAAAEAAAAB
-AAAAvlQAAAAAAABYDAAAAAAAAAEAAAABAAAAlFUAAAAAAABwDAAAAAAAAAEAAAABAAAA
-p1UAAAAAAACIDAAAAAAAAAEAAAABAAAA9lUAAAAAAACgDAAAAAAAAAEAAAABAAAA/VUA
-AAAAAADQDAAAAAAAAAEAAAABAAAAhFYAAAAAAADoDAAAAAAAAAEAAAABAAAAilYAAAAA
-AAAADQAAAAAAAAEAAAABAAAAuFYAAAAAAAAYDQAAAAAAAAEAAAABAAAAUVcAAAAAAAAw
-DQAAAAAAAAEAAAABAAAA2FcAAAAAAABwDQAAAAAAAAEAAAABAAAAhFkAAAAAAACQDQAA
-AAAAAAEAAAABAAAApFkAAAAAAACwDQAAAAAAAAEAAAABAAAAw1kAAAAAAADQDQAAAAAA
-AAEAAAABAAAAJloAAAAAAADoDQAAAAAAAAEAAAABAAAAV1oAAAAAAAAADgAAAAAAAAEA
-AAABAAAAXVoAAAAAAAAYDgAAAAAAAAEAAAABAAAAa1oAAAAAAAA4DgAAAAAAAAEAAAAB
-AAAAkFoAAAAAAABQDgAAAAAAAAEAAAABAAAAvVoAAAAAAABoDgAAAAAAAAEAAAABAAAA
-4VoAAAAAAACADgAAAAAAAAEAAAABAAAADVsAAAAAAACYDgAAAAAAAAEAAAABAAAALFsA
-AAAAAAC4DgAAAAAAAAEAAAABAAAAk1sAAAAAAADQDgAAAAAAAAEAAAABAAAAxlsAAAAA
-AADoDgAAAAAAAAEAAAABAAAA3lsAAAAAAAAADwAAAAAAAAEAAAABAAAADFwAAAAAAAAo
-DwAAAAAAAAEAAAABAAAArlwAAAAAAABADwAAAAAAAAEAAAABAAAAyFwAAAAAAABYDwAA
-AAAAAAEAAAABAAAA01wAAAAAAABwDwAAAAAAAAEAAAABAAAA6VwAAAAAAACIDwAAAAAA
-AAEAAAABAAAAHl0AAAAAAACgDwAAAAAAAAEAAAABAAAAP10AAAAAAAC4DwAAAAAAAAEA
-AAABAAAAgF0AAAAAAADQDwAAAAAAAAEAAAABAAAArV0AAAAAAAD4DwAAAAAAAAEAAAAB
-AAAAH14AAAAAAAAYEAAAAAAAAAEAAAABAAAAPV4AAAAAAABAEAAAAAAAAAEAAAABAAAA
-1F4AAAAAAABgEAAAAAAAAAEAAAABAAAA8l4AAAAAAACIEAAAAAAAAAEAAAABAAAAjF8A
-AAAAAACoEAAAAAAAAAEAAAABAAAArV8AAAAAAADAEAAAAAAAAAEAAAABAAAAs18AAAAA
-AADYEAAAAAAAAAEAAAABAAAAtF8AAAAAAADwEAAAAAAAAAEAAAABAAAAtV8AAAAAAAAQ
-EQAAAAAAAAEAAAABAAAA2V8AAAAAAAAwEQAAAAAAAAEAAAABAAAACGAAAAAAAABoEQAA
-AAAAAAEAAAABAAAAGGAAAAAAAACAEQAAAAAAAAEAAAABAAAAS2AAAAAAAACgEQAAAAAA
-AAEAAAABAAAA4GAAAAAAAAC4EQAAAAAAAAEAAAABAAAADWEAAAAAAADgEQAAAAAAAAEA
-AAABAAAAiGEAAAAAAAD4EQAAAAAAAAEAAAABAAAAj2EAAAAAAAAQEgAAAAAAAAEAAAAB
-AAAAlWEAAAAAAAAoEgAAAAAAAAEAAAABAAAAsGEAAAAAAABYEgAAAAAAAAEAAAABAAAA
-0GEAAAAAAACQEgAAAAAAAAEAAAABAAAABGIAAAAAAACoEgAAAAAAAAEAAAABAAAADGIA
-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
-AAEAAAABAAAAieQAAAAAAACQLwAAAAAAAAEAAAABAAAAw+UAAAAAAACwLwAAAAAAAAEA
-AAABAAAAkuYAAAAAAADQLwAAAAAAAAEAAAABAAAAPOcAAAAAAADwLwAAAAAAAAEAAAAB
-AAAA0OcAAAAAAAAoMAAAAAAAAAEAAAABAAAA6OcAAAAAAABIMAAAAAAAAAEAAAABAAAA
-fegAAAAAAABgMAAAAAAAAAEAAAABAAAApegAAAAAAAB4MAAAAAAAAAEAAAABAAAA0+gA
-AAAAAACgMAAAAAAAAAEAAAABAAAATukAAAAAAAC4MAAAAAAAAAEAAAABAAAAYekAAAAA
-AADQMAAAAAAAAAEAAAABAAAAcukAAAAAAADoMAAAAAAAAAEAAAABAAAAeOkAAAAAAAAA
-MQAAAAAAAAEAAAABAAAAfukAAAAAAAAwMQAAAAAAAAEAAAABAAAAhOkAAAAAAABoMQAA
-AAAAAAEAAAABAAAA+OkAAAAAAACAMQAAAAAAAAEAAAABAAAAAOoAAAAAAACYMQAAAAAA
-AAEAAAABAAAACOoAAAAAAACwMQAAAAAAAAEAAAABAAAAFOoAAAAAAADQMQAAAAAAAAEA
-AAABAAAAROoAAAAAAADwMQAAAAAAAAEAAAABAAAAauoAAAAAAAAQMgAAAAAAAAEAAAAB
-AAAAi+oAAAAAAAAoMgAAAAAAAAEAAAABAAAAoOoAAAAAAABAMgAAAAAAAAEAAAABAAAA
-8uoAAAAAAABYMgAAAAAAAAEAAAABAAAAROsAAAAAAABwMgAAAAAAAAEAAAABAAAAbusA
-AAAAAACIMgAAAAAAAAEAAAABAAAAyOsAAAAAAACgMgAAAAAAAAEAAAABAAAA+OsAAAAA
-AADgMgAAAAAAAAEAAAABAAAA+OwAAAAAAAAgMwAAAAAAAAEAAAABAAAAUPUAAAAAAAA4
-MwAAAAAAAAEAAAABAAAAw/UAAAAAAABYMwAAAAAAAAEAAAABAAAA1vUAAAAAAAB4MwAA
-AAAAAAEAAAABAAAACvYAAAAAAACgMwAAAAAAAAEAAAABAAAAxvcAAAAAAADQMwAAAAAA
-AAEAAAABAAAAlvkAAAAAAAD4MwAAAAAAAAEAAAABAAAANfoAAAAAAAAQNAAAAAAAAAEA
-AAABAAAAUfoAAAAAAAAoNAAAAAAAAAEAAAABAAAAoPoAAAAAAABQNAAAAAAAAAEAAAAB
-AAAAE/sAAAAAAACANAAAAAAAAAEAAAABAAAAvvsAAAAAAADANAAAAAAAAAEAAAABAAAA
-yv8AAAAAAADYNAAAAAAAAAEAAAABAAAAhgABAAAAAAD4NAAAAAAAAAEAAAABAAAAsgAB
-AAAAAAAoNQAAAAAAAAEAAAABAAAAvQMBAAAAAABoNQAAAAAAAAEAAAABAAAAtwgBAAAA
-AACYNQAAAAAAAAEAAAABAAAA3gkBAAAAAADINQAAAAAAAAEAAAABAAAAhAoBAAAAAADo
-NQAAAAAAAAEAAAABAAAACwsBAAAAAAAoNgAAAAAAAAEAAAABAAAAYwwBAAAAAABANgAA
-AAAAAAEAAAABAAAA2wwBAAAAAABYNgAAAAAAAAEAAAABAAAAVw0BAAAAAAB4NgAAAAAA
-AAEAAAABAAAARg4BAAAAAACQNgAAAAAAAAEAAAABAAAAcw4BAAAAAAC4NgAAAAAAAAEA
-AAABAAAAiQ8BAAAAAADQNgAAAAAAAAEAAAABAAAAoQ8BAAAAAADoNgAAAAAAAAEAAAAB
-AAAAmRABAAAAAAAQNwAAAAAAAAEAAAABAAAAUREBAAAAAABANwAAAAAAAAEAAAABAAAA
-ChIBAAAAAACYNwAAAAAAAAEAAAABAAAAVBMBAAAAAADANwAAAAAAAAEAAAABAAAAARQB
-AAAAAADgNwAAAAAAAAEAAAABAAAAOBQBAAAAAAAAOAAAAAAAAAEAAAABAAAAdRQBAAAA
-AAAoOAAAAAAAAAEAAAABAAAApxUBAAAAAABAOAAAAAAAAAEAAAABAAAAFxYBAAAAAABg
-OAAAAAAAAAEAAAABAAAAkBYBAAAAAACAOAAAAAAAAAEAAAABAAAARxoBAAAAAACYOAAA
-AAAAAAEAAAABAAAAVhoBAAAAAACwOAAAAAAAAAEAAAABAAAAahoBAAAAAADIOAAAAAAA
-AAEAAAABAAAAgxoBAAAAAADgOAAAAAAAAAEAAAABAAAAtBoBAAAAAAAIOQAAAAAAAAEA
-AAABAAAADhsBAAAAAAAwOQAAAAAAAAEAAAABAAAAcBwBAAAAAABIOQAAAAAAAAEAAAAB
-AAAAaB0BAAAAAABgOQAAAAAAAAEAAAABAAAAvR0BAAAAAAB4OQAAAAAAAAEAAAABAAAA
-Jh4BAAAAAACQOQAAAAAAAAEAAAABAAAAYR8BAAAAAADAOQAAAAAAAAEAAAABAAAAdB8B
-AAAAAADgOQAAAAAAAAEAAAABAAAAyR8BAAAAAAAAOgAAAAAAAAEAAAABAAAAAiABAAAA
-AAAYOgAAAAAAAAEAAAABAAAAUCABAAAAAAAwOgAAAAAAAAEAAAABAAAAWCABAAAAAABI
-OgAAAAAAAAEAAAABAAAAYCABAAAAAABwOgAAAAAAAAEAAAABAAAAcCEBAAAAAACQOgAA
-AAAAAAEAAAABAAAAoCEBAAAAAACwOgAAAAAAAAEAAAABAAAArSUBAAAAAADQOgAAAAAA
-AAEAAAABAAAAVCYBAAAAAADwOgAAAAAAAAEAAAABAAAAcicBAAAAAAAQOwAAAAAAAAEA
-AAABAAAAHigBAAAAAAA4OwAAAAAAAAEAAAABAAAAyykBAAAAAABgOwAAAAAAAAEAAAAB
-AAAAnCoBAAAAAACAOwAAAAAAAAEAAAABAAAA6yoBAAAAAACgOwAAAAAAAAEAAAABAAAA
-cSsBAAAAAAC4OwAAAAAAAAEAAAABAAAA6SsBAAAAAAD4OwAAAAAAAAEAAAABAAAANC4B
-AAAAAAA4PAAAAAAAAAEAAAABAAAAEy8BAAAAAABoPAAAAAAAAAEAAAABAAAAPzABAAAA
-AACAPAAAAAAAAAEAAAABAAAAejABAAAAAADAPAAAAAAAAAEAAAABAAAA9DUBAAAAAADg
-PAAAAAAAAAEAAAABAAAAezYBAAAAAAAgPQAAAAAAAAEAAAABAAAALToBAAAAAABIPQAA
-AAAAAAEAAAABAAAAjTsBAAAAAABgPQAAAAAAAAEAAAABAAAA9TsBAAAAAACAPQAAAAAA
-AAEAAAABAAAAODwBAAAAAACgPQAAAAAAAAEAAAABAAAAgDwBAAAAAADYPQAAAAAAAAEA
-AAABAAAAMD0BAAAAAAAYPgAAAAAAAAEAAAABAAAADz4BAAAAAABQPgAAAAAAAAEAAAAB
-AAAAg0ABAAAAAABoPgAAAAAAAAEAAAABAAAAuUABAAAAAACoPgAAAAAAAAEAAAABAAAA
-rEcBAAAAAADoPgAAAAAAAAEAAAABAAAAfE4BAAAAAAAAPwAAAAAAAAEAAAABAAAAuU4B
-AAAAAAAYPwAAAAAAAAEAAAABAAAAKk8BAAAAAABYPwAAAAAAAAEAAAABAAAA8k8BAAAA
-AABwPwAAAAAAAAEAAAABAAAAqFABAAAAAACYPwAAAAAAAAEAAAABAAAAo1EBAAAAAAC4
-PwAAAAAAAAEAAAABAAAA61EBAAAAAADwPwAAAAAAAAEAAAABAAAApFIBAAAAAAAwQAAA
-AAAAAAEAAAABAAAAhlMBAAAAAABoQAAAAAAAAAEAAAABAAAA+lUBAAAAAACoQAAAAAAA
-AAEAAAABAAAAnFgBAAAAAADAQAAAAAAAAAEAAAABAAAAz1gBAAAAAADYQAAAAAAAAAEA
-AAABAAAAOFkBAAAAAAAYQQAAAAAAAAEAAAABAAAAW1oBAAAAAAAwQQAAAAAAAAEAAAAB
-AAAAmFoBAAAAAABwQQAAAAAAAAEAAAABAAAAcV8BAAAAAACoQQAAAAAAAAEAAAABAAAA
-+2ABAAAAAADIQQAAAAAAAAEAAAABAAAAQ2EBAAAAAAA=
+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
+AEIOEEIOGEIOIEIOKEEOMEEOOEQOQIMHhgaMBY0EjgOPAgAAAAAAAAAcAAAApAIAAAAA
+AAAAAAAAxAAAAAAAAABEDiBKhgKDAwAAAAAAAAAAAAAAAAAAAAAAR0NDOiAoR05VKSAz
+LjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05V
+KSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAo
+R05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0ND
+OiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAA
+R0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMu
+NAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAz
+LjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05V
+KSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAo
+R05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0ND
+OiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAA
+R0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMu
+NAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAz
+LjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05V
+KSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAo
+R05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0ND
+OiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAA
+R0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMu
+NAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAz
+LjMuNAAALnN5bXRhYgAuc3RydGFiAC5zaHN0cnRhYgAucmVsYS50ZXh0AC5yZWxhLnJv
+ZGF0YQAucm9kYXRhLnN0cjEuMQAucmVsYS5kYXRhAC5yZWxhLmVoX2ZyYW1lAC5ic3MA
+LmNvbW1lbnQALm5vdGUuR05VLXN0YWNrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAQAA
+AAYAAAAAAAAAAAAAAAAAAABAAAAAAAAAANCoAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAA
+AAAAAAAAGwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAiDoDAAAAAABgTgAAAAAAAA4AAAAB
+AAAACAAAAAAAAAAYAAAAAAAAACsAAAABAAAAAgAAAAAAAAAAAAAAAAAAACCpAQAAAAAA
+6JgAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAmAAAABAAAAAAAAAAAAAAAAAAA
+AAAAAADoiAMAAAAAABAsAAAAAAAADgAAAAMAAAAIAAAAAAAAABgAAAAAAAAAMwAAAAEA
+AAAyAAAAAAAAAAAAAAAAAAAACEICAAAAAADIBgAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
+AAAAAAAAAEcAAAABAAAAAwAAAAAAAAAAAAAAAAAAAOBIAgAAAAAA5GAAAAAAAAAAAAAA
+AAAAACAAAAAAAAAAAAAAAAAAAABCAAAABAAAAAAAAAAAAAAAAAAAAAAAAAD4tAMAAAAA
+ADgZAAAAAAAADgAAAAYAAAAIAAAAAAAAABgAAAAAAAAAUgAAAAEAAAACAAAAAAAAAAAA
+AAAAAAAAyKkCAAAAAACITAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAE0AAAAE
+AAAAAAAAAAAAAAAAAAAAAAAAADDOAwAAAAAAKDUAAAAAAAAOAAAACAAAAAgAAAAAAAAA
+GAAAAAAAAABcAAAACAAAAAMAAAAAAAAAAAAAAAAAAABg9gIAAAAAALABAAAAAAAAAAAA
+AAAAAAAgAAAAAAAAAAAAAAAAAAAAYQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAYPYCAAAA
+AACoAwAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAGoAAAAHAAAAAAAAAAAAAAAA
+AAAAAAAAAAj6AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAA
+AwAAAAAAAAAAAAAAAAAAAAAAAAAI+gIAAAAAAHoAAAAAAAAAAAAAAAAAAAABAAAAAAAA
+AAAAAAAAAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAiP4CAAAAAAD4KAAAAAAAAA8A
+AAAJAAAACAAAAAAAAAAYAAAAAAAAAAkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAIAnAwAA
+AAAABBMAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAwABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwADAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAGAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAwAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAIAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAwALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAAAAAAAAAAAAAAAAAAAAAAABAAAA
+EgABAGmIAAAAAAAAcAAAAAAAAAAMAAAAEgABAMKAAAAAAAAABgAAAAAAAAAXAAAAEgAB
+APl4AAAAAAAABgAAAAAAAAAiAAAAEgABAB/yAAAAAAAAVgEAAAAAAAAtAAAAEgABALyA
+AAAAAAAABgAAAAAAAAA4AAAAEgABAGNfAAAAAAAAlwAAAAAAAABDAAAAEgABAB8HAQAA
+AAAAugEAAAAAAABOAAAAEgABAK7JAAAAAAAALwAAAAAAAABZAAAAEgABAFMRAQAAAAAA
+NgEAAAAAAABkAAAAEgABAIxVAAAAAAAA6wAAAAAAAABvAAAAEgABAMxKAQAAAAAA0QAA
+AAAAAAB6AAAAEgABAKmVAAAAAAAAAQAAAAAAAACFAAAAEQAGAKBHAAAAAAAApAEAAAAA
+AACQAAAAEgABAGv2AAAAAAAAIQAAAAAAAACbAAAAEgABAHpXAAAAAAAALgAAAAAAAACm
+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
+AAAACAAAAAAAAACsEQAAEgABAKpsAAAAAAAAZgAAAAAAAAC3EQAAEgABAISXAAAAAAAA
+MAAAAAAAAADCEQAAEgABAGSiAAAAAAAAEwAAAAAAAADNEQAAEgABAPFUAAAAAAAAZAAA
+AAAAAADYEQAAEgABALuAAAAAAAAAAQAAAAAAAADjEQAAEgABANNeAAAAAAAAcgAAAAAA
+AADuEQAAEgABABq9AAAAAAAAQgAAAAAAAAD5EQAAEgABAIf0AAAAAAAAbwAAAAAAAAAE
+EgAAEgABAA3oAAAAAAAAQQAAAAAAAAAPEgAAEgABANGRAAAAAAAANQAAAAAAAAAaEgAA
+EgABADuBAAAAAAAAuQQAAAAAAAAlEgAAEgABABN1AAAAAAAAygIAAAAAAAAwEgAAEgAB
+AHLoAAAAAAAADgAAAAAAAAA7EgAAEgABAC/HAAAAAAAADwAAAAAAAABGEgAAEgABACOB
+AQAAAAAAzgAAAAAAAABREgAAEgABAKPnAAAAAAAANQAAAAAAAABcEgAAEgABADzbAAAA
+AAAAbQAAAAAAAABnEgAAEgABAI4JAQAAAAAAUAIAAAAAAAByEgAAEgABAHg6AQAAAAAA
+GQAAAAAAAAB9EgAAEgABACiIAAAAAAAAQQAAAAAAAACIEgAAEgABAFPZAAAAAAAAcAAA
+AAAAAACTEgAAEgABAGpbAAAAAAAABgAAAAAAAACeEgAAEgABAAuVAAAAAAAABwAAAAAA
+AACpEgAAEgABAF5+AAAAAAAAMgAAAAAAAAC0EgAAEgABAAHnAAAAAAAACwAAAAAAAAC/
+EgAAEgABAOpMAQAAAAAANAIAAAAAAADKEgAAEgABAL0mAQAAAAAA7gAAAAAAAADVEgAA
+EgABALyiAAAAAAAAqQEAAAAAAADgEgAAEgABAG49AAAAAAAAkwAAAAAAAAD5EgAAEgAB
+AJE6AQAAAAAAMQAAAAAAAAAAenowMDViNTg0NgB6ejBkYzE5OGRlAHp6MDAyZGIxMWMA
+enowMmRiZjg3NQB6ejA1YjYzYzY0AHp6MDJkYmIxYjIAenowMmRiMjA1MwB6ejAwMmRi
+YTQyAHp6MGZiYjFlM2YAenowYjc5ZWE5NAB6ejA1YjhjNjVhAHp6MDAxNmQ1NGQAenow
+MDViNDBhZAB6ejA1Yjk0MmVkAHp6MGQ4ZGM2MmMAenowMDE5ZjQ3MAB6ejAyZGQ5NDJk
+AHp6MDJkYmU3M2QAenowMDViNjkyYgB6ejBiNmQyMzI1AHp6MDA1Yjg1M2QAenowMDE2
+ZDkyZQB6ejBjZmIxODc1AHp6MDAyZGIzMWMAenowMmRhYmJhYwB6ejAyZGJjODUxAHp6
+MDAwYjZjNjgAenowMDBiNmJmOAB6ejAwYjZjZjVlAHp6MDE2ZTFkZmQAenowYjZmNTBi
+OAB6ejA2ZTBhNGZlAHp6MDA2N2QyYjEAenowYjZjYTMyNQB6ejAwNWI2Y2ZkAHp6MDE2
+ZTBkZmQAenowMDBiNmY2OABhdGhfaGFsX3Byb2Nlc3Nfbm9pc2VmbG9vcgB6ejAwNWI0
+OGFkAHp6MDJkYmYxYjIAenowMDViODhjYgB6ejAzM2VjOGJmAHp6MGRiNDI1YzUAYXRo
+X2hhbF9kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUAenowMGI2ZjE2MQB6ejA2ZTAwYjhh
+AHp6MDJkYmZjMWQAenowZGM0ZTM5MAB6ejBkYWZlZDg2AHp6MDBiNmUyN2EAenowMmRi
+YmFiMgB6ejBiNmQxZWZmAHp6MDE2ZDkwZGQAenowMmRiZTg1MQB6ejAwNWI2NGZkAHp6
+MDAwYjZkNTIAenowYjZjOWVmZgB6ejAxNmUwMGRkAHp6MDBiNmU4MjIAenowMmRiZDg3
+NQB6ejAyZGIzMWIyAHp6MDBiNzA5MjMAenowMGI2ZDQ1MAB6ejAwMGI2ZDFkAHp6MGI2
+YzIzMjUAenowMmRiZGFiMgB6ejAwMDViNjMyAHp6MDZkZWRkOTMAenowMDE2ZGE1MAB6
+ejAwMDY3ZDMyAHp6MDBiNmQ5MjMAenowMDJkYjUxYwB6ejAxNmRjYmZlAHp6MDBiNzAx
+NDUAenowMDE2ZGVjMQB6ejAwMTZkZjJjAHp6MGI3ZmFkM2UAenowMTZkOTkyMAB6ejAy
+ZGIxYmFjAHp6MGRjNmUzOTAAenowNWI3MDFlMAB6ejAwMGI2YjEwAHp6MGI3MDllZmYA
+enowMTZkZjg5YgBhdGhfaGFsX2F0dGFjaAB6ejA2ZTBmYzBkAHp6MDE2ZGFiMmQAenow
+MmRiMTM1ZAB6ejBlMDQ2ODRiAHp6MDE2ZTI5MWQAenowMDBiNmZlOAB6ejAwY2ZiM2Uw
+AHp6MDAxNmQ5NDgAenowMTZlMjA5YgB6ejBiNzAxZWZmAHp6MDAwYjZjOWQAenowMDA1
+YjVhMgB6ejAyZGIxNzBhAGF0aF9oYWxfY29tcHV0ZXR4dGltZQB6ejAyZGI1YmFjAHp6
+MDA1YjgxM2QAenowMGI2YzkyMwB6ejBiNmI1MGI4AHp6MDA1YjdmOWQAenowYjcwMWQw
+MgB6ejA2ZGZmNDRhAHp6MDJkYjU3NjMAenowNmVlYWY2MAB6ejAxNmUzMThjAHp6MGUw
+MDdjYTEAenowMDJkYWQxZAB6ejAwMmRhZjYyAHp6MGI4M2FkM2UAenowMDBiNmI5MAB6
+ejAxNmQ5ZWZhAHp6MDE2ZGUwNTEAenowMDJkYWIxZAB6ejAwMDViNmIyAHp6MDViN2Yx
+MTQAenowNGFlMDMxZgB6ejAyZGJkZGZkAHp6MDA1NDdmZWQAenowMGI2YmY1ZQB6ejAw
+YjcxNzdkAHp6MDBiNzBmM2QAenowMTZkODkyMAB6ejAyZGIxYWIyAHp6MDAwNWI2MjIA
+enowMDBiNmY3OAB6ejBiNjliMDdjAGF0aF9oYWxfZnJlZQB6ejA1Yjc5YjFiAHp6MGRj
+Mzk4ZGUAenowNWI2YmM2NAB6ejAwYjcwNzNkAHp6MDJkYmViYmQAenowYjVlMzE1MgB6
+ejAxNmRmYmYxAGF0aF9oYWxfbWh6MmllZWUAenowMTZlMTg5YgB6ejBkYzJhNWM1AHp6
+MDAyZGM2MGIAenowNmRmMGI4YQB6ejAyZGIzMzVkAHp6MDBiNmUwYjIAenowYjZjNTNh
+NAB6ejBmNTRkMWIwAHp6MDJkYjBlZTIAenowYjZmZDM2MwB6ejBkOWRjNjJjAHp6MDVi
+NzQxZTAAenowMmRhOWJhYwB6ejBkYzIxZDNhAHp6MDBiNzE3M2QAenowMTZkOWQ0MQB6
+ejAwNWI4NGZkAHp6MDE2ZGUxMWQAenowMDViOGFiZAB6ejAwYjcwMTIzAHp6MDA1YjY1
+MmIAenowMmRiMzg3NQB6ejAxNmUzMDliAHp6MDA1YjYwYjIAenowMmRiMTg3NQB6ejAw
+MmRiODQyAHp6MDJkYjE3NjMAenowYjdkZWE5NAB6ejAwYjcwMTYxAHp6MDE2ZDdkNDEA
+enowMDE2Y2QzMgB6ejA2ZGUwYjhhAHp6MDZkOWRkOTMAenowZGIzZWQ4NgB6ejAwNWI0
+OGVkAHp6MDAyZGM4MGIAenowMDJkYmM0MgB6ejAwYjZmMDIyAHp6MDJkYmE4NTEAenow
+MmRiMzNlZAB6ejAwNWI4MGZkAHp6MDA1YjdmMmUAenowMmRiZmRmZAB6ejAxNmU2NDhh
+AHp6MDAyZGFmZjIAenowMDViNzc5ZAB6ejAwMGI2ZWU4AHp6MDE2ZTQ0OGEAenowMGI2
+ZjZiYwB6ejAxNmRhOTIwAHp6MDViNzgxZTAAenowMDBiNmYxYwB6ejAwMmRjYTBiAHp6
+MDA1YjQ0YWQAenowMmRhZWVlMgB6ejA2ZGRmNDRhAHp6MGZhYzBjOWIAenowYjZmOWVm
+ZgB6ejAwYjZjNmJjAGF0aF9oYWxfYWRkaXRpb25hbF9zd2JhX2JhY2tvZmYAenowMDAy
+ZGI5MgBhdGhfaGFsX3ZlcnNpb24AenowZGM1OThkZQB6ejAyZGJhYzJlAHp6MDJkYjc5
+YWUAenowMDE2ZTUzMgB6ejBiNmNmMDA5AHp6MDAxNmUxMmMAenowMDE2ZDllNAB6ejAw
+MDJkYWVhAHp6MDA1YjVjYjIAenowMTZkYTI1MQB6ejA2ZjZhZjYwAHp6MDZkZmRkOTMA
+YXRoX2hhbF9tYWxsb2MAenowMDBiNmRkMgB6ejAyZGQ5MmFkAHp6MDE2ZGIyNTEAenow
+ZTEwN2NhMQB6ejAwYjZjNzVlAHp6MDE2ZGQwNTEAenowMmRiZDFiMgB6ejAyZGMxNzYz
+AHp6MGI2OTBkNmQAenowMTZkZjA1MQB6ejAwMTZkOTUwAHp6MDBiNzA2YmMAenowMGI2
+ZjA0ZAB6ejAwMTZkODcyAHp6MDZkZWY0NGEAenowMGI2ZThiMgB6ejA1YjhjMmVkAHp6
+MDZmYjk0N2IAenowZWJiMWUzZgB6ejBiNmY5ZDAyAHp6MGQxNGQxYjAAenowYjQ4MDMx
+ZQB6ejAxNmRiYmZlAHp6MDE2ZTU0OGEAenowMDE2ZDg1MAB6ejAwMGI2ZmY4AGF0aF9o
+YWxfbWVtY3B5AHp6MDJkYmNiYmQAenowMTZkYTBkZAB6ejAyZGJiZGZkAHp6MDJkYjI4
+NTEAenowMmRiZGMxZAB6ejA2ZGIwY2YyAHp6MDE2ZWI5YWQAenowMGI2Y2ViYwB6ejBk
+OTQ4NGExAGF0aF9oYWxfcHJvYmUAenowMTZlYTlhZAB6ejBmZDRkMWIwAHp6MDJkYjM3
+NjMAYXRoX2hhbF9idWlsZG9wdHMAenowMmRhZjM1ZAB6ejA2ZGRkZDkzAHp6MDBiNmYw
+YjIAenowZGFkYzYyYwB6ejAxNmRmMjUxAHp6MDE2ZDkyNTEAenowMmRiMDg1MQB6ejBi
+NzIxYWVkAHp6MDY3Y2ZjYWUAenowMDBiNmNmOAB6ejBjOTRkMWIwAHp6MDJkYWZhYjIA
+enowNWI5MmFlZAB6ejA1YjhjM2U0AHp6MDA1YjhjY2IAenowYjZkOWVmZgB6ejAyZGIx
+MWIyAHp6MDJkYmZmYjEAenowMmRiZjc2MwB6ejAwNWI2OGZkAHp6MDA1YjQ0ZWQAenow
+YjcxMWFlZAB6ejAwMTZkNDRkAHp6MGI1ZTMxNjAAenowZDg0ODRhMQB6ejAxNmQ4YjJk
+AHp6MDE2ZTA4OWIAenowMmRiYjg3NQB6ejAyZGFlODUxAHp6MGI4MWVhOTQAenowMTZk
+ZWMxZgB6ejAwYjZmZWJjAHp6MGU4OTQ5MDcAenowMGI2ZWE3YQB6ejAzM2U4ZmJmAHp6
+MGNmYTU4NzUAenowMmRiOTlhZQB6ejAyZGI5YWIyAHp6MDAwYjZiZTgAenowZGU2ODM3
+ZgB6ejAxNmRhYmZlAHp6MDAwYjcwMWMAenowYjcwOWQwMgB6ejA2N2QyNWUyAHp6MDE5
+ZjNhMDEAenowNzAzOTQ3YgBhdGhfaGFsX21lbXplcm8AenowNmRmZmMwZAB6ejBiNjc1
+MGI4AHp6MDE2ZTJkZmQAenowMDBiNmQyMgB6ejA2ZmVhZjYwAHp6MGRjNGE1YzUAenow
+MGI3MGY3ZABhdGhfaGFsX3N3X2JlYWNvbl9yZXNwb25zZV90aW1lAHp6MDAxNmQ2NGQA
+enowOWY2NGI2YQB6ejAwNWI2NTdhAHp6MDZmMzk0N2IAenowNmRhMGNmMgB6ejBiN2Jh
+ZDNlAHp6MDBiNmY5NjEAenowYjY5NzNiYwB6ejAyZGJkMzVkAHp6MDA1Yjg4ZmQAenow
+MmRiYmMxZAB6ejAyZGFmZGZkAHp6MDZkN2RkOTMAYXRoX2hhbF9kZWxheQB6ejAyZGIx
+ZGZkAHp6MDY3ZDJmNDEAenowMmRhZjg3NQB6ejBiN2VkZTZkAHp6MDE2ZDhkNDEAenow
+MDJkYWU5MgB6ejBiN2FkZTZkAHp6MGRhZGIwZGUAenowMmRiYjM1ZAB6ejAyZGIzZGZk
+AHp6MDJkYjUzZWQAenowMTZkY2VhZQB6ejAwMGI2ZGEyAHp6MDAwYjZlMjIAenowNWI4
+MDA0MQB6ejAyZGFjZWUyAHp6MDAxNmQ4NDgAenowMTZkOWIyZAB6ejAwMmRhOTFkAHp6
+MDAxNmUwMmMAenowMGI3MDc3ZAB6ejAwNWI2OTdhAHp6MDAxNmRhZTQAenowMTZlMTA5
+YgB6ejAwNWI0YTJkAHp6MDE2ZGUwZGQAenowMTZkZjBkZAB6ejBkZjA3Y2ExAHp6MDJk
+YmQ3NjMAenowMDBiNmU1MgB6ejA2N2QwYzQ3AHp6MDViNmM2ZGIAenowYzMxNWViNQB6
+ejBkYjFlZDg2AHp6MDZkNDA2ZTAAenowMTZlMDI1MQB6ejAwMDJkYmIyAHp6MDAyZGQ4
+NmQAenowMDE2ZTE0ZAB6ejAyZGI1OWFlAHp6MDA2N2QyMjEAenowMTZkODBkZAB6ejAw
+YjZlMDIyAHp6MDA1Yjg5M2QAenowNWI4MWIxYgB6ejAyZGIxM2VkAHp6MDBiNmQxMjMA
+enowMDBiNmNlOAB6ejA1YjhhYWVkAHp6MGI2ZWQzNjMAenowMmRhZjFiMgB6ejAwMDVi
+NWUyAHp6MDMzZWJmYmYAenowNWI2ODZkYgB6ejAwMGI2ZWY4AHp6MDAwYjZmOWMAenow
+YjcxOWFlZAB6ejAwNWI1OGIyAHp6MDViN2RiMWIAenowYjgyZGU2ZAB6ejAwMTZkNzMy
+AHp6MDJkYWRhYjIAenowZjQ1ZTZlMwBhdGhfaGFsX2luaXRfY2hhbm5lbHMAenowMGI2
+ZDZiYwB6ejBjMTRkMWIwAHp6MDAwMmRiZDIAenowZGE0ODRhMQB6ejAxNmUwYjg3AHp6
+MDViOTAyZWQAenowNWI2N2M2NAB6ejBkYzJlMzkwAHp6MGE2MGQxNDUAenowMmRiYWJi
+ZAB6ejAwMGI2YzFkAHp6MDViOGVhZWQAenowMDViN2I5ZAB6ejAwNWI1NDQ2AHp6MDVi
+NjQ2ZGIAenowMGI2ZjkyMwB6ejBkZDY4MzdmAHp6MDE2ZTEyNTEAenowZGM2YTVjNQB6
+ejAyZGIzNzBhAHp6MDAwNWI2NzIAenowNmRlZmMwZAB6ejAyZGJmMzVkAHp6MDAwYjZj
+NzgAenowMDE2ZDgzMgB6ejAyZGI1NzBhAHp6MDA1YjZkN2EAenowMDJkYjI5MgB6ejAw
+NWI5MGNiAHp6MGI2ZjUzNjMAenowMDViNWM0NgB6ejA2ZDkwY2YyAHp6MDZkOGRkOTMA
+enowMTZkZmI4NwB6ejAwMTZkYTQ4AHp6MDAyZGFmMDAAenowYjY2MzFhOAB6ejAwMmRi
+MDkyAGF0aF9oYWxfZ2V0d2lyZWxlc3Ntb2RlcwB6ejAxNmUxYjg3AAAAAAAGAAAAAAAA
+AAsAAAADAAAAMQAAAAAAAABYAAAAAAAAAAsAAAADAAAARAAAAAAAAACAAAAAAAAAAAsA
+AAADAAAAUQAAAAAAAADFAAAAAAAAAAsAAAADAAAAZAAAAAAAAADTAAAAAAAAAAsAAAAD
+AAAAeAAAAAAAAADjAAAAAAAAAAsAAAADAAAAjAAAAAAAAADsAAAAAAAAAAsAAAADAAAA
+mQAAAAAAAAD1AAAAAAAAAAsAAAADAAAApgAAAAAAAAD+AAAAAAAAAAsAAAADAAAAuQAA
+AAAAAAAHAQAAAAAAAAsAAAADAAAAzAAAAAAAAADPAQAAAAAAAAIAAAB+AAAA/P//////
+///ZAQAAAAAAAAIAAAChAQAA/P/////////jAQAAAAAAAAIAAABLAAAA/P////////+P
+AgAAAAAAAAIAAABMAQAA/P////////8xBQAAAAAAAAIAAADMAAAA/P////////+jBQAA
+AAAAAAIAAADMAAAA/P////////9LBgAAAAAAAAIAAAA0AQAA/P////////9UBgAAAAAA
+AAsAAAACAAAAAAAAAAAAAAByBgAAAAAAAAIAAAA0AQAA/P////////97BgAAAAAAAAsA
+AAACAAAAAAAAAAAAAAAhBwAAAAAAAAIAAABrAAAA/P////////8+BwAAAAAAAAIAAABr
+AAAA/P////////9tBwAAAAAAAAsAAAACAAAACAAAAAAAAAB5CwAAAAAAAAIAAAAQAQAA
+/P////////+YCwAAAAAAAAIAAAA0AQAA/P////////+wCwAAAAAAAAsAAAACAAAA8AAA
+AAAAAAAyDAAAAAAAAAIAAAA0AQAA/P////////9ADAAAAAAAAAsAAAACAAAA8AAAAAAA
+AACsDAAAAAAAAAsAAAACAAAA8AAAAAAAAAA1DQAAAAAAAAsAAAACAAAAAAEAAAAAAAA+
+DQAAAAAAAAsAAAACAAAAIAEAAAAAAADFEAAAAAAAAAIAAADeAAAA/P////////9aFQAA
+AAAAAAIAAAA2AQAA/P////////+cGAAAAAAAAAIAAACLAAAA/P////////+sIQAAAAAA
+AAIAAADeAAAA/P/////////YIQAAAAAAAAIAAAA2AQAA/P////////9lIgAAAAAAAAIA
+AAA2AQAA/P/////////uIgAAAAAAAAIAAAA2AQAA/P////////9YIwAAAAAAAAIAAACL
+AAAA/P////////8hLQAAAAAAAAsAAAACAAAAYAEAAAAAAAAzLQAAAAAAAAsAAAACAAAA
+QAEAAAAAAAA0PAAAAAAAAAsAAAAEAAAAIAoAAAAAAABgPAAAAAAAAAsAAAAEAAAAYAAA
+AAAAAADKPAAAAAAAAAsAAAAEAAAAIAoAAAAAAABOPgAAAAAAAAsAAAAEAAAAIAoAAAAA
+AABlPgAAAAAAAAsAAAAEAAAAIAoAAAAAAACzPgAAAAAAAAsAAAAEAAAAYAAAAAAAAADH
+PgAAAAAAAAsAAAAEAAAAcAAAAAAAAAAGPwAAAAAAAAsAAAAEAAAAgC4AAAAAAAAWPwAA
+AAAAAAsAAAAEAAAAgC4AAAAAAAAjPwAAAAAAAAIAAAD5AAAA/P////////9QPwAAAAAA
+AAsAAAAEAAAAYAAAAAAAAAD8PwAAAAAAAAsAAAAEAAAAYAAAAAAAAAAWQAAAAAAAAAsA
+AAAEAAAAYAAAAAAAAABvQAAAAAAAAAsAAAAEAAAAwAkAAAAAAACgQAAAAAAAAAsAAAAE
+AAAAwAkAAAAAAACBQwAAAAAAAAsAAAACAAAAgAEAAAAAAACIQwAAAAAAAAsAAAACAAAA
+mAEAAAAAAAA3RAAAAAAAAAsAAAAEAAAA4CQAAAAAAABmRAAAAAAAAAsAAAAEAAAAoB4A
+AAAAAACSRAAAAAAAAAsAAAAEAAAAICgAAAAAAADBRAAAAAAAAAsAAAAEAAAAQCsAAAAA
+AADxRAAAAAAAAAsAAAAEAAAA4C0AAAAAAAAhRQAAAAAAAAsAAAAEAAAA4CQAAAAAAABT
+RgAAAAAAAAIAAAA2AQAA/P////////+8RwAAAAAAAAsAAAACAAAAmAEAAAAAAADnRwAA
+AAAAAAsAAAABAAAAwDsAAAAAAACpSQAAAAAAAAIAAAAQAQAA/P////////9+SgAAAAAA
+AAIAAAAQAQAA/P/////////JSgAAAAAAAAIAAAAQAQAA/P////////+nTAAAAAAAAAsA
+AAAEAAAAAEcAAAAAAAArTQAAAAAAAAsAAAAEAAAAYEcAAAAAAAAJTgAAAAAAAAIAAADe
+AAAA/P////////8qTgAAAAAAAAsAAAACAAAAoAEAAAAAAAAyTgAAAAAAAAIAAAD5AAAA
+/P////////+vTgAAAAAAAAIAAABSAQAA/P////////8vTwAAAAAAAAIAAAAyAAAA/P//
+//////9kTwAAAAAAAAIAAABBAQAA/P////////+YTwAAAAAAAAIAAABBAQAA/P//////
+///ETwAAAAAAAAIAAABBAQAA/P////////8XUAAAAAAAAAIAAABBAQAA/P////////9V
+UAAAAAAAAAIAAABBAQAA/P////////8PUQAAAAAAAAsAAACZAAAAAAAAAAAAAAAbUQAA
+AAAAAAsAAAB3AQAAAAAAAAAAAAAnUQAAAAAAAAsAAACDAAAAAAAAAAAAAAB6UwAAAAAA
+AAIAAABBAQAA/P/////////8UwAAAAAAAAIAAACLAAAA/P////////8sVAAAAAAAAAIA
+AACLAAAA/P////////8GVQAAAAAAAAIAAAA0AAAA/P////////8VVQAAAAAAAAIAAAA+
+AQAA/P////////9MVQAAAAAAAAIAAAB+AQAA/P////////9VWgAAAAAAAAIAAAB0AAAA
+/P////////+LWgAAAAAAAAIAAAD5AAAA/P////////+lWgAAAAAAAAIAAAD5AAAA/P//
+///////CWgAAAAAAAAsAAAACAAAAeBYAAAAAAADHWgAAAAAAAAIAAAD5AAAA/P//////
+//8IWwAAAAAAAAIAAABOAAAA/P////////+gWwAAAAAAAAIAAAA6AQAA/P////////+z
+WwAAAAAAAAIAAAB7AAAA/P/////////EXAAAAAAAAAIAAABpAQAA/P////////9tXQAA
+AAAAAAIAAAD5AAAA/P/////////4XgAAAAAAAAIAAAApAAAA/P////////8ZXwAAAAAA
+AAIAAAB1AQAA/P////////9aXwAAAAAAAAIAAAApAAAA/P////////+LXwAAAAAAAAIA
+AAApAAAA/P////////++XwAAAAAAAAIAAAB1AQAA/P////////8PYAAAAAAAAAIAAAAp
+AAAA/P////////+YYAAAAAAAAAIAAAApAAAA/P/////////LYAAAAAAAAAIAAAB1AQAA
+/P////////8iYQAAAAAAAAIAAAApAAAA/P////////9VYQAAAAAAAAIAAAArAQAA/P//
+//////+EYQAAAAAAAAIAAAAfAAAA/P////////+SYQAAAAAAAAIAAABOAQAA/P//////
+///3YQAAAAAAAAIAAABMAQAA/P////////8XYgAAAAAAAAIAAABMAQAA/P////////8d
+YwAAAAAAAAsAAAAEAQAAAAAAAAAAAAArYwAAAAAAAAsAAAAVAAAAAAAAAAAAAAA8YwAA
+AAAAAAIAAABAAQAA/P////////+TYwAAAAAAAAIAAABMAQAA/P////////8/ZgAAAAAA
+AAIAAAAQAQAA/P////////+PZgAAAAAAAAIAAABSAQAA/P////////+haAAAAAAAAAIA
+AADEAAAA/P////////9jaQAAAAAAAAsAAAACAAAAgBYAAAAAAACiaQAAAAAAAAIAAACi
+AQAA/P/////////sagAAAAAAAAIAAABMAQAA/P////////8WawAAAAAAAAIAAABOAAAA
+/P////////8hawAAAAAAAAIAAACgAAAA/P////////9EawAAAAAAAAIAAABcAAAA/P//
+//////9cawAAAAAAAAIAAACGAAAA/P////////+MawAAAAAAAAIAAACcAQAA/P//////
+//+nawAAAAAAAAIAAAAOAAAA/P/////////CawAAAAAAAAIAAAAtAQAA/P////////+5
+bAAAAAAAAAIAAAAMAQAA/P/////////nbAAAAAAAAAIAAABMAQAA/P////////8DbQAA
+AAAAAAIAAABMAQAA/P////////8vbQAAAAAAAAIAAAAMAQAA/P////////+BbQAAAAAA
+AAIAAABMAQAA/P////////+mbQAAAAAAAAIAAABMAQAA/P////////+4bQAAAAAAAAIA
+AAAMAQAA/P////////8EbgAAAAAAAAIAAAAQAQAA/P////////9LbgAAAAAAAAIAAABM
+AQAA/P////////9qbgAAAAAAAAIAAABMAQAA/P////////+MbgAAAAAAAAIAAABMAQAA
+/P////////8DbwAAAAAAAAIAAABMAQAA/P////////8ibwAAAAAAAAIAAABMAQAA/P//
+//////9PbwAAAAAAAAIAAABMAQAA/P////////95bwAAAAAAAAIAAABOAAAA/P//////
+//+nbwAAAAAAAAIAAACgAAAA/P////////+1bwAAAAAAAAIAAABMAQAA/P/////////A
+bwAAAAAAAAIAAACgAAAA/P////////8+cAAAAAAAAAIAAABMAQAA/P////////9VcAAA
+AAAAAAIAAABOAAAA/P////////++cwAAAAAAAAsAAAACAAAA0hsAAAAAAAAsdQAAAAAA
+AAsAAAACAAAA4BsAAAAAAAAxdQAAAAAAAAIAAAD5AAAA/P////////9CdQAAAAAAAAsA
+AAACAAAAwBsAAAAAAABKdQAAAAAAAAIAAAD5AAAA/P////////+mdQAAAAAAAAIAAAAy
+AAAA/P/////////NdQAAAAAAAAIAAAAyAAAA/P////////9adwAAAAAAAAIAAAAyAAAA
+/P////////91dwAAAAAAAAIAAAAyAAAA/P////////+NdwAAAAAAAAIAAAAyAAAA/P//
+//////8VeAAAAAAAAAIAAAAyAAAA/P////////+aeAAAAAAAAAIAAABOAAAA/P//////
+//+yeAAAAAAAAAIAAABMAQAA/P////////+6eAAAAAAAAAIAAABXAAAA/P////////8k
+eQAAAAAAAAIAAACBAQAA/P////////9XeQAAAAAAAAIAAAAqAQAA/P/////////geQAA
+AAAAAAIAAAA2AQAA/P////////8ZegAAAAAAAAIAAADNAAAA/P////////99fQAAAAAA
+AAIAAACuAAAA/P////////+QfQAAAAAAAAIAAABpAQAA/P////////+/fQAAAAAAAAIA
+AABpAQAA/P/////////bfQAAAAAAAAIAAABpAQAA/P/////////ffgAAAAAAAAIAAABM
+AQAA/P////////8WfwAAAAAAAAIAAABOAAAA/P////////8ygQAAAAAAAAIAAAAyAAAA
+/P////////9hgQAAAAAAAAIAAADeAAAA/P////////+CgQAAAAAAAAsAAAACAAAAQBwA
+AAAAAACKgQAAAAAAAAIAAAD5AAAA/P////////8IggAAAAAAAAIAAACyAQAA/P//////
+//9HggAAAAAAAAIAAABMAQAA/P/////////VggAAAAAAAAIAAABMAQAA/P////////8N
+gwAAAAAAAAIAAABiAQAA/P////////9sgwAAAAAAAAIAAABiAQAA/P////////+ngwAA
+AAAAAAIAAABiAQAA/P////////8VhAAAAAAAAAsAAAACAAAAGDEAAAAAAABdhAAAAAAA
+AAIAAACVAQAA/P////////+WhAAAAAAAAAIAAABMAQAA/P////////+9hAAAAAAAAAIA
+AABMAQAA/P/////////1hAAAAAAAAAIAAABiAQAA/P////////8hhQAAAAAAAAsAAADu
+AAAAAAAAAAAAAAAshQAAAAAAAAsAAABDAAAAAAAAAAAAAAA3hQAAAAAAAAsAAADjAAAA
+AAAAAAAAAABHhQAAAAAAAAIAAACdAQAA/P////////9shQAAAAAAAAIAAABiAQAA/P//
+///////OhQAAAAAAAAIAAACAAQAA/P////////8AhgAAAAAAAAIAAAAzAQAA/P//////
+//8IhgAAAAAAAAIAAACLAAAA/P/////////2hgAAAAAAAAIAAABMAQAA/P////////9y
+hwAAAAAAAAIAAADwAAAA/P////////8AiAAAAAAAAAIAAABiAQAA/P////////+hiAAA
+AAAAAAIAAAA0AAAA/P////////+wiAAAAAAAAAIAAAA+AQAA/P/////////QiAAAAAAA
+AAIAAACqAQAA/P////////9YjgAAAAAAAAIAAADcAAAA/P////////9/jgAAAAAAAAIA
+AAD5AAAA/P////////+ZjgAAAAAAAAIAAAD5AAAA/P////////+2jgAAAAAAAAsAAAAC
+AAAAIDEAAAAAAAC7jgAAAAAAAAIAAAD5AAAA/P////////8GjwAAAAAAAAIAAABOAAAA
+/P/////////JjwAAAAAAAAIAAAD1AAAA/P/////////njwAAAAAAAAIAAABZAQAA/P//
+///////6jwAAAAAAAAIAAAA6AAAA/P/////////ckAAAAAAAAAIAAAAaAQAA/P//////
+///6kAAAAAAAAAsAAAACAAAAQDEAAAAAAAAlkQAAAAAAAAIAAAD5AAAA/P////////+h
+kgAAAAAAAAIAAAApAAAA/P////////++kgAAAAAAAAIAAAB1AQAA/P//////////kgAA
+AAAAAAIAAAApAAAA/P////////8wkwAAAAAAAAIAAAApAAAA/P////////9jkwAAAAAA
+AAIAAAB1AQAA/P////////+0kwAAAAAAAAIAAAApAAAA/P////////89lAAAAAAAAAIA
+AAApAAAA/P////////9wlAAAAAAAAAIAAAB1AQAA/P/////////HlAAAAAAAAAIAAAAp
+AAAA/P////////8wlQAAAAAAAAIAAADxAAAA/P////////9ZlQAAAAAAAAIAAAArAQAA
+/P////////+IlQAAAAAAAAIAAAAfAAAA/P////////+WlQAAAAAAAAIAAABOAQAA/P//
+///////UlQAAAAAAAAIAAABMAQAA/P/////////0lQAAAAAAAAIAAABMAQAA/P//////
+//88lwAAAAAAAAsAAADJAAAAAAAAAAAAAABFlwAAAAAAAAsAAAAcAQAAAAAAAAAAAABO
+lwAAAAAAAAsAAAAAAQAAAAAAAAAAAABflwAAAAAAAAIAAABAAQAA/P////////+jlwAA
+AAAAAAIAAABOAAAA/P////////9CmgAAAAAAAAIAAAAQAQAA/P////////9OmwAAAAAA
+AAIAAACyAQAA/P////////9SnAAAAAAAAAIAAAAyAAAA/P////////9knAAAAAAAAAIA
+AAAyAAAA/P////////9znAAAAAAAAAsAAAAEAAAAjFEAAAAAAACRnAAAAAAAAAsAAAAE
+AAAAmFEAAAAAAAC9nAAAAAAAAAsAAAAEAAAAYFAAAAAAAAD3nAAAAAAAAAsAAAACAAAA
+YDEAAAAAAAAonQAAAAAAAAsAAAACAAAAgDkAAAAAAABXnQAAAAAAAAsAAAACAAAAIDQA
+AAAAAABenQAAAAAAAAsAAAACAAAAJDQAAAAAAACLnwAAAAAAAAIAAAA3AQAA/P//////
+//9eoAAAAAAAAAIAAABMAQAA/P////////+IoAAAAAAAAAIAAABOAAAA/P////////+V
+oAAAAAAAAAIAAAAhAAAA/P////////8NoQAAAAAAAAIAAAAiAQAA/P////////+zoQAA
+AAAAAAIAAABWAAAA/P/////////joQAAAAAAAAIAAACnAAAA/P/////////+oQAAAAAA
+AAIAAADlAAAA/P////////8ZogAAAAAAAAIAAAA7AAAA/P////////+GogAAAAAAAAIA
+AABwAQAA/P////////+vogAAAAAAAAIAAABMAQAA/P/////////aogAAAAAAAAIAAABw
+AQAA/P////////9towAAAAAAAAIAAABMAQAA/P////////+iowAAAAAAAAIAAABMAQAA
+/P/////////4owAAAAAAAAIAAABMAQAA/P////////8mpAAAAAAAAAIAAABMAQAA/P//
+//////84pAAAAAAAAAIAAABwAQAA/P////////+OpAAAAAAAAAIAAAAQAQAA/P//////
+//9XpQAAAAAAAAIAAAAhAAAA/P////////9lpQAAAAAAAAIAAABMAQAA/P////////9w
+pQAAAAAAAAIAAAAhAAAA/P/////////+pQAAAAAAAAIAAABMAQAA/P////////8VpgAA
+AAAAAAIAAABOAAAA/P////////9ZpgAAAAAAAAIAAACTAAAA/P////////9xpgAAAAAA
+AAsAAAACAAAAZD0AAAAAAAB+pgAAAAAAAAIAAAAyAAAA/P////////+1pgAAAAAAAAIA
+AAAyAAAA/P/////////dpgAAAAAAAAIAAAAyAAAA/P/////////cpwAAAAAAAAIAAABM
+AQAA/P/////////aqAAAAAAAAAIAAACLAQAA/P////////8HqQAAAAAAAAsAAAACAAAA
+qD4AAAAAAAB2qQAAAAAAAAsAAAACAAAAwD4AAAAAAACCqQAAAAAAAAIAAAACAAAAvD4A
+AAAAAACaqQAAAAAAAAsAAAACAAAAwj4AAAAAAADhqgAAAAAAAAsAAAAEAAAA/FEAAAAA
+AAAAqwAAAAAAAAsAAAAEAAAACFIAAAAAAAAfqwAAAAAAAAsAAAAEAAAAvFIAAAAAAADA
+qwAAAAAAAAsAAAAEAAAARFIAAAAAAADZqwAAAAAAAAIAAAAyAAAA/P/////////4qwAA
+AAAAAAsAAAAEAAAAUFIAAAAAAAANrAAAAAAAAAIAAAAyAAAA/P////////8vrAAAAAAA
+AAIAAAAyAAAA/P////////9FrAAAAAAAAAsAAAAEAAAAXFIAAAAAAABarAAAAAAAAAIA
+AAAyAAAA/P////////94rAAAAAAAAAIAAAAyAAAA/P////////+MrAAAAAAAAAsAAAAE
+AAAAjFIAAAAAAACvrAAAAAAAAAsAAAAEAAAAwFEAAAAAAADbrgAAAAAAAAIAAADxAAAA
+/P////////+xsQAAAAAAAAIAAAAYAAAA/P////////9FsgAAAAAAAAsAAAAFAAAAAAAA
+AAAAAABKsgAAAAAAAAIAAAA2AQAA/P////////9WsgAAAAAAAAsAAAAFAAAAIAEAAAAA
+AABbsgAAAAAAAAIAAAA2AQAA/P////////9isgAAAAAAAAsAAAAFAAAACAAAAAAAAABp
+sgAAAAAAAAsAAAAFAAAAiAAAAAAAAACMsgAAAAAAAAIAAAAFAAAAAgAAAAAAAACTsgAA
+AAAAAAIAAAAFAAAA/P////////+csgAAAAAAAAIAAAAFAAAA/v////////+qsgAAAAAA
+AAIAAAAFAAAAAgAAAAAAAADOsgAAAAAAAAIAAAAFAAAAAgAAAAAAAADdsgAAAAAAAAIA
+AAAFAAAAAgAAAAAAAADvsgAAAAAAAAIAAAAFAAAAAgAAAAAAAAASswAAAAAAAAIAAAAF
+AAAAAgAAAAAAAAA4swAAAAAAAAIAAAAFAAAAAgAAAAAAAABGswAAAAAAAAIAAAAFAAAA
+AgAAAAAAAABPswAAAAAAAAIAAAAFAAAAAgAAAAAAAAC8swAAAAAAAAsAAAAFAAAAIAEA
+AAAAAAD8swAAAAAAAAIAAAAFAAAAAgAAAAAAAACqtAAAAAAAAAsAAAAFAAAAIAEAAAAA
+AADJtAAAAAAAAAIAAAAFAAAAAgAAAAAAAADjtAAAAAAAAAsAAAAFAAAAIAEAAAAAAADp
+tAAAAAAAAAEAAAAFAAAAHgEAAAAAAAAUtQAAAAAAAAsAAAAFAAAAIgEAAAAAAAAbtQAA
+AAAAAAsAAAAFAAAAIAEAAAAAAAC5tQAAAAAAAAsAAAAFAAAAoAEAAAAAAAD7tQAAAAAA
+AAIAAAAoAQAA/P////////9StwAAAAAAAAsAAAACAAAA+D4AAAAAAAB4uAAAAAAAAAsA
+AAACAAAA6D4AAAAAAACfuQAAAAAAAAIAAABxAAAA/P////////8jvQAAAAAAAAIAAAAC
+AAAAQD8AAAAAAAA+vQAAAAAAAAsAAAACAAAASD8AAAAAAADRvgAAAAAAAAsAAAACAAAA
+SD8AAAAAAAD/vgAAAAAAAAsAAAACAAAAQD8AAAAAAAAGvwAAAAAAAAsAAAACAAAASD8A
+AAAAAABUvwAAAAAAAAIAAAACAAAAPD8AAAAAAABxvwAAAAAAAAIAAAACAAAAPD8AAAAA
+AAB+vwAAAAAAAAsAAAACAAAAQD8AAAAAAACFvwAAAAAAAAsAAAACAAAASD8AAAAAAACk
+wAAAAAAAAAIAAAAGAQAA/P////////+3wAAAAAAAAAIAAAAaAQAA/P/////////uwAAA
+AAAAAAIAAAAaAQAA/P////////8ZwQAAAAAAAAIAAAAaAQAA/P////////9ZwQAAAAAA
+AAIAAACBAQAA/P////////+MwQAAAAAAAAIAAAAqAQAA/P////////8lwgAAAAAAAAIA
+AAA2AQAA/P////////9lwgAAAAAAAAIAAABnAAAA/P/////////QxQAAAAAAAAIAAAA+
+AQAA/P/////////WxQAAAAAAAAIAAAA0AAAA/P/////////nxQAAAAAAAAIAAADPAAAA
+/P/////////FxwAAAAAAAAIAAACRAQAA/P/////////TxwAAAAAAAAIAAABMAQAA/P//
+///////DygAAAAAAAAIAAAAyAAAA/P/////////WywAAAAAAAAIAAADeAAAA/P//////
+///8ywAAAAAAAAsAAAACAAAAYEAAAAAAAAAEzAAAAAAAAAIAAAD5AAAA/P////////+0
+zAAAAAAAAAsAAAACAAAARFUAAAAAAAC5zAAAAAAAAAIAAAD5AAAA/P/////////rzAAA
+AAAAAAIAAABTAAAA/P////////8RzQAAAAAAAAIAAACeAQAA/P////////98zQAAAAAA
+AAIAAACoAQAA/P/////////JzQAAAAAAAAIAAAAeAAAA/P/////////vzQAAAAAAAAIA
+AABHAAAA/P////////8TzwAAAAAAAAIAAACnAQAA/P////////+QzwAAAAAAAAIAAACn
+AQAA/P////////+2zwAAAAAAAAIAAACnAQAA/P/////////pzwAAAAAAAAIAAACnAQAA
+/P////////8t0AAAAAAAAAIAAACnAQAA/P////////+Z0AAAAAAAAAsAAAACAAAAOFUA
+AAAAAACg0AAAAAAAAAsAAAACAAAAPlUAAAAAAADs0AAAAAAAAAIAAACVAQAA/P//////
+//970QAAAAAAAAIAAABMAQAA/P////////+D0QAAAAAAAAIAAABHAAAA/P////////+i
+0QAAAAAAAAIAAABMAQAA/P/////////R0QAAAAAAAAIAAACnAQAA/P/////////30QAA
+AAAAAAsAAAAKAQAAAAAAAAAAAAAC0gAAAAAAAAsAAAC5AAAAAAAAAAAAAAAK0gAAAAAA
+AAIAAABGAQAA/P////////9C0gAAAAAAAAIAAADVAAAA/P////////9h0gAAAAAAAAIA
+AACyAAAA/P////////+C0gAAAAAAAAIAAAClAQAA/P////////+P0gAAAAAAAAIAAACJ
+AQAA/P////////+t0gAAAAAAAAIAAAAvAQAA/P/////////S0gAAAAAAAAIAAACnAQAA
+/P////////8w0wAAAAAAAAIAAADAAAAA/P////////9J0wAAAAAAAAIAAACIAAAA/P//
+//////9y0wAAAAAAAAIAAAB4AAAA/P////////+N0wAAAAAAAAIAAAC5AAAA/P//////
+//+V0wAAAAAAAAIAAABIAAAA/P////////+n0wAAAAAAAAIAAACeAQAA/P////////+2
+0wAAAAAAAAIAAAAzAQAA/P////////++0wAAAAAAAAIAAACLAAAA/P////////+s1AAA
+AAAAAAIAAABMAQAA/P////////+Z2AAAAAAAAAIAAAC4AAAA/P////////+t2AAAAAAA
+AAsAAAABAAAAkdgAAAAAAAC02AAAAAAAAAsAAACpAQAAAAAAAAAAAAAW2QAAAAAAAAIA
+AAC4AAAA/P////////+L2QAAAAAAAAIAAAA0AAAA/P////////+a2QAAAAAAAAIAAAA+
+AQAA/P////////+62QAAAAAAAAIAAACdAAAA/P////////942wAAAAAAAAIAAABOAAAA
+/P////////+X3AAAAAAAAAIAAADmAAAA/P////////9J4QAAAAAAAAsAAAACAAAAUFUA
+AAAAAAAB4wAAAAAAAAIAAAA7AQAA/P////////8v5AAAAAAAAAIAAAA7AQAA/P//////
+//935AAAAAAAAAIAAAD5AAAA/P////////+R5AAAAAAAAAIAAAD5AAAA/P////////+2
+5AAAAAAAAAIAAAD5AAAA/P/////////Q5AAAAAAAAAIAAAD5AAAA/P////////9L5gAA
+AAAAAAsAAAACAAAAgFUAAAAAAAB25gAAAAAAAAIAAAD5AAAA/P////////+l6AAAAAAA
+AAIAAAARAAAA/P/////////Z6AAAAAAAAAIAAAApAAAA/P/////////66AAAAAAAAAIA
+AAB1AQAA/P////////876QAAAAAAAAIAAAApAAAA/P////////9s6QAAAAAAAAIAAAAp
+AAAA/P////////+f6QAAAAAAAAIAAAB1AQAA/P/////////w6QAAAAAAAAIAAAApAAAA
+/P////////956gAAAAAAAAIAAAApAAAA/P////////+s6gAAAAAAAAIAAAB1AQAA/P//
+//////8D6wAAAAAAAAIAAAApAAAA/P////////+V6wAAAAAAAAIAAAB1AQAA/P//////
+//977AAAAAAAAAIAAAAoAAAA/P////////+r7AAAAAAAAAIAAAAaAAAA/P/////////J
+7gAAAAAAAAIAAAAaAAAA/P////////+37wAAAAAAAAsAAAACAAAAoFUAAAAAAADD7wAA
+AAAAAAIAAAACAAAAnFUAAAAAAADb7wAAAAAAAAsAAAACAAAAolUAAAAAAAAI8AAAAAAA
+AAsAAAACAAAA0FUAAAAAAADB8QAAAAAAAAIAAACRAAAA/P/////////c8QAAAAAAAAsA
+AAACAAAAwFYAAAAAAAAM8gAAAAAAAAIAAAArAQAA/P////////878gAAAAAAAAsAAAAC
+AAAAIFcAAAAAAAA88wAAAAAAAAsAAAACAAAAAFcAAAAAAABD8wAAAAAAAAIAAACrAAAA
+/P////////9s8wAAAAAAAAIAAAAfAAAA/P////////968wAAAAAAAAIAAABOAQAA/P//
+//////+08wAAAAAAAAIAAABMAQAA/P/////////U8wAAAAAAAAIAAABMAQAA/P//////
+//9p9QAAAAAAAAsAAAAvAAAAAAAAAAAAAACX9QAAAAAAAAsAAAC2AAAAAAAAAAAAAACg
+9QAAAAAAAAsAAABlAQAAAAAAAAAAAACp9QAAAAAAAAsAAADgAAAAAAAAAAAAAACy9QAA
+AAAAAAsAAAAZAAAAAAAAAAAAAAC79QAAAAAAAAsAAAByAQAAAAAAAAAAAADE9QAAAAAA
+AAsAAADnAAAAAAAAAAAAAADN9QAAAAAAAAsAAAD0AAAAAAAAAAAAAADe9QAAAAAAAAIA
+AABAAQAA/P////////8j9gAAAAAAAAIAAABOAAAA/P////////9V9gAAAAAAAAIAAAAz
+AAAA/P////////9d9gAAAAAAAAIAAADsAAAA/P////////9l9gAAAAAAAAIAAADrAAAA
+/P////////+D9gAAAAAAAAIAAACKAAAA/P/////////n+AAAAAAAAAIAAACaAAAA/P//
+///////6+AAAAAAAAAIAAAB1AAAA/P////////+m+QAAAAAAAAIAAACeAQAA/P//////
+//+++QAAAAAAAAIAAAAQAQAA/P////////8h+gAAAAAAAAIAAADZAAAA/P////////8y
++gAAAAAAAAIAAADsAAAA/P////////+v+gAAAAAAAAIAAAAPAAAA/P////////8c+wAA
+AAAAAAIAAABiAAAA/P////////8k+wAAAAAAAAIAAABQAAAA/P////////8v+wAAAAAA
+AAIAAACoAQAA/P/////////++wAAAAAAAAsAAAACAAAAIFgAAAAAAAAw/AAAAAAAAAIA
+AABMAQAA/P////////9G/AAAAAAAAAsAAAACAAAAgFoAAAAAAABz/AAAAAAAAAsAAAAC
+AAAAhFoAAAAAAACJ/AAAAAAAAAIAAABMAQAA/P/////////H/AAAAAAAAAIAAAAmAQAA
+/P////////9P/gAAAAAAAAIAAABeAAAA/P////////90/gAAAAAAAAIAAABYAQAA/P//
+///////6/gAAAAAAAAIAAAChAAAA/P////////8F/wAAAAAAAAIAAAAZAQAA/P//////
+//8S/wAAAAAAAAIAAABbAQAA/P////////+m/wAAAAAAAAIAAAAoAAAA/P////////+9
+AAEAAAAAAAIAAAC9AAAA/P/////////eAAEAAAAAAAIAAAA2AAAA/P/////////pAAEA
+AAAAAAIAAABhAAAA/P/////////IAQEAAAAAAAIAAABMAQAA/P/////////6AQEAAAAA
+AAIAAABMAQAA/P////////+fAgEAAAAAAAIAAABSAAAA/P/////////yAgEAAAAAAAIA
+AACUAAAA/P////////9aAwEAAAAAAAIAAADFAAAA/P////////9xAwEAAAAAAAIAAABO
+AAAA/P////////99AwEAAAAAAAIAAACmAAAA/P////////8IBAEAAAAAAAIAAAAoAQAA
+/P////////95BQEAAAAAAAIAAABGAAAA/P////////+VBQEAAAAAAAIAAAAwAAAA/P//
+//////+xBQEAAAAAAAIAAABKAAAA/P/////////8BQEAAAAAAAIAAAA/AQAA/P//////
+//9cBgEAAAAAAAIAAABNAAAA/P////////9tBgEAAAAAAAIAAABzAQAA/P////////89
+BwEAAAAAAAIAAAAQAQAA/P////////9ZBwEAAAAAAAIAAAC0AQAA/P////////+tBwEA
+AAAAAAIAAABMAQAA/P/////////QBwEAAAAAAAIAAAC9AAAA/P////////8kCAEAAAAA
+AAIAAABMAQAA/P////////8yCAEAAAAAAAIAAABeAAAA/P////////+hCAEAAAAAAAIA
+AAChAAAA/P////////+sCAEAAAAAAAIAAAAZAQAA/P////////9uCQEAAAAAAAIAAACe
+AQAA/P/////////RCQEAAAAAAAIAAACeAQAA/P////////+KCwEAAAAAAAIAAABMAQAA
+/P////////+kCwEAAAAAAAIAAABMAQAA/P/////////5CwEAAAAAAAIAAAAQAQAA/P//
+///////aDQEAAAAAAAIAAADZAAAA/P/////////PDgEAAAAAAAIAAABMAQAA/P//////
+///nDgEAAAAAAAIAAABOAAAA/P////////8MDwEAAAAAAAIAAACeAQAA/P/////////N
+DwEAAAAAAAIAAABsAAAA/P////////8sEAEAAAAAAAIAAAArAQAA/P////////9EEQEA
+AAAAAAIAAAAyAAAA/P////////9qFAEAAAAAAAIAAAARAAAA/P////////8vFgEAAAAA
+AAIAAADTAAAA/P////////8NHgEAAAAAAAIAAABeAAAA/P////////86HgEAAAAAAAIA
+AAA2AQAA/P////////9LHgEAAAAAAAIAAAA2AQAA/P////////98HgEAAAAAAAsAAAAC
+AAAAoGAAAAAAAADPIQEAAAAAAAIAAAAYAAAA/P////////9gIwEAAAAAAAIAAAAoAQAA
+/P////////8cJwEAAAAAAAsAAAACAAAAqmAAAAAAAADQJwEAAAAAAAIAAAD5AAAA/P//
+//////8YKQEAAAAAAAIAAABvAQAA/P////////9ZKgEAAAAAAAIAAABvAQAA/P//////
+///sKwEAAAAAAAIAAAACAAAAQGIAAAAAAAAALAEAAAAAAAsAAAACAAAASGIAAAAAAAAg
+LAEAAAAAAAIAAAACAAAAwGAAAAAAAAAwLAEAAAAAAAsAAAACAAAAyGAAAAAAAAC9LgEA
+AAAAAAsAAAACAAAAwGAAAAAAAADELgEAAAAAAAsAAAACAAAAQGIAAAAAAAB1MAEAAAAA
+AAIAAAAyAAAA/P////////9YMQEAAAAAAAIAAABfAAAA/P////////+aMQEAAAAAAAIA
+AABrAAAA/P/////////GMQEAAAAAAAIAAABfAAAA/P////////8dMgEAAAAAAAIAAABr
+AAAA/P////////9ZMgEAAAAAAAIAAABrAAAA/P////////9KMwEAAAAAAAIAAADmAAAA
+/P////////+nMwEAAAAAAAIAAADmAAAA/P/////////3MwEAAAAAAAIAAACBAQAA/P//
+//////80NAEAAAAAAAIAAAAqAQAA/P////////8zNQEAAAAAAAIAAAA2AQAA/P//////
+//9+NQEAAAAAAAIAAABbAAAA/P/////////DOAEAAAAAAAIAAAA+AQAA/P/////////J
+OAEAAAAAAAIAAAA0AAAA/P/////////YOAEAAAAAAAIAAADPAAAA/P/////////yOgEA
+AAAAAAIAAAC0AQAA/P////////8AOwEAAAAAAAIAAABMAQAA/P////////8QOwEAAAAA
+AAIAAAC0AQAA/P////////+8OwEAAAAAAAIAAABMAQAA/P/////////mOwEAAAAAAAIA
+AABMAQAA/P/////////xOwEAAAAAAAIAAAC0AQAA/P////////+cPwEAAAAAAAIAAACf
+AQAA/P/////////8PwEAAAAAAAIAAACfAQAA/P/////////KQAEAAAAAAAIAAAA2AQAA
+/P////////+yQQEAAAAAAAIAAAAzAAAA/P/////////cQQEAAAAAAAIAAACKAAAA/P//
+//////8yQgEAAAAAAAsAAAACAAAAsGMAAAAAAAAdRgEAAAAAAAIAAAB4AAAA/P//////
+//8lRgEAAAAAAAIAAACNAQAA/P////////81RgEAAAAAAAIAAADqAAAA/P////////9O
+RgEAAAAAAAIAAACNAQAA/P////////9eRgEAAAAAAAIAAADqAAAA/P////////+GRgEA
+AAAAAAIAAAAzAAAA/P////////+NRgEAAAAAAAIAAACNAQAA/P////////+dRgEAAAAA
+AAIAAADqAAAA/P////////9VRwEAAAAAAAIAAACfAQAA/P/////////yRwEAAAAAAAIA
+AACrAAAA/P////////8bSAEAAAAAAAIAAACrAAAA/P////////8xSAEAAAAAAAIAAAA0
+AQAA/P////////9RSAEAAAAAAAIAAACrAAAA/P////////9pSAEAAAAAAAIAAACrAAAA
+/P/////////sSAEAAAAAAAIAAAA0AQAA/P////////8MSQEAAAAAAAIAAACrAAAA/P//
+//////94SQEAAAAAAAIAAACrAAAA/P////////+KSQEAAAAAAAIAAACrAAAA/P//////
+//+cSQEAAAAAAAIAAACrAAAA/P////////+uSQEAAAAAAAIAAACrAAAA/P/////////A
+SQEAAAAAAAIAAACrAAAA/P/////////ISQEAAAAAAAIAAACNAQAA/P/////////YSQEA
+AAAAAAIAAADqAAAA/P/////////8SQEAAAAAAAIAAACrAAAA/P////////8TSgEAAAAA
+AAIAAACrAAAA/P////////8sSgEAAAAAAAIAAACrAAAA/P////////9DSgEAAAAAAAIA
+AACrAAAA/P////////9aSgEAAAAAAAIAAACrAAAA/P////////9tSgEAAAAAAAIAAACN
+AQAA/P////////99SgEAAAAAAAIAAADqAAAA/P////////+zSgEAAAAAAAIAAACNAQAA
+/P/////////DSgEAAAAAAAIAAADqAAAA/P/////////9SgEAAAAAAAIAAACfAQAA/P//
+//////9pTAEAAAAAAAIAAACrAAAA/P////////89TQEAAAAAAAIAAAAVAQAA/P//////
+//+yTQEAAAAAAAIAAACfAQAA/P////////9TTwEAAAAAAAIAAACpAAAA/P////////9r
+TwEAAAAAAAIAAADeAAAA/P////////+GTwEAAAAAAAIAAAAxAQAA/P/////////ITwEA
+AAAAAAIAAAAxAQAA/P/////////UTwEAAAAAAAIAAACLAAAA/P////////+uUgEAAAAA
+AAIAAAA2AQAA/P/////////ZUgEAAAAAAAIAAAA2AQAA/P/////////qUgEAAAAAAAIA
+AAA2AQAA/P////////9CUwEAAAAAAAIAAAAxAQAA/P////////9mUwEAAAAAAAIAAACN
+AQAA/P////////92UwEAAAAAAAIAAADqAAAA/P////////+KUwEAAAAAAAIAAACNAQAA
+/P////////+aUwEAAAAAAAIAAADqAAAA/P////////+2UwEAAAAAAAIAAACNAQAA/P//
+///////GUwEAAAAAAAIAAADqAAAA/P/////////uUwEAAAAAAAIAAACNAQAA/P//////
+//8QVAEAAAAAAAIAAADqAAAA/P////////8yVAEAAAAAAAIAAACNAQAA/P////////9C
+VAEAAAAAAAIAAADqAAAA/P////////9dVAEAAAAAAAIAAAAxAQAA/P/////////dVAEA
+AAAAAAIAAAAxAQAA/P/////////3VwEAAAAAAAIAAAA2AQAA/P////////8PWAEAAAAA
+AAIAAAA2AQAA/P////////85WAEAAAAAAAIAAABUAQAA/P/////////CWAEAAAAAAAsA
+AAACAAAAAGQAAAAAAADyWAEAAAAAAAIAAABMAQAA/P////////8IWQEAAAAAAAsAAAAC
+AAAAYGUAAAAAAAAUWQEAAAAAAAsAAAACAAAAZGUAAAAAAAAoWQEAAAAAAAIAAABMAQAA
+/P////////87WQEAAAAAAAsAAAACAAAAQGkAAAAAAABpWQEAAAAAAAIAAABMAQAA/P//
+//////+bWQEAAAAAAAIAAACTAAAA/P////////+yWQEAAAAAAAsAAAACAAAA5G8AAAAA
+AAC/WQEAAAAAAAIAAAAyAAAA/P////////8hWgEAAAAAAAIAAAAyAAAA/P////////9J
+WgEAAAAAAAIAAAAyAAAA/P/////////CWgEAAAAAAAsAAAACAAAAKHEAAAAAAAAjXQEA
+AAAAAAsAAAACAAAAoGcAAAAAAABkXQEAAAAAAAIAAAB/AAAA/P////////9/XQEAAAAA
+AAIAAAB/AAAA/P////////+SXQEAAAAAAAsAAAACAAAAoGcAAAAAAACvXQEAAAAAAAIA
+AABMAQAA/P/////////FXQEAAAAAAAsAAAACAAAAQGwAAAAAAADQXQEAAAAAAAsAAAAC
+AAAARGwAAAAAAADlXQEAAAAAAAIAAABMAQAA/P/////////1XQEAAAAAAAsAAAACAAAA
+UGwAAAAAAAApXgEAAAAAAAIAAABMAQAA/P////////85XgEAAAAAAAsAAAACAAAAcGwA
+AAAAAABtXgEAAAAAAAIAAABMAQAA/P////////+DXgEAAAAAAAsAAAACAAAAoGwAAAAA
+AADWXgEAAAAAAAIAAAB/AAAA/P/////////2XgEAAAAAAAIAAAB/AAAA/P////////8Y
+XwEAAAAAAAIAAAB/AAAA/P////////81XwEAAAAAAAIAAAB/AAAA/P////////9SXwEA
+AAAAAAIAAAB/AAAA/P////////9vXwEAAAAAAAIAAAB/AAAA/P////////+CXwEAAAAA
+AAsAAAACAAAAoGwAAAAAAACfXwEAAAAAAAIAAABMAQAA/P////////+4XwEAAAAAAAsA
+AAACAAAAQG4AAAAAAADzXwEAAAAAAAIAAAB/AAAA/P////////8QYAEAAAAAAAIAAAB/
+AAAA/P////////9eYAEAAAAAAAIAAAB/AAAA/P////////95YAEAAAAAAAIAAAB/AAAA
+/P////////+WYAEAAAAAAAIAAAB/AAAA/P////////+pYAEAAAAAAAsAAAACAAAAQG4A
+AAAAAADGYAEAAAAAAAIAAABMAQAA/P////////9kYgEAAAAAAAIAAAA2AQAA/P//////
+//+BZQEAAAAAAAIAAABvAQAA/P////////8rZwEAAAAAAAIAAABvAQAA/P////////9K
+ZwEAAAAAAAIAAACLAAAA/P////////9rZwEAAAAAAAIAAACLAAAA/P////////+KZwEA
+AAAAAAsAAAACAAAAgHEAAAAAAACWZwEAAAAAAAIAAAACAAAAfHEAAAAAAACuZwEAAAAA
+AAsAAAACAAAAgnEAAAAAAADNZwEAAAAAAAIAAADeAAAA/P/////////tZwEAAAAAAAIA
+AADeAAAA/P////////8SaAEAAAAAAAsAAAABAAAANGcBAAAAAAAdaAEAAAAAAAsAAAAB
+AAAApFgBAAAAAAAoaAEAAAAAAAsAAAABAAAAsVoBAAAAAAAzaAEAAAAAAAsAAAABAAAA
+g1kBAAAAAAA+aAEAAAAAAAsAAAABAAAA7FoBAAAAAABJaAEAAAAAAAsAAAABAAAAd2EB
+AAAAAABUaAEAAAAAAAsAAAABAAAAfGcBAAAAAABfaAEAAAAAAAsAAAABAAAAgmcBAAAA
+AACWaAEAAAAAAAsAAAACAAAAwHEAAAAAAADGaAEAAAAAAAIAAABMAQAA/P/////////c
+aAEAAAAAAAsAAAACAAAAQHMAAAAAAADoaAEAAAAAAAsAAAACAAAARHMAAAAAAAD8aAEA
+AAAAAAIAAABMAQAA/P////////8PaQEAAAAAAAsAAAACAAAAgHUAAAAAAAA9aQEAAAAA
+AAIAAABMAQAA/P////////8uagEAAAAAAAIAAAAyAAAA/P////////+1agEAAAAAAAIA
+AAAyAAAA/P////////8XawEAAAAAAAIAAAAyAAAA/P////////9wawEAAAAAAAIAAAAy
+AAAA/P/////////KawEAAAAAAAIAAAAyAAAA/P/////////bawEAAAAAAAIAAAAyAAAA
+/P////////9IbAEAAAAAAAsAAAACAAAA2H0AAAAAAAAjbgEAAAAAAAsAAAACAAAAhHgA
+AAAAAABDbgEAAAAAAAsAAAACAAAAkHgAAAAAAABsbgEAAAAAAAsAAAACAAAAsHgAAAAA
+AACVbgEAAAAAAAsAAAACAAAA4HgAAAAAAADObgEAAAAAAAIAAAB/AAAA/P/////////u
+bgEAAAAAAAIAAAB/AAAA/P////////8PbwEAAAAAAAIAAAB/AAAA/P////////8+bwEA
+AAAAAAIAAAB/AAAA/P////////9ibwEAAAAAAAIAAAB/AAAA/P////////+GbwEAAAAA
+AAIAAAB/AAAA/P////////+qbwEAAAAAAAIAAAB/AAAA/P/////////ObwEAAAAAAAIA
+AAB/AAAA/P/////////ybwEAAAAAAAIAAAB/AAAA/P////////8acAEAAAAAAAIAAAB/
+AAAA/P////////9NcAEAAAAAAAIAAAB/AAAA/P////////9qcAEAAAAAAAIAAAB/AAAA
+/P/////////QcAEAAAAAAAIAAAB/AAAA/P/////////tcAEAAAAAAAIAAAB/AAAA/P//
+//////8KcQEAAAAAAAIAAAB/AAAA/P////////8ncQEAAAAAAAIAAAB/AAAA/P//////
+//9XcQEAAAAAAAIAAAB/AAAA/P////////90cQEAAAAAAAIAAAB/AAAA/P////////+R
+cQEAAAAAAAIAAAB/AAAA/P////////+ucQEAAAAAAAIAAAB/AAAA/P/////////LcQEA
+AAAAAAIAAAB/AAAA/P/////////dcQEAAAAAAAsAAAACAAAAoHwAAAAAAAAncgEAAAAA
+AAIAAAB/AAAA/P////////9IcgEAAAAAAAIAAAB/AAAA/P////////+RcgEAAAAAAAIA
+AAB/AAAA/P////////+scgEAAAAAAAIAAAB/AAAA/P////////+7cgEAAAAAAAsAAAAC
+AAAAgHgAAAAAAADZcgEAAAAAAAIAAABMAQAA/P/////////wcgEAAAAAAAsAAAACAAAA
+kHgAAAAAAAAOcwEAAAAAAAIAAABMAQAA/P////////8lcwEAAAAAAAsAAAACAAAAsHgA
+AAAAAABDcwEAAAAAAAIAAABMAQAA/P////////9acwEAAAAAAAsAAAACAAAA4HgAAAAA
+AAB4cwEAAAAAAAIAAABMAQAA/P////////+ScwEAAAAAAAsAAAACAAAAoHwAAAAAAACz
+cwEAAAAAAAIAAABMAQAA/P////////8LdgEAAAAAAAIAAAD5AAAA/P////////8edgEA
+AAAAAAIAAAD5AAAA/P////////+UdgEAAAAAAAIAAAD5AAAA/P////////+ndgEAAAAA
+AAIAAAD5AAAA/P/////////5dgEAAAAAAAIAAAD5AAAA/P////////8ndwEAAAAAAAIA
+AAD5AAAA/P////////86dwEAAAAAAAIAAAD5AAAA/P////////+IdwEAAAAAAAIAAAD5
+AAAA/P////////8BfgEAAAAAAAIAAACLAAAA/P////////8ifgEAAAAAAAIAAACLAAAA
+/P////////89gQEAAAAAAAIAAADeAAAA/P////////9dgQEAAAAAAAIAAADeAAAA/P//
+//////+MgQEAAAAAAAsAAAABAAAA630BAAAAAACXgQEAAAAAAAsAAAABAAAAeGgBAAAA
+AACigQEAAAAAAAsAAAABAAAAN2wBAAAAAACtgQEAAAAAAAsAAAABAAAAV2kBAAAAAAC4
+gQEAAAAAAAsAAAABAAAAbWwBAAAAAADDgQEAAAAAAAsAAAABAAAA3XMBAAAAAADOgQEA
+AAAAAAsAAAABAAAAq4ABAAAAAADZgQEAAAAAAAsAAAAlAAAAAAAAAAAAAAASggEAAAAA
+AAsAAAACAAAAIH4AAAAAAABCggEAAAAAAAIAAABMAQAA/P////////9YggEAAAAAAAsA
+AAACAAAAoH8AAAAAAABkggEAAAAAAAsAAAACAAAApH8AAAAAAAB4ggEAAAAAAAIAAABM
+AQAA/P////////+OggEAAAAAAAsAAAACAAAAAIQAAAAAAAC8ggEAAAAAAAIAAABMAQAA
+/P////////+tgwEAAAAAAAIAAAAyAAAA/P////////80hAEAAAAAAAIAAAAyAAAA/P//
+//////+WhAEAAAAAAAIAAAAyAAAA/P/////////vhAEAAAAAAAIAAAAyAAAA/P//////
+//9JhQEAAAAAAAIAAAAyAAAA/P////////9ahQEAAAAAAAIAAAAyAAAA/P////////87
+hgEAAAAAAAsAAAACAAAABIcAAAAAAABZhgEAAAAAAAsAAAACAAAAEIcAAAAAAACBhgEA
+AAAAAAsAAAACAAAAMIcAAAAAAACphgEAAAAAAAsAAAACAAAAYIcAAAAAAADkhgEAAAAA
+AAIAAAB/AAAA/P////////8BhwEAAAAAAAIAAAB/AAAA/P////////8RhwEAAAAAAAsA
+AAACAAAAAIoAAAAAAAA6hwEAAAAAAAsAAAACAAAAAIcAAAAAAABXhwEAAAAAAAIAAABM
+AQAA/P////////9uhwEAAAAAAAsAAAACAAAAEIcAAAAAAACMhwEAAAAAAAIAAABMAQAA
+/P////////+jhwEAAAAAAAsAAAACAAAAMIcAAAAAAADBhwEAAAAAAAIAAABMAQAA/P//
+///////YhwEAAAAAAAsAAAACAAAAYIcAAAAAAAD2hwEAAAAAAAIAAABMAQAA/P//////
+//8QiAEAAAAAAAsAAAACAAAAAIoAAAAAAAAuiAEAAAAAAAIAAABMAQAA/P////////9p
+iAEAAAAAAAsAAAACAAAASIoAAAAAAADikAEAAAAAAAIAAACLAAAA/P////////8DkQEA
+AAAAAAIAAACLAAAA/P////////8klAEAAAAAAAIAAADeAAAA/P////////9ElAEAAAAA
+AAIAAADeAAAA/P////////9plAEAAAAAAAsAAAABAAAAzJABAAAAAAB0lAEAAAAAAAsA
+AAABAAAA9IEBAAAAAAB/lAEAAAAAAAsAAAABAAAAWIgBAAAAAACKlAEAAAAAAAsAAAAB
+AAAA1oIBAAAAAACVlAEAAAAAAAsAAAABAAAAtoUBAAAAAACglAEAAAAAAAsAAAABAAAA
+Qo8BAAAAAACrlAEAAAAAAAsAAAABAAAAkpMBAAAAAAC2lAEAAAAAAAsAAAAlAAAAAAAA
+AAAAAADulAEAAAAAAAsAAAACAAAAoIoAAAAAAAAelQEAAAAAAAIAAABMAQAA/P//////
+//80lQEAAAAAAAsAAAACAAAAgI0AAAAAAABAlQEAAAAAAAsAAAACAAAAhI0AAAAAAABU
+lQEAAAAAAAIAAABMAQAA/P////////9nlQEAAAAAAAsAAAACAAAAgJEAAAAAAACVlQEA
+AAAAAAIAAABMAQAA/P////////+GlgEAAAAAAAIAAAAyAAAA/P////////8NlwEAAAAA
+AAIAAAAyAAAA/P/////////2lwEAAAAAAAIAAAAyAAAA/P////////8HmAEAAAAAAAIA
+AAAyAAAA/P////////+dmQEAAAAAAAsAAAACAAAAhJQAAAAAAAC7mQEAAAAAAAsAAAAC
+AAAAkJQAAAAAAADjmQEAAAAAAAsAAAACAAAAsJQAAAAAAAALmgEAAAAAAAsAAAACAAAA
+4JQAAAAAAABRmgEAAAAAAAIAAAB/AAAA/P////////9umgEAAAAAAAIAAAB/AAAA/P//
+//////+LmgEAAAAAAAIAAAB/AAAA/P////////+5mgEAAAAAAAIAAAAyAAAA/P//////
+///zmgEAAAAAAAIAAAB/AAAA/P////////8QmwEAAAAAAAIAAAB/AAAA/P////////8g
+mwEAAAAAAAsAAAACAAAAYJgAAAAAAABMmwEAAAAAAAsAAAACAAAAgJQAAAAAAABpmwEA
+AAAAAAIAAABMAQAA/P////////+AmwEAAAAAAAsAAAACAAAAkJQAAAAAAACemwEAAAAA
+AAIAAABMAQAA/P////////+1mwEAAAAAAAsAAAACAAAAsJQAAAAAAADTmwEAAAAAAAIA
+AABMAQAA/P/////////qmwEAAAAAAAsAAAACAAAA4JQAAAAAAAAInAEAAAAAAAIAAABM
+AQAA/P////////8inAEAAAAAAAsAAAACAAAAYJgAAAAAAABDnAEAAAAAAAIAAABMAQAA
+/P////////9+nAEAAAAAAAsAAAACAAAAqJgAAAAAAAD7pAEAAAAAAAIAAACLAAAA/P//
+//////8cpQEAAAAAAAIAAACLAAAA/P////////8kqAEAAAAAAAIAAADeAAAA/P//////
+//9EqAEAAAAAAAIAAADeAAAA/P////////9pqAEAAAAAAAsAAAABAAAA5aQBAAAAAAB0
+qAEAAAAAAAsAAAABAAAA0JQBAAAAAAB/qAEAAAAAAAsAAAABAAAAbZwBAAAAAACKqAEA
+AAAAAAsAAAABAAAAr5UBAAAAAACVqAEAAAAAAAsAAAABAAAAY5gBAAAAAACgqAEAAAAA
+AAsAAAABAAAAWqMBAAAAAACrqAEAAAAAAAsAAAABAAAAkqcBAAAAAAC2qAEAAAAAAAsA
+AAAlAAAAAAAAAAAAAAAIAAAAAAAAAAEAAAABAAAAcQcAAAAAAAAQAAAAAAAAAAEAAAAB
+AAAAZQgAAAAAAAAYAAAAAAAAAAEAAAABAAAAZQgAAAAAAAAgAAAAAAAAAAEAAAABAAAA
+ZQgAAAAAAAAoAAAAAAAAAAEAAAABAAAAawgAAAAAAAAwAAAAAAAAAAEAAAABAAAAZQgA
+AAAAAAA4AAAAAAAAAAEAAAABAAAAegcAAAAAAABAAAAAAAAAAAEAAAABAAAAhwcAAAAA
+AABIAAAAAAAAAAEAAAABAAAAawgAAAAAAABQAAAAAAAAAAEAAAABAAAAjgcAAAAAAABY
+AAAAAAAAAAEAAAABAAAAlQcAAAAAAABgAAAAAAAAAAEAAAABAAAAxgcAAAAAAABoAAAA
+AAAAAAEAAAABAAAAqAcAAAAAAABwAAAAAAAAAAEAAAABAAAAugcAAAAAAAB4AAAAAAAA
+AAEAAAABAAAAwAcAAAAAAACAAAAAAAAAAAEAAAABAAAAzgcAAAAAAACIAAAAAAAAAAEA
+AAABAAAAawgAAAAAAACQAAAAAAAAAAEAAAABAAAAawgAAAAAAACYAAAAAAAAAAEAAAAB
+AAAACggAAAAAAACgAAAAAAAAAAEAAAABAAAAEQgAAAAAAACoAAAAAAAAAAEAAAABAAAA
+ZQgAAAAAAACwAAAAAAAAAAEAAAABAAAAGAgAAAAAAAC4AAAAAAAAAAEAAAABAAAAZQgA
+AAAAAADAAAAAAAAAAAEAAAABAAAAHwgAAAAAAADIAAAAAAAAAAEAAAABAAAAJggAAAAA
+AADQAAAAAAAAAAEAAAABAAAAMAgAAAAAAADYAAAAAAAAAAEAAAABAAAAawgAAAAAAADg
+AAAAAAAAAAEAAAABAAAAawgAAAAAAADoAAAAAAAAAAEAAAABAAAAZQgAAAAAAABYAgAA
+AAAAAAEAAAAhAQAAAAAAAAAAAABgAgAAAAAAAAEAAABpAAAAAAAAAAAAAABoAgAAAAAA
+AAEAAADQAAAAAAAAAAAAAABwAgAAAAAAAAEAAADBAAAAAAAAAAAAAAB4AgAAAAAAAAEA
+AACXAQAAAAAAAAAAAACAAgAAAAAAAAEAAADkAAAAAAAAAAAAAACIAgAAAAAAAAEAAABZ
+AAAAAAAAAAAAAACQAgAAAAAAAAEAAADyAAAAAAAAAAAAAACYAgAAAAAAAAEAAAAeAQAA
+AAAAAAAAAACgAgAAAAAAAAEAAABfAQAAAAAAAAAAAACoAgAAAAAAAAEAAADHAAAAAAAA
+AAAAAACwAgAAAAAAAAEAAAANAAAAAAAAAAAAAAC4AgAAAAAAAAEAAAAKAAAAAAAAAAAA
+AADAAgAAAAAAAAEAAABcAQAAAAAAAAAAAADIAgAAAAAAAAEAAACtAAAAAAAAAAAAAADQ
+AgAAAAAAAAEAAACUAQAAAAAAAAAAAADYAgAAAAAAAAEAAABkAQAAAAAAAAAAAADgAgAA
+AAAAAAEAAADNAAAAAAAAAAAAAADoAgAAAAAAAAEAAABBAAAAAAAAAAAAAADwAgAAAAAA
+AAEAAACMAAAAAAAAAAAAAAD4AgAAAAAAAAEAAABcAAAAAAAAAAAAAAAAAwAAAAAAAAEA
+AAAkAAAAAAAAAAAAAAAIAwAAAAAAAAEAAACDAQAAAAAAAAAAAAAQAwAAAAAAAAEAAACu
+AQAAAAAAAAAAAAAYAwAAAAAAAAEAAAAxAAAAAAAAAAAAAAAgAwAAAAAAAAEAAACWAAAA
+AAAAAAAAAAAoAwAAAAAAAAEAAABhAQAAAAAAAAAAAAAwAwAAAAAAAAEAAAAsAAAAAAAA
+AAAAAAA4AwAAAAAAAAEAAAA/AAAAAAAAAAAAAABAAwAAAAAAAAEAAABtAAAAAAAAAAAA
+AABIAwAAAAAAAAEAAACbAQAAAAAAAAAAAABQAwAAAAAAAAEAAACWAQAAAAAAAAAAAABY
+AwAAAAAAAAEAAAAuAQAAAAAAAAAAAABgAwAAAAAAAAEAAADCAAAAAAAAAAAAAABoAwAA
+AAAAAAEAAAB6AQAAAAAAAAAAAABwAwAAAAAAAAEAAAB9AQAAAAAAAAAAAAB4AwAAAAAA
+AAEAAAAdAQAAAAAAAAAAAACAAwAAAAAAAAEAAADvAAAAAAAAAAAAAACIAwAAAAAAAAEA
+AABTAQAAAAAAAAAAAACQAwAAAAAAAAEAAACbAAAAAAAAAAAAAACYAwAAAAAAAAEAAACO
+AQAAAAAAAAAAAACgAwAAAAAAAAEAAADOAAAAAAAAAAAAAACoAwAAAAAAAAEAAADEAAAA
+AAAAAAAAAACwAwAAAAAAAAEAAACPAAAAAAAAAAAAAAC4AwAAAAAAAAEAAAC8AAAAAAAA
+AAAAAADAAwAAAAAAAAEAAABaAAAAAAAAAAAAAADIAwAAAAAAAAEAAADYAAAAAAAAAAAA
+AADQAwAAAAAAAAEAAABPAQAAAAAAAAAAAADYAwAAAAAAAAEAAAAjAQAAAAAAAAAAAADg
+AwAAAAAAAAEAAACxAAAAAAAAAAAAAADoAwAAAAAAAAEAAABKAQAAAAAAAAAAAADwAwAA
+AAAAAAEAAAD8AAAAAAAAAAAAAAD4AwAAAAAAAAEAAAB2AQAAAAAAAAAAAAAABAAAAAAA
+AAEAAABmAQAAAAAAAAAAAAAIBAAAAAAAAAEAAABCAQAAAAAAAAAAAAAQBAAAAAAAAAEA
+AAA1AAAAAAAAAAAAAAAYBAAAAAAAAAEAAADDAAAAAAAAAAAAAAAgBAAAAAAAAAEAAAB0
+AQAAAAAAAAAAAAAoBAAAAAAAAAEAAAAwAQAAAAAAAAAAAAAwBAAAAAAAAAEAAAA6AQAA
+AAAAAAAAAAA4BAAAAAAAAAEAAABAAAAAAAAAAAAAAABABAAAAAAAAAEAAAB7AAAAAAAA
+AAAAAABIBAAAAAAAAAEAAABdAQAAAAAAAAAAAABQBAAAAAAAAAEAAAD3AAAAAAAAAAAA
+AABYBAAAAAAAAAEAAABUAAAAAAAAAAAAAABgBAAAAAAAAAEAAAA5AAAAAAAAAAAAAABo
+BAAAAAAAAAEAAACVAAAAAAAAAAAAAABwBAAAAAAAAAEAAAALAAAAAAAAAAAAAAB4BAAA
+AAAAAAEAAAAIAQAAAAAAAAAAAACABAAAAAAAAAEAAABVAQAAAAAAAAAAAACIBAAAAAAA
+AAEAAABLAQAAAAAAAAAAAACQBAAAAAAAAAEAAAAJAQAAAAAAAAAAAACYBAAAAAAAAAEA
+AACcAQAAAAAAAAAAAACgBAAAAAAAAAEAAABuAAAAAAAAAAAAAACoBAAAAAAAAAEAAAAO
+AAAAAAAAAAAAAACwBAAAAAAAAAEAAAB/AQAAAAAAAAAAAAC4BAAAAAAAAAEAAAC6AAAA
+AAAAAAAAAADABAAAAAAAAAEAAAAkAQAAAAAAAAAAAADIBAAAAAAAAAEAAAAtAQAAAAAA
+AAAAAADQBAAAAAAAAAEAAACKAQAAAAAAAAAAAADYBAAAAAAAAAEAAABJAQAAAAAAAAAA
+AADgBAAAAAAAAAEAAACzAAAAAAAAAAAAAADoBAAAAAAAAAEAAABJAAAAAAAAAAAAAADw
+BAAAAAAAAAEAAABEAQAAAAAAAAAAAAD4BAAAAAAAAAEAAAAXAAAAAAAAAAAAAAAABQAA
+AAAAAAEAAADLAAAAAAAAAAAAAAAIBQAAAAAAAAEAAAB0AAAAAAAAAAAAAAAQBQAAAAAA
+AAEAAAAMAQAAAAAAAAAAAAAYBQAAAAAAAAEAAAANAQAAAAAAAAAAAAAgBQAAAAAAAAEA
+AABrAQAAAAAAAAAAAAAoBQAAAAAAAAEAAAB+AQAAAAAAAAAAAAAwBQAAAAAAAAEAAACa
+AQAAAAAAAAAAAAA4BQAAAAAAAAEAAAASAAAAAAAAAAAAAABABQAAAAAAAAEAAABoAQAA
+AAAAAAAAAABIBQAAAAAAAAEAAAA4AQAAAAAAAAAAAABQBQAAAAAAAAEAAAAgAQAAAAAA
+AAAAAABYBQAAAAAAAAEAAACuAAAAAAAAAAAAAABgBQAAAAAAAAEAAABpAQAAAAAAAAAA
+AABoBQAAAAAAAAEAAAABAAAANVQAAAAAAABwBQAAAAAAAAEAAACsAQAAAAAAAAAAAAB4
+BQAAAAAAAAEAAABBAQAAAAAAAAAAAACIBQAAAAAAAAEAAAB0AQAAAAAAAAAAAACQBQAA
+AAAAAAEAAAAwAQAAAAAAAAAAAACYBQAAAAAAAAEAAAA6AQAAAAAAAAAAAACgBQAAAAAA
+AAEAAABAAAAAAAAAAAAAAACoBQAAAAAAAAEAAAB7AAAAAAAAAAAAAACwBQAAAAAAAAEA
+AAABAAAAUlQAAAAAAAD4HAAAAAAAAAEAAABeAQAAAAAAAAAAAAAAHQAAAAAAAAEAAACA
+AQAAAAAAAAAAAAAIHQAAAAAAAAEAAABxAQAAAAAAAAAAAAAQHQAAAAAAAAEAAACZAQAA
+AAAAAAAAAAAYHQAAAAAAAAEAAABoAAAAAAAAAAAAAAAgHQAAAAAAAAEAAAB8AAAAAAAA
+AAAAAAAoHQAAAAAAAAEAAACfAAAAAAAAAAAAAAAwHQAAAAAAAAEAAABxAAAAAAAAAAAA
+AAA4HQAAAAAAAAEAAAAUAAAAAAAAAAAAAABAHQAAAAAAAAEAAAB9AAAAAAAAAAAAAABI
+HQAAAAAAAAEAAACEAQAAAAAAAAAAAABQHQAAAAAAAAEAAACTAQAAAAAAAAAAAABYHQAA
+AAAAAAEAAACNAAAAAAAAAAAAAABgHQAAAAAAAAEAAADKAAAAAAAAAAAAAABoHQAAAAAA
+AAEAAAAQAAAAAAAAAAAAAABwHQAAAAAAAAEAAAA4AAAAAAAAAAAAAAB4HQAAAAAAAAEA
+AABmAAAAAAAAAAAAAACAHQAAAAAAAAEAAABnAAAAAAAAAAAAAACIHQAAAAAAAAEAAAA8
+AAAAAAAAAAAAAACQHQAAAAAAAAEAAACHAQAAAAAAAAAAAACYHQAAAAAAAAEAAAAiAQAA
+AAAAAAAAAACgHQAAAAAAAAEAAACkAQAAAAAAAAAAAACoHQAAAAAAAAEAAACJAAAAAAAA
+AAAAAACwHQAAAAAAAAEAAACRAQAAAAAAAAAAAAC4HQAAAAAAAAEAAAAWAQAAAAAAAAAA
+AADAHQAAAAAAAAEAAAC3AAAAAAAAAAAAAADIHQAAAAAAAAEAAAA9AQAAAAAAAAAAAADQ
+HQAAAAAAAAEAAAAmAAAAAAAAAAAAAADYHQAAAAAAAAEAAAAbAQAAAAAAAAAAAADgHQAA
+AAAAAAEAAAAdAAAAAAAAAAAAAADoHQAAAAAAAAEAAACCAQAAAAAAAAAAAADwHQAAAAAA
+AAEAAAD6AAAAAAAAAAAAAAD4HQAAAAAAAAEAAAAjAAAAAAAAAAAAAAAAHgAAAAAAAAEA
+AAAtAAAAAAAAAAAAAAAIHgAAAAAAAAEAAAC7AAAAAAAAAAAAAAAQHgAAAAAAAAEAAACY
+AQAAAAAAAAAAAAAYHgAAAAAAAAEAAACFAQAAAAAAAAAAAAAgHgAAAAAAAAEAAACSAQAA
+AAAAAAAAAAAoHgAAAAAAAAEAAABQAQAAAAAAAAAAAAAwHgAAAAAAAAEAAAAFAQAAAAAA
+AAAAAAA4HgAAAAAAAAEAAAASAQAAAAAAAAAAAABAHgAAAAAAAAEAAAABAQAAAAAAAAAA
+AABIHgAAAAAAAAEAAAAnAQAAAAAAAAAAAABQHgAAAAAAAAEAAACFAAAAAAAAAAAAAABY
+HgAAAAAAAAEAAACkAAAAAAAAAAAAAABgHgAAAAAAAAEAAAB6AAAAAAAAAAAAAABoHgAA
+AAAAAAEAAABjAQAAAAAAAAAAAABwHgAAAAAAAAEAAACsAAAAAAAAAAAAAAB4HgAAAAAA
+AAEAAABEAAAAAAAAAAAAAACAHgAAAAAAAAEAAABRAQAAAAAAAAAAAACIHgAAAAAAAAEA
+AABNAQAAAAAAAAAAAACQHgAAAAAAAAEAAACBAAAAAAAAAAAAAACYHgAAAAAAAAEAAAA9
+AAAAAAAAAAAAAACgHgAAAAAAAAEAAABnAQAAAAAAAAAAAACoHgAAAAAAAAEAAADwAAAA
+AAAAAAAAAACwHgAAAAAAAAEAAABFAQAAAAAAAAAAAAC4HgAAAAAAAAEAAAD2AAAAAAAA
+AAAAAADAHgAAAAAAAAEAAADUAAAAAAAAAAAAAADIHgAAAAAAAAEAAAD1AAAAAAAAAAAA
+AADQHgAAAAAAAAEAAABZAQAAAAAAAAAAAADYHgAAAAAAAAEAAADfAAAAAAAAAAAAAADg
+HgAAAAAAAAEAAAA6AAAAAAAAAAAAAADoHgAAAAAAAAEAAABlAAAAAAAAAAAAAADwHgAA
+AAAAAAEAAADpAAAAAAAAAAAAAAD4HgAAAAAAAAEAAABgAQAAAAAAAAAAAAAAHwAAAAAA
+AAEAAABuAQAAAAAAAAAAAAAIHwAAAAAAAAEAAAA8AQAAAAAAAAAAAAAQHwAAAAAAAAEA
+AAAgAAAAAAAAAAAAAAAYHwAAAAAAAAEAAABgAAAAAAAAAAAAAAAgHwAAAAAAAAEAAABH
+AQAAAAAAAAAAAAAoHwAAAAAAAAEAAACtAQAAAAAAAAAAAAAwHwAAAAAAAAEAAABMAAAA
+AAAAAAAAAAA4HwAAAAAAAAEAAACnAAAAAAAAAAAAAABAHwAAAAAAAAEAAAB7AQAAAAAA
+AAAAAABIHwAAAAAAAAEAAADlAAAAAAAAAAAAAABQHwAAAAAAAAEAAAAYAQAAAAAAAAAA
+AABYHwAAAAAAAAEAAAAiAAAAAAAAAAAAAABgHwAAAAAAAAEAAAAOAQAAAAAAAAAAAABo
+HwAAAAAAAAEAAAA7AAAAAAAAAAAAAABwHwAAAAAAAAEAAAATAQAAAAAAAAAAAAB4HwAA
+AAAAAAEAAAD+AAAAAAAAAAAAAACAHwAAAAAAAAEAAACXAAAAAAAAAAAAAACIHwAAAAAA
+AAEAAAAqAAAAAAAAAAAAAACQHwAAAAAAAAEAAABVAAAAAAAAAAAAAACYHwAAAAAAAAEA
+AACeAAAAAAAAAAAAAACgHwAAAAAAAAEAAADtAAAAAAAAAAAAAACoHwAAAAAAAAEAAADc
+AAAAAAAAAAAAAACwHwAAAAAAAAEAAABwAQAAAAAAAAAAAAC4HwAAAAAAAAEAAADbAAAA
+AAAAAAAAAADAHwAAAAAAAAEAAABrAQAAAAAAAAAAAADIHwAAAAAAAAEAAACqAQAAAAAA
+AAAAAADQHwAAAAAAAAEAAAAJAAAAAAAAAAAAAADYHwAAAAAAAAEAAACvAAAAAAAAAAAA
+AADgHwAAAAAAAAEAAAB2AAAAAAAAAAAAAADoHwAAAAAAAAEAAABvAAAAAAAAAAAAAADw
+HwAAAAAAAAEAAAACAQAAAAAAAAAAAAD4HwAAAAAAAAEAAAAGAQAAAAAAAAAAAAAAIAAA
+AAAAAAEAAAAaAQAAAAAAAAAAAAAIIAAAAAAAAAEAAAABAAAABYcAAAAAAAAQIAAAAAAA
+AAEAAABDAQAAAAAAAAAAAAAYIAAAAAAAAAEAAABiAQAAAAAAAAAAAAAoIAAAAAAAAAEA
+AADUAAAAAAAAAAAAAAAwIAAAAAAAAAEAAAD1AAAAAAAAAAAAAAA4IAAAAAAAAAEAAABZ
+AQAAAAAAAAAAAABAIAAAAAAAAAEAAADfAAAAAAAAAAAAAABIIAAAAAAAAAEAAAA6AAAA
+AAAAAAAAAABQIAAAAAAAAAEAAAABAAAAPYcAAAAAAAD4PgAAAAAAAAEAAAABAAAAVrcA
+AAAAAAAAPwAAAAAAAAEAAAABAAAAVrcAAAAAAAAIPwAAAAAAAAEAAAABAAAAfbcAAAAA
+AAAQPwAAAAAAAAEAAAABAAAAfbcAAAAAAAAYPwAAAAAAAAEAAAABAAAApLcAAAAAAAAg
+PwAAAAAAAAEAAAABAAAApLcAAAAAAAAoPwAAAAAAAAEAAAABAAAAy7cAAAAAAAAwPwAA
+AAAAAAEAAAABAAAAy7cAAAAAAAAYQQAAAAAAAAEAAABfAAAAAAAAAAAAAAAgQQAAAAAA
+AAEAAACIAAAAAAAAAAAAAAAoQQAAAAAAAAEAAACPAQAAAAAAAAAAAAAwQQAAAAAAAAEA
+AABwAAAAAAAAAAAAAAA4QQAAAAAAAAEAAABIAAAAAAAAAAAAAABAQQAAAAAAAAEAAADo
+AAAAAAAAAAAAAABIQQAAAAAAAAEAAADGAAAAAAAAAAAAAABQQQAAAAAAAAEAAAAyAQAA
+AAAAAAAAAABYQQAAAAAAAAEAAAA/AQAAAAAAAAAAAABgQQAAAAAAAAEAAAB3AAAAAAAA
+AAAAAABoQQAAAAAAAAEAAAAxAQAAAAAAAAAAAABwQQAAAAAAAAEAAACOAAAAAAAAAAAA
+AAB4QQAAAAAAAAEAAADSAAAAAAAAAAAAAACAQQAAAAAAAAEAAACcAAAAAAAAAAAAAACI
+QQAAAAAAAAEAAAC4AAAAAAAAAAAAAACQQQAAAAAAAAEAAABYAAAAAAAAAAAAAACYQQAA
+AAAAAAEAAACqAAAAAAAAAAAAAACgQQAAAAAAAAEAAABbAAAAAAAAAAAAAACoQQAAAAAA
+AAEAAAAXAQAAAAAAAAAAAACwQQAAAAAAAAEAAAB5AQAAAAAAAAAAAAC4QQAAAAAAAAEA
+AACUAAAAAAAAAAAAAADAQQAAAAAAAAEAAAARAQAAAAAAAAAAAADIQQAAAAAAAAEAAAD4
+AAAAAAAAAAAAAADQQQAAAAAAAAEAAAC0AQAAAAAAAAAAAADYQQAAAAAAAAEAAACpAQAA
+AAAAAAAAAADgQQAAAAAAAAEAAADIAAAAAAAAAAAAAADoQQAAAAAAAAEAAACEAAAAAAAA
+AAAAAADwQQAAAAAAAAEAAAA5AQAAAAAAAAAAAAD4QQAAAAAAAAEAAAArAAAAAAAAAAAA
+AAAAQgAAAAAAAAEAAAB4AQAAAAAAAAAAAAAIQgAAAAAAAAEAAABsAQAAAAAAAAAAAAAQ
+QgAAAAAAAAEAAACQAAAAAAAAAAAAAAAYQgAAAAAAAAEAAAB8AQAAAAAAAAAAAAAgQgAA
+AAAAAAEAAABjAAAAAAAAAAAAAAAoQgAAAAAAAAEAAABXAQAAAAAAAAAAAAAwQgAAAAAA
+AAEAAAAUAQAAAAAAAAAAAAA4QgAAAAAAAAEAAAAPAQAAAAAAAAAAAABAQgAAAAAAAAEA
+AAAWAAAAAAAAAAAAAABIQgAAAAAAAAEAAACIAQAAAAAAAAAAAABQQgAAAAAAAAEAAACC
+AAAAAAAAAAAAAABYQgAAAAAAAAEAAADzAAAAAAAAAAAAAABgQgAAAAAAAAEAAACNAQAA
+AAAAAAAAAABoQgAAAAAAAAEAAADqAAAAAAAAAAAAAABwQgAAAAAAAAEAAACiAAAAAAAA
+AAAAAAB4QgAAAAAAAAEAAABIAQAAAAAAAAAAAACAQgAAAAAAAAEAAACwAQAAAAAAAAAA
+AACIQgAAAAAAAAEAAAATAAAAAAAAAAAAAACQQgAAAAAAAAEAAACpAAAAAAAAAAAAAACY
+QgAAAAAAAAEAAAAMAAAAAAAAAAAAAACgQgAAAAAAAAEAAACjAAAAAAAAAAAAAACoQgAA
+AAAAAAEAAABWAQAAAAAAAAAAAACwQgAAAAAAAAEAAAC+AAAAAAAAAAAAAAC4QgAAAAAA
+AAEAAAD7AAAAAAAAAAAAAADAQgAAAAAAAAEAAABCAAAAAAAAAAAAAADIQgAAAAAAAAEA
+AAA1AQAAAAAAAAAAAADQQgAAAAAAAAEAAACwAAAAAAAAAAAAAADYQgAAAAAAAAEAAAC/
+AAAAAAAAAAAAAADgQgAAAAAAAAEAAAAsAQAAAAAAAAAAAADoQgAAAAAAAAEAAABRAAAA
+AAAAAAAAAADwQgAAAAAAAAEAAABaAQAAAAAAAAAAAAD4QgAAAAAAAAEAAABqAQAAAAAA
+AAAAAAAAQwAAAAAAAAEAAAApAQAAAAAAAAAAAAAIQwAAAAAAAAEAAACvAQAAAAAAAAAA
+AAAQQwAAAAAAAAEAAABNAAAAAAAAAAAAAAAYQwAAAAAAAAEAAADXAAAAAAAAAAAAAAAg
+QwAAAAAAAAEAAAC1AAAAAAAAAAAAAAAoQwAAAAAAAAEAAACfAQAAAAAAAAAAAAAwQwAA
+AAAAAAEAAABQAAAAAAAAAAAAAAA4QwAAAAAAAAEAAACYAAAAAAAAAAAAAABAQwAAAAAA
+AAEAAACjAQAAAAAAAAAAAABIQwAAAAAAAAEAAAC0AAAAAAAAAAAAAABQQwAAAAAAAAEA
+AADdAAAAAAAAAAAAAABYQwAAAAAAAAEAAABGAAAAAAAAAAAAAABgQwAAAAAAAAEAAABP
+AAAAAAAAAAAAAABoQwAAAAAAAAEAAAAwAAAAAAAAAAAAAABwQwAAAAAAAAEAAABFAAAA
+AAAAAAAAAAB4QwAAAAAAAAEAAAA+AAAAAAAAAAAAAACAQwAAAAAAAAEAAAD9AAAAAAAA
+AAAAAACIQwAAAAAAAAEAAABKAAAAAAAAAAAAAACQQwAAAAAAAAEAAACHAAAAAAAAAAAA
+AACYQwAAAAAAAAEAAAA3AAAAAAAAAAAAAACgQwAAAAAAAAEAAAA2AAAAAAAAAAAAAACo
+QwAAAAAAAAEAAAAcAAAAAAAAAAAAAACwQwAAAAAAAAEAAAB5AAAAAAAAAAAAAAC4QwAA
+AAAAAAEAAAALAQAAAAAAAAAAAADAQwAAAAAAAAEAAAByAAAAAAAAAAAAAADIQwAAAAAA
+AAEAAAA7AQAAAAAAAAAAAADQQwAAAAAAAAEAAACeAQAAAAAAAAAAAADYQwAAAAAAAAEA
+AADhAAAAAAAAAAAAAADgQwAAAAAAAAEAAABrAQAAAAAAAAAAAADoQwAAAAAAAAEAAACd
+AAAAAAAAAAAAAADwQwAAAAAAAAEAAACrAQAAAAAAAAAAAAD4QwAAAAAAAAEAAAAlAQAA
+AAAAAAAAAAAARAAAAAAAAAEAAADiAAAAAAAAAAAAAAAIRAAAAAAAAAEAAAAnAAAAAAAA
+AAAAAAAQRAAAAAAAAAEAAACQAQAAAAAAAAAAAAAYRAAAAAAAAAEAAABzAAAAAAAAAAAA
+AAAgRAAAAAAAAAEAAADmAAAAAAAAAAAAAAAoRAAAAAAAAAEAAADWAAAAAAAAAAAAAAAw
+RAAAAAAAAAEAAAD/AAAAAAAAAAAAAAA4RAAAAAAAAAEAAACnAQAAAAAAAAAAAABIRAAA
+AAAAAAEAAAAsAQAAAAAAAAAAAABQRAAAAAAAAAEAAABRAAAAAAAAAAAAAABYRAAAAAAA
+AAEAAABaAQAAAAAAAAAAAABgRAAAAAAAAAEAAABqAQAAAAAAAAAAAABoRAAAAAAAAAEA
+AAApAQAAAAAAAAAAAABwRAAAAAAAAAEAAACxAQAAAAAAAAAAAABQVQAAAAAAAAEAAAAB
+AAAAjOEAAAAAAABYVQAAAAAAAAEAAAABAAAATeEAAAAAAABgVQAAAAAAAAEAAAABAAAA
+VeEAAAAAAABoVQAAAAAAAAEAAAABAAAAweEAAAAAAABwVQAAAAAAAAEAAAABAAAAY+EA
+AAAAAAB4VQAAAAAAAAEAAAABAAAAueEAAAAAAADQVQAAAAAAAAEAAAABAAAABvIAAAAA
+AADYVQAAAAAAAAEAAAABAAAADPAAAAAAAADgVQAAAAAAAAEAAAABAAAAPPAAAAAAAADo
+VQAAAAAAAAEAAAABAAAA//EAAAAAAADwVQAAAAAAAAEAAAABAAAAjvAAAAAAAAD4VQAA
+AAAAAAEAAAABAAAAl/AAAAAAAAAAVgAAAAAAAAEAAAABAAAABvIAAAAAAAAIVgAAAAAA
+AAEAAAABAAAABvIAAAAAAAAQVgAAAAAAAAEAAAABAAAABvIAAAAAAAAYVgAAAAAAAAEA
+AAABAAAABvIAAAAAAAAgVgAAAAAAAAEAAAABAAAABvIAAAAAAAAoVgAAAAAAAAEAAAAB
+AAAAv/AAAAAAAAAwVgAAAAAAAAEAAAABAAAABvIAAAAAAAA4VgAAAAAAAAEAAAABAAAA
+BvIAAAAAAABAVgAAAAAAAAEAAAABAAAABvIAAAAAAABIVgAAAAAAAAEAAAABAAAABvIA
+AAAAAABQVgAAAAAAAAEAAAABAAAAyvAAAAAAAABYVgAAAAAAAAEAAAABAAAA6fAAAAAA
+AABgVgAAAAAAAAEAAAABAAAABvIAAAAAAABoVgAAAAAAAAEAAAABAAAAJPEAAAAAAABw
+VgAAAAAAAAEAAAABAAAARvEAAAAAAAB4VgAAAAAAAAEAAAABAAAABvIAAAAAAACAVgAA
+AAAAAAEAAAABAAAAYPAAAAAAAACIVgAAAAAAAAEAAAABAAAABvIAAAAAAACQVgAAAAAA
+AAEAAAABAAAABvIAAAAAAACYVgAAAAAAAAEAAAABAAAABvIAAAAAAACgVgAAAAAAAAEA
+AAABAAAAfPEAAAAAAACoVgAAAAAAAAEAAAABAAAAh/EAAAAAAACwVgAAAAAAAAEAAAAB
+AAAABvIAAAAAAAC4VgAAAAAAAAEAAAABAAAAl/EAAAAAAADAVgAAAAAAAAEAAAABAAAA
+//EAAAAAAADIVgAAAAAAAAEAAAABAAAA//EAAAAAAADQVgAAAAAAAAEAAAABAAAA4PEA
+AAAAAADYVgAAAAAAAAEAAAABAAAA5vEAAAAAAADgVgAAAAAAAAEAAAABAAAA7PEAAAAA
+AADoVgAAAAAAAAEAAAABAAAA8vEAAAAAAADwVgAAAAAAAAEAAAABAAAA+PEAAAAAAAAg
+VwAAAAAAAAEAAAABAAAAa/MAAAAAAAAoVwAAAAAAAAEAAAABAAAAa/MAAAAAAAAwVwAA
+AAAAAAEAAAABAAAAP/IAAAAAAAA4VwAAAAAAAAEAAAABAAAAa/MAAAAAAABAVwAAAAAA
+AAEAAAABAAAAa/MAAAAAAABIVwAAAAAAAAEAAAABAAAAYfIAAAAAAABQVwAAAAAAAAEA
+AAABAAAAa/MAAAAAAABYVwAAAAAAAAEAAAABAAAAa/MAAAAAAABgVwAAAAAAAAEAAAAB
+AAAAa/MAAAAAAABoVwAAAAAAAAEAAAABAAAAa/MAAAAAAABwVwAAAAAAAAEAAAABAAAA
+a/MAAAAAAAB4VwAAAAAAAAEAAAABAAAAi/IAAAAAAACAVwAAAAAAAAEAAAABAAAAa/MA
+AAAAAACIVwAAAAAAAAEAAAABAAAAa/MAAAAAAACQVwAAAAAAAAEAAAABAAAAa/MAAAAA
+AACYVwAAAAAAAAEAAAABAAAAa/MAAAAAAACgVwAAAAAAAAEAAAABAAAAoPIAAAAAAACo
+VwAAAAAAAAEAAAABAAAAa/MAAAAAAACwVwAAAAAAAAEAAAABAAAAa/MAAAAAAAC4VwAA
+AAAAAAEAAAABAAAAs/IAAAAAAADAVwAAAAAAAAEAAAABAAAASfMAAAAAAADIVwAAAAAA
+AAEAAAABAAAAa/MAAAAAAADQVwAAAAAAAAEAAAABAAAAa/MAAAAAAADYVwAAAAAAAAEA
+AAABAAAAa/MAAAAAAADgVwAAAAAAAAEAAAABAAAAa/MAAAAAAADoVwAAAAAAAAEAAAAB
+AAAAa/MAAAAAAADwVwAAAAAAAAEAAAABAAAA1fIAAAAAAAD4VwAAAAAAAAEAAAABAAAA
+1fIAAAAAAAAAWAAAAAAAAAEAAAABAAAAa/MAAAAAAAAIWAAAAAAAAAEAAAABAAAALfMA
+AAAAAACwYwAAAAAAAAEAAAABAAAAqEYBAAAAAAC4YwAAAAAAAAEAAAABAAAANkIBAAAA
+AADAYwAAAAAAAAEAAAABAAAADUMBAAAAAADIYwAAAAAAAAEAAAABAAAAoUQBAAAAAADQ
+YwAAAAAAAAEAAAABAAAA/0QBAAAAAADYYwAAAAAAAAEAAAABAAAAdkUBAAAAAADgYwAA
+AAAAAAEAAAABAAAAEUYBAAAAAAAocQAAAAAAAAEAAAABAAAAxloBAAAAAAAwcQAAAAAA
+AAEAAAABAAAAyloBAAAAAAA4cQAAAAAAAAEAAAABAAAAz1oBAAAAAABAcQAAAAAAAAEA
+AAABAAAA1FoBAAAAAABIcQAAAAAAAAEAAAABAAAA5loBAAAAAABQcQAAAAAAAAEAAAAB
+AAAA5loBAAAAAABYcQAAAAAAAAEAAAABAAAA2VoBAAAAAABgcQAAAAAAAAEAAAABAAAA
+3loBAAAAAADYfQAAAAAAAAEAAAABAAAAZ2wBAAAAAADgfQAAAAAAAAEAAAABAAAATGwB
+AAAAAADofQAAAAAAAAEAAAABAAAAUGwBAAAAAADwfQAAAAAAAAEAAAABAAAAVWwBAAAA
+AAD4fQAAAAAAAAEAAAABAAAAZ2wBAAAAAAAAfgAAAAAAAAEAAAABAAAAZ2wBAAAAAAAI
+fgAAAAAAAAEAAAABAAAAWmwBAAAAAAAQfgAAAAAAAAEAAAABAAAAX2wBAAAAAABIigAA
+AAAAAAEAAAABAAAAhYgBAAAAAABQigAAAAAAAAEAAAABAAAAbYgBAAAAAABYigAAAAAA
+AAEAAAABAAAAcYgBAAAAAABgigAAAAAAAAEAAAABAAAAdogBAAAAAABoigAAAAAAAAEA
+AAABAAAAhYgBAAAAAABwigAAAAAAAAEAAAABAAAAhYgBAAAAAAB4igAAAAAAAAEAAAAB
+AAAAe4gBAAAAAACAigAAAAAAAAEAAAABAAAAgIgBAAAAAAComAAAAAAAAAEAAAABAAAA
+nZwBAAAAAACwmAAAAAAAAAEAAAABAAAAgpwBAAAAAAC4mAAAAAAAAAEAAAABAAAAhpwB
+AAAAAADAmAAAAAAAAAEAAAABAAAAi5wBAAAAAADImAAAAAAAAAEAAAABAAAAnZwBAAAA
+AADQmAAAAAAAAAEAAAABAAAAnZwBAAAAAADYmAAAAAAAAAEAAAABAAAAkJwBAAAAAADg
+mAAAAAAAAAEAAAABAAAAlZwBAAAAAAAgAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAoAAAA
+AAAAAAEAAAADAAAABwAAAAAAAAAwAAAAAAAAAAEAAAADAAAADgAAAAAAAAA4AAAAAAAA
+AAEAAAADAAAAFQAAAAAAAABAAAAAAAAAAAEAAAADAAAAHAAAAAAAAABIAAAAAAAAAAEA
+AAADAAAAIwAAAAAAAABQAAAAAAAAAAEAAAADAAAAKgAAAAAAAAAoCgAAAAAAAAEAAAAD
+AAAA2QAAAAAAAAAwCgAAAAAAAAEAAAADAAAA3AAAAAAAAABQCgAAAAAAAAEAAAADAAAA
+4gAAAAAAAABYCgAAAAAAAAEAAAADAAAA5QAAAAAAAAB4CgAAAAAAAAEAAAADAAAA9AAA
+AAAAAACACgAAAAAAAAEAAAADAAAA9wAAAAAAAACgCgAAAAAAAAEAAAADAAAA/wAAAAAA
+AACoCgAAAAAAAAEAAAADAAAAAgEAAAAAAADICgAAAAAAAAEAAAADAAAACgEAAAAAAADQ
+CgAAAAAAAAEAAAADAAAADQEAAAAAAADwCgAAAAAAAAEAAAADAAAAFwEAAAAAAAD4CgAA
+AAAAAAEAAAADAAAAGgEAAAAAAAAYCwAAAAAAAAEAAAADAAAAIgEAAAAAAAAgCwAAAAAA
+AAEAAAADAAAAJQEAAAAAAABACwAAAAAAAAEAAAADAAAALwEAAAAAAABICwAAAAAAAAEA
+AAADAAAAMgEAAAAAAABoCwAAAAAAAAEAAAADAAAAOgEAAAAAAABwCwAAAAAAAAEAAAAD
+AAAAPQEAAAAAAACQCwAAAAAAAAEAAAADAAAASAEAAAAAAACYCwAAAAAAAAEAAAADAAAA
+SwEAAAAAAAC4CwAAAAAAAAEAAAADAAAAUwEAAAAAAADACwAAAAAAAAEAAAADAAAAVgEA
+AAAAAADgCwAAAAAAAAEAAAADAAAAXgEAAAAAAADoCwAAAAAAAAEAAAADAAAAYQEAAAAA
+AAAIDAAAAAAAAAEAAAADAAAAaQEAAAAAAAAQDAAAAAAAAAEAAAADAAAAbAEAAAAAAAAw
+DAAAAAAAAAEAAAADAAAAcwEAAAAAAAA4DAAAAAAAAAEAAAADAAAAdgEAAAAAAABYDAAA
+AAAAAAEAAAADAAAAfQEAAAAAAABgDAAAAAAAAAEAAAADAAAAgAEAAAAAAACADAAAAAAA
+AAEAAAADAAAAhwEAAAAAAACIDAAAAAAAAAEAAAADAAAAigEAAAAAAACoDAAAAAAAAAEA
+AAADAAAAnAEAAAAAAACwDAAAAAAAAAEAAAADAAAAnwEAAAAAAADQDAAAAAAAAAEAAAAD
+AAAAqAEAAAAAAADYDAAAAAAAAAEAAAADAAAAqwEAAAAAAAD4DAAAAAAAAAEAAAADAAAA
+sgEAAAAAAAAADQAAAAAAAAEAAAADAAAAtQEAAAAAAAAgDQAAAAAAAAEAAAADAAAAuwEA
+AAAAAAAoDQAAAAAAAAEAAAADAAAAvgEAAAAAAABIDQAAAAAAAAEAAAADAAAAxAEAAAAA
+AABQDQAAAAAAAAEAAAADAAAAxwEAAAAAAABwDQAAAAAAAAEAAAADAAAA0AEAAAAAAAB4
+DQAAAAAAAAEAAAADAAAA0wEAAAAAAACYDQAAAAAAAAEAAAADAAAA3gEAAAAAAACgDQAA
+AAAAAAEAAAADAAAA4QEAAAAAAADADQAAAAAAAAEAAAADAAAA6QEAAAAAAADIDQAAAAAA
+AAEAAAADAAAA7AEAAAAAAADoDQAAAAAAAAEAAAADAAAA8wEAAAAAAADwDQAAAAAAAAEA
+AAADAAAA9gEAAAAAAAAQDgAAAAAAAAEAAAADAAAABQIAAAAAAAAYDgAAAAAAAAEAAAAD
+AAAACAIAAAAAAAA4DgAAAAAAAAEAAAADAAAAEAIAAAAAAABADgAAAAAAAAEAAAADAAAA
+EwIAAAAAAABgDgAAAAAAAAEAAAADAAAAJgIAAAAAAABoDgAAAAAAAAEAAAADAAAAKQIA
+AAAAAACIDgAAAAAAAAEAAAADAAAAMQIAAAAAAACQDgAAAAAAAAEAAAADAAAANAIAAAAA
+AACwDgAAAAAAAAEAAAADAAAAOgIAAAAAAAC4DgAAAAAAAAEAAAADAAAAPQIAAAAAAADY
+DgAAAAAAAAEAAAADAAAASQIAAAAAAADgDgAAAAAAAAEAAAADAAAATAIAAAAAAAAADwAA
+AAAAAAEAAAADAAAAVAIAAAAAAAAIDwAAAAAAAAEAAAADAAAAVwIAAAAAAAAoDwAAAAAA
+AAEAAAADAAAAXwIAAAAAAAAwDwAAAAAAAAEAAAADAAAAYgIAAAAAAABQDwAAAAAAAAEA
+AAADAAAAaQIAAAAAAABYDwAAAAAAAAEAAAADAAAAbAIAAAAAAAB4DwAAAAAAAAEAAAAD
+AAAAdwIAAAAAAACADwAAAAAAAAEAAAADAAAAegIAAAAAAACgDwAAAAAAAAEAAAADAAAA
+ggIAAAAAAACoDwAAAAAAAAEAAAADAAAAhQIAAAAAAADIDwAAAAAAAAEAAAADAAAAjQIA
+AAAAAADQDwAAAAAAAAEAAAADAAAAkAIAAAAAAADwDwAAAAAAAAEAAAADAAAAlwIAAAAA
+AAD4DwAAAAAAAAEAAAADAAAAmgIAAAAAAAAYEAAAAAAAAAEAAAADAAAApAIAAAAAAAAg
+EAAAAAAAAAEAAAADAAAApwIAAAAAAABAEAAAAAAAAAEAAAADAAAAsAIAAAAAAABIEAAA
+AAAAAAEAAAADAAAAswIAAAAAAABoEAAAAAAAAAEAAAADAAAAvQIAAAAAAABwEAAAAAAA
+AAEAAAADAAAAwAIAAAAAAACQEAAAAAAAAAEAAAADAAAAyAIAAAAAAACYEAAAAAAAAAEA
+AAADAAAAywIAAAAAAAC4EAAAAAAAAAEAAAADAAAA0wIAAAAAAADAEAAAAAAAAAEAAAAD
+AAAA1gIAAAAAAADgEAAAAAAAAAEAAAADAAAA3AIAAAAAAADoEAAAAAAAAAEAAAADAAAA
+3wIAAAAAAAAIEQAAAAAAAAEAAAADAAAA6QIAAAAAAAAQEQAAAAAAAAEAAAADAAAA7AIA
+AAAAAAAwEQAAAAAAAAEAAAADAAAA8QIAAAAAAAA4EQAAAAAAAAEAAAADAAAA9AIAAAAA
+AABYEQAAAAAAAAEAAAADAAAA/AIAAAAAAABgEQAAAAAAAAEAAAADAAAA/wIAAAAAAACA
+EQAAAAAAAAEAAAADAAAABgMAAAAAAACIEQAAAAAAAAEAAAADAAAACQMAAAAAAACoEQAA
+AAAAAAEAAAADAAAADwMAAAAAAACwEQAAAAAAAAEAAAADAAAAEgMAAAAAAADQEQAAAAAA
+AAEAAAADAAAADwMAAAAAAADYEQAAAAAAAAEAAAADAAAAGAMAAAAAAAD4EQAAAAAAAAEA
+AAADAAAADwMAAAAAAAAAEgAAAAAAAAEAAAADAAAAHwMAAAAAAAAgEgAAAAAAAAEAAAAD
+AAAADwMAAAAAAAAoEgAAAAAAAAEAAAADAAAAJgMAAAAAAABIEgAAAAAAAAEAAAADAAAA
+DwMAAAAAAABQEgAAAAAAAAEAAAADAAAALQMAAAAAAABwEgAAAAAAAAEAAAADAAAADwMA
+AAAAAAB4EgAAAAAAAAEAAAADAAAANAMAAAAAAACYEgAAAAAAAAEAAAADAAAADwMAAAAA
+AACgEgAAAAAAAAEAAAADAAAAOwMAAAAAAADAEgAAAAAAAAEAAAADAAAADwMAAAAAAADI
+EgAAAAAAAAEAAAADAAAAQgMAAAAAAADoEgAAAAAAAAEAAAADAAAADwMAAAAAAADwEgAA
+AAAAAAEAAAADAAAASQMAAAAAAAAQEwAAAAAAAAEAAAADAAAADwMAAAAAAAAYEwAAAAAA
+AAEAAAADAAAAUAMAAAAAAAA4EwAAAAAAAAEAAAADAAAADwMAAAAAAABAEwAAAAAAAAEA
+AAADAAAAVwMAAAAAAABgEwAAAAAAAAEAAAADAAAADwMAAAAAAABoEwAAAAAAAAEAAAAD
+AAAAXwMAAAAAAACIEwAAAAAAAAEAAAADAAAADwMAAAAAAACQEwAAAAAAAAEAAAADAAAA
+ZwMAAAAAAACwEwAAAAAAAAEAAAADAAAADwMAAAAAAAC4EwAAAAAAAAEAAAADAAAAbwMA
+AAAAAADYEwAAAAAAAAEAAAADAAAADwMAAAAAAADgEwAAAAAAAAEAAAADAAAAdwMAAAAA
+AAAAFAAAAAAAAAEAAAADAAAADwMAAAAAAAAIFAAAAAAAAAEAAAADAAAAfwMAAAAAAAAo
+FAAAAAAAAAEAAAADAAAADwMAAAAAAAAwFAAAAAAAAAEAAAADAAAAhwMAAAAAAABQFAAA
+AAAAAAEAAAADAAAADwMAAAAAAABYFAAAAAAAAAEAAAADAAAAjwMAAAAAAAB4FAAAAAAA
+AAEAAAADAAAADwMAAAAAAACAFAAAAAAAAAEAAAADAAAAlwMAAAAAAACgFAAAAAAAAAEA
+AAADAAAADwMAAAAAAACoFAAAAAAAAAEAAAADAAAAnwMAAAAAAADIFAAAAAAAAAEAAAAD
+AAAADwMAAAAAAADQFAAAAAAAAAEAAAADAAAApwMAAAAAAADwFAAAAAAAAAEAAAADAAAA
+DwMAAAAAAAD4FAAAAAAAAAEAAAADAAAArwMAAAAAAAAYFQAAAAAAAAEAAAADAAAADwMA
+AAAAAAAgFQAAAAAAAAEAAAADAAAAtwMAAAAAAABAFQAAAAAAAAEAAAADAAAADwMAAAAA
+AABIFQAAAAAAAAEAAAADAAAAvwMAAAAAAABoFQAAAAAAAAEAAAADAAAADwMAAAAAAABw
+FQAAAAAAAAEAAAADAAAAxwMAAAAAAACQFQAAAAAAAAEAAAADAAAAzwMAAAAAAACYFQAA
+AAAAAAEAAAADAAAA0gMAAAAAAAC4FQAAAAAAAAEAAAADAAAA2QMAAAAAAADAFQAAAAAA
+AAEAAAADAAAA3AMAAAAAAADgFQAAAAAAAAEAAAADAAAA5wMAAAAAAADoFQAAAAAAAAEA
+AAADAAAA6gMAAAAAAAAIFgAAAAAAAAEAAAADAAAA9gMAAAAAAAAQFgAAAAAAAAEAAAAD
+AAAA+QMAAAAAAAAwFgAAAAAAAAEAAAADAAAACAQAAAAAAAA4FgAAAAAAAAEAAAADAAAA
+CwQAAAAAAABYFgAAAAAAAAEAAAADAAAAGwQAAAAAAABgFgAAAAAAAAEAAAADAAAAHgQA
+AAAAAACAFgAAAAAAAAEAAAADAAAALgQAAAAAAACIFgAAAAAAAAEAAAADAAAAMQQAAAAA
+AACoFgAAAAAAAAEAAAADAAAAOAQAAAAAAACwFgAAAAAAAAEAAAADAAAAOwQAAAAAAADQ
+FgAAAAAAAAEAAAADAAAAQgQAAAAAAADYFgAAAAAAAAEAAAADAAAARQQAAAAAAAD4FgAA
+AAAAAAEAAAADAAAATQQAAAAAAAAAFwAAAAAAAAEAAAADAAAAUAQAAAAAAAAgFwAAAAAA
+AAEAAAADAAAAXgQAAAAAAAAoFwAAAAAAAAEAAAADAAAAYQQAAAAAAABIFwAAAAAAAAEA
+AAADAAAAawQAAAAAAABQFwAAAAAAAAEAAAADAAAAbgQAAAAAAABwFwAAAAAAAAEAAAAD
+AAAAeQQAAAAAAAB4FwAAAAAAAAEAAAADAAAAfAQAAAAAAACYFwAAAAAAAAEAAAADAAAA
+ggQAAAAAAACgFwAAAAAAAAEAAAADAAAAhQQAAAAAAADAFwAAAAAAAAEAAAADAAAAjwQA
+AAAAAADIFwAAAAAAAAEAAAADAAAAkgQAAAAAAADoFwAAAAAAAAEAAAADAAAAmwQAAAAA
+AADwFwAAAAAAAAEAAAADAAAAngQAAAAAAAAQGAAAAAAAAAEAAAADAAAApAQAAAAAAAAY
+GAAAAAAAAAEAAAADAAAApwQAAAAAAAA4GAAAAAAAAAEAAAADAAAArgQAAAAAAABAGAAA
+AAAAAAEAAAADAAAAsQQAAAAAAABgGAAAAAAAAAEAAAADAAAAuAQAAAAAAABoGAAAAAAA
+AAEAAAADAAAAuwQAAAAAAACIGAAAAAAAAAEAAAADAAAAwwQAAAAAAACQGAAAAAAAAAEA
+AAADAAAAxgQAAAAAAACwGAAAAAAAAAEAAAADAAAA0gQAAAAAAAC4GAAAAAAAAAEAAAAD
+AAAA1QQAAAAAAADYGAAAAAAAAAEAAAADAAAA4QQAAAAAAADgGAAAAAAAAAEAAAADAAAA
+5AQAAAAAAAAAGQAAAAAAAAEAAAADAAAA6wQAAAAAAAAIGQAAAAAAAAEAAAADAAAA7gQA
+AAAAAAAoGQAAAAAAAAEAAAADAAAA8wQAAAAAAAAwGQAAAAAAAAEAAAADAAAA9gQAAAAA
+AABQGQAAAAAAAAEAAAADAAAA/wQAAAAAAABYGQAAAAAAAAEAAAADAAAAAgUAAAAAAAB4
+GQAAAAAAAAEAAAADAAAACQUAAAAAAACAGQAAAAAAAAEAAAADAAAADAUAAAAAAACgGQAA
+AAAAAAEAAAADAAAAEQUAAAAAAACoGQAAAAAAAAEAAAADAAAAFAUAAAAAAADIGQAAAAAA
+AAEAAAADAAAAIAUAAAAAAADQGQAAAAAAAAEAAAADAAAAIwUAAAAAAADwGQAAAAAAAAEA
+AAADAAAAKgUAAAAAAAD4GQAAAAAAAAEAAAADAAAALQUAAAAAAAAYGgAAAAAAAAEAAAAD
+AAAANgUAAAAAAAAgGgAAAAAAAAEAAAADAAAAOQUAAAAAAABAGgAAAAAAAAEAAAADAAAA
+RQUAAAAAAABIGgAAAAAAAAEAAAADAAAASAUAAAAAAABoGgAAAAAAAAEAAAADAAAATgUA
+AAAAAABwGgAAAAAAAAEAAAADAAAAUQUAAAAAAACQGgAAAAAAAAEAAAADAAAAWQUAAAAA
+AACYGgAAAAAAAAEAAAADAAAAXAUAAAAAAAC4GgAAAAAAAAEAAAADAAAAYwUAAAAAAADA
+GgAAAAAAAAEAAAADAAAAZgUAAAAAAADgGgAAAAAAAAEAAAADAAAAcwUAAAAAAADoGgAA
+AAAAAAEAAAADAAAAdgUAAAAAAAAIGwAAAAAAAAEAAAADAAAAgAUAAAAAAAAQGwAAAAAA
+AAEAAAADAAAAgwUAAAAAAAAwGwAAAAAAAAEAAAADAAAAkwUAAAAAAAA4GwAAAAAAAAEA
+AAADAAAAlgUAAAAAAABYGwAAAAAAAAEAAAADAAAAnwUAAAAAAABgGwAAAAAAAAEAAAAD
+AAAAogUAAAAAAACAGwAAAAAAAAEAAAADAAAArwUAAAAAAACIGwAAAAAAAAEAAAADAAAA
+sgUAAAAAAACoGwAAAAAAAAEAAAADAAAAuAUAAAAAAACwGwAAAAAAAAEAAAADAAAAuwUA
+AAAAAADQGwAAAAAAAAEAAAADAAAAwgUAAAAAAADYGwAAAAAAAAEAAAADAAAAxQUAAAAA
+AAD4GwAAAAAAAAEAAAADAAAA0QUAAAAAAAAAHAAAAAAAAAEAAAADAAAA1AUAAAAAAAAg
+HAAAAAAAAAEAAAADAAAA2gUAAAAAAAAoHAAAAAAAAAEAAAADAAAA3QUAAAAAAABIHAAA
+AAAAAAEAAAADAAAA5AUAAAAAAABQHAAAAAAAAAEAAAADAAAA5wUAAAAAAABwHAAAAAAA
+AAEAAAADAAAA8AUAAAAAAAB4HAAAAAAAAAEAAAADAAAA8wUAAAAAAACYHAAAAAAAAAEA
+AAADAAAABQYAAAAAAACgHAAAAAAAAAEAAAADAAAACAYAAAAAAADAHAAAAAAAAAEAAAAD
+AAAAEAYAAAAAAADIHAAAAAAAAAEAAAADAAAAEwYAAAAAAADoHAAAAAAAAAEAAAADAAAA
+GgYAAAAAAADwHAAAAAAAAAEAAAADAAAAHQYAAAAAAAAQHQAAAAAAAAEAAAADAAAAJQYA
+AAAAAAAYHQAAAAAAAAEAAAADAAAAKAYAAAAAAAA4HQAAAAAAAAEAAAADAAAAPQYAAAAA
+AABAHQAAAAAAAAEAAAADAAAAQAYAAAAAAABgHQAAAAAAAAEAAAADAAAATwYAAAAAAABo
+HQAAAAAAAAEAAAADAAAAUgYAAAAAAACIHQAAAAAAAAEAAAADAAAAYAYAAAAAAACQHQAA
+AAAAAAEAAAADAAAAYwYAAAAAAACwHQAAAAAAAAEAAAADAAAAgQYAAAAAAAC4HQAAAAAA
+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
+AAEAAAABAAAAkGQAAAAAAAAQEwAAAAAAAAEAAAABAAAAm2QAAAAAAAAoEwAAAAAAAAEA
+AAABAAAAt2QAAAAAAABAEwAAAAAAAAEAAAABAAAA8mQAAAAAAABwEwAAAAAAAAEAAAAB
+AAAAFGYAAAAAAACwEwAAAAAAAAEAAAABAAAACmwAAAAAAADIEwAAAAAAAAEAAAABAAAA
+fmwAAAAAAADoEwAAAAAAAAEAAAABAAAAkmwAAAAAAAAIFAAAAAAAAAEAAAABAAAAqmwA
+AAAAAAAoFAAAAAAAAAEAAAABAAAAEG0AAAAAAABIFAAAAAAAAAEAAAABAAAA6m0AAAAA
+AACIFAAAAAAAAAEAAAABAAAADXAAAAAAAACwFAAAAAAAAAEAAAABAAAAgXAAAAAAAADI
+FAAAAAAAAAEAAAABAAAALnEAAAAAAADoFAAAAAAAAAEAAAABAAAAE3IAAAAAAAAAFQAA
+AAAAAAEAAAABAAAAK3IAAAAAAABAFQAAAAAAAAEAAAABAAAAE3UAAAAAAABwFQAAAAAA
+AAEAAAABAAAA3XcAAAAAAACQFQAAAAAAAAEAAAABAAAAUXgAAAAAAACoFQAAAAAAAAEA
+AAABAAAAbXgAAAAAAADQFQAAAAAAAAEAAAABAAAA83gAAAAAAADoFQAAAAAAAAEAAAAB
+AAAA+XgAAAAAAAAYFgAAAAAAAAEAAAABAAAAAHkAAAAAAAA4FgAAAAAAAAEAAAABAAAA
+LXkAAAAAAABYFgAAAAAAAAEAAAABAAAAYHkAAAAAAACAFgAAAAAAAAEAAAABAAAAPXoA
+AAAAAACYFgAAAAAAAAEAAAABAAAAm3oAAAAAAACwFgAAAAAAAAEAAAABAAAA+3wAAAAA
+AADIFgAAAAAAAAEAAAABAAAAJH0AAAAAAADgFgAAAAAAAAEAAAABAAAAZX0AAAAAAAAI
+FwAAAAAAAAEAAAABAAAA930AAAAAAAAgFwAAAAAAAAEAAAABAAAAXn4AAAAAAAA4FwAA
+AAAAAAEAAAABAAAAkH4AAAAAAABgFwAAAAAAAAEAAAABAAAAKH8AAAAAAAB4FwAAAAAA
+AAEAAAABAAAA138AAAAAAACQFwAAAAAAAAEAAAABAAAA3X8AAAAAAACoFwAAAAAAAAEA
+AAABAAAA5X8AAAAAAADAFwAAAAAAAAEAAAABAAAAL4AAAAAAAADYFwAAAAAAAAEAAAAB
+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
+AAAAAADQLwAAAAAAAAEAAAABAAAAo+cAAAAAAADoLwAAAAAAAAEAAAABAAAA2OcAAAAA
+AAAAMAAAAAAAAAEAAAABAAAADegAAAAAAAAYMAAAAAAAAAEAAAABAAAATugAAAAAAAAw
+MAAAAAAAAAEAAAABAAAAVOgAAAAAAABIMAAAAAAAAAEAAAABAAAAZOgAAAAAAABgMAAA
+AAAAAAEAAAABAAAAcugAAAAAAAB4MAAAAAAAAAEAAAABAAAAgOgAAAAAAACQMAAAAAAA
+AAEAAAABAAAAh+gAAAAAAACwMAAAAAAAAAEAAAABAAAArugAAAAAAADIMAAAAAAAAAEA
+AAABAAAAtOgAAAAAAADwMAAAAAAAAAEAAAABAAAAJukAAAAAAAAQMQAAAAAAAAEAAAAB
+AAAAROkAAAAAAAA4MQAAAAAAAAEAAAABAAAA2+kAAAAAAABYMQAAAAAAAAEAAAABAAAA
++ekAAAAAAABwMQAAAAAAAAEAAAABAAAAB+oAAAAAAACIMQAAAAAAAAEAAAABAAAAUeoA
+AAAAAACwMQAAAAAAAAEAAAABAAAA6+oAAAAAAADQMQAAAAAAAAEAAAABAAAADOsAAAAA
+AADoMQAAAAAAAAEAAAABAAAASesAAAAAAAAIMgAAAAAAAAEAAAABAAAAcOwAAAAAAAAo
+MgAAAAAAAAEAAAABAAAAhOwAAAAAAABAMgAAAAAAAAEAAAABAAAApuwAAAAAAABgMgAA
+AAAAAAEAAAABAAAAxO4AAAAAAACAMgAAAAAAAAEAAAABAAAAr+8AAAAAAACYMgAAAAAA
+AAEAAAABAAAA4O8AAAAAAAC4MgAAAAAAAAEAAAABAAAAH/IAAAAAAADYMgAAAAAAAAEA
+AAABAAAAdfMAAAAAAAAQMwAAAAAAAAEAAAABAAAAjPMAAAAAAAA4MwAAAAAAAAEAAAAB
+AAAAH/QAAAAAAABQMwAAAAAAAAEAAAABAAAAU/QAAAAAAABoMwAAAAAAAAEAAAABAAAA
+h/QAAAAAAACQMwAAAAAAAAEAAAABAAAA9vQAAAAAAADAMwAAAAAAAAEAAAABAAAADPUA
+AAAAAAD4MwAAAAAAAAEAAAABAAAA6PUAAAAAAAAQNAAAAAAAAAEAAAABAAAA8PUAAAAA
+AAAoNAAAAAAAAAEAAAABAAAA+PUAAAAAAABANAAAAAAAAAEAAAABAAAABPYAAAAAAABg
+NAAAAAAAAAEAAAABAAAANPYAAAAAAACANAAAAAAAAAEAAAABAAAAa/YAAAAAAACgNAAA
+AAAAAAEAAAABAAAAjPYAAAAAAAC4NAAAAAAAAAEAAAABAAAAofYAAAAAAADQNAAAAAAA
+AAEAAAABAAAA8/YAAAAAAADoNAAAAAAAAAEAAAABAAAARfcAAAAAAAAANQAAAAAAAAEA
+AAABAAAAb/cAAAAAAAAYNQAAAAAAAAEAAAABAAAAyfcAAAAAAAAwNQAAAAAAAAEAAAAB
+AAAA+fcAAAAAAAB4NQAAAAAAAAEAAAABAAAAKPkAAAAAAAC4NQAAAAAAAAEAAAABAAAA
+mgYBAAAAAADQNQAAAAAAAAEAAAABAAAA+gYBAAAAAADwNQAAAAAAAAEAAAABAAAAHwcB
+AAAAAAAwNgAAAAAAAAEAAAABAAAA2QgBAAAAAABINgAAAAAAAAEAAAABAAAATAkBAAAA
+AABoNgAAAAAAAAEAAAABAAAAXwkBAAAAAACINgAAAAAAAAEAAAABAAAAjgkBAAAAAACw
+NgAAAAAAAAEAAAABAAAA3gsBAAAAAADoNgAAAAAAAAEAAAABAAAAeA4BAAAAAAAQNwAA
+AAAAAAEAAAABAAAANA8BAAAAAAAoNwAAAAAAAAEAAAABAAAAUA8BAAAAAABANwAAAAAA
+AAEAAAABAAAAnw8BAAAAAABoNwAAAAAAAAEAAAABAAAAGBABAAAAAACINwAAAAAAAAEA
+AAABAAAAqBABAAAAAAC4NwAAAAAAAAEAAAABAAAAUxEBAAAAAADQNwAAAAAAAAEAAAAB
+AAAAiRIBAAAAAADwNwAAAAAAAAEAAAABAAAABhMBAAAAAAAwOAAAAAAAAAEAAAABAAAA
+VhcBAAAAAABwOAAAAAAAAAEAAAABAAAAJB0BAAAAAACIOAAAAAAAAAEAAAABAAAA6h0B
+AAAAAACoOAAAAAAAAAEAAAABAAAAFh4BAAAAAADYOAAAAAAAAAEAAAABAAAASyEBAAAA
+AAAYOQAAAAAAAAEAAAABAAAAvSYBAAAAAABYOQAAAAAAAAEAAAABAAAAqycBAAAAAACI
+OQAAAAAAAAEAAAABAAAA0igBAAAAAAC4OQAAAAAAAAEAAAABAAAAeCkBAAAAAADYOQAA
+AAAAAAEAAAABAAAA/ykBAAAAAAAYOgAAAAAAAAEAAAABAAAAVysBAAAAAAAwOgAAAAAA
+AAEAAAABAAAAzysBAAAAAABIOgAAAAAAAAEAAAABAAAATiwBAAAAAABoOgAAAAAAAAEA
+AAABAAAAQC0BAAAAAACAOgAAAAAAAAEAAAABAAAAbS0BAAAAAACoOgAAAAAAAAEAAAAB
+AAAAkC4BAAAAAADAOgAAAAAAAAEAAAABAAAAqC4BAAAAAADYOgAAAAAAAAEAAAABAAAA
+oy8BAAAAAAAAOwAAAAAAAAEAAAABAAAAWzABAAAAAAAwOwAAAAAAAAEAAAABAAAAFDEB
+AAAAAABwOwAAAAAAAAEAAAABAAAAgDIBAAAAAACgOwAAAAAAAAEAAAABAAAAIDMBAAAA
+AADIOwAAAAAAAAEAAAABAAAAzTMBAAAAAADoOwAAAAAAAAEAAAABAAAABDQBAAAAAAAI
+PAAAAAAAAAEAAAABAAAAQTQBAAAAAABIPAAAAAAAAAEAAAABAAAAlTUBAAAAAABgPAAA
+AAAAAAEAAAABAAAABTYBAAAAAACAPAAAAAAAAAEAAAABAAAAfjYBAAAAAACgPAAAAAAA
+AAEAAAABAAAAVToBAAAAAAC4PAAAAAAAAAEAAAABAAAAZDoBAAAAAADQPAAAAAAAAAEA
+AAABAAAAeDoBAAAAAADoPAAAAAAAAAEAAAABAAAAkToBAAAAAAAAPQAAAAAAAAEAAAAB
+AAAAwjoBAAAAAAAwPQAAAAAAAAEAAAABAAAAMDwBAAAAAABIPQAAAAAAAAEAAAABAAAA
+aT0BAAAAAABgPQAAAAAAAAEAAAABAAAA0D0BAAAAAAB4PQAAAAAAAAEAAAABAAAA2D0B
+AAAAAACQPQAAAAAAAAEAAAABAAAAQT4BAAAAAACoPQAAAAAAAAEAAAABAAAAfD8BAAAA
+AADYPQAAAAAAAAEAAAABAAAAkD8BAAAAAAD4PQAAAAAAAAEAAAABAAAA5T8BAAAAAAAY
+PgAAAAAAAAEAAAABAAAAHkABAAAAAAAwPgAAAAAAAAEAAAABAAAAfkABAAAAAABIPgAA
+AAAAAAEAAAABAAAAhkABAAAAAABgPgAAAAAAAAEAAAABAAAAjkABAAAAAACIPgAAAAAA
+AAEAAAABAAAAzkEBAAAAAACoPgAAAAAAAAEAAAABAAAA/kEBAAAAAADQPgAAAAAAAAEA
+AAABAAAAwkYBAAAAAADwPgAAAAAAAAEAAAABAAAAaUcBAAAAAAAQPwAAAAAAAAEAAAAB
+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
====
-
diff --git a/usr/src/uts/common/io/dld/dld_drv.c b/usr/src/uts/common/io/dld/dld_drv.c
index c37ab7651a..778a73528d 100644
--- a/usr/src/uts/common/io/dld/dld_drv.c
+++ b/usr/src/uts/common/io/dld/dld_drv.c
@@ -55,6 +55,19 @@ static int drv_attach(dev_info_t *, ddi_attach_cmd_t);
static int drv_detach(dev_info_t *, ddi_detach_cmd_t);
/*
+ * Secure objects declarations
+ */
+#define SECOBJ_WEP_HASHSZ 67
+static krwlock_t drv_secobj_lock;
+static kmem_cache_t *drv_secobj_cachep;
+static mod_hash_t *drv_secobj_hash;
+static void drv_secobj_init(void);
+static void drv_secobj_fini(void);
+static void drv_ioc_secobj_set(dld_ctl_str_t *, mblk_t *);
+static void drv_ioc_secobj_get(dld_ctl_str_t *, mblk_t *);
+static void drv_ioc_secobj_unset(dld_ctl_str_t *, mblk_t *);
+
+/*
* The following entry points are private to dld and are used for control
* operations only. The entry points exported to mac drivers are defined
* in dld_str.c. Refer to the comment on top of dld_str.c for details.
@@ -161,7 +174,6 @@ _info(struct modinfo *modinfop)
return (mod_info(&drv_modlinkage, modinfop));
}
-
/*
* Initialize component modules.
*/
@@ -170,6 +182,7 @@ drv_init(void)
{
dld_ctl_vmem = vmem_create("dld_ctl", (void *)1, MAXMIN, 1,
NULL, NULL, NULL, 1, VM_SLEEP | VMC_IDENTIFIER);
+ drv_secobj_init();
dld_str_init();
}
@@ -181,6 +194,7 @@ drv_fini(void)
if ((err = dld_str_fini()) != 0)
return (err);
+ drv_secobj_fini();
vmem_destroy(dld_ctl_vmem);
return (0);
}
@@ -489,6 +503,15 @@ drv_ioc(dld_ctl_str_t *ctls, mblk_t *mp)
case DLDIOCVLAN:
drv_ioc_vlan(ctls, mp);
return;
+ case DLDIOCSECOBJSET:
+ drv_ioc_secobj_set(ctls, mp);
+ return;
+ case DLDIOCSECOBJGET:
+ drv_ioc_secobj_get(ctls, mp);
+ return;
+ case DLDIOCSECOBJUNSET:
+ drv_ioc_secobj_unset(ctls, mp);
+ return;
default:
miocnak(ctls->cs_wq, mp, 0, ENOTSUP);
return;
@@ -524,3 +547,222 @@ drv_uw_srv(queue_t *q)
while (mp = getq(q))
drv_uw_put(q, mp);
}
+
+/*
+ * Secure objects implementation
+ */
+
+/* ARGSUSED */
+static int
+drv_secobj_ctor(void *buf, void *arg, int kmflag)
+{
+ bzero(buf, sizeof (dld_secobj_t));
+ return (0);
+}
+
+static void
+drv_secobj_init(void)
+{
+ rw_init(&drv_secobj_lock, NULL, RW_DEFAULT, NULL);
+ drv_secobj_cachep = kmem_cache_create("drv_secobj_cache",
+ sizeof (dld_secobj_t), 0, drv_secobj_ctor, NULL,
+ NULL, NULL, NULL, 0);
+ drv_secobj_hash = mod_hash_create_extended("drv_secobj_hash",
+ SECOBJ_WEP_HASHSZ, mod_hash_null_keydtor, mod_hash_null_valdtor,
+ mod_hash_bystr, NULL, mod_hash_strkey_cmp, KM_SLEEP);
+}
+
+static void
+drv_secobj_fini(void)
+{
+ mod_hash_destroy_hash(drv_secobj_hash);
+ kmem_cache_destroy(drv_secobj_cachep);
+ rw_destroy(&drv_secobj_lock);
+}
+
+static void
+drv_ioc_secobj_set(dld_ctl_str_t *ctls, mblk_t *mp)
+{
+ dld_ioc_secobj_set_t *ssp;
+ dld_secobj_t *sobjp, *objp;
+ int err = EINVAL;
+ queue_t *q = ctls->cs_wq;
+
+ if ((err = miocpullup(mp, sizeof (dld_ioc_secobj_set_t))) != 0)
+ goto failed;
+
+ ssp = (dld_ioc_secobj_set_t *)mp->b_cont->b_rptr;
+ sobjp = &ssp->ss_obj;
+
+ if (sobjp->so_class != DLD_SECOBJ_CLASS_WEP)
+ goto failed;
+
+ if (sobjp->so_name[DLD_SECOBJ_NAME_MAX - 1] != '\0' ||
+ sobjp->so_len > DLD_SECOBJ_VAL_MAX)
+ goto failed;
+
+ rw_enter(&drv_secobj_lock, RW_WRITER);
+ err = mod_hash_find(drv_secobj_hash, (mod_hash_key_t)sobjp->so_name,
+ (mod_hash_val_t *)&objp);
+ if (err == 0) {
+ if ((ssp->ss_flags & DLD_SECOBJ_OPT_CREATE) != 0) {
+ err = EEXIST;
+ rw_exit(&drv_secobj_lock);
+ goto failed;
+ }
+ } else {
+ ASSERT(err == MH_ERR_NOTFOUND);
+ if ((ssp->ss_flags & DLD_SECOBJ_OPT_CREATE) == 0) {
+ err = ENOENT;
+ rw_exit(&drv_secobj_lock);
+ goto failed;
+ }
+ objp = kmem_cache_alloc(drv_secobj_cachep, KM_SLEEP);
+ (void) strlcpy(objp->so_name, sobjp->so_name,
+ DLD_SECOBJ_NAME_MAX);
+
+ err = mod_hash_insert(drv_secobj_hash,
+ (mod_hash_key_t)objp->so_name, (mod_hash_val_t)objp);
+ ASSERT(err == 0);
+ }
+ bcopy(sobjp->so_val, objp->so_val, sobjp->so_len);
+ objp->so_len = sobjp->so_len;
+ objp->so_class = sobjp->so_class;
+ rw_exit(&drv_secobj_lock);
+ miocack(q, mp, 0, 0);
+ return;
+
+failed:
+ ASSERT(err != 0);
+ miocnak(q, mp, 0, err);
+
+}
+
+typedef struct dld_secobj_state {
+ uint_t ss_free;
+ uint_t ss_count;
+ int ss_rc;
+ dld_secobj_t *ss_objp;
+} dld_secobj_state_t;
+
+/* ARGSUSED */
+static uint_t
+drv_secobj_walker(mod_hash_key_t key, mod_hash_val_t *val, void *arg)
+{
+ dld_secobj_state_t *statep = arg;
+ dld_secobj_t *sobjp = (dld_secobj_t *)val;
+
+ if (statep->ss_free < sizeof (dld_secobj_t)) {
+ statep->ss_rc = ENOSPC;
+ return (MH_WALK_TERMINATE);
+ }
+ bcopy(sobjp, statep->ss_objp, sizeof (dld_secobj_t));
+ statep->ss_objp++;
+ statep->ss_free -= sizeof (dld_secobj_t);
+ statep->ss_count++;
+ return (MH_WALK_CONTINUE);
+}
+
+static void
+drv_ioc_secobj_get(dld_ctl_str_t *ctls, mblk_t *mp)
+{
+ dld_ioc_secobj_get_t *sgp;
+ dld_secobj_t *sobjp, *objp;
+ int err = EINVAL;
+ uint_t extra = 0;
+ queue_t *q = ctls->cs_wq;
+ mblk_t *bp;
+
+ if ((err = miocpullup(mp, sizeof (dld_ioc_secobj_get_t))) != 0)
+ goto failed;
+
+ if ((bp = msgpullup(mp->b_cont, -1)) == NULL)
+ goto failed;
+
+ freemsg(mp->b_cont);
+ mp->b_cont = bp;
+ sgp = (dld_ioc_secobj_get_t *)bp->b_rptr;
+ sobjp = &sgp->sg_obj;
+
+ if (sobjp->so_name[DLD_SECOBJ_NAME_MAX - 1] != '\0')
+ goto failed;
+
+ rw_enter(&drv_secobj_lock, RW_READER);
+ if (sobjp->so_name[0] != '\0') {
+ err = mod_hash_find(drv_secobj_hash,
+ (mod_hash_key_t)sobjp->so_name, (mod_hash_val_t *)&objp);
+ if (err != 0) {
+ ASSERT(err == MH_ERR_NOTFOUND);
+ err = ENOENT;
+ rw_exit(&drv_secobj_lock);
+ goto failed;
+ }
+ bcopy(objp->so_val, sobjp->so_val, objp->so_len);
+ sobjp->so_len = objp->so_len;
+ sobjp->so_class = objp->so_class;
+ sgp->sg_count = 1;
+ } else {
+ dld_secobj_state_t state;
+
+ state.ss_free = MBLKL(bp) - sizeof (dld_ioc_secobj_get_t);
+ state.ss_count = 0;
+ state.ss_rc = 0;
+ state.ss_objp = (dld_secobj_t *)(sgp + 1);
+ mod_hash_walk(drv_secobj_hash, drv_secobj_walker, &state);
+ if (state.ss_rc != 0) {
+ err = state.ss_rc;
+ rw_exit(&drv_secobj_lock);
+ goto failed;
+ }
+ sgp->sg_count = state.ss_count;
+ extra = state.ss_count * sizeof (dld_secobj_t);
+ }
+ rw_exit(&drv_secobj_lock);
+ miocack(q, mp, sizeof (dld_ioc_secobj_get_t) + extra, 0);
+ return;
+
+failed:
+ ASSERT(err != 0);
+ miocnak(q, mp, 0, err);
+
+}
+
+static void
+drv_ioc_secobj_unset(dld_ctl_str_t *ctls, mblk_t *mp)
+{
+ dld_ioc_secobj_unset_t *sup;
+ dld_secobj_t *objp;
+ mod_hash_val_t val;
+ int err = EINVAL;
+ queue_t *q = ctls->cs_wq;
+
+ if ((err = miocpullup(mp, sizeof (dld_ioc_secobj_unset_t))) != 0)
+ goto failed;
+
+ sup = (dld_ioc_secobj_unset_t *)mp->b_cont->b_rptr;
+ if (sup->su_name[DLD_SECOBJ_NAME_MAX - 1] != '\0')
+ goto failed;
+
+ rw_enter(&drv_secobj_lock, RW_WRITER);
+ err = mod_hash_find(drv_secobj_hash, (mod_hash_key_t)sup->su_name,
+ (mod_hash_val_t *)&objp);
+ if (err != 0) {
+ ASSERT(err == MH_ERR_NOTFOUND);
+ err = ENOENT;
+ rw_exit(&drv_secobj_lock);
+ goto failed;
+ }
+ err = mod_hash_remove(drv_secobj_hash, (mod_hash_key_t)sup->su_name,
+ (mod_hash_val_t *)&val);
+ ASSERT(err == 0);
+ ASSERT(objp == (dld_secobj_t *)val);
+
+ kmem_cache_free(drv_secobj_cachep, objp);
+ rw_exit(&drv_secobj_lock);
+ miocack(q, mp, 0, 0);
+ return;
+
+failed:
+ ASSERT(err != 0);
+ miocnak(q, mp, 0, err);
+}
diff --git a/usr/src/uts/common/io/dld/dld_proto.c b/usr/src/uts/common/io/dld/dld_proto.c
index 88d1e46ef6..e4939245f7 100644
--- a/usr/src/uts/common/io/dld/dld_proto.c
+++ b/usr/src/uts/common/io/dld/dld_proto.c
@@ -274,7 +274,10 @@ proto_info_req(dld_str_t *dsp, union DL_primitives *udlp, mblk_t *mp)
/*
* Set the media type (properly this time).
*/
- dlp->dl_mac_type = minfop->mi_media;
+ if (dsp->ds_native)
+ dlp->dl_mac_type = minfop->mi_nativemedia;
+ else
+ dlp->dl_mac_type = minfop->mi_media;
/*
* Set the DLSAP length. We only support 16 bit values and they
diff --git a/usr/src/uts/common/io/dld/dld_str.c b/usr/src/uts/common/io/dld/dld_str.c
index 7b311cf7e6..9ebffec151 100644
--- a/usr/src/uts/common/io/dld/dld_str.c
+++ b/usr/src/uts/common/io/dld/dld_str.c
@@ -52,6 +52,7 @@ static void str_notify_capab_reneg(dld_str_t *);
static void str_notify_speed(dld_str_t *, uint32_t);
static void str_notify(void *, mac_notify_type_t);
+static void ioc_native(dld_str_t *, mblk_t *);
static void ioc_raw(dld_str_t *, mblk_t *);
static void ioc_fast(dld_str_t *, mblk_t *);
static void ioc(dld_str_t *, mblk_t *);
@@ -688,6 +689,7 @@ dld_str_destroy(dld_str_t *dsp)
dsp->ds_notifications = 0;
dsp->ds_passivestate = DLD_UNINITIALIZED;
dsp->ds_mode = DLD_UNITDATA;
+ dsp->ds_native = B_FALSE;
/*
* Free the dummy mblk if exists.
@@ -945,16 +947,18 @@ str_mdata_raw_put(dld_str_t *dsp, mblk_t *mp)
/*
* Certain MAC type plugins provide an illusion for raw DLPI
* consumers. They pretend that the MAC layer is something that
- * it's not for the benefit of observability tools. For example, a
- * wifi plugin might pretend that it's Ethernet for such consumers.
- * Here, we call into the MAC layer so that this illusion can be
- * maintained. The plugin will optionally transform the MAC header
- * here into something that can be passed down. The header goes
- * from raw mode to "cooked" mode.
- */
- if ((newmp = mac_header_cook(dsp->ds_mh, mp)) == NULL)
- goto discard;
- mp = newmp;
+ * it's not for the benefit of observability tools. For example,
+ * mac_wifi pretends that it's Ethernet for such consumers.
+ * Here, unless native mode is enabled, we call into the MAC layer so
+ * that this illusion can be maintained. The plugin will optionally
+ * transform the MAC header here into something that can be passed
+ * down. The header goes from raw mode to "cooked" mode.
+ */
+ if (!dsp->ds_native) {
+ if ((newmp = mac_header_cook(dsp->ds_mh, mp)) == NULL)
+ goto discard;
+ mp = newmp;
+ }
size = MBLKL(mp);
@@ -1202,18 +1206,21 @@ dld_str_rx_raw(void *arg, mac_resource_handle_t mrh, mblk_t *mp,
* Certain MAC type plugins provide an illusion for raw
* DLPI consumers. They pretend that the MAC layer is
* something that it's not for the benefit of observability
- * tools. For example, a wifi plugin might pretend that
- * it's Ethernet for such consumers. Here, we call into
- * the MAC layer so that this illusion can be maintained.
- * The plugin will optionally transform the MAC header here
- * into something that can be passed up to raw consumers.
- * The header goes from "cooked" mode to raw mode.
+ * tools. For example, mac_wifi pretends that it's Ethernet
+ * for such consumers. Here, unless native mode is enabled,
+ * we call into the MAC layer so that this illusion can be
+ * maintained. The plugin will optionally transform the MAC
+ * header here into something that can be passed up to raw
+ * consumers. The header goes from "cooked" mode to raw mode.
*/
- if ((newmp = mac_header_uncook(dsp->ds_mh, mp)) == NULL) {
- freemsg(mp);
- goto next;
+ if (!dsp->ds_native) {
+ newmp = mac_header_uncook(dsp->ds_mh, mp);
+ if (newmp == NULL) {
+ freemsg(mp);
+ goto next;
+ }
+ mp = newmp;
}
- mp = newmp;
/*
* Strip the VLAN tag for VLAN streams.
@@ -1875,6 +1882,9 @@ dld_ioc(dld_str_t *dsp, mblk_t *mp)
ASSERT(dsp->ds_type == DLD_DLPI);
switch (cmd) {
+ case DLIOCNATIVE:
+ ioc_native(dsp, mp);
+ break;
case DLIOCRAW:
ioc_raw(dsp, mp);
break;
@@ -1887,6 +1897,32 @@ dld_ioc(dld_str_t *dsp, mblk_t *mp)
}
/*
+ * DLIOCNATIVE
+ */
+static void
+ioc_native(dld_str_t *dsp, mblk_t *mp)
+{
+ queue_t *q = dsp->ds_wq;
+ const mac_info_t *mip = dsp->ds_mip;
+
+ rw_enter(&dsp->ds_lock, RW_WRITER);
+
+ /*
+ * Native mode can be enabled if it's disabled and if the
+ * native media type is different.
+ */
+ if (!dsp->ds_native && mip->mi_media != mip->mi_nativemedia)
+ dsp->ds_native = B_TRUE;
+
+ rw_exit(&dsp->ds_lock);
+
+ if (dsp->ds_native)
+ miocack(q, mp, 0, mip->mi_nativemedia);
+ else
+ miocnak(q, mp, 0, ENOTSUP);
+}
+
+/*
* DLIOCRAW
*/
static void
diff --git a/usr/src/uts/common/io/dls/dls_vlan.c b/usr/src/uts/common/io/dls/dls_vlan.c
index eb6bc4c3bb..bea767627a 100644
--- a/usr/src/uts/common/io/dls/dls_vlan.c
+++ b/usr/src/uts/common/io/dls/dls_vlan.c
@@ -308,7 +308,9 @@ again:
* dls_mac_hold() assigns the dl_mip of the dls_link_t we're
* interested in.
*/
- if (dvp->dv_id != VLAN_ID_NONE && dlp->dl_mip->mi_media != DL_ETHER) {
+ if (dvp->dv_id != VLAN_ID_NONE &&
+ (dlp->dl_mip->mi_media != DL_ETHER ||
+ dlp->dl_mip->mi_nativemedia != DL_ETHER)) {
dls_mac_rele(dlp);
err = EINVAL;
goto done;
diff --git a/usr/src/uts/common/io/mac/mac.c b/usr/src/uts/common/io/mac/mac.c
index 3f414af351..74df893b58 100644
--- a/usr/src/uts/common/io/mac/mac.c
+++ b/usr/src/uts/common/io/mac/mac.c
@@ -1083,8 +1083,8 @@ mac_register(mac_register_t *mregp, mac_handle_t *mhp)
mip->mi_driver = mregp->m_driver;
mip->mi_type = mtype;
-
mip->mi_info.mi_media = mtype->mt_type;
+ mip->mi_info.mi_nativemedia = mtype->mt_nativetype;
mip->mi_info.mi_sdu_min = mregp->m_min_sdu;
if (mregp->m_max_sdu <= mregp->m_min_sdu) {
err = EINVAL;
@@ -1814,6 +1814,7 @@ mactype_register(mactype_register_t *mtrp)
mtp->mt_ident = mtrp->mtr_ident;
mtp->mt_ops = *ops;
mtp->mt_type = mtrp->mtr_mactype;
+ mtp->mt_nativetype = mtrp->mtr_nativetype;
mtp->mt_addr_length = mtrp->mtr_addrlen;
if (mtrp->mtr_brdcst_addr != NULL) {
mtp->mt_brdcst_addr = kmem_alloc(mtrp->mtr_addrlen, KM_SLEEP);
diff --git a/usr/src/uts/common/io/mac/plugins/mac_ether.c b/usr/src/uts/common/io/mac/plugins/mac_ether.c
index 62f2f2c6b3..69ea0f66bb 100644
--- a/usr/src/uts/common/io/mac/plugins/mac_ether.c
+++ b/usr/src/uts/common/io/mac/plugins/mac_ether.c
@@ -122,6 +122,7 @@ _init(void)
mtrp->mtr_ident = MAC_PLUGIN_IDENT_ETHER;
mtrp->mtr_ops = &mac_ether_type_ops;
mtrp->mtr_mactype = DL_ETHER;
+ mtrp->mtr_nativetype = DL_ETHER;
mtrp->mtr_addrlen = ETHERADDRL;
mtrp->mtr_brdcst_addr = ether_brdcst;
mtrp->mtr_stats = ether_stats;
diff --git a/usr/src/uts/common/io/mac/plugins/mac_wifi.c b/usr/src/uts/common/io/mac/plugins/mac_wifi.c
new file mode 100644
index 0000000000..81da3e878c
--- /dev/null
+++ b/usr/src/uts/common/io/mac/plugins/mac_wifi.c
@@ -0,0 +1,416 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * WiFi MAC Type plugin for the Nemo mac module
+ *
+ * This is a bit of mutant since we pretend to be mostly DL_ETHER.
+ */
+
+#include <sys/types.h>
+#include <sys/modctl.h>
+#include <sys/dlpi.h>
+#include <sys/mac.h>
+#include <sys/mac_wifi.h>
+#include <sys/dls.h>
+#include <sys/ethernet.h>
+#include <sys/byteorder.h>
+#include <sys/strsun.h>
+#include <inet/common.h>
+
+uint8_t wifi_bcastaddr[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+static uint8_t wifi_ietfmagic[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 };
+static uint8_t wifi_ieeemagic[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 };
+
+static mac_stat_info_t wifi_stats[] = {
+ /* statistics described in ieee802.11(5) */
+{ WIFI_STAT_TX_FRAGS, "tx_frags", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_MCAST_TX, "mcast_tx", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_TX_FAILED, "tx_failed", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_TX_RETRANS, "tx_retrans", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_TX_RERETRANS, "tx_reretrans", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_RTS_SUCCESS, "rts_success", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_RTS_FAILURE, "rts_failure", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_ACK_FAILURE, "ack_failure", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_RX_FRAGS, "rx_frags", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_MCAST_RX, "mcast_rx", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_FCS_ERRORS, "fcs_errors", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_WEP_ERRORS, "wep_errors", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_RX_DUPS, "rx_dups", KSTAT_DATA_UINT32, 0 }
+};
+
+static struct modlmisc mac_wifi_modlmisc = {
+ &mod_miscops,
+ "WiFi MAC plugin %I%"
+};
+
+static struct modlinkage mac_wifi_modlinkage = {
+ MODREV_1,
+ &mac_wifi_modlmisc,
+ NULL
+};
+
+static mactype_ops_t mac_wifi_type_ops;
+
+int
+_init(void)
+{
+ mactype_register_t *mtrp = mactype_alloc(MACTYPE_VERSION);
+ int err;
+
+ /*
+ * If `mtrp' is NULL, then this plugin is not compatible with
+ * the system's MAC Type plugin framework.
+ */
+ if (mtrp == NULL)
+ return (ENOTSUP);
+
+ mtrp->mtr_ops = &mac_wifi_type_ops;
+ mtrp->mtr_ident = MAC_PLUGIN_IDENT_WIFI;
+ mtrp->mtr_mactype = DL_ETHER;
+ mtrp->mtr_nativetype = DL_WIFI;
+ mtrp->mtr_stats = wifi_stats;
+ mtrp->mtr_statcount = A_CNT(wifi_stats);
+ mtrp->mtr_addrlen = IEEE80211_ADDR_LEN;
+ mtrp->mtr_brdcst_addr = wifi_bcastaddr;
+
+ if ((err = mactype_register(mtrp)) == 0) {
+ if ((err = mod_install(&mac_wifi_modlinkage)) != 0)
+ (void) mactype_unregister(MAC_PLUGIN_IDENT_WIFI);
+ }
+ mactype_free(mtrp);
+ return (err);
+}
+
+int
+_fini(void)
+{
+ int err;
+
+ if ((err = mactype_unregister(MAC_PLUGIN_IDENT_WIFI)) != 0)
+ return (err);
+ return (mod_remove(&mac_wifi_modlinkage));
+}
+
+int
+_info(struct modinfo *modinfop)
+{
+ return (mod_info(&mac_wifi_modlinkage, modinfop));
+}
+
+/*
+ * MAC Type plugin operations
+ */
+
+static boolean_t
+mac_wifi_pdata_verify(void *pdata, size_t pdata_size)
+{
+ wifi_data_t *wdp = pdata;
+
+ return (pdata_size == sizeof (wifi_data_t) && wdp->wd_opts == 0);
+}
+
+/* ARGSUSED */
+static int
+mac_wifi_unicst_verify(const void *addr, void *pdata)
+{
+ /* If it's not a group address, then it's a valid unicast address. */
+ return (IEEE80211_IS_MULTICAST(addr) ? EINVAL : 0);
+}
+
+/* ARGSUSED */
+static int
+mac_wifi_multicst_verify(const void *addr, void *pdata)
+{
+ /* The address must be a group address. */
+ if (!IEEE80211_IS_MULTICAST(addr))
+ return (EINVAL);
+ /* The address must not be the media broadcast address. */
+ if (bcmp(addr, wifi_bcastaddr, sizeof (wifi_bcastaddr)) == 0)
+ return (EINVAL);
+ return (0);
+}
+
+/*
+ * Verify that `sap' is valid, and return the actual SAP to bind to in
+ * `*bind_sap'. The WiFI SAP space is identical to Ethernet.
+ */
+/* ARGSUSED */
+static boolean_t
+mac_wifi_sap_verify(uint32_t sap, uint32_t *bind_sap, void *pdata)
+{
+ if (sap >= ETHERTYPE_802_MIN && sap <= ETHERTYPE_MAX) {
+ if (bind_sap != NULL)
+ *bind_sap = sap;
+ return (B_TRUE);
+ }
+
+ if (sap <= ETHERMTU) {
+ if (bind_sap != NULL)
+ *bind_sap = DLS_SAP_LLC;
+ return (B_TRUE);
+ }
+ return (B_FALSE);
+}
+
+/*
+ * Create a template WiFi datalink header for `sap' packets between `saddr'
+ * and `daddr'. Any enabled modes and features relevant to building the
+ * header are passed via `pdata'. Return NULL on failure.
+ */
+/* ARGSUSED */
+static mblk_t *
+mac_wifi_header(const void *saddr, const void *daddr, uint32_t sap,
+ void *pdata, mblk_t *payload, size_t extra_len)
+{
+ struct ieee80211_frame *wh;
+ struct ieee80211_llc *llc;
+ mblk_t *mp;
+ wifi_data_t *wdp = pdata;
+
+ if (!mac_wifi_sap_verify(sap, NULL, NULL))
+ return (NULL);
+
+ if ((mp = allocb(WIFI_HDRSIZE + extra_len, BPRI_HI)) == NULL)
+ return (NULL);
+ bzero(mp->b_rptr, WIFI_HDRSIZE + extra_len);
+
+ /*
+ * Fill in the fixed parts of the ieee80211_frame.
+ */
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ mp->b_wptr += sizeof (struct ieee80211_frame);
+ wh->i_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_DATA;
+
+ switch (wdp->wd_opmode) {
+ case IEEE80211_M_STA:
+ wh->i_fc[1] = IEEE80211_FC1_DIR_TODS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, wdp->wd_bssid);
+ IEEE80211_ADDR_COPY(wh->i_addr2, saddr);
+ IEEE80211_ADDR_COPY(wh->i_addr3, daddr);
+ break;
+
+ case IEEE80211_M_IBSS:
+ case IEEE80211_M_AHDEMO:
+ wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, daddr);
+ IEEE80211_ADDR_COPY(wh->i_addr2, saddr);
+ IEEE80211_ADDR_COPY(wh->i_addr3, wdp->wd_bssid);
+ break;
+
+ case IEEE80211_M_HOSTAP:
+ wh->i_fc[1] = IEEE80211_FC1_DIR_FROMDS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, daddr);
+ IEEE80211_ADDR_COPY(wh->i_addr2, wdp->wd_bssid);
+ IEEE80211_ADDR_COPY(wh->i_addr3, saddr);
+ break;
+ }
+
+ /*
+ * Fill in the fixed parts of the WEP-portion of the frame.
+ */
+ if (wdp->wd_secalloc == WIFI_SEC_WEP) {
+ wh->i_fc[1] |= IEEE80211_FC1_WEP;
+ /*
+ * The actual contents of the WEP-portion of the packet
+ * are computed when the packet is sent -- for now, we
+ * just need to account for the size.
+ */
+ mp->b_wptr += IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN;
+ }
+
+ /*
+ * Fill in the fixed parts of the ieee80211_llc header.
+ */
+ llc = (struct ieee80211_llc *)mp->b_wptr;
+ mp->b_wptr += sizeof (struct ieee80211_llc);
+ bcopy(wifi_ietfmagic, llc, sizeof (wifi_ietfmagic));
+ llc->illc_ether_type = htons(sap);
+
+ return (mp);
+}
+
+/*
+ * Use the provided `mp' (which is expected to point to a WiFi header), and
+ * fill in the provided `mhp'. Return an errno on failure.
+ */
+/* ARGSUSED */
+static int
+mac_wifi_header_info(mblk_t *mp, void *pdata, mac_header_info_t *mhp)
+{
+ struct ieee80211_frame *wh;
+ struct ieee80211_llc *llc;
+ uchar_t *llcp;
+
+ if (MBLKL(mp) < sizeof (struct ieee80211_frame))
+ return (EINVAL);
+
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ llcp = mp->b_rptr + sizeof (struct ieee80211_frame);
+
+ /*
+ * When we receive frames from other hosts, the hardware will have
+ * already performed WEP decryption, and thus there will not be a WEP
+ * portion. However, when we receive a loopback copy of our own
+ * packets, it will still have a WEP portion. Skip past it to get to
+ * the LLC header.
+ */
+ if (wh->i_fc[1] & IEEE80211_FC1_WEP)
+ llcp += IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN;
+
+ if (mp->b_wptr - llcp < sizeof (struct ieee80211_llc))
+ return (EINVAL);
+
+ llc = (struct ieee80211_llc *)llcp;
+ mhp->mhi_origsap = ntohs(llc->illc_ether_type);
+ mhp->mhi_bindsap = mhp->mhi_origsap;
+ mhp->mhi_pktsize = 0;
+ mhp->mhi_hdrsize = llcp + sizeof (*llc) - mp->b_rptr;
+
+ /*
+ * Verify the LLC header is one of the known formats. As per MSFT's
+ * convention, if the header is using IEEE 802.1H encapsulation, then
+ * treat the LLC header as data. As per DL_ETHER custom when treating
+ * the LLC header as data, set the mhi_bindsap to be DLS_SAP_LLC, and
+ * assume mhi_origsap contains the data length.
+ */
+ if (bcmp(llc, wifi_ieeemagic, sizeof (wifi_ieeemagic)) == 0) {
+ mhp->mhi_bindsap = DLS_SAP_LLC;
+ mhp->mhi_hdrsize -= sizeof (*llc);
+ mhp->mhi_pktsize = mhp->mhi_hdrsize + mhp->mhi_origsap;
+ } else if (bcmp(llc, wifi_ietfmagic, sizeof (wifi_ietfmagic)) != 0) {
+ return (EINVAL);
+ }
+
+ switch (wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) {
+ case IEEE80211_FC1_DIR_NODS:
+ mhp->mhi_daddr = wh->i_addr1;
+ mhp->mhi_saddr = wh->i_addr2;
+ break;
+
+ case IEEE80211_FC1_DIR_TODS:
+ mhp->mhi_daddr = wh->i_addr3;
+ mhp->mhi_saddr = wh->i_addr2;
+ break;
+
+ case IEEE80211_FC1_DIR_FROMDS:
+ mhp->mhi_daddr = wh->i_addr1;
+ mhp->mhi_saddr = wh->i_addr3;
+ break;
+
+ case IEEE80211_FC1_DIR_DSTODS:
+ /* We don't support AP-to-AP mode yet */
+ return (ENOTSUP);
+ }
+
+ if (mac_wifi_unicst_verify(mhp->mhi_daddr, NULL) == 0)
+ mhp->mhi_dsttype = MAC_ADDRTYPE_UNICAST;
+ else if (mac_wifi_multicst_verify(mhp->mhi_daddr, NULL) == 0)
+ mhp->mhi_dsttype = MAC_ADDRTYPE_MULTICAST;
+ else
+ mhp->mhi_dsttype = MAC_ADDRTYPE_BROADCAST;
+
+ return (0);
+}
+
+/*
+ * Take the provided `mp' (which is expected to have an Ethernet header), and
+ * return a pointer to an mblk_t with a WiFi header. Note that the returned
+ * header will not be complete until the driver finishes filling it in prior
+ * to transmit. If the conversion cannot be performed, return NULL.
+ */
+static mblk_t *
+mac_wifi_header_cook(mblk_t *mp, void *pdata)
+{
+ struct ether_header *ehp;
+ mblk_t *llmp;
+
+ if (MBLKL(mp) < sizeof (struct ether_header))
+ return (NULL);
+
+ ehp = (struct ether_header *)mp->b_rptr;
+ llmp = mac_wifi_header(&ehp->ether_shost, &ehp->ether_dhost,
+ ntohs(ehp->ether_type), pdata, NULL, 0);
+ if (llmp == NULL)
+ return (NULL);
+
+ /*
+ * The plugin framework guarantees that we have the only reference
+ * to the mblk_t, so we can safely modify it.
+ */
+ ASSERT(DB_REF(mp) == 1);
+ mp->b_rptr += sizeof (struct ether_header);
+ llmp->b_cont = mp;
+ return (llmp);
+}
+
+/*
+ * Take the provided `mp' (which is expected to have a WiFi header), and
+ * return a pointer to an mblk_t with an Ethernet header. If the conversion
+ * cannot be performed, return NULL.
+ */
+static mblk_t *
+mac_wifi_header_uncook(mblk_t *mp, void *pdata)
+{
+ mac_header_info_t mhi;
+ struct ether_header eh;
+
+ if (mac_wifi_header_info(mp, pdata, &mhi) != 0) {
+ /*
+ * The plugin framework guarantees the header is properly
+ * formed, so this should never happen.
+ */
+ return (NULL);
+ }
+
+ /*
+ * The plugin framework guarantees that we have the only reference to
+ * the mblk_t and the underlying dblk_t, so we can safely modify it.
+ */
+ ASSERT(DB_REF(mp) == 1);
+
+ IEEE80211_ADDR_COPY(&eh.ether_dhost, mhi.mhi_daddr);
+ IEEE80211_ADDR_COPY(&eh.ether_shost, mhi.mhi_saddr);
+ eh.ether_type = htons(mhi.mhi_origsap);
+
+ ASSERT(mhi.mhi_hdrsize >= sizeof (struct ether_header));
+ mp->b_rptr += mhi.mhi_hdrsize - sizeof (struct ether_header);
+ bcopy(&eh, mp->b_rptr, sizeof (struct ether_header));
+ return (mp);
+}
+
+static mactype_ops_t mac_wifi_type_ops = {
+ MTOPS_PDATA_VERIFY | MTOPS_HEADER_COOK | MTOPS_HEADER_UNCOOK,
+ mac_wifi_unicst_verify,
+ mac_wifi_multicst_verify,
+ mac_wifi_sap_verify,
+ mac_wifi_header,
+ mac_wifi_header_info,
+ mac_wifi_pdata_verify,
+ mac_wifi_header_cook,
+ mac_wifi_header_uncook
+};
diff --git a/usr/src/uts/common/io/net80211/net80211.c b/usr/src/uts/common/io/net80211/net80211.c
new file mode 100644
index 0000000000..5a6eef0f06
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211.c
@@ -0,0 +1,634 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * IEEE 802.11 generic handler
+ */
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/cmn_err.h>
+#include <sys/modctl.h>
+#include "net80211_impl.h"
+
+uint32_t ieee80211_debug = 0x0; /* debug msg flags */
+
+const char *ieee80211_phymode_name[] = {
+ "auto", /* IEEE80211_MODE_AUTO */
+ "11a", /* IEEE80211_MODE_11A */
+ "11b", /* IEEE80211_MODE_11B */
+ "11g", /* IEEE80211_MODE_11G */
+ "FH", /* IEEE80211_MODE_FH */
+ "turboA", /* IEEE80211_MODE_TURBO_A */
+ "turboG", /* IEEE80211_MODE_TURBO_G */
+};
+
+#define IEEE80211_DPRINT(_level, _fmt) do { \
+ _NOTE(CONSTCOND) \
+ va_list ap; \
+ va_start(ap, (_fmt)); \
+ vcmn_err((_level), (_fmt), ap); \
+ va_end(ap); \
+ _NOTE(CONSTCOND) \
+ } while (0)
+
+/*
+ * Print error messages
+ */
+void
+ieee80211_err(const int8_t *fmt, ...)
+{
+ IEEE80211_DPRINT(CE_WARN, fmt);
+}
+
+/*
+ * Print debug messages
+ */
+void
+ieee80211_dbg(uint32_t flag, const int8_t *fmt, ...)
+{
+ if (flag & ieee80211_debug)
+ IEEE80211_DPRINT(CE_CONT, fmt);
+}
+
+/*
+ * Default reset method for use with the ioctl support. This
+ * method is invoked after any state change in the 802.11
+ * layer that should be propagated to the hardware but not
+ * require re-initialization of the 802.11 state machine (e.g
+ * rescanning for an ap). We always return ENETRESET which
+ * should cause the driver to re-initialize the device. Drivers
+ * can override this method to implement more optimized support.
+ */
+/* ARGSUSED */
+static int
+ieee80211_default_reset(ieee80211com_t *ic)
+{
+ return (ENETRESET);
+}
+
+/*
+ * Convert channel to IEEE channel number.
+ */
+uint32_t
+ieee80211_chan2ieee(ieee80211com_t *ic, struct ieee80211_channel *ch)
+{
+ if ((ic->ic_sup_channels <= ch) &&
+ (ch <= &ic->ic_sup_channels[IEEE80211_CHAN_MAX])) {
+ return (ch - ic->ic_sup_channels);
+ } else if (ch == IEEE80211_CHAN_ANYC) {
+ return (IEEE80211_CHAN_ANY);
+ } else if (ch != NULL) {
+ ieee80211_err("invalid channel freq %u flags %x\n",
+ ch->ich_freq, ch->ich_flags);
+ return (0);
+ }
+ ieee80211_err("invalid channel (NULL)\n"); /* ch == NULL */
+ return (0);
+}
+
+/*
+ * Convert IEEE channel number to MHz frequency.
+ * chan IEEE channel number
+ * flags specify whether the frequency is in the 2GHz ISM
+ * band or the 5GHz band
+ *
+ * 802.11b 2GHz: 14 channels, each 5 MHz wide. Channel 1 is placed
+ * at 2.412 GHz, channel 2 at 2.417 GHz, and so on up to channel 13
+ * at 2.472 GHz. Channel 14 was defined especially for operation in
+ * Japan, and has a center frequency 2.484 GHz.
+ * 802.11g 2GHz: adopts the frequency plan of 802.11b. Japan only
+ * allows 802.11g operation in channels 1-13
+ * 802.11a 5GHz: starting every 5 MHz
+ * 802.11b/g channels 15-24 (2512-2692) are used by some implementation
+ * (Atheros etc.)
+ */
+uint32_t
+ieee80211_ieee2mhz(uint32_t chan, uint32_t flags)
+{
+ if (flags & IEEE80211_CHAN_2GHZ) { /* 2GHz band */
+ if (chan == 14)
+ return (2484);
+ if (chan < 14)
+ return (2412 + (chan - 1) * 5);
+ else
+ return (2512 + ((chan - 15) * 20));
+ } else if (flags & IEEE80211_CHAN_5GHZ) { /* 5Ghz band */
+ return (5000 + (chan * 5)); /* OFDM */
+ } else { /* either, guess */
+ if (chan == 14)
+ return (2484);
+ if (chan < 14) /* 0-13 */
+ return (2412 + (chan - 1) * 5);
+ if (chan < 27) /* 15-26 */
+ return (2512 + ((chan - 15) * 20));
+ return (5000 + (chan * 5));
+ }
+}
+
+/*
+ * Do late attach work. It must be called by the driver after
+ * calling ieee80211_attach() and before calling most ieee80211
+ * functions.
+ */
+void
+ieee80211_media_init(ieee80211com_t *ic)
+{
+ /*
+ * Do late attach work that must wait for any subclass
+ * (i.e. driver) work such as overriding methods.
+ */
+ ieee80211_node_lateattach(ic);
+}
+
+/*
+ * Start Watchdog timer. After count down timer(s), ic_watchdog
+ * will be called
+ */
+void
+ieee80211_start_watchdog(ieee80211com_t *ic, uint32_t timer)
+{
+ if (ic->ic_watchdog_timer == 0 && ic->ic_watchdog != NULL) {
+ ic->ic_watchdog_timer = timeout(ic->ic_watchdog, ic,
+ drv_usectohz(1000000 * timer));
+ }
+}
+
+/*
+ * Stop watchdog timer.
+ */
+void
+ieee80211_stop_watchdog(ieee80211com_t *ic)
+{
+ if (ic->ic_watchdog_timer != 0) {
+ if (ic->ic_watchdog != NULL)
+ (void) untimeout(ic->ic_watchdog_timer);
+ ic->ic_watchdog_timer = 0;
+ }
+}
+
+/*
+ * Called from a driver's xxx_watchdog routine. It is used to
+ * perform periodic cleanup of state for net80211, as well as
+ * timeout scans.
+ */
+void
+ieee80211_watchdog(void *arg)
+{
+ ieee80211com_t *ic = arg;
+ struct ieee80211_impl *im = ic->ic_private;
+ ieee80211_node_table_t *nt;
+ int inact_timer = 0;
+
+ if (ic->ic_state == IEEE80211_S_INIT)
+ return;
+
+ IEEE80211_LOCK(ic);
+ if ((im->im_mgt_timer != 0) && (--im->im_mgt_timer == 0)) {
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
+ IEEE80211_LOCK(ic);
+ }
+
+ nt = &ic->ic_scan;
+ if (nt->nt_inact_timer != 0) {
+ if (--nt->nt_inact_timer == 0)
+ nt->nt_timeout(nt);
+ inact_timer += nt->nt_inact_timer;
+ }
+ nt = &ic->ic_sta;
+ if (nt->nt_inact_timer != 0) {
+ if (--nt->nt_inact_timer == 0)
+ nt->nt_timeout(nt);
+ inact_timer += nt->nt_inact_timer;
+ }
+
+ IEEE80211_UNLOCK(ic);
+
+ if (im->im_mgt_timer != 0 || inact_timer > 0)
+ ieee80211_start_watchdog(ic, 1);
+}
+
+/*
+ * Set the current phy mode and recalculate the active channel
+ * set and supported rates based on the available channels for
+ * this mode. Also select a new BSS channel if the current one
+ * is inappropriate for this mode.
+ * This function is called by net80211, and not intended to be
+ * called directly.
+ */
+static int
+ieee80211_setmode(ieee80211com_t *ic, enum ieee80211_phymode mode)
+{
+ static const uint32_t chanflags[] = {
+ 0, /* IEEE80211_MODE_AUTO */
+ IEEE80211_CHAN_A, /* IEEE80211_MODE_11A */
+ IEEE80211_CHAN_B, /* IEEE80211_MODE_11B */
+ IEEE80211_CHAN_PUREG, /* IEEE80211_MODE_11G */
+ IEEE80211_CHAN_FHSS, /* IEEE80211_MODE_FH */
+ IEEE80211_CHAN_T, /* IEEE80211_MODE_TURBO_A */
+ IEEE80211_CHAN_108G, /* IEEE80211_MODE_TURBO_G */
+ };
+ struct ieee80211_channel *ch;
+ uint32_t modeflags;
+ int i;
+ int achannels = 0;
+
+ /* validate new mode */
+ if ((ic->ic_modecaps & (1 << mode)) == 0) {
+ ieee80211_err("ieee80211_setmode(): mode %u not supported"
+ " (caps 0x%x)\n", mode, ic->ic_modecaps);
+ return (EINVAL);
+ }
+
+ /*
+ * Verify at least one channel is present in the available
+ * channel list before committing to the new mode.
+ * Calculate the active channel set.
+ */
+ ASSERT(mode < IEEE80211_N(chanflags));
+ modeflags = chanflags[mode];
+ bzero(ic->ic_chan_active, sizeof (ic->ic_chan_active));
+ for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
+ ch = &ic->ic_sup_channels[i];
+ if (ch->ich_flags == 0)
+ continue;
+ if (mode == IEEE80211_MODE_AUTO) {
+ /* take anything but pure turbo channels */
+ if ((ch->ich_flags & ~IEEE80211_CHAN_TURBO) != 0) {
+ ieee80211_setbit(ic->ic_chan_active, i);
+ achannels++;
+ }
+ } else {
+ if ((ch->ich_flags & modeflags) == modeflags) {
+ ieee80211_setbit(ic->ic_chan_active, i);
+ achannels++;
+ }
+ }
+ }
+ if (achannels == 0) {
+ ieee80211_err("ieee80211_setmode(): "
+ "no channel found for mode %u\n", mode);
+ return (EINVAL);
+ }
+
+ /*
+ * If no current/default channel is setup or the current
+ * channel is wrong for the mode then pick the first
+ * available channel from the active list. This is likely
+ * not the right one.
+ */
+ if (ic->ic_ibss_chan == NULL ||
+ ieee80211_isclr(ic->ic_chan_active,
+ ieee80211_chan2ieee(ic, ic->ic_ibss_chan))) {
+ for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
+ if (ieee80211_isset(ic->ic_chan_active, i)) {
+ ic->ic_ibss_chan = &ic->ic_sup_channels[i];
+ break;
+ }
+ }
+ }
+ /*
+ * If the desired channel is set but no longer valid then reset it.
+ */
+ if (ic->ic_des_chan != IEEE80211_CHAN_ANYC &&
+ ieee80211_isclr(ic->ic_chan_active,
+ ieee80211_chan2ieee(ic, ic->ic_des_chan))) {
+ ic->ic_des_chan = IEEE80211_CHAN_ANYC;
+ }
+
+ /*
+ * Do mode-specific rate setup.
+ */
+ if (mode == IEEE80211_MODE_11G || mode == IEEE80211_MODE_11B)
+ ieee80211_setbasicrates(&ic->ic_sup_rates[mode], mode);
+
+ /*
+ * Setup an initial rate set according to the
+ * current/default channel. This will be changed
+ * when scanning but must exist now so drivers have
+ * consistent state of ic_bsschan.
+ */
+ if (ic->ic_bss != NULL)
+ ic->ic_bss->in_rates = ic->ic_sup_rates[mode];
+ ic->ic_curmode = mode;
+ ieee80211_reset_erp(ic); /* reset ERP state */
+
+ return (0);
+}
+
+/*
+ * Return the phy mode for with the specified channel so the
+ * caller can select a rate set. This is problematic for channels
+ * where multiple operating modes are possible (e.g. 11g+11b).
+ * In those cases we defer to the current operating mode when set.
+ */
+enum ieee80211_phymode
+ieee80211_chan2mode(ieee80211com_t *ic, struct ieee80211_channel *chan)
+{
+ if (IEEE80211_IS_CHAN_T(chan)) {
+ return (IEEE80211_MODE_TURBO_A);
+ } else if (IEEE80211_IS_CHAN_5GHZ(chan)) {
+ return (IEEE80211_MODE_11A);
+ } else if (IEEE80211_IS_CHAN_FHSS(chan)) {
+ return (IEEE80211_MODE_FH);
+ } else if (chan->ich_flags & (IEEE80211_CHAN_OFDM|IEEE80211_CHAN_DYN)) {
+ /*
+ * This assumes all 11g channels are also usable
+ * for 11b, which is currently true.
+ */
+ if (ic->ic_curmode == IEEE80211_MODE_TURBO_G)
+ return (IEEE80211_MODE_TURBO_G);
+ if (ic->ic_curmode == IEEE80211_MODE_11B)
+ return (IEEE80211_MODE_11B);
+ return (IEEE80211_MODE_11G);
+ } else {
+ return (IEEE80211_MODE_11B);
+ }
+}
+
+/*
+ * Return the size of the 802.11 header for a management or data frame.
+ */
+int
+ieee80211_hdrspace(const void *data)
+{
+ const struct ieee80211_frame *wh = data;
+ int size = sizeof (struct ieee80211_frame);
+
+ /* NB: we don't handle control frames */
+ ASSERT((wh->i_fc[0]&IEEE80211_FC0_TYPE_MASK) !=
+ IEEE80211_FC0_TYPE_CTL);
+ if ((wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) == IEEE80211_FC1_DIR_DSTODS)
+ size += IEEE80211_ADDR_LEN;
+
+ return (size);
+}
+
+/*
+ * Allocate and setup a management frame of the specified
+ * size. We return the mblk and a pointer to the start
+ * of the contiguous data area that's been reserved based
+ * on the packet length.
+ */
+mblk_t *
+ieee80211_getmgtframe(uint8_t **frm, int pktlen)
+{
+ mblk_t *mp;
+ int len;
+
+ len = sizeof (struct ieee80211_frame) + pktlen;
+ mp = allocb(len, BPRI_MED);
+ if (mp != NULL) {
+ *frm = mp->b_rptr + sizeof (struct ieee80211_frame);
+ mp->b_wptr = mp->b_rptr + len;
+ } else {
+ ieee80211_err("ieee80211_getmgtframe: "
+ "alloc frame failed, %d\n", len);
+ }
+ return (mp);
+}
+
+/*
+ * Send system messages to notify the device has joined a WLAN.
+ * This is an OS specific function. Solaris marks link status
+ * as up.
+ */
+void
+ieee80211_notify_node_join(ieee80211com_t *ic, ieee80211_node_t *in)
+{
+ if (in == ic->ic_bss)
+ mac_link_update(ic->ic_mach, LINK_STATE_UP);
+}
+
+/*
+ * Send system messages to notify the device has left a WLAN.
+ * This is an OS specific function. Solaris marks link status
+ * as down.
+ */
+void
+ieee80211_notify_node_leave(ieee80211com_t *ic, ieee80211_node_t *in)
+{
+ if (in == ic->ic_bss)
+ mac_link_update(ic->ic_mach, LINK_STATE_DOWN);
+}
+
+/*
+ * Get 802.11 kstats defined in ieee802.11(5)
+ *
+ * Return 0 on success
+ */
+int
+ieee80211_stat(ieee80211com_t *ic, uint_t stat, uint64_t *val)
+{
+ ASSERT(val != NULL);
+ IEEE80211_LOCK(ic);
+ switch (stat) {
+ case WIFI_STAT_TX_FRAGS:
+ *val = ic->ic_stats.is_tx_frags;
+ break;
+ case WIFI_STAT_MCAST_TX:
+ *val = ic->ic_stats.is_tx_mcast;
+ break;
+ case WIFI_STAT_TX_FAILED:
+ *val = ic->ic_stats.is_tx_failed;
+ break;
+ case WIFI_STAT_TX_RETRANS:
+ *val = ic->ic_stats.is_tx_retries;
+ break;
+ case WIFI_STAT_RTS_SUCCESS:
+ *val = ic->ic_stats.is_rts_success;
+ break;
+ case WIFI_STAT_RTS_FAILURE:
+ *val = ic->ic_stats.is_rts_failure;
+ break;
+ case WIFI_STAT_ACK_FAILURE:
+ *val = ic->ic_stats.is_ack_failure;
+ break;
+ case WIFI_STAT_RX_FRAGS:
+ *val = ic->ic_stats.is_rx_frags;
+ break;
+ case WIFI_STAT_MCAST_RX:
+ *val = ic->ic_stats.is_rx_mcast;
+ break;
+ case WIFI_STAT_RX_DUPS:
+ *val = ic->ic_stats.is_rx_dups;
+ break;
+ case WIFI_STAT_FCS_ERRORS:
+ *val = ic->ic_stats.is_fcs_errors;
+ break;
+ case WIFI_STAT_WEP_ERRORS:
+ *val = ic->ic_stats.is_wep_errors;
+ break;
+ }
+ IEEE80211_UNLOCK(ic);
+ return (0);
+}
+
+/*
+ * Attach network interface to the 802.11 support module. This
+ * function must be called before using any of the ieee80211
+ * functionss. The parameter "ic" MUST be initialized to tell
+ * net80211 about interface's capabilities.
+ */
+void
+ieee80211_attach(ieee80211com_t *ic)
+{
+ struct ieee80211_impl *im;
+ struct ieee80211_channel *ch;
+ int i;
+
+ /* Check mandatory callback functions not NULL */
+ ASSERT(ic->ic_xmit != NULL);
+
+ mutex_init(&ic->ic_genlock, NULL, MUTEX_DRIVER, NULL);
+
+ im = kmem_alloc(sizeof (ieee80211_impl_t), KM_SLEEP);
+ ic->ic_private = im;
+ cv_init(&im->im_scan_cv, NULL, CV_DRIVER, NULL);
+
+ /*
+ * Fill in 802.11 available channel set, mark
+ * all available channels as active, and pick
+ * a default channel if not already specified.
+ */
+ bzero(im->im_chan_avail, sizeof (im->im_chan_avail));
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_AUTO;
+ for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
+ ch = &ic->ic_sup_channels[i];
+ if (ch->ich_flags) {
+ /* Verify driver passed us valid data */
+ if (i != ieee80211_chan2ieee(ic, ch)) {
+ ieee80211_err("bad channel ignored: "
+ "freq %u flags%x number %u\n",
+ ch->ich_freq, ch->ich_flags, i);
+ ch->ich_flags = 0;
+ continue;
+ }
+ ieee80211_setbit(im->im_chan_avail, i);
+ /* Identify mode capabilities */
+ if (IEEE80211_IS_CHAN_A(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_11A;
+ if (IEEE80211_IS_CHAN_B(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_11B;
+ if (IEEE80211_IS_CHAN_PUREG(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_11G;
+ if (IEEE80211_IS_CHAN_FHSS(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_FH;
+ if (IEEE80211_IS_CHAN_T(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_TURBO_A;
+ if (IEEE80211_IS_CHAN_108G(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_TURBO_G;
+ if (ic->ic_curchan == NULL) {
+ /* arbitrarily pick the first channel */
+ ic->ic_curchan = &ic->ic_sup_channels[i];
+ }
+ }
+ }
+ /* validate ic->ic_curmode */
+ if ((ic->ic_modecaps & (1 << ic->ic_curmode)) == 0)
+ ic->ic_curmode = IEEE80211_MODE_AUTO;
+ ic->ic_des_chan = IEEE80211_CHAN_ANYC; /* any channel is ok */
+ (void) ieee80211_setmode(ic, ic->ic_curmode);
+
+ if (ic->ic_caps & IEEE80211_C_BURST)
+ ic->ic_flags |= IEEE80211_F_BURST;
+ ic->ic_bintval = IEEE80211_BINTVAL_DEFAULT;
+ ic->ic_lintval = ic->ic_bintval;
+ ic->ic_txpowlimit = IEEE80211_TXPOWER_MAX;
+ ic->ic_bmissthreshold = IEEE80211_HWBMISS_DEFAULT;
+
+ ic->ic_reset = ieee80211_default_reset;
+
+ ieee80211_node_attach(ic);
+ ieee80211_proto_attach(ic);
+ ieee80211_crypto_attach(ic);
+
+ ic->ic_watchdog_timer = 0;
+}
+
+/*
+ * Free any ieee80211 structures associated with the driver.
+ */
+void
+ieee80211_detach(ieee80211com_t *ic)
+{
+ struct ieee80211_impl *im = ic->ic_private;
+
+ ieee80211_stop_watchdog(ic);
+ cv_destroy(&im->im_scan_cv);
+ kmem_free(im, sizeof (ieee80211_impl_t));
+
+ ieee80211_node_detach(ic);
+ ieee80211_crypto_detach(ic);
+
+ mutex_destroy(&ic->ic_genlock);
+}
+
+static struct modlmisc i_wifi_modlmisc = {
+ &mod_miscops,
+ "IEEE80211 Kernel Misc Module"
+};
+
+static struct modlinkage i_wifi_modlinkage = {
+ MODREV_1,
+ &i_wifi_modlmisc,
+ NULL
+};
+
+/*
+ * modlinkage functions
+ */
+int
+_init(void)
+{
+ return (mod_install(&i_wifi_modlinkage));
+}
+
+int
+_fini(void)
+{
+ return (mod_remove(&i_wifi_modlinkage));
+}
+
+int
+_info(struct modinfo *modinfop)
+{
+ return (mod_info(&i_wifi_modlinkage, modinfop));
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_crypto.c b/usr/src/uts/common/io/net80211/net80211_crypto.c
new file mode 100644
index 0000000000..214e1700ec
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_crypto.c
@@ -0,0 +1,510 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * IEEE 802.11 generic crypto support
+ */
+#include <sys/types.h>
+#include <sys/note.h>
+#include "net80211_impl.h"
+
+extern const struct ieee80211_cipher wep;
+
+/*
+ * Table of registered cipher modules.
+ */
+static const struct ieee80211_cipher *ciphers[IEEE80211_CIPHER_MAX];
+static const char *cipher_modnames[] = {
+ "wlan_wep", /* IEEE80211_CIPHER_WEP */
+ "wlan_tkip", /* IEEE80211_CIPHER_TKIP */
+ "wlan_aes_ocb", /* IEEE80211_CIPHER_AES_OCB */
+ "wlan_ccmp", /* IEEE80211_CIPHER_AES_CCM */
+ "wlan_ckip", /* IEEE80211_CIPHER_CKIP */
+};
+
+/*
+ * Default "null" key management routines.
+ */
+/* ARGSUSED */
+static int
+nulldev_key_alloc(ieee80211com_t *ic, const struct ieee80211_key *k,
+ ieee80211_keyix *keyix, ieee80211_keyix *rxkeyix)
+{
+ *keyix = 0; /* use key index 0 for ucast key */
+ *rxkeyix = IEEE80211_KEYIX_NONE;
+ return (1);
+}
+
+/* ARGSUSED */
+static int
+nulldev_key_delete(ieee80211com_t *ic, const struct ieee80211_key *k)
+{
+ return (1);
+}
+
+/* ARGSUSED */
+static int
+nulldev_key_set(ieee80211com_t *ic, const struct ieee80211_key *k,
+ const uint8_t *mac)
+{
+ return (1);
+}
+
+/* ARGSUSED */
+static void
+nulldev_key_update(ieee80211com_t *ic)
+{
+ /* noop */
+}
+
+/*
+ * Reset key state to an unused state. The crypto
+ * key allocation mechanism insures other state (e.g.
+ * key data) is properly setup before a key is used.
+ */
+void
+ieee80211_crypto_resetkey(ieee80211com_t *ic,
+ struct ieee80211_key *k, ieee80211_keyix ix)
+{
+ k->wk_cipher = &ieee80211_cipher_none;
+ k->wk_private = k->wk_cipher->ic_attach(ic, k);
+ k->wk_keyix = ix;
+ k->wk_flags = IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
+}
+
+/*
+ * Establish a relationship between the specified key and cipher
+ * and, if necessary, allocate a hardware index from the driver.
+ * Note that when a fixed key index is required it must be specified
+ * and we blindly assign it w/o consulting the driver.
+ *
+ * This must be the first call applied to a key; all the other key
+ * routines assume wk_cipher is setup.
+ *
+ * Locking must be handled by the caller using:
+ * ieee80211_key_update_begin(ic);
+ * ieee80211_key_update_end(ic);
+ */
+int
+ieee80211_crypto_newkey(ieee80211com_t *ic, int cipher, int flags,
+ struct ieee80211_key *key)
+{
+ const struct ieee80211_cipher *cip;
+ ieee80211_keyix keyix, rxkeyix;
+ void *keyctx;
+ uint16_t oflags;
+
+ /*
+ * Validate cipher and set reference to cipher routines.
+ */
+ if (cipher >= IEEE80211_CIPHER_MAX) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_newkey: "
+ "invalid cipher %u\n", cipher);
+ return (0);
+ }
+ cip = ciphers[cipher];
+ /* already load all the ciphers, cip can't be NULL */
+ if (cip == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_newkey: "
+ "unable to load cipher %u, module %s\n",
+ cipher, cipher < IEEE80211_N(cipher_modnames) ?
+ cipher_modnames[cipher] : "<unknown>");
+ return (0);
+ }
+
+ oflags = key->wk_flags;
+ flags &= IEEE80211_KEY_COMMON;
+ /*
+ * If the hardware does not support the cipher then
+ * fallback to a host-based implementation.
+ */
+ if ((ic->ic_caps & (1<<cipher)) == 0) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_newkey: "
+ "no h/w support for cipher %s, falling back to s/w\n",
+ cip->ic_name);
+ flags |= IEEE80211_KEY_SWCRYPT;
+ }
+
+ /*
+ * Bind cipher to key instance. Note we do this
+ * after checking the device capabilities so the
+ * cipher module can optimize space usage based on
+ * whether or not it needs to do the cipher work.
+ */
+ if (key->wk_cipher != cip || key->wk_flags != flags) {
+again:
+ /*
+ * Fillin the flags so cipher modules can see s/w
+ * crypto requirements and potentially allocate
+ * different state and/or attach different method
+ * pointers.
+ */
+ key->wk_flags = (uint16_t)flags;
+ keyctx = cip->ic_attach(ic, key);
+ if (keyctx == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "crypto_setkey: "
+ "unable to attach cipher %s\n", cip->ic_name);
+ key->wk_flags = oflags; /* restore old flags */
+ return (0);
+ }
+ CIPHER_DETACH(key); /* Detach old cipher */
+ key->wk_cipher = cip;
+ key->wk_private = keyctx;
+ }
+ /*
+ * Commit to requested usage so driver can see the flags.
+ */
+ key->wk_flags = (uint16_t)flags;
+
+ /*
+ * Ask the driver for a key index if we don't have one.
+ * Note that entries in the global key table always have
+ * an index; this means it's safe to call this routine
+ * for these entries just to setup the reference to the
+ * cipher template. Note also that when using software
+ * crypto we also call the driver to give us a key index.
+ */
+ if (key->wk_keyix == IEEE80211_KEYIX_NONE) {
+ if (!DEV_KEY_ALLOC(ic, key, &keyix, &rxkeyix)) {
+ /*
+ * Driver has no room; fallback to doing crypto
+ * in the host. We change the flags and start the
+ * procedure over. If we get back here then there's
+ * no hope and we bail. Note that this can leave
+ * the key in a inconsistent state if the caller
+ * continues to use it.
+ */
+ if ((key->wk_flags & IEEE80211_KEY_SWCRYPT) == 0) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO,
+ "crypto_setkey: "
+ "no h/w resources for cipher %s, "
+ "falling back to s/w\n", cip->ic_name);
+ oflags = key->wk_flags;
+ flags |= IEEE80211_KEY_SWCRYPT;
+ if (cipher == IEEE80211_CIPHER_TKIP)
+ flags |= IEEE80211_KEY_SWMIC;
+ goto again;
+ }
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "crypto_setkey: "
+ "unable to setup cipher %s\n", cip->ic_name);
+ return (0);
+ }
+ key->wk_keyix = keyix;
+ key->wk_rxkeyix = rxkeyix;
+ }
+ return (1);
+}
+
+/*
+ * Remove the key (no locking, for internal use).
+ */
+static int
+ieee80211_crypto_delkey_locked(ieee80211com_t *ic, struct ieee80211_key *key)
+{
+ uint16_t keyix;
+
+ ASSERT(key->wk_cipher != NULL);
+
+ keyix = key->wk_keyix;
+ if (keyix != IEEE80211_KEYIX_NONE) {
+ /*
+ * Remove hardware entry.
+ */
+ if (!DEV_KEY_DELETE(ic, key)) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO,
+ "ieee80211_crypto_delkey_locked: ",
+ "driverdeletes key %u failed\n", keyix);
+ }
+ }
+ CIPHER_DETACH(key);
+ bzero(key, sizeof (struct ieee80211_key));
+ /* NB: cannot depend on key index to decide this */
+ ieee80211_crypto_resetkey(ic, key, IEEE80211_KEYIX_NONE);
+ return (1);
+}
+
+/*
+ * Remove the specified key.
+ */
+int
+ieee80211_crypto_delkey(ieee80211com_t *ic, struct ieee80211_key *key)
+{
+ int status;
+
+ KEY_UPDATE_BEGIN(ic);
+ status = ieee80211_crypto_delkey_locked(ic, key);
+ KEY_UPDATE_END(ic);
+ return (status);
+}
+
+/*
+ * Clear the global key table.
+ */
+static void
+ieee80211_crypto_delglobalkeys(ieee80211com_t *ic)
+{
+ int i;
+
+ KEY_UPDATE_BEGIN(ic);
+ for (i = 0; i < IEEE80211_WEP_NKID; i++)
+ (void) ieee80211_crypto_delkey_locked(ic, &ic->ic_nw_keys[i]);
+ KEY_UPDATE_END(ic);
+}
+
+/*
+ * Set the contents of the specified key.
+ *
+ * Locking must be handled by the caller using:
+ * ieee80211_key_update_begin(ic);
+ * ieee80211_key_update_end(ic);
+ */
+int
+ieee80211_crypto_setkey(ieee80211com_t *ic, struct ieee80211_key *key,
+ const uint8_t *macaddr)
+{
+ const struct ieee80211_cipher *cip = key->wk_cipher;
+
+ ASSERT(cip != NULL);
+
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_setkey: "
+ "%s keyix %u flags 0x%x mac %s len %u\n",
+ cip->ic_name, key->wk_keyix, key->wk_flags,
+ ieee80211_macaddr_sprintf(macaddr), key->wk_keylen);
+
+ /*
+ * Give cipher a chance to validate key contents.
+ * should happen before modifying state.
+ */
+ if (cip->ic_setkey(key) == 0) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_setkey: "
+ "cipher %s rejected key index %u len %u flags 0x%x\n",
+ cip->ic_name, key->wk_keyix, key->wk_keylen,
+ key->wk_flags);
+ return (0);
+ }
+ if (key->wk_keyix == IEEE80211_KEYIX_NONE) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_setkey: "
+ "no key index; should not happen!\n");
+ return (0);
+ }
+ return (DEV_KEY_SET(ic, key, macaddr));
+}
+
+/*
+ * Return the transmit key to use in sending a frame.
+ */
+struct ieee80211_key *
+ieee80211_crypto_getkey(ieee80211com_t *ic)
+{
+ if (ic->ic_def_txkey == IEEE80211_KEYIX_NONE ||
+ KEY_UNDEFINED(ic->ic_nw_keys[ic->ic_def_txkey]))
+ return (NULL);
+ return (&ic->ic_nw_keys[ic->ic_def_txkey]);
+}
+
+uint8_t
+ieee80211_crypto_getciphertype(ieee80211com_t *ic)
+{
+ struct ieee80211_key *key;
+ uint32_t cipher;
+ static const uint8_t ciphermap[] = {
+ WIFI_SEC_WEP, /* IEEE80211_CIPHER_WEP */
+ (uint8_t)-1, /* IEEE80211_CIPHER_TKIP */
+ (uint8_t)-1, /* IEEE80211_CIPHER_AES_OCB */
+ (uint8_t)-1, /* IEEE80211_CIPHER_AES_CCM */
+ (uint8_t)-1, /* 4 is not allocated */
+ (uint8_t)-1, /* IEEE80211_CIPHER_CKIP */
+ WIFI_SEC_NONE, /* IEEE80211_CIPHER_NONE */
+ };
+
+ if ((ic->ic_flags & IEEE80211_F_PRIVACY) == 0)
+ return (WIFI_SEC_NONE);
+
+ key = ieee80211_crypto_getkey(ic);
+ if (key == NULL)
+ return (WIFI_SEC_NONE);
+
+ cipher = key->wk_cipher->ic_cipher;
+ ASSERT(cipher < IEEE80211_N(ciphermap));
+ return (ciphermap[cipher]);
+}
+
+/*
+ * Add privacy headers appropriate for the specified key.
+ */
+struct ieee80211_key *
+ieee80211_crypto_encap(ieee80211com_t *ic, mblk_t *mp)
+{
+ struct ieee80211_key *k;
+ const struct ieee80211_cipher *cip;
+ uint8_t keyix;
+
+ if (ic->ic_def_txkey == IEEE80211_KEYIX_NONE) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO,
+ "ieee80211_crypto_encap: %s",
+ " No default xmit key for frame\n");
+ return (NULL);
+ }
+ keyix = ic->ic_def_txkey;
+ k = &ic->ic_nw_keys[ic->ic_def_txkey];
+ cip = k->wk_cipher;
+ return (cip->ic_encap(k, mp, keyix<<6) ? k : NULL);
+}
+
+/*
+ * Validate and strip privacy headers (and trailer) for a
+ * received frame that has the WEP/Privacy bit set.
+ */
+struct ieee80211_key *
+ieee80211_crypto_decap(ieee80211com_t *ic, mblk_t *mp, int hdrlen)
+{
+ struct ieee80211_key *k;
+ const struct ieee80211_cipher *cip;
+ uint8_t *ivp;
+ uint8_t keyid;
+
+ /* NB: this minimum size data frame could be bigger */
+ if ((mp->b_wptr - mp->b_rptr) < IEEE80211_WEP_MINLEN) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_decap:"
+ " WEP data frame too short, len %u\n",
+ mp->b_wptr - mp->b_rptr);
+ return (NULL);
+ }
+ /*
+ * Locate the key. If unicast and there is no unicast
+ * key then we fall back to the key id in the header.
+ * This assumes unicast keys are only configured when
+ * the key id in the header is meaningless (typically 0).
+ */
+ ivp = mp->b_rptr + hdrlen;
+ keyid = ivp[IEEE80211_WEP_IVLEN];
+ k = &ic->ic_nw_keys[keyid >> 6];
+
+ /* check to avoid panic when wep is on but key is not set */
+ if (k->wk_cipher == &ieee80211_cipher_none ||
+ k->wk_cipher == NULL)
+ return (NULL);
+
+ cip = k->wk_cipher;
+ return ((cip->ic_decap)(k, mp, hdrlen) ? k : NULL);
+}
+
+
+/*
+ * Setup crypto support.
+ */
+void
+ieee80211_crypto_attach(ieee80211com_t *ic)
+{
+ struct ieee80211_crypto_state *cs = &ic->ic_crypto;
+ int i;
+
+ /* NB: we assume everything is pre-zero'd */
+ cs->cs_def_txkey = IEEE80211_KEYIX_NONE;
+ for (i = 0; i < IEEE80211_WEP_NKID; i++) {
+ ieee80211_crypto_resetkey(ic, &cs->cs_nw_keys[i],
+ IEEE80211_KEYIX_NONE);
+ }
+
+ /*
+ * Initialize the driver key support routines to noop entries.
+ * This is useful especially for the cipher test modules.
+ */
+ cs->cs_key_alloc = nulldev_key_alloc;
+ cs->cs_key_set = nulldev_key_set;
+ cs->cs_key_delete = nulldev_key_delete;
+ cs->cs_key_update_begin = nulldev_key_update;
+ cs->cs_key_update_end = nulldev_key_update;
+
+ ieee80211_crypto_register(&wep);
+}
+
+/*
+ * Teardown crypto support.
+ */
+void
+ieee80211_crypto_detach(ieee80211com_t *ic)
+{
+ ieee80211_crypto_delglobalkeys(ic);
+
+ ieee80211_crypto_unregister(&wep);
+}
+
+/*
+ * Register a crypto cipher module.
+ */
+void
+ieee80211_crypto_register(const struct ieee80211_cipher *cip)
+{
+ if (cip->ic_cipher >= IEEE80211_CIPHER_MAX) {
+ ieee80211_err("ieee80211_crypto_register: "
+ "cipher %s has an invalid cipher index %u\n",
+ cip->ic_name, cip->ic_cipher);
+ return;
+ }
+ if (ciphers[cip->ic_cipher] != NULL && ciphers[cip->ic_cipher] != cip) {
+ ieee80211_err("ieee80211_crypto_register: "
+ "cipher %s registered with a different template\n",
+ cip->ic_name);
+ return;
+ }
+ ciphers[cip->ic_cipher] = cip;
+}
+
+/*
+ * Unregister a crypto cipher module.
+ */
+void
+ieee80211_crypto_unregister(const struct ieee80211_cipher *cip)
+{
+ if (cip->ic_cipher >= IEEE80211_CIPHER_MAX) {
+ ieee80211_err("ieee80211_crypto_unregister: "
+ "cipher %s has an invalid cipher index %u\n",
+ cip->ic_name, cip->ic_cipher);
+ return;
+ }
+ if (ciphers[cip->ic_cipher] != NULL && ciphers[cip->ic_cipher] != cip) {
+ ieee80211_err("ieee80211_crypto_unregister: "
+ "cipher %s registered with a different template\n",
+ cip->ic_name);
+ return;
+ }
+ /* NB: don't complain about not being registered */
+ ciphers[cip->ic_cipher] = NULL;
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_crypto_none.c b/usr/src/uts/common/io/net80211/net80211_crypto_none.c
new file mode 100644
index 0000000000..6f2200258c
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_crypto_none.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * IEEE 802.11 NULL crypto support.
+ */
+#include "net80211_impl.h"
+
+static void *none_attach(struct ieee80211com *, struct ieee80211_key *);
+static void none_detach(struct ieee80211_key *);
+static int none_setkey(struct ieee80211_key *);
+static int none_encap(struct ieee80211_key *, mblk_t *, uint8_t);
+static int none_decap(struct ieee80211_key *, mblk_t *, int);
+static int none_enmic(struct ieee80211_key *, mblk_t *, int);
+static int none_demic(struct ieee80211_key *, mblk_t *, int);
+
+const struct ieee80211_cipher ieee80211_cipher_none = {
+ "NONE",
+ IEEE80211_CIPHER_NONE,
+ 0,
+ 0,
+ 0,
+ none_attach,
+ none_detach,
+ none_setkey,
+ none_encap,
+ none_decap,
+ none_enmic,
+ none_demic,
+};
+
+/* ARGSUSED */
+static void *
+none_attach(struct ieee80211com *ic, struct ieee80211_key *k)
+{
+ return (ic); /* for diagnostics+stats */
+}
+
+/* ARGSUSED */
+static void
+none_detach(struct ieee80211_key *k)
+{
+ /* noop */
+}
+
+/* ARGSUSED */
+static int
+none_setkey(struct ieee80211_key *k)
+{
+ return (1);
+}
+
+/* ARGSUSED */
+static int
+none_encap(struct ieee80211_key *k, mblk_t *mp, uint8_t keyid)
+{
+ /*
+ * The specified key is not setup; this can
+ * happen, at least, when changing keys.
+ */
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "none_encap: "
+ "key id %u is not set (encap)\n", keyid >> 6);
+ return (0);
+}
+
+/* ARGSUSED */
+static int
+none_decap(struct ieee80211_key *k, mblk_t *mp, int hdrlen)
+{
+ struct ieee80211_frame *wh = (struct ieee80211_frame *)mp->b_rptr;
+ const uint8_t *ivp = (const uint8_t *)&wh[1];
+
+ /*
+ * The specified key is not setup; this can
+ * happen, at least, when changing keys.
+ */
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "none_decap"
+ "key id %u is not set (decap)\n",
+ ivp[IEEE80211_WEP_IVLEN] >> 6);
+ return (0);
+}
+
+/* ARGSUSED */
+static int
+none_enmic(struct ieee80211_key *k, mblk_t *mp, int force)
+{
+ return (0);
+}
+
+/* ARGSUSED */
+static int
+none_demic(struct ieee80211_key *k, mblk_t *mp, int force)
+{
+ return (0);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_crypto_wep.c b/usr/src/uts/common/io/net80211/net80211_crypto_wep.c
new file mode 100644
index 0000000000..5141a3c25a
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_crypto_wep.c
@@ -0,0 +1,420 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * IEEE 802.11 WEP crypto support.
+ */
+#include <sys/byteorder.h>
+#include <sys/crypto/common.h>
+#include <sys/crypto/api.h>
+#include <sys/crc32.h>
+#include <sys/random.h>
+#include "net80211_impl.h"
+
+static void *wep_attach(struct ieee80211com *, struct ieee80211_key *);
+static void wep_detach(struct ieee80211_key *);
+static int wep_setkey(struct ieee80211_key *);
+static int wep_encap(struct ieee80211_key *, mblk_t *, uint8_t keyid);
+static int wep_decap(struct ieee80211_key *, mblk_t *, int);
+static int wep_enmic(struct ieee80211_key *, mblk_t *, int);
+static int wep_demic(struct ieee80211_key *, mblk_t *, int);
+
+const struct ieee80211_cipher wep = {
+ "WEP",
+ IEEE80211_CIPHER_WEP,
+ IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN,
+ IEEE80211_WEP_CRCLEN,
+ 0,
+ wep_attach,
+ wep_detach,
+ wep_setkey,
+ wep_encap,
+ wep_decap,
+ wep_enmic,
+ wep_demic,
+};
+
+int rc4_init(crypto_context_t *, const uint8_t *, int);
+int rc4_crypt(crypto_context_t, const uint8_t *, uint8_t *, int);
+int rc4_final(crypto_context_t, uint8_t *, int);
+
+static int wep_encrypt(struct ieee80211_key *, mblk_t *, int);
+static int wep_decrypt(struct ieee80211_key *, mblk_t *, int);
+
+struct wep_ctx {
+ ieee80211com_t *wc_ic; /* for diagnostics */
+ uint32_t wc_iv; /* initial vector for crypto */
+};
+
+/* Table of CRCs of all 8-bit messages */
+static uint32_t crc_table[] = { CRC32_TABLE };
+
+/* ARGSUSED */
+static void *
+wep_attach(struct ieee80211com *ic, struct ieee80211_key *k)
+{
+ struct wep_ctx *ctx;
+
+ ctx = kmem_zalloc(sizeof (struct wep_ctx), KM_NOSLEEP);
+ if (ctx == NULL)
+ return (NULL);
+
+ ctx->wc_ic = ic;
+ (void) random_get_pseudo_bytes((unsigned char *)&ctx->wc_iv,
+ sizeof (uint32_t));
+ return (ctx);
+}
+
+static void
+wep_detach(struct ieee80211_key *k)
+{
+ struct wep_ctx *ctx = k->wk_private;
+
+ if (ctx != NULL)
+ kmem_free(ctx, sizeof (struct wep_ctx));
+}
+
+static int
+wep_setkey(struct ieee80211_key *k)
+{
+ /*
+ * WEP key length is standardized to 40-bit. Many
+ * implementations support 104-bit WEP kwys.
+ */
+ return (k->wk_keylen == 40/NBBY || k->wk_keylen == 104/NBBY);
+}
+
+/*
+ * Add privacy headers appropriate for the specified key.
+ */
+static int
+wep_encap(struct ieee80211_key *k, mblk_t *mp, uint8_t keyid)
+{
+ struct wep_ctx *ctx = k->wk_private;
+ struct ieee80211_frame *wh = (struct ieee80211_frame *)mp->b_rptr;
+ uint32_t iv;
+ uint8_t *ivp;
+ int hdrlen;
+
+ if (mp == NULL)
+ return (0);
+ hdrlen = ieee80211_hdrspace(wh);
+
+ ivp = (uint8_t *)wh;
+ ivp += hdrlen;
+
+ /*
+ * IV must not duplicate during the lifetime of the key.
+ * But no mechanism to renew keys is defined in IEEE 802.11
+ * WEP. And IV may be duplicated between other stations
+ * because of the session key itself is shared.
+ * So we use pseudo random IV for now, though it is not the
+ * right way.
+ */
+ iv = ctx->wc_iv;
+ /*
+ * Skip 'bad' IVs from Fluhrer/Mantin/Shamir:
+ * (B, 255, N) with 3 <= B < 8
+ */
+ if ((iv & 0xff00) == 0xff00) {
+ int B = (iv & 0xff0000) >> 16;
+ if (3 <= B && B < 16)
+ iv = (B+1) << 16;
+ }
+ ctx->wc_iv = iv + 1;
+
+ ivp[2] = (uint8_t)(iv >> 0);
+ ivp[1] = (uint8_t)(iv >> 8);
+ ivp[0] = (uint8_t)(iv >> 16);
+
+ /* Key ID and pad */
+ ivp[IEEE80211_WEP_IVLEN] = keyid;
+
+ if ((k->wk_flags & IEEE80211_KEY_SWCRYPT) &&
+ (wep_encrypt(k, mp, hdrlen) == 0))
+ return (0);
+
+ return (1);
+}
+
+/*
+ * Validate and strip privacy headers (and trailer) for a
+ * received frame. If necessary, decrypt the frame using
+ * the specified key.
+ */
+static int
+wep_decap(struct ieee80211_key *k, mblk_t *mp, int hdrlen)
+{
+ struct ieee80211_frame *wh, whbuf;
+
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+
+ /*
+ * Check if the device handled the decrypt in hardware.
+ * If so we just strip the header; otherwise we need to
+ * handle the decrypt in software.
+ */
+ if ((k->wk_flags & IEEE80211_KEY_SWCRYPT) &&
+ (wep_decrypt(k, mp, hdrlen) == 0)) {
+ ieee80211_err("WEP ICV mismatch on decrypt\n");
+ return (0);
+ }
+
+ /*
+ * Copy up 802.11 header and strip crypto bits.
+ */
+ bcopy(wh, &whbuf, sizeof (whbuf));
+ mp->b_rptr += wep.ic_header;
+ bcopy(&whbuf, mp->b_rptr, hdrlen);
+ mp->b_wptr -= wep.ic_trailer;
+
+ return (1);
+}
+
+/*
+ * Add MIC to the frame as needed.
+ */
+/* ARGSUSED */
+static int
+wep_enmic(struct ieee80211_key *k, mblk_t *mp, int force)
+{
+ return (1);
+}
+
+/*
+ * Verify and strip MIC from the frame.
+ */
+/* ARGSUSED */
+static int
+wep_demic(struct ieee80211_key *k, mblk_t *mp, int force)
+{
+ return (1);
+}
+
+static int
+wep_encrypt(struct ieee80211_key *key, mblk_t *mp, int hdrlen)
+{
+ uint8_t rc4key[IEEE80211_WEP_IVLEN + IEEE80211_KEYBUF_SIZE];
+ uint8_t crcbuf[IEEE80211_WEP_CRCLEN];
+ uint8_t *icv;
+ uint32_t crc;
+ crypto_context_t ctx;
+ int rv;
+
+ ASSERT(key->wk_flags & IEEE80211_KEY_SWCRYPT);
+
+ /* ctx->wc_ic->isc_stats.is_crypto_wep++; */
+
+ (void) memcpy(rc4key, mp->b_rptr + hdrlen, IEEE80211_WEP_IVLEN);
+ (void) memcpy(rc4key + IEEE80211_WEP_IVLEN, key->wk_key,
+ key->wk_keylen);
+
+ ctx = NULL;
+ rv = rc4_init(&ctx, (const uint8_t *)rc4key,
+ IEEE80211_WEP_IVLEN + key->wk_keylen);
+
+ if (rv != CRYPTO_SUCCESS)
+ return (0);
+
+ /* calculate CRC over unencrypted data */
+ CRC32(crc, mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_wptr - mp->b_rptr - (hdrlen + wep.ic_header),
+ -1U, crc_table);
+
+ /* encrypt data */
+ (void) rc4_crypt(ctx,
+ mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_wptr - mp->b_rptr - (hdrlen + wep.ic_header));
+
+ /* tack on ICV */
+ *(uint32_t *)crcbuf = LE_32(~crc);
+ icv = mp->b_wptr;
+ mp->b_wptr += IEEE80211_WEP_CRCLEN;
+ (void) rc4_crypt(ctx, crcbuf, icv, IEEE80211_WEP_CRCLEN);
+
+ (void) rc4_final(ctx, icv, IEEE80211_WEP_CRCLEN);
+
+ return (1);
+}
+
+static int
+wep_decrypt(struct ieee80211_key *key, mblk_t *mp, int hdrlen)
+{
+ uint8_t rc4key[IEEE80211_WEP_IVLEN + IEEE80211_KEYBUF_SIZE];
+ uint8_t crcbuf[IEEE80211_WEP_CRCLEN];
+ uint8_t *icv;
+ uint32_t crc;
+ crypto_context_t ctx;
+ int rv;
+
+ ASSERT(key->wk_flags & IEEE80211_KEY_SWCRYPT);
+
+ /* ctx->wc_ic->isc_stats.is_crypto_wep++; */
+
+ (void) memcpy(rc4key, mp->b_rptr + hdrlen, IEEE80211_WEP_IVLEN);
+ (void) memcpy(rc4key + IEEE80211_WEP_IVLEN, key->wk_key,
+ key->wk_keylen);
+
+ ctx = NULL;
+ rv = rc4_init(&ctx, (const uint8_t *)rc4key,
+ IEEE80211_WEP_IVLEN + key->wk_keylen);
+
+ if (rv != CRYPTO_SUCCESS)
+ return (0);
+
+ /* decrypt data */
+ (void) rc4_crypt(ctx,
+ mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_wptr - mp->b_rptr -
+ (hdrlen + wep.ic_header + wep.ic_trailer));
+
+ /* calculate CRC over unencrypted data */
+ CRC32(crc, mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_wptr - mp->b_rptr -
+ (hdrlen + wep.ic_header + wep.ic_trailer),
+ -1U, crc_table);
+
+ /* decrypt ICV and compare to CRC */
+ icv = mp->b_wptr - IEEE80211_WEP_CRCLEN;
+ (void) rc4_crypt(ctx, icv, crcbuf, IEEE80211_WEP_CRCLEN);
+
+ (void) rc4_final(ctx, crcbuf, IEEE80211_WEP_CRCLEN);
+
+ return (crc == ~LE_32(*(uint32_t *)crcbuf));
+}
+
+/*
+ * rc_init() - To init the key, for multiply encryption/decryption
+ * Using the Kernel encryption framework
+ */
+int
+rc4_init(crypto_context_t *ctx, const uint8_t *key, int keylen)
+{
+ crypto_mechanism_t mech;
+ crypto_key_t crkey;
+ int rv;
+
+ bzero(&crkey, sizeof (crkey));
+
+ crkey.ck_format = CRYPTO_KEY_RAW;
+ crkey.ck_data = (char *)key;
+ /* keys are measured in bits, not bytes, so multiply by 8 */
+ crkey.ck_length = keylen * 8;
+
+ mech.cm_type = crypto_mech2id(SUN_CKM_RC4);
+ mech.cm_param = NULL;
+ mech.cm_param_len = 0;
+
+ rv = crypto_encrypt_init(&mech, &crkey, NULL, ctx, NULL);
+ if (rv != CRYPTO_SUCCESS)
+ cmn_err(CE_WARN, "rc4_init failed (%x)", rv);
+
+ return (rv);
+}
+
+/*
+ * rc4_crypt
+ *
+ * Use the Kernel encryption framework to provide the
+ * crypto operations for the indicated data.
+ */
+int
+rc4_crypt(crypto_context_t ctx, const uint8_t *inbuf,
+ uint8_t *outbuf, int buflen)
+{
+ int rv = CRYPTO_FAILED;
+
+ crypto_data_t d1, d2;
+
+ ASSERT(inbuf != NULL);
+ ASSERT(outbuf != NULL);
+
+ bzero(&d1, sizeof (d1));
+ bzero(&d2, sizeof (d2));
+
+ d1.cd_format = CRYPTO_DATA_RAW;
+ d1.cd_offset = 0;
+ d1.cd_length = buflen;
+ d1.cd_raw.iov_base = (char *)inbuf;
+ d1.cd_raw.iov_len = buflen;
+
+ d2.cd_format = CRYPTO_DATA_RAW;
+ d2.cd_offset = 0;
+ d2.cd_length = buflen;
+ d2.cd_raw.iov_base = (char *)outbuf;
+ d2.cd_raw.iov_len = buflen;
+
+ rv = crypto_encrypt_update(ctx, &d1, &d2, NULL);
+
+ if (rv != CRYPTO_SUCCESS)
+ cmn_err(CE_WARN, "rc4_crypt failed (%x)", rv);
+ return (rv);
+}
+
+/*
+ * rc4_final
+ *
+ * Use the Kernel encryption framework to provide the
+ * crypto operations for the indicated data.
+ */
+int
+rc4_final(crypto_context_t ctx, uint8_t *outbuf, int buflen)
+{
+ int rv = CRYPTO_FAILED;
+
+ crypto_data_t d2;
+
+ ASSERT(outbuf != NULL);
+
+ bzero(&d2, sizeof (d2));
+
+ d2.cd_format = CRYPTO_DATA_RAW;
+ d2.cd_offset = 0;
+ d2.cd_length = buflen;
+ d2.cd_raw.iov_base = (char *)outbuf;
+ d2.cd_raw.iov_len = buflen;
+
+ rv = crypto_encrypt_final(ctx, &d2, NULL);
+
+ if (rv != CRYPTO_SUCCESS)
+ cmn_err(CE_WARN, "rc4_final failed (%x)", rv);
+ return (rv);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_impl.h b/usr/src/uts/common/io/net80211/net80211_impl.h
new file mode 100644
index 0000000000..2b535f4170
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_impl.h
@@ -0,0 +1,408 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifndef _SYS_NET80211_IMPL_H
+#define _SYS_NET80211_IMPL_H
+
+#include <sys/sysmacros.h>
+#include <sys/list.h>
+#include <sys/note.h>
+#include <sys/net80211_proto.h>
+#include <sys/net80211.h>
+#include <sys/mac_wifi.h>
+
+/*
+ * IEEE802.11 kernel support module
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IEEE80211_TXPOWER_MAX 100 /* .5 dbM */
+#define IEEE80211_TXPOWER_MIN 0 /* kill radio */
+
+#define IEEE80211_DTIM_MAX 15 /* max DTIM period */
+#define IEEE80211_DTIM_MIN 1 /* min DTIM period */
+#define IEEE80211_DTIM_DEFAULT 1 /* default DTIM period */
+
+/* NB: min+max come from WiFi requirements */
+#define IEEE80211_BINTVAL_MAX 1000 /* max beacon interval (TU's) */
+#define IEEE80211_BINTVAL_MIN 25 /* min beacon interval (TU's) */
+#define IEEE80211_BINTVAL_DEFAULT 100 /* default beacon interval (TU's) */
+
+#define IEEE80211_BMISS_MAX 2 /* maximum consecutive bmiss allowed */
+#define IEEE80211_SWBMISS_THRESHOLD 50 /* s/w bmiss threshold (TU's) */
+#define IEEE80211_HWBMISS_DEFAULT 7 /* h/w bmiss threshold (beacons) */
+
+#define IEEE80211_PS_SLEEP 0x1 /* STA is in power saving mode */
+#define IEEE80211_PS_MAX_QUEUE 50 /* maximum saved packets */
+
+#define IEEE80211_RTS_DEFAULT IEEE80211_RTS_MAX
+#define IEEE80211_FRAG_DEFAULT IEEE80211_FRAG_MAX
+
+/*
+ * The RSSI values of two node are taken as almost the same when
+ * the difference between these two node's RSSI values is within
+ * IEEE80211_RSSI_CMP_THRESHOLD
+ */
+#define IEEE80211_RSSI_CMP_THRESHOLD 5
+
+/*
+ * Each ieee80211com instance has a single timer that fires once a
+ * second. This is used to initiate various work depending on the
+ * state of the instance: scanning (passive or active), ``transition''
+ * (waiting for a response to a management frame when operating
+ * as a station), and node inactivity processing (when operating
+ * as an AP). For inactivity processing each node has a timeout
+ * set in it's in_inact field that is decremented on each timeout
+ * and the node is reclaimed when the counter goes to zero. We
+ * use different inactivity timeout values depending on whether
+ * the node is associated and authorized (either by 802.1x or
+ * open/shared key authentication) or associated but yet to be
+ * authorized. The latter timeout is shorter to more aggressively
+ * reclaim nodes that leave part way through the 802.1x exchange.
+ *
+ * IEEE80211_INACT_WAIT defines node table's inactivity interval in
+ * seconds. On timeout, node table's registered nt_timeout callback
+ * function is executed. Each node in the node table has a timeout
+ * set in its in_inact field with IEEE80211_INACT_<state>. In
+ * nt_timeout function, node table is iterated and each node's
+ * in_inact is decremented. So IEEE80211_INACT_<state> is defined in
+ * the form [inact_sec]/IEEE80211_INACT_WAIT.
+ *
+ */
+#define IEEE80211_INACT_WAIT 15 /* inactivity interval (secs) */
+#define IEEE80211_INACT_INIT (30/IEEE80211_INACT_WAIT) /* initial */
+#define IEEE80211_INACT_ASSOC (180/IEEE80211_INACT_WAIT)
+ /* associated but not authorized */
+#define IEEE80211_INACT_RUN (300/IEEE80211_INACT_WAIT) /* authorized */
+#define IEEE80211_INACT_PROBE (30/IEEE80211_INACT_WAIT) /* probe */
+#define IEEE80211_INACT_SCAN (300/IEEE80211_INACT_WAIT) /* scanned */
+
+#define IEEE80211_TRANS_WAIT 5 /* mgt frame tx timer (secs) */
+
+/*
+ * Useful combinations of channel characteristics.
+ */
+#define IEEE80211_CHAN_FHSS \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_GFSK)
+#define IEEE80211_CHAN_A \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
+#define IEEE80211_CHAN_B \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
+#define IEEE80211_CHAN_PUREG \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM)
+#define IEEE80211_CHAN_G \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
+#define IEEE80211_CHAN_T \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
+#define IEEE80211_CHAN_108G \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
+
+#define IEEE80211_CHAN_ALL \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_GFSK | \
+ IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN)
+#define IEEE80211_CHAN_ALLTURBO \
+ (IEEE80211_CHAN_ALL | IEEE80211_CHAN_TURBO)
+
+#define IEEE80211_IS_CHAN_FHSS(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_FHSS) == IEEE80211_CHAN_FHSS)
+#define IEEE80211_IS_CHAN_A(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A)
+#define IEEE80211_IS_CHAN_B(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B)
+#define IEEE80211_IS_CHAN_PUREG(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG)
+#define IEEE80211_IS_CHAN_G(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G)
+#define IEEE80211_IS_CHAN_ANYG(_c) \
+ (IEEE80211_IS_CHAN_PUREG(_c) || IEEE80211_IS_CHAN_G(_c))
+#define IEEE80211_IS_CHAN_T(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_T) == IEEE80211_CHAN_T)
+#define IEEE80211_IS_CHAN_108G(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_108G) == IEEE80211_CHAN_108G)
+
+#define IEEE80211_IS_CHAN_OFDM(_c) \
+ ((_c)->ich_flags & IEEE80211_CHAN_OFDM)
+#define IEEE80211_IS_CHAN_CCK(_c) \
+ ((_c)->ich_flags & IEEE80211_CHAN_CCK)
+#define IEEE80211_IS_CHAN_GFSK(_c) \
+ ((_c)->ich_flags & IEEE80211_CHAN_GFSK)
+#define IEEE80211_IS_CHAN_PASSIVE(_c) \
+ ((_c)->ich_flags & IEEE80211_CHAN_PASSIVE)
+
+/* ni_chan encoding for FH phy */
+#define IEEE80211_FH_CHANMOD 80
+#define IEEE80211_FH_CHAN(set, pat) \
+ (((set) - 1) * IEEE80211_FH_CHANMOD + (pat))
+#define IEEE80211_FH_CHANSET(chan) \
+ ((chan) / IEEE80211_FH_CHANMOD + 1)
+#define IEEE80211_FH_CHANPAT(chan) \
+ ((chan) % IEEE80211_FH_CHANMOD)
+
+#define IEEE80211_NODE_AUTH 0x0001 /* authorized for data */
+#define IEEE80211_NODE_QOS 0x0002 /* QoS enabled */
+#define IEEE80211_NODE_ERP 0x0004 /* ERP enabled */
+#define IEEE80211_NODE_PWR_MGT 0x0010 /* power save mode enabled */
+#define IEEE80211_NODE_AREF 0x0020 /* authentication ref held */
+
+#define IEEE80211_MAXRSSI 127
+
+/* Debug Flags */
+#define IEEE80211_MSG_DEBUG 0x40000000 /* IFF_DEBUG equivalent */
+#define IEEE80211_MSG_DUMPPKTS 0x20000000 /* IFF_LINK2 equivalant */
+#define IEEE80211_MSG_CRYPTO 0x10000000 /* crypto work */
+#define IEEE80211_MSG_INPUT 0x08000000 /* input handling */
+#define IEEE80211_MSG_XRATE 0x04000000 /* rate set handling */
+#define IEEE80211_MSG_ELEMID 0x02000000 /* element id parsing */
+#define IEEE80211_MSG_NODE 0x01000000 /* node handling */
+#define IEEE80211_MSG_ASSOC 0x00800000 /* association handling */
+#define IEEE80211_MSG_AUTH 0x00400000 /* authentication handling */
+#define IEEE80211_MSG_SCAN 0x00200000 /* scanning */
+#define IEEE80211_MSG_OUTPUT 0x00100000 /* output handling */
+#define IEEE80211_MSG_STATE 0x00080000 /* state machine */
+#define IEEE80211_MSG_POWER 0x00040000 /* power save handling */
+#define IEEE80211_MSG_DOT1X 0x00020000 /* 802.1x authenticator */
+#define IEEE80211_MSG_DOT1XSM 0x00010000 /* 802.1x state machine */
+#define IEEE80211_MSG_RADIUS 0x00008000 /* 802.1x radius client */
+#define IEEE80211_MSG_RADDUMP 0x00004000 /* dump 802.1x radius packets */
+#define IEEE80211_MSG_RADKEYS 0x00002000 /* dump 802.1x keys */
+#define IEEE80211_MSG_WPA 0x00001000 /* WPA/RSN protocol */
+#define IEEE80211_MSG_ACL 0x00000800 /* ACL handling */
+#define IEEE80211_MSG_WME 0x00000400 /* WME protocol */
+#define IEEE80211_MSG_SUPERG 0x00000200 /* Atheros SuperG protocol */
+#define IEEE80211_MSG_DOTH 0x00000100 /* 802.11h support */
+#define IEEE80211_MSG_INACT 0x00000080 /* inactivity handling */
+#define IEEE80211_MSG_ROAM 0x00000040 /* sta-mode roaming */
+#define IEEE80211_MSG_CONFIG 0x00000020 /* wificonfig/dladm */
+#define IEEE80211_MSG_ANY 0xffffffff /* anything */
+
+/* Error flags returned by ieee80211_match_bss */
+#define IEEE80211_BADCHAN 0x01
+#define IEEE80211_BADOPMODE 0x02
+#define IEEE80211_BADPRIVACY 0x04
+#define IEEE80211_BADRATE 0x08
+#define IEEE80211_BADESSID 0x10
+#define IEEE80211_BADBSSID 0x20
+#define IEEE80211_NODEFAIL 0x40
+
+typedef struct ieee80211_impl {
+ struct ieee80211com *ic;
+ uint8_t im_chan_avail[IEEE80211_CHAN_BYTES];
+ uint8_t im_chan_scan[IEEE80211_CHAN_BYTES];
+
+ uint8_t im_bmiss_count; /* current beacon miss count */
+ int32_t im_bmiss_max; /* max bmiss before scan */
+ timeout_id_t im_swbmiss;
+ uint16_t im_swbmiss_count; /* beacons in last period */
+ uint16_t im_swbmiss_period; /* s/w bmiss period */
+
+ int32_t im_mgt_timer; /* mgmt timeout, secs */
+ int32_t im_inact_timer; /* inactivity timer wait, sec */
+ int32_t im_inact_init; /* initial setting */
+ int32_t im_inact_assoc; /* assoc but not authorized */
+ int32_t im_inact_run; /* authorized setting */
+ int32_t im_inact_probe; /* inactive probe time */
+
+ kcondvar_t im_scan_cv; /* wait scan complete */
+} ieee80211_impl_t;
+
+/*
+ * Parameters supplied when adding/updating an entry in a
+ * scan cache. Pointer variables should be set to NULL
+ * if no data is available. Pointer references can be to
+ * local data; any information that is saved will be copied.
+ * All multi-byte values must be in host byte order.
+ */
+struct ieee80211_scanparams {
+ uint16_t capinfo; /* 802.11 capabilities */
+ enum ieee80211_phytype phytype;
+ uint16_t fhdwell; /* FHSS dwell interval */
+ uint8_t chan;
+ uint8_t bchan;
+ uint8_t fhindex;
+ uint8_t erp;
+ uint16_t bintval;
+ uint8_t timoff;
+ uint8_t *tim;
+ uint8_t *tstamp;
+ uint8_t *country;
+ uint8_t *ssid;
+ uint8_t *rates;
+ uint8_t *xrates;
+ uint8_t *wpa;
+ uint8_t *wme;
+};
+
+#define IEEE80211_SEND_MGMT(_ic, _in, _type, _arg) \
+ ((*(_ic)->ic_send_mgmt)((_ic), (_in), (_type), (_arg)))
+
+/* Verify the existence and length of __elem or get out. */
+#define IEEE80211_VERIFY_ELEMENT(__elem, __maxlen, __func) do { \
+ _NOTE(CONSTCOND) \
+ if ((__elem) == NULL) { \
+ ieee80211_err("ieee80211: no #__elem \n"); \
+ __func; \
+ } \
+ if ((__elem)[1] > (__maxlen)) { \
+ ieee80211_err("ieee80211: bad "#__elem " len %d\n", \
+ (__elem)[1]); \
+ __func; \
+ } \
+ _NOTE(CONSTCOND) \
+} while (0)
+
+#define IEEE80211_VERIFY_LENGTH(_len, _minlen, _func) do { \
+ _NOTE(CONSTCOND) \
+ if ((_len) < (_minlen)) { \
+ ieee80211_dbg(IEEE80211_MSG_ELEMID, \
+ "ie of type %s too short", \
+ ieee80211_mgt_subtype_name[subtype >> \
+ IEEE80211_FC0_SUBTYPE_SHIFT]); \
+ _func; \
+ } \
+ _NOTE(CONSTCOND) \
+} while (0)
+
+#define IEEE80211_VERIFY_SSID(_in, _ssid, _func) do { \
+ _NOTE(CONSTCOND) \
+ ASSERT((_in) != NULL); \
+ if ((_ssid)[1] != 0 && \
+ ((_ssid)[1] != (_in)->in_esslen || \
+ bcmp((_ssid) + 2, (_in)->in_essid, (_ssid)[1]) != 0)) { \
+ _func; \
+ } \
+ _NOTE(CONSTCOND) \
+} while (0)
+
+#define ieee80211_setbit(a, i) ((a)[(i)/NBBY] |= (1 << ((i)%NBBY)))
+#define ieee80211_clrbit(a, i) ((a)[(i)/NBBY] &= ~(1 << ((i)%NBBY)))
+#define ieee80211_isset(a, i) ((a)[(i)/NBBY] & (1 << ((i)%NBBY)))
+#define ieee80211_isclr(a, i) (!((a)[(i)/NBBY] & (1 << ((i)%NBBY))))
+
+#define IEEE80211_N(a) (sizeof (a) / sizeof (a[0]))
+
+#define IEEE80211_LOCK(_ic) \
+ mutex_enter(&(_ic)->ic_genlock)
+#define IEEE80211_UNLOCK(_ic) \
+ mutex_exit(&(_ic)->ic_genlock)
+#define IEEE80211_IS_LOCKED(_ic) \
+ mutex_owned(&(_ic)->ic_genlock)
+#define IEEE80211_LOCK_ASSERT(_ic) \
+ ASSERT(mutex_owned(&(_ic)->ic_genlock))
+
+#define IEEE80211_NODE_LOCK(_nt) \
+ mutex_enter(&(_nt)->nt_nodelock)
+#define IEEE80211_NODE_UNLOCK(_nt) \
+ mutex_exit(&(_nt)->nt_nodelock)
+#define IEEE80211_NODE_IS_LOCKED(_nt) \
+ mutex_owned(&(_nt)->nt_nodelock)
+#define IEEE80211_NODE_LOCK_ASSERT(_nt) \
+ ASSERT(mutex_owned(&(_nt)->nt_nodelock))
+#define ieee80211_node_hash(addr) \
+ (((uint8_t *)(addr))[IEEE80211_ADDR_LEN - 1] % IEEE80211_NODE_HASHSIZE)
+
+#define IEEE80211_SCAN_LOCK(_nt) mutex_enter(&(_nt)->nt_scanlock)
+#define IEEE80211_SCAN_UNLOCK(_nt) mutex_exit(&(_nt)->nt_scanlock)
+
+#define IEEE80211_RV(v) ((v) & IEEE80211_RATE_VAL)
+
+#define IEEE80211_SUBTYPE_NAME(subtype) \
+ ieee80211_mgt_subtype_name[(subtype) >> IEEE80211_FC0_SUBTYPE_SHIFT]
+
+extern const char *ieee80211_mgt_subtype_name[];
+extern const char *ieee80211_phymode_name[];
+
+void ieee80211_err(const int8_t *, ...);
+void ieee80211_dbg(uint32_t, const int8_t *, ...);
+int ieee80211_hdrspace(const void *);
+
+/* node */
+void ieee80211_node_attach(ieee80211com_t *);
+void ieee80211_node_lateattach(ieee80211com_t *);
+void ieee80211_node_detach(ieee80211com_t *);
+void ieee80211_reset_bss(ieee80211com_t *);
+void ieee80211_cancel_scan(ieee80211com_t *);
+void ieee80211_add_scan(ieee80211com_t *, const struct ieee80211_scanparams *,
+ const struct ieee80211_frame *, int, int, int);
+void ieee80211_init_neighbor(ieee80211_node_t *, const struct ieee80211_frame *,
+ const struct ieee80211_scanparams *);
+ieee80211_node_t *ieee80211_add_neighbor(ieee80211com_t *,
+ const struct ieee80211_frame *, const struct ieee80211_scanparams *);
+void ieee80211_create_ibss(ieee80211com_t *, struct ieee80211_channel *);
+ieee80211_node_t *ieee80211_fakeup_adhoc_node(ieee80211_node_table_t *,
+ const uint8_t *);
+ieee80211_node_t *ieee80211_tmp_node(ieee80211com_t *, const uint8_t *);
+
+/* proto */
+void ieee80211_proto_attach(ieee80211com_t *);
+int ieee80211_fix_rate(ieee80211_node_t *, int);
+void ieee80211_setbasicrates(struct ieee80211_rateset *,
+ enum ieee80211_phymode);
+void ieee80211_reset_erp(ieee80211com_t *);
+void ieee80211_set_shortslottime(ieee80211com_t *, boolean_t);
+
+/* input */
+int ieee80211_setup_rates(ieee80211_node_t *, const uint8_t *,
+ const uint8_t *, int);
+void ieee80211_recv_mgmt(ieee80211com_t *, mblk_t *, ieee80211_node_t *,
+ int, int, uint32_t);
+
+/* output */
+int ieee80211_send_probereq(ieee80211_node_t *, const uint8_t *,
+ const uint8_t *, const uint8_t *, const uint8_t *, size_t, const void *,
+ size_t);
+int ieee80211_send_mgmt(ieee80211com_t *, ieee80211_node_t *, int, int);
+int ieee80211_send_nulldata(ieee80211_node_t *);
+
+/* crypto */
+struct ieee80211_key *ieee80211_crypto_getkey(ieee80211com_t *);
+uint8_t ieee80211_crypto_getciphertype(ieee80211com_t *);
+
+/* generic */
+mblk_t *ieee80211_getmgtframe(uint8_t **, int);
+void ieee80211_notify_node_join(ieee80211com_t *, ieee80211_node_t *);
+void ieee80211_notify_node_leave(ieee80211com_t *, ieee80211_node_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_NET80211_IMPL_H */
diff --git a/usr/src/uts/common/io/net80211/net80211_input.c b/usr/src/uts/common/io/net80211/net80211_input.c
new file mode 100644
index 0000000000..39d5db2df0
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_input.c
@@ -0,0 +1,1233 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * Process received frame
+ */
+
+#include <sys/byteorder.h>
+#include "net80211_impl.h"
+
+static mblk_t *ieee80211_defrag(ieee80211com_t *, ieee80211_node_t *,
+ mblk_t *, int);
+
+/*
+ * Process a received frame. The node associated with the sender
+ * should be supplied. If nothing was found in the node table then
+ * the caller is assumed to supply a reference to ic_bss instead.
+ * The RSSI and a timestamp are also supplied. The RSSI data is used
+ * during AP scanning to select a AP to associate with; it can have
+ * any units so long as values have consistent units and higher values
+ * mean ``better signal''. The receive timestamp is currently not used
+ * by the 802.11 layer.
+ */
+int
+ieee80211_input(ieee80211com_t *ic, mblk_t *mp, struct ieee80211_node *in,
+ int32_t rssi, uint32_t rstamp)
+{
+ struct ieee80211_frame *wh;
+ struct ieee80211_key *key;
+ uint8_t *bssid;
+ int hdrspace;
+ int len;
+ uint16_t rxseq;
+ uint8_t dir;
+ uint8_t type;
+ uint8_t subtype;
+ uint8_t tid;
+
+ ASSERT(in != NULL);
+ type = (uint8_t)-1; /* undefined */
+ len = mp->b_wptr - mp->b_rptr;
+ if (len < sizeof (struct ieee80211_frame_min)) {
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_input: "
+ "too short (1): len %u", len);
+ goto out;
+ }
+ /*
+ * Bit of a cheat here, we use a pointer for a 3-address
+ * frame format but don't reference fields past outside
+ * ieee80211_frame_min w/o first validating the data is
+ * present.
+ */
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ if ((wh->i_fc[0] & IEEE80211_FC0_VERSION_MASK) !=
+ IEEE80211_FC0_VERSION_0) {
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_input: "
+ "discard pkt with wrong version %x", wh->i_fc[0]);
+ goto out;
+ }
+
+ dir = wh->i_fc[1] & IEEE80211_FC1_DIR_MASK;
+ type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
+ subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
+
+ IEEE80211_LOCK(ic);
+ if (!(ic->ic_flags & IEEE80211_F_SCAN)) {
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ bssid = wh->i_addr2;
+ if (!IEEE80211_ADDR_EQ(bssid, in->in_bssid))
+ goto out_exit_mutex;
+ break;
+ case IEEE80211_M_IBSS:
+ case IEEE80211_M_AHDEMO:
+ if (dir != IEEE80211_FC1_DIR_NODS) {
+ bssid = wh->i_addr1;
+ } else if (type == IEEE80211_FC0_TYPE_CTL) {
+ bssid = wh->i_addr1;
+ } else {
+ if (len < sizeof (struct ieee80211_frame)) {
+ ieee80211_dbg(IEEE80211_MSG_ANY,
+ "ieee80211_input: too short(2):"
+ "len %u\n", len);
+ goto out_exit_mutex;
+ }
+ bssid = wh->i_addr3;
+ }
+ if (type != IEEE80211_FC0_TYPE_DATA)
+ break;
+ /*
+ * Data frame, validate the bssid.
+ */
+ if (!IEEE80211_ADDR_EQ(bssid, ic->ic_bss->in_bssid) &&
+ !IEEE80211_ADDR_EQ(bssid, wifi_bcastaddr)) {
+ /* not interested in */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: not to bss %s\n",
+ ieee80211_macaddr_sprintf(bssid));
+ goto out_exit_mutex;
+ }
+ /*
+ * For adhoc mode we cons up a node when it doesn't
+ * exist. This should probably done after an ACL check.
+ */
+ if (in == ic->ic_bss &&
+ ic->ic_opmode != IEEE80211_M_HOSTAP &&
+ !IEEE80211_ADDR_EQ(wh->i_addr2, in->in_macaddr)) {
+ /*
+ * Fake up a node for this newly
+ * discovered member of the IBSS.
+ */
+ in = ieee80211_fakeup_adhoc_node(&ic->ic_sta,
+ wh->i_addr2);
+ if (in == NULL) {
+ /* NB: stat kept for alloc failure */
+ goto out_exit_mutex;
+ }
+ }
+ break;
+ default:
+ goto out_exit_mutex;
+ }
+ in->in_rssi = (uint8_t)rssi;
+ in->in_rstamp = rstamp;
+ if (!(type & IEEE80211_FC0_TYPE_CTL)) {
+ tid = 0;
+ rxseq = (*(uint16_t *)wh->i_seq);
+ if ((wh->i_fc[1] & IEEE80211_FC1_RETRY) &&
+ (rxseq - in->in_rxseqs[tid]) <= 0) {
+ /* duplicate, discard */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: duplicate",
+ "seqno <%u,%u> fragno <%u,%u> tid %u",
+ rxseq >> IEEE80211_SEQ_SEQ_SHIFT,
+ in->in_rxseqs[tid] >>
+ IEEE80211_SEQ_SEQ_SHIFT,
+ rxseq & IEEE80211_SEQ_FRAG_MASK,
+ in->in_rxseqs[tid] &
+ IEEE80211_SEQ_FRAG_MASK,
+ tid);
+ ic->ic_stats.is_rx_dups++;
+ goto out_exit_mutex;
+ }
+ in->in_rxseqs[tid] = rxseq;
+ }
+ in->in_inact = 0;
+ }
+
+ hdrspace = ieee80211_hdrspace(wh);
+ switch (type) {
+ case IEEE80211_FC0_TYPE_DATA:
+ if (len < hdrspace) {
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_input: "
+ "data too short: expecting %u", hdrspace);
+ goto out_exit_mutex;
+ }
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ if (dir != IEEE80211_FC1_DIR_FROMDS) {
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: data ",
+ "unknown dir 0x%x", dir);
+ goto out_exit_mutex;
+ }
+ if (IEEE80211_IS_MULTICAST(wh->i_addr1) &&
+ IEEE80211_ADDR_EQ(wh->i_addr3, ic->ic_macaddr)) {
+ /*
+ * In IEEE802.11 network, multicast packet
+ * sent from me is broadcasted from AP.
+ * It should be silently discarded for
+ * SIMPLEX interface.
+ */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: multicast echo\n");
+ goto out_exit_mutex;
+ }
+ break;
+ case IEEE80211_M_IBSS:
+ case IEEE80211_M_AHDEMO:
+ if (dir != IEEE80211_FC1_DIR_NODS) {
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: unknown dir 0x%x",
+ dir);
+ goto out_exit_mutex;
+ }
+ break;
+ default:
+ ieee80211_err("ieee80211_input: "
+ "receive data, unknown opmode %u, skip\n",
+ ic->ic_opmode);
+ goto out_exit_mutex;
+ }
+
+ /*
+ * Handle privacy requirements.
+ */
+ if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
+ if ((ic->ic_flags & IEEE80211_F_PRIVACY) == 0) {
+ /*
+ * Discard encrypted frames when privacy off.
+ */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: ""WEP PRIVACY off");
+ ic->ic_stats.is_wep_errors++;
+ goto out_exit_mutex;
+ }
+ key = ieee80211_crypto_decap(ic, mp, hdrspace);
+ if (key == NULL) {
+ /* NB: stats+msgs handled in crypto_decap */
+ ic->ic_stats.is_wep_errors++;
+ goto out_exit_mutex;
+ }
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ wh->i_fc[1] &= ~IEEE80211_FC1_WEP;
+ } else {
+ key = NULL;
+ }
+
+ /*
+ * Next up, any fragmentation
+ */
+ if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) {
+ mp = ieee80211_defrag(ic, in, mp, hdrspace);
+ if (mp == NULL) {
+ /* Fragment dropped or frame not complete yet */
+ goto out_exit_mutex;
+ }
+ }
+ wh = NULL; /* no longer valid, catch any uses */
+
+ /*
+ * Next strip any MSDU crypto bits.
+ */
+ if (key != NULL && !ieee80211_crypto_demic(ic, key, mp, 0)) {
+ ieee80211_dbg(IEEE80211_MSG_INPUT, "ieee80211_input: "
+ "data demic error\n");
+ goto out_exit_mutex;
+ }
+
+ ic->ic_stats.is_rx_frags++;
+ ic->ic_stats.is_rx_bytes += len;
+ IEEE80211_UNLOCK(ic);
+ mac_rx(ic->ic_mach, NULL, mp);
+ return (IEEE80211_FC0_TYPE_DATA);
+
+ case IEEE80211_FC0_TYPE_MGT:
+ if (dir != IEEE80211_FC1_DIR_NODS)
+ goto out_exit_mutex;
+ if (len < sizeof (struct ieee80211_frame))
+ goto out_exit_mutex;
+ if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
+ if (subtype != IEEE80211_FC0_SUBTYPE_AUTH) {
+ /*
+ * Only shared key auth frames with a challenge
+ * should be encrypted, discard all others.
+ */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: "
+ "%s WEP set but not permitted",
+ IEEE80211_SUBTYPE_NAME(subtype));
+ ic->ic_stats.is_wep_errors++;
+ goto out_exit_mutex;
+ }
+ if ((ic->ic_flags & IEEE80211_F_PRIVACY) == 0) {
+ /*
+ * Discard encrypted frames when privacy off.
+ */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: "
+ "mgt WEP set but PRIVACY off");
+ ic->ic_stats.is_wep_errors++;
+ goto out_exit_mutex;
+ }
+ key = ieee80211_crypto_decap(ic, mp, hdrspace);
+ if (key == NULL) {
+ /* NB: stats+msgs handled in crypto_decap */
+ goto out_exit_mutex;
+ }
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ wh->i_fc[1] &= ~IEEE80211_FC1_WEP;
+ }
+ IEEE80211_UNLOCK(ic);
+ ic->ic_recv_mgmt(ic, mp, in, subtype, rssi, rstamp);
+ goto out;
+
+ case IEEE80211_FC0_TYPE_CTL:
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_input: "
+ "bad frame type 0x%x", type);
+ /* should not come here */
+ break;
+ }
+out_exit_mutex:
+ IEEE80211_UNLOCK(ic);
+out:
+ if (mp != NULL)
+ freemsg(mp);
+
+ return (type);
+}
+
+/*
+ * This function reassemble fragments.
+ * More fragments bit in the frame control means the packet is fragmented.
+ * While the sequence control field consists of 4-bit fragment number
+ * field and a 12-bit sequence number field.
+ */
+/* ARGSUSED */
+static mblk_t *
+ieee80211_defrag(ieee80211com_t *ic, struct ieee80211_node *in, mblk_t *mp,
+ int hdrspace)
+{
+ struct ieee80211_frame *wh = (struct ieee80211_frame *)mp->b_rptr;
+ struct ieee80211_frame *lwh;
+ mblk_t *mfrag;
+ uint16_t rxseq;
+ uint8_t fragno;
+ uint8_t more_frag;
+
+ ASSERT(!IEEE80211_IS_MULTICAST(wh->i_addr1));
+ more_frag = wh->i_fc[1] & IEEE80211_FC1_MORE_FRAG;
+ rxseq = LE_16(*(uint16_t *)wh->i_seq);
+ fragno = rxseq & IEEE80211_SEQ_FRAG_MASK;
+
+ /* Quick way out, if there's nothing to defragment */
+ if (!more_frag && fragno == 0 && in->in_rxfrag == NULL)
+ return (mp);
+
+ /*
+ * Remove frag to insure it doesn't get reaped by timer.
+ */
+ if (in->in_table == NULL) {
+ /*
+ * Should never happen. If the node is orphaned (not in
+ * the table) then input packets should not reach here.
+ * Otherwise, a concurrent request that yanks the table
+ * should be blocked by other interlocking and/or by first
+ * shutting the driver down. Regardless, be defensive
+ * here and just bail
+ */
+ freemsg(mp);
+ return (NULL);
+ }
+ IEEE80211_NODE_LOCK(in->in_table);
+ mfrag = in->in_rxfrag;
+ in->in_rxfrag = NULL;
+ IEEE80211_NODE_UNLOCK(in->in_table);
+
+ /*
+ * Validate new fragment is in order and
+ * related to the previous ones.
+ */
+ if (mfrag != NULL) {
+ uint16_t last_rxseq;
+
+ lwh = (struct ieee80211_frame *)mfrag->b_rptr;
+ last_rxseq = LE_16(*(uint16_t *)lwh->i_seq);
+ /*
+ * Sequence control field contains 12-bit sequence no
+ * and 4-bit fragment number. For fragemnts, the
+ * sequence no is not changed.
+ * NB: check seq # and frag together
+ */
+ if (rxseq != last_rxseq + 1 ||
+ !IEEE80211_ADDR_EQ(wh->i_addr1, lwh->i_addr1) ||
+ !IEEE80211_ADDR_EQ(wh->i_addr2, lwh->i_addr2)) {
+ /*
+ * Unrelated fragment or no space for it,
+ * clear current fragments.
+ */
+ freemsg(mfrag);
+ mfrag = NULL;
+ }
+ }
+
+ if (mfrag == NULL) {
+ if (fragno != 0) { /* !first fragment, discard */
+ freemsg(mp);
+ return (NULL);
+ }
+ mfrag = mp;
+ } else { /* concatenate */
+ (void) adjmsg(mp, hdrspace);
+ linkb(mfrag, mp);
+ /* track last seqnum and fragno */
+ lwh = (struct ieee80211_frame *)mfrag->b_rptr;
+ *(uint16_t *)lwh->i_seq = *(uint16_t *)wh->i_seq;
+ }
+ if (more_frag != 0) { /* more to come, save */
+ in->in_rxfragstamp = ddi_get_lbolt();
+ in->in_rxfrag = mfrag;
+ mfrag = NULL;
+ }
+
+ return (mfrag);
+}
+
+/*
+ * Install received rate set information in the node's state block.
+ */
+int
+ieee80211_setup_rates(struct ieee80211_node *in, const uint8_t *rates,
+ const uint8_t *xrates, int flags)
+{
+ struct ieee80211_rateset *rs = &in->in_rates;
+
+ bzero(rs, sizeof (*rs));
+ rs->ir_nrates = rates[1];
+ /* skip 1 byte element ID and 1 byte length */
+ bcopy(rates + 2, rs->ir_rates, rs->ir_nrates);
+ if (xrates != NULL) {
+ uint8_t nxrates;
+
+ /*
+ * Tack on 11g extended supported rate element.
+ */
+ nxrates = xrates[1];
+ if (rs->ir_nrates + nxrates > IEEE80211_RATE_MAXSIZE) {
+ nxrates = IEEE80211_RATE_MAXSIZE - rs->ir_nrates;
+ ieee80211_dbg(IEEE80211_MSG_XRATE,
+ "ieee80211_setup_rates: %s",
+ "[%s] extended rate set too large;"
+ " only using %u of %u rates\n",
+ ieee80211_macaddr_sprintf(in->in_macaddr),
+ nxrates, xrates[1]);
+ }
+ bcopy(xrates + 2, rs->ir_rates + rs->ir_nrates, nxrates);
+ rs->ir_nrates += nxrates;
+ }
+ return (ieee80211_fix_rate(in, flags));
+}
+
+/*
+ * Process open-system authentication response frame and start
+ * association if the authentication request is accepted.
+ */
+static void
+ieee80211_auth_open(ieee80211com_t *ic, struct ieee80211_frame *wh,
+ struct ieee80211_node *in, uint16_t seq, uint16_t status)
+{
+ IEEE80211_LOCK_ASSERT(ic);
+ if (in->in_authmode == IEEE80211_AUTH_SHARED) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "open auth: bad sta auth mode %u", in->in_authmode);
+ return;
+ }
+ if (ic->ic_opmode == IEEE80211_M_STA) {
+ if (ic->ic_state != IEEE80211_S_AUTH ||
+ seq != IEEE80211_AUTH_OPEN_RESPONSE) {
+ return;
+ }
+ IEEE80211_UNLOCK(ic);
+ if (status != 0) {
+ ieee80211_dbg(IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
+ "open auth failed (reason %d)\n", status);
+ if (in != ic->ic_bss)
+ in->in_fails++;
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, 0);
+ } else {
+ /* i_fc[0] - frame control's type & subtype field */
+ ieee80211_new_state(ic, IEEE80211_S_ASSOC,
+ wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
+ }
+ IEEE80211_LOCK(ic);
+ } else {
+ ieee80211_dbg(IEEE80211_MSG_AUTH, "ieee80211_auth_open: "
+ "bad operating mode %u", ic->ic_opmode);
+ }
+}
+
+/*
+ * Allocate challenge text for use by shared-key authentication
+ * Return B_TRUE on success, B_FALST otherwise.
+ */
+static boolean_t
+ieee80211_alloc_challenge(struct ieee80211_node *in)
+{
+ if (in->in_challenge == NULL) {
+ in->in_challenge = kmem_alloc(IEEE80211_CHALLENGE_LEN,
+ KM_NOSLEEP);
+ }
+ if (in->in_challenge == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
+ "[%s] shared key challenge alloc failed\n",
+ ieee80211_macaddr_sprintf(in->in_macaddr));
+ }
+ return (in->in_challenge != NULL);
+}
+
+/*
+ * Process shared-key authentication response frames. If authentication
+ * succeeds, start association; otherwise, restart scan.
+ */
+static void
+ieee80211_auth_shared(ieee80211com_t *ic, struct ieee80211_frame *wh,
+ uint8_t *frm, uint8_t *efrm, struct ieee80211_node *in, uint16_t seq,
+ uint16_t status)
+{
+ uint8_t *challenge;
+
+ /*
+ * Pre-shared key authentication is evil; accept
+ * it only if explicitly configured (it is supported
+ * mainly for compatibility with clients like OS X).
+ */
+ IEEE80211_LOCK_ASSERT(ic);
+ if (in->in_authmode != IEEE80211_AUTH_AUTO &&
+ in->in_authmode != IEEE80211_AUTH_SHARED) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH, "ieee80211_auth_shared: "
+ "bad sta auth mode %u", in->in_authmode);
+ goto bad;
+ }
+
+ challenge = NULL;
+ if (frm + 1 < efrm) {
+ /*
+ * Challenge text information element
+ * frm[0] - element ID
+ * frm[1] - length
+ * frm[2]... - challenge text
+ */
+ if ((frm[1] + 2) > (efrm - frm)) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "ieee80211_auth_shared: ie %d%d too long\n",
+ frm[0], (frm[1] + 2) - (efrm - frm));
+ goto bad;
+ }
+ if (*frm == IEEE80211_ELEMID_CHALLENGE)
+ challenge = frm;
+ frm += frm[1] + 2;
+ }
+ switch (seq) {
+ case IEEE80211_AUTH_SHARED_CHALLENGE:
+ case IEEE80211_AUTH_SHARED_RESPONSE:
+ if (challenge == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "ieee80211_auth_shared: no challenge\n");
+ goto bad;
+ }
+ if (challenge[1] != IEEE80211_CHALLENGE_LEN) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "ieee80211_auth_shared: bad challenge len %d\n",
+ challenge[1]);
+ goto bad;
+ }
+ default:
+ break;
+ }
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ if (ic->ic_state != IEEE80211_S_AUTH)
+ return;
+ switch (seq) {
+ case IEEE80211_AUTH_SHARED_PASS:
+ if (in->in_challenge != NULL) {
+ kmem_free(in->in_challenge,
+ IEEE80211_CHALLENGE_LEN);
+ in->in_challenge = NULL;
+ }
+ if (status != 0) {
+ ieee80211_dbg(IEEE80211_MSG_DEBUG |
+ IEEE80211_MSG_AUTH,
+ "shared key auth failed (reason %d)\n",
+ status);
+ if (in != ic->ic_bss)
+ in->in_fails++;
+ return;
+ }
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_ASSOC,
+ wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
+ IEEE80211_LOCK(ic);
+ break;
+ case IEEE80211_AUTH_SHARED_CHALLENGE:
+ if (!ieee80211_alloc_challenge(in))
+ return;
+ bcopy(&challenge[2], in->in_challenge, challenge[1]);
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in, IEEE80211_FC0_SUBTYPE_AUTH,
+ seq + 1);
+ IEEE80211_LOCK(ic);
+ break;
+ default:
+ ieee80211_dbg(IEEE80211_MSG_AUTH, "80211_auth_shared: "
+ "shared key auth: bad seq %d", seq);
+ return;
+ }
+ break;
+
+ default:
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "ieee80211_auth_shared: bad opmode %u\n",
+ ic->ic_opmode);
+ break;
+ }
+ return;
+bad:
+ if (ic->ic_opmode == IEEE80211_M_STA) {
+ /*
+ * Kick the state machine. This short-circuits
+ * using the mgt frame timeout to trigger the
+ * state transition.
+ */
+ if (ic->ic_state == IEEE80211_S_AUTH) {
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, 0);
+ IEEE80211_LOCK(ic);
+ }
+ }
+}
+
+/*
+ * Process a beacon/probe response frame.
+ * When the device is in station mode, create a node and add it
+ * to the node database for a new ESS or update node info if it's
+ * already there.
+ */
+static void
+ieee80211_recv_beacon(ieee80211com_t *ic, mblk_t *mp, struct ieee80211_node *in,
+ int subtype, int rssi, uint32_t rstamp)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+ struct ieee80211_frame *wh;
+ uint8_t *frm;
+ uint8_t *efrm; /* end of frame body */
+ struct ieee80211_scanparams scan;
+
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ frm = (uint8_t *)&wh[1];
+ efrm = (uint8_t *)mp->b_wptr;
+
+ /*
+ * We process beacon/probe response frames:
+ * o when scanning, or
+ * o station mode when associated (to collect state
+ * updates such as 802.11g slot time), or
+ * o adhoc mode (to discover neighbors)
+ * Frames otherwise received are discarded.
+ */
+ if (!((ic->ic_flags & IEEE80211_F_SCAN) ||
+ (ic->ic_opmode == IEEE80211_M_STA && in->in_associd != 0) ||
+ ic->ic_opmode == IEEE80211_M_IBSS)) {
+ return;
+ }
+
+ /*
+ * beacon/probe response frame format
+ * [8] time stamp
+ * [2] beacon interval
+ * [2] capability information
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [tlv] country information
+ * [tlv] parameter set (FH/DS)
+ * [tlv] erp information
+ * [tlv] extended supported rates
+ * [tlv] WME
+ * [tlv] WPA or RSN
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm, IEEE80211_BEACON_ELEM_MIN, return);
+ bzero(&scan, sizeof (scan));
+ scan.tstamp = frm;
+ frm += 8;
+ scan.bintval = (*(uint16_t *)frm);
+ frm += 2;
+ scan.capinfo = (*(uint16_t *)frm);
+ frm += 2;
+ scan.bchan = ieee80211_chan2ieee(ic, ic->ic_curchan);
+ scan.chan = scan.bchan;
+
+ while (frm < efrm) {
+ /* Agere element in beacon */
+ if ((*frm == IEEE80211_ELEMID_AGERE1) ||
+ (*frm == IEEE80211_ELEMID_AGERE2)) {
+ frm = efrm;
+ break;
+ }
+
+ IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1], return);
+ switch (*frm) {
+ case IEEE80211_ELEMID_SSID:
+ scan.ssid = frm;
+ break;
+ case IEEE80211_ELEMID_RATES:
+ scan.rates = frm;
+ break;
+ case IEEE80211_ELEMID_COUNTRY:
+ scan.country = frm;
+ break;
+ case IEEE80211_ELEMID_FHPARMS:
+ if (ic->ic_phytype == IEEE80211_T_FH) {
+ scan.fhdwell = LE_16(*(uint16_t *)(frm + 2));
+ scan.chan = IEEE80211_FH_CHAN(frm[4], frm[5]);
+ scan.fhindex = frm[6];
+ scan.phytype = IEEE80211_T_FH;
+ }
+ break;
+ case IEEE80211_ELEMID_DSPARMS:
+ if (ic->ic_phytype != IEEE80211_T_FH) {
+ scan.chan = frm[2];
+ scan.phytype = IEEE80211_T_DS;
+ }
+ break;
+ case IEEE80211_ELEMID_TIM:
+ scan.tim = frm;
+ scan.timoff = frm - mp->b_rptr;
+ break;
+ case IEEE80211_ELEMID_IBSSPARMS:
+ break;
+ case IEEE80211_ELEMID_XRATES:
+ scan.xrates = frm;
+ break;
+ case IEEE80211_ELEMID_ERP:
+ if (frm[1] != 1) {
+ ieee80211_dbg(IEEE80211_MSG_ELEMID,
+ "ieee80211_recv_mgmt: ignore %s, "
+ "invalid ERP element; "
+ "length %u, expecting 1\n",
+ IEEE80211_SUBTYPE_NAME(subtype),
+ frm[1]);
+ break;
+ }
+ scan.erp = frm[2];
+ scan.phytype = IEEE80211_T_OFDM;
+ break;
+ case IEEE80211_ELEMID_RSN:
+ scan.wpa = frm;
+ break;
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ELEMID,
+ "ieee80211_recv_mgmt: ignore %s,"
+ "unhandled id %u, len %u, totallen %u",
+ IEEE80211_SUBTYPE_NAME(subtype),
+ *frm, frm[1],
+ mp->b_wptr - mp->b_rptr);
+ break;
+ }
+ /* frm[1] - component length */
+ frm += IEEE80211_ELEM_LEN(frm[1]);
+ }
+ IEEE80211_VERIFY_ELEMENT(scan.rates, IEEE80211_RATE_MAXSIZE, return);
+ IEEE80211_VERIFY_ELEMENT(scan.ssid, IEEE80211_NWID_LEN, return);
+ if (ieee80211_isclr(ic->ic_chan_active, scan.chan)) {
+ ieee80211_dbg(IEEE80211_MSG_ELEMID | IEEE80211_MSG_INPUT,
+ "ieee80211_recv_mgmt: ignore %s ,"
+ "invalid channel %u\n",
+ IEEE80211_SUBTYPE_NAME(subtype), scan.chan);
+ return;
+ }
+ if (scan.chan != scan.bchan &&
+ ic->ic_phytype != IEEE80211_T_FH) {
+ /*
+ * Frame was received on a channel different from the
+ * one indicated in the DS params element id;
+ * silently discard it.
+ *
+ * NB: this can happen due to signal leakage.
+ * But we should take it for FH phy because
+ * the rssi value should be correct even for
+ * different hop pattern in FH.
+ */
+ ieee80211_dbg(IEEE80211_MSG_ELEMID,
+ "ieee80211_recv_mgmt: ignore %s ,"
+ "phytype %u channel %u marked for %u\n",
+ IEEE80211_SUBTYPE_NAME(subtype),
+ ic->ic_phytype, scan.bchan, scan.chan);
+ return;
+ }
+ if (!(IEEE80211_BINTVAL_MIN <= scan.bintval &&
+ scan.bintval <= IEEE80211_BINTVAL_MAX)) {
+ ieee80211_dbg(IEEE80211_MSG_ELEMID | IEEE80211_MSG_INPUT,
+ "ieee80211_recv_mgmt: ignore %s ,"
+ "bogus beacon interval %u\n",
+ IEEE80211_SUBTYPE_NAME(subtype), scan.bintval);
+ return;
+ }
+
+ /*
+ * When operating in station mode, check for state updates.
+ * Be careful to ignore beacons received while doing a
+ * background scan. We consider only 11g/WMM stuff right now.
+ */
+ if (ic->ic_opmode == IEEE80211_M_STA &&
+ in->in_associd != 0 &&
+ (!(ic->ic_flags & IEEE80211_F_SCAN) ||
+ IEEE80211_ADDR_EQ(wh->i_addr2, in->in_bssid))) {
+ /* record tsf of last beacon */
+ bcopy(scan.tstamp, in->in_tstamp.data,
+ sizeof (in->in_tstamp));
+ /* count beacon frame for s/w bmiss handling */
+ im->im_swbmiss_count++;
+ im->im_bmiss_count = 0;
+
+ if ((in->in_capinfo ^ scan.capinfo) &
+ IEEE80211_CAPINFO_SHORT_SLOTTIME) {
+ ieee80211_dbg(IEEE80211_MSG_ASSOC,
+ "ieee80211_recv_mgmt: "
+ "[%s] cap change: before 0x%x, now 0x%x\n",
+ ieee80211_macaddr_sprintf(wh->i_addr2),
+ in->in_capinfo, scan.capinfo);
+ /*
+ * NB: we assume short preamble doesn't
+ * change dynamically
+ */
+ ieee80211_set_shortslottime(ic,
+ ic->ic_curmode == IEEE80211_MODE_11A ||
+ (scan.capinfo &
+ IEEE80211_CAPINFO_SHORT_SLOTTIME));
+ in->in_capinfo = scan.capinfo;
+ }
+
+ if (scan.tim != NULL) {
+ struct ieee80211_tim_ie *ie;
+
+ ie = (struct ieee80211_tim_ie *)scan.tim;
+ in->in_dtim_count = ie->tim_count;
+ in->in_dtim_period = ie->tim_period;
+ }
+ if (ic->ic_flags & IEEE80211_F_SCAN) {
+ ieee80211_add_scan(ic, &scan, wh, subtype, rssi,
+ rstamp);
+ }
+ return;
+ }
+ /*
+ * If scanning, just pass information to the scan module.
+ */
+ if (ic->ic_flags & IEEE80211_F_SCAN) {
+ ieee80211_add_scan(ic, &scan, wh, subtype, rssi, rstamp);
+ return;
+ }
+
+ if (scan.capinfo & IEEE80211_CAPINFO_IBSS) {
+ if (!IEEE80211_ADDR_EQ(wh->i_addr2, in->in_macaddr)) {
+ /*
+ * Create a new entry in the neighbor table.
+ */
+ in = ieee80211_add_neighbor(ic, wh, &scan);
+ } else if (in->in_capinfo == 0) {
+ /*
+ * Update faked node created on transmit.
+ * Note this also updates the tsf.
+ */
+ ieee80211_init_neighbor(in, wh, &scan);
+ } else {
+ /*
+ * Record tsf for potential resync.
+ */
+ bcopy(scan.tstamp, in->in_tstamp.data,
+ sizeof (in->in_tstamp));
+ }
+ if (in != NULL) {
+ in->in_rssi = (uint8_t)rssi;
+ in->in_rstamp = rstamp;
+ }
+ }
+}
+
+/*
+ * Perform input processing for 802.11 management frames.
+ * It's the default ic_recv_mgmt callback function for the interface
+ * softc, ic. Tipically ic_recv_mgmt is called within ieee80211_input()
+ */
+void
+ieee80211_recv_mgmt(ieee80211com_t *ic, mblk_t *mp, struct ieee80211_node *in,
+ int subtype, int rssi, uint32_t rstamp)
+{
+ struct ieee80211_frame *wh;
+ uint8_t *frm; /* pointer to start of the frame */
+ uint8_t *efrm; /* pointer to end of the frame */
+ uint8_t *ssid;
+ uint8_t *rates;
+ uint8_t *xrates; /* extended rates */
+ boolean_t allocbs = B_FALSE;
+ uint8_t rate;
+ uint16_t algo; /* authentication algorithm */
+ uint16_t seq; /* sequence no */
+ uint16_t status;
+ uint16_t capinfo;
+ uint16_t associd; /* association ID */
+
+ IEEE80211_LOCK(ic);
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ frm = (uint8_t *)&wh[1];
+ efrm = (uint8_t *)mp->b_wptr;
+ switch (subtype) {
+ case IEEE80211_FC0_SUBTYPE_PROBE_RESP:
+ case IEEE80211_FC0_SUBTYPE_BEACON:
+ ieee80211_recv_beacon(ic, mp, in, subtype, rssi, rstamp);
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_PROBE_REQ:
+ if (ic->ic_opmode == IEEE80211_M_STA ||
+ ic->ic_state != IEEE80211_S_RUN ||
+ IEEE80211_IS_MULTICAST(wh->i_addr2)) {
+ break;
+ }
+
+ /*
+ * prreq frame format
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [tlv] extended supported rates
+ */
+ ssid = rates = xrates = NULL;
+ while (frm < efrm) {
+ IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1], goto out);
+ switch (*frm) {
+ case IEEE80211_ELEMID_SSID:
+ ssid = frm;
+ break;
+ case IEEE80211_ELEMID_RATES:
+ rates = frm;
+ break;
+ case IEEE80211_ELEMID_XRATES:
+ xrates = frm;
+ break;
+ }
+ frm += frm[1] + 2;
+ }
+ IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_MAXSIZE, break);
+ IEEE80211_VERIFY_ELEMENT(ssid, IEEE80211_NWID_LEN, break);
+ IEEE80211_VERIFY_SSID(ic->ic_bss, ssid, break);
+ if ((ic->ic_flags & IEEE80211_F_HIDESSID) && ssid[1] == 0) {
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_recv_mgmt: ignore %s, "
+ "no ssid with ssid suppression enabled",
+ IEEE80211_SUBTYPE_NAME(subtype));
+ break;
+ }
+
+ if (in == ic->ic_bss) {
+ if (ic->ic_opmode != IEEE80211_M_IBSS) {
+ in = ieee80211_tmp_node(ic, wh->i_addr2);
+ allocbs = B_TRUE;
+ } else if (!IEEE80211_ADDR_EQ(wh->i_addr2,
+ in->in_macaddr)) {
+ /*
+ * Cannot tell if the sender is operating
+ * in ibss mode. But we need a new node to
+ * send the response so blindly add them to the
+ * neighbor table.
+ */
+ in = ieee80211_fakeup_adhoc_node(&ic->ic_sta,
+ wh->i_addr2);
+ }
+ if (in == NULL)
+ break;
+ }
+ ieee80211_dbg(IEEE80211_MSG_ASSOC, "ieee80211_recv_mgmt: "
+ "[%s] recv probe req\n",
+ ieee80211_macaddr_sprintf(wh->i_addr2));
+ in->in_rssi = (uint8_t)rssi;
+ in->in_rstamp = rstamp;
+ /*
+ * Adjust and check station's rate list with device's
+ * supported rate. Send back response if there is at
+ * least one rate or the fixed rate(if being set) is
+ * supported by both station and the device
+ */
+ rate = ieee80211_setup_rates(in, rates, xrates,
+ IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE |
+ IEEE80211_F_DONEGO | IEEE80211_F_DODEL);
+ if (rate & IEEE80211_RATE_BASIC) {
+ ieee80211_dbg(IEEE80211_MSG_XRATE, "ieee80211_recv_mgmt"
+ "%s recv'd rate set invalid",
+ IEEE80211_SUBTYPE_NAME(subtype));
+ } else {
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_PROBE_RESP, 0);
+ IEEE80211_LOCK(ic);
+ }
+ if (allocbs) {
+ /*
+ * Temporary node created just to send a
+ * response, reclaim immediately.
+ */
+ ieee80211_free_node(in);
+ }
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_AUTH:
+ /*
+ * auth frame format
+ * [2] algorithm
+ * [2] sequence
+ * [2] status
+ * [tlv*] challenge
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm, IEEE80211_AUTH_ELEM_MIN,
+ break);
+ algo = (*(uint16_t *)frm);
+ seq = (*(uint16_t *)(frm + 2));
+ status = (*(uint16_t *)(frm + 4));
+ ieee80211_dbg(IEEE80211_MSG_AUTH, "ieee80211_recv_mgmt: "
+ "[%s] recv auth frame with algorithm %d seq %d\n",
+ ieee80211_macaddr_sprintf(wh->i_addr2), algo, seq);
+
+ if (ic->ic_flags & IEEE80211_F_COUNTERM) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH | IEEE80211_MSG_CRYPTO,
+ "ieee80211_recv_mgmt: ignore auth, %s\n",
+ "TKIP countermeasures enabled");
+ break;
+ }
+ switch (algo) {
+ case IEEE80211_AUTH_ALG_SHARED:
+ ieee80211_auth_shared(ic, wh, frm + 6, efrm, in,
+ seq, status);
+ break;
+ case IEEE80211_AUTH_ALG_OPEN:
+ ieee80211_auth_open(ic, wh, in, seq, status);
+ break;
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_recv_mgmt: "
+ "ignore auth, unsupported alg %d", algo);
+ break;
+ }
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_ASSOC_RESP:
+ case IEEE80211_FC0_SUBTYPE_REASSOC_RESP:
+ if (ic->ic_opmode != IEEE80211_M_STA ||
+ ic->ic_state != IEEE80211_S_ASSOC)
+ break;
+
+ /*
+ * asresp frame format
+ * [2] capability information
+ * [2] status
+ * [2] association ID
+ * [tlv] supported rates
+ * [tlv] extended supported rates
+ * [tlv] WME
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm,
+ IEEE80211_ASSOC_RESP_ELEM_MIN, break);
+ in = ic->ic_bss;
+ capinfo = (*(uint16_t *)frm);
+ frm += 2;
+ status = (*(uint16_t *)frm);
+ frm += 2;
+ if (status != 0) {
+ ieee80211_dbg(IEEE80211_MSG_ASSOC,
+ "assoc failed (reason %d)\n", status);
+ in = ieee80211_find_node(&ic->ic_scan, wh->i_addr2);
+ if (in != NULL) {
+ in->in_fails++;
+ ieee80211_free_node(in);
+ }
+ break;
+ }
+ associd = (*(uint16_t *)frm);
+ frm += 2;
+
+ rates = xrates = NULL;
+ while (frm < efrm) {
+ /*
+ * Do not discard frames containing proprietary Agere
+ * elements 128 and 129, as the reported element length
+ * is often wrong. Skip rest of the frame, since we can
+ * not rely on the given element length making it
+ * impossible to know where the next element starts
+ */
+ if ((*frm == IEEE80211_ELEMID_AGERE1) ||
+ (*frm == IEEE80211_ELEMID_AGERE2)) {
+ frm = efrm;
+ break;
+ }
+
+ IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1], goto out);
+ switch (*frm) {
+ case IEEE80211_ELEMID_RATES:
+ rates = frm;
+ break;
+ case IEEE80211_ELEMID_XRATES:
+ xrates = frm;
+ break;
+ }
+ frm += frm[1] + 2;
+ }
+
+ IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_MAXSIZE, break);
+ /*
+ * Adjust and check AP's rate list with device's
+ * supported rate. Re-start scan if no rate is or the
+ * fixed rate(if being set) cannot be supported by
+ * either AP or the device.
+ */
+ rate = ieee80211_setup_rates(in, rates, xrates,
+ IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE |
+ IEEE80211_F_DONEGO | IEEE80211_F_DODEL);
+ if (rate & IEEE80211_RATE_BASIC) {
+ ieee80211_dbg(IEEE80211_MSG_ASSOC,
+ "assoc failed (rate set mismatch)\n");
+ if (in != ic->ic_bss)
+ in->in_fails++;
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, 0);
+ return;
+ }
+
+ in->in_capinfo = capinfo;
+ in->in_associd = associd;
+ in->in_flags &= ~IEEE80211_NODE_QOS;
+ /*
+ * Configure state now that we are associated.
+ */
+ if (ic->ic_curmode == IEEE80211_MODE_11A ||
+ (in->in_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE)) {
+ ic->ic_flags |= IEEE80211_F_SHPREAMBLE;
+ ic->ic_flags &= ~IEEE80211_F_USEBARKER;
+ } else {
+ ic->ic_flags &= ~IEEE80211_F_SHPREAMBLE;
+ ic->ic_flags |= IEEE80211_F_USEBARKER;
+ }
+ ieee80211_set_shortslottime(ic,
+ ic->ic_curmode == IEEE80211_MODE_11A ||
+ (in->in_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME));
+ /*
+ * Honor ERP protection.
+ *
+ * NB: in_erp should zero for non-11g operation.
+ * check ic_curmode anyway
+ */
+ if (ic->ic_curmode == IEEE80211_MODE_11G &&
+ (in->in_erp & IEEE80211_ERP_USE_PROTECTION))
+ ic->ic_flags |= IEEE80211_F_USEPROT;
+ else
+ ic->ic_flags &= ~IEEE80211_F_USEPROT;
+ ieee80211_dbg(IEEE80211_MSG_ASSOC,
+ "assoc success: %s preamble, %s slot time%s%s\n",
+ ic->ic_flags&IEEE80211_F_SHPREAMBLE ? "short" : "long",
+ ic->ic_flags&IEEE80211_F_SHSLOT ? "short" : "long",
+ ic->ic_flags&IEEE80211_F_USEPROT ? ", protection" : "",
+ in->in_flags & IEEE80211_NODE_QOS ? ", QoS" : "");
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_RUN, subtype);
+ return;
+
+ case IEEE80211_FC0_SUBTYPE_DEAUTH:
+ if (ic->ic_state == IEEE80211_S_SCAN)
+ break;
+
+ /*
+ * deauth frame format
+ * [2] reason
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm, 2, break);
+ status = (*(uint16_t *)frm);
+
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "recv deauthenticate (reason %d)\n", status);
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_AUTH,
+ wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
+ return;
+ default:
+ break;
+ }
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_DISASSOC:
+ if (ic->ic_state != IEEE80211_S_RUN &&
+ ic->ic_state != IEEE80211_S_ASSOC &&
+ ic->ic_state != IEEE80211_S_AUTH)
+ break;
+ /*
+ * disassoc frame format
+ * [2] reason
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm, 2, break);
+ status = (*(uint16_t *)frm);
+
+ ieee80211_dbg(IEEE80211_MSG_ASSOC,
+ "recv disassociate (reason %d)\n", status);
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_ASSOC,
+ wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
+ return;
+ default:
+ break;
+ }
+ break;
+
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_recv_mgmt: "
+ "subtype 0x%x not handled\n", subtype);
+ break;
+ } /* switch subtype */
+out:
+ IEEE80211_UNLOCK(ic);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_ioctl.c b/usr/src/uts/common/io/net80211/net80211_ioctl.c
new file mode 100644
index 0000000000..3701baa6f7
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_ioctl.c
@@ -0,0 +1,1359 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/errno.h>
+#include <sys/strsun.h>
+#include <sys/policy.h>
+#include <inet/common.h>
+#include <inet/nd.h>
+#include <inet/mi.h>
+#include <sys/note.h>
+#include <sys/mac.h>
+#include <inet/wifi_ioctl.h>
+#include "net80211_impl.h"
+
+static size_t
+wifi_strnlen(const char *s, size_t n)
+{
+ size_t i;
+
+ for (i = 0; i < n && s[i] != '\0'; i++)
+ /* noop */;
+ return (i);
+}
+
+/*
+ * Initialize an output message block by copying from an
+ * input message block. The message is of type wldp_t.
+ * mp input message block
+ * buflen length of wldp_buf
+ */
+static void
+wifi_setupoutmsg(mblk_t *mp, int buflen)
+{
+ wldp_t *wp;
+
+ wp = (wldp_t *)mp->b_rptr;
+ wp->wldp_length = WIFI_BUF_OFFSET + buflen;
+ wp->wldp_result = WL_SUCCESS;
+ mp->b_wptr = mp->b_rptr + wp->wldp_length;
+}
+
+/*
+ * Allocate and initialize an output message.
+ */
+static mblk_t *
+wifi_getoutmsg(mblk_t *mp, uint32_t cmd, int buflen)
+{
+ mblk_t *mp1;
+ int size;
+
+ size = WIFI_BUF_OFFSET;
+ if (cmd == WLAN_GET_PARAM)
+ size += buflen; /* to hold output parameters */
+ mp1 = allocb(size, BPRI_HI);
+ if (mp1 == NULL) {
+ ieee80211_err("wifi_getoutbuf: allocb %d bytes failed!\n",
+ size);
+ return (NULL);
+ }
+
+ bzero(mp1->b_rptr, size);
+ bcopy(mp->b_rptr, mp1->b_rptr, WIFI_BUF_OFFSET);
+ wifi_setupoutmsg(mp1, size - WIFI_BUF_OFFSET);
+
+ return (mp1);
+}
+
+static int
+wifi_cfg_essid(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_essid_t *iw_essid = (wl_essid_t *)inp->wldp_buf;
+ wl_essid_t *ow_essid;
+ char *essid;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_essid_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_essid = (wl_essid_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ essid = (char *)ic->ic_des_essid;
+ if (essid[0] == '\0')
+ essid = (char *)ic->ic_bss->in_essid;
+ ow_essid->wl_essid_length = wifi_strnlen((const char *)essid,
+ IEEE80211_NWID_LEN);
+ bcopy(essid, ow_essid->wl_essid_essid,
+ ow_essid->wl_essid_length);
+ break;
+ case WLAN_SET_PARAM:
+ if (iw_essid->wl_essid_length > IEEE80211_NWID_LEN) {
+ ieee80211_err("wifi_cfg_essid: "
+ "essid too long, %u, max %u\n",
+ iw_essid->wl_essid_length, IEEE80211_NWID_LEN);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+ essid = iw_essid->wl_essid_essid;
+ essid[IEEE80211_NWID_LEN] = 0;
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_essid: "
+ "set essid=%s length=%d\n",
+ essid, iw_essid->wl_essid_length);
+
+ ic->ic_des_esslen = iw_essid->wl_essid_length;
+ if (ic->ic_des_esslen != 0)
+ bcopy(essid, ic->ic_des_essid, ic->ic_des_esslen);
+ if (ic->ic_des_esslen < IEEE80211_NWID_LEN)
+ ic->ic_des_essid[ic->ic_des_esslen] = 0;
+ err = ENETRESET;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_essid: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_bssid(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ uint8_t *bssid;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_bssid_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ if (ic->ic_flags & IEEE80211_F_DESBSSID)
+ bssid = ic->ic_des_bssid;
+ else
+ bssid = ic->ic_bss->in_bssid;
+ bcopy(bssid, outp->wldp_buf, sizeof (wl_bssid_t));
+ break;
+ case WLAN_SET_PARAM:
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_bssid: "
+ "set bssid=%s\n",
+ ieee80211_macaddr_sprintf(inp->wldp_buf));
+ bcopy(inp->wldp_buf, ic->ic_des_bssid, sizeof (wl_bssid_t));
+ ic->ic_flags |= IEEE80211_F_DESBSSID;
+ err = ENETRESET;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_bssid: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_nodename(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_nodename_t *iw_name = (wl_nodename_t *)inp->wldp_buf;
+ wl_nodename_t *ow_name;
+ char *nodename;
+ int len, err;
+
+ err = 0;
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_nodename_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_name = (wl_nodename_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ len = wifi_strnlen((const char *)ic->ic_nickname,
+ IEEE80211_NWID_LEN);
+ ow_name->wl_nodename_length = len;
+ bcopy(ic->ic_nickname, ow_name->wl_nodename_name, len);
+ break;
+ case WLAN_SET_PARAM:
+ if (iw_name->wl_nodename_length > IEEE80211_NWID_LEN) {
+ ieee80211_err("wifi_cfg_nodename: "
+ "node name too long, %u\n",
+ iw_name->wl_nodename_length);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+ nodename = iw_name->wl_nodename_name;
+ nodename[IEEE80211_NWID_LEN] = 0;
+ ieee80211_dbg(IEEE80211_MSG_CONFIG,
+ "wifi_cfg_nodename: set nodename %s, len=%d\n",
+ nodename, iw_name->wl_nodename_length);
+
+ len = iw_name->wl_nodename_length;
+ if (len > 0)
+ bcopy(nodename, ic->ic_nickname, len);
+ if (len < IEEE80211_NWID_LEN)
+ ic->ic_nickname[len] = 0;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_nodename: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_phy(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_phy_conf_t *iw_phy = (wl_phy_conf_t *)inp->wldp_buf;
+ wl_phy_conf_t *ow_phy;
+ struct ieee80211_channel *ch = ic->ic_curchan;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_phy_conf_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_phy = (wl_phy_conf_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM: {
+ /* get current physical (FH, DS, ERP) parameters */
+ if (IEEE80211_IS_CHAN_A(ch) || IEEE80211_IS_CHAN_T(ch)) {
+ wl_ofdm_t *ofdm = (wl_ofdm_t *)ow_phy;
+
+ ofdm->wl_ofdm_subtype = WL_OFDM;
+ ofdm->wl_ofdm_frequency = ch->ich_freq;
+ } else {
+ switch (ic->ic_phytype) {
+ case IEEE80211_T_FH: {
+ wl_fhss_t *fhss = (wl_fhss_t *)ow_phy;
+
+ fhss->wl_fhss_subtype = WL_FHSS;
+ fhss->wl_fhss_channel =
+ ieee80211_chan2ieee(ic, ch);
+ break;
+ }
+ case IEEE80211_T_DS: {
+ wl_dsss_t *dsss = (wl_dsss_t *)ow_phy;
+
+ dsss->wl_dsss_subtype = WL_DSSS;
+ dsss->wl_dsss_channel =
+ ieee80211_chan2ieee(ic, ch);
+ break;
+ }
+ case IEEE80211_T_OFDM: {
+ wl_erp_t *erp = (wl_erp_t *)ow_phy;
+
+ erp->wl_erp_subtype = WL_ERP;
+ erp->wl_erp_channel =
+ ieee80211_chan2ieee(ic, ch);
+ break;
+ }
+ default:
+ ieee80211_err("wifi_cfg_phy: "
+ "unknown phy type, %x\n", ic->ic_phytype);
+ outp->wldp_result = WL_HW_ERROR;
+ err = EIO;
+ break;
+ } /* switch (ic->ic_phytype) */
+ }
+ break;
+ }
+
+ case WLAN_SET_PARAM: {
+ wl_dsss_t *dsss = (wl_dsss_t *)iw_phy;
+ int16_t ch = dsss->wl_dsss_channel;
+
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_phy: "
+ "set channel=%d\n", ch);
+ if (ch == 0 || ch == (int16_t)IEEE80211_CHAN_ANY) {
+ ic->ic_des_chan = IEEE80211_CHAN_ANYC;
+ } else if ((uint_t)ch > IEEE80211_CHAN_MAX ||
+ ieee80211_isclr(ic->ic_chan_active, ch)) {
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ } else {
+ ic->ic_des_chan = ic->ic_ibss_chan =
+ &ic->ic_sup_channels[ch];
+ }
+ switch (ic->ic_state) {
+ case IEEE80211_S_INIT:
+ case IEEE80211_S_SCAN:
+ err = ENETRESET;
+ break;
+ default:
+ /*
+ * If the desired channel has changed (to something
+ * other than any) and we're not already scanning,
+ * then kick the state machine.
+ */
+ if (ic->ic_des_chan != IEEE80211_CHAN_ANYC &&
+ ic->ic_bss->in_chan != ic->ic_des_chan &&
+ (ic->ic_flags & IEEE80211_F_SCAN) == 0)
+ err = ENETRESET;
+ break;
+ }
+ break;
+ }
+
+ default:
+ ieee80211_err("wifi_cfg_phy: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ } /* switch (cmd) */
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_wepkey(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_wep_key_t *iw_wepkey = (wl_wep_key_t *)inp->wldp_buf;
+ struct ieee80211_key *k;
+ uint16_t i;
+ uint32_t klen;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, 0)) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ outp->wldp_result = WL_WRITEONLY;
+ err = EINVAL;
+ break;
+ case WLAN_SET_PARAM:
+ if (inp->wldp_length < sizeof (wl_wep_key_tab_t)) {
+ ieee80211_err("wifi_cfg_wepkey: "
+ "parameter too short, %d, expected %d\n",
+ inp->wldp_length, sizeof (wl_wep_key_tab_t));
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ /* set all valid keys */
+ for (i = 0; i < MAX_NWEPKEYS; i++) {
+ if (iw_wepkey[i].wl_wep_operation != WL_ADD)
+ continue;
+ klen = iw_wepkey[i].wl_wep_length;
+ if (klen > IEEE80211_KEYBUF_SIZE) {
+ ieee80211_err("wifi_cfg_wepkey: "
+ "invalid wepkey length, %u\n", klen);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ continue; /* continue to set other keys */
+ }
+ if (klen == 0)
+ continue;
+
+ /*
+ * Set key contents. Only WEP is supported
+ */
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_wepkey: "
+ "set key %u, len=%u\n", i, klen);
+ k = &ic->ic_nw_keys[i];
+ if (ieee80211_crypto_newkey(ic, IEEE80211_CIPHER_WEP,
+ IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV, k) == 0) {
+ ieee80211_err("wifi_cfg_wepkey: "
+ "abort, create key failed. id=%u\n", i);
+ outp->wldp_result = WL_HW_ERROR;
+ err = EIO;
+ continue;
+ }
+ k->wk_keyix = i;
+ k->wk_keylen = (uint8_t)klen;
+ k->wk_flags |= IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
+ bzero(k->wk_key, IEEE80211_KEYBUF_SIZE);
+ bcopy(iw_wepkey[i].wl_wep_key, k->wk_key, klen);
+ if (ieee80211_crypto_setkey(ic, k, ic->ic_macaddr)
+ == 0) {
+ ieee80211_err("wifi_cfg_wepkey: "
+ "set key failed len=%u\n", klen);
+ outp->wldp_result = WL_HW_ERROR;
+ err = EIO;
+ }
+ }
+ if (err == 0)
+ err = ENETRESET;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_wepkey: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_keyid(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_wep_key_id_t *iw_kid = (wl_wep_key_id_t *)inp->wldp_buf;
+ wl_wep_key_id_t *ow_kid;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_wep_key_id_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_kid = (wl_wep_key_id_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ *ow_kid = (ic->ic_def_txkey == IEEE80211_KEYIX_NONE) ?
+ 0 : ic->ic_def_txkey;
+ break;
+ case WLAN_SET_PARAM:
+ if (*iw_kid >= MAX_NWEPKEYS) {
+ ieee80211_err("wifi_cfg_keyid: "
+ "keyid too large, %u\n", *iw_kid);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ } else {
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_keyid: "
+ "set keyid=%u\n", *iw_kid);
+ ic->ic_def_txkey = *iw_kid;
+ err = ENETRESET;
+ }
+ break;
+ default:
+ ieee80211_err("wifi_cfg_keyid: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_authmode(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_authmode_t *iw_auth = (wl_authmode_t *)inp->wldp_buf;
+ wl_authmode_t *ow_auth;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_authmode_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_auth = (wl_authmode_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ *ow_auth = ic->ic_bss->in_authmode;
+ break;
+ case WLAN_SET_PARAM:
+ if (*iw_auth == ic->ic_bss->in_authmode)
+ break;
+
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_authmode: "
+ "set authmode=%u\n", *iw_auth);
+ switch (*iw_auth) {
+ case WL_OPENSYSTEM:
+ case WL_SHAREDKEY:
+ ic->ic_bss->in_authmode = *iw_auth;
+ err = ENETRESET;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_authmode: "
+ "unknown authmode %u\n", *iw_auth);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+ break;
+ default:
+ ieee80211_err("wifi_cfg_authmode: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_encrypt(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_encryption_t *iw_encryp = (wl_encryption_t *)inp->wldp_buf;
+ wl_encryption_t *ow_encryp;
+ uint32_t flags;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_encryption_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_encryp = (wl_encryption_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ *ow_encryp = (ic->ic_flags & IEEE80211_F_PRIVACY) ? 1 : 0;
+ break;
+ case WLAN_SET_PARAM:
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_encrypt: "
+ "set encryption=%u\n", *iw_encryp);
+ flags = ic->ic_flags;
+ if (*iw_encryp == WL_NOENCRYPTION)
+ flags &= ~IEEE80211_F_PRIVACY;
+ else
+ flags |= IEEE80211_F_PRIVACY;
+
+ if (ic->ic_flags != flags) {
+ ic->ic_flags = flags;
+ err = ENETRESET;
+ }
+ break;
+ default:
+ ieee80211_err("wifi_cfg_encrypt: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_bsstype(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_bss_type_t *iw_opmode = (wl_bss_type_t *)inp->wldp_buf;
+ wl_bss_type_t *ow_opmode;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_bss_type_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_opmode = (wl_bss_type_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ *ow_opmode = WL_BSS_BSS;
+ break;
+ case IEEE80211_M_IBSS:
+ *ow_opmode = WL_BSS_IBSS;
+ break;
+ default:
+ *ow_opmode = WL_BSS_ANY;
+ break;
+ }
+ break;
+ case WLAN_SET_PARAM:
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_bsstype: "
+ "set bsstype=%u\n", *iw_opmode);
+ switch (*iw_opmode) {
+ case WL_BSS_BSS:
+ ic->ic_flags &= ~IEEE80211_F_IBSSON;
+ ic->ic_opmode = IEEE80211_M_STA;
+ err = ENETRESET;
+ break;
+ case WL_BSS_IBSS:
+ if ((ic->ic_caps & IEEE80211_C_IBSS) == 0) {
+ outp->wldp_result = WL_LACK_FEATURE;
+ err = ENOTSUP;
+ break;
+ }
+
+ if ((ic->ic_flags & IEEE80211_F_IBSSON) == 0) {
+ ic->ic_flags |= IEEE80211_F_IBSSON;
+ ic->ic_opmode = IEEE80211_M_IBSS;
+ err = ENETRESET;
+ }
+ break;
+ default:
+ ieee80211_err("wifi_cfg_bsstype: "
+ "unknown opmode %u\n", *iw_opmode);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+ break;
+ default:
+ ieee80211_err("wifi_cfg_bsstype: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_linkstatus(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *outp;
+ wl_linkstatus_t *ow_linkstat;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_linkstatus_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_linkstat = (wl_linkstatus_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ *ow_linkstat = (ic->ic_state == IEEE80211_S_RUN) ?
+ WL_CONNECTED : WL_NOTCONNECTED;
+ break;
+ case WLAN_SET_PARAM:
+ outp->wldp_result = WL_READONLY;
+ err = EINVAL;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_linkstatus: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_suprates(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *outp;
+ wl_rates_t *ow_rates;
+ const struct ieee80211_rateset *srs;
+ uint8_t srates, *drates;
+ int err, buflen, i, j, k, l;
+
+ err = 0;
+ /* rate value (wl_rates_rates) is of type char */
+ buflen = offsetof(wl_rates_t, wl_rates_rates) +
+ sizeof (char) * IEEE80211_MODE_MAX * IEEE80211_RATE_MAXSIZE;
+ if ((omp = wifi_getoutmsg(*mp, cmd, buflen)) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_rates = (wl_rates_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ /* all rates supported by the device */
+ ow_rates->wl_rates_num = 0;
+ drates = (uint8_t *)ow_rates->wl_rates_rates;
+ for (i = 0; i < IEEE80211_MODE_MAX; i++) {
+ srs = &ic->ic_sup_rates[i];
+ if (srs->ir_nrates == 0)
+ continue;
+
+ for (j = 0; j < srs->ir_nrates; j++) {
+ srates = IEEE80211_RV(srs->ir_rates[j]);
+ /* sort and skip duplicated rates */
+ for (k = 0; k < ow_rates->wl_rates_num; k++) {
+ if (srates <= drates[k])
+ break;
+ }
+ if (srates == drates[k])
+ continue; /* duplicate, skip */
+ /* sort */
+ for (l = ow_rates->wl_rates_num; l > k; l--)
+ drates[l] = drates[l-1];
+ drates[k] = srates;
+ ow_rates->wl_rates_num++;
+ }
+ }
+ break;
+ case WLAN_SET_PARAM:
+ outp->wldp_result = WL_READONLY;
+ err = EINVAL;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_suprates: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_desrates(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wl_rates_t *iw_rates = (wl_rates_t *)inp->wldp_buf;
+ mblk_t *omp;
+ wldp_t *outp;
+ wl_rates_t *ow_rates;
+ struct ieee80211_node *in = ic->ic_bss;
+ struct ieee80211_rateset *rs = &in->in_rates;
+ uint8_t drate, srate;
+ int err, i, j;
+ boolean_t found;
+
+ err = 0;
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_rates_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_rates = (wl_rates_t *)outp->wldp_buf;
+
+ srate = rs->ir_rates[in->in_txrate] & IEEE80211_RATE_VAL;
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ ow_rates->wl_rates_num = 1;
+ ow_rates->wl_rates_rates[0] =
+ (ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE) ?
+ srate : ic->ic_fixed_rate;
+ break;
+ case WLAN_SET_PARAM:
+ drate = iw_rates->wl_rates_rates[0];
+ if (ic->ic_fixed_rate == drate)
+ break;
+
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_desrates: "
+ "set desired rate=%u\n", drate);
+
+ if (drate == 0) { /* reset */
+ ic->ic_fixed_rate = IEEE80211_FIXED_RATE_NONE;
+ if (ic->ic_state == IEEE80211_S_RUN) {
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_ASSOC, 0);
+ IEEE80211_LOCK(ic);
+ }
+ break;
+ }
+
+ /*
+ * Set desired rate. the desired rate is for data transfer
+ * and usually is checked and used when driver changes to
+ * RUN state.
+ * If the driver is in AUTH | ASSOC | RUN state, desired
+ * rate is checked against rates supported by current ESS.
+ * If it's supported and current state is AUTH|ASSOC, nothing
+ * needs to be doen by driver since the desired rate will
+ * be enabled when the device changes to RUN state. And
+ * when current state is RUN, Re-associate with the ESS to
+ * enable the desired rate.
+ */
+ if (ic->ic_state != IEEE80211_S_INIT &&
+ ic->ic_state != IEEE80211_S_SCAN) {
+ /* check if the rate is supported by current ESS */
+ for (i = 0; i < rs->ir_nrates; i++) {
+ if (drate == IEEE80211_RV(rs->ir_rates[i]))
+ break;
+ }
+ if (i < rs->ir_nrates) { /* supported */
+ ic->ic_fixed_rate = drate;
+ if (ic->ic_state == IEEE80211_S_RUN) {
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic,
+ IEEE80211_S_ASSOC, 0);
+ IEEE80211_LOCK(ic);
+ }
+ break;
+ }
+ }
+
+ /* check the rate is supported by device */
+ found = B_FALSE;
+ for (i = 0; i < IEEE80211_MODE_MAX; i++) {
+ rs = &ic->ic_sup_rates[i];
+ for (j = 0; j < rs->ir_nrates; j++) {
+ if (drate == IEEE80211_RV(rs->ir_rates[j])) {
+ found = B_TRUE;
+ break;
+ }
+ }
+ if (found)
+ break;
+ }
+ if (!found) {
+ ieee80211_err("wifi_cfg_desrates: "
+ "invalid rate %d\n", drate);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+ ic->ic_fixed_rate = drate;
+ if (ic->ic_state != IEEE80211_S_SCAN)
+ err = ENETRESET; /* restart */
+ break;
+ default:
+ ieee80211_err("wifi_cfg_desrates: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+/*
+ * Rescale device's RSSI value to (0, 15) as required by WiFi
+ * driver IOCTLs (PSARC/2003/722)
+ */
+static wl_rssi_t
+wifi_getrssi(struct ieee80211_node *in)
+{
+ struct ieee80211com *ic = in->in_ic;
+ wl_rssi_t rssi, max_rssi;
+
+ rssi = ic->ic_node_getrssi(in);
+ max_rssi = (ic->ic_maxrssi == 0) ? IEEE80211_MAXRSSI : ic->ic_maxrssi;
+ if (rssi == 0)
+ rssi = 0;
+ else if (rssi >= max_rssi)
+ rssi = MAX_RSSI;
+ else
+ rssi = rssi * MAX_RSSI / max_rssi + 1;
+
+ return (rssi);
+}
+
+static int
+wifi_cfg_rssi(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *outp;
+ wl_rssi_t *ow_rssi;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_rssi_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_rssi = (wl_rssi_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ *ow_rssi = wifi_getrssi(ic->ic_bss);
+ break;
+ case WLAN_SET_PARAM:
+ outp->wldp_result = WL_READONLY;
+ err = EINVAL;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_rssi: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ return (EINVAL);
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+/*
+ * maximum scan wait time in second.
+ * Time spent on scaning one channel is usually 100~200ms. The maximum
+ * number of channels defined in wifi_ioctl.h is 99 (MAX_CHANNEL_NUM).
+ * As a result the maximum total scan time is defined as below in ms.
+ */
+#define WAIT_SCAN_MAX (200 * MAX_CHANNEL_NUM)
+
+static void
+wifi_wait_scan(struct ieee80211com *ic)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+
+ while ((ic->ic_flags & (IEEE80211_F_SCAN | IEEE80211_F_ASCAN)) != 0) {
+ if (cv_timedwait_sig(&im->im_scan_cv, &ic->ic_genlock,
+ ddi_get_lbolt() + drv_usectohz(WAIT_SCAN_MAX * 1000)) !=
+ 0) {
+ break;
+ }
+ }
+}
+
+#define WIFI_HAVE_CAP(in, flag) (((in)->in_capinfo & (flag)) ? 1 : 0)
+
+/*
+ * Callback function used by ieee80211_iterate_nodes() in
+ * wifi_cfg_esslist() to get info of each node in a node table
+ * arg output buffer, pointer to wl_ess_list_t
+ * in each node in the node table
+ */
+static void
+wifi_read_ap(void *arg, struct ieee80211_node *in)
+{
+ wl_ess_list_t *aps = arg;
+ ieee80211com_t *ic = in->in_ic;
+ struct ieee80211_channel *chan = in->in_chan;
+ struct ieee80211_rateset *rates = &(in->in_rates);
+ wl_ess_conf_t *conf;
+ uint8_t *end;
+ uint_t i, nrates;
+
+ end = (uint8_t *)aps - WIFI_BUF_OFFSET + MAX_BUF_LEN -
+ sizeof (wl_ess_list_t);
+ conf = &aps->wl_ess_list_ess[aps->wl_ess_list_num];
+ if ((uint8_t *)conf > end)
+ return;
+
+ /* skip newly allocated NULL bss node */
+ if (IEEE80211_ADDR_EQ(in->in_macaddr, ic->ic_macaddr))
+ return;
+
+ conf->wl_ess_conf_essid.wl_essid_length = in->in_esslen;
+ bcopy(in->in_essid, conf->wl_ess_conf_essid.wl_essid_essid,
+ in->in_esslen);
+ bcopy(in->in_bssid, conf->wl_ess_conf_bssid, IEEE80211_ADDR_LEN);
+ conf->wl_ess_conf_wepenabled =
+ (in->in_capinfo & IEEE80211_CAPINFO_PRIVACY ?
+ WL_ENC_WEP : WL_NOENCRYPTION);
+ conf->wl_ess_conf_bsstype =
+ (in->in_capinfo & IEEE80211_CAPINFO_ESS ?
+ WL_BSS_BSS : WL_BSS_IBSS);
+ conf->wl_ess_conf_sl = wifi_getrssi(in);
+
+ /* physical (FH, DS, ERP) parameters */
+ if (IEEE80211_IS_CHAN_A(chan) || IEEE80211_IS_CHAN_T(chan)) {
+ wl_ofdm_t *ofdm =
+ (wl_ofdm_t *)&((conf->wl_phy_conf).wl_phy_ofdm_conf);
+ ofdm->wl_ofdm_subtype = WL_OFDM;
+ ofdm->wl_ofdm_frequency = chan->ich_freq;
+ } else {
+ switch (in->in_phytype) {
+ case IEEE80211_T_FH: {
+ wl_fhss_t *fhss = (wl_fhss_t *)
+ &((conf->wl_phy_conf).wl_phy_fhss_conf);
+
+ fhss->wl_fhss_subtype = WL_FHSS;
+ fhss->wl_fhss_channel = ieee80211_chan2ieee(ic, chan);
+ fhss->wl_fhss_dwelltime = in->in_fhdwell;
+ break;
+ }
+ case IEEE80211_T_DS: {
+ wl_dsss_t *dsss = (wl_dsss_t *)
+ &((conf->wl_phy_conf).wl_phy_dsss_conf);
+
+ dsss->wl_dsss_subtype = WL_DSSS;
+ dsss->wl_dsss_channel = ieee80211_chan2ieee(ic, chan);
+ dsss->wl_dsss_have_short_preamble = WIFI_HAVE_CAP(in,
+ IEEE80211_CAPINFO_SHORT_PREAMBLE);
+ dsss->wl_dsss_agility_enabled = WIFI_HAVE_CAP(in,
+ IEEE80211_CAPINFO_CHNL_AGILITY);
+ dsss->wl_dsss_have_pbcc = dsss->wl_dsss_pbcc_enable =
+ WIFI_HAVE_CAP(in, IEEE80211_CAPINFO_PBCC);
+ break;
+ }
+ case IEEE80211_T_OFDM: {
+ wl_erp_t *erp = (wl_erp_t *)
+ &((conf->wl_phy_conf).wl_phy_erp_conf);
+
+ erp->wl_erp_subtype = WL_ERP;
+ erp->wl_erp_channel = ieee80211_chan2ieee(ic, chan);
+ erp->wl_erp_have_short_preamble = WIFI_HAVE_CAP(in,
+ IEEE80211_CAPINFO_SHORT_PREAMBLE);
+ erp->wl_erp_have_agility = erp->wl_erp_agility_enabled =
+ WIFI_HAVE_CAP(in, IEEE80211_CAPINFO_CHNL_AGILITY);
+ erp->wl_erp_have_pbcc = erp->wl_erp_pbcc_enabled =
+ WIFI_HAVE_CAP(in, IEEE80211_CAPINFO_PBCC);
+ erp->wl_erp_dsss_ofdm_enabled =
+ WIFI_HAVE_CAP(in, IEEE80211_CAPINFO_DSSSOFDM);
+ erp->wl_erp_sst_enabled = WIFI_HAVE_CAP(in,
+ IEEE80211_CAPINFO_SHORT_SLOTTIME);
+ break;
+ } /* case IEEE80211_T_OFDM */
+ } /* switch in->in_phytype */
+ }
+
+ /* supported rates */
+ nrates = MIN(rates->ir_nrates, MAX_SCAN_SUPPORT_RATES);
+ /*
+ * The number of supported rates might exceed
+ * MAX_SCAN_SUPPORT_RATES. Fill in highest rates
+ * first so userland command could properly show
+ * maximum speed of AP
+ */
+ for (i = 0; i < nrates; i++) {
+ conf->wl_supported_rates[i] =
+ rates->ir_rates[rates->ir_nrates - i - 1];
+ }
+
+ aps->wl_ess_list_num++;
+}
+
+static int
+wifi_cfg_esslist(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *outp;
+ wl_ess_list_t *ow_aps;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, MAX_BUF_LEN - WIFI_BUF_OFFSET)) ==
+ NULL) {
+ return (ENOMEM);
+ }
+ outp = (wldp_t *)omp->b_rptr;
+ ow_aps = (wl_ess_list_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ ow_aps->wl_ess_list_num = 0;
+ ieee80211_iterate_nodes(&ic->ic_scan, wifi_read_ap, ow_aps);
+ outp->wldp_length = WIFI_BUF_OFFSET +
+ offsetof(wl_ess_list_t, wl_ess_list_ess) +
+ ow_aps->wl_ess_list_num * sizeof (wl_ess_conf_t);
+ omp->b_wptr = omp->b_rptr + outp->wldp_length;
+ break;
+ case WLAN_SET_PARAM:
+ outp->wldp_result = WL_READONLY;
+ err = EINVAL;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_esslist: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+/*
+ * Scan the network for all available ESSs.
+ * IEEE80211_F_SCANONLY is set when current state is INIT. And
+ * with this flag, after scan the state will be changed back to
+ * INIT. The reason is at the end of SCAN stage, the STA will
+ * consequently connect to an AP. Then it looks unreasonable that
+ * for a disconnected device, A SCAN command causes it connected.
+ * So the state is changed back to INIT.
+ */
+static int
+wifi_cmd_scan(struct ieee80211com *ic, mblk_t *mp)
+{
+ int ostate = ic->ic_state;
+
+ /*
+ * Do not scan when current state is RUN. The reason is
+ * when connected, STA is on the same channel as AP. But
+ * to do scan, STA have to switch to each available channel,
+ * send probe request and wait certian time for probe
+ * response/beacon. Then when the STA switches to a channel
+ * different than AP's, as a result it cannot send/receive
+ * data packets to/from the connected WLAN. This eventually
+ * will cause data loss.
+ */
+ if (ostate == IEEE80211_S_RUN)
+ return (0);
+
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
+ IEEE80211_LOCK(ic);
+ if (ostate == IEEE80211_S_INIT)
+ ic->ic_flags |= IEEE80211_F_SCANONLY;
+
+ /* wait scan complete */
+ wifi_wait_scan(ic);
+
+ wifi_setupoutmsg(mp, 0);
+ return (0);
+}
+
+static void
+wifi_loaddefdata(struct ieee80211com *ic)
+{
+ struct ieee80211_node *in = ic->ic_bss;
+ int i;
+
+ ic->ic_des_esslen = 0;
+ bzero(ic->ic_des_essid, IEEE80211_NWID_LEN);
+ ic->ic_flags &= ~IEEE80211_F_DESBSSID;
+ bzero(ic->ic_des_bssid, IEEE80211_ADDR_LEN);
+ bzero(ic->ic_bss->in_bssid, IEEE80211_ADDR_LEN);
+ ic->ic_des_chan = IEEE80211_CHAN_ANYC;
+ ic->ic_fixed_rate = IEEE80211_FIXED_RATE_NONE;
+ bzero(ic->ic_nickname, IEEE80211_NWID_LEN);
+ in->in_authmode = IEEE80211_AUTH_OPEN;
+ ic->ic_flags &= ~IEEE80211_F_PRIVACY;
+ ic->ic_def_txkey = 0;
+ for (i = 0; i < MAX_NWEPKEYS; i++) {
+ ic->ic_nw_keys[i].wk_keylen = 0;
+ bzero(ic->ic_nw_keys[i].wk_key, IEEE80211_KEYBUF_SIZE);
+ }
+ ic->ic_curmode = IEEE80211_MODE_AUTO;
+}
+
+static int
+wifi_cmd_loaddefaults(struct ieee80211com *ic, mblk_t *mp)
+{
+ wifi_loaddefdata(ic);
+ wifi_setupoutmsg(mp, 0);
+ return (ENETRESET);
+}
+
+static int
+wifi_cmd_disassoc(struct ieee80211com *ic, mblk_t *mp)
+{
+ if (ic->ic_state != IEEE80211_S_INIT) {
+ IEEE80211_UNLOCK(ic);
+ (void) ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
+ IEEE80211_LOCK(ic);
+ }
+ wifi_loaddefdata(ic);
+ wifi_setupoutmsg(mp, 0);
+ return (0);
+}
+
+static int
+wifi_cfg_getset(struct ieee80211com *ic, mblk_t **mp, uint32_t cmd)
+{
+ mblk_t *mp1 = *mp;
+ wldp_t *wp = (wldp_t *)mp1->b_rptr;
+ int err = 0;
+
+ ASSERT(ic != NULL && mp1 != NULL);
+ IEEE80211_LOCK_ASSERT(ic);
+ if (MBLKL(mp1) < WIFI_BUF_OFFSET) {
+ ieee80211_err("wifi_cfg_getset: "
+ "invalid input buffer, size=%d\n", MBLKL(mp1));
+ return (EINVAL);
+ }
+
+ switch (wp->wldp_id) {
+ /* Commands */
+ case WL_SCAN:
+ err = wifi_cmd_scan(ic, mp1);
+ break;
+ case WL_LOAD_DEFAULTS:
+ err = wifi_cmd_loaddefaults(ic, mp1);
+ break;
+ case WL_DISASSOCIATE:
+ err = wifi_cmd_disassoc(ic, mp1);
+ break;
+ /* Parameters */
+ case WL_ESSID:
+ err = wifi_cfg_essid(ic, cmd, mp);
+ break;
+ case WL_BSSID:
+ err = wifi_cfg_bssid(ic, cmd, mp);
+ break;
+ case WL_NODE_NAME:
+ err = wifi_cfg_nodename(ic, cmd, mp);
+ break;
+ case WL_PHY_CONFIG:
+ err = wifi_cfg_phy(ic, cmd, mp);
+ break;
+ case WL_WEP_KEY_TAB:
+ err = wifi_cfg_wepkey(ic, cmd, mp);
+ break;
+ case WL_WEP_KEY_ID:
+ err = wifi_cfg_keyid(ic, cmd, mp);
+ break;
+ case WL_AUTH_MODE:
+ err = wifi_cfg_authmode(ic, cmd, mp);
+ break;
+ case WL_ENCRYPTION:
+ err = wifi_cfg_encrypt(ic, cmd, mp);
+ break;
+ case WL_BSS_TYPE:
+ err = wifi_cfg_bsstype(ic, cmd, mp);
+ break;
+ case WL_DESIRED_RATES:
+ err = wifi_cfg_desrates(ic, cmd, mp);
+ break;
+ case WL_LINKSTATUS:
+ err = wifi_cfg_linkstatus(ic, cmd, mp);
+ break;
+ case WL_ESS_LIST:
+ err = wifi_cfg_esslist(ic, cmd, mp);
+ break;
+ case WL_SUPPORTED_RATES:
+ err = wifi_cfg_suprates(ic, cmd, mp);
+ break;
+ case WL_RSSI:
+ err = wifi_cfg_rssi(ic, cmd, mp);
+ break;
+ default:
+ wifi_setupoutmsg(mp1, 0);
+ wp->wldp_result = WL_LACK_FEATURE;
+ err = ENOTSUP;
+ break;
+ }
+
+ return (err);
+}
+
+/*
+ * Typically invoked by drivers in response to requests for
+ * information or to change settings from the userland.
+ *
+ * Return value should be checked by WiFi drivers. Return 0
+ * on success. Otherwise, return non-zero value to indicate
+ * the error. Driver should operate as below when the return
+ * error is:
+ * ENETRESET Reset wireless network and re-start to join a
+ * WLAN. ENETRESET is returned when a configuration
+ * parameter has been changed.
+ * When acknowledge a M_IOCTL message, thie error
+ * is ignored.
+ */
+int
+ieee80211_ioctl(struct ieee80211com *ic, queue_t *wq, mblk_t *mp)
+{
+ struct iocblk *iocp;
+ int32_t cmd, err, len;
+ boolean_t need_privilege;
+ mblk_t *mp1;
+
+ if (MBLKL(mp) < sizeof (struct iocblk)) {
+ ieee80211_err("ieee80211_ioctl: ioctl buffer too short, %u\n",
+ MBLKL(mp));
+ miocnak(wq, mp, 0, EINVAL);
+ return (EINVAL);
+ }
+
+ /*
+ * Validate the command
+ */
+ iocp = (struct iocblk *)mp->b_rptr;
+ iocp->ioc_error = 0;
+ cmd = iocp->ioc_cmd;
+ need_privilege = B_TRUE;
+ switch (cmd) {
+ case WLAN_SET_PARAM:
+ case WLAN_COMMAND:
+ break;
+ case WLAN_GET_PARAM:
+ need_privilege = B_FALSE;
+ break;
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_ioctl(): "
+ "unknown cmd 0x%x\n", cmd);
+ miocnak(wq, mp, 0, EINVAL);
+ return (EINVAL);
+ }
+
+ if (need_privilege) {
+ /*
+ * Check for specific net_config privilege on Solaris 10+.
+ */
+ err = secpolicy_net_config(iocp->ioc_cr, B_FALSE);
+ if (err != 0) {
+ miocnak(wq, mp, 0, err);
+ return (err);
+ }
+ }
+
+ IEEE80211_LOCK(ic);
+
+ /* sanity check */
+ mp1 = mp->b_cont;
+ if (iocp->ioc_count == 0 || iocp->ioc_count < sizeof (wldp_t) ||
+ mp1 == NULL) {
+ miocnak(wq, mp, 0, EINVAL);
+ IEEE80211_UNLOCK(ic);
+ return (EINVAL);
+ }
+
+ /* assuming single data block */
+ if (mp1->b_cont != NULL) {
+ freemsg(mp1->b_cont);
+ mp1->b_cont = NULL;
+ }
+
+ err = wifi_cfg_getset(ic, &mp1, cmd);
+ mp->b_cont = mp1;
+ IEEE80211_UNLOCK(ic);
+
+ len = msgdsize(mp1);
+ /* ignore ENETRESET when acknowledge the M_IOCTL message */
+ if (err == 0 || err == ENETRESET)
+ miocack(wq, mp, len, 0);
+ else
+ miocack(wq, mp, len, err);
+
+ return (err);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_node.c b/usr/src/uts/common/io/net80211/net80211_node.c
new file mode 100644
index 0000000000..59cb9ccbbf
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_node.c
@@ -0,0 +1,1503 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * Node management routines
+ */
+
+#include "net80211_impl.h"
+
+static ieee80211_node_t *ieee80211_node_alloc(ieee80211com_t *);
+static void ieee80211_node_cleanup(ieee80211_node_t *);
+static void ieee80211_node_free(ieee80211_node_t *);
+static uint8_t ieee80211_node_getrssi(const ieee80211_node_t *);
+static void ieee80211_setup_node(ieee80211com_t *, ieee80211_node_table_t *,
+ ieee80211_node_t *, const uint8_t *);
+static void ieee80211_node_reclaim(ieee80211_node_table_t *,
+ ieee80211_node_t *);
+static void ieee80211_free_node_locked(ieee80211_node_t *);
+static void ieee80211_free_allnodes(ieee80211_node_table_t *);
+static void ieee80211_node_leave(ieee80211com_t *, ieee80211_node_t *);
+static void ieee80211_timeout_scan_candidates(ieee80211_node_table_t *);
+static void ieee80211_timeout_stations(ieee80211_node_table_t *);
+static void ieee80211_node_table_init(ieee80211com_t *,
+ ieee80211_node_table_t *, const char *, int, int,
+ void (*timeout)(ieee80211_node_table_t *));
+static void ieee80211_node_table_cleanup(ieee80211_node_table_t *);
+
+/*
+ * association failures before ignored
+ * The failure may be caused by the response frame is lost for
+ * environmental reason. So Try associate more than once before
+ * ignore the node
+ */
+#define IEEE80211_STA_FAILS_MAX 2
+
+/*
+ * Initialize node database management callbacks for the interface.
+ * This function is called by ieee80211_attach(). These callback
+ * functions may be overridden in special circumstances, as long as
+ * as this is done after calling ieee80211_attach() and prior to any
+ * other call which may allocate a node
+ */
+void
+ieee80211_node_attach(ieee80211com_t *ic)
+{
+ struct ieee80211_impl *im = ic->ic_private;
+
+ ic->ic_node_alloc = ieee80211_node_alloc;
+ ic->ic_node_free = ieee80211_node_free;
+ ic->ic_node_cleanup = ieee80211_node_cleanup;
+ ic->ic_node_getrssi = ieee80211_node_getrssi;
+
+ /* default station inactivity timer setings */
+ im->im_inact_init = IEEE80211_INACT_INIT;
+ im->im_inact_assoc = IEEE80211_INACT_ASSOC;
+ im->im_inact_run = IEEE80211_INACT_RUN;
+ im->im_inact_probe = IEEE80211_INACT_PROBE;
+}
+
+/*
+ * Initialize node databases and the ic_bss node element.
+ */
+void
+ieee80211_node_lateattach(ieee80211com_t *ic)
+{
+ /*
+ * Calculate ic_tim_bitmap size in bytes
+ * IEEE80211_AID_MAX defines maximum bits in ic_tim_bitmap
+ */
+ ic->ic_tim_len = howmany(IEEE80211_AID_MAX, 8) * sizeof (uint8_t);
+
+ ieee80211_node_table_init(ic, &ic->ic_sta, "station",
+ IEEE80211_INACT_INIT, IEEE80211_WEP_NKID,
+ ieee80211_timeout_stations);
+ ieee80211_node_table_init(ic, &ic->ic_scan, "scan",
+ IEEE80211_INACT_SCAN, 0, ieee80211_timeout_scan_candidates);
+
+ ieee80211_reset_bss(ic);
+}
+
+/*
+ * Destroy all node databases and is usually called during device detach
+ */
+void
+ieee80211_node_detach(ieee80211com_t *ic)
+{
+ /* Node Detach */
+ if (ic->ic_bss != NULL) {
+ ieee80211_free_node(ic->ic_bss);
+ ic->ic_bss = NULL;
+ }
+ ieee80211_node_table_cleanup(&ic->ic_scan);
+ ieee80211_node_table_cleanup(&ic->ic_sta);
+}
+
+/*
+ * Increase a node's reference count
+ *
+ * Return pointer to the node
+ */
+ieee80211_node_t *
+ieee80211_ref_node(ieee80211_node_t *in)
+{
+ ieee80211_node_incref(in);
+ return (in);
+}
+
+/*
+ * Dexrease a node's reference count
+ */
+void
+ieee80211_unref_node(ieee80211_node_t **in)
+{
+ ieee80211_node_decref(*in);
+ *in = NULL; /* guard against use */
+}
+
+/*
+ * Mark ports authorized for data traffic. This function is usually
+ * used by 802.1x authenticator.
+ */
+void
+ieee80211_node_authorize(ieee80211_node_t *in)
+{
+ ieee80211_impl_t *im = in->in_ic->ic_private;
+
+ in->in_flags |= IEEE80211_NODE_AUTH;
+ in->in_inact_reload = im->im_inact_run;
+}
+
+/*
+ * Mark ports unauthorized for data traffic. This function is usually
+ * used by 802.1x authenticator.
+ */
+void
+ieee80211_node_unauthorize(ieee80211_node_t *in)
+{
+ in->in_flags &= ~IEEE80211_NODE_AUTH;
+}
+
+/*
+ * Set/change the channel. The rate set is also updated as
+ * to insure a consistent view by drivers.
+ */
+static void
+ieee80211_node_setchan(ieee80211com_t *ic, ieee80211_node_t *in,
+ struct ieee80211_channel *chan)
+{
+ if (chan == IEEE80211_CHAN_ANYC)
+ chan = ic->ic_curchan;
+ in->in_chan = chan;
+ in->in_rates = ic->ic_sup_rates[ieee80211_chan2mode(ic, chan)];
+}
+
+/*
+ * Initialize the channel set to scan based on the available channels
+ * and the current PHY mode.
+ */
+static void
+ieee80211_reset_scan(ieee80211com_t *ic)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+
+ if (ic->ic_des_chan != IEEE80211_CHAN_ANYC) {
+ (void) memset(im->im_chan_scan, 0, sizeof (im->im_chan_scan));
+ ieee80211_setbit(im->im_chan_scan,
+ ieee80211_chan2ieee(ic, ic->ic_des_chan));
+ } else {
+ bcopy(ic->ic_chan_active, im->im_chan_scan,
+ sizeof (ic->ic_chan_active));
+ }
+ ieee80211_dbg(IEEE80211_MSG_SCAN, "ieee80211_reset_scan(): "
+ "start chan %u\n", ieee80211_chan2ieee(ic, ic->ic_curchan));
+}
+
+/*
+ * Begin an active scan. Initialize the node cache. The scan
+ * begins on the next radio channel by calling ieee80211_next_scan().
+ * The actual scanning is not automated. The driver itself
+ * only handles setting the radio frequency and stepping through
+ * the channels.
+ */
+void
+ieee80211_begin_scan(ieee80211com_t *ic, boolean_t reset)
+{
+ IEEE80211_LOCK(ic);
+
+ if (ic->ic_opmode != IEEE80211_M_HOSTAP)
+ ic->ic_flags |= IEEE80211_F_ASCAN;
+ ieee80211_dbg(IEEE80211_MSG_SCAN,
+ "begin %s scan in %s mode on channel %u\n",
+ (ic->ic_flags & IEEE80211_F_ASCAN) ? "active" : "passive",
+ ieee80211_phymode_name[ic->ic_curmode],
+ ieee80211_chan2ieee(ic, ic->ic_curchan));
+
+ /*
+ * Clear scan state and flush any previously seen AP's.
+ */
+ ieee80211_reset_scan(ic);
+ if (reset)
+ ieee80211_free_allnodes(&ic->ic_scan);
+
+ ic->ic_flags |= IEEE80211_F_SCAN;
+ IEEE80211_UNLOCK(ic);
+
+ /* Scan the next channel. */
+ ieee80211_next_scan(ic);
+}
+
+/*
+ * Switch to the next channel marked for scanning.
+ * A driver is expected to first call ieee80211_begin_scan(),
+ * to initialize the node cache, then set the radio channel
+ * on the device. And then after a certain time has elapsed,
+ * call ieee80211_next_scan() to move to the next channel.
+ * Typically, a timeout routine is used to automate this process.
+ */
+void
+ieee80211_next_scan(ieee80211com_t *ic)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+ struct ieee80211_channel *chan;
+
+ IEEE80211_LOCK(ic);
+ /*
+ * Insure any previous mgt frame timeouts don't fire.
+ * This assumes the driver does the right thing in
+ * flushing anything queued in the driver and below.
+ */
+ im->im_mgt_timer = 0;
+
+ chan = ic->ic_curchan;
+ do {
+ if (++chan > &ic->ic_sup_channels[IEEE80211_CHAN_MAX])
+ chan = &ic->ic_sup_channels[0];
+ if (ieee80211_isset(im->im_chan_scan,
+ ieee80211_chan2ieee(ic, chan))) {
+ ieee80211_clrbit(im->im_chan_scan,
+ ieee80211_chan2ieee(ic, chan));
+ ieee80211_dbg(IEEE80211_MSG_SCAN,
+ "ieee80211_next_scan: chan %d->%d\n",
+ ieee80211_chan2ieee(ic, ic->ic_curchan),
+ ieee80211_chan2ieee(ic, chan));
+ ic->ic_curchan = chan;
+ /*
+ * drivers should do this as needed,
+ * for now maintain compatibility
+ */
+ ic->ic_bss->in_rates =
+ ic->ic_sup_rates[ieee80211_chan2mode(ic, chan)];
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
+ return;
+ }
+ } while (chan != ic->ic_curchan);
+ IEEE80211_UNLOCK(ic);
+ ieee80211_end_scan(ic);
+}
+
+/*
+ * Copy useful state from node obss into nbss.
+ */
+static void
+ieee80211_copy_bss(ieee80211_node_t *nbss, const ieee80211_node_t *obss)
+{
+ /* propagate useful state */
+ nbss->in_authmode = obss->in_authmode;
+ nbss->in_txpower = obss->in_txpower;
+ nbss->in_vlan = obss->in_vlan;
+}
+
+/*
+ * Setup the net80211 specific portion of an interface's softc, ic,
+ * for use in IBSS mode
+ */
+void
+ieee80211_create_ibss(ieee80211com_t *ic, struct ieee80211_channel *chan)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+ ieee80211_node_table_t *nt;
+ ieee80211_node_t *in;
+
+ IEEE80211_LOCK_ASSERT(ic);
+ ieee80211_dbg(IEEE80211_MSG_SCAN, "ieee80211_create_ibss: "
+ "creating ibss\n");
+
+ /*
+ * Create the station/neighbor table. Note that for adhoc
+ * mode we make the initial inactivity timer longer since
+ * we create nodes only through discovery and they typically
+ * are long-lived associations.
+ */
+ nt = &ic->ic_sta;
+ IEEE80211_NODE_LOCK(nt);
+ nt->nt_name = "neighbor";
+ nt->nt_inact_init = im->im_inact_run;
+ IEEE80211_NODE_UNLOCK(nt);
+
+ in = ieee80211_alloc_node(ic, &ic->ic_sta, ic->ic_macaddr);
+ if (in == NULL) {
+ ieee80211_err("ieee80211_create_ibss(): alloc node failed\n");
+ return;
+ }
+ IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_macaddr);
+ in->in_esslen = ic->ic_des_esslen;
+ (void) memcpy(in->in_essid, ic->ic_des_essid, in->in_esslen);
+ ieee80211_copy_bss(in, ic->ic_bss);
+ in->in_intval = ic->ic_bintval;
+ if (ic->ic_flags & IEEE80211_F_PRIVACY)
+ in->in_capinfo |= IEEE80211_CAPINFO_PRIVACY;
+ if (ic->ic_phytype == IEEE80211_T_FH) {
+ in->in_fhdwell = 200;
+ in->in_fhindex = 1;
+ }
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_IBSS:
+ ic->ic_flags |= IEEE80211_F_SIBSS;
+ in->in_capinfo |= IEEE80211_CAPINFO_IBSS;
+ if (ic->ic_flags & IEEE80211_F_DESBSSID)
+ IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_des_bssid);
+ else
+ in->in_bssid[0] |= 0x02; /* local bit for IBSS */
+ break;
+ case IEEE80211_M_AHDEMO:
+ if (ic->ic_flags & IEEE80211_F_DESBSSID)
+ IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_des_bssid);
+ else
+ (void) memset(in->in_bssid, 0, IEEE80211_ADDR_LEN);
+ break;
+ default:
+ ieee80211_err("ieee80211_create_ibss(): "
+ "wrong opmode %u to creat IBSS, abort\n",
+ ic->ic_opmode);
+ ieee80211_free_node(in);
+ return;
+ }
+
+ /*
+ * Fix the channel and related attributes.
+ */
+ ieee80211_node_setchan(ic, in, chan);
+ ic->ic_curchan = chan;
+ ic->ic_curmode = ieee80211_chan2mode(ic, chan);
+ /*
+ * Do mode-specific rate setup.
+ */
+ ieee80211_setbasicrates(&in->in_rates, ic->ic_curmode);
+ IEEE80211_UNLOCK(ic);
+ ieee80211_sta_join(ic, in);
+ IEEE80211_LOCK(ic);
+}
+
+void
+ieee80211_reset_bss(ieee80211com_t *ic)
+{
+ ieee80211_node_t *in;
+ ieee80211_node_t *obss;
+
+ in = ieee80211_alloc_node(ic, &ic->ic_scan, ic->ic_macaddr);
+ ASSERT(in != NULL);
+ obss = ic->ic_bss;
+ ic->ic_bss = ieee80211_ref_node(in);
+ if (obss != NULL) {
+ ieee80211_copy_bss(in, obss);
+ in->in_intval = ic->ic_bintval;
+ ieee80211_free_node(obss);
+ }
+}
+
+static int
+ieee80211_match_bss(ieee80211com_t *ic, ieee80211_node_t *in)
+{
+ uint8_t rate;
+ int fail;
+
+ fail = 0;
+ if (ieee80211_isclr(ic->ic_chan_active,
+ ieee80211_chan2ieee(ic, in->in_chan))) {
+ fail |= IEEE80211_BADCHAN;
+ }
+ if (ic->ic_des_chan != IEEE80211_CHAN_ANYC &&
+ in->in_chan != ic->ic_des_chan) {
+ fail |= IEEE80211_BADCHAN;
+ }
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ if (!(in->in_capinfo & IEEE80211_CAPINFO_IBSS))
+ fail |= IEEE80211_BADOPMODE;
+ } else {
+ if (!(in->in_capinfo & IEEE80211_CAPINFO_ESS))
+ fail |= IEEE80211_BADOPMODE;
+ }
+ if (ic->ic_flags & IEEE80211_F_PRIVACY) {
+ if (!(in->in_capinfo & IEEE80211_CAPINFO_PRIVACY))
+ fail |= IEEE80211_BADPRIVACY;
+ } else {
+ if (in->in_capinfo & IEEE80211_CAPINFO_PRIVACY)
+ fail |= IEEE80211_BADPRIVACY;
+ }
+ rate = ieee80211_fix_rate(in, IEEE80211_F_DONEGO | IEEE80211_F_DOFRATE);
+ if (rate & IEEE80211_RATE_BASIC)
+ fail |= IEEE80211_BADRATE;
+ if (ic->ic_des_esslen != 0 &&
+ (in->in_esslen != ic->ic_des_esslen ||
+ memcmp(in->in_essid, ic->ic_des_essid, ic->ic_des_esslen) != 0)) {
+ fail |= IEEE80211_BADESSID;
+ }
+ if ((ic->ic_flags & IEEE80211_F_DESBSSID) &&
+ !IEEE80211_ADDR_EQ(ic->ic_des_bssid, in->in_bssid)) {
+ fail |= IEEE80211_BADBSSID;
+ }
+ if (in->in_fails >= IEEE80211_STA_FAILS_MAX)
+ fail |= IEEE80211_NODEFAIL;
+
+ return (fail);
+}
+
+#define IEEE80211_MAXRATE(_rs) \
+ ((_rs).ir_rates[(_rs).ir_nrates - 1] & IEEE80211_RATE_VAL)
+
+/*
+ * Compare the capabilities of node a with node b and decide which is
+ * more desirable (return b if b is considered better than a). Note
+ * that we assume compatibility/usability has already been checked
+ * so we don't need to (e.g. validate whether privacy is supported).
+ * Used to select the best scan candidate for association in a BSS.
+ *
+ * Return desired node
+ */
+static ieee80211_node_t *
+ieee80211_node_compare(ieee80211com_t *ic, ieee80211_node_t *a,
+ ieee80211_node_t *b)
+{
+ uint8_t maxa;
+ uint8_t maxb;
+ uint8_t rssia;
+ uint8_t rssib;
+
+ /* privacy support preferred */
+ if ((a->in_capinfo & IEEE80211_CAPINFO_PRIVACY) &&
+ !(b->in_capinfo & IEEE80211_CAPINFO_PRIVACY)) {
+ return (a);
+ }
+ if (!(a->in_capinfo & IEEE80211_CAPINFO_PRIVACY) &&
+ (b->in_capinfo & IEEE80211_CAPINFO_PRIVACY)) {
+ return (b);
+ }
+
+ /* compare count of previous failures */
+ if (b->in_fails != a->in_fails)
+ return ((a->in_fails > b->in_fails) ? b : a);
+
+ rssia = ic->ic_node_getrssi(a);
+ rssib = ic->ic_node_getrssi(b);
+ if (ABS(rssib - rssia) < IEEE80211_RSSI_CMP_THRESHOLD) {
+ /* best/max rate preferred if signal level close enough */
+ maxa = IEEE80211_MAXRATE(a->in_rates);
+ maxb = IEEE80211_MAXRATE(b->in_rates);
+ if (maxa != maxb)
+ return ((maxb > maxa) ? b : a);
+ /* for now just prefer 5Ghz band to all other bands */
+ if (IEEE80211_IS_CHAN_5GHZ(a->in_chan) &&
+ !IEEE80211_IS_CHAN_5GHZ(b->in_chan)) {
+ return (a);
+ }
+ if (!IEEE80211_IS_CHAN_5GHZ(a->in_chan) &&
+ IEEE80211_IS_CHAN_5GHZ(b->in_chan)) {
+ return (b);
+ }
+ }
+ /* all things being equal, compare signal level */
+ return ((rssib > rssia) ? b : a);
+}
+
+/*
+ * Mark an ongoing scan stopped.
+ */
+void
+ieee80211_cancel_scan(ieee80211com_t *ic)
+{
+ IEEE80211_LOCK(ic);
+ ieee80211_dbg(IEEE80211_MSG_SCAN, "ieee80211_cancel_scan()"
+ "end %s scan\n",
+ (ic->ic_flags & IEEE80211_F_ASCAN) ? "active" : "passive");
+ ic->ic_flags &= ~(IEEE80211_F_SCAN | IEEE80211_F_ASCAN);
+ cv_broadcast(&((ieee80211_impl_t *)ic->ic_private)->im_scan_cv);
+ IEEE80211_UNLOCK(ic);
+}
+
+/*
+ * Complete a scan of potential channels. It is called by
+ * ieee80211_next_scan() when the state machine has performed
+ * a full cycle of scaning on all available radio channels.
+ * ieee80211_end_scan() will inspect the node cache for suitable
+ * APs found during scaning, and associate with one, should
+ * the parameters of the node match those of the configuration
+ * requested from userland.
+ */
+void
+ieee80211_end_scan(ieee80211com_t *ic)
+{
+ ieee80211_node_table_t *nt = &ic->ic_scan;
+ ieee80211_node_t *in;
+ ieee80211_node_t *selbs;
+
+ ieee80211_cancel_scan(ic);
+ IEEE80211_LOCK(ic);
+
+ /*
+ * Automatic sequencing; look for a candidate and
+ * if found join the network.
+ */
+ /* NB: unlocked read should be ok */
+ in = list_head(&nt->nt_node);
+ if (in == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_SCAN, "ieee80211_end_scan: "
+ "no scan candidate\n");
+ notfound:
+ if (ic->ic_opmode == IEEE80211_M_IBSS &&
+ (ic->ic_flags & IEEE80211_F_IBSSON) &&
+ ic->ic_des_esslen != 0) {
+ ieee80211_create_ibss(ic, ic->ic_ibss_chan);
+ IEEE80211_UNLOCK(ic);
+ return;
+ }
+
+ /*
+ * Reset the list of channels to scan and start again.
+ */
+ ieee80211_reset_scan(ic);
+ ic->ic_flags |= IEEE80211_F_SCAN | IEEE80211_F_ASCAN;
+ IEEE80211_UNLOCK(ic);
+
+ ieee80211_next_scan(ic);
+ return;
+ }
+
+ if (ic->ic_flags & IEEE80211_F_SCANONLY) { /* scan only */
+ ic->ic_flags &= ~IEEE80211_F_SCANONLY;
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
+ return;
+ }
+
+ selbs = NULL;
+ IEEE80211_NODE_LOCK(nt);
+ while (in != NULL) {
+ if (in->in_fails >= IEEE80211_STA_FAILS_MAX) {
+ ieee80211_node_t *tmpin = in;
+
+ /*
+ * The configuration of the access points may change
+ * during my scan. So delete the entry for the AP
+ * and retry to associate if there is another beacon.
+ */
+ in = list_next(&nt->nt_node, tmpin);
+ ieee80211_node_reclaim(nt, tmpin);
+ continue;
+ }
+ if (ieee80211_match_bss(ic, in) == 0) {
+ if (selbs == NULL)
+ selbs = in;
+ else
+ selbs = ieee80211_node_compare(ic, selbs, in);
+ }
+ in = list_next(&nt->nt_node, in);
+ }
+ IEEE80211_NODE_UNLOCK(nt);
+ if (selbs == NULL)
+ goto notfound;
+ IEEE80211_UNLOCK(ic);
+ ieee80211_sta_join(ic, selbs);
+}
+
+
+/*
+ * Handle 802.11 ad hoc network merge. The convention, set by the
+ * Wireless Ethernet Compatibility Alliance (WECA), is that an 802.11
+ * station will change its BSSID to match the "oldest" 802.11 ad hoc
+ * network, on the same channel, that has the station's desired SSID.
+ * The "oldest" 802.11 network sends beacons with the greatest TSF
+ * timestamp.
+ * The caller is assumed to validate TSF's before attempting a merge.
+ *
+ * Return B_TRUE if the BSSID changed, B_FALSE otherwise.
+ */
+boolean_t
+ieee80211_ibss_merge(ieee80211_node_t *in)
+{
+ ieee80211com_t *ic = in->in_ic;
+
+ if (in == ic->ic_bss ||
+ IEEE80211_ADDR_EQ(in->in_bssid, ic->ic_bss->in_bssid)) {
+ /* unchanged, nothing to do */
+ return (B_FALSE);
+ }
+ if (ieee80211_match_bss(ic, in) != 0) { /* capabilities mismatch */
+ ieee80211_dbg(IEEE80211_MSG_ASSOC, "ieee80211_ibss_merge: "
+ " merge failed, capabilities mismatch\n");
+ return (B_FALSE);
+ }
+ ieee80211_dbg(IEEE80211_MSG_ASSOC, "ieee80211_ibss_merge: "
+ "new bssid %s: %s preamble, %s slot time%s\n",
+ ieee80211_macaddr_sprintf(in->in_bssid),
+ (ic->ic_flags & IEEE80211_F_SHPREAMBLE) ? "short" : "long",
+ (ic->ic_flags & IEEE80211_F_SHSLOT) ? "short" : "long",
+ (ic->ic_flags&IEEE80211_F_USEPROT) ? ", protection" : "");
+ ieee80211_sta_join(ic, in);
+ return (B_TRUE);
+}
+
+/*
+ * Join the specified IBSS/BSS network. The node is assumed to
+ * be passed in with a held reference.
+ */
+void
+ieee80211_sta_join(ieee80211com_t *ic, ieee80211_node_t *selbs)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+ ieee80211_node_t *obss;
+
+ IEEE80211_LOCK(ic);
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ ieee80211_node_table_t *nt;
+
+ /*
+ * Delete unusable rates; we've already checked
+ * that the negotiated rate set is acceptable.
+ */
+ (void) ieee80211_fix_rate(selbs, IEEE80211_F_DODEL);
+ /*
+ * Fillin the neighbor table
+ */
+ nt = &ic->ic_sta;
+ IEEE80211_NODE_LOCK(nt);
+ nt->nt_name = "neighbor";
+ nt->nt_inact_init = im->im_inact_run;
+ IEEE80211_NODE_UNLOCK(nt);
+ }
+
+ /*
+ * Committed to selbs, setup state.
+ */
+ obss = ic->ic_bss;
+ ic->ic_bss = ieee80211_ref_node(selbs); /* Grab reference */
+ if (obss != NULL) {
+ ieee80211_copy_bss(selbs, obss);
+ ieee80211_free_node(obss);
+ }
+ ic->ic_curmode = ieee80211_chan2mode(ic, selbs->in_chan);
+ ic->ic_curchan = selbs->in_chan;
+ /*
+ * Set the erp state (mostly the slot time) to deal with
+ * the auto-select case; this should be redundant if the
+ * mode is locked.
+ */
+ ieee80211_reset_erp(ic);
+
+ IEEE80211_UNLOCK(ic);
+ if (ic->ic_opmode == IEEE80211_M_STA)
+ ieee80211_new_state(ic, IEEE80211_S_AUTH, -1);
+ else
+ ieee80211_new_state(ic, IEEE80211_S_RUN, -1);
+}
+
+/*
+ * Leave the specified IBSS/BSS network. The node is assumed to
+ * be passed in with a held reference.
+ */
+void
+ieee80211_sta_leave(ieee80211com_t *ic, ieee80211_node_t *in)
+{
+ IEEE80211_LOCK(ic);
+ ic->ic_node_cleanup(in);
+ ieee80211_notify_node_leave(ic, in);
+ IEEE80211_UNLOCK(ic);
+}
+
+/*
+ * Allocate a node. This is the default callback function for
+ * ic_node_alloc. This function may be overridden by the driver
+ * to allocate device specific node structure.
+ */
+/* ARGSUSED */
+static ieee80211_node_t *
+ieee80211_node_alloc(ieee80211com_t *ic)
+{
+ return (kmem_zalloc(sizeof (ieee80211_node_t), KM_SLEEP));
+}
+
+/*
+ * Cleanup a node, free any memory associated with the node.
+ * This is the default callback function for ic_node_cleanup
+ * and may be overridden by the driver.
+ */
+static void
+ieee80211_node_cleanup(ieee80211_node_t *in)
+{
+ in->in_associd = 0;
+ in->in_rssi = 0;
+ in->in_rstamp = 0;
+ if (in->in_challenge != NULL) {
+ kmem_free(in->in_challenge, IEEE80211_CHALLENGE_LEN);
+ in->in_challenge = NULL;
+ }
+ if (in->in_rxfrag != NULL) {
+ freemsg(in->in_rxfrag);
+ in->in_rxfrag = NULL;
+ }
+}
+
+/*
+ * Free a node. This is the default callback function for ic_node_free
+ * and may be overridden by the driver to free memory used by device
+ * specific node structure
+ */
+static void
+ieee80211_node_free(ieee80211_node_t *in)
+{
+ ieee80211com_t *ic = in->in_ic;
+
+ ic->ic_node_cleanup(in);
+ kmem_free(in, sizeof (ieee80211_node_t));
+}
+
+/*
+ * Get a node current RSSI value. This is the default callback function
+ * for ic_node_getrssi and may be overridden by the driver to provide
+ * device specific RSSI calculation algorithm.
+ */
+static uint8_t
+ieee80211_node_getrssi(const ieee80211_node_t *in)
+{
+ return (in->in_rssi);
+}
+
+/* Free fragment if not needed anymore */
+static void
+node_cleanfrag(ieee80211_node_t *in)
+{
+ clock_t ticks;
+
+ ticks = ddi_get_lbolt();
+ if (in->in_rxfrag != NULL && ticks > (in->in_rxfragstamp + hz)) {
+ freemsg(in->in_rxfrag);
+ in->in_rxfrag = NULL;
+ }
+}
+
+/*
+ * Setup a node. Initialize the node with specified macaddr. Associate
+ * with the interface softc, ic, and add it to the specified node
+ * database.
+ */
+static void
+ieee80211_setup_node(ieee80211com_t *ic, ieee80211_node_table_t *nt,
+ ieee80211_node_t *in, const uint8_t *macaddr)
+{
+ int32_t hash;
+
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_setup_node(): "
+ "%p<%s> in %s table\n", in,
+ ieee80211_macaddr_sprintf(macaddr),
+ (nt != NULL) ? nt->nt_name : "NULL");
+
+ in->in_ic = ic;
+ IEEE80211_ADDR_COPY(in->in_macaddr, macaddr);
+ hash = ieee80211_node_hash(macaddr);
+ ieee80211_node_initref(in); /* mark referenced */
+ in->in_authmode = IEEE80211_AUTH_OPEN;
+ in->in_txpower = ic->ic_txpowlimit; /* max power */
+ in->in_chan = IEEE80211_CHAN_ANYC;
+ in->in_inact_reload = IEEE80211_INACT_INIT;
+ in->in_inact = in->in_inact_reload;
+ ieee80211_crypto_resetkey(ic, &in->in_ucastkey, IEEE80211_KEYIX_NONE);
+
+ if (nt != NULL) {
+ IEEE80211_NODE_LOCK(nt);
+ list_insert_tail(&nt->nt_node, in);
+ list_insert_tail(&nt->nt_hash[hash], in);
+ in->in_table = nt;
+ in->in_inact_reload = nt->nt_inact_init;
+ IEEE80211_NODE_UNLOCK(nt);
+ }
+}
+
+/*
+ * Allocates and initialize a node with specified MAC address.
+ * Associate the node with the interface ic. If the allocation
+ * is successful, the node structure is initialized by
+ * ieee80211_setup_node(); otherwise, NULL is returned
+ */
+ieee80211_node_t *
+ieee80211_alloc_node(ieee80211com_t *ic, ieee80211_node_table_t *nt,
+ const uint8_t *macaddr)
+{
+ ieee80211_node_t *in;
+
+ in = ic->ic_node_alloc(ic);
+ if (in != NULL)
+ ieee80211_setup_node(ic, nt, in, macaddr);
+ return (in);
+}
+
+/*
+ * Craft a temporary node suitable for sending a management frame
+ * to the specified station. We craft only as much state as we
+ * need to do the work since the node will be immediately reclaimed
+ * once the send completes.
+ */
+ieee80211_node_t *
+ieee80211_tmp_node(ieee80211com_t *ic, const uint8_t *macaddr)
+{
+ ieee80211_node_t *in;
+
+ in = ic->ic_node_alloc(ic);
+ if (in != NULL) {
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_tmp_node: "
+ "%p<%s>\n", in, ieee80211_macaddr_sprintf(macaddr));
+
+ IEEE80211_ADDR_COPY(in->in_macaddr, macaddr);
+ IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_bss->in_bssid);
+ ieee80211_node_initref(in); /* mark referenced */
+ in->in_txpower = ic->ic_bss->in_txpower;
+ /* NB: required by ieee80211_fix_rate */
+ ieee80211_node_setchan(ic, in, ic->ic_bss->in_chan);
+ ieee80211_crypto_resetkey(ic, &in->in_ucastkey,
+ IEEE80211_KEYIX_NONE);
+
+ in->in_table = NULL; /* NB: pedantic */
+ in->in_ic = ic;
+ }
+
+ return (in);
+}
+
+/*
+ * ieee80211_dup_bss() is similar to ieee80211_alloc_node(),
+ * but is instead used to create a node database entry for
+ * the specified BSSID. If the allocation is successful, the
+ * node is initialized, otherwise, NULL is returned.
+ */
+ieee80211_node_t *
+ieee80211_dup_bss(ieee80211_node_table_t *nt, const uint8_t *macaddr)
+{
+ ieee80211com_t *ic = nt->nt_ic;
+ ieee80211_node_t *in;
+
+ in = ieee80211_alloc_node(ic, nt, macaddr);
+ if (in != NULL) {
+ /*
+ * Inherit from ic_bss.
+ */
+ ieee80211_copy_bss(in, ic->ic_bss);
+ IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_bss->in_bssid);
+ ieee80211_node_setchan(ic, in, ic->ic_bss->in_chan);
+ }
+
+ return (in);
+}
+
+/*
+ * Iterate through the node table, searching for a node entry which
+ * matches macaddr. If the entry is found, its reference count is
+ * incremented, and a pointer to the node is returned; otherwise,
+ * NULL will be returned.
+ * The node table lock is acquired by the caller.
+ */
+static ieee80211_node_t *
+ieee80211_find_node_locked(ieee80211_node_table_t *nt, const uint8_t *macaddr)
+{
+ ieee80211_node_t *in;
+ int hash;
+
+ ASSERT(IEEE80211_NODE_IS_LOCKED(nt));
+
+ hash = ieee80211_node_hash(macaddr);
+ in = list_head(&nt->nt_hash[hash]);
+ while (in != NULL) {
+ if (IEEE80211_ADDR_EQ(in->in_macaddr, macaddr))
+ return (ieee80211_ref_node(in)); /* mark referenced */
+ in = list_next(&nt->nt_hash[hash], in);
+ }
+ return (NULL);
+}
+
+/*
+ * Iterate through the node table, searching for a node entry
+ * which match specified mac address.
+ * Return NULL if no matching node found.
+ */
+ieee80211_node_t *
+ieee80211_find_node(ieee80211_node_table_t *nt, const uint8_t *macaddr)
+{
+ ieee80211_node_t *in;
+
+ IEEE80211_NODE_LOCK(nt);
+ in = ieee80211_find_node_locked(nt, macaddr);
+ IEEE80211_NODE_UNLOCK(nt);
+ return (in);
+}
+
+/*
+ * Fake up a node; this handles node discovery in adhoc mode.
+ * Note that for the driver's benefit we treat this like an
+ * association so the driver has an opportunity to setup it's
+ * private state.
+ */
+ieee80211_node_t *
+ieee80211_fakeup_adhoc_node(ieee80211_node_table_t *nt, const uint8_t *macaddr)
+{
+ ieee80211com_t *ic = nt->nt_ic;
+ ieee80211_node_t *in;
+
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_fakeup_adhoc_node: "
+ "mac<%s>\n", ieee80211_macaddr_sprintf(macaddr));
+ in = ieee80211_dup_bss(nt, macaddr);
+ if (in != NULL) {
+ /* no rate negotiation; just dup */
+ in->in_rates = ic->ic_bss->in_rates;
+ if (ic->ic_node_newassoc != NULL)
+ ic->ic_node_newassoc(in, 1);
+ ieee80211_node_authorize(in);
+ }
+ return (in);
+}
+
+/*
+ * Process a beacon or probe response frame.
+ */
+void
+ieee80211_add_scan(ieee80211com_t *ic, const struct ieee80211_scanparams *sp,
+ const struct ieee80211_frame *wh, int subtype, int rssi, int rstamp)
+{
+ ieee80211_node_table_t *nt = &ic->ic_scan;
+ ieee80211_node_t *in;
+ boolean_t newnode = B_FALSE;
+
+ in = ieee80211_find_node(nt, wh->i_addr2);
+ if (in == NULL) {
+ /*
+ * Create a new entry.
+ */
+ in = ieee80211_alloc_node(ic, nt, wh->i_addr2);
+ if (in == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_add_scan: "
+ "alloc node failed\n");
+ return;
+ }
+ /*
+ * inherit from ic_bss.
+ */
+ ieee80211_copy_bss(in, ic->ic_bss);
+ ieee80211_node_setchan(ic, in, ic->ic_curchan);
+ newnode = B_TRUE;
+ }
+
+ /* ap beaconing multiple ssid w/ same bssid */
+
+ /*
+ * sp->ssid[0] - element ID
+ * sp->ssid[1] - length
+ * sp->ssid[2]... - ssid
+ */
+ if (sp->ssid[1] != 0 &&
+ subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP ||
+ in->in_esslen == 0) {
+ in->in_esslen = sp->ssid[1];
+ bzero(in->in_essid, sizeof (in->in_essid));
+ bcopy(sp->ssid + 2, in->in_essid, sp->ssid[1]);
+ }
+ IEEE80211_ADDR_COPY(in->in_bssid, wh->i_addr3);
+ in->in_rssi = (uint8_t)rssi;
+ in->in_rstamp = rstamp;
+ bcopy(sp->tstamp, in->in_tstamp.data, sizeof (in->in_tstamp));
+ in->in_intval = sp->bintval;
+ in->in_capinfo = sp->capinfo;
+ in->in_chan = &ic->ic_sup_channels[sp->chan];
+ in->in_phytype = sp->phytype;
+ in->in_fhdwell = sp->fhdwell;
+ in->in_fhindex = sp->fhindex;
+ in->in_erp = sp->erp;
+ if (sp->tim != NULL) {
+ struct ieee80211_tim_ie *ie;
+
+ ie = (struct ieee80211_tim_ie *)sp->tim;
+ in->in_dtim_count = ie->tim_count;
+ in->in_dtim_period = ie->tim_period;
+ }
+ /*
+ * Record the byte offset from the mac header to
+ * the start of the TIM information element for
+ * use by hardware and/or to speedup software
+ * processing of beacon frames.
+ */
+ in->in_tim_off = sp->timoff;
+
+ /* NB: must be after in_chan is setup */
+ (void) ieee80211_setup_rates(in, sp->rates, sp->xrates,
+ IEEE80211_F_DOSORT);
+
+ if (!newnode)
+ ieee80211_free_node(in);
+}
+
+/*
+ * Initialize/update an ad-hoc node with contents from a received
+ * beacon frame.
+ */
+void
+ieee80211_init_neighbor(ieee80211_node_t *in, const struct ieee80211_frame *wh,
+ const struct ieee80211_scanparams *sp)
+{
+ in->in_esslen = sp->ssid[1];
+ (void) memcpy(in->in_essid, sp->ssid + 2, sp->ssid[1]);
+ IEEE80211_ADDR_COPY(in->in_bssid, wh->i_addr3);
+ (void) memcpy(in->in_tstamp.data, sp->tstamp, sizeof (in->in_tstamp));
+ in->in_intval = sp->bintval;
+ in->in_capinfo = sp->capinfo;
+ in->in_chan = in->in_ic->ic_curchan;
+ in->in_fhdwell = sp->fhdwell;
+ in->in_fhindex = sp->fhindex;
+ in->in_erp = sp->erp;
+ in->in_tim_off = sp->timoff;
+
+ /* NB: must be after in_chan is setup */
+ (void) ieee80211_setup_rates(in, sp->rates, sp->xrates,
+ IEEE80211_F_DOSORT);
+}
+
+/*
+ * Do node discovery in adhoc mode on receipt of a beacon
+ * or probe response frame. Note that for the driver's
+ * benefit we we treat this like an association so the
+ * driver has an opportuinty to setup it's private state.
+ */
+ieee80211_node_t *
+ieee80211_add_neighbor(ieee80211com_t *ic, const struct ieee80211_frame *wh,
+ const struct ieee80211_scanparams *sp)
+{
+ ieee80211_node_t *in;
+
+ in = ieee80211_dup_bss(&ic->ic_sta, wh->i_addr2);
+ if (in != NULL) {
+ ieee80211_init_neighbor(in, wh, sp);
+ if (ic->ic_node_newassoc != NULL)
+ ic->ic_node_newassoc(in, 1);
+ }
+ return (in);
+}
+
+#define IEEE80211_IS_CTL(wh) \
+ ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_CTL)
+
+/*
+ * Locate the node for sender, track state, and then pass the
+ * (referenced) node up to the 802.11 layer for its use. We
+ * are required to pass some node so we fall back to ic_bss
+ * when this frame is from an unknown sender. The 802.11 layer
+ * knows this means the sender wasn't in the node table and
+ * acts accordingly.
+ */
+ieee80211_node_t *
+ieee80211_find_rxnode(ieee80211com_t *ic, const struct ieee80211_frame *wh)
+{
+ ieee80211_node_table_t *nt;
+ ieee80211_node_t *in;
+
+ /* may want scanned nodes in the neighbor table for adhoc */
+ if (ic->ic_opmode == IEEE80211_M_STA ||
+ (ic->ic_flags & IEEE80211_F_SCAN)) {
+ nt = &ic->ic_scan;
+ } else {
+ nt = &ic->ic_sta;
+ }
+
+ IEEE80211_NODE_LOCK(nt);
+ if (IEEE80211_IS_CTL(wh))
+ in = ieee80211_find_node_locked(nt, wh->i_addr1);
+ else
+ in = ieee80211_find_node_locked(nt, wh->i_addr2);
+ IEEE80211_NODE_UNLOCK(nt);
+
+ if (in == NULL)
+ in = ieee80211_ref_node(ic->ic_bss);
+
+ return (in);
+}
+
+/*
+ * Return a reference to the appropriate node for sending
+ * a data frame. This handles node discovery in adhoc networks.
+ */
+ieee80211_node_t *
+ieee80211_find_txnode(ieee80211com_t *ic, const uint8_t *daddr)
+{
+ ieee80211_node_table_t *nt = &ic->ic_sta;
+ ieee80211_node_t *in;
+
+ /*
+ * The destination address should be in the node table
+ * unless this is a multicast/broadcast frame. We can
+ * also optimize station mode operation, all frames go
+ * to the bss node.
+ */
+ IEEE80211_NODE_LOCK(nt);
+ if (ic->ic_opmode == IEEE80211_M_STA || IEEE80211_IS_MULTICAST(daddr))
+ in = ieee80211_ref_node(ic->ic_bss);
+ else
+ in = ieee80211_find_node_locked(nt, daddr);
+ IEEE80211_NODE_UNLOCK(nt);
+
+ if (in == NULL) {
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ /*
+ * In adhoc mode cons up a node for the destination.
+ * Note that we need an additional reference for the
+ * caller to be consistent with
+ * ieee80211_find_node_locked
+ * can't hold lock across ieee80211_dup_bss 'cuz of
+ * recursive locking
+ */
+ in = ieee80211_fakeup_adhoc_node(nt, daddr);
+ if (in != NULL)
+ (void) ieee80211_ref_node(in);
+ } else {
+ ieee80211_dbg(IEEE80211_MSG_OUTPUT,
+ "ieee80211_find_txnode: "
+ "[%s] no node, discard frame\n",
+ ieee80211_macaddr_sprintf(daddr));
+ }
+ }
+ return (in);
+}
+
+/*
+ * Remove a node from the node database entries and free memory
+ * associated with the node. The node table lock is acquired by
+ * the caller.
+ */
+static void
+ieee80211_free_node_locked(ieee80211_node_t *in)
+{
+ ieee80211com_t *ic = in->in_ic;
+ ieee80211_node_table_t *nt = in->in_table;
+ int32_t hash;
+
+ if (nt != NULL) {
+ hash = ieee80211_node_hash(in->in_macaddr);
+ list_remove(&nt->nt_hash[hash], in);
+ list_remove(&nt->nt_node, in);
+ }
+ ic->ic_node_free(in);
+}
+
+/*
+ * Remove a node from the node database entries and free any
+ * memory associated with the node.
+ * This method can be overridden in ieee80211_attach()
+ */
+void
+ieee80211_free_node(ieee80211_node_t *in)
+{
+ ieee80211_node_table_t *nt = in->in_table;
+
+ if (nt != NULL)
+ IEEE80211_NODE_LOCK(nt);
+ if (ieee80211_node_decref_nv(in) == 0)
+ ieee80211_free_node_locked(in);
+ if (nt != NULL)
+ IEEE80211_NODE_UNLOCK(nt);
+}
+
+/*
+ * Reclaim a node. If this is the last reference count then
+ * do the normal free work. Otherwise remove it from the node
+ * table and mark it gone by clearing the back-reference.
+ */
+static void
+ieee80211_node_reclaim(ieee80211_node_table_t *nt, ieee80211_node_t *in)
+{
+ int32_t hash;
+
+ IEEE80211_NODE_LOCK_ASSERT(nt);
+ ieee80211_dbg(IEEE80211_MSG_NODE, "node_reclaim: "
+ " remove %p<%s> from %s table, refcnt %d\n",
+ in, ieee80211_macaddr_sprintf(in->in_macaddr), nt->nt_name,
+ ieee80211_node_refcnt(in));
+
+ if (ieee80211_node_decref_nv(in) != 0) {
+ /*
+ * Clear any entry in the unicast key mapping table.
+ * We need to do it here so rx lookups don't find it
+ * in the mapping table even if it's not in the hash
+ * table. We cannot depend on the mapping table entry
+ * being cleared because the node may not be free'd.
+ */
+ hash = ieee80211_node_hash(in->in_macaddr);
+ list_remove(&nt->nt_hash[hash], in);
+ list_remove(&nt->nt_node, in);
+ in->in_table = NULL;
+ } else {
+ ieee80211_free_node_locked(in);
+ }
+}
+
+/*
+ * Iterate through the node list and reclaim all node in the node table.
+ * The node table lock is acquired by the caller
+ */
+static void
+ieee80211_free_allnodes_locked(ieee80211_node_table_t *nt)
+{
+ ieee80211_node_t *in;
+
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_free_allnodes_locked(): "
+ "free all nodes in %s table\n", nt->nt_name);
+
+ in = list_head(&nt->nt_node);
+ while (in != NULL) {
+ ieee80211_node_reclaim(nt, in);
+ in = list_head(&nt->nt_node);
+ }
+ ieee80211_reset_erp(nt->nt_ic);
+}
+
+/*
+ * Iterate through the node list, calling ieee80211_node_reclaim() for
+ * all nodes associated with the interface.
+ */
+static void
+ieee80211_free_allnodes(ieee80211_node_table_t *nt)
+{
+ IEEE80211_NODE_LOCK(nt);
+ ieee80211_free_allnodes_locked(nt);
+ IEEE80211_NODE_UNLOCK(nt);
+}
+
+/*
+ * Timeout entries in the scan cache. This is the timeout callback
+ * function of node table ic_scan which is called when the inactivity
+ * timer expires.
+ */
+static void
+ieee80211_timeout_scan_candidates(ieee80211_node_table_t *nt)
+{
+ ieee80211com_t *ic = nt->nt_ic;
+ ieee80211_node_t *in;
+
+ IEEE80211_NODE_LOCK(nt);
+ in = ic->ic_bss;
+ node_cleanfrag(in); /* Free fragment if not needed */
+ nt->nt_inact_timer = IEEE80211_INACT_WAIT;
+ IEEE80211_NODE_UNLOCK(nt);
+}
+
+/*
+ * Timeout inactive stations and do related housekeeping.
+ * Note that we cannot hold the node lock while sending a
+ * frame as this would lead to a LOR. Instead we use a
+ * generation number to mark nodes that we've scanned and
+ * drop the lock and restart a scan if we have to time out
+ * a node. Since we are single-threaded by virtue of
+ * controlling the inactivity timer we can be sure this will
+ * process each node only once.
+ */
+static void
+ieee80211_timeout_stations(ieee80211_node_table_t *nt)
+{
+ ieee80211com_t *ic = nt->nt_ic;
+ ieee80211_impl_t *im = ic->ic_private;
+ ieee80211_node_t *in = NULL;
+ uint32_t gen;
+ boolean_t isadhoc;
+
+ IEEE80211_LOCK_ASSERT(ic);
+ isadhoc = (ic->ic_opmode == IEEE80211_M_IBSS ||
+ ic->ic_opmode == IEEE80211_M_AHDEMO);
+ IEEE80211_SCAN_LOCK(nt);
+ gen = ++nt->nt_scangen;
+restart:
+ IEEE80211_NODE_LOCK(nt);
+ for (in = list_head(&nt->nt_node); in != NULL;
+ in = list_next(&nt->nt_node, in)) {
+ if (in->in_scangen == gen) /* previously handled */
+ continue;
+ in->in_scangen = gen;
+ node_cleanfrag(in); /* free fragment if not needed */
+
+ /*
+ * Special case ourself; we may be idle for extended periods
+ * of time and regardless reclaiming our state is wrong.
+ */
+ if (in == ic->ic_bss)
+ continue;
+ in->in_inact--;
+ if (in->in_associd != 0 || isadhoc) {
+ /*
+ * Probe the station before time it out. We
+ * send a null data frame which may not be
+ * uinversally supported by drivers (need it
+ * for ps-poll support so it should be...).
+ */
+ if (0 < in->in_inact &&
+ in->in_inact <= im->im_inact_probe) {
+ ieee80211_dbg(IEEE80211_MSG_NODE, "net80211: "
+ "probe station due to inactivity\n");
+ IEEE80211_NODE_UNLOCK(nt);
+ IEEE80211_UNLOCK(ic);
+ (void) ieee80211_send_nulldata(in);
+ IEEE80211_LOCK(ic);
+ goto restart;
+ }
+ }
+ if (in->in_inact <= 0) {
+ ieee80211_dbg(IEEE80211_MSG_NODE, "net80211: "
+ "station timed out due to inact (refcnt %u)\n",
+ ieee80211_node_refcnt(in));
+ /*
+ * Send a deauthenticate frame and drop the station.
+ * This is somewhat complicated due to reference counts
+ * and locking. At this point a station will typically
+ * have a reference count of 1. ieee80211_node_leave
+ * will do a "free" of the node which will drop the
+ * reference count. But in the meantime a reference
+ * wil be held by the deauth frame. The actual reclaim
+ * of the node will happen either after the tx is
+ * completed or by ieee80211_node_leave.
+ *
+ * Separately we must drop the node lock before sending
+ * in case the driver takes a lock, as this will result
+ * in LOR between the node lock and the driver lock.
+ */
+ IEEE80211_NODE_UNLOCK(nt);
+ if (in->in_associd != 0) {
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_DEAUTH,
+ IEEE80211_REASON_AUTH_EXPIRE);
+ IEEE80211_LOCK(ic);
+ }
+ ieee80211_node_leave(ic, in);
+ goto restart;
+ }
+ }
+ IEEE80211_NODE_UNLOCK(nt);
+
+ IEEE80211_SCAN_UNLOCK(nt);
+
+ nt->nt_inact_timer = IEEE80211_INACT_WAIT;
+}
+
+/*
+ * Call the user-defined call back function for all nodes in
+ * the node cache. The callback is invoked with the user-supplied
+ * value and a pointer to the current node.
+ */
+void
+ieee80211_iterate_nodes(ieee80211_node_table_t *nt, ieee80211_iter_func *f,
+ void *arg)
+{
+ ieee80211_node_t *in;
+
+ IEEE80211_NODE_LOCK(nt);
+ in = list_head(&nt->nt_node);
+ while (in != NULL) {
+ (void) ieee80211_ref_node(in);
+ IEEE80211_NODE_UNLOCK(nt);
+ (*f)(arg, in);
+ ieee80211_free_node(in);
+ IEEE80211_NODE_LOCK(nt);
+ in = list_next(&nt->nt_node, in);
+ }
+ IEEE80211_NODE_UNLOCK(nt);
+}
+
+/*
+ * Handle bookkeeping for station deauthentication/disassociation
+ * when operating as an ap.
+ */
+static void
+ieee80211_node_leave(ieee80211com_t *ic, ieee80211_node_t *in)
+{
+ ieee80211_node_table_t *nt = in->in_table;
+
+ ASSERT(ic->ic_opmode == IEEE80211_M_IBSS);
+
+ /*
+ * Remove the node from any table it's recorded in and
+ * drop the caller's reference. Removal from the table
+ * is important to insure the node is not reprocessed
+ * for inactivity.
+ */
+ if (nt != NULL) {
+ IEEE80211_NODE_LOCK(nt);
+ ieee80211_node_reclaim(nt, in);
+ IEEE80211_NODE_UNLOCK(nt);
+ } else {
+ ieee80211_free_node(in);
+ }
+}
+
+/*
+ * Initialize a node table with specified name, inactivity timer value
+ * and callback inactivity timeout function. Associate the node table
+ * with interface softc, ic.
+ */
+static void
+ieee80211_node_table_init(ieee80211com_t *ic, ieee80211_node_table_t *nt,
+ const char *name, int inact, int keyixmax,
+ void (*timeout)(ieee80211_node_table_t *))
+{
+ int i;
+
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_node_table_init():"
+ "%s table, inact %d\n", name, inact);
+
+ nt->nt_ic = ic;
+ nt->nt_name = name;
+ nt->nt_inact_timer = 0;
+ nt->nt_inact_init = inact;
+ nt->nt_timeout = timeout;
+ nt->nt_keyixmax = keyixmax;
+ nt->nt_scangen = 1;
+ mutex_init(&nt->nt_scanlock, NULL, MUTEX_DRIVER, NULL);
+ mutex_init(&nt->nt_nodelock, NULL, MUTEX_DRIVER, NULL);
+
+ list_create(&nt->nt_node, sizeof (ieee80211_node_t),
+ offsetof(ieee80211_node_t, in_node));
+ for (i = 0; i < IEEE80211_NODE_HASHSIZE; i++) {
+ list_create(&nt->nt_hash[i], sizeof (ieee80211_node_t),
+ offsetof(ieee80211_node_t, in_hash));
+ }
+}
+
+/*
+ * Reset a node table. Clean its inactivity timer and call
+ * ieee80211_free_allnodes_locked() to free all nodes in the
+ * node table.
+ */
+void
+ieee80211_node_table_reset(ieee80211_node_table_t *nt)
+{
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_node_table_reset(): "
+ "%s table\n", nt->nt_name);
+
+ IEEE80211_NODE_LOCK(nt);
+ nt->nt_inact_timer = 0;
+ ieee80211_free_allnodes_locked(nt);
+ IEEE80211_NODE_UNLOCK(nt);
+}
+
+/*
+ * Destroy a node table. Free all nodes in the node table.
+ * This function is usually called by node detach function.
+ */
+static void
+ieee80211_node_table_cleanup(ieee80211_node_table_t *nt)
+{
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_node_table_cleanup(): "
+ "%s table\n", nt->nt_name);
+
+ IEEE80211_NODE_LOCK(nt);
+ ieee80211_free_allnodes_locked(nt);
+ IEEE80211_NODE_UNLOCK(nt);
+ mutex_destroy(&nt->nt_nodelock);
+ mutex_destroy(&nt->nt_scanlock);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_output.c b/usr/src/uts/common/io/net80211/net80211_output.c
new file mode 100644
index 0000000000..ca04fb0b4e
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_output.c
@@ -0,0 +1,723 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+
+/*
+ * Send out 802.11 frames
+ */
+
+#include <sys/byteorder.h>
+#include <sys/strsun.h>
+#include "net80211_impl.h"
+
+/*
+ * Set the direction field and address fields of an outgoing
+ * non-QoS frame. Note this should be called early on in
+ * constructing a frame as it sets i_fc[1]; other bits can
+ * then be or'd in.
+ */
+static void
+ieee80211_send_setup(ieee80211com_t *ic, ieee80211_node_t *in,
+ struct ieee80211_frame *wh, int type, const uint8_t *sa, const uint8_t *da,
+ const uint8_t *bssid)
+{
+ wh->i_fc[0] = (uint8_t)(IEEE80211_FC0_VERSION_0 | type);
+ if ((type & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_DATA) {
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ wh->i_fc[1] = IEEE80211_FC1_DIR_TODS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, bssid);
+ IEEE80211_ADDR_COPY(wh->i_addr2, sa);
+ IEEE80211_ADDR_COPY(wh->i_addr3, da);
+ break;
+ case IEEE80211_M_IBSS:
+ case IEEE80211_M_AHDEMO:
+ wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, da);
+ IEEE80211_ADDR_COPY(wh->i_addr2, sa);
+ IEEE80211_ADDR_COPY(wh->i_addr3, bssid);
+ break;
+ default:
+ ieee80211_err("ieee80211_send_setup: "
+ "Invalid mode %u\n", ic->ic_opmode);
+ return;
+ }
+ } else {
+ wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, da);
+ IEEE80211_ADDR_COPY(wh->i_addr2, sa);
+ IEEE80211_ADDR_COPY(wh->i_addr3, bssid);
+ }
+ *(uint16_t *)&wh->i_dur[0] = 0; /* set duration */
+ *(uint16_t *)&wh->i_seq[0] = /* set sequence number */
+ LE_16(in->in_txseqs[0] << IEEE80211_SEQ_SEQ_SHIFT);
+ in->in_txseqs[0]++; /* increase sequence number by 1 */
+}
+
+/*
+ * Send a management frame to the specified node. The node pointer
+ * must have a reference as the pointer will be passed to the driver
+ * and potentially held for a long time. If the frame is successfully
+ * dispatched to the driver, then it is responsible for freeing the
+ * reference (and potentially free'ing up any associated storage).
+ *
+ * Return 0 on success
+ */
+static int
+ieee80211_mgmt_output(ieee80211com_t *ic, ieee80211_node_t *in, mblk_t *mp,
+ int type, int timer)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+ struct ieee80211_frame *wh;
+
+ ASSERT(in != NULL);
+
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ ieee80211_send_setup(ic, in, wh, IEEE80211_FC0_TYPE_MGT | type,
+ ic->ic_macaddr, in->in_macaddr, in->in_bssid);
+ if (in->in_challenge != NULL)
+ wh->i_fc[1] |= IEEE80211_FC1_WEP;
+
+ if (timer > 0) {
+ /*
+ * Set the mgt frame timeout.
+ */
+ im->im_mgt_timer = timer;
+ ieee80211_start_watchdog(ic, 1);
+ }
+ return ((*ic->ic_xmit)(ic, mp, IEEE80211_FC0_TYPE_MGT));
+}
+
+/*
+ * Send a null data frame to the specified node.
+ *
+ * NB: the caller is assumed to have setup a node reference
+ * for use; this is necessary to deal with a race condition
+ * when probing for inactive stations.
+ */
+int
+ieee80211_send_nulldata(ieee80211_node_t *in)
+{
+ ieee80211com_t *ic = in->in_ic;
+ mblk_t *m;
+ struct ieee80211_frame *wh;
+ uint8_t *frm;
+
+ m = ieee80211_getmgtframe(&frm, 0);
+ if (m == NULL) {
+ ic->ic_stats.is_tx_nobuf++;
+ return (ENOMEM);
+ }
+
+ wh = (struct ieee80211_frame *)m->b_rptr;
+ ieee80211_send_setup(ic, in, wh,
+ IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_NODATA,
+ ic->ic_macaddr, in->in_macaddr, in->in_bssid);
+ /* NB: power management bit is never sent by an AP */
+ if ((in->in_flags & IEEE80211_NODE_PWR_MGT) &&
+ ic->ic_opmode != IEEE80211_M_HOSTAP)
+ wh->i_fc[1] |= IEEE80211_FC1_PWR_MGT;
+ m->b_wptr = m->b_rptr + sizeof (struct ieee80211_frame);
+
+ ieee80211_dbg(IEEE80211_MSG_DEBUG | IEEE80211_MSG_DUMPPKTS, "net80211: "
+ "send null data frame on channel %u, pwr mgt %s\n",
+ ieee80211_macaddr_sprintf(in->in_macaddr),
+ ieee80211_chan2ieee(ic, ic->ic_curchan),
+ wh->i_fc[1] & IEEE80211_FC1_PWR_MGT ? "ena" : "dis");
+
+ (void) (*ic->ic_xmit)(ic, m, IEEE80211_FC0_TYPE_MGT);
+
+ return (0);
+}
+
+/*
+ * Encapsulate an outbound data frame for GLDv3 based driver.
+ * Fill in the variable part of the 80211 frame
+ */
+/* ARGSUSED */
+mblk_t *
+ieee80211_encap(ieee80211com_t *ic, mblk_t *mp, ieee80211_node_t *in)
+{
+ struct ieee80211_frame *wh;
+
+ ASSERT(mp != NULL && MBLKL(mp) >= sizeof (struct ieee80211_frame));
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ *(uint16_t *)wh->i_dur = 0;
+ *(uint16_t *)wh->i_seq =
+ LE_16(in->in_txseqs[0] << IEEE80211_SEQ_SEQ_SHIFT);
+ in->in_txseqs[0]++;
+
+ return (mp);
+}
+
+/*
+ * Add supported rates information element to a frame.
+ */
+static uint8_t *
+ieee80211_add_rates(uint8_t *frm, const struct ieee80211_rateset *rs)
+{
+ uint8_t nrates;
+
+ *frm++ = IEEE80211_ELEMID_RATES;
+ nrates = rs->ir_nrates;
+ if (nrates > IEEE80211_RATE_SIZE)
+ nrates = IEEE80211_RATE_SIZE;
+ *frm++ = nrates;
+ bcopy(rs->ir_rates, frm, nrates);
+ return (frm + nrates);
+}
+
+/*
+ * Add extended supported rates element to a frame, usually for 11g mode
+ */
+static uint8_t *
+ieee80211_add_xrates(uint8_t *frm, const struct ieee80211_rateset *rs)
+{
+ if (rs->ir_nrates > IEEE80211_RATE_SIZE) {
+ uint8_t nrates = rs->ir_nrates - IEEE80211_RATE_SIZE;
+
+ *frm++ = IEEE80211_ELEMID_XRATES;
+ *frm++ = nrates;
+ bcopy(rs->ir_rates + IEEE80211_RATE_SIZE, frm, nrates);
+ frm += nrates;
+ }
+ return (frm);
+}
+
+/*
+ * Add SSID element to a frame
+ */
+static uint8_t *
+ieee80211_add_ssid(uint8_t *frm, const uint8_t *ssid, uint32_t len)
+{
+ *frm++ = IEEE80211_ELEMID_SSID;
+ *frm++ = (uint8_t)len;
+ bcopy(ssid, frm, len);
+ return (frm + len);
+}
+
+/*
+ * Add an erp element to a frame.
+ */
+static uint8_t *
+ieee80211_add_erp(uint8_t *frm, ieee80211com_t *ic)
+{
+ uint8_t erp;
+
+ *frm++ = IEEE80211_ELEMID_ERP;
+ *frm++ = 1;
+ erp = 0;
+ if (ic->ic_flags & IEEE80211_F_USEPROT)
+ erp |= IEEE80211_ERP_USE_PROTECTION;
+ if (ic->ic_flags & IEEE80211_F_USEBARKER)
+ erp |= IEEE80211_ERP_LONG_PREAMBLE;
+ *frm++ = erp;
+ return (frm);
+}
+
+/*
+ * Get capability information from the interface softc, ic.
+ */
+static uint16_t
+ieee80211_get_capinfo(ieee80211com_t *ic)
+{
+ uint16_t capinfo;
+
+ if (ic->ic_opmode == IEEE80211_M_IBSS)
+ capinfo = IEEE80211_CAPINFO_IBSS;
+ else
+ capinfo = IEEE80211_CAPINFO_ESS;
+ if (ic->ic_flags & IEEE80211_F_PRIVACY)
+ capinfo |= IEEE80211_CAPINFO_PRIVACY;
+ if ((ic->ic_flags & IEEE80211_F_SHPREAMBLE) &&
+ IEEE80211_IS_CHAN_2GHZ(ic->ic_curchan)) {
+ capinfo |= IEEE80211_CAPINFO_SHORT_PREAMBLE;
+ }
+ if (ic->ic_flags & IEEE80211_F_SHSLOT)
+ capinfo |= IEEE80211_CAPINFO_SHORT_SLOTTIME;
+
+ return (capinfo);
+}
+
+/*
+ * Send a probe request frame with the specified ssid
+ * and any optional information element data.
+ */
+int
+ieee80211_send_probereq(ieee80211_node_t *in,
+ const uint8_t *sa, const uint8_t *da, const uint8_t *bssid,
+ const uint8_t *ssid, size_t ssidlen, const void *optie, size_t optielen)
+{
+ mblk_t *mp;
+ ieee80211com_t *ic = in->in_ic;
+ enum ieee80211_phymode mode;
+ struct ieee80211_frame *wh;
+ uint8_t *frm;
+
+ /*
+ * prreq frame format ([tlv] - 1 byte element ID + 1 byte length)
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [tlv] extended supported rates
+ * [tlv] user-specified ie's
+ */
+ mp = ieee80211_getmgtframe(&frm,
+ 2 + IEEE80211_NWID_LEN
+ + 2 + IEEE80211_RATE_SIZE +
+ + 2 + IEEE80211_XRATE_SIZE
+ + optielen);
+ if (mp == NULL)
+ return (ENOMEM);
+
+ frm = ieee80211_add_ssid(frm, ssid, ssidlen);
+ mode = ieee80211_chan2mode(ic, ic->ic_curchan);
+ frm = ieee80211_add_rates(frm, &ic->ic_sup_rates[mode]);
+ frm = ieee80211_add_xrates(frm, &ic->ic_sup_rates[mode]);
+ if (optie != NULL) {
+ (void) memcpy(frm, optie, optielen);
+ frm += optielen;
+ }
+ mp->b_wptr = frm;
+
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ ieee80211_send_setup(ic, in, wh,
+ IEEE80211_FC0_TYPE_MGT | IEEE80211_FC0_SUBTYPE_PROBE_REQ,
+ sa, da, bssid);
+
+ ieee80211_dbg(IEEE80211_MSG_DEBUG | IEEE80211_MSG_DUMPPKTS,
+ "[%s] send probe req on channel %u\n",
+ ieee80211_macaddr_sprintf(wh->i_addr1),
+ ieee80211_chan2ieee(ic, ic->ic_curchan));
+
+ (void) (*ic->ic_xmit)(ic, mp, IEEE80211_FC0_TYPE_MGT);
+ return (0);
+}
+
+/*
+ * Send a management frame. The node is for the destination (or ic_bss
+ * when in station mode). Nodes other than ic_bss have their reference
+ * count bumped to reflect our use for an indeterminant time.
+ */
+int
+ieee80211_send_mgmt(ieee80211com_t *ic, ieee80211_node_t *in, int type, int arg)
+{
+ mblk_t *mp;
+ uint8_t *frm;
+ uint16_t capinfo;
+ struct ieee80211_key *key;
+ boolean_t has_challenge;
+ boolean_t is_shared_key;
+ int ret;
+ int timer;
+ int status;
+
+ ASSERT(in != NULL);
+
+ timer = 0;
+ switch (type) {
+ case IEEE80211_FC0_SUBTYPE_PROBE_RESP:
+ /*
+ * probe response frame format
+ * [8] time stamp
+ * [2] beacon interval
+ * [2] capability information
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [tlv] parameter set (FH/DS)
+ * [tlv] parameter set (IBSS)
+ * [tlv] extended rate phy (ERP)
+ * [tlv] extended supported rates
+ * [tlv] WPA
+ * [tlv] WME (optional)
+ */
+ mp = ieee80211_getmgtframe(&frm,
+ 8 /* time stamp */
+ + sizeof (uint16_t) /* beacon interval */
+ + sizeof (uint16_t) /* capability */
+ + 2 + IEEE80211_NWID_LEN
+ + 2 + IEEE80211_RATE_SIZE
+ + 2 + IEEE80211_FH_LEN
+ + 2 + IEEE80211_IBSS_LEN
+ + 2 + IEEE80211_ERP_LEN
+ + 2 + IEEE80211_XRATE_SIZE
+ + (ic->ic_flags & IEEE80211_F_WPA ?
+ 2 * sizeof (struct ieee80211_ie_wpa) : 0)
+ /* [tlv] WPA */
+ + (ic->ic_flags & IEEE80211_F_WME ?
+ sizeof (struct ieee80211_wme_param) : 0));
+ /* [tlv] WME */
+ if (mp == NULL)
+ return (ENOMEM);
+
+ bzero(frm, 8); /* timestamp is set by hardware/driver */
+ frm += 8;
+ *(uint16_t *)frm = LE_16(in->in_intval);
+ frm += 2;
+ capinfo = ieee80211_get_capinfo(ic);
+ *(uint16_t *)frm = LE_16(capinfo);
+ frm += 2;
+
+ frm = ieee80211_add_ssid(frm, in->in_essid, in->in_esslen);
+ frm = ieee80211_add_rates(frm, &in->in_rates);
+
+ if (ic->ic_phytype == IEEE80211_T_FH) {
+ *frm++ = IEEE80211_ELEMID_FHPARMS;
+ *frm++ = IEEE80211_FH_LEN;
+ *frm++ = in->in_fhdwell & 0x00ff;
+ *frm++ = (in->in_fhdwell >> 8) & 0x00ff;
+ *frm++ = IEEE80211_FH_CHANSET(
+ ieee80211_chan2ieee(ic, ic->ic_curchan));
+ *frm++ = IEEE80211_FH_CHANPAT(
+ ieee80211_chan2ieee(ic, ic->ic_curchan));
+ *frm++ = in->in_fhindex;
+ } else {
+ *frm++ = IEEE80211_ELEMID_DSPARMS;
+ *frm++ = IEEE80211_DS_LEN;
+ *frm++ = ieee80211_chan2ieee(ic, ic->ic_curchan);
+ }
+
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ *frm++ = IEEE80211_ELEMID_IBSSPARMS;
+ *frm++ = IEEE80211_IBSS_LEN;
+ *frm++ = 0; *frm++ = 0; /* ATIM window */
+ }
+ frm = ieee80211_add_xrates(frm, &in->in_rates);
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_AUTH:
+ status = arg >> 16;
+ arg &= 0xffff;
+ has_challenge = ((arg == IEEE80211_AUTH_SHARED_CHALLENGE ||
+ arg == IEEE80211_AUTH_SHARED_RESPONSE) &&
+ in->in_challenge != NULL);
+
+ /*
+ * Deduce whether we're doing open authentication or
+ * shared key authentication. We do the latter if
+ * we're in the middle of a shared key authentication
+ * handshake or if we're initiating an authentication
+ * request and configured to use shared key.
+ */
+ is_shared_key = has_challenge ||
+ arg >= IEEE80211_AUTH_SHARED_RESPONSE ||
+ (arg == IEEE80211_AUTH_SHARED_REQUEST &&
+ ic->ic_bss->in_authmode == IEEE80211_AUTH_SHARED);
+
+ if (has_challenge && status == IEEE80211_STATUS_SUCCESS)
+ key = ieee80211_crypto_getkey(ic);
+ else
+ key = NULL;
+
+ mp = ieee80211_getmgtframe(&frm,
+ 3 * sizeof (uint16_t)
+ + (has_challenge && status == IEEE80211_STATUS_SUCCESS ?
+ sizeof (uint16_t) + IEEE80211_CHALLENGE_LEN : 0)
+ + (key != NULL ? key->wk_cipher->ic_header : 0));
+ if (mp == NULL)
+ return (ENOMEM);
+
+ if (key != NULL)
+ frm += key->wk_cipher->ic_header;
+
+ ((uint16_t *)frm)[0] =
+ (is_shared_key) ? LE_16(IEEE80211_AUTH_ALG_SHARED)
+ : LE_16(IEEE80211_AUTH_ALG_OPEN);
+ ((uint16_t *)frm)[1] = LE_16(arg); /* sequence number */
+ ((uint16_t *)frm)[2] = LE_16(status); /* status */
+
+ if (has_challenge && status == IEEE80211_STATUS_SUCCESS) {
+ frm += IEEE80211_AUTH_ELEM_MIN;
+ *frm = IEEE80211_ELEMID_CHALLENGE;
+ frm++;
+ *frm = IEEE80211_CHALLENGE_LEN;
+ frm++;
+ bcopy(in->in_challenge, frm, IEEE80211_CHALLENGE_LEN);
+ }
+
+ if (ic->ic_opmode == IEEE80211_M_STA)
+ timer = IEEE80211_TRANS_WAIT;
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_DEAUTH:
+ mp = ieee80211_getmgtframe(&frm, sizeof (uint16_t));
+ if (mp == NULL)
+ return (ENOMEM);
+
+ *(uint16_t *)frm = LE_16(arg); /* reason */
+
+ ieee80211_node_unauthorize(in); /* port closed */
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_ASSOC_REQ:
+ case IEEE80211_FC0_SUBTYPE_REASSOC_REQ:
+ /*
+ * asreq frame format
+ * [2] capability information
+ * [2] listen interval
+ * [6*] current AP address (reassoc only)
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [tlv] extended supported rates
+ * [tlv] WME
+ * [tlv] user-specified ie's
+ */
+ mp = ieee80211_getmgtframe(&frm,
+ sizeof (uint16_t)
+ + sizeof (uint16_t) + IEEE80211_ADDR_LEN
+ + 2 + IEEE80211_NWID_LEN
+ + 2 + IEEE80211_RATE_SIZE
+ + 2 + IEEE80211_XRATE_SIZE
+ + ic->ic_opt_ie_len);
+ if (mp == NULL)
+ return (ENOMEM);
+
+ capinfo = ieee80211_get_capinfo(ic);
+ if (!(in->in_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) ||
+ !(ic->ic_caps & IEEE80211_C_SHSLOT)) {
+ capinfo &= ~IEEE80211_CAPINFO_SHORT_SLOTTIME;
+ }
+ *(uint16_t *)frm = LE_16(capinfo);
+ frm += 2;
+
+ *(uint16_t *)frm = LE_16(ic->ic_lintval);
+ frm += 2;
+
+ if (type == IEEE80211_FC0_SUBTYPE_REASSOC_REQ) {
+ IEEE80211_ADDR_COPY(frm, ic->ic_bss->in_bssid);
+ frm += IEEE80211_ADDR_LEN;
+ }
+
+ frm = ieee80211_add_ssid(frm, in->in_essid, in->in_esslen);
+ frm = ieee80211_add_rates(frm, &in->in_rates);
+ frm = ieee80211_add_xrates(frm, &in->in_rates);
+ if (ic->ic_opt_ie != NULL) {
+ bcopy(ic->ic_opt_ie, frm, ic->ic_opt_ie_len);
+ frm += ic->ic_opt_ie_len;
+ }
+ mp->b_wptr = frm; /* allocated is greater than used */
+
+ timer = IEEE80211_TRANS_WAIT;
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_ASSOC_RESP:
+ case IEEE80211_FC0_SUBTYPE_REASSOC_RESP:
+ /*
+ * asreq frame format
+ * [2] capability information
+ * [2] status
+ * [2] association ID
+ * [tlv] supported rates
+ * [tlv] extended supported rates
+ * [tlv] WME (if enabled and STA enabled)
+ */
+ mp = ieee80211_getmgtframe(&frm,
+ 3 * sizeof (uint16_t)
+ + 2 + IEEE80211_RATE_SIZE
+ + 2 + IEEE80211_XRATE_SIZE);
+ if (mp == NULL)
+ return (ENOMEM);
+
+ capinfo = ieee80211_get_capinfo(ic);
+ *(uint16_t *)frm = LE_16(capinfo);
+ frm += 2;
+
+ *(uint16_t *)frm = LE_16(arg); /* status */
+ frm += 2;
+
+ if (arg == IEEE80211_STATUS_SUCCESS)
+ *(uint16_t *)frm = LE_16(in->in_associd);
+ else
+ *(uint16_t *)frm = LE_16(0);
+ frm += 2;
+
+ frm = ieee80211_add_rates(frm, &in->in_rates);
+ frm = ieee80211_add_xrates(frm, &in->in_rates);
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_DISASSOC:
+ mp = ieee80211_getmgtframe(&frm, sizeof (uint16_t));
+ if (mp == NULL)
+ return (ENOMEM);
+ *(uint16_t *)frm = LE_16(arg); /* reason */
+ break;
+
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ANY,
+ "[%s] invalid mgmt frame type %u\n",
+ ieee80211_macaddr_sprintf(in->in_macaddr), type);
+ return (EINVAL);
+ } /* type */
+ ret = ieee80211_mgmt_output(ic, in, mp, type, timer);
+ return (ret);
+}
+
+/*
+ * Allocate a beacon frame and fillin the appropriate bits.
+ */
+mblk_t *
+ieee80211_beacon_alloc(ieee80211com_t *ic, ieee80211_node_t *in,
+ struct ieee80211_beacon_offsets *bo)
+{
+ struct ieee80211_frame *wh;
+ struct ieee80211_rateset *rs;
+ mblk_t *m;
+ uint8_t *frm;
+ uint8_t *efrm;
+ int pktlen;
+ uint16_t capinfo;
+
+ IEEE80211_LOCK(ic);
+ /*
+ * beacon frame format
+ * [8] time stamp
+ * [2] beacon interval
+ * [2] cabability information
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [3] parameter set (DS)
+ * [tlv] parameter set (IBSS/TIM)
+ * [tlv] extended rate phy (ERP)
+ * [tlv] extended supported rates
+ * [tlv] WME parameters
+ * [tlv] WPA/RSN parameters
+ * Vendor-specific OIDs (e.g. Atheros)
+ * NB: we allocate the max space required for the TIM bitmap.
+ */
+ rs = &in->in_rates;
+ pktlen = 8 /* time stamp */
+ + sizeof (uint16_t) /* beacon interval */
+ + sizeof (uint16_t) /* capabilities */
+ + 2 + in->in_esslen /* ssid */
+ + 2 + IEEE80211_RATE_SIZE /* supported rates */
+ + 2 + 1 /* DS parameters */
+ + 2 + 4 + ic->ic_tim_len /* DTIM/IBSSPARMS */
+ + 2 + 1 /* ERP */
+ + 2 + IEEE80211_XRATE_SIZE;
+ m = ieee80211_getmgtframe(&frm, pktlen);
+ if (m == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_beacon_alloc: "
+ "cannot get buf; size %u\n", pktlen);
+ IEEE80211_UNLOCK(ic);
+ return (NULL);
+ }
+
+ /* timestamp is set by hardware/driver */
+ (void) memset(frm, 0, 8);
+ frm += 8;
+ *(uint16_t *)frm = LE_16(in->in_intval);
+ frm += 2;
+ capinfo = ieee80211_get_capinfo(ic);
+ bo->bo_caps = (uint16_t *)frm;
+ *(uint16_t *)frm = LE_16(capinfo);
+ frm += 2;
+ *frm++ = IEEE80211_ELEMID_SSID;
+ if (!(ic->ic_flags & IEEE80211_F_HIDESSID)) {
+ *frm++ = in->in_esslen;
+ bcopy(in->in_essid, frm, in->in_esslen);
+ frm += in->in_esslen;
+ } else {
+ *frm++ = 0;
+ }
+ frm = ieee80211_add_rates(frm, rs);
+ if (ic->ic_curmode != IEEE80211_MODE_FH) {
+ *frm++ = IEEE80211_ELEMID_DSPARMS;
+ *frm++ = 1;
+ *frm++ = ieee80211_chan2ieee(ic, in->in_chan);
+ }
+ bo->bo_tim = frm;
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ *frm++ = IEEE80211_ELEMID_IBSSPARMS;
+ *frm++ = 2;
+ *frm++ = 0; *frm++ = 0; /* TODO: ATIM window */
+ bo->bo_tim_len = 0;
+ } else {
+ struct ieee80211_tim_ie *tie =
+ (struct ieee80211_tim_ie *)frm;
+
+ tie->tim_ie = IEEE80211_ELEMID_TIM;
+ tie->tim_len = 4; /* length */
+ tie->tim_count = 0; /* DTIM count */
+ tie->tim_period = IEEE80211_DTIM_DEFAULT;
+ tie->tim_bitctl = 0; /* bitmap control */
+ tie->tim_bitmap[0] = 0; /* Partial Virtual Bitmap */
+ frm += sizeof (struct ieee80211_tim_ie);
+ bo->bo_tim_len = 1;
+ }
+ bo->bo_trailer = frm;
+
+ if (ic->ic_curmode == IEEE80211_MODE_11G) {
+ bo->bo_erp = frm;
+ frm = ieee80211_add_erp(frm, ic);
+ }
+ efrm = ieee80211_add_xrates(frm, rs);
+ bo->bo_trailer_len = efrm - bo->bo_trailer;
+ m->b_wptr = efrm;
+
+ wh = (struct ieee80211_frame *)m->b_rptr;
+ wh->i_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_MGT |
+ IEEE80211_FC0_SUBTYPE_BEACON;
+ wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
+ *(uint16_t *)wh->i_dur = 0;
+ IEEE80211_ADDR_COPY(wh->i_addr1, wifi_bcastaddr);
+ IEEE80211_ADDR_COPY(wh->i_addr2, ic->ic_macaddr);
+ IEEE80211_ADDR_COPY(wh->i_addr3, in->in_bssid);
+ *(uint16_t *)wh->i_seq = 0;
+
+ IEEE80211_UNLOCK(ic);
+ return (m);
+}
+
+/*
+ * Update the dynamic parts of a beacon frame based on the current state.
+ */
+/* ARGSUSED */
+int
+ieee80211_beacon_update(ieee80211com_t *ic, ieee80211_node_t *in,
+ struct ieee80211_beacon_offsets *bo, mblk_t *mp, int mcast)
+{
+ uint16_t capinfo;
+
+ IEEE80211_LOCK(ic);
+
+ capinfo = ieee80211_get_capinfo(ic);
+ *bo->bo_caps = LE_16(capinfo);
+
+ IEEE80211_UNLOCK(ic);
+ return (0);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_proto.c b/usr/src/uts/common/io/net80211/net80211_proto.c
new file mode 100644
index 0000000000..0f92262d5c
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_proto.c
@@ -0,0 +1,669 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * IEEE 802.11 protocol support
+ */
+
+#include "net80211_impl.h"
+
+const char *ieee80211_mgt_subtype_name[] = {
+ "assoc_req", "assoc_resp", "reassoc_req", "reassoc_resp",
+ "probe_req", "probe_resp", "reserved#6", "reserved#7",
+ "beacon", "atim", "disassoc", "auth",
+ "deauth", "reserved#13", "reserved#14", "reserved#15"
+};
+const char *ieee80211_ctl_subtype_name[] = {
+ "reserved#0", "reserved#1", "reserved#2", "reserved#3",
+ "reserved#3", "reserved#5", "reserved#6", "reserved#7",
+ "reserved#8", "reserved#9", "ps_poll", "rts",
+ "cts", "ack", "cf_end", "cf_end_ack"
+};
+const char *ieee80211_state_name[IEEE80211_S_MAX] = {
+ "INIT", /* IEEE80211_S_INIT */
+ "SCAN", /* IEEE80211_S_SCAN */
+ "AUTH", /* IEEE80211_S_AUTH */
+ "ASSOC", /* IEEE80211_S_ASSOC */
+ "RUN" /* IEEE80211_S_RUN */
+};
+
+static int ieee80211_newstate(ieee80211com_t *, enum ieee80211_state, int);
+
+/*
+ * Initialize the interface softc, ic, with protocol management
+ * related data structures and functions.
+ */
+void
+ieee80211_proto_attach(ieee80211com_t *ic)
+{
+ struct ieee80211_impl *im = ic->ic_private;
+
+ ic->ic_rtsthreshold = IEEE80211_RTS_DEFAULT;
+ ic->ic_fragthreshold = IEEE80211_FRAG_DEFAULT;
+ ic->ic_fixed_rate = IEEE80211_FIXED_RATE_NONE;
+ ic->ic_mcast_rate = IEEE80211_MCAST_RATE_DEFAULT;
+ ic->ic_protmode = IEEE80211_PROT_CTSONLY;
+ im->im_bmiss_max = IEEE80211_BMISS_MAX;
+
+ /* protocol state change handler */
+ ic->ic_newstate = ieee80211_newstate;
+
+ /* initialize management frame handlers */
+ ic->ic_recv_mgmt = ieee80211_recv_mgmt;
+ ic->ic_send_mgmt = ieee80211_send_mgmt;
+}
+
+/*
+ * Print a 802.11 frame header
+ */
+void
+ieee80211_dump_pkt(const uint8_t *buf, int32_t len, int32_t rate, int32_t rssi)
+{
+ struct ieee80211_frame *wh;
+ int8_t buf1[100];
+ int8_t buf2[25];
+ int i;
+
+ bzero(buf1, sizeof (buf1));
+ bzero(buf2, sizeof (buf2));
+ wh = (struct ieee80211_frame *)buf;
+ switch (wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) {
+ case IEEE80211_FC1_DIR_NODS:
+ (void) snprintf(buf2, sizeof (buf2), "NODS %s",
+ ieee80211_macaddr_sprintf(wh->i_addr2));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "->%s",
+ ieee80211_macaddr_sprintf(wh->i_addr1));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "(%s)",
+ ieee80211_macaddr_sprintf(wh->i_addr3));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ break;
+ case IEEE80211_FC1_DIR_TODS:
+ (void) snprintf(buf2, sizeof (buf2), "TODS %s",
+ ieee80211_macaddr_sprintf(wh->i_addr2));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "->%s",
+ ieee80211_macaddr_sprintf(wh->i_addr3));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "(%s)",
+ ieee80211_macaddr_sprintf(wh->i_addr1));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ break;
+ case IEEE80211_FC1_DIR_FROMDS:
+ (void) snprintf(buf2, sizeof (buf2), "FRDS %s",
+ ieee80211_macaddr_sprintf(wh->i_addr3));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "->%s",
+ ieee80211_macaddr_sprintf(wh->i_addr1));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "(%s)",
+ ieee80211_macaddr_sprintf(wh->i_addr2));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ break;
+ case IEEE80211_FC1_DIR_DSTODS:
+ (void) snprintf(buf2, sizeof (buf2), "DSDS %s",
+ ieee80211_macaddr_sprintf((uint8_t *)&wh[1]));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "->%s ",
+ ieee80211_macaddr_sprintf(wh->i_addr3));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "%s",
+ ieee80211_macaddr_sprintf(wh->i_addr2));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "->%s",
+ ieee80211_macaddr_sprintf(wh->i_addr1));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ break;
+ }
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_dump_pkt(): %s", buf1);
+ bzero(buf1, sizeof (buf1));
+
+ switch (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) {
+ case IEEE80211_FC0_TYPE_DATA:
+ (void) sprintf(buf2, "data");
+ break;
+ case IEEE80211_FC0_TYPE_MGT:
+ (void) snprintf(buf2, sizeof (buf2), "%s",
+ ieee80211_mgt_subtype_name[
+ (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK)
+ >> IEEE80211_FC0_SUBTYPE_SHIFT]);
+ break;
+ default:
+ (void) snprintf(buf2, sizeof (buf2), "type#%d",
+ wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK);
+ break;
+ }
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
+ (void) sprintf(buf2, " WEP");
+ (void) strcat(buf1, buf2);
+ }
+ if (rate >= 0) {
+ (void) snprintf(buf2, sizeof (buf2), " %dM", rate / 2);
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ }
+ if (rssi >= 0) {
+ (void) snprintf(buf2, sizeof (buf2), " +%d", rssi);
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ }
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_dump_pkt(): %s", buf1);
+ bzero(buf1, sizeof (buf1));
+
+ if (len > 0) {
+ for (i = 0; i < (len > 40 ? 40 : len); i++) {
+ if ((i & 0x03) == 0)
+ (void) strcat(buf1, " ");
+ (void) snprintf(buf2, 3, "%02x", buf[i]);
+ (void) strncat(buf1, buf2, 3);
+ }
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_dump_pkt(): %s",
+ buf1);
+ }
+}
+
+/*
+ * Adjust/Fix the specified node's rate table
+ *
+ * in node
+ * flag IEEE80211_F_DOSORT : sort the node's rate table
+ * IEEE80211_F_DONEGO : mark a rate as basic rate if it is
+ * a device's basic rate
+ * IEEE80211_F_DODEL : delete rates not supported by the device
+ * IEEE80211_F_DOFRATE: check if the fixed rate is supported by
+ * the device
+ *
+ * The highest bit of returned rate value is set to 1 on failure.
+ */
+int
+ieee80211_fix_rate(ieee80211_node_t *in, int flags)
+{
+ ieee80211com_t *ic = in->in_ic;
+ struct ieee80211_rateset *srs;
+ struct ieee80211_rateset *nrs;
+ boolean_t ignore;
+ int i;
+ int okrate;
+ int badrate;
+ int fixedrate;
+ uint8_t r;
+
+ /*
+ * If the fixed rate check was requested but no
+ * fixed has been defined then just remove it.
+ */
+ if ((flags & IEEE80211_F_DOFRATE) &&
+ (ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE)) {
+ flags &= ~IEEE80211_F_DOFRATE;
+ }
+ okrate = badrate = fixedrate = 0;
+ srs = &ic->ic_sup_rates[ieee80211_chan2mode(ic, in->in_chan)];
+ nrs = &in->in_rates;
+ for (i = 0; i < nrs->ir_nrates; ) {
+ int j;
+
+ ignore = B_FALSE;
+ if (flags & IEEE80211_F_DOSORT) {
+ /*
+ * Sort rates.
+ */
+ for (j = i + 1; j < nrs->ir_nrates; j++) {
+ if (IEEE80211_RV(nrs->ir_rates[i]) >
+ IEEE80211_RV(nrs->ir_rates[j])) {
+ r = nrs->ir_rates[i];
+ nrs->ir_rates[i] = nrs->ir_rates[j];
+ nrs->ir_rates[j] = r;
+ }
+ }
+ }
+ r = IEEE80211_RV(nrs->ir_rates[i]);
+ badrate = r;
+
+ /*
+ * Check against supported rates.
+ */
+ for (j = 0; j < srs->ir_nrates; j++) {
+ if (r == IEEE80211_RV(srs->ir_rates[j])) {
+ /*
+ * Overwrite with the supported rate
+ * value so any basic rate bit is set.
+ * This insures that response we send
+ * to stations have the necessary basic
+ * rate bit set.
+ */
+ if (flags & IEEE80211_F_DONEGO)
+ nrs->ir_rates[i] = srs->ir_rates[j];
+ break;
+ }
+ }
+ if (j == srs->ir_nrates) {
+ /*
+ * A rate in the node's rate set is not
+ * supported. We just discard/ignore the rate.
+ * Note that this is important for 11b stations
+ * when they want to associate with an 11g AP.
+ */
+ ignore = B_TRUE;
+ }
+
+ if (flags & IEEE80211_F_DODEL) {
+ /*
+ * Delete unacceptable rates.
+ */
+ if (ignore) {
+ nrs->ir_nrates--;
+ for (j = i; j < nrs->ir_nrates; j++)
+ nrs->ir_rates[j] = nrs->ir_rates[j + 1];
+ nrs->ir_rates[j] = 0;
+ continue;
+ }
+ }
+ if (flags & IEEE80211_F_DOFRATE) {
+ /*
+ * Check any fixed rate is included.
+ */
+ if (r == ic->ic_fixed_rate)
+ fixedrate = r;
+ }
+ if (!ignore)
+ okrate = nrs->ir_rates[i];
+ i++;
+ }
+ if (okrate == 0 || ((flags & IEEE80211_F_DOFRATE) && fixedrate == 0))
+ return (badrate | IEEE80211_RATE_BASIC);
+ else
+ return (IEEE80211_RV(okrate));
+}
+
+/*
+ * Reset 11g-related state.
+ */
+void
+ieee80211_reset_erp(ieee80211com_t *ic)
+{
+ ic->ic_flags &= ~IEEE80211_F_USEPROT;
+ /*
+ * Short slot time is enabled only when operating in 11g
+ * and not in an IBSS. We must also honor whether or not
+ * the driver is capable of doing it.
+ */
+ ieee80211_set_shortslottime(ic,
+ ic->ic_curmode == IEEE80211_MODE_11A);
+ /*
+ * Set short preamble and ERP barker-preamble flags.
+ */
+ if (ic->ic_curmode == IEEE80211_MODE_11A ||
+ (ic->ic_caps & IEEE80211_C_SHPREAMBLE)) {
+ ic->ic_flags |= IEEE80211_F_SHPREAMBLE;
+ ic->ic_flags &= ~IEEE80211_F_USEBARKER;
+ } else {
+ ic->ic_flags &= ~IEEE80211_F_SHPREAMBLE;
+ ic->ic_flags |= IEEE80211_F_USEBARKER;
+ }
+}
+
+/*
+ * Change current channel to be the next available channel
+ */
+void
+ieee80211_reset_chan(ieee80211com_t *ic)
+{
+ struct ieee80211_channel *ch = ic->ic_curchan;
+
+ IEEE80211_LOCK(ic);
+ do {
+ if (++ch > &ic->ic_sup_channels[IEEE80211_CHAN_MAX])
+ ch = &ic->ic_sup_channels[0];
+ if (ieee80211_isset(ic->ic_chan_active,
+ ieee80211_chan2ieee(ic, ch))) {
+ break;
+ }
+ } while (ch != ic->ic_curchan);
+ ic->ic_curchan = ch;
+ IEEE80211_UNLOCK(ic);
+}
+
+/*
+ * Set the short slot time state and notify the driver.
+ */
+void
+ieee80211_set_shortslottime(ieee80211com_t *ic, boolean_t on)
+{
+ if (on)
+ ic->ic_flags |= IEEE80211_F_SHSLOT;
+ else
+ ic->ic_flags &= ~IEEE80211_F_SHSLOT;
+ /* notify driver */
+ if (ic->ic_set_shortslot != NULL)
+ ic->ic_set_shortslot(ic, on);
+}
+
+/*
+ * Mark the basic rates for the 11g rate table based on the
+ * operating mode. For real 11g we mark all the 11b rates
+ * and 6, 12, and 24 OFDM. For 11b compatibility we mark only
+ * 11b rates. There's also a pseudo 11a-mode used to mark only
+ * the basic OFDM rates.
+ */
+void
+ieee80211_setbasicrates(struct ieee80211_rateset *rs,
+ enum ieee80211_phymode mode)
+{
+ static const struct ieee80211_rateset basic[] = {
+ { 0 }, /* IEEE80211_MODE_AUTO */
+ { 3, { 12, 24, 48 } }, /* IEEE80211_MODE_11A */
+ { 2, { 2, 4} }, /* IEEE80211_MODE_11B */
+ { 4, { 2, 4, 11, 22 } }, /* IEEE80211_MODE_11G mixed b/g */
+ { 0 }, /* IEEE80211_MODE_FH */
+ { 3, { 12, 24, 48 } }, /* IEEE80211_MODE_TURBO_A */
+ { 4, { 2, 4, 11, 22 } } /* IEEE80211_MODE_TURBO_G (mixed b/g) */
+ };
+ int i, j;
+
+ ASSERT(mode < IEEE80211_MODE_MAX);
+ for (i = 0; i < rs->ir_nrates; i++) {
+ rs->ir_rates[i] &= IEEE80211_RATE_VAL;
+ for (j = 0; j < basic[mode].ir_nrates; j++) {
+ if (basic[mode].ir_rates[j] == rs->ir_rates[i]) {
+ rs->ir_rates[i] |= IEEE80211_RATE_BASIC;
+ break;
+ }
+ }
+ }
+}
+
+/*
+ * Process STA mode beacon miss events. Send a direct probe request
+ * frame to the current ap bmiss_max times (w/o answer) before
+ * scanning for a new ap.
+ */
+void
+ieee80211_beacon_miss(ieee80211com_t *ic)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+
+ if (ic->ic_flags & IEEE80211_F_SCAN)
+ return;
+ ieee80211_dbg(IEEE80211_MSG_STATE | IEEE80211_MSG_DEBUG,
+ "%s\n", "beacon miss");
+
+ /*
+ * Our handling is only meaningful for stations that are
+ * associated; any other conditions else will be handled
+ * through different means (e.g. the tx timeout on mgt frames).
+ */
+ if (ic->ic_opmode != IEEE80211_M_STA ||
+ ic->ic_state != IEEE80211_S_RUN) {
+ return;
+ }
+
+ IEEE80211_LOCK(ic);
+ if (++im->im_bmiss_count < im->im_bmiss_max) {
+ /*
+ * Send a directed probe req before falling back to a scan;
+ * if we receive a response ic_bmiss_count will be reset.
+ * Some cards mistakenly report beacon miss so this avoids
+ * the expensive scan if the ap is still there.
+ */
+ IEEE80211_UNLOCK(ic);
+ (void) ieee80211_send_probereq(ic->ic_bss, ic->ic_macaddr,
+ ic->ic_bss->in_bssid, ic->ic_bss->in_bssid,
+ ic->ic_bss->in_essid, ic->ic_bss->in_esslen,
+ ic->ic_opt_ie, ic->ic_opt_ie_len);
+ return;
+ }
+ im->im_bmiss_count = 0;
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, 0);
+}
+
+/*
+ * Manage state transition between INIT | AUTH | ASSOC | RUN.
+ */
+static int
+ieee80211_newstate(ieee80211com_t *ic, enum ieee80211_state nstate, int arg)
+{
+ struct ieee80211_impl *im = ic->ic_private;
+ ieee80211_node_t *in;
+ enum ieee80211_state ostate;
+ wifi_data_t wd = { 0 };
+
+ IEEE80211_LOCK(ic);
+ ostate = ic->ic_state;
+ ieee80211_dbg(IEEE80211_MSG_STATE, "ieee80211_newstate(): "
+ "%s -> %s\n",
+ ieee80211_state_name[ostate], ieee80211_state_name[nstate]);
+ ic->ic_state = nstate;
+ in = ic->ic_bss;
+ im->im_swbmiss_period = 0; /* Reset software beacon miss period */
+
+ switch (nstate) {
+ case IEEE80211_S_INIT:
+ IEEE80211_UNLOCK(ic);
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ return (0);
+ case IEEE80211_S_SCAN:
+ ieee80211_cancel_scan(ic);
+ break;
+ case IEEE80211_S_AUTH:
+ break;
+ case IEEE80211_S_ASSOC:
+ if (ic->ic_opmode == IEEE80211_M_STA) {
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_DEAUTH,
+ IEEE80211_REASON_AUTH_LEAVE);
+ }
+ break;
+ case IEEE80211_S_RUN:
+ if (ic->ic_opmode == IEEE80211_M_STA) {
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_DISASSOC,
+ IEEE80211_REASON_ASSOC_LEAVE);
+ ieee80211_sta_leave(ic, in);
+ }
+ break;
+ }
+ IEEE80211_LOCK(ic);
+ im->im_mgt_timer = 0;
+ ieee80211_reset_bss(ic);
+ break;
+ case IEEE80211_S_SCAN:
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ if (ic->ic_opmode == IEEE80211_M_IBSS &&
+ ic->ic_des_chan != IEEE80211_CHAN_ANYC) {
+ /*
+ * AP operation and we already have a channel;
+ * bypass the scan and startup immediately.
+ */
+ ieee80211_create_ibss(ic, ic->ic_des_chan);
+ } else {
+ IEEE80211_UNLOCK(ic);
+ ieee80211_begin_scan(ic,
+ (arg == 0) ? B_FALSE : B_TRUE);
+ return (0);
+ }
+ break;
+ case IEEE80211_S_SCAN:
+ /*
+ * Scan next. If doing an active scan and the
+ * channel is not marked passive-only then send
+ * a probe request. Otherwise just listen for
+ * beacons on the channel.
+ */
+ if ((ic->ic_flags & IEEE80211_F_ASCAN) &&
+ !IEEE80211_IS_CHAN_PASSIVE(ic->ic_curchan)) {
+ IEEE80211_UNLOCK(ic);
+ (void) ieee80211_send_probereq(in,
+ ic->ic_macaddr, wifi_bcastaddr,
+ wifi_bcastaddr,
+ ic->ic_des_essid, ic->ic_des_esslen,
+ ic->ic_opt_ie, ic->ic_opt_ie_len);
+ return (0);
+ }
+ break;
+ case IEEE80211_S_RUN:
+ /* beacon miss */
+ ieee80211_dbg(IEEE80211_MSG_STATE,
+ "no recent beacons from %s, rescanning\n",
+ ieee80211_macaddr_sprintf(in->in_macaddr));
+ IEEE80211_UNLOCK(ic);
+ ieee80211_sta_leave(ic, in);
+ IEEE80211_LOCK(ic);
+ ic->ic_flags &= ~IEEE80211_F_SIBSS;
+ /* FALLTHRU */
+ case IEEE80211_S_AUTH:
+ case IEEE80211_S_ASSOC:
+ /* timeout restart scan */
+ in = ieee80211_find_node(&ic->ic_scan,
+ ic->ic_bss->in_macaddr);
+ if (in != NULL) {
+ in->in_fails++;
+ ieee80211_unref_node(&in);
+ }
+ break;
+ }
+ break;
+ case IEEE80211_S_AUTH:
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ case IEEE80211_S_SCAN:
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in, IEEE80211_FC0_SUBTYPE_AUTH,
+ 1);
+ return (0);
+ case IEEE80211_S_AUTH:
+ case IEEE80211_S_ASSOC:
+ switch (arg) {
+ case IEEE80211_FC0_SUBTYPE_AUTH:
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_AUTH, 2);
+ return (0);
+ case IEEE80211_FC0_SUBTYPE_DEAUTH:
+ /* ignore and retry scan on timeout */
+ break;
+ }
+ break;
+ case IEEE80211_S_RUN:
+ switch (arg) {
+ case IEEE80211_FC0_SUBTYPE_AUTH:
+ ic->ic_state = ostate; /* stay RUN */
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_AUTH, 2);
+ return (0);
+ case IEEE80211_FC0_SUBTYPE_DEAUTH:
+ IEEE80211_UNLOCK(ic);
+ ieee80211_sta_leave(ic, in);
+ /* try to re-auth */
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_AUTH, 1);
+ return (0);
+ }
+ break;
+ }
+ break;
+ case IEEE80211_S_ASSOC:
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ case IEEE80211_S_SCAN:
+ case IEEE80211_S_ASSOC:
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_newstate: "
+ "invalid transition\n");
+ break;
+ case IEEE80211_S_AUTH:
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 0);
+ return (0);
+ case IEEE80211_S_RUN:
+ IEEE80211_UNLOCK(ic);
+ ieee80211_sta_leave(ic, in);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 1);
+ return (0);
+ }
+ break;
+ case IEEE80211_S_RUN:
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ ieee80211_err("ieee80211_newstate: "
+ "invalid transition\n");
+ break;
+ case IEEE80211_S_AUTH:
+ ieee80211_err("ieee80211_newstate: "
+ "invalid transition\n");
+ break;
+ case IEEE80211_S_SCAN: /* adhoc/hostap mode */
+ case IEEE80211_S_ASSOC: /* infra mode */
+ ASSERT(in->in_txrate < in->in_rates.ir_nrates);
+ im->im_mgt_timer = 0;
+ if (ic->ic_opmode == IEEE80211_M_STA)
+ ieee80211_notify_node_join(ic, in);
+
+ /*
+ * We can send data now; update the fastpath with our
+ * current associated BSSID and other relevant settings.
+ */
+ wd.wd_secalloc = ieee80211_crypto_getciphertype(ic);
+ wd.wd_opmode = ic->ic_opmode;
+ IEEE80211_ADDR_COPY(wd.wd_bssid, in->in_bssid);
+ (void) mac_pdata_update(ic->ic_mach, &wd, sizeof (wd));
+ break;
+ }
+
+ /*
+ * When 802.1x is not in use mark the port authorized
+ * at this point so traffic can flow.
+ */
+ if (in->in_authmode != IEEE80211_AUTH_8021X)
+ ieee80211_node_authorize(in);
+ /*
+ * Enable inactivity processing.
+ */
+ ic->ic_scan.nt_inact_timer = IEEE80211_INACT_WAIT;
+ ic->ic_sta.nt_inact_timer = IEEE80211_INACT_WAIT;
+ break; /* IEEE80211_S_RUN */
+ } /* switch nstate */
+ IEEE80211_UNLOCK(ic);
+
+ return (0);
+}
diff --git a/usr/src/uts/common/sys/dld.h b/usr/src/uts/common/sys/dld.h
index 4e32398c21..783f581e68 100644
--- a/usr/src/uts/common/sys/dld.h
+++ b/usr/src/uts/common/sys/dld.h
@@ -108,6 +108,40 @@ typedef struct dld_vlan_info {
char dvi_name[IFNAMSIZ];
} dld_vlan_info_t;
+/*
+ * Secure objects ioctls
+ */
+typedef enum {
+ DLD_SECOBJ_CLASS_WEP = 1
+} dld_secobj_class_t;
+
+#define DLD_SECOBJ_OPT_CREATE 0x00000001
+#define DLD_SECOBJ_NAME_MAX 32
+#define DLD_SECOBJ_VAL_MAX 256
+typedef struct dld_secobj {
+ char so_name[DLD_SECOBJ_NAME_MAX];
+ dld_secobj_class_t so_class;
+ uint8_t so_val[DLD_SECOBJ_VAL_MAX];
+ uint_t so_len;
+} dld_secobj_t;
+
+#define DLDIOCSECOBJSET (DLDIOC | 0x05)
+typedef struct dld_ioc_secobj_set {
+ dld_secobj_t ss_obj;
+ uint_t ss_flags;
+} dld_ioc_secobj_set_t;
+
+#define DLDIOCSECOBJGET (DLDIOC | 0x06)
+typedef struct dld_ioc_secobj_get {
+ dld_secobj_t sg_obj;
+ uint_t sg_count;
+} dld_ioc_secobj_get_t;
+
+#define DLDIOCSECOBJUNSET (DLDIOC | 0x07)
+typedef struct dld_ioc_secobj_unset {
+ char su_name[DLD_SECOBJ_NAME_MAX];
+} dld_ioc_secobj_unset_t;
+
#ifdef _KERNEL
int dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
int dld_open(queue_t *, dev_t *, int, int, cred_t *);
diff --git a/usr/src/uts/common/sys/dld_impl.h b/usr/src/uts/common/sys/dld_impl.h
index bd61db8dc4..356bd4dd1b 100644
--- a/usr/src/uts/common/sys/dld_impl.h
+++ b/usr/src/uts/common/sys/dld_impl.h
@@ -164,6 +164,11 @@ struct dld_str {
dld_str_mode_t ds_mode;
/*
+ * Native mode state.
+ */
+ boolean_t ds_native;
+
+ /*
* IP polling is operational if this flag is set.
*/
boolean_t ds_polling;
diff --git a/usr/src/uts/common/sys/dlpi.h b/usr/src/uts/common/sys/dlpi.h
index 3ffb8b5762..b8ff186a95 100644
--- a/usr/src/uts/common/sys/dlpi.h
+++ b/usr/src/uts/common/sys/dlpi.h
@@ -49,6 +49,7 @@ extern "C" {
*/
#define DLIOC ('D' << 8)
#define DLIOCRAW (DLIOC|1) /* M_DATA "raw" mode */
+#define DLIOCNATIVE (DLIOC|2) /* Native traffic mode */
#define DLIOCHDRINFO (DLIOC|10) /* IP fast-path */
#define DL_IOC_HDR_INFO DLIOCHDRINFO
@@ -261,6 +262,7 @@ extern "C" {
#define DL_IPV4 0x80000001ul /* IPv4 Tunnel Link */
#define DL_IPV6 0x80000002ul /* IPv6 Tunnel Link */
#define SUNW_DL_VNI 0x80000003ul /* Virtual network interface */
+#define DL_WIFI 0x80000004ul /* IEEE 802.11 */
/*
* DLPI provider service supported.
diff --git a/usr/src/uts/common/sys/mac.h b/usr/src/uts/common/sys/mac.h
index ed11df7e4a..fd4c89150c 100644
--- a/usr/src/uts/common/sys/mac.h
+++ b/usr/src/uts/common/sys/mac.h
@@ -154,6 +154,7 @@ enum mac_driver_stat {
*/
typedef struct mac_info_s {
uint_t mi_media;
+ uint_t mi_nativemedia;
uint_t mi_sdu_min;
uint_t mi_sdu_max;
uint_t mi_addr_length;
@@ -462,6 +463,7 @@ typedef struct mactype_register_s {
const char *mtr_ident;
mactype_ops_t *mtr_ops;
uint_t mtr_mactype;
+ uint_t mtr_nativetype;
uint_t mtr_addrlen;
uint8_t *mtr_brdcst_addr;
mac_stat_info_t *mtr_stats;
diff --git a/usr/src/uts/common/sys/mac_impl.h b/usr/src/uts/common/sys/mac_impl.h
index bc4bea80de..06e6b8244c 100644
--- a/usr/src/uts/common/sys/mac_impl.h
+++ b/usr/src/uts/common/sys/mac_impl.h
@@ -80,6 +80,7 @@ typedef struct mactype_s {
const char *mt_ident;
uint32_t mt_ref;
uint_t mt_type;
+ uint_t mt_nativetype;
size_t mt_addr_length;
uint8_t *mt_brdcst_addr;
mactype_ops_t mt_ops;
diff --git a/usr/src/uts/common/sys/mac_wifi.h b/usr/src/uts/common/sys/mac_wifi.h
new file mode 100644
index 0000000000..7ed4a9c0a1
--- /dev/null
+++ b/usr/src/uts/common/sys/mac_wifi.h
@@ -0,0 +1,116 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _SYS_MAC_WIFI_H
+#define _SYS_MAC_WIFI_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * WiFi MAC-Type Plugin
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/types.h>
+#include <sys/net80211_proto.h>
+
+#ifdef _KERNEL
+
+#define MAC_PLUGIN_IDENT_WIFI "mac_wifi"
+
+/*
+ * Maximum size of a WiFi header based on current implementation.
+ * May change in the future as new features are added.
+ */
+#define WIFI_HDRSIZE (sizeof (struct ieee80211_frame) + \
+ IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + sizeof (struct ieee80211_llc))
+
+enum wifi_stat {
+ /* statistics described in ieee802.11(5) */
+ WIFI_STAT_TX_FRAGS = MACTYPE_STAT_MIN,
+ WIFI_STAT_MCAST_TX,
+ WIFI_STAT_TX_FAILED,
+ WIFI_STAT_TX_RETRANS,
+ WIFI_STAT_TX_RERETRANS,
+ WIFI_STAT_RTS_SUCCESS,
+ WIFI_STAT_RTS_FAILURE,
+ WIFI_STAT_ACK_FAILURE,
+ WIFI_STAT_RX_FRAGS,
+ WIFI_STAT_MCAST_RX,
+ WIFI_STAT_FCS_ERRORS,
+ WIFI_STAT_WEP_ERRORS,
+ WIFI_STAT_RX_DUPS
+};
+
+/*
+ * WiFi security modes recognized by the plugin.
+ */
+enum wifi_secmode {
+ WIFI_SEC_NONE,
+ WIFI_SEC_WEP
+};
+
+/*
+ * WiFi data passed between the drivers and the plugin.
+ *
+ * Field definitions:
+ *
+ * wd_opts Currently set to 0. If new features require the
+ * introduction of new wifi_data_t fields, then the
+ * presence of those fields must be indicated to the
+ * plugin via wd_opts flags. This allows the drivers
+ * and the plugin to evolve independently.
+ *
+ * wd_bssid Current associated BSSID (or IBSSID), used when
+ * generating data packet headers for transmission.
+ *
+ * wd_opmode Current operation mode; any ieee80211_opmode is
+ * supported.
+ *
+ * wd_secalloc Current allocation policy for security-related
+ * WiFi headers, used when generating packets for
+ * transmission. The plugin will allocate header
+ * space for the security portion, and fill in any
+ * fixed-contents fields.
+ */
+typedef struct wifi_data {
+ uint_t wd_opts;
+ uint8_t wd_bssid[IEEE80211_ADDR_LEN];
+ enum ieee80211_opmode wd_opmode;
+ enum wifi_secmode wd_secalloc;
+} wifi_data_t;
+
+extern uint8_t wifi_bcastaddr[];
+
+#endif /* _KERNEL */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_MAC_WIFI_H */
diff --git a/usr/src/uts/common/sys/net80211.h b/usr/src/uts/common/sys/net80211.h
new file mode 100644
index 0000000000..539e0a3e10
--- /dev/null
+++ b/usr/src/uts/common/sys/net80211.h
@@ -0,0 +1,528 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifndef _SYS_NET80211_H
+#define _SYS_NET80211_H
+
+#include <sys/mac.h>
+#include <sys/ethernet.h>
+#include <sys/net80211_proto.h>
+#include <sys/net80211_crypto.h>
+
+/*
+ * IEEE802.11 kernel support module
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ic_caps */
+#define IEEE80211_C_WEP 0x00000001 /* CAPABILITY: WEP available */
+#define IEEE80211_C_TKIP 0x00000002 /* CAPABILITY: TKIP available */
+#define IEEE80211_C_AES 0x00000004 /* CAPABILITY: AES OCB avail */
+#define IEEE80211_C_AES_CCM 0x00000008 /* CAPABILITY: AES CCM avail */
+#define IEEE80211_C_CKIP 0x00000010 /* CAPABILITY: CKIP available */
+#define IEEE80211_C_FF 0x00000040 /* CAPABILITY: ATH FF avail */
+#define IEEE80211_C_TURBOP 0x00000080
+ /* CAPABILITY: ATH Turbo available */
+#define IEEE80211_C_IBSS 0x00000100 /* CAPABILITY: IBSS available */
+#define IEEE80211_C_PMGT 0x00000200 /* CAPABILITY: Power mgmt */
+#define IEEE80211_C_HOSTAP 0x00000400 /* CAPABILITY: HOSTAP avail */
+#define IEEE80211_C_AHDEMO 0x00000800 /* CAPABILITY: Old Adhoc Demo */
+#define IEEE80211_C_SWRETRY 0x00001000 /* CAPABILITY: sw tx retry */
+#define IEEE80211_C_TXPMGT 0x00002000 /* CAPABILITY: tx power mgmt */
+#define IEEE80211_C_SHSLOT 0x00004000 /* CAPABILITY: short slottime */
+#define IEEE80211_C_SHPREAMBLE 0x00008000 /* CAPABILITY: short preamble */
+#define IEEE80211_C_MONITOR 0x00010000 /* CAPABILITY: monitor mode */
+#define IEEE80211_C_TKIPMIC 0x00020000 /* CAPABILITY: TKIP MIC avail */
+#define IEEE80211_C_WPA1 0x00800000 /* CAPABILITY: WPA1 avail */
+#define IEEE80211_C_WPA2 0x01000000 /* CAPABILITY: WPA2 avail */
+#define IEEE80211_C_WPA 0x01800000
+ /* CAPABILITY: WPA1+WPA2 avail */
+#define IEEE80211_C_BURST 0x02000000 /* CAPABILITY: frame bursting */
+#define IEEE80211_C_WME 0x04000000 /* CAPABILITY: WME avail */
+#define IEEE80211_C_WDS 0x08000000 /* CAPABILITY: 4-addr support */
+/* 0x10000000 reserved */
+#define IEEE80211_C_BGSCAN 0x20000000 /* CAPABILITY: bg scanning */
+#define IEEE80211_C_TXFRAG 0x40000000 /* CAPABILITY: tx fragments */
+/* XXX protection/barker? */
+
+#define IEEE80211_C_CRYPTO 0x0000001f /* CAPABILITY: crypto alg's */
+
+/* ic_flags */
+/* NB: bits 0x4c available */
+#define IEEE80211_F_FF 0x00000001 /* CONF: ATH FF enabled */
+#define IEEE80211_F_TURBOP 0x00000002 /* CONF: ATH Turbo enabled */
+#define IEEE80211_F_BURST 0x00000004 /* CONF: bursting enabled */
+/* NB: this is intentionally setup to be IEEE80211_CAPINFO_PRIVACY */
+#define IEEE80211_F_PRIVACY 0x00000010 /* CONF: privacy enabled */
+#define IEEE80211_F_PUREG 0x00000020 /* CONF: 11g w/o 11b sta's */
+#define IEEE80211_F_SCANONLY 0x00000040 /* CONF: scan only */
+#define IEEE80211_F_SCAN 0x00000080 /* STATUS: scanning */
+#define IEEE80211_F_ASCAN 0x00000100 /* STATUS: active scan */
+#define IEEE80211_F_SIBSS 0x00000200 /* STATUS: start IBSS */
+/* NB: this is intentionally setup to be IEEE80211_CAPINFO_SHORT_SLOTTIME */
+#define IEEE80211_F_SHSLOT 0x00000400
+ /* STATUS: use short slot time */
+#define IEEE80211_F_PMGTON 0x00000800 /* CONF: Power mgmt enable */
+#define IEEE80211_F_DESBSSID 0x00001000 /* CONF: des_bssid is set */
+#define IEEE80211_F_WME 0x00002000 /* CONF: enable WME use */
+#define IEEE80211_F_BGSCAN 0x00004000
+ /* CONF: bg scan enabled (???) */
+#define IEEE80211_F_SWRETRY 0x00008000 /* CONF: sw tx retry enabled */
+#define IEEE80211_F_TXPOW_FIXED 0x00010000 /* TX Power: fixed rate */
+#define IEEE80211_F_IBSSON 0x00020000 /* CONF: IBSS creation enable */
+#define IEEE80211_F_SHPREAMBLE 0x00040000 /* STATUS: use short preamble */
+#define IEEE80211_F_DATAPAD 0x00080000 /* CONF: do alignment pad */
+#define IEEE80211_F_USEPROT 0x00100000 /* STATUS: protection enabled */
+#define IEEE80211_F_USEBARKER 0x00200000
+ /* STATUS: use barker preamble */
+#define IEEE80211_F_TIMUPDATE 0x00400000 /* STATUS: update beacon tim */
+#define IEEE80211_F_WPA1 0x00800000 /* CONF: WPA enabled */
+#define IEEE80211_F_WPA2 0x01000000 /* CONF: WPA2 enabled */
+#define IEEE80211_F_WPA 0x01800000 /* CONF: WPA/WPA2 enabled */
+#define IEEE80211_F_DROPUNENC 0x02000000 /* CONF: drop unencrypted */
+#define IEEE80211_F_COUNTERM 0x04000000 /* CONF: TKIP countermeasures */
+#define IEEE80211_F_HIDESSID 0x08000000 /* CONF: hide SSID in beacon */
+#define IEEE80211_F_NOBRIDGE 0x10000000 /* CONF: dis. internal bridge */
+#define IEEE80211_F_WMEUPDATE 0x20000000 /* STATUS: update beacon wme */
+
+/* ic_flags_ext */
+#define IEEE80211_FEXT_WDS 0x00000001 /* CONF: 4 addr allowed */
+/* 0x00000006 reserved */
+#define IEEE80211_FEXT_BGSCAN 0x00000008
+ /* STATUS: enable full bgscan completion */
+#define IEEE80211_FEXT_ERPUPDATE 0x00000200 /* STATUS: update ERP element */
+#define IEEE80211_FEXT_SWBMISS 0x00000400 /* CONF: do bmiss in s/w */
+
+/*
+ * Channel attributes (ich_flags)
+ * bits 0-3 are for private use by drivers
+ */
+#define IEEE80211_CHAN_TURBO 0x0010 /* Turbo channel */
+#define IEEE80211_CHAN_CCK 0x0020 /* CCK channel */
+#define IEEE80211_CHAN_OFDM 0x0040 /* OFDM channel */
+#define IEEE80211_CHAN_2GHZ 0x0080 /* 2 GHz spectrum channel. */
+#define IEEE80211_CHAN_5GHZ 0x0100 /* 5 GHz spectrum channel */
+#define IEEE80211_CHAN_PASSIVE 0x0200 /* Only passive scan allowed */
+#define IEEE80211_CHAN_DYN 0x0400 /* Dynamic CCK-OFDM channel */
+#define IEEE80211_CHAN_GFSK 0x0800 /* GFSK channel (FHSS PHY) */
+
+#define IEEE80211_CHAN_MAX 255
+#define IEEE80211_CHAN_BYTES 32 /* howmany(IEEE80211_CHAN_MAX, NBBY) */
+#define IEEE80211_CHAN_ANY 0xffff /* token for ``any channel'' */
+#define IEEE80211_CHAN_ANYC \
+ ((struct ieee80211_channel *)IEEE80211_CHAN_ANY)
+
+#define IEEE80211_IS_CHAN_2GHZ(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_2GHZ) != 0)
+#define IEEE80211_IS_CHAN_5GHZ(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_5GHZ) != 0)
+
+#define IEEE80211_NODE_HASHSIZE 32
+
+#define IEEE80211_FIXED_RATE_NONE 0
+#define IEEE80211_MCAST_RATE_DEFAULT (2*1) /* default mcast rate (1M) */
+
+/* WME stream classes */
+#define WME_AC_BE 0 /* best effort */
+#define WME_AC_BK 1 /* background */
+#define WME_AC_VI 2 /* video */
+#define WME_AC_VO 3 /* voice */
+
+/*
+ * Authentication mode.
+ */
+enum ieee80211_authmode {
+ IEEE80211_AUTH_NONE = 0,
+ IEEE80211_AUTH_OPEN = 1, /* open */
+ IEEE80211_AUTH_SHARED = 2, /* shared-key */
+ IEEE80211_AUTH_8021X = 3, /* 802.1x */
+ IEEE80211_AUTH_AUTO = 4, /* auto-select/accept */
+ /* NB: these are used only for ioctls */
+ IEEE80211_AUTH_WPA = 5 /* WPA/RSN w/ 802.1x/PSK */
+};
+
+enum ieee80211_state {
+ IEEE80211_S_INIT = 0, /* default state */
+ IEEE80211_S_SCAN = 1, /* scanning */
+ IEEE80211_S_AUTH = 2, /* try to authenticate */
+ IEEE80211_S_ASSOC = 3, /* try to assoc */
+ IEEE80211_S_RUN = 4 /* associated */
+};
+#define IEEE80211_S_MAX (IEEE80211_S_RUN+1)
+
+/*
+ * 802.11 rate set.
+ */
+#define IEEE80211_RATE_MAXSIZE 15 /* max rates we'll handle */
+#define IEEE80211_RATE_SIZE 8 /* 802.11 standard */
+#define IEEE80211_XRATE_SIZE (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE)
+ /* size of extended supported rates */
+struct ieee80211_rateset {
+ uint8_t ir_nrates;
+ uint8_t ir_rates[IEEE80211_RATE_MAXSIZE];
+};
+
+/*
+ * Channels are specified by frequency and attributes.
+ */
+struct ieee80211_channel {
+ uint16_t ich_freq; /* setting in Mhz */
+ uint16_t ich_flags; /* see below */
+};
+
+struct ieee80211_device_stats {
+ uint32_t is_tx_frags;
+ uint32_t is_tx_bytes;
+ uint32_t is_tx_mcast;
+ uint32_t is_tx_failed;
+ uint32_t is_tx_retries;
+ uint32_t is_rts_success;
+ uint32_t is_rts_failure;
+ uint32_t is_ack_failure;
+ uint32_t is_rx_frags;
+ uint32_t is_rx_bytes;
+ uint32_t is_rx_mcast;
+ uint32_t is_rx_dups;
+ uint32_t is_fcs_errors;
+ uint32_t is_wep_errors;
+ uint32_t is_tx_nobuf;
+ uint32_t is_tx_unknownmgt;
+};
+
+struct ieee80211_crypto_state;
+typedef struct ieee80211_node_table ieee80211_node_table_t;
+typedef struct ieee80211_node ieee80211_node_t;
+typedef struct ieee80211com ieee80211com_t;
+
+struct ieee80211_node_table {
+ struct ieee80211com *nt_ic; /* back reference */
+
+ const char *nt_name; /* for debugging */
+ /* For node inactivity processing */
+ int nt_inact_timer; /* inactivity timer */
+ int nt_inact_init; /* initial node inact setting */
+ void (*nt_timeout)(struct ieee80211_node_table *);
+ uint32_t nt_scangen; /* gen# for timeout scan */
+ kmutex_t nt_scanlock; /* on nt_scangen */
+ kmutex_t nt_nodelock; /* on node table */
+
+ int nt_keyixmax; /* keyixmap size */
+ struct ieee80211_node **nt_keyixmap; /* key ix -> node map */
+
+ list_t nt_node; /* information of all nodes */
+ list_t nt_hash[IEEE80211_NODE_HASHSIZE];
+};
+
+/*
+ * Node specific information. Note that drivers are expected
+ * to derive from this structure to add device-specific per-node
+ * state. This is done by overriding the ic_node_* methods in
+ * the ieee80211com structure.
+ */
+struct ieee80211_node {
+ struct ieee80211com *in_ic;
+ struct ieee80211_node_table *in_table;
+
+ uint8_t in_authmode; /* authentication algorithm */
+ uint16_t in_flags; /* special purpose state */
+ uint16_t in_associd; /* assoc response */
+ uint16_t in_txpower; /* current transmit power */
+ uint16_t in_vlan; /* vlan tag */
+ /*
+ * Tx/Rx sequence number.
+ * index 0 is used when QoS is not enabled. index 1-16 is used
+ * when QoS is enabled. 1-16 corresponds to TID 0-15.
+ */
+ uint16_t in_txseqs[17]; /* tx seq per-tid */
+ uint16_t in_rxseqs[17]; /* rx seq previous per-tid */
+ clock_t in_rxfragstamp; /* time stamp of last rx frag */
+ mblk_t *in_rxfrag; /* rx frag reassembly */
+ uint32_t in_scangen; /* gen# for timeout scan */
+ uint32_t in_refcnt;
+
+ /* hardware */
+ uint32_t in_rstamp; /* recv timestamp */
+ uint8_t in_rssi; /* recv ssi */
+
+ /* header */
+ uint8_t in_macaddr[IEEE80211_ADDR_LEN];
+ uint8_t in_bssid[IEEE80211_ADDR_LEN];
+
+ /* beacon, probe response */
+ union {
+ uint8_t data[8];
+ uint64_t tsf;
+ } in_tstamp; /* from last rcv'd beacon */
+ uint16_t in_intval; /* beacon interval */
+ uint16_t in_capinfo; /* capabilities */
+ uint8_t in_esslen;
+ uint8_t in_essid[IEEE80211_NWID_LEN];
+ struct ieee80211_rateset in_rates; /* negotiated rate set */
+ struct ieee80211_channel *in_chan; /* XXX multiple uses */
+ enum ieee80211_phytype in_phytype;
+ uint16_t in_fhdwell; /* FH only */
+ uint8_t in_fhindex; /* FH only */
+ uint8_t in_erp; /* ERP from beacon/probe resp */
+ uint16_t in_tim_off; /* byte offset to TIM ie */
+ uint8_t in_dtim_period; /* DTIM period */
+ uint8_t in_dtim_count; /* DTIM count for last bcn */
+
+ uint32_t *in_challenge; /* shared-key challenge */
+ struct ieee80211_key in_ucastkey; /* unicast key */
+
+ /* others */
+ int32_t in_fails; /* failure count to associate */
+ int16_t in_inact; /* inactivity mark count */
+ int16_t in_inact_reload; /* inactivity reload value */
+ int32_t in_txrate; /* index to ni_rates[] */
+
+ list_node_t in_node; /* element of nt->nt_node */
+ list_node_t in_hash; /* element of nt->nt_hash */
+};
+
+struct ieee80211com {
+ mac_handle_t ic_mach;
+
+ /* Initialized by driver */
+ uint8_t ic_macaddr[IEEE80211_ADDR_LEN];
+ uint32_t ic_caps; /* capabilities */
+ enum ieee80211_phytype ic_phytype; /* XXX wrong for multi-mode */
+ enum ieee80211_opmode ic_opmode; /* current operation mode */
+ enum ieee80211_state ic_state; /* current 802.11 state */
+ struct ieee80211_channel ic_sup_channels[IEEE80211_CHAN_MAX+1];
+ struct ieee80211_rateset ic_sup_rates[IEEE80211_MODE_MAX];
+ enum ieee80211_phymode ic_curmode; /* OPT current mode */
+ struct ieee80211_channel *ic_curchan; /* OPT current channel */
+ struct ieee80211_channel *ic_ibss_chan; /* OPT bss channel */
+ uint8_t ic_maxrssi; /* maximum hardware RSSI */
+
+ /* INITIALIZED by IEEE80211, used/overridden by driver */
+ uint16_t ic_modecaps; /* set of mode capabilities */
+ uint8_t ic_chan_active[IEEE80211_CHAN_BYTES];
+ enum ieee80211_protmode ic_protmode; /* 802.11g protection mode */
+ uint16_t ic_bintval; /* beacon interval */
+ uint16_t ic_lintval; /* listen interval */
+ uint16_t ic_txpowlimit; /* global tx power limit */
+ uint8_t ic_bmissthreshold;
+ uint16_t ic_rtsthreshold;
+ uint16_t ic_fragthreshold;
+ int32_t ic_mcast_rate; /* rate for mcast frames */
+ uint8_t ic_fixed_rate; /* value of fixed rate */
+ int32_t ic_des_esslen; /* length of desired essid */
+ uint8_t ic_des_essid[IEEE80211_NWID_LEN];
+ uint8_t ic_des_bssid[IEEE80211_ADDR_LEN];
+ struct ieee80211_channel *ic_des_chan; /* desired channel */
+ void *ic_opt_ie; /* user-specified IE's */
+ uint16_t ic_opt_ie_len; /* length of ic_opt_ie */
+ uint8_t ic_nickname[IEEE80211_NWID_LEN];
+ uint16_t ic_tim_len; /* ic_tim_bitmap size (bytes) */
+ uint8_t *ic_tim_bitmap; /* powersave stations w/ data */
+ timeout_id_t ic_watchdog_timer; /* watchdog timer */
+ /* Cipher state/configuration. */
+ struct ieee80211_crypto_state ic_crypto;
+
+ /* Runtime states */
+ uint32_t ic_flags; /* state/conf flags */
+ uint32_t ic_flags_ext; /* extended state flags */
+ struct ieee80211_node *ic_bss; /* information for this node */
+ struct ieee80211_device_stats ic_stats;
+ struct ieee80211_node_table ic_scan; /* STA: scan candidates */
+ struct ieee80211_node_table ic_sta; /* AP:stations/IBSS:neighbors */
+
+ /* callback functions */
+ /*
+ * Functions initialized by driver before calling ieee80211_attach()
+ * Those must be initialized are marked with M(andatory)
+ *
+ * ic_xmit - [M] transmit a management or null data frame
+ * return 0 on success, non-zero on error
+ * ic_watchdog - [O] periodic run function, enabled by
+ * ieee80211_start_watchdog()
+ * ic_set_tim - [O] set/clear traffic indication map
+ * ic_set_shortslot - [O] enable/disable short slot timing
+ * ic_node_newassoc - [O] driver specific operation on a newly
+ * associated or re-assoced node
+ */
+ int (*ic_xmit)(ieee80211com_t *, mblk_t *, uint8_t);
+ void (*ic_watchdog)(void *);
+ void (*ic_set_tim)(ieee80211com_t *,
+ ieee80211_node_t *, int);
+ void (*ic_set_shortslot)(ieee80211com_t *, int);
+ void (*ic_node_newassoc)(ieee80211_node_t *, int);
+ /*
+ * Functions initialized by ieee80211_attach(), driver could
+ * override these functions after calling ieee80211_attach()
+ *
+ * ic_reset - reset
+ * ic_recv_mgmt - handle received management frames
+ * ic_send_mgmt - construct and transmit management frames
+ * ic_newstate - handle state transition
+ * ic_node_alloc - allocate a new BSS info node
+ * ic_node_cleanup - cleanup or free memory spaces of a node
+ * ic_node_free - free a node
+ * ic_node_getrssi - get node's rssi
+ */
+ int (*ic_reset)(ieee80211com_t *);
+ void (*ic_recv_mgmt)(ieee80211com_t *,
+ mblk_t *, ieee80211_node_t *,
+ int, int, uint32_t);
+ int (*ic_send_mgmt)(ieee80211com_t *,
+ ieee80211_node_t *, int, int);
+ int (*ic_newstate)(ieee80211com_t *,
+ enum ieee80211_state, int);
+ struct ieee80211_node *(*ic_node_alloc)(ieee80211com_t *);
+ void (*ic_node_cleanup)(ieee80211_node_t *);
+ void (*ic_node_free)(ieee80211_node_t *);
+ uint8_t (*ic_node_getrssi)(const ieee80211_node_t *);
+
+ kmutex_t ic_genlock;
+ void *ic_private; /* ieee80211 private data */
+};
+#define ic_nw_keys ic_crypto.cs_nw_keys
+#define ic_def_txkey ic_crypto.cs_def_txkey
+
+extern const char *ieee80211_state_name[IEEE80211_S_MAX];
+
+#define IEEE80211_RATE(_ix) \
+ (in->in_rates.ir_rates[(_ix)] & IEEE80211_RATE_VAL)
+
+#define ieee80211_new_state(_ic, _nstate, _arg) \
+ (((_ic)->ic_newstate)((_ic), (_nstate), (_arg)))
+
+#define ieee80211_macaddr_sprintf(_addr) \
+ ether_sprintf((struct ether_addr *)(_addr))
+
+/*
+ * Node reference counting definitions.
+ *
+ * ieee80211_node_initref initialize the reference count to 1
+ * ieee80211_node_incref add a reference
+ * ieee80211_node_decref remove a reference
+ * ieee80211_node_decref_nv remove a reference and return new value
+ * ieee80211_node_refcnt reference count for printing (only)
+ */
+#include <sys/atomic.h>
+#define ieee80211_node_initref(_in) \
+ ((_in)->in_refcnt = 1)
+#define ieee80211_node_incref(_in) \
+ atomic_inc_uint(&(_in)->in_refcnt)
+#define ieee80211_node_decref(_in) \
+ atomic_dec_uint(&(_in)->in_refcnt)
+#define ieee80211_node_decref_nv(_in) \
+ atomic_dec_uint_nv(&(_in)->in_refcnt)
+#define ieee80211_node_refcnt(_in) \
+ (_in)->in_refcnt
+
+typedef void ieee80211_iter_func(void *, ieee80211_node_t *);
+
+/* Initialization */
+void ieee80211_attach(ieee80211com_t *);
+void ieee80211_detach(ieee80211com_t *);
+void ieee80211_media_init(ieee80211com_t *);
+int ieee80211_ioctl(ieee80211com_t *, queue_t *, mblk_t *);
+
+/* Protocol Processing */
+int ieee80211_input(ieee80211com_t *, mblk_t *, ieee80211_node_t *,
+ int32_t, uint32_t);
+mblk_t *ieee80211_encap(ieee80211com_t *, mblk_t *, ieee80211_node_t *);
+
+mblk_t *ieee80211_beacon_alloc(ieee80211com_t *, ieee80211_node_t *,
+ struct ieee80211_beacon_offsets *);
+int ieee80211_beacon_update(ieee80211com_t *, ieee80211_node_t *,
+ struct ieee80211_beacon_offsets *, mblk_t *, int);
+void ieee80211_beacon_miss(ieee80211com_t *);
+
+void ieee80211_begin_scan(ieee80211com_t *, boolean_t);
+void ieee80211_next_scan(ieee80211com_t *);
+void ieee80211_end_scan(ieee80211com_t *);
+void ieee80211_cancel_scan(ieee80211com_t *);
+
+void ieee80211_sta_join(ieee80211com_t *, ieee80211_node_t *);
+void ieee80211_sta_leave(ieee80211com_t *, ieee80211_node_t *);
+boolean_t ieee80211_ibss_merge(ieee80211_node_t *);
+
+/* Node Operation */
+ieee80211_node_t *ieee80211_ref_node(ieee80211_node_t *);
+void ieee80211_unref_node(ieee80211_node_t **);
+void ieee80211_node_authorize(ieee80211_node_t *);
+void ieee80211_node_unauthorize(ieee80211_node_t *);
+ieee80211_node_t *ieee80211_alloc_node(ieee80211com_t *,
+ ieee80211_node_table_t *, const uint8_t *);
+void ieee80211_free_node(ieee80211_node_t *);
+void ieee80211_node_table_reset(ieee80211_node_table_t *);
+void ieee80211_iterate_nodes(ieee80211_node_table_t *, ieee80211_iter_func *,
+ void *);
+ieee80211_node_t *ieee80211_find_node(ieee80211_node_table_t *,
+ const uint8_t *);
+ieee80211_node_t *ieee80211_find_txnode(ieee80211com_t *,
+ const uint8_t daddr[IEEE80211_ADDR_LEN]);
+ieee80211_node_t *ieee80211_find_rxnode(ieee80211com_t *,
+ const struct ieee80211_frame *);
+
+
+/* Crypto */
+extern struct ieee80211_key *ieee80211_crypto_encap(ieee80211com_t *, mblk_t *);
+extern struct ieee80211_key *ieee80211_crypto_decap(ieee80211com_t *, mblk_t *,
+ int);
+extern int ieee80211_crypto_newkey(ieee80211com_t *, int, int,
+ struct ieee80211_key *);
+extern int ieee80211_crypto_delkey(ieee80211com_t *, struct ieee80211_key *);
+extern int ieee80211_crypto_setkey(ieee80211com_t *, struct ieee80211_key *,
+ const uint8_t macaddr[IEEE80211_ADDR_LEN]);
+
+/* Helper Functions */
+int ieee80211_stat(ieee80211com_t *ic, uint_t stat, uint64_t *val);
+uint32_t ieee80211_chan2ieee(ieee80211com_t *, struct ieee80211_channel *);
+enum ieee80211_phymode ieee80211_chan2mode(ieee80211com_t *,
+ struct ieee80211_channel *);
+uint32_t ieee80211_ieee2mhz(uint32_t, uint32_t);
+void ieee80211_reset_chan(ieee80211com_t *);
+void ieee80211_dump_pkt(const uint8_t *, int32_t, int32_t, int32_t);
+void ieee80211_watchdog(void *);
+void ieee80211_start_watchdog(ieee80211com_t *, uint32_t);
+void ieee80211_stop_watchdog(ieee80211com_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_NET80211_H */
diff --git a/usr/src/uts/common/sys/net80211_crypto.h b/usr/src/uts/common/sys/net80211_crypto.h
new file mode 100644
index 0000000000..89cd81095b
--- /dev/null
+++ b/usr/src/uts/common/sys/net80211_crypto.h
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifndef _SYS_NET80211_CRYPTO_H
+#define _SYS_NET80211_CRYPTO_H
+
+#include <sys/types.h>
+#include <sys/mac.h>
+#include <sys/net80211_proto.h>
+
+/*
+ * 802.11 protocol crypto-related definitions.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * NB: these values are ordered carefully; there are lots of
+ * of implications in any reordering.
+ */
+#define IEEE80211_CIPHER_WEP 0
+#define IEEE80211_CIPHER_TKIP 1
+#define IEEE80211_CIPHER_AES_OCB 2
+#define IEEE80211_CIPHER_AES_CCM 3
+#define IEEE80211_CIPHER_CKIP 4
+#define IEEE80211_CIPHER_NONE 5 /* pseudo value */
+
+#define IEEE80211_CIPHER_MAX (IEEE80211_CIPHER_NONE+1)
+
+/*
+ * Maxmium length of key in bytes
+ * WEP key length present in the 802.11 standard is 40-bit.
+ * Many implementations also support 104-bit WEP keys.
+ * 802.11i standardize TKIP/CCMP use 128-bit key
+ */
+#define IEEE80211_KEYBUF_SIZE 16
+#define IEEE80211_MICBUF_SIZE (8+8) /* space for both tx+rx keys */
+
+/* Key Flags */
+#define IEEE80211_KEY_XMIT 0x01 /* key used for xmit */
+#define IEEE80211_KEY_RECV 0x02 /* key used for recv */
+#define IEEE80211_KEY_GROUP /* key used for WPA group operation */ \
+ 0x04
+#define IEEE80211_KEY_SWCRYPT 0x10 /* host-based encrypt/decrypt */
+#define IEEE80211_KEY_SWMIC 0x20 /* host-based enmic/demic */
+#define IEEE80211_KEY_COMMON /* common flags passed in by apps */ \
+ (IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV | IEEE80211_KEY_GROUP)
+
+/* WEP */
+#define IEEE80211_WEP_KEYLEN 5 /* 40bit */
+#define IEEE80211_WEP_IVLEN 3 /* 24bit */
+#define IEEE80211_WEP_KIDLEN 1 /* 1 octet */
+#define IEEE80211_WEP_CRCLEN 4 /* CRC-32 */
+#define IEEE80211_WEP_NKID 4 /* number of key ids */
+
+#define IEEE80211_WEP_HDRLEN \
+ (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN)
+#define IEEE80211_WEP_MINLEN \
+ (sizeof (struct ieee80211_frame) + \
+ IEEE80211_WEP_HDRLEN + IEEE80211_WEP_CRCLEN)
+
+/* Maximum number of keys */
+#define IEEE80211_KEY_MAX IEEE80211_WEP_NKID
+
+struct ieee80211com;
+struct ieee80211_node;
+struct ieee80211_key;
+typedef uint16_t ieee80211_keyix; /* h/w key index */
+
+#define IEEE80211_KEYIX_NONE ((ieee80211_keyix) -1)
+
+/*
+ * Template for a supported cipher. Ciphers register with the
+ * crypto code.
+ *
+ * ic_attach - Initialize cipher. The return value is set to wk_private
+ * ic_detach - Destruct a cipher.
+ * ic_setkey - Validate key contents
+ * ic_encap - Encrypt the 802.11 MAC payload
+ * ic_decap - Decrypt the 802.11 MAC payload
+ * ic_enmic - Add MIC
+ * ic_demic - Check and remove MIC
+ */
+struct ieee80211_cipher {
+ const char *ic_name; /* printable name */
+ uint32_t ic_cipher; /* IEEE80211_CIPHER_* */
+ uint32_t ic_header; /* size of privacy header (bytes) */
+ uint32_t ic_trailer; /* size of privacy trailer (bytes) */
+ uint32_t ic_miclen; /* size of mic trailer (bytes) */
+ void *(*ic_attach)(struct ieee80211com *,
+ struct ieee80211_key *);
+ void (*ic_detach)(struct ieee80211_key *);
+ int32_t (*ic_setkey)(struct ieee80211_key *);
+ int32_t (*ic_encap)(struct ieee80211_key *, mblk_t *,
+ uint8_t keyid);
+ int32_t (*ic_decap)(struct ieee80211_key *, mblk_t *, int);
+ int32_t (*ic_enmic)(struct ieee80211_key *, mblk_t *, int);
+ int32_t (*ic_demic)(struct ieee80211_key *, mblk_t *, int);
+};
+extern const struct ieee80211_cipher ieee80211_cipher_none;
+
+struct ieee80211_key {
+ uint8_t wk_keylen; /* key length in bytes */
+ uint8_t wk_pad;
+ uint16_t wk_flags;
+ uint8_t wk_key[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
+ ieee80211_keyix wk_keyix; /* h/w key index */
+ ieee80211_keyix wk_rxkeyix; /* optional h/w rx key index */
+ uint64_t wk_keyrsc; /* key receive sequence counter */
+ uint64_t wk_keytsc; /* key transmit sequence counter */
+ const struct ieee80211_cipher *wk_cipher;
+ void *wk_private; /* private cipher state */
+};
+#define wk_txmic wk_key+IEEE80211_KEYBUF_SIZE+0
+#define wk_rxmic wk_key+IEEE80211_KEYBUF_SIZE+8
+
+/*
+ * Crypto state kept in each ieee80211com.
+ */
+struct ieee80211_crypto_state {
+ struct ieee80211_key cs_nw_keys[IEEE80211_KEY_MAX];
+ ieee80211_keyix cs_def_txkey; /* default/group tx key index */
+ uint16_t cs_max_keyix; /* max h/w key index */
+
+ int (*cs_key_alloc)(struct ieee80211com *,
+ const struct ieee80211_key *,
+ ieee80211_keyix *, ieee80211_keyix *);
+ int (*cs_key_delete)(struct ieee80211com *,
+ const struct ieee80211_key *);
+ int (*cs_key_set)(struct ieee80211com *,
+ const struct ieee80211_key *,
+ const uint8_t mac[IEEE80211_ADDR_LEN]);
+ void (*cs_key_update_begin)(struct ieee80211com *);
+ void (*cs_key_update_end)(struct ieee80211com *);
+};
+
+/*
+ * Key update synchronization methods.
+ */
+#define KEY_UPDATE_BEGIN(ic) \
+ (ic)->ic_crypto.cs_key_update_begin(ic)
+#define KEY_UPDATE_END(ic) \
+ (ic)->ic_crypto.cs_key_update_end(ic)
+#define KEY_UNDEFINED(k) \
+ ((k).wk_cipher == &ieee80211_cipher_none)
+
+#define DEV_KEY_ALLOC(ic, k, kix, rkix) \
+ (ic)->ic_crypto.cs_key_alloc(ic, k, kix, rkix)
+#define DEV_KEY_DELETE(ic, k) \
+ (ic)->ic_crypto.cs_key_delete(ic, k)
+#define DEV_KEY_SET(ic, k, m) \
+ (ic)->ic_crypto.cs_key_set(ic, k, m)
+
+#define CIPHER_DETACH(k) \
+ (k)->wk_cipher->ic_detach(k)
+#define CIPHER_ATTACH(k) \
+ (k)->wk_cipher->ic_attach(k)
+
+#define ieee80211_crypto_demic(ic, k, m, force) \
+ (((k)->wk_cipher->ic_miclen > 0) ? \
+ (k)->wk_cipher->ic_demic(k, m, force) : \
+ 1)
+
+#define ieee80211_crypto_enmic(ic, k, m, force) \
+ ((k)->wk_cipher->ic_miclen > 0 ? \
+ (k)->wk_cipher->ic_enmic(k, m, force) : \
+ 1)
+
+void ieee80211_crypto_attach(struct ieee80211com *ic);
+void ieee80211_crypto_detach(struct ieee80211com *ic);
+void ieee80211_crypto_register(const struct ieee80211_cipher *);
+void ieee80211_crypto_unregister(const struct ieee80211_cipher *);
+void ieee80211_crypto_resetkey(struct ieee80211com *, struct ieee80211_key *,
+ ieee80211_keyix);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_NET80211_CRYPTO_H */
diff --git a/usr/src/uts/common/sys/net80211_proto.h b/usr/src/uts/common/sys/net80211_proto.h
new file mode 100644
index 0000000000..6842798445
--- /dev/null
+++ b/usr/src/uts/common/sys/net80211_proto.h
@@ -0,0 +1,541 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifndef _SYS_NET80211_PROTO_H
+#define _SYS_NET80211_PROTO_H
+
+/*
+ * 802.11 protocol definitions
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IEEE80211_ADDR_LEN 6 /* size of 802.11 address */
+#define IEEE80211_ADDR_COPY(dst, src) \
+ ((void) bcopy(src, dst, IEEE80211_ADDR_LEN))
+#define IEEE80211_ADDR_EQ(a1, a2) \
+ (bcmp(a1, a2, IEEE80211_ADDR_LEN) == 0)
+/* is 802.11 address multicast/broadcast? */
+#define IEEE80211_IS_MULTICAST(addr) \
+ ((((uint8_t *)addr)[0]) & 0x01)
+
+/*
+ * Size of an ACK control frame in bytes.
+ */
+#define IEEE80211_ACK_SIZE (2 + 2 + IEEE80211_ADDR_LEN + 4)
+
+#define WME_NUM_AC 4 /* 4 AC categories */
+
+/*
+ * Protocol Physical Layer
+ */
+
+/* XXX not really a mode; there are really multiple PHY's */
+enum ieee80211_phymode {
+ IEEE80211_MODE_AUTO = 0, /* autoselect */
+ IEEE80211_MODE_11A = 1, /* 5GHz, OFDM */
+ IEEE80211_MODE_11B = 2, /* 2GHz, CCK */
+ IEEE80211_MODE_11G = 3, /* 2GHz, OFDM */
+ IEEE80211_MODE_FH = 4, /* 2GHz, GFSK */
+ IEEE80211_MODE_TURBO_A = 5, /* 5GHz, OFDM, 2x clock */
+ IEEE80211_MODE_TURBO_G = 6 /* 2GHz, OFDM, 2x clock */
+};
+#define IEEE80211_MODE_MAX (IEEE80211_MODE_TURBO_G+1)
+
+enum ieee80211_phytype {
+ IEEE80211_T_DS, /* direct sequence spread spectrum */
+ IEEE80211_T_FH, /* frequency hopping */
+ IEEE80211_T_OFDM, /* frequency division multiplexing */
+ IEEE80211_T_TURBO /* high rate OFDM, aka turbo mode */
+};
+#define IEEE80211_T_CCK IEEE80211_T_DS /* more common nomenclature */
+
+enum ieee80211_opmode {
+ IEEE80211_M_STA = 1, /* infrastructure station */
+ IEEE80211_M_IBSS = 0, /* IBSS (adhoc) station */
+ IEEE80211_M_AHDEMO = 3, /* Old lucent compatible adhoc demo */
+ IEEE80211_M_HOSTAP = 6, /* Software Access Point */
+ IEEE80211_M_MONITOR = 8 /* Monitor mode */
+};
+
+/*
+ * 802.11g protection mode.
+ */
+enum ieee80211_protmode {
+ IEEE80211_PROT_NONE = 0, /* no protection */
+ IEEE80211_PROT_CTSONLY = 1, /* CTS to self */
+ IEEE80211_PROT_RTSCTS = 2 /* RTS-CTS */
+};
+
+/*
+ * generic definitions for IEEE 802.11 frames
+ */
+#pragma pack(1)
+struct ieee80211_frame {
+ uint8_t i_fc[2]; /* [0]-protocol version, [1]-type & subtype */
+ uint8_t i_dur[2];
+ uint8_t i_addr1[IEEE80211_ADDR_LEN];
+ uint8_t i_addr2[IEEE80211_ADDR_LEN];
+ uint8_t i_addr3[IEEE80211_ADDR_LEN];
+ uint8_t i_seq[2];
+ /* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
+ /* see below */
+};
+
+struct ieee80211_frame_addr4 {
+ uint8_t i_fc[2];
+ uint8_t i_dur[2];
+ uint8_t i_addr1[IEEE80211_ADDR_LEN];
+ uint8_t i_addr2[IEEE80211_ADDR_LEN];
+ uint8_t i_addr3[IEEE80211_ADDR_LEN];
+ uint8_t i_seq[2];
+ uint8_t i_addr4[IEEE80211_ADDR_LEN];
+};
+
+/* Start part(LLC and SNAP) of payload of IEEE80211 frame */
+struct ieee80211_llc {
+ /* LLC */
+ uint8_t illc_dsap;
+ uint8_t illc_ssap;
+ uint8_t illc_control;
+ /* SNAP */
+ uint8_t illc_oc[3]; /* protocol ID or organization code */
+ uint16_t illc_ether_type; /* ethernet type */
+};
+
+/*
+ * Management Notification Frame
+ */
+struct ieee80211_mnf {
+ uint8_t mnf_category;
+ uint8_t mnf_action;
+ uint8_t mnf_dialog;
+ uint8_t mnf_status;
+};
+#define IEEE80211_MNF_SETUP_REQ 0
+#define IEEE80211_MNF_SETUP_RESP 1
+#define IEEE80211_MNF_TEARDOWN 2
+
+/*
+ * Control frames.
+ */
+struct ieee80211_frame_min {
+ uint8_t i_fc[2];
+ uint8_t i_dur[2];
+ uint8_t i_addr1[IEEE80211_ADDR_LEN];
+ uint8_t i_addr2[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_frame_rts {
+ uint8_t i_fc[2];
+ uint8_t i_dur[2];
+ uint8_t i_ra[IEEE80211_ADDR_LEN];
+ uint8_t i_ta[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_frame_cts {
+ uint8_t i_fc[2];
+ uint8_t i_dur[2];
+ uint8_t i_ra[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_frame_ack {
+ uint8_t i_fc[2];
+ uint8_t i_dur[2];
+ uint8_t i_ra[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_frame_pspoll {
+ uint8_t i_fc[2];
+ uint8_t i_aid[2];
+ uint8_t i_bssid[IEEE80211_ADDR_LEN];
+ uint8_t i_ta[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_frame_cfend { /* NB: also CF-End+CF-Ack */
+ uint8_t i_fc[2];
+ uint8_t i_dur[2]; /* should be zero */
+ uint8_t i_ra[IEEE80211_ADDR_LEN];
+ uint8_t i_bssid[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_tim_ie {
+ uint8_t tim_ie; /* IEEE80211_ELEMID_TIM */
+ uint8_t tim_len;
+ uint8_t tim_count; /* DTIM count */
+ uint8_t tim_period; /* DTIM period */
+ uint8_t tim_bitctl; /* bitmap control */
+ uint8_t tim_bitmap[1]; /* variable-length bitmap */
+};
+
+/*
+ * 802.11i/WPA information element (maximally sized).
+ */
+struct ieee80211_ie_wpa {
+ uint8_t wpa_id; /* IEEE80211_ELEMID_VENDOR */
+ uint8_t wpa_len; /* length in bytes */
+ uint8_t wpa_oui[3]; /* 0x00, 0x50, 0xf2 */
+ uint8_t wpa_type; /* OUI type */
+ uint16_t wpa_version; /* spec revision */
+ uint32_t wpa_mcipher[1]; /* multicast/group key cipher */
+ uint16_t wpa_uciphercnt; /* # pairwise key ciphers */
+ uint32_t wpa_uciphers[8]; /* ciphers */
+ uint16_t wpa_authselcnt; /* authentication selector cnt */
+ uint32_t wpa_authsels[8]; /* selectors */
+ uint16_t wpa_caps; /* 802.11i capabilities */
+ uint16_t wpa_pmkidcnt; /* 802.11i pmkid count */
+ uint16_t wpa_pmkids[8]; /* 802.11i pmkids */
+};
+
+/*
+ * WME AC parameter field
+ */
+struct ieee80211_wme_acparams {
+ uint8_t acp_aci_aifsn;
+ uint8_t acp_logcwminmax;
+ uint16_t acp_txop;
+};
+
+/*
+ * WME Parameter Element
+ */
+struct ieee80211_wme_param {
+ uint8_t wme_id;
+ uint8_t wme_len;
+ uint8_t wme_oui[3];
+ uint8_t wme_oui_type;
+ uint8_t wme_oui_sybtype;
+ uint8_t wme_version;
+ uint8_t wme_qosInfo;
+ uint8_t wme_reserved;
+ struct ieee80211_wme_acparams wme_acParams[WME_NUM_AC];
+};
+#pragma pack()
+
+#define IEEE80211_FC0_VERSION_MASK 0x03
+#define IEEE80211_FC0_VERSION_SHIFT 0
+#define IEEE80211_FC0_VERSION_0 0x00
+#define IEEE80211_FC0_TYPE_MASK 0x0c
+#define IEEE80211_FC0_TYPE_SHIFT 2
+#define IEEE80211_FC0_TYPE_MGT 0x00
+#define IEEE80211_FC0_TYPE_CTL 0x04
+#define IEEE80211_FC0_TYPE_DATA 0x08
+#define IEEE80211_FC0_SUBTYPE_MASK 0xf0
+#define IEEE80211_FC0_SUBTYPE_SHIFT 4
+/* for TYPE_MGT */
+#define IEEE80211_FC0_SUBTYPE_ASSOC_REQ 0x00
+#define IEEE80211_FC0_SUBTYPE_ASSOC_RESP 0x10
+#define IEEE80211_FC0_SUBTYPE_REASSOC_REQ 0x20
+#define IEEE80211_FC0_SUBTYPE_REASSOC_RESP 0x30
+#define IEEE80211_FC0_SUBTYPE_PROBE_REQ 0x40
+#define IEEE80211_FC0_SUBTYPE_PROBE_RESP 0x50
+#define IEEE80211_FC0_SUBTYPE_BEACON 0x80
+#define IEEE80211_FC0_SUBTYPE_ATIM 0x90
+#define IEEE80211_FC0_SUBTYPE_DISASSOC 0xa0
+#define IEEE80211_FC0_SUBTYPE_AUTH 0xb0
+#define IEEE80211_FC0_SUBTYPE_DEAUTH 0xc0
+/* for TYPE_CTL */
+#define IEEE80211_FC0_SUBTYPE_PS_POLL 0xa0
+#define IEEE80211_FC0_SUBTYPE_RTS 0xb0
+#define IEEE80211_FC0_SUBTYPE_CTS 0xc0
+#define IEEE80211_FC0_SUBTYPE_ACK 0xd0
+#define IEEE80211_FC0_SUBTYPE_CF_END 0xe0
+#define IEEE80211_FC0_SUBTYPE_CF_END_ACK 0xf0
+/* for TYPE_DATA (bit combination) */
+#define IEEE80211_FC0_SUBTYPE_DATA 0x00
+#define IEEE80211_FC0_SUBTYPE_CF_ACK 0x10
+#define IEEE80211_FC0_SUBTYPE_CF_POLL 0x20
+#define IEEE80211_FC0_SUBTYPE_CF_ACPL 0x30
+#define IEEE80211_FC0_SUBTYPE_NODATA 0x40
+#define IEEE80211_FC0_SUBTYPE_CFACK 0x50
+#define IEEE80211_FC0_SUBTYPE_CFPOLL 0x60
+#define IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK 0x70
+#define IEEE80211_FC0_SUBTYPE_QOS 0x80
+#define IEEE80211_FC0_SUBTYPE_QOS_NULL 0xc0
+
+#define IEEE80211_FC1_DIR_MASK 0x03
+#define IEEE80211_FC1_DIR_NODS 0x00 /* STA->STA */
+#define IEEE80211_FC1_DIR_TODS 0x01 /* STA->AP */
+#define IEEE80211_FC1_DIR_FROMDS 0x02 /* AP ->STA */
+#define IEEE80211_FC1_DIR_DSTODS 0x03 /* AP ->AP */
+#define IEEE80211_FC1_MORE_FRAG 0x04
+#define IEEE80211_FC1_RETRY 0x08
+#define IEEE80211_FC1_PWR_MGT 0x10
+#define IEEE80211_FC1_MORE_DATA 0x20
+#define IEEE80211_FC1_WEP 0x40
+#define IEEE80211_FC1_ORDER 0x80
+
+#define IEEE80211_SEQ_FRAG_MASK 0x000f
+#define IEEE80211_SEQ_FRAG_SHIFT 0
+#define IEEE80211_SEQ_SEQ_MASK 0xfff0
+#define IEEE80211_SEQ_SEQ_SHIFT 4 /* 4bit frag number */
+
+/* Length of management frame variable-length components in bytes */
+#define IEEE80211_NWID_LEN 32 /* SSID */
+#define IEEE80211_FH_LEN 5 /* FH parameters */
+#define IEEE80211_DS_LEN 1 /* DS parameters */
+#define IEEE80211_IBSS_LEN 4 /* IBSS parameters */
+#define IEEE80211_ERP_LEN 1 /* ERP information */
+
+/*
+ * Length of management frame information elements containing
+ * a variable-length component is:
+ * element_id(1 byte) + length(1 byte) + component(variable bytes)
+ */
+#define IEEE80211_ELEM_LEN(complen) (2 + (complen))
+
+/*
+ * minimal length of beacon/probe response frame elements
+ * time stamp[8] + beacon interval[2] + capability[2]
+ */
+#define IEEE80211_BEACON_ELEM_MIN 12
+/*
+ * Minimal length of authentication frame elements
+ * algorithm[2] + sequence[2] + status[2]
+ */
+#define IEEE80211_AUTH_ELEM_MIN 6
+/*
+ * Minimal length of association response frame elements
+ * capability[2] + status[2] + association ID[2]
+ */
+#define IEEE80211_ASSOC_RESP_ELEM_MIN 6
+
+#define IEEE80211_CAPINFO_ESS 0x0001
+#define IEEE80211_CAPINFO_IBSS 0x0002
+#define IEEE80211_CAPINFO_CF_POLLABLE 0x0004
+#define IEEE80211_CAPINFO_CF_POLLREQ 0x0008
+#define IEEE80211_CAPINFO_PRIVACY 0x0010
+#define IEEE80211_CAPINFO_SHORT_PREAMBLE 0x0020
+#define IEEE80211_CAPINFO_PBCC 0x0040
+#define IEEE80211_CAPINFO_CHNL_AGILITY 0x0080
+/* bits 8-9 are reserved */
+#define IEEE80211_CAPINFO_SHORT_SLOTTIME 0x0400
+#define IEEE80211_CAPINFO_RSN 0x0800
+/* bit 12 is reserved */
+#define IEEE80211_CAPINFO_DSSSOFDM 0x2000
+/* bits 14-15 are reserved */
+
+/*
+ * Management information element payloads.
+ */
+
+enum {
+ IEEE80211_ELEMID_SSID = 0,
+ IEEE80211_ELEMID_RATES = 1,
+ IEEE80211_ELEMID_FHPARMS = 2,
+ IEEE80211_ELEMID_DSPARMS = 3,
+ IEEE80211_ELEMID_CFPARMS = 4,
+ IEEE80211_ELEMID_TIM = 5,
+ IEEE80211_ELEMID_IBSSPARMS = 6,
+ IEEE80211_ELEMID_COUNTRY = 7,
+ IEEE80211_ELEMID_CHALLENGE = 16,
+ /* 17-31 reserved for challenge text extension */
+ IEEE80211_ELEMID_ERP = 42,
+ IEEE80211_ELEMID_RSN = 48,
+ IEEE80211_ELEMID_XRATES = 50,
+ /* 128-129 proprietary elements used by Agere chipsets */
+ IEEE80211_ELEMID_AGERE1 = 128,
+ IEEE80211_ELEMID_AGERE2 = 129,
+ IEEE80211_ELEMID_TPC = 150,
+ IEEE80211_ELEMID_CCKM = 156,
+ IEEE80211_ELEMID_VENDOR = 221 /* vendor private */
+};
+
+#define IEEE80211_CHALLENGE_LEN 128
+
+#define IEEE80211_RATE_BASIC 0x80
+#define IEEE80211_RATE_VAL 0x7f
+
+/* EPR information element flags */
+#define IEEE80211_ERP_NON_ERP_PRESENT 0x01
+#define IEEE80211_ERP_USE_PROTECTION 0x02
+#define IEEE80211_ERP_LONG_PREAMBLE 0x04
+
+#define IEEE80211_AUTH_ALG_OPEN 0x0000
+#define IEEE80211_AUTH_ALG_SHARED 0x0001
+#define IEEE80211_AUTH_ALG_LEAP 0x0080
+
+
+enum {
+ IEEE80211_AUTH_OPEN_REQUEST = 1,
+ IEEE80211_AUTH_OPEN_RESPONSE = 2
+};
+
+enum {
+ IEEE80211_AUTH_SHARED_REQUEST = 1,
+ IEEE80211_AUTH_SHARED_CHALLENGE = 2,
+ IEEE80211_AUTH_SHARED_RESPONSE = 3,
+ IEEE80211_AUTH_SHARED_PASS = 4
+};
+
+/*
+ * Reason codes
+ *
+ * Unlisted codes are reserved
+ */
+enum {
+ IEEE80211_REASON_UNSPECIFIED = 1,
+ IEEE80211_REASON_AUTH_EXPIRE = 2,
+ IEEE80211_REASON_AUTH_LEAVE = 3,
+ IEEE80211_REASON_ASSOC_EXPIRE = 4,
+ IEEE80211_REASON_ASSOC_TOOMANY = 5,
+ IEEE80211_REASON_NOT_AUTHED = 6,
+ IEEE80211_REASON_NOT_ASSOCED = 7,
+ IEEE80211_REASON_ASSOC_LEAVE = 8,
+ IEEE80211_REASON_ASSOC_NOT_AUTHED = 9,
+ IEEE80211_REASON_INVALID_POWER = 10,
+ IEEE80211_REASON_RSN_REQUIRED = 11,
+ IEEE80211_REASON_RSN_INCONSISTENT = 12,
+ IEEE80211_REASON_IE_INVALID = 13,
+ IEEE80211_REASON_MIC_FAILURE = 14
+};
+
+/*
+ * Status codes
+ *
+ * Unlisted codes are reserved and unused
+ */
+enum {
+ IEEE80211_STATUS_SUCCESS = 0,
+ IEEE80211_STATUS_UNSPECIFIED = 1,
+ IEEE80211_STATUS_CAPINFO = 10,
+ IEEE80211_STATUS_NOT_ASSOCED = 11,
+ IEEE80211_STATUS_OTHER = 12,
+ IEEE80211_STATUS_ALG = 13,
+ IEEE80211_STATUS_SEQUENCE = 14,
+ IEEE80211_STATUS_CHALLENGE = 15,
+ IEEE80211_STATUS_TIMEOUT = 16,
+ IEEE80211_STATUS_TOOMANY = 17,
+ IEEE80211_STATUS_BASIC_RATE = 18,
+ IEEE80211_STATUS_SP_REQUIRED = 19,
+ IEEE80211_STATUS_PBCC_REQUIRED = 20,
+ IEEE80211_STATUS_CA_REQUIRED = 21,
+ IEEE80211_STATUS_TOO_MANY_STATIONS = 22,
+ IEEE80211_STATUS_RATES = 23,
+ IEEE80211_STATUS_SHORTSLOT_REQUIRED = 25,
+ IEEE80211_STATUS_DSSSOFDM_REQUIRED = 26
+};
+
+#define IEEE80211_WEP_KEYLEN 5 /* 40bit */
+#define IEEE80211_WEP_IVLEN 3 /* 24bit */
+#define IEEE80211_WEP_KIDLEN 1 /* 1 octet */
+#define IEEE80211_WEP_CRCLEN 4 /* CRC-32 */
+#define IEEE80211_WEP_NKID 4 /* number of key ids */
+
+#define IEEE80211_CRC_LEN 4
+
+/*
+ * Maximum acceptable MTU is defined by 802.11
+ * Min is arbitrarily chosen > IEEE80211_MIN_LEN.
+ */
+#define IEEE80211_MTU_MAX 2304
+#define IEEE80211_MTU_MIN 32
+#define IEEE80211_MTU 1500
+
+#define IEEE80211_MAX_LEN \
+ (sizeof (struct ieee80211_frame_addr4) + \
+ (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN) + \
+ IEEE80211_MTU_MAX + IEEE80211_CRC_LEN)
+#define IEEE80211_ACK_LEN \
+ (sizeof (struct ieee80211_frame_ack) + IEEE80211_CRC_LEN)
+#define IEEE80211_MIN_LEN \
+ (sizeof (struct ieee80211_frame_min) + IEEE80211_CRC_LEN)
+
+/*
+ * The 802.11 spec says at most 2007 stations may be
+ * associated at once. For most AP's this is way more
+ * than is feasible so we use a default of 128. This
+ * number may be overridden by the driver and/or by
+ * user configuration.
+ */
+#define IEEE80211_AID_MAX 2007
+#define IEEE80211_AID_DEF 128
+
+#define IEEE80211_AID(b) ((b) &~ 0xc000)
+
+/*
+ * RTS frame length parameters. The default is specified in
+ * the 802.11 spec as 512; we treat it as implementation-dependent
+ * so it's defined in ieee80211_var.h. The max may be wrong
+ * for jumbo frames.
+ */
+#define IEEE80211_RTS_MIN 1
+#define IEEE80211_RTS_MAX 2346
+
+/*
+ * TX fragmentation parameters. As above for RTS, we treat
+ * default as implementation-dependent so define it elsewhere.
+ */
+#define IEEE80211_FRAG_MIN 256
+#define IEEE80211_FRAG_MAX 2346
+
+/* flags for ieee80211_fix_rate() */
+#define IEEE80211_F_DOSORT 0x00000001 /* sort rate list */
+#define IEEE80211_F_DOFRATE 0x00000002 /* use fixed rate */
+#define IEEE80211_F_DONEGO 0x00000004 /* calc negotiated rate */
+#define IEEE80211_F_DODEL 0x00000008 /* delete ignore rate */
+
+/*
+ * Beacon frames constructed by ieee80211_beacon_alloc
+ * have the following structure filled in so drivers
+ * can update the frame later w/ minimal overhead.
+ */
+struct ieee80211_beacon_offsets {
+ uint16_t *bo_caps; /* capabilities */
+ uint8_t *bo_tim; /* start of atim/dtim */
+ uint8_t *bo_wme; /* start of WME parameters */
+ uint8_t *bo_trailer; /* start of fixed-size trailer */
+ uint16_t bo_tim_len; /* atim/dtim length in bytes */
+ uint16_t bo_trailer_len; /* trailer length in bytes */
+ uint8_t *bo_erp; /* start of ERP element */
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_NET80211_PROTO_H */
diff --git a/usr/src/uts/intel/Makefile.intel.shared b/usr/src/uts/intel/Makefile.intel.shared
index 2c3f70e909..9804adb9a9 100644
--- a/usr/src/uts/intel/Makefile.intel.shared
+++ b/usr/src/uts/intel/Makefile.intel.shared
@@ -493,6 +493,7 @@ MISC_KMODS += kmech_krb5
MISC_KMODS += krtld
MISC_KMODS += mac
MISC_KMODS += mixer
+MISC_KMODS += net80211
MISC_KMODS += nfs_dlboot
MISC_KMODS += nfssrv
MISC_KMODS += neti
@@ -589,6 +590,7 @@ PCBE_KMODS += p123_pcbe p4_pcbe opteron_pcbe
# MAC-Type Plugin Modules (/kernel/mac)
#
MAC_KMODS += mac_ether
+MAC_KMODS += mac_wifi
#
# 'Devname' Modules (kernel/devname)
diff --git a/usr/src/uts/intel/ath/Makefile b/usr/src/uts/intel/ath/Makefile
index d2b6f4e1d8..39e1bc3f79 100644
--- a/usr/src/uts/intel/ath/Makefile
+++ b/usr/src/uts/intel/ath/Makefile
@@ -41,11 +41,9 @@ UTSBASE = ../..
MODULE = ath
OBJECTS = $(ATH_OBJS:%=$(OBJS_DIR)/%) $(OBJS_DIR)/hal.o
LINTS = $(LINTS_DIR)/ath_aux.ln \
- $(LINTS_DIR)/ath_ieee80211.ln \
$(LINTS_DIR)/ath_main.ln \
$(LINTS_DIR)/ath_osdep.ln \
- $(LINTS_DIR)/ath_rate.ln \
- $(LINTS_DIR)/ath_wificonfig.ln
+ $(LINTS_DIR)/ath_rate.ln
ROOTMODULE = $(ROOT_DRV_DIR)/$(MODULE)
@@ -62,9 +60,9 @@ LINT_TARGET = $(MODULE).lint
INSTALL_TARGET = $(BINARY) $(ROOTMODULE)
#
-# Driver depends on GLD & IP.
+# Driver depends on GLDv3 & wifi kernel support module.
#
-LDFLAGS += -dy -Nmisc/gld -Ndrv/ip
+LDFLAGS += -dy -Nmisc/mac -Nmisc/net80211
#
# For now, disable these lint checks; maintainers should endeavor
diff --git a/usr/src/uts/intel/mac_wifi/Makefile b/usr/src/uts/intel/mac_wifi/Makefile
new file mode 100644
index 0000000000..b9880691dd
--- /dev/null
+++ b/usr/src/uts/intel/mac_wifi/Makefile
@@ -0,0 +1,92 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+#
+# This makefile drives the production of the mac_wifi plugin
+# kernel module.
+#
+
+#
+# Path to the base of the uts directory tree (usually /usr/src/uts).
+#
+UTSBASE = ../..
+
+#
+# Define the module and object file sets.
+#
+MODULE = mac_wifi
+OBJECTS = $(MAC_WIFI_OBJS:%=$(OBJS_DIR)/%)
+LINTS = $(MAC_WIFI_OBJS:%.o=$(LINTS_DIR)/%.ln)
+ROOTMODULE = $(ROOT_MAC_DIR)/$(MODULE)
+
+#
+# Include common rules.
+#
+include $(UTSBASE)/intel/Makefile.intel
+
+#
+# Define targets
+#
+ALL_TARGET = $(BINARY)
+LINT_TARGET = $(MODULE).lint
+INSTALL_TARGET = $(BINARY) $(ROOTMODULE)
+
+#
+# Overrides.
+#
+CFLAGS += $(CCVERBOSE)
+LDFLAGS += -dy -Nmisc/mac
+#
+# STREAMS API limitations force us to turn off these lint checks.
+#
+LINTTAGS += -erroff=E_BAD_PTR_CAST_ALIGN
+LINTTAGS += -erroff=E_PTRDIFF_OVERFLOW
+
+#
+# Default build targets.
+#
+.KEEP_STATE:
+
+def: $(DEF_DEPS)
+
+all: $(ALL_DEPS)
+
+clean: $(CLEAN_DEPS)
+
+clobber: $(CLOBBER_DEPS)
+
+lint: $(LINT_DEPS)
+
+modlintlib: $(MODLINTLIB_DEPS)
+
+clean.lint: $(CLEAN_LINT_DEPS)
+
+install: $(INSTALL_DEPS)
+
+#
+# Include common targets.
+#
+include $(UTSBASE)/intel/Makefile.targ
diff --git a/usr/src/uts/intel/net80211/Makefile b/usr/src/uts/intel/net80211/Makefile
new file mode 100644
index 0000000000..3365320fe7
--- /dev/null
+++ b/usr/src/uts/intel/net80211/Makefile
@@ -0,0 +1,95 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+# ident "%Z%%M% %I% %E% SMI"
+
+#
+# This file makes the atheros driver for an intel system
+#
+# intel architecture dependent
+#
+
+#
+# Path to the base of the uts directory tree (usually /usr/src/uts).
+#
+UTSBASE = ../..
+#
+# Define the module and object file sets.
+#
+MODULE = net80211
+OBJECTS = $(NET80211_OBJS:%=$(OBJS_DIR)/%)
+LINTS = $(NET80211_OBJS:%.o=$(LINTS_DIR)/%.ln)
+ROOTMODULE = $(ROOT_MISC_DIR)/$(MODULE)
+
+#
+# Include common rules.
+#
+include $(UTSBASE)/intel/Makefile.intel
+
+#
+# Define targets
+#
+ALL_TARGET = $(BINARY)
+LINT_TARGET = $(MODULE).lint
+INSTALL_TARGET = $(BINARY) $(ROOTMODULE)
+
+#
+# Overrides
+#
+CFLAGS += $(CCVERBOSE)
+LDFLAGS += -dy -Nmisc/mac -Nmac/mac_wifi -Ndrv/ip
+
+#
+# STREAMS API limitations force us to turn off these lint checks.
+#
+LINTTAGS += -erroff=E_BAD_PTR_CAST_ALIGN
+LINTTAGS += -erroff=E_PTRDIFF_OVERFLOW
+
+#
+# Default build targets.
+#
+.KEEP_STATE:
+
+def: $(DEF_DEPS)
+
+all: $(ALL_DEPS)
+
+clean: $(CLEAN_DEPS)
+
+clobber: $(CLOBBER_DEPS)
+
+lint: $(LINT_DEPS)
+
+modlintlib: $(MODLINTLIB_DEPS)
+
+clean.lint: $(CLEAN_LINT_DEPS)
+
+install: $(INSTALL_DEPS)
+
+#
+# Include common targets.
+#
+include $(UTSBASE)/intel/Makefile.targ
diff --git a/usr/src/uts/intel/os/minor_perm b/usr/src/uts/intel/os/minor_perm
index 582bdecb60..70bee731e6 100644
--- a/usr/src/uts/intel/os/minor_perm
+++ b/usr/src/uts/intel/os/minor_perm
@@ -11,7 +11,6 @@ clone:pcelx 0666 root sys
pcelx:* 0666 root sys
clone:spwr 0666 root sys
spwr:* 0666 root sys
-clone:e1000g 0666 root sys
icmp:icmp 0666 root sys
icmp6:icmp6 0666 root sys
ip:ip 0666 root sys
@@ -122,3 +121,21 @@ scsi_vhci:* 0666 root sys
kssl:* 0666 root sys
lx_ptm:lx_ptmajor 0666 root sys
lx_systrace:* 0644 root sys
+clone:bge 0666 root sys
+clone:rge 0666 root sys
+clone:xge 0666 root sys
+clone:nge 0666 root sys
+clone:e1000g 0666 root sys
+clone:chxge 0666 root sys
+clone:pcn 0666 root sys
+clone:rtls 0666 root sys
+clone:ath 0666 root sys
+bge:* 0666 root sys
+rge:* 0666 root sys
+xge:* 0666 root sys
+nge:* 0666 root sys
+e1000g:* 0666 root sys
+chxge:* 0666 root sys
+pcn:* 0666 root sys
+rtls:* 0666 root sys
+ath:* 0666 root sys
diff --git a/usr/src/uts/sparc/os/minor_perm b/usr/src/uts/sparc/os/minor_perm
index bd165cbef9..3a944da560 100644
--- a/usr/src/uts/sparc/os/minor_perm
+++ b/usr/src/uts/sparc/os/minor_perm
@@ -149,3 +149,20 @@ zfs:* 0600 root sys
zfs:zfs 0666 root sys
scsi_vhci:* 0666 root sys
kssl:* 0666 root sys
+clone:bge 0666 root sys
+clone:rge 0666 root sys
+clone:xge 0666 root sys
+clone:nge 0666 root sys
+clone:e1000g 0666 root sys
+clone:chxge 0666 root sys
+clone:ath 0666 root sys
+clone:vsw 0666 root sys
+clone:vnet 0666 root sys
+bge:* 0666 root sys
+rge:* 0666 root sys
+xge:* 0666 root sys
+nge:* 0666 root sys
+e1000g:* 0666 root sys
+chxge:* 0666 root sys
+vsw:* 0666 root sys
+vnet:* 0666 root sys