From 76620aafd66f0004829764940c5466144969cffc Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Thu, 16 Apr 2009 02:02:07 -0700 Subject: gro: New frags interface to avoid copying shinfo It turns out that copying a 16-byte area at ~800k times a second can be really expensive :) This patch redesigns the frags GRO interface to avoid copying that area twice. The two disciples of the frags interface have been converted. Signed-off-by: Herbert Xu Signed-off-by: David S. Miller --- drivers/net/cxgb3/adapter.h | 2 +- drivers/net/cxgb3/sge.c | 53 +++++++++++++++++++++++++++------------------ 2 files changed, 33 insertions(+), 22 deletions(-) (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/cxgb3/adapter.h b/drivers/net/cxgb3/adapter.h index 714df2b675e..322434ac42f 100644 --- a/drivers/net/cxgb3/adapter.h +++ b/drivers/net/cxgb3/adapter.h @@ -195,7 +195,7 @@ struct sge_qset { /* an SGE queue set */ struct sge_rspq rspq; struct sge_fl fl[SGE_RXQ_PER_SET]; struct sge_txq txq[SGE_TXQ_PER_SET]; - struct napi_gro_fraginfo lro_frag_tbl; + int nomem; int lro_enabled; void *lro_va; struct net_device *netdev; diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c index 26d3587f339..73d569e758e 100644 --- a/drivers/net/cxgb3/sge.c +++ b/drivers/net/cxgb3/sge.c @@ -654,7 +654,8 @@ static void t3_reset_qset(struct sge_qset *q) q->txq_stopped = 0; q->tx_reclaim_timer.function = NULL; /* for t3_stop_sge_timers() */ q->rx_reclaim_timer.function = NULL; - q->lro_frag_tbl.nr_frags = q->lro_frag_tbl.len = 0; + q->nomem = 0; + napi_free_frags(&q->napi); } @@ -2074,20 +2075,19 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs, struct sge_fl *fl, int len, int complete) { struct rx_sw_desc *sd = &fl->sdesc[fl->cidx]; + struct sk_buff *skb = NULL; struct cpl_rx_pkt *cpl; - struct skb_frag_struct *rx_frag = qs->lro_frag_tbl.frags; - int nr_frags = qs->lro_frag_tbl.nr_frags; - int frag_len = qs->lro_frag_tbl.len; + struct skb_frag_struct *rx_frag; + int nr_frags; int offset = 0; - if (!nr_frags) { - offset = 2 + sizeof(struct cpl_rx_pkt); - qs->lro_va = cpl = sd->pg_chunk.va + 2; + if (!qs->nomem) { + skb = napi_get_frags(&qs->napi); + qs->nomem = !skb; } fl->credits--; - len -= offset; pci_dma_sync_single_for_cpu(adap->pdev, pci_unmap_addr(sd, dma_addr), fl->buf_size - SGE_PG_RSVD, @@ -2100,21 +2100,38 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs, fl->alloc_size, PCI_DMA_FROMDEVICE); + if (!skb) { + put_page(sd->pg_chunk.page); + if (complete) + qs->nomem = 0; + return; + } + + rx_frag = skb_shinfo(skb)->frags; + nr_frags = skb_shinfo(skb)->nr_frags; + + if (!nr_frags) { + offset = 2 + sizeof(struct cpl_rx_pkt); + qs->lro_va = sd->pg_chunk.va + 2; + } + len -= offset; + prefetch(qs->lro_va); rx_frag += nr_frags; rx_frag->page = sd->pg_chunk.page; rx_frag->page_offset = sd->pg_chunk.offset + offset; rx_frag->size = len; - frag_len += len; - qs->lro_frag_tbl.nr_frags++; - qs->lro_frag_tbl.len = frag_len; + skb->len += len; + skb->data_len += len; + skb->truesize += len; + skb_shinfo(skb)->nr_frags++; if (!complete) return; - qs->lro_frag_tbl.ip_summed = CHECKSUM_UNNECESSARY; + skb->ip_summed = CHECKSUM_UNNECESSARY; cpl = qs->lro_va; if (unlikely(cpl->vlan_valid)) { @@ -2123,15 +2140,11 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs, struct vlan_group *grp = pi->vlan_grp; if (likely(grp != NULL)) { - vlan_gro_frags(&qs->napi, grp, ntohs(cpl->vlan), - &qs->lro_frag_tbl); - goto out; + vlan_gro_frags(&qs->napi, grp, ntohs(cpl->vlan)); + return; } } - napi_gro_frags(&qs->napi, &qs->lro_frag_tbl); - -out: - qs->lro_frag_tbl.nr_frags = qs->lro_frag_tbl.len = 0; + napi_gro_frags(&qs->napi); } /** @@ -2300,8 +2313,6 @@ no_mem: if (fl->use_pages) { void *addr = fl->sdesc[fl->cidx].pg_chunk.va; - prefetch(&qs->lro_frag_tbl); - prefetch(addr); #if L1_CACHE_BYTES < 128 prefetch(addr + L1_CACHE_BYTES); -- cgit v1.2.3-70-g09d2 From 0f07c4ee8c800923ae7918c231532a9256233eed Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Wed, 29 Apr 2009 08:07:20 +0000 Subject: cxgb3: Use generic MDIO definitions and mdio_mii_ioctl() Compile-tested only. Signed-off-by: Ben Hutchings Signed-off-by: David S. Miller --- drivers/net/Kconfig | 1 + drivers/net/cxgb3/ael1002.c | 146 +++++++++++++++++++++-------------------- drivers/net/cxgb3/common.h | 53 +++++++-------- drivers/net/cxgb3/cxgb3_main.c | 71 ++++---------------- drivers/net/cxgb3/t3_hw.c | 78 ++++++++++++---------- drivers/net/cxgb3/vsc8211.c | 70 +++++++++++--------- 6 files changed, 195 insertions(+), 224 deletions(-) (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 1ccd54714c4..435bbc96444 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -2483,6 +2483,7 @@ config CHELSIO_T3 tristate "Chelsio Communications T3 10Gb Ethernet support" depends on CHELSIO_T3_DEPENDS select FW_LOADER + select MDIO help This driver supports Chelsio T3-based gigabit and 10Gb Ethernet adapters. diff --git a/drivers/net/cxgb3/ael1002.c b/drivers/net/cxgb3/ael1002.c index e1b22490ff5..bebc00d2424 100644 --- a/drivers/net/cxgb3/ael1002.c +++ b/drivers/net/cxgb3/ael1002.c @@ -33,14 +33,6 @@ #include "regs.h" enum { - PMD_RSD = 10, /* PMA/PMD receive signal detect register */ - PCS_STAT1_X = 24, /* 10GBASE-X PCS status 1 register */ - PCS_STAT1_R = 32, /* 10GBASE-R PCS status 1 register */ - XS_LN_STAT = 24 /* XS lane status register */ -}; - -enum { - AEL100X_TX_DISABLE = 9, AEL100X_TX_CONFIG1 = 0xc002, AEL1002_PWR_DOWN_HI = 0xc011, AEL1002_PWR_DOWN_LO = 0xc012, @@ -74,8 +66,8 @@ static int set_phy_regs(struct cphy *phy, const struct reg_val *rv) for (err = 0; rv->mmd_addr && !err; rv++) { if (rv->clear_bits == 0xffff) - err = mdio_write(phy, rv->mmd_addr, rv->reg_addr, - rv->set_bits); + err = t3_mdio_write(phy, rv->mmd_addr, rv->reg_addr, + rv->set_bits); else err = t3_mdio_change_bits(phy, rv->mmd_addr, rv->reg_addr, rv->clear_bits, @@ -86,7 +78,8 @@ static int set_phy_regs(struct cphy *phy, const struct reg_val *rv) static void ael100x_txon(struct cphy *phy) { - int tx_on_gpio = phy->addr == 0 ? F_GPIO7_OUT_VAL : F_GPIO2_OUT_VAL; + int tx_on_gpio = + phy->mdio.prtad == 0 ? F_GPIO7_OUT_VAL : F_GPIO2_OUT_VAL; msleep(100); t3_set_reg_field(phy->adapter, A_T3DBG_GPIO_EN, 0, tx_on_gpio); @@ -97,10 +90,11 @@ static int ael1002_power_down(struct cphy *phy, int enable) { int err; - err = mdio_write(phy, MDIO_DEV_PMA_PMD, AEL100X_TX_DISABLE, !!enable); + err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, MDIO_PMA_TXDIS, !!enable); if (!err) - err = t3_mdio_change_bits(phy, MDIO_DEV_PMA_PMD, MII_BMCR, - BMCR_PDOWN, enable ? BMCR_PDOWN : 0); + err = mdio_set_flag(&phy->mdio, phy->mdio.prtad, + MDIO_MMD_PMAPMD, MDIO_CTRL1, + MDIO_CTRL1_LPOWER, enable); return err; } @@ -109,11 +103,11 @@ static int ael1002_reset(struct cphy *phy, int wait) int err; if ((err = ael1002_power_down(phy, 0)) || - (err = mdio_write(phy, MDIO_DEV_PMA_PMD, AEL100X_TX_CONFIG1, 1)) || - (err = mdio_write(phy, MDIO_DEV_PMA_PMD, AEL1002_PWR_DOWN_HI, 0)) || - (err = mdio_write(phy, MDIO_DEV_PMA_PMD, AEL1002_PWR_DOWN_LO, 0)) || - (err = mdio_write(phy, MDIO_DEV_PMA_PMD, AEL1002_XFI_EQL, 0x18)) || - (err = t3_mdio_change_bits(phy, MDIO_DEV_PMA_PMD, AEL1002_LB_EN, + (err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL100X_TX_CONFIG1, 1)) || + (err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL1002_PWR_DOWN_HI, 0)) || + (err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL1002_PWR_DOWN_LO, 0)) || + (err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL1002_XFI_EQL, 0x18)) || + (err = t3_mdio_change_bits(phy, MDIO_MMD_PMAPMD, AEL1002_LB_EN, 0, 1 << 5))) return err; return 0; @@ -132,12 +126,15 @@ static int get_link_status_r(struct cphy *phy, int *link_ok, int *speed, { if (link_ok) { unsigned int stat0, stat1, stat2; - int err = mdio_read(phy, MDIO_DEV_PMA_PMD, PMD_RSD, &stat0); + int err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, + MDIO_PMA_RXDET, &stat0); if (!err) - err = mdio_read(phy, MDIO_DEV_PCS, PCS_STAT1_R, &stat1); + err = t3_mdio_read(phy, MDIO_MMD_PCS, + MDIO_PCS_10GBRT_STAT1, &stat1); if (!err) - err = mdio_read(phy, MDIO_DEV_XGXS, XS_LN_STAT, &stat2); + err = t3_mdio_read(phy, MDIO_MMD_PHYXS, + MDIO_PHYXS_LNSTAT, &stat2); if (err) return err; *link_ok = (stat0 & stat1 & (stat2 >> 12)) & 1; @@ -157,6 +154,7 @@ static struct cphy_ops ael1002_ops = { .intr_handler = ael1002_intr_noop, .get_link_status = get_link_status_r, .power_down = ael1002_power_down, + .mmds = MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS | MDIO_DEVS_PHYXS, }; int t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter, @@ -171,13 +169,13 @@ int t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter, static int ael1006_reset(struct cphy *phy, int wait) { - return t3_phy_reset(phy, MDIO_DEV_PMA_PMD, wait); + return t3_phy_reset(phy, MDIO_MMD_PMAPMD, wait); } static int ael1006_power_down(struct cphy *phy, int enable) { - return t3_mdio_change_bits(phy, MDIO_DEV_PMA_PMD, MII_BMCR, - BMCR_PDOWN, enable ? BMCR_PDOWN : 0); + return mdio_set_flag(&phy->mdio, phy->mdio.prtad, MDIO_MMD_PMAPMD, + MDIO_CTRL1, MDIO_CTRL1_LPOWER, enable); } static struct cphy_ops ael1006_ops = { @@ -188,6 +186,7 @@ static struct cphy_ops ael1006_ops = { .intr_handler = t3_phy_lasi_intr_handler, .get_link_status = get_link_status_r, .power_down = ael1006_power_down, + .mmds = MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS | MDIO_DEVS_PHYXS, }; int t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter, @@ -203,9 +202,9 @@ int t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter, static int ael2005_setup_sr_edc(struct cphy *phy) { static struct reg_val regs[] = { - { MDIO_DEV_PMA_PMD, 0xc003, 0xffff, 0x181 }, - { MDIO_DEV_PMA_PMD, 0xc010, 0xffff, 0x448a }, - { MDIO_DEV_PMA_PMD, 0xc04a, 0xffff, 0x5200 }, + { MDIO_MMD_PMAPMD, 0xc003, 0xffff, 0x181 }, + { MDIO_MMD_PMAPMD, 0xc010, 0xffff, 0x448a }, + { MDIO_MMD_PMAPMD, 0xc04a, 0xffff, 0x5200 }, { 0, 0, 0, 0 } }; static u16 sr_edc[] = { @@ -490,8 +489,8 @@ static int ael2005_setup_sr_edc(struct cphy *phy) msleep(50); for (i = 0; i < ARRAY_SIZE(sr_edc) && !err; i += 2) - err = mdio_write(phy, MDIO_DEV_PMA_PMD, sr_edc[i], - sr_edc[i + 1]); + err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, sr_edc[i], + sr_edc[i + 1]); if (!err) phy->priv = edc_sr; return err; @@ -500,12 +499,12 @@ static int ael2005_setup_sr_edc(struct cphy *phy) static int ael2005_setup_twinax_edc(struct cphy *phy, int modtype) { static struct reg_val regs[] = { - { MDIO_DEV_PMA_PMD, 0xc04a, 0xffff, 0x5a00 }, + { MDIO_MMD_PMAPMD, 0xc04a, 0xffff, 0x5a00 }, { 0, 0, 0, 0 } }; static struct reg_val preemphasis[] = { - { MDIO_DEV_PMA_PMD, 0xc014, 0xffff, 0xfe16 }, - { MDIO_DEV_PMA_PMD, 0xc015, 0xffff, 0xa000 }, + { MDIO_MMD_PMAPMD, 0xc014, 0xffff, 0xfe16 }, + { MDIO_MMD_PMAPMD, 0xc015, 0xffff, 0xa000 }, { 0, 0, 0, 0 } }; static u16 twinax_edc[] = { @@ -887,8 +886,8 @@ static int ael2005_setup_twinax_edc(struct cphy *phy, int modtype) msleep(50); for (i = 0; i < ARRAY_SIZE(twinax_edc) && !err; i += 2) - err = mdio_write(phy, MDIO_DEV_PMA_PMD, twinax_edc[i], - twinax_edc[i + 1]); + err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, twinax_edc[i], + twinax_edc[i + 1]); if (!err) phy->priv = edc_twinax; return err; @@ -899,26 +898,26 @@ static int ael2005_i2c_rd(struct cphy *phy, int dev_addr, int word_addr) int i, err; unsigned int stat, data; - err = mdio_write(phy, MDIO_DEV_PMA_PMD, AEL_I2C_CTRL, - (dev_addr << 8) | (1 << 8) | word_addr); + err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL_I2C_CTRL, + (dev_addr << 8) | (1 << 8) | word_addr); if (err) return err; for (i = 0; i < 5; i++) { msleep(1); - err = mdio_read(phy, MDIO_DEV_PMA_PMD, AEL_I2C_STAT, &stat); + err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL_I2C_STAT, &stat); if (err) return err; if ((stat & 3) == 1) { - err = mdio_read(phy, MDIO_DEV_PMA_PMD, AEL_I2C_DATA, - &data); + err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL_I2C_DATA, + &data); if (err) return err; return data >> 8; } } CH_WARN(phy->adapter, "PHY %u I2C read of addr %u timed out\n", - phy->addr, word_addr); + phy->mdio.prtad, word_addr); return -ETIMEDOUT; } @@ -927,7 +926,7 @@ static int get_module_type(struct cphy *phy, int delay_ms) int v; unsigned int stat; - v = mdio_read(phy, MDIO_DEV_PMA_PMD, AEL2005_GPIO_CTRL, &stat); + v = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL2005_GPIO_CTRL, &stat); if (v) return v; @@ -971,48 +970,48 @@ unknown: static int ael2005_intr_enable(struct cphy *phy) { - int err = mdio_write(phy, MDIO_DEV_PMA_PMD, AEL2005_GPIO_CTRL, 0x200); + int err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL2005_GPIO_CTRL, 0x200); return err ? err : t3_phy_lasi_intr_enable(phy); } static int ael2005_intr_disable(struct cphy *phy) { - int err = mdio_write(phy, MDIO_DEV_PMA_PMD, AEL2005_GPIO_CTRL, 0x100); + int err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL2005_GPIO_CTRL, 0x100); return err ? err : t3_phy_lasi_intr_disable(phy); } static int ael2005_intr_clear(struct cphy *phy) { - int err = mdio_write(phy, MDIO_DEV_PMA_PMD, AEL2005_GPIO_CTRL, 0xd00); + int err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL2005_GPIO_CTRL, 0xd00); return err ? err : t3_phy_lasi_intr_clear(phy); } static int ael2005_reset(struct cphy *phy, int wait) { static struct reg_val regs0[] = { - { MDIO_DEV_PMA_PMD, 0xc001, 0, 1 << 5 }, - { MDIO_DEV_PMA_PMD, 0xc017, 0, 1 << 5 }, - { MDIO_DEV_PMA_PMD, 0xc013, 0xffff, 0xf341 }, - { MDIO_DEV_PMA_PMD, 0xc210, 0xffff, 0x8000 }, - { MDIO_DEV_PMA_PMD, 0xc210, 0xffff, 0x8100 }, - { MDIO_DEV_PMA_PMD, 0xc210, 0xffff, 0x8000 }, - { MDIO_DEV_PMA_PMD, 0xc210, 0xffff, 0 }, + { MDIO_MMD_PMAPMD, 0xc001, 0, 1 << 5 }, + { MDIO_MMD_PMAPMD, 0xc017, 0, 1 << 5 }, + { MDIO_MMD_PMAPMD, 0xc013, 0xffff, 0xf341 }, + { MDIO_MMD_PMAPMD, 0xc210, 0xffff, 0x8000 }, + { MDIO_MMD_PMAPMD, 0xc210, 0xffff, 0x8100 }, + { MDIO_MMD_PMAPMD, 0xc210, 0xffff, 0x8000 }, + { MDIO_MMD_PMAPMD, 0xc210, 0xffff, 0 }, { 0, 0, 0, 0 } }; static struct reg_val regs1[] = { - { MDIO_DEV_PMA_PMD, 0xca00, 0xffff, 0x0080 }, - { MDIO_DEV_PMA_PMD, 0xca12, 0xffff, 0 }, + { MDIO_MMD_PMAPMD, 0xca00, 0xffff, 0x0080 }, + { MDIO_MMD_PMAPMD, 0xca12, 0xffff, 0 }, { 0, 0, 0, 0 } }; int err; unsigned int lasi_ctrl; - err = mdio_read(phy, MDIO_DEV_PMA_PMD, LASI_CTRL, &lasi_ctrl); + err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, LASI_CTRL, &lasi_ctrl); if (err) return err; - err = t3_phy_reset(phy, MDIO_DEV_PMA_PMD, 0); + err = t3_phy_reset(phy, MDIO_MMD_PMAPMD, 0); if (err) return err; @@ -1051,13 +1050,13 @@ static int ael2005_intr_handler(struct cphy *phy) unsigned int stat; int ret, edc_needed, cause = 0; - ret = mdio_read(phy, MDIO_DEV_PMA_PMD, AEL2005_GPIO_STAT, &stat); + ret = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL2005_GPIO_STAT, &stat); if (ret) return ret; if (stat & AEL2005_MODDET_IRQ) { - ret = mdio_write(phy, MDIO_DEV_PMA_PMD, AEL2005_GPIO_CTRL, - 0xd00); + ret = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL2005_GPIO_CTRL, + 0xd00); if (ret) return ret; @@ -1098,6 +1097,7 @@ static struct cphy_ops ael2005_ops = { .intr_handler = ael2005_intr_handler, .get_link_status = get_link_status_r, .power_down = ael1002_power_down, + .mmds = MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS | MDIO_DEVS_PHYXS, }; int t3_ael2005_phy_prep(struct cphy *phy, struct adapter *adapter, @@ -1107,7 +1107,7 @@ int t3_ael2005_phy_prep(struct cphy *phy, struct adapter *adapter, SUPPORTED_10000baseT_Full | SUPPORTED_AUI | SUPPORTED_FIBRE | SUPPORTED_IRQ, "10GBASE-R"); msleep(125); - return t3_mdio_change_bits(phy, MDIO_DEV_PMA_PMD, AEL_OPT_SETTINGS, 0, + return t3_mdio_change_bits(phy, MDIO_MMD_PMAPMD, AEL_OPT_SETTINGS, 0, 1 << 5); } @@ -1119,12 +1119,15 @@ static int get_link_status_x(struct cphy *phy, int *link_ok, int *speed, { if (link_ok) { unsigned int stat0, stat1, stat2; - int err = mdio_read(phy, MDIO_DEV_PMA_PMD, PMD_RSD, &stat0); + int err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, + MDIO_PMA_RXDET, &stat0); if (!err) - err = mdio_read(phy, MDIO_DEV_PCS, PCS_STAT1_X, &stat1); + err = t3_mdio_read(phy, MDIO_MMD_PCS, + MDIO_PCS_10GBX_STAT1, &stat1); if (!err) - err = mdio_read(phy, MDIO_DEV_XGXS, XS_LN_STAT, &stat2); + err = t3_mdio_read(phy, MDIO_MMD_PHYXS, + MDIO_PHYXS_LNSTAT, &stat2); if (err) return err; *link_ok = (stat0 & (stat1 >> 12) & (stat2 >> 12)) & 1; @@ -1144,6 +1147,7 @@ static struct cphy_ops qt2045_ops = { .intr_handler = t3_phy_lasi_intr_handler, .get_link_status = get_link_status_x, .power_down = ael1006_power_down, + .mmds = MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS | MDIO_DEVS_PHYXS, }; int t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, @@ -1159,9 +1163,10 @@ int t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, * Some cards where the PHY is supposed to be at address 0 actually * have it at 1. */ - if (!phy_addr && !mdio_read(phy, MDIO_DEV_PMA_PMD, MII_BMSR, &stat) && + if (!phy_addr && + !t3_mdio_read(phy, MDIO_MMD_PMAPMD, MDIO_STAT1, &stat) && stat == 0xffff) - phy->addr = 1; + phy->mdio.prtad = 1; return 0; } @@ -1175,15 +1180,16 @@ static int xaui_direct_get_link_status(struct cphy *phy, int *link_ok, { if (link_ok) { unsigned int status; + int prtad = phy->mdio.prtad; status = t3_read_reg(phy->adapter, - XGM_REG(A_XGM_SERDES_STAT0, phy->addr)) | + XGM_REG(A_XGM_SERDES_STAT0, prtad)) | t3_read_reg(phy->adapter, - XGM_REG(A_XGM_SERDES_STAT1, phy->addr)) | + XGM_REG(A_XGM_SERDES_STAT1, prtad)) | t3_read_reg(phy->adapter, - XGM_REG(A_XGM_SERDES_STAT2, phy->addr)) | + XGM_REG(A_XGM_SERDES_STAT2, prtad)) | t3_read_reg(phy->adapter, - XGM_REG(A_XGM_SERDES_STAT3, phy->addr)); + XGM_REG(A_XGM_SERDES_STAT3, prtad)); *link_ok = !(status & F_LOWSIG0); } if (speed) @@ -1211,7 +1217,7 @@ static struct cphy_ops xaui_direct_ops = { int t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr, const struct mdio_ops *mdio_ops) { - cphy_init(phy, adapter, phy_addr, &xaui_direct_ops, mdio_ops, + cphy_init(phy, adapter, MDIO_PRTAD_NONE, &xaui_direct_ops, mdio_ops, SUPPORTED_10000baseT_Full | SUPPORTED_AUI | SUPPORTED_TP, "10GBASE-CX4"); return 0; diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h index e508dc32f3e..3147789aece 100644 --- a/drivers/net/cxgb3/common.h +++ b/drivers/net/cxgb3/common.h @@ -39,7 +39,7 @@ #include #include #include -#include +#include #include "version.h" #define CH_ERR(adap, fmt, ...) dev_err(&adap->pdev->dev, fmt, ## __VA_ARGS__) @@ -184,10 +184,11 @@ struct cphy; struct adapter; struct mdio_ops { - int (*read)(struct adapter *adapter, int phy_addr, int mmd_addr, - int reg_addr, unsigned int *val); - int (*write)(struct adapter *adapter, int phy_addr, int mmd_addr, - int reg_addr, unsigned int val); + int (*read)(struct net_device *dev, int phy_addr, int mmd_addr, + u16 reg_addr); + int (*write)(struct net_device *dev, int phy_addr, int mmd_addr, + u16 reg_addr, u16 val); + unsigned mode_support; }; struct adapter_info { @@ -520,17 +521,6 @@ enum { MAC_RXFIFO_SIZE = 32768 }; -/* IEEE 802.3 specified MDIO devices */ -enum { - MDIO_DEV_PMA_PMD = 1, - MDIO_DEV_WIS = 2, - MDIO_DEV_PCS = 3, - MDIO_DEV_XGXS = 4, - MDIO_DEV_ANEG = 7, - MDIO_DEV_VEND1 = 30, - MDIO_DEV_VEND2 = 31 -}; - /* LASI control and status registers */ enum { RX_ALARM_CTRL = 0x9000, @@ -583,11 +573,12 @@ struct cphy_ops { int (*get_link_status)(struct cphy *phy, int *link_ok, int *speed, int *duplex, int *fc); int (*power_down)(struct cphy *phy, int enable); + + u32 mmds; }; /* A PHY instance */ struct cphy { - u8 addr; /* PHY address */ u8 modtype; /* PHY module type */ short priv; /* scratch pad */ unsigned int caps; /* PHY capabilities */ @@ -595,23 +586,23 @@ struct cphy { const char *desc; /* PHY description */ unsigned long fifo_errors; /* FIFO over/under-flows */ const struct cphy_ops *ops; /* PHY operations */ - int (*mdio_read)(struct adapter *adapter, int phy_addr, int mmd_addr, - int reg_addr, unsigned int *val); - int (*mdio_write)(struct adapter *adapter, int phy_addr, int mmd_addr, - int reg_addr, unsigned int val); + struct mdio_if_info mdio; }; /* Convenience MDIO read/write wrappers */ -static inline int mdio_read(struct cphy *phy, int mmd, int reg, - unsigned int *valp) +static inline int t3_mdio_read(struct cphy *phy, int mmd, int reg, + unsigned int *valp) { - return phy->mdio_read(phy->adapter, phy->addr, mmd, reg, valp); + int rc = phy->mdio.mdio_read(phy->mdio.dev, phy->mdio.prtad, mmd, reg); + *valp = (rc >= 0) ? rc : -1; + return (rc >= 0) ? 0 : rc; } -static inline int mdio_write(struct cphy *phy, int mmd, int reg, - unsigned int val) +static inline int t3_mdio_write(struct cphy *phy, int mmd, int reg, + unsigned int val) { - return phy->mdio_write(phy->adapter, phy->addr, mmd, reg, val); + return phy->mdio.mdio_write(phy->mdio.dev, phy->mdio.prtad, mmd, + reg, val); } /* Convenience initializer */ @@ -620,14 +611,16 @@ static inline void cphy_init(struct cphy *phy, struct adapter *adapter, const struct mdio_ops *mdio_ops, unsigned int caps, const char *desc) { - phy->addr = phy_addr; phy->caps = caps; phy->adapter = adapter; phy->desc = desc; phy->ops = phy_ops; if (mdio_ops) { - phy->mdio_read = mdio_ops->read; - phy->mdio_write = mdio_ops->write; + phy->mdio.prtad = phy_addr; + phy->mdio.mmds = phy_ops->mmds; + phy->mdio.mode_support = mdio_ops->mode_support; + phy->mdio.mdio_read = mdio_ops->read; + phy->mdio.mdio_write = mdio_ops->write; } } diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c index 7ea48414c6c..0b87fee023f 100644 --- a/drivers/net/cxgb3/cxgb3_main.c +++ b/drivers/net/cxgb3/cxgb3_main.c @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include #include @@ -1593,7 +1593,7 @@ static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd) } cmd->port = (cmd->supported & SUPPORTED_TP) ? PORT_TP : PORT_FIBRE; - cmd->phy_address = p->phy.addr; + cmd->phy_address = p->phy.mdio.prtad; cmd->transceiver = XCVR_EXTERNAL; cmd->autoneg = p->link_config.autoneg; cmd->maxtxpkt = 0; @@ -2308,70 +2308,25 @@ static int cxgb_ioctl(struct net_device *dev, struct ifreq *req, int cmd) struct mii_ioctl_data *data = if_mii(req); struct port_info *pi = netdev_priv(dev); struct adapter *adapter = pi->adapter; - int ret, mmd; switch (cmd) { - case SIOCGMIIPHY: - data->phy_id = pi->phy.addr; + case SIOCGMIIREG: + case SIOCSMIIREG: + /* Convert phy_id from older PRTAD/DEVAD format */ + if (is_10G(adapter) && + !mdio_phy_id_is_c45(data->phy_id) && + (data->phy_id & 0x1f00) && + !(data->phy_id & 0xe0e0)) + data->phy_id = mdio_phy_id_c45(data->phy_id >> 8, + data->phy_id & 0x1f); /* FALLTHRU */ - case SIOCGMIIREG:{ - u32 val; - struct cphy *phy = &pi->phy; - - if (!phy->mdio_read) - return -EOPNOTSUPP; - if (is_10G(adapter)) { - mmd = data->phy_id >> 8; - if (!mmd) - mmd = MDIO_DEV_PCS; - else if (mmd > MDIO_DEV_VEND2) - return -EINVAL; - - ret = - phy->mdio_read(adapter, data->phy_id & 0x1f, - mmd, data->reg_num, &val); - } else - ret = - phy->mdio_read(adapter, data->phy_id & 0x1f, - 0, data->reg_num & 0x1f, - &val); - if (!ret) - data->val_out = val; - break; - } - case SIOCSMIIREG:{ - struct cphy *phy = &pi->phy; - - if (!capable(CAP_NET_ADMIN)) - return -EPERM; - if (!phy->mdio_write) - return -EOPNOTSUPP; - if (is_10G(adapter)) { - mmd = data->phy_id >> 8; - if (!mmd) - mmd = MDIO_DEV_PCS; - else if (mmd > MDIO_DEV_VEND2) - return -EINVAL; - - ret = - phy->mdio_write(adapter, - data->phy_id & 0x1f, mmd, - data->reg_num, - data->val_in); - } else - ret = - phy->mdio_write(adapter, - data->phy_id & 0x1f, 0, - data->reg_num & 0x1f, - data->val_in); - break; - } + case SIOCGMIIPHY: + return mdio_mii_ioctl(&pi->phy.mdio, data, cmd); case SIOCCHIOCTL: return cxgb_extension_ioctl(dev, req->ifr_data); default: return -EOPNOTSUPP; } - return ret; } static int cxgb_change_mtu(struct net_device *dev, int new_mtu) diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c index e1bd690ff83..1dd1637663a 100644 --- a/drivers/net/cxgb3/t3_hw.c +++ b/drivers/net/cxgb3/t3_hw.c @@ -204,35 +204,33 @@ static void mi1_init(struct adapter *adap, const struct adapter_info *ai) /* * MI1 read/write operations for clause 22 PHYs. */ -static int t3_mi1_read(struct adapter *adapter, int phy_addr, int mmd_addr, - int reg_addr, unsigned int *valp) +static int t3_mi1_read(struct net_device *dev, int phy_addr, int mmd_addr, + u16 reg_addr) { + struct port_info *pi = netdev_priv(dev); + struct adapter *adapter = pi->adapter; int ret; u32 addr = V_REGADDR(reg_addr) | V_PHYADDR(phy_addr); - if (mmd_addr) - return -EINVAL; - mutex_lock(&adapter->mdio_lock); t3_set_reg_field(adapter, A_MI1_CFG, V_ST(M_ST), V_ST(1)); t3_write_reg(adapter, A_MI1_ADDR, addr); t3_write_reg(adapter, A_MI1_OP, V_MDI_OP(2)); ret = t3_wait_op_done(adapter, A_MI1_OP, F_BUSY, 0, MDIO_ATTEMPTS, 10); if (!ret) - *valp = t3_read_reg(adapter, A_MI1_DATA); + ret = t3_read_reg(adapter, A_MI1_DATA); mutex_unlock(&adapter->mdio_lock); return ret; } -static int t3_mi1_write(struct adapter *adapter, int phy_addr, int mmd_addr, - int reg_addr, unsigned int val) +static int t3_mi1_write(struct net_device *dev, int phy_addr, int mmd_addr, + u16 reg_addr, u16 val) { + struct port_info *pi = netdev_priv(dev); + struct adapter *adapter = pi->adapter; int ret; u32 addr = V_REGADDR(reg_addr) | V_PHYADDR(phy_addr); - if (mmd_addr) - return -EINVAL; - mutex_lock(&adapter->mdio_lock); t3_set_reg_field(adapter, A_MI1_CFG, V_ST(M_ST), V_ST(1)); t3_write_reg(adapter, A_MI1_ADDR, addr); @@ -244,8 +242,9 @@ static int t3_mi1_write(struct adapter *adapter, int phy_addr, int mmd_addr, } static const struct mdio_ops mi1_mdio_ops = { - t3_mi1_read, - t3_mi1_write + .read = t3_mi1_read, + .write = t3_mi1_write, + .mode_support = MDIO_SUPPORTS_C22 }; /* @@ -268,9 +267,11 @@ static int mi1_wr_addr(struct adapter *adapter, int phy_addr, int mmd_addr, /* * MI1 read/write operations for indirect-addressed PHYs. */ -static int mi1_ext_read(struct adapter *adapter, int phy_addr, int mmd_addr, - int reg_addr, unsigned int *valp) +static int mi1_ext_read(struct net_device *dev, int phy_addr, int mmd_addr, + u16 reg_addr) { + struct port_info *pi = netdev_priv(dev); + struct adapter *adapter = pi->adapter; int ret; mutex_lock(&adapter->mdio_lock); @@ -280,15 +281,17 @@ static int mi1_ext_read(struct adapter *adapter, int phy_addr, int mmd_addr, ret = t3_wait_op_done(adapter, A_MI1_OP, F_BUSY, 0, MDIO_ATTEMPTS, 10); if (!ret) - *valp = t3_read_reg(adapter, A_MI1_DATA); + ret = t3_read_reg(adapter, A_MI1_DATA); } mutex_unlock(&adapter->mdio_lock); return ret; } -static int mi1_ext_write(struct adapter *adapter, int phy_addr, int mmd_addr, - int reg_addr, unsigned int val) +static int mi1_ext_write(struct net_device *dev, int phy_addr, int mmd_addr, + u16 reg_addr, u16 val) { + struct port_info *pi = netdev_priv(dev); + struct adapter *adapter = pi->adapter; int ret; mutex_lock(&adapter->mdio_lock); @@ -304,8 +307,9 @@ static int mi1_ext_write(struct adapter *adapter, int phy_addr, int mmd_addr, } static const struct mdio_ops mi1_mdio_ext_ops = { - mi1_ext_read, - mi1_ext_write + .read = mi1_ext_read, + .write = mi1_ext_write, + .mode_support = MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22 }; /** @@ -325,10 +329,10 @@ int t3_mdio_change_bits(struct cphy *phy, int mmd, int reg, unsigned int clear, int ret; unsigned int val; - ret = mdio_read(phy, mmd, reg, &val); + ret = t3_mdio_read(phy, mmd, reg, &val); if (!ret) { val &= ~clear; - ret = mdio_write(phy, mmd, reg, val | set); + ret = t3_mdio_write(phy, mmd, reg, val | set); } return ret; } @@ -348,15 +352,16 @@ int t3_phy_reset(struct cphy *phy, int mmd, int wait) int err; unsigned int ctl; - err = t3_mdio_change_bits(phy, mmd, MII_BMCR, BMCR_PDOWN, BMCR_RESET); + err = t3_mdio_change_bits(phy, mmd, MDIO_CTRL1, MDIO_CTRL1_LPOWER, + MDIO_CTRL1_RESET); if (err || !wait) return err; do { - err = mdio_read(phy, mmd, MII_BMCR, &ctl); + err = t3_mdio_read(phy, mmd, MDIO_CTRL1, &ctl); if (err) return err; - ctl &= BMCR_RESET; + ctl &= MDIO_CTRL1_RESET; if (ctl) msleep(1); } while (ctl && --wait); @@ -377,7 +382,7 @@ int t3_phy_advertise(struct cphy *phy, unsigned int advert) int err; unsigned int val = 0; - err = mdio_read(phy, 0, MII_CTRL1000, &val); + err = t3_mdio_read(phy, MDIO_DEVAD_NONE, MII_CTRL1000, &val); if (err) return err; @@ -387,7 +392,7 @@ int t3_phy_advertise(struct cphy *phy, unsigned int advert) if (advert & ADVERTISED_1000baseT_Full) val |= ADVERTISE_1000FULL; - err = mdio_write(phy, 0, MII_CTRL1000, val); + err = t3_mdio_write(phy, MDIO_DEVAD_NONE, MII_CTRL1000, val); if (err) return err; @@ -404,7 +409,7 @@ int t3_phy_advertise(struct cphy *phy, unsigned int advert) val |= ADVERTISE_PAUSE_CAP; if (advert & ADVERTISED_Asym_Pause) val |= ADVERTISE_PAUSE_ASYM; - return mdio_write(phy, 0, MII_ADVERTISE, val); + return t3_mdio_write(phy, MDIO_DEVAD_NONE, MII_ADVERTISE, val); } /** @@ -427,7 +432,7 @@ int t3_phy_advertise_fiber(struct cphy *phy, unsigned int advert) val |= ADVERTISE_1000XPAUSE; if (advert & ADVERTISED_Asym_Pause) val |= ADVERTISE_1000XPSE_ASYM; - return mdio_write(phy, 0, MII_ADVERTISE, val); + return t3_mdio_write(phy, MDIO_DEVAD_NONE, MII_ADVERTISE, val); } /** @@ -444,7 +449,7 @@ int t3_set_phy_speed_duplex(struct cphy *phy, int speed, int duplex) int err; unsigned int ctl; - err = mdio_read(phy, 0, MII_BMCR, &ctl); + err = t3_mdio_read(phy, MDIO_DEVAD_NONE, MII_BMCR, &ctl); if (err) return err; @@ -462,30 +467,30 @@ int t3_set_phy_speed_duplex(struct cphy *phy, int speed, int duplex) } if (ctl & BMCR_SPEED1000) /* auto-negotiation required for GigE */ ctl |= BMCR_ANENABLE; - return mdio_write(phy, 0, MII_BMCR, ctl); + return t3_mdio_write(phy, MDIO_DEVAD_NONE, MII_BMCR, ctl); } int t3_phy_lasi_intr_enable(struct cphy *phy) { - return mdio_write(phy, MDIO_DEV_PMA_PMD, LASI_CTRL, 1); + return t3_mdio_write(phy, MDIO_MMD_PMAPMD, LASI_CTRL, 1); } int t3_phy_lasi_intr_disable(struct cphy *phy) { - return mdio_write(phy, MDIO_DEV_PMA_PMD, LASI_CTRL, 0); + return t3_mdio_write(phy, MDIO_MMD_PMAPMD, LASI_CTRL, 0); } int t3_phy_lasi_intr_clear(struct cphy *phy) { u32 val; - return mdio_read(phy, MDIO_DEV_PMA_PMD, LASI_STAT, &val); + return t3_mdio_read(phy, MDIO_MMD_PMAPMD, LASI_STAT, &val); } int t3_phy_lasi_intr_handler(struct cphy *phy) { unsigned int status; - int err = mdio_read(phy, MDIO_DEV_PMA_PMD, LASI_STAT, &status); + int err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, LASI_STAT, &status); if (err) return err; @@ -3863,6 +3868,7 @@ int t3_prep_adapter(struct adapter *adapter, const struct adapter_info *ai, ai->mdio_ops); if (ret) return ret; + p->phy.mdio.dev = adapter->port[i]; mac_prep(&p->mac, adapter, j); /* @@ -3918,7 +3924,7 @@ int t3_replay_prep_adapter(struct adapter *adapter) ; pti = &port_types[adapter->params.vpd.port_type[j]]; - ret = pti->phy_prep(&p->phy, adapter, p->phy.addr, NULL); + ret = pti->phy_prep(&p->phy, adapter, p->phy.mdio.prtad, NULL); if (ret) return ret; p->phy.ops->power_down(&p->phy, 1); diff --git a/drivers/net/cxgb3/vsc8211.c b/drivers/net/cxgb3/vsc8211.c index d07130971b8..4f9a1c2724f 100644 --- a/drivers/net/cxgb3/vsc8211.c +++ b/drivers/net/cxgb3/vsc8211.c @@ -91,17 +91,18 @@ enum { */ static int vsc8211_reset(struct cphy *cphy, int wait) { - return t3_phy_reset(cphy, 0, 0); + return t3_phy_reset(cphy, MDIO_DEVAD_NONE, 0); } static int vsc8211_intr_enable(struct cphy *cphy) { - return mdio_write(cphy, 0, VSC8211_INTR_ENABLE, INTR_MASK); + return t3_mdio_write(cphy, MDIO_DEVAD_NONE, VSC8211_INTR_ENABLE, + INTR_MASK); } static int vsc8211_intr_disable(struct cphy *cphy) { - return mdio_write(cphy, 0, VSC8211_INTR_ENABLE, 0); + return t3_mdio_write(cphy, MDIO_DEVAD_NONE, VSC8211_INTR_ENABLE, 0); } static int vsc8211_intr_clear(struct cphy *cphy) @@ -109,18 +110,20 @@ static int vsc8211_intr_clear(struct cphy *cphy) u32 val; /* Clear PHY interrupts by reading the register. */ - return mdio_read(cphy, 0, VSC8211_INTR_STATUS, &val); + return t3_mdio_read(cphy, MDIO_DEVAD_NONE, VSC8211_INTR_STATUS, &val); } static int vsc8211_autoneg_enable(struct cphy *cphy) { - return t3_mdio_change_bits(cphy, 0, MII_BMCR, BMCR_PDOWN | BMCR_ISOLATE, + return t3_mdio_change_bits(cphy, MDIO_DEVAD_NONE, MII_BMCR, + BMCR_PDOWN | BMCR_ISOLATE, BMCR_ANENABLE | BMCR_ANRESTART); } static int vsc8211_autoneg_restart(struct cphy *cphy) { - return t3_mdio_change_bits(cphy, 0, MII_BMCR, BMCR_PDOWN | BMCR_ISOLATE, + return t3_mdio_change_bits(cphy, MDIO_DEVAD_NONE, MII_BMCR, + BMCR_PDOWN | BMCR_ISOLATE, BMCR_ANRESTART); } @@ -130,9 +133,9 @@ static int vsc8211_get_link_status(struct cphy *cphy, int *link_ok, unsigned int bmcr, status, lpa, adv; int err, sp = -1, dplx = -1, pause = 0; - err = mdio_read(cphy, 0, MII_BMCR, &bmcr); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, MII_BMCR, &bmcr); if (!err) - err = mdio_read(cphy, 0, MII_BMSR, &status); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, MII_BMSR, &status); if (err) return err; @@ -142,7 +145,8 @@ static int vsc8211_get_link_status(struct cphy *cphy, int *link_ok, * once more to get the current link state. */ if (!(status & BMSR_LSTATUS)) - err = mdio_read(cphy, 0, MII_BMSR, &status); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, MII_BMSR, + &status); if (err) return err; *link_ok = (status & BMSR_LSTATUS) != 0; @@ -156,7 +160,8 @@ static int vsc8211_get_link_status(struct cphy *cphy, int *link_ok, else sp = SPEED_10; } else if (status & BMSR_ANEGCOMPLETE) { - err = mdio_read(cphy, 0, VSC8211_AUX_CTRL_STAT, &status); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, VSC8211_AUX_CTRL_STAT, + &status); if (err) return err; @@ -170,9 +175,11 @@ static int vsc8211_get_link_status(struct cphy *cphy, int *link_ok, sp = SPEED_1000; if (fc && dplx == DUPLEX_FULL) { - err = mdio_read(cphy, 0, MII_LPA, &lpa); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, MII_LPA, + &lpa); if (!err) - err = mdio_read(cphy, 0, MII_ADVERTISE, &adv); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, + MII_ADVERTISE, &adv); if (err) return err; @@ -202,9 +209,9 @@ static int vsc8211_get_link_status_fiber(struct cphy *cphy, int *link_ok, unsigned int bmcr, status, lpa, adv; int err, sp = -1, dplx = -1, pause = 0; - err = mdio_read(cphy, 0, MII_BMCR, &bmcr); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, MII_BMCR, &bmcr); if (!err) - err = mdio_read(cphy, 0, MII_BMSR, &status); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, MII_BMSR, &status); if (err) return err; @@ -214,7 +221,8 @@ static int vsc8211_get_link_status_fiber(struct cphy *cphy, int *link_ok, * once more to get the current link state. */ if (!(status & BMSR_LSTATUS)) - err = mdio_read(cphy, 0, MII_BMSR, &status); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, MII_BMSR, + &status); if (err) return err; *link_ok = (status & BMSR_LSTATUS) != 0; @@ -228,9 +236,10 @@ static int vsc8211_get_link_status_fiber(struct cphy *cphy, int *link_ok, else sp = SPEED_10; } else if (status & BMSR_ANEGCOMPLETE) { - err = mdio_read(cphy, 0, MII_LPA, &lpa); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, MII_LPA, &lpa); if (!err) - err = mdio_read(cphy, 0, MII_ADVERTISE, &adv); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, MII_ADVERTISE, + &adv); if (err) return err; @@ -270,23 +279,23 @@ static int vsc8211_set_automdi(struct cphy *phy, int enable) { int err; - err = mdio_write(phy, 0, VSC8211_EXT_PAGE_AXS, 0x52b5); + err = t3_mdio_write(phy, MDIO_DEVAD_NONE, VSC8211_EXT_PAGE_AXS, 0x52b5); if (err) return err; - err = mdio_write(phy, 0, 18, 0x12); + err = t3_mdio_write(phy, MDIO_DEVAD_NONE, 18, 0x12); if (err) return err; - err = mdio_write(phy, 0, 17, enable ? 0x2803 : 0x3003); + err = t3_mdio_write(phy, MDIO_DEVAD_NONE, 17, enable ? 0x2803 : 0x3003); if (err) return err; - err = mdio_write(phy, 0, 16, 0x87fa); + err = t3_mdio_write(phy, MDIO_DEVAD_NONE, 16, 0x87fa); if (err) return err; - err = mdio_write(phy, 0, VSC8211_EXT_PAGE_AXS, 0); + err = t3_mdio_write(phy, MDIO_DEVAD_NONE, VSC8211_EXT_PAGE_AXS, 0); if (err) return err; @@ -315,7 +324,7 @@ static int vsc8211_intr_handler(struct cphy *cphy) unsigned int cause; int err, cphy_cause = 0; - err = mdio_read(cphy, 0, VSC8211_INTR_STATUS, &cause); + err = t3_mdio_read(cphy, MDIO_DEVAD_NONE, VSC8211_INTR_STATUS, &cause); if (err) return err; @@ -367,12 +376,13 @@ int t3_vsc8211_phy_prep(struct cphy *phy, struct adapter *adapter, SUPPORTED_TP | SUPPORTED_IRQ, "10/100/1000BASE-T"); msleep(20); /* PHY needs ~10ms to start responding to MDIO */ - err = mdio_read(phy, 0, VSC8211_EXT_CTRL, &val); + err = t3_mdio_read(phy, MDIO_DEVAD_NONE, VSC8211_EXT_CTRL, &val); if (err) return err; if (val & VSC_CTRL_MEDIA_MODE_HI) { /* copper interface, just need to configure the LEDs */ - return mdio_write(phy, 0, VSC8211_LED_CTRL, 0x100); + return t3_mdio_write(phy, MDIO_DEVAD_NONE, VSC8211_LED_CTRL, + 0x100); } phy->caps = SUPPORTED_1000baseT_Full | SUPPORTED_Autoneg | @@ -380,20 +390,20 @@ int t3_vsc8211_phy_prep(struct cphy *phy, struct adapter *adapter, phy->desc = "1000BASE-X"; phy->ops = &vsc8211_fiber_ops; - err = mdio_write(phy, 0, VSC8211_EXT_PAGE_AXS, 1); + err = t3_mdio_write(phy, MDIO_DEVAD_NONE, VSC8211_EXT_PAGE_AXS, 1); if (err) return err; - err = mdio_write(phy, 0, VSC8211_SIGDET_CTRL, 1); + err = t3_mdio_write(phy, MDIO_DEVAD_NONE, VSC8211_SIGDET_CTRL, 1); if (err) return err; - err = mdio_write(phy, 0, VSC8211_EXT_PAGE_AXS, 0); + err = t3_mdio_write(phy, MDIO_DEVAD_NONE, VSC8211_EXT_PAGE_AXS, 0); if (err) return err; - err = mdio_write(phy, 0, VSC8211_EXT_CTRL, - val | VSC_CTRL_CLAUSE37_VIEW); + err = t3_mdio_write(phy, MDIO_DEVAD_NONE, VSC8211_EXT_CTRL, + val | VSC_CTRL_CLAUSE37_VIEW); if (err) return err; -- cgit v1.2.3-70-g09d2 From 64318334bf5096a65c7141bea4833910d112d939 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Tue, 19 May 2009 13:22:30 +0000 Subject: cxgb3: Use generic XENPAK LASI register definitions Signed-off-by: Ben Hutchings Acked-by: Divy Le Ray Signed-off-by: David S. Miller --- drivers/net/cxgb3/ael1002.c | 3 ++- drivers/net/cxgb3/common.h | 10 ---------- drivers/net/cxgb3/t3_hw.c | 12 +++++++----- 3 files changed, 9 insertions(+), 16 deletions(-) (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/cxgb3/ael1002.c b/drivers/net/cxgb3/ael1002.c index bebc00d2424..df1f5857668 100644 --- a/drivers/net/cxgb3/ael1002.c +++ b/drivers/net/cxgb3/ael1002.c @@ -1007,7 +1007,8 @@ static int ael2005_reset(struct cphy *phy, int wait) int err; unsigned int lasi_ctrl; - err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, LASI_CTRL, &lasi_ctrl); + err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, MDIO_PMA_LASI_CTRL, + &lasi_ctrl); if (err) return err; diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h index 3147789aece..79a113b99e2 100644 --- a/drivers/net/cxgb3/common.h +++ b/drivers/net/cxgb3/common.h @@ -521,16 +521,6 @@ enum { MAC_RXFIFO_SIZE = 32768 }; -/* LASI control and status registers */ -enum { - RX_ALARM_CTRL = 0x9000, - TX_ALARM_CTRL = 0x9001, - LASI_CTRL = 0x9002, - RX_ALARM_STAT = 0x9003, - TX_ALARM_STAT = 0x9004, - LASI_STAT = 0x9005 -}; - /* PHY loopback direction */ enum { PHY_LOOPBACK_TX = 1, diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c index c8a865a7e26..505a1871d08 100644 --- a/drivers/net/cxgb3/t3_hw.c +++ b/drivers/net/cxgb3/t3_hw.c @@ -472,29 +472,31 @@ int t3_set_phy_speed_duplex(struct cphy *phy, int speed, int duplex) int t3_phy_lasi_intr_enable(struct cphy *phy) { - return t3_mdio_write(phy, MDIO_MMD_PMAPMD, LASI_CTRL, 1); + return t3_mdio_write(phy, MDIO_MMD_PMAPMD, MDIO_PMA_LASI_CTRL, + MDIO_PMA_LASI_LSALARM); } int t3_phy_lasi_intr_disable(struct cphy *phy) { - return t3_mdio_write(phy, MDIO_MMD_PMAPMD, LASI_CTRL, 0); + return t3_mdio_write(phy, MDIO_MMD_PMAPMD, MDIO_PMA_LASI_CTRL, 0); } int t3_phy_lasi_intr_clear(struct cphy *phy) { u32 val; - return t3_mdio_read(phy, MDIO_MMD_PMAPMD, LASI_STAT, &val); + return t3_mdio_read(phy, MDIO_MMD_PMAPMD, MDIO_PMA_LASI_STAT, &val); } int t3_phy_lasi_intr_handler(struct cphy *phy) { unsigned int status; - int err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, LASI_STAT, &status); + int err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, MDIO_PMA_LASI_STAT, + &status); if (err) return err; - return (status & 1) ? cphy_cause_link_change : 0; + return (status & MDIO_PMA_LASI_LSALARM) ? cphy_cause_link_change : 0; } static const struct adapter_info t3_adap_info[] = { -- cgit v1.2.3-70-g09d2 From 86c890ab1b183f8f17ce03c24b62c564e95f957f Mon Sep 17 00:00:00 2001 From: Divy Le Ray Date: Wed, 20 May 2009 15:56:02 +0000 Subject: cxgb3: set phy's mdio dev before the phy init sequence mdio's dev field needs to be set before mdio ops occur. Signed-off-by: Divy Le Ray Signed-off-by: David S. Miller --- drivers/net/cxgb3/t3_hw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c index 505a1871d08..fc7db8a9ba8 100644 --- a/drivers/net/cxgb3/t3_hw.c +++ b/drivers/net/cxgb3/t3_hw.c @@ -3866,11 +3866,11 @@ int t3_prep_adapter(struct adapter *adapter, const struct adapter_info *ai, return -EINVAL; } + p->phy.mdio.dev = adapter->port[i]; ret = pti->phy_prep(&p->phy, adapter, ai->phy_base_addr + j, ai->mdio_ops); if (ret) return ret; - p->phy.mdio.dev = adapter->port[i]; mac_prep(&p->mac, adapter, j); /* -- cgit v1.2.3-70-g09d2 From 28679751a924c11f7135641f26e99249385de5b4 Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Wed, 27 May 2009 19:26:37 +0000 Subject: net: dont update dev->trans_start in 10GB drivers Followup of commits 9d21493b4beb8f918ba248032fefa393074a5e2b and 08baf561083bc27a953aa087dd8a664bb2b88e8e (net: tx scalability works : trans_start) (net: txq_trans_update() helper) Now that core network takes care of trans_start updates, dont do it in drivers themselves, if possible. Multi queue drivers can avoid one cache miss (on dev->trans_start) in their start_xmit() handler. Exceptions are NETIF_F_LLTX drivers (vxge & tehuti) Signed-off-by: Eric Dumazet Signed-off-by: David S. Miller --- drivers/net/benet/be_main.c | 2 -- drivers/net/bnx2x_main.c | 1 - drivers/net/chelsio/sge.c | 1 - drivers/net/cxgb3/sge.c | 1 - drivers/net/enic/enic_main.c | 2 -- drivers/net/ixgb/ixgb_main.c | 1 - drivers/net/ixgbe/ixgbe_main.c | 1 - drivers/net/mlx4/en_tx.c | 1 - drivers/net/myri10ge/myri10ge.c | 1 - drivers/net/netxen/netxen_nic_main.c | 1 - drivers/net/qlge/qlge_main.c | 1 - drivers/net/s2io.c | 1 - drivers/net/sfc/selftest.c | 1 + drivers/net/sfc/tx.c | 7 ------- drivers/net/tehuti.c | 5 +++-- drivers/net/vxge/vxge-main.c | 6 ++++-- 16 files changed, 8 insertions(+), 25 deletions(-) (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c index ae2f6b58ba2..5f17d80300a 100644 --- a/drivers/net/benet/be_main.c +++ b/drivers/net/benet/be_main.c @@ -478,8 +478,6 @@ static int be_xmit(struct sk_buff *skb, struct net_device *netdev) be_txq_notify(&adapter->ctrl, txq->id, wrb_cnt); - netdev->trans_start = jiffies; - be_tx_stats_update(adapter, wrb_cnt, copied, stopped); return NETDEV_TX_OK; } diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c index e01539c33b8..fbf1352e9c1 100644 --- a/drivers/net/bnx2x_main.c +++ b/drivers/net/bnx2x_main.c @@ -10617,7 +10617,6 @@ static int bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) mmiowb(); fp->tx_bd_prod += nbd; - dev->trans_start = jiffies; if (unlikely(bnx2x_tx_avail(fp) < MAX_SKB_FRAGS + 3)) { /* We want bnx2x_tx_int to "see" the updated tx_bd_prod diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c index 5e97a1a71d8..3711d64e45e 100644 --- a/drivers/net/chelsio/sge.c +++ b/drivers/net/chelsio/sge.c @@ -1879,7 +1879,6 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev) cpl->vlan_valid = 0; send: - dev->trans_start = jiffies; ret = t1_sge_tx(skb, adapter, 0, dev); /* If transmit busy, and we reallocated skb's due to headroom limit, diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c index 73d569e758e..49e64af7b09 100644 --- a/drivers/net/cxgb3/sge.c +++ b/drivers/net/cxgb3/sge.c @@ -1286,7 +1286,6 @@ int t3_eth_xmit(struct sk_buff *skb, struct net_device *dev) if (vlan_tx_tag_present(skb) && pi->vlan_grp) qs->port_stats[SGE_PSTAT_VLANINS]++; - dev->trans_start = jiffies; spin_unlock(&q->lock); /* diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index 9080f07da8f..8005b602f77 100644 --- a/drivers/net/enic/enic_main.c +++ b/drivers/net/enic/enic_main.c @@ -661,8 +661,6 @@ static int enic_hard_start_xmit(struct sk_buff *skb, struct net_device *netdev) if (vnic_wq_desc_avail(wq) < MAX_SKB_FRAGS + 1) netif_stop_queue(netdev); - netdev->trans_start = jiffies; - spin_unlock_irqrestore(&enic->wq_lock[0], flags); return NETDEV_TX_OK; diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c index 04cb81a739c..6eb7f37a113 100644 --- a/drivers/net/ixgb/ixgb_main.c +++ b/drivers/net/ixgb/ixgb_main.c @@ -1488,7 +1488,6 @@ ixgb_xmit_frame(struct sk_buff *skb, struct net_device *netdev) if (count) { ixgb_tx_queue(adapter, count, vlan_id, tx_flags); - netdev->trans_start = jiffies; /* Make sure there is space in the ring for the next send. */ ixgb_maybe_stop_tx(netdev, &adapter->tx_ring, DESC_NEEDED); diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index dff1da8ae5c..924aa5ed02c 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c @@ -4863,7 +4863,6 @@ static int ixgbe_xmit_frame(struct sk_buff *skb, struct net_device *netdev) if (count) { ixgbe_tx_queue(adapter, tx_ring, tx_flags, count, skb->len, hdr_len); - netdev->trans_start = jiffies; ixgbe_maybe_stop_tx(netdev, tx_ring, DESC_NEEDED); } else { diff --git a/drivers/net/mlx4/en_tx.c b/drivers/net/mlx4/en_tx.c index ac6fc499b28..1c83a96fde3 100644 --- a/drivers/net/mlx4/en_tx.c +++ b/drivers/net/mlx4/en_tx.c @@ -819,7 +819,6 @@ int mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) /* Ring doorbell! */ wmb(); writel(ring->doorbell_qpn, mdev->uar_map + MLX4_SEND_DOORBELL); - dev->trans_start = jiffies; /* Poll CQ here */ mlx4_en_xmit_poll(priv, tx_ind); diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index 7e28b461012..c9a30d3a66f 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c @@ -2892,7 +2892,6 @@ again: tx->stop_queue++; netif_tx_stop_queue(netdev_queue); } - dev->trans_start = jiffies; return 0; abort_linearize: diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c index 50477f5c3ec..98737ef7293 100644 --- a/drivers/net/netxen/netxen_nic_main.c +++ b/drivers/net/netxen/netxen_nic_main.c @@ -1496,7 +1496,6 @@ netxen_nic_xmit_frame(struct sk_buff *skb, struct net_device *netdev) netxen_nic_update_cmd_producer(adapter, tx_ring, producer); adapter->stats.xmitcalled++; - netdev->trans_start = jiffies; return NETDEV_TX_OK; diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c index c92ced24794..0b0778d9919 100644 --- a/drivers/net/qlge/qlge_main.c +++ b/drivers/net/qlge/qlge_main.c @@ -2108,7 +2108,6 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev) wmb(); ql_write_db_reg(tx_ring->prod_idx, tx_ring->prod_idx_db_reg); - ndev->trans_start = jiffies; QPRINTK(qdev, TX_QUEUED, DEBUG, "tx queued, slot %d, len %d\n", tx_ring->prod_idx, skb->len); diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 80562ea77de..2bc73ede431 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c @@ -4299,7 +4299,6 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev) s2io_stop_tx_queue(sp, fifo->fifo_no); } mac_control->stats_info->sw_stat.mem_allocated += skb->truesize; - dev->trans_start = jiffies; spin_unlock_irqrestore(&fifo->tx_lock, flags); if (sp->config.intr_type == MSI_X) diff --git a/drivers/net/sfc/selftest.c b/drivers/net/sfc/selftest.c index 04379571595..b67ccca3fc1 100644 --- a/drivers/net/sfc/selftest.c +++ b/drivers/net/sfc/selftest.c @@ -438,6 +438,7 @@ static int efx_begin_loopback(struct efx_tx_queue *tx_queue) kfree_skb(skb); return -EPIPE; } + efx->net_dev->trans_start = jiffies; } return 0; diff --git a/drivers/net/sfc/tx.c b/drivers/net/sfc/tx.c index d6681edb701..14a14788566 100644 --- a/drivers/net/sfc/tx.c +++ b/drivers/net/sfc/tx.c @@ -360,13 +360,6 @@ inline int efx_xmit(struct efx_nic *efx, /* Map fragments for DMA and add to TX queue */ rc = efx_enqueue_skb(tx_queue, skb); - if (unlikely(rc != NETDEV_TX_OK)) - goto out; - - /* Update last TX timer */ - efx->net_dev->trans_start = jiffies; - - out: return rc; } diff --git a/drivers/net/tehuti.c b/drivers/net/tehuti.c index 7f4a9683ba1..093807a182f 100644 --- a/drivers/net/tehuti.c +++ b/drivers/net/tehuti.c @@ -1718,8 +1718,9 @@ static int bdx_tx_transmit(struct sk_buff *skb, struct net_device *ndev) WRITE_REG(priv, f->m.reg_WPTR, f->m.wptr & TXF_WPTR_WR_PTR); #endif - ndev->trans_start = jiffies; - +#ifdef BDX_LLTX + ndev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */ +#endif priv->net_stats.tx_packets++; priv->net_stats.tx_bytes += skb->len; diff --git a/drivers/net/vxge/vxge-main.c b/drivers/net/vxge/vxge-main.c index b7f08f3e524..6c838b3e063 100644 --- a/drivers/net/vxge/vxge-main.c +++ b/drivers/net/vxge/vxge-main.c @@ -677,7 +677,7 @@ vxge_xmit_compl(struct __vxge_hw_fifo *fifo_hw, void *dtr, return VXGE_HW_OK; } -/* select a vpath to trasmit the packet */ +/* select a vpath to transmit the packet */ static u32 vxge_get_vpath_no(struct vxgedev *vdev, struct sk_buff *skb, int *do_lock) { @@ -992,7 +992,9 @@ vxge_xmit(struct sk_buff *skb, struct net_device *dev) VXGE_HW_FIFO_TXD_TX_CKO_UDP_EN); vxge_hw_fifo_txdl_post(fifo_hw, dtr); - dev->trans_start = jiffies; +#ifdef NETIF_F_LLTX + dev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */ +#endif spin_unlock_irqrestore(&fifo->tx_lock, flags); VXGE_COMPLETE_VPATH_TX(fifo); -- cgit v1.2.3-70-g09d2 From c3a8c5b644118b5e2cfd0690b1dcea904a792c52 Mon Sep 17 00:00:00 2001 From: Divy Le Ray Date: Fri, 29 May 2009 12:52:38 +0000 Subject: cxgb3: move away from LLTX cxgb3 no longer advertizes LLTX. Signed-off-by: Divy Le Ray Signed-off-by: David S. Miller --- drivers/net/cxgb3/cxgb3_main.c | 1 - drivers/net/cxgb3/sge.c | 17 +++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c index 0b87fee023f..1fe4b070c6d 100644 --- a/drivers/net/cxgb3/cxgb3_main.c +++ b/drivers/net/cxgb3/cxgb3_main.c @@ -3059,7 +3059,6 @@ static int __devinit init_one(struct pci_dev *pdev, netdev->mem_start = mmio_start; netdev->mem_end = mmio_start + mmio_len - 1; netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO; - netdev->features |= NETIF_F_LLTX; netdev->features |= NETIF_F_GRO; if (pci_using_dac) netdev->features |= NETIF_F_HIGHDMA; diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c index 49e64af7b09..0b978827874 100644 --- a/drivers/net/cxgb3/sge.c +++ b/drivers/net/cxgb3/sge.c @@ -1241,7 +1241,6 @@ int t3_eth_xmit(struct sk_buff *skb, struct net_device *dev) q = &qs->txq[TXQ_ETH]; txq = netdev_get_tx_queue(dev, qidx); - spin_lock(&q->lock); reclaim_completed_tx(adap, q, TX_RECLAIM_CHUNK); credits = q->size - q->in_use; @@ -1252,7 +1251,6 @@ int t3_eth_xmit(struct sk_buff *skb, struct net_device *dev) dev_err(&adap->pdev->dev, "%s: Tx ring %u full while queue awake!\n", dev->name, q->cntxt_id & 7); - spin_unlock(&q->lock); return NETDEV_TX_BUSY; } @@ -1286,8 +1284,6 @@ int t3_eth_xmit(struct sk_buff *skb, struct net_device *dev) if (vlan_tx_tag_present(skb) && pi->vlan_grp) qs->port_stats[SGE_PSTAT_VLANINS]++; - spin_unlock(&q->lock); - /* * We do not use Tx completion interrupts to free DMAd Tx packets. * This is good for performamce but means that we rely on new Tx @@ -2857,11 +2853,12 @@ static void sge_timer_tx(unsigned long data) unsigned int tbd[SGE_TXQ_PER_SET] = {0, 0}; unsigned long next_period; - if (spin_trylock(&qs->txq[TXQ_ETH].lock)) { - tbd[TXQ_ETH] = reclaim_completed_tx(adap, &qs->txq[TXQ_ETH], - TX_RECLAIM_TIMER_CHUNK); - spin_unlock(&qs->txq[TXQ_ETH].lock); + if (__netif_tx_trylock(qs->tx_q)) { + tbd[TXQ_ETH] = reclaim_completed_tx(adap, &qs->txq[TXQ_ETH], + TX_RECLAIM_TIMER_CHUNK); + __netif_tx_unlock(qs->tx_q); } + if (spin_trylock(&qs->txq[TXQ_OFLD].lock)) { tbd[TXQ_OFLD] = reclaim_completed_tx(adap, &qs->txq[TXQ_OFLD], TX_RECLAIM_TIMER_CHUNK); @@ -2869,8 +2866,8 @@ static void sge_timer_tx(unsigned long data) } next_period = TX_RECLAIM_PERIOD >> - (max(tbd[TXQ_ETH], tbd[TXQ_OFLD]) / - TX_RECLAIM_TIMER_CHUNK); + (max(tbd[TXQ_ETH], tbd[TXQ_OFLD]) / + TX_RECLAIM_TIMER_CHUNK); mod_timer(&qs->tx_reclaim_timer, jiffies + next_period); } -- cgit v1.2.3-70-g09d2 From 744514249f0656e2d50bb57585241670c2d4f32b Mon Sep 17 00:00:00 2001 From: Divy Le Ray Date: Fri, 29 May 2009 12:52:44 +0000 Subject: cxgb3: Add Aeluros 2020 phy support Add support for the AEL2020 phy. Add PCI IDs of the boards using this phy. Signed-off-by: Divy Le Ray Signed-off-by: David S. Miller --- drivers/net/cxgb3/ael1002.c | 823 +++++++++++++++++++++++++++++++++++++---- drivers/net/cxgb3/common.h | 2 + drivers/net/cxgb3/cxgb3_main.c | 2 + drivers/net/cxgb3/t3_hw.c | 7 + 4 files changed, 769 insertions(+), 65 deletions(-) (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/cxgb3/ael1002.c b/drivers/net/cxgb3/ael1002.c index df1f5857668..9fe008ec9ba 100644 --- a/drivers/net/cxgb3/ael1002.c +++ b/drivers/net/cxgb3/ael1002.c @@ -44,12 +44,33 @@ enum { AEL_I2C_STAT = 0xc30c, AEL2005_GPIO_CTRL = 0xc214, AEL2005_GPIO_STAT = 0xc215, + + AEL2020_GPIO_INTR = 0xc103, /* Latch High (LH) */ + AEL2020_GPIO_CTRL = 0xc108, /* Store Clear (SC) */ + AEL2020_GPIO_STAT = 0xc10c, /* Read Only (RO) */ + AEL2020_GPIO_CFG = 0xc110, /* Read Write (RW) */ + + AEL2020_GPIO_SDA = 0, /* IN: i2c serial data */ + AEL2020_GPIO_MODDET = 1, /* IN: Module Detect */ + AEL2020_GPIO_0 = 3, /* IN: unassigned */ + AEL2020_GPIO_1 = 2, /* OUT: unassigned */ + AEL2020_GPIO_LSTAT = AEL2020_GPIO_1, /* wired to link status LED */ }; enum { edc_none, edc_sr, edc_twinax }; /* PHY module I2C device address */ -#define MODULE_DEV_ADDR 0xa0 +enum { + MODULE_DEV_ADDR = 0xa0, + SFF_DEV_ADDR = 0xa2, +}; + +/* PHY transceiver type */ +enum { + phy_transtype_unknown = 0, + phy_transtype_sfp = 3, + phy_transtype_xfp = 6, +}; #define AEL2005_MODDET_IRQ 4 @@ -86,6 +107,37 @@ static void ael100x_txon(struct cphy *phy) msleep(30); } +/* + * Read an 8-bit word from a device attached to the PHY's i2c bus. + */ +static int ael_i2c_rd(struct cphy *phy, int dev_addr, int word_addr) +{ + int i, err; + unsigned int stat, data; + + err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL_I2C_CTRL, + (dev_addr << 8) | (1 << 8) | word_addr); + if (err) + return err; + + for (i = 0; i < 200; i++) { + msleep(1); + err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL_I2C_STAT, &stat); + if (err) + return err; + if ((stat & 3) == 1) { + err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL_I2C_DATA, + &data); + if (err) + return err; + return data >> 8; + } + } + CH_WARN(phy->adapter, "PHY %u i2c read of dev.addr %#x.%#x timed out\n", + phy->mdio.prtad, dev_addr, word_addr); + return -ETIMEDOUT; +} + static int ael1002_power_down(struct cphy *phy, int enable) { int err; @@ -199,6 +251,51 @@ int t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter, return 0; } +/* + * Decode our module type. + */ +static int ael2xxx_get_module_type(struct cphy *phy, int delay_ms) +{ + int v; + + if (delay_ms) + msleep(delay_ms); + + /* see SFF-8472 for below */ + v = ael_i2c_rd(phy, MODULE_DEV_ADDR, 3); + if (v < 0) + return v; + + if (v == 0x10) + return phy_modtype_sr; + if (v == 0x20) + return phy_modtype_lr; + if (v == 0x40) + return phy_modtype_lrm; + + v = ael_i2c_rd(phy, MODULE_DEV_ADDR, 6); + if (v < 0) + return v; + if (v != 4) + goto unknown; + + v = ael_i2c_rd(phy, MODULE_DEV_ADDR, 10); + if (v < 0) + return v; + + if (v & 0x80) { + v = ael_i2c_rd(phy, MODULE_DEV_ADDR, 0x12); + if (v < 0) + return v; + return v > 10 ? phy_modtype_twinax_long : phy_modtype_twinax; + } +unknown: + return phy_modtype_unknown; +} + +/* + * Code to support the Aeluros/NetLogic 2005 10Gb PHY. + */ static int ael2005_setup_sr_edc(struct cphy *phy) { static struct reg_val regs[] = { @@ -893,35 +990,7 @@ static int ael2005_setup_twinax_edc(struct cphy *phy, int modtype) return err; } -static int ael2005_i2c_rd(struct cphy *phy, int dev_addr, int word_addr) -{ - int i, err; - unsigned int stat, data; - - err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL_I2C_CTRL, - (dev_addr << 8) | (1 << 8) | word_addr); - if (err) - return err; - - for (i = 0; i < 5; i++) { - msleep(1); - err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL_I2C_STAT, &stat); - if (err) - return err; - if ((stat & 3) == 1) { - err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL_I2C_DATA, - &data); - if (err) - return err; - return data >> 8; - } - } - CH_WARN(phy->adapter, "PHY %u I2C read of addr %u timed out\n", - phy->mdio.prtad, word_addr); - return -ETIMEDOUT; -} - -static int get_module_type(struct cphy *phy, int delay_ms) +static int ael2005_get_module_type(struct cphy *phy, int delay_ms) { int v; unsigned int stat; @@ -933,39 +1002,7 @@ static int get_module_type(struct cphy *phy, int delay_ms) if (stat & (1 << 8)) /* module absent */ return phy_modtype_none; - if (delay_ms) - msleep(delay_ms); - - /* see SFF-8472 for below */ - v = ael2005_i2c_rd(phy, MODULE_DEV_ADDR, 3); - if (v < 0) - return v; - - if (v == 0x10) - return phy_modtype_sr; - if (v == 0x20) - return phy_modtype_lr; - if (v == 0x40) - return phy_modtype_lrm; - - v = ael2005_i2c_rd(phy, MODULE_DEV_ADDR, 6); - if (v < 0) - return v; - if (v != 4) - goto unknown; - - v = ael2005_i2c_rd(phy, MODULE_DEV_ADDR, 10); - if (v < 0) - return v; - - if (v & 0x80) { - v = ael2005_i2c_rd(phy, MODULE_DEV_ADDR, 0x12); - if (v < 0) - return v; - return v > 10 ? phy_modtype_twinax_long : phy_modtype_twinax; - } -unknown: - return phy_modtype_unknown; + return ael2xxx_get_module_type(phy, delay_ms); } static int ael2005_intr_enable(struct cphy *phy) @@ -1024,7 +1061,7 @@ static int ael2005_reset(struct cphy *phy, int wait) msleep(50); - err = get_module_type(phy, 0); + err = ael2005_get_module_type(phy, 0); if (err < 0) return err; phy->modtype = err; @@ -1062,7 +1099,7 @@ static int ael2005_intr_handler(struct cphy *phy) return ret; /* modules have max 300 ms init time after hot plug */ - ret = get_module_type(phy, 300); + ret = ael2005_get_module_type(phy, 300); if (ret < 0) return ret; @@ -1112,6 +1149,662 @@ int t3_ael2005_phy_prep(struct cphy *phy, struct adapter *adapter, 1 << 5); } +/* + * Setup EDC and other parameters for operation with an optical module. + */ +static int ael2020_setup_sr_edc(struct cphy *phy) +{ + static struct reg_val regs[] = { + /* set CDR offset to 10 */ + { MDIO_MMD_PMAPMD, 0xcc01, 0xffff, 0x488a }, + + /* adjust 10G RX bias current */ + { MDIO_MMD_PMAPMD, 0xcb1b, 0xffff, 0x0200 }, + { MDIO_MMD_PMAPMD, 0xcb1c, 0xffff, 0x00f0 }, + { MDIO_MMD_PMAPMD, 0xcc06, 0xffff, 0x00e0 }, + + /* end */ + { 0, 0, 0, 0 } + }; + int err; + + err = set_phy_regs(phy, regs); + msleep(50); + if (err) + return err; + + phy->priv = edc_sr; + return 0; +} + +/* + * Setup EDC and other parameters for operation with an TWINAX module. + */ +static int ael2020_setup_twinax_edc(struct cphy *phy, int modtype) +{ + /* set uC to 40MHz */ + static struct reg_val uCclock40MHz[] = { + { MDIO_MMD_PMAPMD, 0xff28, 0xffff, 0x4001 }, + { MDIO_MMD_PMAPMD, 0xff2a, 0xffff, 0x0002 }, + { 0, 0, 0, 0 } + }; + + /* activate uC clock */ + static struct reg_val uCclockActivate[] = { + { MDIO_MMD_PMAPMD, 0xd000, 0xffff, 0x5200 }, + { 0, 0, 0, 0 } + }; + + /* set PC to start of SRAM and activate uC */ + static struct reg_val uCactivate[] = { + { MDIO_MMD_PMAPMD, 0xd080, 0xffff, 0x0100 }, + { MDIO_MMD_PMAPMD, 0xd092, 0xffff, 0x0000 }, + { 0, 0, 0, 0 } + }; + + /* TWINAX EDC firmware */ + static u16 twinax_edc[] = { + 0xd800, 0x4009, + 0xd801, 0x2fff, + 0xd802, 0x300f, + 0xd803, 0x40aa, + 0xd804, 0x401c, + 0xd805, 0x401e, + 0xd806, 0x2ff4, + 0xd807, 0x3dc4, + 0xd808, 0x2035, + 0xd809, 0x3035, + 0xd80a, 0x6524, + 0xd80b, 0x2cb2, + 0xd80c, 0x3012, + 0xd80d, 0x1002, + 0xd80e, 0x26e2, + 0xd80f, 0x3022, + 0xd810, 0x1002, + 0xd811, 0x27d2, + 0xd812, 0x3022, + 0xd813, 0x1002, + 0xd814, 0x2822, + 0xd815, 0x3012, + 0xd816, 0x1002, + 0xd817, 0x2492, + 0xd818, 0x3022, + 0xd819, 0x1002, + 0xd81a, 0x2772, + 0xd81b, 0x3012, + 0xd81c, 0x1002, + 0xd81d, 0x23d2, + 0xd81e, 0x3022, + 0xd81f, 0x1002, + 0xd820, 0x22cd, + 0xd821, 0x301d, + 0xd822, 0x27f2, + 0xd823, 0x3022, + 0xd824, 0x1002, + 0xd825, 0x5553, + 0xd826, 0x0307, + 0xd827, 0x2522, + 0xd828, 0x3022, + 0xd829, 0x1002, + 0xd82a, 0x2142, + 0xd82b, 0x3012, + 0xd82c, 0x1002, + 0xd82d, 0x4016, + 0xd82e, 0x5e63, + 0xd82f, 0x0344, + 0xd830, 0x2142, + 0xd831, 0x3012, + 0xd832, 0x1002, + 0xd833, 0x400e, + 0xd834, 0x2522, + 0xd835, 0x3022, + 0xd836, 0x1002, + 0xd837, 0x2b52, + 0xd838, 0x3012, + 0xd839, 0x1002, + 0xd83a, 0x2742, + 0xd83b, 0x3022, + 0xd83c, 0x1002, + 0xd83d, 0x25e2, + 0xd83e, 0x3022, + 0xd83f, 0x1002, + 0xd840, 0x2fa4, + 0xd841, 0x3dc4, + 0xd842, 0x6624, + 0xd843, 0x414b, + 0xd844, 0x56b3, + 0xd845, 0x03c6, + 0xd846, 0x866b, + 0xd847, 0x400c, + 0xd848, 0x2712, + 0xd849, 0x3012, + 0xd84a, 0x1002, + 0xd84b, 0x2c4b, + 0xd84c, 0x309b, + 0xd84d, 0x56b3, + 0xd84e, 0x03c3, + 0xd84f, 0x866b, + 0xd850, 0x400c, + 0xd851, 0x2272, + 0xd852, 0x3022, + 0xd853, 0x1002, + 0xd854, 0x2742, + 0xd855, 0x3022, + 0xd856, 0x1002, + 0xd857, 0x25e2, + 0xd858, 0x3022, + 0xd859, 0x1002, + 0xd85a, 0x2fb4, + 0xd85b, 0x3dc4, + 0xd85c, 0x6624, + 0xd85d, 0x56b3, + 0xd85e, 0x03c3, + 0xd85f, 0x866b, + 0xd860, 0x401c, + 0xd861, 0x2c45, + 0xd862, 0x3095, + 0xd863, 0x5b53, + 0xd864, 0x2372, + 0xd865, 0x3012, + 0xd866, 0x13c2, + 0xd867, 0x5cc3, + 0xd868, 0x2712, + 0xd869, 0x3012, + 0xd86a, 0x1312, + 0xd86b, 0x2b52, + 0xd86c, 0x3012, + 0xd86d, 0x1002, + 0xd86e, 0x2742, + 0xd86f, 0x3022, + 0xd870, 0x1002, + 0xd871, 0x2582, + 0xd872, 0x3022, + 0xd873, 0x1002, + 0xd874, 0x2142, + 0xd875, 0x3012, + 0xd876, 0x1002, + 0xd877, 0x628f, + 0xd878, 0x2985, + 0xd879, 0x33a5, + 0xd87a, 0x25e2, + 0xd87b, 0x3022, + 0xd87c, 0x1002, + 0xd87d, 0x5653, + 0xd87e, 0x03d2, + 0xd87f, 0x401e, + 0xd880, 0x6f72, + 0xd881, 0x1002, + 0xd882, 0x628f, + 0xd883, 0x2304, + 0xd884, 0x3c84, + 0xd885, 0x6436, + 0xd886, 0xdff4, + 0xd887, 0x6436, + 0xd888, 0x2ff5, + 0xd889, 0x3005, + 0xd88a, 0x8656, + 0xd88b, 0xdfba, + 0xd88c, 0x56a3, + 0xd88d, 0xd05a, + 0xd88e, 0x2972, + 0xd88f, 0x3012, + 0xd890, 0x1392, + 0xd891, 0xd05a, + 0xd892, 0x56a3, + 0xd893, 0xdfba, + 0xd894, 0x0383, + 0xd895, 0x6f72, + 0xd896, 0x1002, + 0xd897, 0x2b45, + 0xd898, 0x3005, + 0xd899, 0x4178, + 0xd89a, 0x5653, + 0xd89b, 0x0384, + 0xd89c, 0x2a62, + 0xd89d, 0x3012, + 0xd89e, 0x1002, + 0xd89f, 0x2f05, + 0xd8a0, 0x3005, + 0xd8a1, 0x41c8, + 0xd8a2, 0x5653, + 0xd8a3, 0x0382, + 0xd8a4, 0x0002, + 0xd8a5, 0x4218, + 0xd8a6, 0x2474, + 0xd8a7, 0x3c84, + 0xd8a8, 0x6437, + 0xd8a9, 0xdff4, + 0xd8aa, 0x6437, + 0xd8ab, 0x2ff5, + 0xd8ac, 0x3c05, + 0xd8ad, 0x8757, + 0xd8ae, 0xb888, + 0xd8af, 0x9787, + 0xd8b0, 0xdff4, + 0xd8b1, 0x6724, + 0xd8b2, 0x866a, + 0xd8b3, 0x6f72, + 0xd8b4, 0x1002, + 0xd8b5, 0x2641, + 0xd8b6, 0x3021, + 0xd8b7, 0x1001, + 0xd8b8, 0xc620, + 0xd8b9, 0x0000, + 0xd8ba, 0xc621, + 0xd8bb, 0x0000, + 0xd8bc, 0xc622, + 0xd8bd, 0x00ce, + 0xd8be, 0xc623, + 0xd8bf, 0x007f, + 0xd8c0, 0xc624, + 0xd8c1, 0x0032, + 0xd8c2, 0xc625, + 0xd8c3, 0x0000, + 0xd8c4, 0xc627, + 0xd8c5, 0x0000, + 0xd8c6, 0xc628, + 0xd8c7, 0x0000, + 0xd8c8, 0xc62c, + 0xd8c9, 0x0000, + 0xd8ca, 0x0000, + 0xd8cb, 0x2641, + 0xd8cc, 0x3021, + 0xd8cd, 0x1001, + 0xd8ce, 0xc502, + 0xd8cf, 0x53ac, + 0xd8d0, 0xc503, + 0xd8d1, 0x2cd3, + 0xd8d2, 0xc600, + 0xd8d3, 0x2a6e, + 0xd8d4, 0xc601, + 0xd8d5, 0x2a2c, + 0xd8d6, 0xc605, + 0xd8d7, 0x5557, + 0xd8d8, 0xc60c, + 0xd8d9, 0x5400, + 0xd8da, 0xc710, + 0xd8db, 0x0700, + 0xd8dc, 0xc711, + 0xd8dd, 0x0f06, + 0xd8de, 0xc718, + 0xd8df, 0x0700, + 0xd8e0, 0xc719, + 0xd8e1, 0x0f06, + 0xd8e2, 0xc720, + 0xd8e3, 0x4700, + 0xd8e4, 0xc721, + 0xd8e5, 0x0f06, + 0xd8e6, 0xc728, + 0xd8e7, 0x0700, + 0xd8e8, 0xc729, + 0xd8e9, 0x1207, + 0xd8ea, 0xc801, + 0xd8eb, 0x7f50, + 0xd8ec, 0xc802, + 0xd8ed, 0x7760, + 0xd8ee, 0xc803, + 0xd8ef, 0x7fce, + 0xd8f0, 0xc804, + 0xd8f1, 0x520e, + 0xd8f2, 0xc805, + 0xd8f3, 0x5c11, + 0xd8f4, 0xc806, + 0xd8f5, 0x3c51, + 0xd8f6, 0xc807, + 0xd8f7, 0x4061, + 0xd8f8, 0xc808, + 0xd8f9, 0x49c1, + 0xd8fa, 0xc809, + 0xd8fb, 0x3840, + 0xd8fc, 0xc80a, + 0xd8fd, 0x0000, + 0xd8fe, 0xc821, + 0xd8ff, 0x0002, + 0xd900, 0xc822, + 0xd901, 0x0046, + 0xd902, 0xc844, + 0xd903, 0x182f, + 0xd904, 0xc013, + 0xd905, 0xf341, + 0xd906, 0xc084, + 0xd907, 0x0030, + 0xd908, 0xc904, + 0xd909, 0x1401, + 0xd90a, 0xcb0c, + 0xd90b, 0x0004, + 0xd90c, 0xcb0e, + 0xd90d, 0xa00a, + 0xd90e, 0xcb0f, + 0xd90f, 0xc0c0, + 0xd910, 0xcb10, + 0xd911, 0xc0c0, + 0xd912, 0xcb11, + 0xd913, 0x00a0, + 0xd914, 0xcb12, + 0xd915, 0x0007, + 0xd916, 0xc241, + 0xd917, 0xa000, + 0xd918, 0xc243, + 0xd919, 0x7fe0, + 0xd91a, 0xc604, + 0xd91b, 0x000e, + 0xd91c, 0xc609, + 0xd91d, 0x00f5, + 0xd91e, 0xc611, + 0xd91f, 0x000e, + 0xd920, 0xc660, + 0xd921, 0x9600, + 0xd922, 0xc687, + 0xd923, 0x0004, + 0xd924, 0xc60a, + 0xd925, 0x04f5, + 0xd926, 0x0000, + 0xd927, 0x2641, + 0xd928, 0x3021, + 0xd929, 0x1001, + 0xd92a, 0xc620, + 0xd92b, 0x14e5, + 0xd92c, 0xc621, + 0xd92d, 0xc53d, + 0xd92e, 0xc622, + 0xd92f, 0x3cbe, + 0xd930, 0xc623, + 0xd931, 0x4452, + 0xd932, 0xc624, + 0xd933, 0xc5c5, + 0xd934, 0xc625, + 0xd935, 0xe01e, + 0xd936, 0xc627, + 0xd937, 0x0000, + 0xd938, 0xc628, + 0xd939, 0x0000, + 0xd93a, 0xc62c, + 0xd93b, 0x0000, + 0xd93c, 0x0000, + 0xd93d, 0x2b84, + 0xd93e, 0x3c74, + 0xd93f, 0x6435, + 0xd940, 0xdff4, + 0xd941, 0x6435, + 0xd942, 0x2806, + 0xd943, 0x3006, + 0xd944, 0x8565, + 0xd945, 0x2b24, + 0xd946, 0x3c24, + 0xd947, 0x6436, + 0xd948, 0x1002, + 0xd949, 0x2b24, + 0xd94a, 0x3c24, + 0xd94b, 0x6436, + 0xd94c, 0x4045, + 0xd94d, 0x8656, + 0xd94e, 0x5663, + 0xd94f, 0x0302, + 0xd950, 0x401e, + 0xd951, 0x1002, + 0xd952, 0x2807, + 0xd953, 0x31a7, + 0xd954, 0x20c4, + 0xd955, 0x3c24, + 0xd956, 0x6724, + 0xd957, 0x1002, + 0xd958, 0x2807, + 0xd959, 0x3187, + 0xd95a, 0x20c4, + 0xd95b, 0x3c24, + 0xd95c, 0x6724, + 0xd95d, 0x1002, + 0xd95e, 0x24f4, + 0xd95f, 0x3c64, + 0xd960, 0x6436, + 0xd961, 0xdff4, + 0xd962, 0x6436, + 0xd963, 0x1002, + 0xd964, 0x2006, + 0xd965, 0x3d76, + 0xd966, 0xc161, + 0xd967, 0x6134, + 0xd968, 0x6135, + 0xd969, 0x5443, + 0xd96a, 0x0303, + 0xd96b, 0x6524, + 0xd96c, 0x00fb, + 0xd96d, 0x1002, + 0xd96e, 0x20d4, + 0xd96f, 0x3c24, + 0xd970, 0x2025, + 0xd971, 0x3005, + 0xd972, 0x6524, + 0xd973, 0x1002, + 0xd974, 0xd019, + 0xd975, 0x2104, + 0xd976, 0x3c24, + 0xd977, 0x2105, + 0xd978, 0x3805, + 0xd979, 0x6524, + 0xd97a, 0xdff4, + 0xd97b, 0x4005, + 0xd97c, 0x6524, + 0xd97d, 0x2e8d, + 0xd97e, 0x303d, + 0xd97f, 0x2408, + 0xd980, 0x35d8, + 0xd981, 0x5dd3, + 0xd982, 0x0307, + 0xd983, 0x8887, + 0xd984, 0x63a7, + 0xd985, 0x8887, + 0xd986, 0x63a7, + 0xd987, 0xdffd, + 0xd988, 0x00f9, + 0xd989, 0x1002, + 0xd98a, 0x0000, + }; + int i, err; + + /* set uC clock and activate it */ + err = set_phy_regs(phy, uCclock40MHz); + msleep(500); + if (err) + return err; + err = set_phy_regs(phy, uCclockActivate); + msleep(500); + if (err) + return err; + + /* write TWINAX EDC firmware into PHY */ + for (i = 0; i < ARRAY_SIZE(twinax_edc) && !err; i += 2) + err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, twinax_edc[i], + twinax_edc[i + 1]); + /* activate uC */ + err = set_phy_regs(phy, uCactivate); + if (!err) + phy->priv = edc_twinax; + return err; +} + +/* + * Return Module Type. + */ +static int ael2020_get_module_type(struct cphy *phy, int delay_ms) +{ + int v; + unsigned int stat; + + v = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL2020_GPIO_STAT, &stat); + if (v) + return v; + + if (stat & (0x1 << (AEL2020_GPIO_MODDET*4))) { + /* module absent */ + return phy_modtype_none; + } + + return ael2xxx_get_module_type(phy, delay_ms); +} + +/* + * Enable PHY interrupts. We enable "Module Detection" interrupts (on any + * state transition) and then generic Link Alarm Status Interrupt (LASI). + */ +static int ael2020_intr_enable(struct cphy *phy) +{ + int err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL2020_GPIO_CTRL, + 0x2 << (AEL2020_GPIO_MODDET*4)); + return err ? err : t3_phy_lasi_intr_enable(phy); +} + +/* + * Disable PHY interrupts. The mirror of the above ... + */ +static int ael2020_intr_disable(struct cphy *phy) +{ + int err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AEL2020_GPIO_CTRL, + 0x1 << (AEL2020_GPIO_MODDET*4)); + return err ? err : t3_phy_lasi_intr_disable(phy); +} + +/* + * Clear PHY interrupt state. + */ +static int ael2020_intr_clear(struct cphy *phy) +{ + /* + * The GPIO Interrupt register on the AEL2020 is a "Latching High" + * (LH) register which is cleared to the current state when it's read. + * Thus, we simply read the register and discard the result. + */ + unsigned int stat; + int err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL2020_GPIO_INTR, &stat); + return err ? err : t3_phy_lasi_intr_clear(phy); +} + +/* + * Reset the PHY and put it into a canonical operating state. + */ +static int ael2020_reset(struct cphy *phy, int wait) +{ + static struct reg_val regs0[] = { + /* Erratum #2: CDRLOL asserted, causing PMA link down status */ + { MDIO_MMD_PMAPMD, 0xc003, 0xffff, 0x3101 }, + + /* force XAUI to send LF when RX_LOS is asserted */ + { MDIO_MMD_PMAPMD, 0xcd40, 0xffff, 0x0001 }, + + /* RX_LOS pin is active high */ + { MDIO_MMD_PMAPMD, AEL_OPT_SETTINGS, + 0x0020, 0x0020 }, + + /* output Module's Loss Of Signal (LOS) to LED */ + { MDIO_MMD_PMAPMD, AEL2020_GPIO_CFG+AEL2020_GPIO_LSTAT, + 0xffff, 0x0004 }, + { MDIO_MMD_PMAPMD, AEL2020_GPIO_CTRL, + 0xffff, 0x8 << (AEL2020_GPIO_LSTAT*4) }, + + /* end */ + { 0, 0, 0, 0 } + }; + int err; + unsigned int lasi_ctrl; + + /* grab current interrupt state */ + err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, MDIO_PMA_LASI_CTRL, + &lasi_ctrl); + if (err) + return err; + + err = t3_phy_reset(phy, MDIO_MMD_PMAPMD, 125); + if (err) + return err; + msleep(100); + + /* basic initialization for all module types */ + phy->priv = edc_none; + err = set_phy_regs(phy, regs0); + if (err) + return err; + + /* determine module type and perform appropriate initialization */ + err = ael2020_get_module_type(phy, 0); + if (err < 0) + return err; + phy->modtype = (u8)err; + if (err == phy_modtype_twinax || err == phy_modtype_twinax_long) + err = ael2020_setup_twinax_edc(phy, err); + else + err = ael2020_setup_sr_edc(phy); + if (err) + return err; + + /* reset wipes out interrupts, reenable them if they were on */ + if (lasi_ctrl & 1) + err = ael2005_intr_enable(phy); + return err; +} + +/* + * Handle a PHY interrupt. + */ +static int ael2020_intr_handler(struct cphy *phy) +{ + unsigned int stat; + int ret, edc_needed, cause = 0; + + ret = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AEL2020_GPIO_INTR, &stat); + if (ret) + return ret; + + if (stat & (0x1 << AEL2020_GPIO_MODDET)) { + /* modules have max 300 ms init time after hot plug */ + ret = ael2020_get_module_type(phy, 300); + if (ret < 0) + return ret; + + phy->modtype = (u8)ret; + if (ret == phy_modtype_none) + edc_needed = phy->priv; /* on unplug retain EDC */ + else if (ret == phy_modtype_twinax || + ret == phy_modtype_twinax_long) + edc_needed = edc_twinax; + else + edc_needed = edc_sr; + + if (edc_needed != phy->priv) { + ret = ael2020_reset(phy, 0); + return ret ? ret : cphy_cause_module_change; + } + cause = cphy_cause_module_change; + } + + ret = t3_phy_lasi_intr_handler(phy); + if (ret < 0) + return ret; + + ret |= cause; + return ret ? ret : cphy_cause_link_change; +} + +static struct cphy_ops ael2020_ops = { + .reset = ael2020_reset, + .intr_enable = ael2020_intr_enable, + .intr_disable = ael2020_intr_disable, + .intr_clear = ael2020_intr_clear, + .intr_handler = ael2020_intr_handler, + .get_link_status = get_link_status_r, + .power_down = ael1002_power_down, + .mmds = MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS | MDIO_DEVS_PHYXS, +}; + +int t3_ael2020_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr, + const struct mdio_ops *mdio_ops) +{ + cphy_init(phy, adapter, phy_addr, &ael2020_ops, mdio_ops, + SUPPORTED_10000baseT_Full | SUPPORTED_AUI | SUPPORTED_FIBRE | + SUPPORTED_IRQ, "10GBASE-R"); + msleep(125); + return 0; +} + /* * Get link status for a 10GBASE-X device. */ diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h index 79a113b99e2..301221ac10e 100644 --- a/drivers/net/cxgb3/common.h +++ b/drivers/net/cxgb3/common.h @@ -802,6 +802,8 @@ int t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr, const struct mdio_ops *mdio_ops); int t3_ael2005_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr, const struct mdio_ops *mdio_ops); +int t3_ael2020_phy_prep(struct cphy *phy, struct adapter *adapter, + int phy_addr, const struct mdio_ops *mdio_ops); int t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr, const struct mdio_ops *mdio_ops); int t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter, diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c index 1fe4b070c6d..4bc26568b2f 100644 --- a/drivers/net/cxgb3/cxgb3_main.c +++ b/drivers/net/cxgb3/cxgb3_main.c @@ -91,6 +91,8 @@ static const struct pci_device_id cxgb3_pci_tbl[] = { CH_DEVICE(0x31, 3), /* T3B20 */ CH_DEVICE(0x32, 1), /* T3B02 */ CH_DEVICE(0x35, 6), /* T3C20-derived T3C10 */ + CH_DEVICE(0x36, 3), /* S320E-CR */ + CH_DEVICE(0x37, 7), /* N320E-G2 */ {0,} }; diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c index fc7db8a9ba8..766314c91d8 100644 --- a/drivers/net/cxgb3/t3_hw.c +++ b/drivers/net/cxgb3/t3_hw.c @@ -526,6 +526,11 @@ static const struct adapter_info t3_adap_info[] = { F_GPIO10_OEN | F_GPIO1_OUT_VAL | F_GPIO6_OUT_VAL | F_GPIO10_OUT_VAL, { S_GPIO9 }, SUPPORTED_10000baseT_Full | SUPPORTED_AUI, &mi1_mdio_ext_ops, "Chelsio T310" }, + {1, 0, 0, + F_GPIO1_OEN | F_GPIO6_OEN | F_GPIO7_OEN | + F_GPIO1_OUT_VAL | F_GPIO6_OUT_VAL, + { S_GPIO9 }, SUPPORTED_10000baseT_Full | SUPPORTED_AUI, + &mi1_mdio_ext_ops, "Chelsio N320E-G2" }, }; /* @@ -552,6 +557,8 @@ static const struct port_type_info port_types[] = { { t3_qt2045_phy_prep }, { t3_ael1006_phy_prep }, { NULL }, + { NULL }, + { t3_ael2020_phy_prep }, }; #define VPD_ENTRY(name, len) \ -- cgit v1.2.3-70-g09d2 From f22a563b0a4c2a84b6ff8831306532b64c9c1747 Mon Sep 17 00:00:00 2001 From: Divy Le Ray Date: Fri, 29 May 2009 12:52:49 +0000 Subject: cxgb3: add support for the Aquantia 10G-BT phy Add support for the Aquantia AQ1002 10G-BaseT phy. Signed-off-by: Divy Le Ray Signed-off-by: David S. Miller --- drivers/net/cxgb3/Makefile | 2 +- drivers/net/cxgb3/aq100x.c | 355 +++++++++++++++++++++++++++++++++++++++++++++ drivers/net/cxgb3/common.h | 2 + drivers/net/cxgb3/t3_hw.c | 2 +- 4 files changed, 359 insertions(+), 2 deletions(-) create mode 100644 drivers/net/cxgb3/aq100x.c (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/cxgb3/Makefile b/drivers/net/cxgb3/Makefile index 34346798532..29aff78c782 100644 --- a/drivers/net/cxgb3/Makefile +++ b/drivers/net/cxgb3/Makefile @@ -5,4 +5,4 @@ obj-$(CONFIG_CHELSIO_T3) += cxgb3.o cxgb3-objs := cxgb3_main.o ael1002.o vsc8211.o t3_hw.o mc5.o \ - xgmac.o sge.o l2t.o cxgb3_offload.o + xgmac.o sge.o l2t.o cxgb3_offload.o aq100x.o diff --git a/drivers/net/cxgb3/aq100x.c b/drivers/net/cxgb3/aq100x.c new file mode 100644 index 00000000000..c51e50d925d --- /dev/null +++ b/drivers/net/cxgb3/aq100x.c @@ -0,0 +1,355 @@ +/* + * Copyright (c) 2005-2008 Chelsio, Inc. All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * - 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. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "common.h" +#include "regs.h" + +enum { + /* MDIO_DEV_PMA_PMD registers */ + AQ_LINK_STAT = 0xe800, + AQ_IMASK_PMA = 0xf000, + + /* MDIO_DEV_XGXS registers */ + AQ_XAUI_RX_CFG = 0xc400, + AQ_XAUI_TX_CFG = 0xe400, + + /* MDIO_DEV_ANEG registers */ + AQ_100M_CTRL = 0x0010, + AQ_10G_CTRL = 0x0020, + AQ_1G_CTRL = 0xc400, + AQ_ANEG_STAT = 0xc800, + + /* MDIO_DEV_VEND1 registers */ + AQ_FW_VERSION = 0x0020, + AQ_IFLAG_GLOBAL = 0xfc00, + AQ_IMASK_GLOBAL = 0xff00, +}; + +#define AQBIT(x) (1 << (x)) +#define IMASK_PMA AQBIT(0x2) +#define IMASK_GLOBAL AQBIT(0xf) +#define ADV_1G_FULL AQBIT(0xf) +#define ADV_1G_HALF AQBIT(0xe) +#define ADV_10G_FULL AQBIT(0xc) +#define AQ_RESET (AQBIT(0xe) | AQBIT(0xf)) +#define AQ_LOWPOWER AQBIT(0xb) + +static int aq100x_reset(struct cphy *phy, int wait) +{ + /* + * Ignore the caller specified wait time; always wait for the reset to + * complete. Can take up to 3s. + */ + int err = t3_phy_reset(phy, MDIO_MMD_VEND1, 3000); + + if (err) + CH_WARN(phy->adapter, "PHY%d: reset failed (0x%x).\n", + phy->mdio.prtad, err); + + return err; +} + +static int aq100x_intr_enable(struct cphy *phy) +{ + int err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, AQ_IMASK_PMA, IMASK_PMA); + if (err) + return err; + + err = t3_mdio_write(phy, MDIO_MMD_VEND1, AQ_IMASK_GLOBAL, IMASK_GLOBAL); + return err; +} + +static int aq100x_intr_disable(struct cphy *phy) +{ + return t3_mdio_write(phy, MDIO_MMD_VEND1, AQ_IMASK_GLOBAL, 0); +} + +static int aq100x_intr_clear(struct cphy *phy) +{ + unsigned int v; + + t3_mdio_read(phy, MDIO_MMD_VEND1, AQ_IFLAG_GLOBAL, &v); + t3_mdio_read(phy, MDIO_MMD_PMAPMD, MDIO_STAT1, &v); + + return 0; +} + +static int aq100x_intr_handler(struct cphy *phy) +{ + int err; + unsigned int cause, v; + + err = t3_mdio_read(phy, MDIO_MMD_VEND1, AQ_IFLAG_GLOBAL, &cause); + if (err) + return err; + + /* Read (and reset) the latching version of the status */ + t3_mdio_read(phy, MDIO_MMD_PMAPMD, MDIO_STAT1, &v); + + return cphy_cause_link_change; +} + +static int aq100x_power_down(struct cphy *phy, int off) +{ + return mdio_set_flag(&phy->mdio, phy->mdio.prtad, + MDIO_MMD_PMAPMD, MDIO_CTRL1, + MDIO_CTRL1_LPOWER, off); +} + +static int aq100x_autoneg_enable(struct cphy *phy) +{ + int err; + + err = aq100x_power_down(phy, 0); + if (!err) + err = mdio_set_flag(&phy->mdio, phy->mdio.prtad, + MDIO_MMD_AN, MDIO_CTRL1, + BMCR_ANENABLE | BMCR_ANRESTART, 1); + + return err; +} + +static int aq100x_autoneg_restart(struct cphy *phy) +{ + int err; + + err = aq100x_power_down(phy, 0); + if (!err) + err = mdio_set_flag(&phy->mdio, phy->mdio.prtad, + MDIO_MMD_AN, MDIO_CTRL1, + BMCR_ANENABLE | BMCR_ANRESTART, 1); + + return err; +} + +static int aq100x_advertise(struct cphy *phy, unsigned int advertise_map) +{ + unsigned int adv; + int err; + + /* 10G advertisement */ + adv = 0; + if (advertise_map & ADVERTISED_10000baseT_Full) + adv |= ADV_10G_FULL; + err = t3_mdio_change_bits(phy, MDIO_MMD_AN, AQ_10G_CTRL, + ADV_10G_FULL, adv); + if (err) + return err; + + /* 1G advertisement */ + adv = 0; + if (advertise_map & ADVERTISED_1000baseT_Full) + adv |= ADV_1G_FULL; + if (advertise_map & ADVERTISED_1000baseT_Half) + adv |= ADV_1G_HALF; + err = t3_mdio_change_bits(phy, MDIO_MMD_AN, AQ_1G_CTRL, + ADV_1G_FULL | ADV_1G_HALF, adv); + if (err) + return err; + + /* 100M, pause advertisement */ + adv = 0; + if (advertise_map & ADVERTISED_100baseT_Half) + adv |= ADVERTISE_100HALF; + if (advertise_map & ADVERTISED_100baseT_Full) + adv |= ADVERTISE_100FULL; + if (advertise_map & ADVERTISED_Pause) + adv |= ADVERTISE_PAUSE_CAP; + if (advertise_map & ADVERTISED_Asym_Pause) + adv |= ADVERTISE_PAUSE_ASYM; + err = t3_mdio_change_bits(phy, MDIO_MMD_AN, AQ_100M_CTRL, 0xfe0, adv); + + return err; +} + +static int aq100x_set_loopback(struct cphy *phy, int mmd, int dir, int enable) +{ + return mdio_set_flag(&phy->mdio, phy->mdio.prtad, + MDIO_MMD_PMAPMD, MDIO_CTRL1, + BMCR_LOOPBACK, enable); +} + +static int aq100x_set_speed_duplex(struct cphy *phy, int speed, int duplex) +{ + /* no can do */ + return -1; +} + +static int aq100x_get_link_status(struct cphy *phy, int *link_ok, + int *speed, int *duplex, int *fc) +{ + int err; + unsigned int v; + + if (link_ok) { + err = t3_mdio_read(phy, MDIO_MMD_PMAPMD, AQ_LINK_STAT, &v); + if (err) + return err; + + *link_ok = v & 1; + if (!*link_ok) + return 0; + } + + err = t3_mdio_read(phy, MDIO_MMD_AN, AQ_ANEG_STAT, &v); + if (err) + return err; + + if (speed) { + switch (v & 0x6) { + case 0x6: + *speed = SPEED_10000; + break; + case 0x4: + *speed = SPEED_1000; + break; + case 0x2: + *speed = SPEED_100; + break; + case 0x0: + *speed = SPEED_10; + break; + } + } + + if (duplex) + *duplex = v & 1 ? DUPLEX_FULL : DUPLEX_HALF; + + return 0; +} + +static struct cphy_ops aq100x_ops = { + .reset = aq100x_reset, + .intr_enable = aq100x_intr_enable, + .intr_disable = aq100x_intr_disable, + .intr_clear = aq100x_intr_clear, + .intr_handler = aq100x_intr_handler, + .autoneg_enable = aq100x_autoneg_enable, + .autoneg_restart = aq100x_autoneg_restart, + .advertise = aq100x_advertise, + .set_loopback = aq100x_set_loopback, + .set_speed_duplex = aq100x_set_speed_duplex, + .get_link_status = aq100x_get_link_status, + .power_down = aq100x_power_down, + .mmds = MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS | MDIO_DEVS_PHYXS, +}; + +int t3_aq100x_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr, + const struct mdio_ops *mdio_ops) +{ + unsigned int v, v2, gpio, wait; + int err; + + cphy_init(phy, adapter, phy_addr, &aq100x_ops, mdio_ops, + SUPPORTED_1000baseT_Full | SUPPORTED_10000baseT_Full | + SUPPORTED_Autoneg | SUPPORTED_AUI, "1000/10GBASE-T"); + + /* + * The PHY has been out of reset ever since the system powered up. So + * we do a hard reset over here. + */ + gpio = phy_addr ? F_GPIO10_OUT_VAL : F_GPIO6_OUT_VAL; + t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, gpio, 0); + msleep(1); + t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, gpio, gpio); + + /* + * Give it enough time to load the firmware and get ready for mdio. + */ + msleep(1000); + wait = 500; /* in 10ms increments */ + do { + err = t3_mdio_read(phy, MDIO_MMD_VEND1, MDIO_CTRL1, &v); + if (err || v == 0xffff) { + + /* Allow prep_adapter to succeed when ffff is read */ + + CH_WARN(adapter, "PHY%d: reset failed (0x%x, 0x%x).\n", + phy_addr, err, v); + goto done; + } + + v &= AQ_RESET; + if (v) + msleep(10); + } while (v && --wait); + if (v) { + CH_WARN(adapter, "PHY%d: reset timed out (0x%x).\n", + phy_addr, v); + + goto done; /* let prep_adapter succeed */ + } + + /* Datasheet says 3s max but this has been observed */ + wait = (500 - wait) * 10 + 1000; + if (wait > 3000) + CH_WARN(adapter, "PHY%d: reset took %ums\n", phy_addr, wait); + + /* Firmware version check. */ + t3_mdio_read(phy, MDIO_MMD_VEND1, AQ_FW_VERSION, &v); + if (v != 30) { + CH_WARN(adapter, "PHY%d: unsupported firmware %d\n", + phy_addr, v); + return 0; /* allow t3_prep_adapter to succeed */ + } + + /* + * The PHY should start in really-low-power mode. Prepare it for normal + * operations. + */ + err = t3_mdio_read(phy, MDIO_MMD_VEND1, MDIO_CTRL1, &v); + if (err) + return err; + if (v & AQ_LOWPOWER) { + err = t3_mdio_change_bits(phy, MDIO_MMD_VEND1, MDIO_CTRL1, + AQ_LOWPOWER, 0); + if (err) + return err; + msleep(10); + } else + CH_WARN(adapter, "PHY%d does not start in low power mode.\n", + phy_addr); + + /* + * Verify XAUI settings, but let prep succeed no matter what. + */ + v = v2 = 0; + t3_mdio_read(phy, MDIO_MMD_PHYXS, AQ_XAUI_RX_CFG, &v); + t3_mdio_read(phy, MDIO_MMD_PHYXS, AQ_XAUI_TX_CFG, &v2); + if (v != 0x1b || v2 != 0x1b) + CH_WARN(adapter, + "PHY%d: incorrect XAUI settings (0x%x, 0x%x).\n", + phy_addr, v, v2); + +done: + return err; +} diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h index 301221ac10e..d21b705501a 100644 --- a/drivers/net/cxgb3/common.h +++ b/drivers/net/cxgb3/common.h @@ -808,4 +808,6 @@ int t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr, const struct mdio_ops *mdio_ops); int t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr, const struct mdio_ops *mdio_ops); +int t3_aq100x_phy_prep(struct cphy *phy, struct adapter *adapter, + int phy_addr, const struct mdio_ops *mdio_ops); #endif /* __CHELSIO_COMMON_H */ diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c index 766314c91d8..6a454476bb1 100644 --- a/drivers/net/cxgb3/t3_hw.c +++ b/drivers/net/cxgb3/t3_hw.c @@ -557,7 +557,7 @@ static const struct port_type_info port_types[] = { { t3_qt2045_phy_prep }, { t3_ael1006_phy_prep }, { NULL }, - { NULL }, + { t3_aq100x_phy_prep }, { t3_ael2020_phy_prep }, }; -- cgit v1.2.3-70-g09d2 From 6ba5f9c74365263db161941b1e7467cdba06a5fe Mon Sep 17 00:00:00 2001 From: Divy Le Ray Date: Wed, 3 Jun 2009 13:38:59 +0000 Subject: cxgb3: Update FW to 7.4.0 Update FW to 7.4. Bump up driver revision. Signed-off-by: Divy Le Ray Signed-off-by: David S. Miller --- drivers/net/cxgb3/version.h | 4 +- firmware/Makefile | 2 +- firmware/WHENCE | 2 +- firmware/cxgb3/t3fw-7.1.0.bin.ihex | 1885 ----------------------------------- firmware/cxgb3/t3fw-7.4.0.bin.ihex | 1917 ++++++++++++++++++++++++++++++++++++ 5 files changed, 1921 insertions(+), 1889 deletions(-) delete mode 100644 firmware/cxgb3/t3fw-7.1.0.bin.ihex create mode 100644 firmware/cxgb3/t3fw-7.4.0.bin.ihex (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/cxgb3/version.h b/drivers/net/cxgb3/version.h index 7bf963ec554..9d0bd9dd9ab 100644 --- a/drivers/net/cxgb3/version.h +++ b/drivers/net/cxgb3/version.h @@ -35,10 +35,10 @@ #define DRV_DESC "Chelsio T3 Network Driver" #define DRV_NAME "cxgb3" /* Driver version */ -#define DRV_VERSION "1.1.2-ko" +#define DRV_VERSION "1.1.3-ko" /* Firmware version */ #define FW_VERSION_MAJOR 7 -#define FW_VERSION_MINOR 1 +#define FW_VERSION_MINOR 4 #define FW_VERSION_MICRO 0 #endif /* __CHELSIO_VERSION_H */ diff --git a/firmware/Makefile b/firmware/Makefile index 96c3dd8cc68..621de8e952f 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -41,7 +41,7 @@ fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \ cxgb3/t3c_psram-1.1.0.bin \ - cxgb3/t3fw-7.1.0.bin + cxgb3/t3fw-7.4.0.bin fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \ diff --git a/firmware/WHENCE b/firmware/WHENCE index bb8fda8f06b..0f5649a08c0 100644 --- a/firmware/WHENCE +++ b/firmware/WHENCE @@ -412,7 +412,7 @@ Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter File: cxgb3/t3b_psram-1.1.0.bin.ihex File: cxgb3/t3c_psram-1.1.0.bin.ihex -file: cxgb3/t3fw-7.1.0.bin.ihex +file: cxgb3/t3fw-7.4.0.bin.ihex License: GPLv2 or OpenIB.org BSD license, no source visible diff --git a/firmware/cxgb3/t3fw-7.1.0.bin.ihex b/firmware/cxgb3/t3fw-7.1.0.bin.ihex deleted file mode 100644 index 1042f755f68..00000000000 --- a/firmware/cxgb3/t3fw-7.1.0.bin.ihex +++ /dev/null @@ -1,1885 +0,0 @@ -:1000000060007400200380002003700000001000D6 -:1000100000002000E100028400070000E1000288E7 -:1000200000010000E0000000E00000A0010000006E -:1000300044444440E3000183200200002001E0002A -:100040002001FF101FFFD0001FFFC000E300043C91 -:1000500002000000200069881FFFC290200069D0C4 -:100060001FFFC29420006A101FFFC29820006A84FC -:100070001FFFC29C200003C0C00000E43100EA3131 -:1000800000A13100A03103020002ED306E2A05000C -:10009000ED3100020002160012FFDBC03014FFDA5F -:1000A000D30FD30FD30F03431F244C107249F0D347 -:1000B0000FD30FD30F12FFD5230A00240A00D30F4A -:1000C000D30FD30F03431F244C107249F0D30FD327 -:1000D0000FD30F14FFCE03421F14FFCB03421F1296 -:1000E000FFCCC0302D37302D37342D37382D373CED -:1000F000233D017233ED00020012FFC4C0302F37E0 -:10010000002F37102F37202F3730233D017233ED6A -:1001100000020012FFBEC0302737002737102737F4 -:1001200020273730233D017233ED03020012FFB95F -:1001300013FFBA0C0200932012FFB913FFB90C028F -:1001400000932012FFB8C0319320822012FFB71312 -:10015000FFB7932012FFB715FFB316FFB6C030D715 -:100160002005660160001B00000000000000000088 -:10017000043605000200D30FD30F05330C6E3B1479 -:100180000747140704437631E604360505330C6F40 -:100190003BED00020012FFA615FFA3230A00D720A3 -:1001A000070443043E0505330C0747146F3BF00377 -:1001B000020012FFA1C03014FFA1D30FD30FD30F41 -:1001C0009340B4447249F2D30FD30FD30F14FF9B63 -:1001D000834014FF9B834012FF9B230A0014FF9A65 -:1001E000D30FD30FD30F9340B4447249F2D30FD33C -:1001F0000FD30F14FF95834012FF95C92F832084DE -:10020000218522BC22743B0F8650B4559630B433FE -:100210007433F463FFE60000653FE1655FDE12FFC3 -:100220007C230A0028374028374428374828374C91 -:10023000233D017233ED03020000020012FF7AC079 -:1002400032032E0503020012FF7813FF819320C0B2 -:1002500011014931004831010200C00014FF7E0441 -:10026000D23115FF7D945014FF7D04D33115FF7CEE -:10027000945014FF7C04D43115FF7C24560014FFE5 -:100280007B04D53115FF7B24560010FF7A03000054 -:10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E -:1002B000000000000000000000000000000000003E -:1002C000000000000000000000000000000000002E -:1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE -:1003000000000000000000000000000000000000ED -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD -:1003300000000000000000000000000000000000BD -:1003400000000000000000000000000000000000AD -:10035000000000000000000000000000000000009D -:10036000000000000000000000000000000000008D -:10037000000000000000000000000000000000007D -:10038000000000000000000000000000000000006D -:10039000000000000000000000000000000000005D -:1003A000000000000000000000000000000000004D -:1003B000000000000000000000000000000000003D -:1003C000000000000000000000000000000000002D -:1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F00000000000000000000000000000000000FD -:1004000000000000000000000000000000000000EC -:1004100000000000000000000000000000000000DC -:1004200063FFFC000000000000000000000000006E -:100430000000000000000000000000001FFC0000A1 -:100440001FFC0000E30005C81FFC00001FFC0000AB -:10045000E30005C81FFC00001FFC0000E30005C806 -:100460001FFFC0001FFFC000E30005C81FFFC00042 -:100470001FFFC018E30005C81FFFC0181FFFC018EA -:10048000E30005E01FFFC0181FFFC28CE30005E07A -:100490001FFFC28C1FFFC28CE30008541FFFC290D5 -:1004A0001FFFC58CE3000854200000002000016AF3 -:1004B000E3000B502000018020000180E3000CBC11 -:1004C0002000020020000203E3000CBC2000021CFC -:1004D00020000220E3000CC02000022020000226A1 -:1004E000E3000CC42000023C20000240E3000CCCDE -:1004F0002000024020000249E3000CD02000024C02 -:1005000020000250E3000CDC2000025020000259C1 -:10051000E3000CE02000025C20000260E3000CEC31 -:100520002000026020000269E3000CF02000026C51 -:1005300020000270E3000CFC200002702000027911 -:10054000E3000D002000028C2000028CE3000D0C63 -:100550002000029020000293E3000D0C200002AC6A -:10056000200002B0E3000D10200002D0200002F2B3 -:10057000E3000D14200003B0200003B0E3000D38A9 -:10058000200003B0200003B0E3000D38200003B0CA -:10059000200003B0E3000D38200003B0200003B0BA -:1005A000E3000D38200003B020006BA8E3000D38F5 -:1005B00020006BA820006BA8E3007530000000004D -:1005C00000000000000000001FFC00001FFC0000F5 -:1005D0001FFFC5901FFFC67020006BA820006BA8EE -:1005E000DEFFFE000000080CDEADBEEF1FFFC2A064 -:1005F0001FFCFE001FFFC0941FFFC5C0300000009D -:10060000003FFFFF8040000010000000080FFFFFC8 -:100610001FFFC26D000FFFFF804FFFFF8000000033 -:1006200000000880B000000560500000600000007D -:1006300040000011350000004100000010000001E2 -:1006400020000000000010007FFFFFFF40000000BE -:1006500005000000800000190400000000000800F0 -:1006600010000005806000007000000020000009FC -:10067000001FF8008000001EA0000000F80000002D -:1006800007FFFFFF080000001800000001008001C4 -:10069000420000001FFFC21D1FFFC0DC00010080E0 -:1006A000604000001A0000000C0000000000300054 -:1006B000600008008000001C000100008000001A9B -:1006C00080000018FC0000008000000100004000D5 -:1006D000030000008000040050000003FFFFBFFF84 -:1006E0001FFFC3D400000FFFFFFFF000000016D073 -:1006F0000000FFF7A50000001FFFC4B01FFFC4618A -:100700000001000800000B20202FFF801FFFC455B0 -:1007100000002C00FFFEFFF800FFFFFF1FFFC57861 -:1007200000002000FFFFDFFF0000FFEF01001100CD -:100730001FFFC3D21FFFC590FFFFEFFF0000FFFBAD -:100740001FFFC6301FFFBEA0FFFFF7FF1FFFC064E3 -:100750000000FFFD1FFFC6200001FBD01FFFC5B03A -:100760001FFFC6601FFFC591E0FFFE001FFFC5A071 -:10077000000080001FFFC53C1FFFC5B41FFFC068FD -:100780001FFFC4D01FFCFFD800010081E10006005C -:10079000000027101FFCFE301FFCFE70E10002006D -:1007A0001FFFC5381FFFC5500003D0901FFFC56451 -:1007B0002B5063802B5079802B5090802B50A6803B -:1007C0001FFFC4690100110F202FFE0020300080A0 -:1007D000202FFF000000FFFF0001FFF82B50B200A8 -:1007E0002B50B208000100102B50B1802B50B2806A -:1007F0002B50BA00000100112B50BD282B50BC809B -:100800002B50BDA020300000DFFFFE005000000292 -:1008100000C0000002000000FFFFF7F41FFFC06CE3 -:10082000000FF80004400000001000000C40000021 -:100830001C400000E00000A01FFFC5401FFD000895 -:100840001FFFC5541FFFC5681FFFC57CE100069050 -:10085000E10006EC000000000000000000000000C5 -:100860000000000001000000000000000000000087 -:100870000000000020100040201000402010004028 -:1008800020140080200C0000200C0000200C000030 -:1008900020100040201400802014008020140080CC -:1008A000201800C0201C0100201C0100201C010099 -:1008B00020200140201800C0201800C0201800C0CF -:1008C000201C0100201800C0201800C0201800C003 -:1008D000201C010020200140202001402020014058 -:1008E00020200940202009402020094020200940E4 -:1008F00020240980FFFFFFFFFFFFFFFFFFFFFFFF37 -:1009000000000000000000000000000000000000E7 -:1009100000000000200052FC200051CC200052FCBE -:10092000200052FC200051082000510820005108EE -:1009300020004F4820004F4820004F4020004EAC80 -:1009400020004D5420004B342000490800000000D6 -:1009500000000000200052CC200051982000523CA2 -:100960002000523C20004FF020004FF020004FF0BC -:1009700020004FF020004FF020004F3820004FF0B3 -:1009800020004C7420004AE4200048B4000000001D -:100990000000000020000BE0200038BC200004C054 -:1009A000200044A820000BD820003FB4200003F012 -:1009B000200044682000489020003CC420003BE018 -:1009C00020003838200036C42000343420002F9412 -:1009D00020003A3C20002BF4200028282000653419 -:1009E000200023B4200020942000204020001D2C53 -:1009F000200018402000157020000DEC20000C2471 -:100A00002000113420001320200041AC20003C784D -:100A100020000BE8200004C00000000000000000DF -:100A200000000000000000000000000000000000C6 -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50000000000000000000000000000000000096 -:100A60000000000000000000000000000000000086 -:100A70000000000000000000000000000000000076 -:100A80000000000000000000000000000000000066 -:100A900000000000000000003264000000000000C0 -:100AA0003264000064006400640064006400640058 -:100AB000640064000000000000000000000000006E -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000000006 -:100AF00000000000000000000000000000001000E6 -:100B000000000000000000000000000000000000E5 -:100B100000000000000010000000000000000000C5 -:100B200000000000000000000043238000000000DF -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B5000005C94015D94025E94035F940043000086 -:100B60000000000000000000000000000000000085 -:100B70000000000000000000000000000000000075 -:100B80000000000000000000000000000000000065 -:100B9000005C90015D90025E90035F900053000046 -:100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD000009C94001D90019D94029E94039F940498 -:100BE0000894050994060A94070B9400430000003A -:100BF00000000000000000000000000000000000F5 -:100C000000000000000000000000000000000000E4 -:100C1000009C90019D90029E90071D90039F900460 -:100C20007890057990067A90077B90005300000039 -:100C300000000000000000000000000000000000B4 -:100C400000000000000000000000000000000000A4 -:100C500000DC94001D9001DD9402DE9403DF940417 -:100C60000494050594060694070794080894090956 -:100C7000940A0A940B0B940043000000000000004B -:100C80000000000000000000000000000000000064 -:100C900000DC9001DD9002DE900B1D9003DF9004DC -:100CA000B49005B59006B69007B79008B89009B90A -:100CB000900ABA900BBB90005300000063FFFC0049 -:100CC0002000696410FFFF0A00000000200069880E -:100CD00000D23110FFFE0A0000000000200069D0A1 -:100CE00000D33110FFFE0A000000000020006A104F -:100CF00000D43110FFFE0A000000000020006A84CA -:100D000000D53110FFFE0A000000000063FFFC0068 -:100D1000E00000A012FFF78220028257C82163FF83 -:100D2000FC12FFF303E83004EE3005C0309320944A -:100D300021952263FFFC00001FFFD000000400206B -:100D40001FFFC5901FFFC670200A0011FFFB13FF95 -:100D5000FB03E63101020016FFFA17FFFAD30F7703 -:100D60006B069060B4667763F85415505419E60F1B -:100D7000140063FFF90000006C1004C020D10F00C4 -:100D80006C1004C0C71AEF06D830BC2BD720857270 -:100D90000D4211837105450B957202330C237601C8 -:100DA0007B3B04233D089371A32D12EEFE19EEFE4A -:100DB000A2767D632C2E0A00088202280A01038E87 -:100DC000380E0E42C8EE29A67E6D4A050020880026 -:100DD000308C8271D10FC0F0028F387FC0EA63FF80 -:100DE000E400C0F1C050037E0CA2EE0E3D1208825A -:100DF0000203F538050542CB5729A67E2FDC100FDC -:100E00004F366DFA0500208800308CBC75C0300864 -:100E1000E208280A01058338030342C93E29A67E59 -:100E20000D480CD30F6D8A0500208800B08C8271AC -:100E3000D10FC05008F53875C0C163FFBBC0600258 -:100E4000863876C0DA63FFD46C101216EED8C1F87B -:100E5000C1E72B221E2C221DC0D07BC12F292006CA -:100E6000D7B0299CFACC57282070288CFF282470F2 -:100E700064915C2AB0000EA80C6481670FA90C6411 -:100E800092B3C1E97EA13969AC2F600036292006F2 -:100E9000D7D0299CFACC57282070288CFF282470A2 -:100EA0006491352AD0000EA80C6481640FA90C64EB -:100EB000931BC1E97EA10968AC09C020D10F0000D5 -:100EC000002D25028A32C0900A6F5065F5AD2924A5 -:100ED000670908476585A92F200C18EEB50CFE118F -:100EE000A8EE28E286B44978930260057A19EEB13B -:100EF00009F90A2992A3689007882009880C65855A -:100F00006627E28564756065558E7BC104D9B06043 -:100F10000001C0908B941CEEA80B88148CC40B0BA2 -:100F200047A8CC18EEA609BB1008CC029C7018EE9E -:100F3000A41CEEA508A8010B88020C4C021BEEA114 -:100F40009C710B880298722C90232B902204C8105D -:100F500006BB100C4C1208BB0228902107CC100CC9 -:100F600088100C88020B88021CEE998B330CBB0195 -:100F70008C340B880298739C999C748B958C399B4C -:100F80007588968B38987688979C799B7898771C8B -:100F9000EE9028E2850CFC082DC4CF08480B28E60B -:100FA0008565550B2B221E2D221D7BD9022B0A0095 -:100FB00064BF062CB00728B000DA2006880A288211 -:100FC0004CC0D10B8000DBA065AFE763FEEB0000F7 -:100FD000292070659E9C6004E42A207065AEC36081 -:100FE00004DB00002EB0032C2067D4E065C1058A25 -:100FF000328C330AFF500C4554BC5564F4E619EEAC -:1010000075882A09A90109880C64821BC0926000B6 -:10101000DD2ED0032A2067D4E065A0D88A328B3336 -:101020000AFC500B4554BC5564C4B919EE6A882AB1 -:1010300009A9017989D50BEA5064A4DD0CEE11C031 -:10104000F02F16132E16168AE78CE82A16128EE950 -:10105000DFC0AAEA7EAB01B1CF0BA85065834288FE -:1010600037DBC0AE89991E789B022BCC012B161B57 -:1010700029120E2B0A0029161A7FC3077FC9027E88 -:10108000AB01C0B165B4988B352F0A002A0A007AEB -:10109000C30564C3C72F0A0165F4842B12162B16EF -:1010A00019005104C0C100CC1A2CCCFF2C16170C0F -:1010B000FC132C16182B121A2A121BDC505818FA83 -:1010C000C0D0C0902E5CF42C12172812182F121BBF -:1010D0002A121A08FF010CAA018834074C0AAB8BAC -:1010E0002812192BC6162F86082A86092E74102955 -:1010F00024672E70038975B1EA2A7403B0990949EF -:101100000C659DB52B20672D250265B3F42B221E9F -:101110002C221D7BC901C0B064BD9E2CB00728B035 -:1011200000DA2006880A28824CC0D10B8000DBA0A0 -:1011300065AFE763FD8389BAB19965909788341CE0 -:10114000EE2698BA8F331EEE1F0F4F542FB42C8DFE -:101150002A8A320EDD020CAC017DC9660A49516F44 -:1011600092608A3375A65B2CB0130AED510DCD0148 -:101170000D0D410C0C417DC9492EB012B0EE65E356 -:10118000C2C0D08E378CB88A368FB97CA3077AC993 -:10119000027EFB01C0D1CED988350AAD020E8E0881 -:1011A00078EB022DAC0189B7DAC0AF9B79BB01B1F6 -:1011B000CADCB0C0B07DA3077AD9027CEB01C0B114 -:1011C00064B15DC091292467C020D10F00008ADA84 -:1011D000B1AA64A0BC2E20672D250265E30B1FED8C -:1011E000F98A3218EDFE0FAF0108FF0C65F2860A8E -:1011F00048516F820260027DC090292467090A4726 -:1012000065A2F27BC901C0B064BCAE2CB00728B0A7 -:1012100000DA2006880A28824CC0D10B8000DBA0AF -:1012200065AFE763FC9300000CE9506492EB0CEFB0 -:1012300011C080281611AFBF2F16198EF88BF7DA60 -:10124000E08FF92B1610ABFB7FBB01B1EA0CA85065 -:101250006580D68837DCE0AF89991C789B022CEC3E -:10126000012C161B29120C2C0A0029161A7AE307E6 -:101270007AE9027FBB01C0C165C2A48B352C0A008C -:101280002A0A007AE30564E1CA2C0A0164CE1160DF -:10129000028D88341BEDD198DA8F331EEDCA0F4FC3 -:1012A000542FD42C8C2A8A320ECC020BAB010CBBEF -:1012B0000C65BF0E0A49516E920263FF058A330A1C -:1012C000AB5064BEFD2CD0130AEE510ECE010E0EB3 -:1012D000410C0C410ECC0C65CEE82FD012B0FF654E -:1012E000F26EC0B08E378CD88A362FD2097CA30715 -:1012F0007AC9027EFB01C0B165BEC78835DBA0AEEE -:101300008E78EB01B1AB89D7DAC0AF9D79DB01B143 -:10131000CAC0C07BA3077AB9027DEB01C0C165CE0C -:10132000A1C090292467C020D10F88378C3698142B -:101330000CE90C29161408F80C981D78FB072812E4 -:1013400014B088281614891D9F159B16C0F02B1207 -:101350001429161A2B161B8B147AE30B7AE90688CC -:10136000158E1678EB01C0F165F1B929121A2F120A -:10137000118A352E121B9A1AAFEE2F1210C0A0AF91 -:101380009F79FB01B1EE9F11881AC0F098107AE3A3 -:101390000A7EA9052A12017A8B01C0F164F08160EE -:1013A000018289368B3799170BE80C981F09C90CF5 -:1013B00029161578EB07281215B088281615D9C0FC -:1013C0009A199E188A1F2E12152A161A2E161BDA23 -:1013D000C0C0E08C177F930B7FA90688188F1978FF -:1013E000FB01C0E165E13D29121A2F12138A352E47 -:1013F000121B9A1BAFEE2F1212C0A0AF9F79FB01F8 -:10140000B1EE9F13881BC0F098127AE30A7EA905FB -:101410002A12037A8B01C0F165F1092E12162E16DD -:10142000192A121B005104C0E100EE1AB0EE2E166C -:10143000170EFF132F16180FCC01ACAA2F121A0E7D -:10144000BC01ACFC7FCB01B1AA2A161B2C161A6377 -:10145000FC6200007FB30263FE3163FE2B7EB302A9 -:1014600063FC3463FC2E00006450C0DA20DBF058CB -:1014700015DEC020D10FC09163FD7E00C09163FADC -:101480004CDA20DB70C0D12E0A80C09A2924682C47 -:1014900070075814CED2A0D10F034C0B18ED51DBBE -:1014A000C0A82878C3022BCDF8D9B063FA65000034 -:1014B0002A2C74DB40580E5063FAE80000002D25FA -:1014C000027BC901C0B064B0172CB00728B000DAA5 -:1014D0002006880A28824CC0D10B8000DBA065AFB3 -:1014E000E7C020D10FC09163FC04022A02580250C9 -:1014F0000AA202060000022A0258024D0AA20206AF -:101500000000DB70DA20C0D12E0A80C09E2924683A -:101510002C70075814AEC020D10FC09463FBCF00CD -:10152000C09663FBC9C09663FBC400002A2C74DB21 -:1015300030DC405BFE13DBA0C2A02AB4002F200CDD -:1015400063FF27008D358CB77DCB0263FDD263FC32 -:10155000718F358ED77FEB0263FDC563FC6400009D -:101560006C1004C020D10F006C1004C020D10F00FB -:101570006C10042B221E28221DC0A0C09429240612 -:101580002A25027B8901DBA0C9B913ED08DA2028DE -:10159000B0002CB00703880A28824CC0D10B800011 -:1015A000DBA065AFE7C020D10F0000006C1004295C -:1015B00020062A2102689805289CF965811A0A0AE2 -:1015C0004C65A0F016ECFB2B629E1AECF86FB8028B -:1015D0006000F12AA22668A0078B200ABB0C65B028 -:1015E000E32A629D64A0DD2B200C0CBC11A6CC2D3F -:1015F000C2866FD9026000D71DECEF0DBD0A2DD257 -:10160000A368D0078E200DEE0C65E0C327C285C00D -:10161000E06470BB1DECF468434D1CECF38A2B0CAA -:10162000AA029A7089200899110D99029971882A45 -:1016300098748F329F75282104088811987718ECC8 -:10164000E40CBF11A6FF2DF285A8B82E84CF2DDCA7 -:10165000282DF685C85A2A2C74DB40580DE7D2A0F5 -:10166000D10FC020D10F00002C9CF964C08D2C201C -:10167000668931B1CC0C0C472C24666FC669709E0C -:101680006618ECDA89308F2B0989400B991009FF15 -:101690000208FF029F708C2008CC110DCC029C71B7 -:1016A0008A339A7389329972882A98748F349F7515 -:1016B00063FF820000CC57DA20DB30DC405814B8DE -:1016C000C020D10F00DA20C0B658154763FFE500EF -:1016D000DA2058154563FFDC00DA20DB30DC40DD22 -:1016E000505815C7D2A0D10F2B21045813DA1DEC86 -:1016F000BD2B200CC0E02E246663FF842F2123C065 -:10170000C87FC30263FF792C20662B2104B1CC0C67 -:101710000C472C24665813CF1DECB32B200CC0E0D3 -:101720002E246663FF5A00006C1004C0B7C0A116D7 -:10173000ECB015ECA2D720D840B822C04005350245 -:101740009671957002A438040442C94B1AEC95199D -:10175000EC9629A67EC140D30F6D4A050080880013 -:10176000208C220A88A272D10FC05008A53875B00B -:10177000E363FFD76C100893149412292006655276 -:1017800088C0716898052A9CF965A29816EC892989 -:1017900021028A1409094C6590C78AA00A6A512A55 -:1017A000ACFD65A0BCCC5FDB30DA208C1258147C19 -:1017B000C0519A14C7BF9BA98E142EE20968E0603D -:1017C0002F629E1DEC7A6FF8026000812DD2266890 -:1017D000D0052F22007DF9752C629DC79064C06DE5 -:1017E0009C118A142B200C2AA0200CBD11A6DD0A06 -:1017F0004F14BFA809880129D286AF88288C09799F -:101800008B551FEC6C0FBF0A2FF2A368F00528223E -:10181000007F894329D285D49065907760003D0090 -:10182000002B200C1FEC640CBD11A6DD29D2860F05 -:10183000BF0A6E96102FF2A368F00488207F8905F6 -:1018400029D285659165DA205814E7600013DA2003 -:10185000C0B65814E5600009C09063FFB9DA20589B -:1018600014E28914899109FE506551E48C128D149B -:10187000DA20DBD08DD09E100D6D515813549A1480 -:1018800064A208C75F8FA195A9C0510F0F479F128F -:1018900063FEFB00C091C0F12820062C2066288C36 -:1018A000F9A7CC0C0C472C24666FC6088D148DD17B -:1018B00070DE01C090DD90648159C9D32A12012BDA -:1018C00021045813648A14C0B02B24668EA92AA060 -:1018D000200E28141CEC438D1415EC37C1700A77C8 -:1018E0003685562DDC28AC2C9C13DED0A8557CD335 -:1018F000022EDDF8D3E0DA40055B02DC305BFF8AC4 -:10190000D4A028200CB455C0D02B0A882F0A800CF4 -:101910008C11A6CC29C285AF3FAB9929C6851CEC9A -:101920002CDEF0AC882D84CF28120329120478F322 -:10193000022EFDF8289020D3E007880CC17008081B -:1019400047289420087736657FAB891413EC2A89E1 -:1019500090C0F47797491BEC28C1CA28210485144C -:10196000099E4006EE11875304881185520E8802A5 -:101970000C88029BA09FA18F2B9DA598A497A7954B -:10198000A603FF029FA22C200C1EEC11AECE0CCCA5 -:101990001106CC082BC2852DE4CF2BBC202BC6858D -:1019A0002A2C748B12580D14D2A0D10F28203DC0C0 -:1019B000E07C877F2E24670E0A4765A07B1AEC0F18 -:1019C00088201EEBFD8F148EE48FF40888110A889E -:1019D000020F8F14AFEE1FEC0A98910FEE029E904B -:1019E0001EEC09C0801AEBFA2CD285AABAB8CC2812 -:1019F000A4CF2CD6852C21022F20700ECC02B1FF53 -:101A00002F24702C2502C020D10F87148770070760 -:101A10004763FD6E282123C099798B0263FE9ADD0E -:101A2000F063FE9500DA20DB308C12DD505814F4A0 -:101A3000D2A0D10FC0E163FF7A8B148C12DD50C0AD -:101A4000AA2E0A802A2468DA20581360D2A0D10F67 -:101A5000007096552B629E6EB8531DEBD42DD22686 -:101A600068D0048E207DE9452A629DCBAF2B2104EE -:101A70002C20665812F8C090292466821418EBE2D4 -:101A80008F2108FF019F21C020D10F008B10C9B802 -:101A90008CA00C6C51CCCC8E241FEBD08DE19E140D -:101AA0000FDD029DE18810658FA9C020D10FDA20DB -:101AB000C0B658144DC020D10F0000006C1006298C -:101AC0002102C0D07597102A32047FA70A8B357F78 -:101AD000BF052D25020DD902090C4C65C18216EBFC -:101AE000B41EEBB228629EC0FA78F3026001882926 -:101AF000E2266890078A2009AA0C65A17A2A629DCD -:101B0000DFA064A1772B200C0CBC11A6CC29C286C7 -:101B1000C08C79830260015719EBA709B90A299291 -:101B2000A3689007882009880C65814327C2851C1B -:101B3000EBA964713A8931098B140CBB016FB11D9B -:101B40002C20669F10B1CC0C0C472C24666EC6026C -:101B500060014009FF5065F13A8A102AAC188934B7 -:101B6000C0C47F973C18EBAA1BEBA98F359C719BD7 -:101B7000708B209D7408BB029B72C08298751BEB12 -:101B8000A50F08409B730F881198777FF70B2F21C3 -:101B900002284A0008FF022F2502C0B4600004009A -:101BA0000000C0B07E97048F362F25227D970488D1 -:101BB000372825217C9736C0F1C0900AF9382F3C90 -:101BC0002009094264908619EB7618EB7728967EF7 -:101BD00000F08800A08C00F08800A08C00F0880045 -:101BE000A08C2A629D2DE4A22AAC182A669D893019 -:101BF0007797388F338A3218EB8007BE0B2C21047D -:101C0000B4BB04CC1198E0C08498E1882B9DE59A80 -:101C1000E69FE71AEB78099F4006FF110FCC020AF6 -:101C2000880298E2C1FC0FCC022CE604C9B82C2033 -:101C30000C1EEB670CCA11AECC06AA0829A2852D92 -:101C4000C4CF09B90B29A685CF5CC020D10FC081B4 -:101C5000C0900F8938C08779880263FF7263FF667E -:101C600000CC57DA20DB30DC4058134DC020D10FB8 -:101C7000DA205813DD63FFE8C0A063FE82DA20C0DB -:101C8000B65813D963FFD900DB402A2C74580C5A7C -:101C9000D2A0D10F8A102B210458126E1EEB44C023 -:101CA000D02D246663FEB1006C1006D62019EB3FE0 -:101CB0001EEB4128610217EB3E08084C65805F8AE5 -:101CC000300A6A5169A3572B729E6EB83F2A92263A -:101CD00068A0048C607AC9342A729D2C4CFECAAB71 -:101CE0002B600CB64F0CBD11A7DD28D2860EBE0AA4 -:101CF00078FB269C112EE2A32C160068E0052F62CB -:101D0000007EF91522D285CF2560000D00DA60C073 -:101D1000B65813B5C85A60010F00DA605813B2659F -:101D20005106DC40DB308D30DA600D6D51581227E2 -:101D3000D3A064A0F384A1C05104044763FF6D00E5 -:101D4000C0B02C60668931B1CC0C0C472C64666F36 -:101D5000C60270960A2B610458123EC0B02B64660E -:101D60006550B42A3C10C0E7DC20C0D1C0F002DFCF -:101D7000380F0F4264F09019EB0A18EB0B28967E8F -:101D80008D106DDA0500A08800C08CC0A089301DC0 -:101D9000EB1A77975388328C108F3302CE0BC02406 -:101DA00092E12261049DE00422118D6B9BE59FE787 -:101DB00098E61FEB100998400688110822020FDDF3 -:101DC00002C18D9DE208220292E4B4C22E600C1F73 -:101DD000EB000CE811A7882C8285AFEE0C220B2BB0 -:101DE000E4CF228685D2A0D10F28600CD2A08C111E -:101DF00019EAF80C8D11A988A7DD2ED2852B84CF86 -:101E00000ECC0B2CD685D10FC0F00ADF387FE8024C -:101E100063FF6C63FF6000002A6C74C0B2DC20DDDD -:101E20004058121CC0B063FF63C020D10F000000F7 -:101E30006C10042C221D2A221EC049D320293006F2 -:101E4000243468C0407AC105DDA060000200C0D023 -:101E50006E9738C08F2E0A802B3014C09629340616 -:101E60000EBB022E31022B34147E8004243502DE98 -:101E7000407AC10EC8ABDBD0DA302C0A00580A76A3 -:101E80002E31020E0F4CC8FEC020D10F6895F828E5 -:101E9000310208084C658FEF1AEAC61CEAC42BA26F -:101EA0009EC09A7B9B462BC22668B0048D307BD99E -:101EB0003B29A29DC0E3CB9394901BEAD72D31041C -:101EC0009B9608DD110EDD029D979D9112EAD4C00C -:101ED000E524C4A22E34062F310228A29D02FF025F -:101EE000288C3028A69D2F3502C020D10FDA30C0B3 -:101EF000B658133DC020D10F6C10062920066898F3 -:101F000005289CF965825D29210209094C6592101A -:101F1000CD51DB30DA20044C025812A1C051D3A0BD -:101F2000C7AF2A360AC0E019EAA31DEAA91FEAA230 -:101F30008A3A16EA9FB1AC64C13528629E6F880266 -:101F40006001F129DC332992266890078B2009BBB8 -:101F50000C65B1E027629DC08E6471D82B200C0CFB -:101F6000BC11A6CC29C2867983026001D219EA91FC -:101F700009B90A2992A397106890082822000988B5 -:101F80000C6581BB27C2856471B5292006299CF99F -:101F90006491EC2C20668931B1CC0C0C472C246662 -:101FA0006EC6026001A109F85065819B883689F4EC -:101FB000088C14AC991CEA810C99022C21049970AC -:101FC00019EA980808479971892A0988100899021E -:101FD00018EA95089902997228301329301204885A -:101FE0001006991008990228302C9A740C88100851 -:101FF000C802098802987389379975883898768A53 -:1020000039C0819A771AEA888935987B9978098945 -:10201000140A9902997A8A30893277A73618EA76B3 -:102020008F33987CC084987D882B2E761129761268 -:102030002F761319EA700A9F4006FF1104CA11098E -:1020400088020FAA02987EC1F90FAA022A7610C050 -:10205000AA600001C0A6ADBF0CBC11A6CC29C285E8 -:102060002EF4CF09A90B29C685655107C020D10FD1 -:102070002B200C0CBC1106CC0828C28609B90A6FAB -:10208000890260012E2992A36890082A220009AAD9 -:102090000C65A11F2AC28564A11928203D0828408B -:1020A00064808C843504841464408485F574537F83 -:1020B0008436048414644077745374293013C08CBC -:1020C00079886CC0902924670908476580ED8820CD -:1020D00089F484351FEA4B048414A4940F440294B9 -:1020E000A014EA4608881104880298A1843698A3AF -:1020F000048414A4990F990299A219EA42ADB42854 -:10210000C2852E44CF288C1028C6852821022F2076 -:1021100070098802B2FF2F2470282502C020D10F39 -:1021200000CC57DA20DB30DC4058121DC020D10F24 -:10213000C09163FF8FDA20C0B65812AB63FFE10095 -:10214000DA205812A963FFD88A102B2104581141B4 -:102150001DEA201FEA192B200CC0E02E24668A3AC3 -:1021600063FE480000DA20DB30DC40DD50581324E9 -:10217000D2A0D10F2A2C74DB40580B1FD2A0D10F54 -:10218000292123C08879830263FE202A12002C2093 -:10219000662B21042CCC010C0C472C246658112DE5 -:1021A0001DEA0C1FEA052B200CC0E02E24668A3A9B -:1021B00063FDF800DA2058128C63FF64DA205BFFBD -:1021C0001CD2A0D10F0000006C10089515C061C191 -:1021D000B0D9402A203DC0400BAA010A64382A2009 -:1021E0000629160668A8052CACF965C33B1DE9F263 -:1021F0006440052F120564F29C2621021EE9EE06BA -:10220000064C6562E315E9EA6440D98A3529300352 -:102210009A140A990C6490CC2C200C8B149C110CF1 -:10222000CC11A5CC9C122CC286B4BB7CB30260023C -:10223000D38F110EFE0A2EE2A368E0098620D30F89 -:102240000E660C6562BE88122882856482B6891487 -:1022500064905EDA80D9308C201EE9E81FE9E91D20 -:10226000E9D68B148DD4D4B07FB718B88A293C1026 -:10227000853608C6110E66029681058514A5D50F10 -:10228000550295800418146D8927889608CB11088B -:1022900088140EBB02A8D8299C200F88029BA19805 -:1022A000A088929BA3088814A8D80F880298A22A15 -:1022B000AC1019E9D4C0C08F141EE9C586128D1167 -:1022C000286285AEDD08FF0B2CD4CF2821022F66B3 -:1022D000858B352A2070098802ABAA2825022A247A -:1022E00070C020D10F29529E18E9B16F9802600288 -:1022F0000828822668800829220008990C6591F92F -:102300002A529DC1CA9A1364A1EF2B200C262006E5 -:102310000CB811A5882D82860EBE0A7DC30260020C -:10232000022EE2A368E0082F22000EFF0C65F1F3F5 -:10233000288285DE806481FF9810266CF96461FF35 -:102340002C20668831B1CC0C0C472C24666EC6025A -:102350006001BC08FD5065D1B617E9B419E9981AB7 -:10236000E99F2C21048B2D2830102F211D0C881063 -:102370000BFB090C88020A880209BB0264415289DE -:1023800010C04D9B90979198928D35D9E064D06C98 -:10239000D730DBD0D8307FD713273C10BCE92632AA -:1023A000168C3996E69CE78A37B4389AE80B1314F2 -:1023B0006430492A821686799A9696978C778A7D18 -:1023C0009C982B82172C7C209A9A2A9C189B998681 -:1023D0007BB03BB8896DB9218BC996A52692162A88 -:1023E000AC18B8999BA196A08BC786CD9BA22B92C7 -:1023F0001596A49BA386CB2CCC2026A605C0346BB7 -:10240000D4200D3B0C0DD8090E880A7FB705C0906B -:102410009988BC88C0900B1A126DAA069988998B6E -:10242000288C18C0D01BE9831CE98216E978B1FF1B -:102430002A211C23E6130F0F4F26E6122F251D7F9E -:10244000A906C0F0C08028251D05F6111AE9718F74 -:10245000202BE6152CE6162DE61726E6180AFA02BA -:102460002AE614292006299CF96490FF29200C8D66 -:1024700015C0801AE9570C9C11AA99A5CCDA202B1B -:10248000C2852894CF0B4B0B2BC685C0B08C165839 -:102490001114D2A0D10F8A356FA548D8308BD56DD5 -:1024A000A90C8A860A8A14CBA97AB337288C10C063 -:1024B00080282467080B4765B112DA20DB302C1224 -:1024C00006581137D3A0C0C1C0D02DA4039C1563FA -:1024D000FD26863664610C8910C04D9B90979198BB -:1024E0009263FEA4C08163FFC78A15CCA7DA20DB04 -:1024F000308C1658112BC020D10FDA20C0B65811DD -:10250000BA63FFE400DA208B115811B763FFD900DA -:102510009E178A132B210458104F8E17C0B02B24FE -:102520006663FE34C08063FE09DA20DB308C16DD82 -:1025300050581233D2A0D10FDA205811AB63FFA844 -:102540002D2123C0C87DC30263FE0D8A132B2104F5 -:102550002C20669817B1CC0C0C472C246658103DE3 -:102560008E17C0D02D246663FDEE0000262123B017 -:102570006606064F262523656EF128206A7F8705AB -:102580000829416490A5C0D01BE91C19E92B26201D -:102590000723E61BB16609FA022BE61A28200A2D4A -:1025A000E61D2AE61E09880228E61C88260606473C -:1025B00028E6202B220826E53E2BE6212D24072C99 -:1025C00020062A206468C347B44463FE9EDB30DAE9 -:1025D000208D15C0CE2E0A802C24688C1658107BB6 -:1025E000D2A0D10F8E102A321616E8F30A2A1486CA -:1025F000662BE61297E127E61328E614AA66096619 -:102600000296E02EEC4869ED50C14663FD7A000069 -:1026100064AFB419E8E928201689920A880C009161 -:102620000400881AA8B8982963FF9C002B21046E27 -:10263000B81E2C2066B8CC0C0C472C2466C9C09E52 -:10264000178A135810048E17C0348F20C0D02D2441 -:1026500066C06826240663FF2C008D35C08064D0D8 -:102660004AD9E0DC30DBE0DF301AE8F4B188B4FFAF -:1026700017E8F486C9249DFF8DC82CCC102D463058 -:102680000767012D46320A66011DE8EE264631AD88 -:102690006D2D463326F21597B796B684C3BCBB940E -:1026A000B58D35299C107D83C22F211DC14663FD48 -:1026B0004B0000006C1006292006289CF86582C398 -:1026C0002921022B200C09094C6590E116E8B90C70 -:1026D000BA11A6AA2DA2862C0A127DC3026002900E -:1026E00019E8B509B90A2992A36890078C2009CC8A -:1026F0000C65C27C29A2856492762D629E1AE8AB95 -:102700006FD8026002722AA22629160168A0082B3F -:1027100022000ABB0C65B26029629DC18C6492588C -:102720002A21200A806099102C203CC7EF000F3E20 -:10273000010B3EB1BD0FDB390BBB098F260DBD115F -:102740002DDC1C0D0D410EDD038E27B1DD0D0D417D -:102750000FEE0C0DBB0B2BBC1C0BB7027EC71C2C49 -:1027600021257BCB162D1AFC0CBA0C0DA16000099B -:102770003E01073EB1780987390B770A77EB026093 -:10278000020A2C2123282121B1CC0C0C4F2C25230B -:102790007C8B29B0CD2D2523C855DA20DB30580F8E -:1027A000FA292102CC96C0E80E9E022E2502CC57B3 -:1027B000DA20DB30DC4058107AC020D10F2C2066A4 -:1027C0008931B1CC0C0C472C24666EC6026001D353 -:1027D00009FD5065D1CD2F0A012E30112922146434 -:1027E000E01128221B090C4400C10400FA1A0A88CF -:1027F0000228261B2E3010C0A0C0B088301CE86E06 -:1028000094129513C04125203C2CC022088D1477CA -:1028100087052F0A010CFA38C0F2C0840858010F4E -:102820005F010F4B3805354007BB10C0F0084F382B -:1028300008FF100FBB0228ECFEC0F0084F38842BB5 -:102840000BA8100AFF102A21200F88020B8802080B -:10285000440218E87D8F110844022821250A2A1411 -:102860000828140488110A88022A210494F08B2075 -:1028700004E41008BB1104BB02C04A04BB029BF174 -:10288000842A08AB110BEB0294F40A54110B440296 -:102890000555100D1B4094F707BB100B550208554A -:1028A00002C08195F68433C05094F3B1948B329575 -:1028B000F898F99BF2C080C1BC24261498FB9BF5C4 -:1028C00099FA853895FC843A94FD8B3B9BFE8839B8 -:1028D00098FF853525F6108436851324F6118B373D -:1028E00084122BF612C0B064C08189307797468D70 -:1028F0003288332E30108F111CE840099940069918 -:10290000112CF614C0C42CF6158C2B2DF61A28F6B3 -:102910001B2BF61904A81109880208EE0219E835E4 -:10292000C18008EE0209C90229F6162EF618C09ECB -:10293000600004000000C09A2F200C18E8250CFE4F -:1029400011A8FFA6EE2DE2852BF4CF0D9D0B2DE6F1 -:1029500085C87F8A268929A7AA9A260A990C090977 -:102960004829252565504CC020D10F00C09A63FF2F -:10297000C6DA2058109D63FE34DA20C0B658109A8B -:1029800063FE2A00689738C020D10F0000DA20DBF0 -:1029900070581057C0B0C0C10ACA390ACB3865BDDB -:1029A000E063FE098A102B2104580F2AC0B02B24A3 -:1029B0006663FE21DB402A2C7458090FD2A0D10F88 -:1029C000DA20580F2F63FCF76C1004C020D10F00E1 -:1029D0006C1004290A801EE81D1FE81D1CE7F50C79 -:1029E0002B11ACBB2C2CFC2DB2850FCC029ED19CA4 -:1029F000D0C051C07013E81914E81818E8162AB2AC -:102A000085A82804240A234691A986B8AA2AB6854F -:102A1000A98827849F25649FD10F00006C100AD6D7 -:102A200030283010292006288CF964829B68980B86 -:102A30002A9CF965A1B2022A02580F1189371BE7B7 -:102A4000DEC89164520E2A21020A0C4C65C2588DD0 -:102A50003019E7D774D7052E212365E29E2F929E69 -:102A60001AE7D36FF8026002532AA22668A0082C46 -:102A700022000ACC0C65C2442A929D64A23E9A159B -:102A80001FE7CD8D67C1E664D00E2B620618E7CA3A -:102A900064B0052880217B8B422B200C18E7C50CE5 -:102AA000BC11A8CC29C28679EB450FBE0A2EE2A341 -:102AB00068E0048F207EF9372CC2859C1864C233ED -:102AC0002B212F87660B7B360B790C6F9D266ED2E0 -:102AD000462C203D7BC740CE5560001E2A200CC1ED -:102AE000B28C205810759A1864A2458D6763FFCF89 -:102AF000C0C063FFC5D7B063FFD300C0E060000271 -:102B00002E60030EDB0C6EB20EDC700CEA11AA6AAA -:102B10002AAC20580199D7A0DA20DB70C1C82D213A -:102B20002058101B8C268B279A160CBB0C7AB334BA -:102B30008F18896399F3886298F28E659EF82D60EC -:102B4000108A189D1768D729C0D09DA92C22182B50 -:102B500022139CAB9BAA97A58E667E73026000979A -:102B6000CF5860001FDA208B16580FE165A138633B -:102B7000FFBDC081C0908F18C0A29AF999FB98FA46 -:102B800097F563FFD2DB30DA20DC40580F85C05167 -:102B9000D6A0C0C02BA0102CA4039B172C12080297 -:102BA0002A02066B02DF702D60038E179D149E10A3 -:102BB0000CDD11C0E0AD6D2DDC205801188C148B9C -:102BC00016ACAC2C64038A268929ABAA0A990C9A04 -:102BD00026886609094829252507880C98662F222A -:102BE00018A7FF2F261863FE96DA20DB30DC40DDC5 -:102BF00050581083D2A0D10FC0302C20668961B10B -:102C0000CC0C0C472C24666EC6026000D2C0300982 -:102C1000FD5065D0CA8E6764E069647066DB608CC5 -:102C200018DF70DA202D60038E170CDD119E10ADB9 -:102C30006D2DDC201EE7845800F9232618DA208B3E -:102C400016DC402F2213DD50B1FF2F2613580F241E -:102C5000D2A0D10F0028203D084840658DE76F9530 -:102C60003EDA308DB56D990C8CA80C8C14CACF7CD3 -:102C7000D32D2AAC10C090292467090D4764DDC507 -:102C8000600092002C1208066B022D6C20077F0258 -:102C90008E17DA209E101EE76B58007D63FF9A00A6 -:102CA000C09163FFD1000000655081DA20DB60DC59 -:102CB00040580F3BC020C0F02FA403D10FDA20C032 -:102CC000B6580FC963FFE000006F950263FD6CDA30 -:102CD00020DB30DC40DD50C4E0580EBCD2A0D10F68 -:102CE0008A152B2104580E5B232466286010981740 -:102CF00063FF2100DA20580FBC63FFABC858DB30FC -:102D0000DA20580EA12A210265AF9CC09409A902BD -:102D100029250263FF91DB30DC40DD50C0A32E0A81 -:102D2000802A2468DA20580EA9D2A0D10FC020D161 -:102D30000FDA202B200C580FC563FF6B6C10042892 -:102D40002006C062288CF8658125C050C7DF2B2281 -:102D50001BC0E12A206B29212300A104B099292559 -:102D600023B1AA00EC1A0BC4010A0A442A246B04FA -:102D7000E4390DCC030CBB012B261B6440692920D0 -:102D80000C1BE70B0C9A110BAA082FA2861BE70954 -:102D90006FF9026000B60B9B0A2BB2A368B0082C37 -:102DA00022000BCC0C65C0A42BA2851DE72D64B0BE -:102DB0009B8C2B2421040DCC029CB08820C0C5081C -:102DC00088110C880298B1882A08441198B48F346D -:102DD00094B79FB5C0401EE6FE2DA2850E9E082525 -:102DE000E4CF2DDC282DA68529210209094C689401 -:102DF0001A689820C9402A210265A00B2A221E2B9E -:102E0000221D7AB10265A079C020D10F2C21236543 -:102E1000CFDE6000082E21212D21237EDBD52B2241 -:102E20001E2F221D2525027BF901C0B064BFC413EB -:102E3000E6DF2CB00728B000DA2003880A28824C8D -:102E4000C0D10B8000DBA065AFE763FFA62A2C741E -:102E5000C0B02C0A02580D951CE7039CA08B2008DB -:102E6000BB1106BB029BA1893499A263FF790000C4 -:102E7000262468DA20DB30DC40DD50580FE1D2A098 -:102E8000D10FDA202B200C580F58C020D10F000092 -:102E90006C1006073D14C080DC30DB40DA20C047F0 -:102EA000C02123BC30032838080842774001B1DD37 -:102EB00064815A1EE6BB19E6BC29E67ED30F6DDAA3 -:102EC0000500508800308CC0E0C02025A03C14E6EE -:102ED000BAB6D38FC0C0D00F87142440220F8940C8 -:102EE000941077F704C081048238C0F10B2810C019 -:102EF00044C02204540104FD3802520102FE380885 -:102F0000DD10821C07EE100E6E020EDD02242CFE78 -:102F1000C0E004FE380AEE100E88020D88028DAB68 -:102F20001EE6AA08D8020E880298B0C0E80428104D -:102F30000E5E0184A025A125084411084402052540 -:102F400014045511043402C0810E8E3994B18FAA35 -:102F500084109FB475660C26A11FC0F2062614606B -:102F60000009000026A120C0F20626140565020F04 -:102F7000770107873905E6100778100866020655BD -:102F80000295B625A1040AE611085811082802087E -:102F9000660296B7C060644056649053067E11C0C6 -:102FA000F489C288C30B340B96459847994618E6B6 -:102FB000919F410459110E99021FE68F020E470896 -:102FC000D80298420E99029F40C1E00E990299449E -:102FD0002FA00CB4380CF91114E67E1EE675A4FF80 -:102FE000AE992E928526F4CF0E880B289685D10FA8 -:102FF0002BA00C1FE66F1CE6760CBE11ACBBAFEE2F -:103000002DE28526B4CF0D3D0B2DE685D10FC08076 -:1030100005283878480263FEA263FE966C1006C04D -:10302000C06570F18830C030088714778712C0B04F -:10303000C0A619E661299022C030CC97C03160004B -:1030400003C0B0C0A6C0E0C091C0D4C08225203C5F -:103050000B3F109712831CC0700858010D5D0108CA -:103060009738C0800B9838077710048810086802DA -:10307000087702C0800D98382D3CFE0888100D9E00 -:10308000388D2B0AEE1008EE0207EE020CB8100F76 -:10309000DD02053B400EDD029D408920043D100805 -:1030A00099110D99022D210409A90208DD119941F8 -:1030B000872A05B9100D3D020ABB110DBB02087726 -:1030C0000297442821258712082814048811071E16 -:1030D0004007EE100E990275660926211F06261478 -:1030E000600006002621200626140868029B470976 -:1030F0008802984629200CD2C0C0800C9E111BE685 -:10310000341FE62BAB99AFEE2DE2852894CF0DADA1 -:103110000B2DE685D10FDD40C0A6C0B08E51CAE0B0 -:10312000B2AAB1BB2DDC108F500E783698100877FC -:103130000C9FD898D989538F52991199DB9FDA7EC9 -:103140008309B1CC255C10C97763FFCF88108D113E -:1031500008E70C9751AD8DD7F078DB01B1F79D539F -:1031600097528830C030088714088840648ED5652F -:10317000BEC963FEBC0000006C1004D720B03A88C2 -:1031800020C0308221CAA0742B1E2972046D080F42 -:10319000C980C9918575B133A2527A3B0B742B0853 -:1031A00063FFE900649FECD10FD240D10F00000013 -:1031B0006C1008D630C0709515DA408E3914E5FED3 -:1031C0009A1464E0026451FC2920062A9CF865A246 -:1031D0005F2A21020A0B4C65B21F2C320015E5F460 -:1031E00074C7052D212365D3242E529E1AE5F06F56 -:1031F000E80260021B2AA22668A0082B22000ABB54 -:103200000C65B20C2E529D1DE5EB64E2038B386415 -:10321000B22D9E16C8BC8D691EE5E864D0052EE06F -:10322000217BEB492E200C18E5E20CEF11A8FF29B9 -:10323000F286C186798B4A17E5DF07E70A2772A372 -:10324000687004882077893925F2856452A2272185 -:103250002E07B73607B90C6F9D01D7B089696E92FA -:103260004228203D7B873C8A15CDAF600018C1B253 -:103270008C202A200C580E90D5A064A2AC8B6863D9 -:10328000FFCBC05063FFC3C0E06000022E60030E9E -:103290009B0C6EB20EDC700CEA11AA6A2AAC285B99 -:1032A000FFB6D7A0DA20DB70C1C42D211F580E381D -:1032B0008C268B27D4A00CBB0C7AB3258A63C090D4 -:1032C0009A538862995898528F659F598E679E5B72 -:1032D0008D6697559D5A8B687B7B748B15CEB3603A -:1032E000000DDA20DB40580E0265A10D63FFCC0013 -:1032F000DA20DB308C14580DAAD6A0C0C0C0D19DF6 -:10330000152CA403DA20DB60DF70DC50C0E0256000 -:10331000039E101EE5C10C5D11AD6D2DDC285BFF19 -:103320003F8E66A5A88F67286403AF7F77FB01B146 -:10333000EE9E669F678D268C29A4DD0DCC0C9D2604 -:103340008B680C0C482C252507BB0C9B6863FEC3BF -:103350002C20668961B1CC0C0C472C24666EC60209 -:103360006000B809FD5065D0B2CBBF8E69CBEBDBF6 -:1033700060DC50DF70DA201EE5BC2D6003C0809851 -:10338000100CDD11AD6D2DDC285BFF248B15C942BF -:103390008A2629220904AA082A26060A990C09095C -:1033A0004829252565B13CC020D10F00DB602D6C7C -:1033B00028DF70DA20C0C01EE5AC9C10DC505BFE3C -:1033C000B463FFC7002D203D0D4D4065DDF96FE56D -:1033D00022DA308F456DE90C8EAA0E8E14C9E37E79 -:1033E000F3112AAC10C090292467090F4764FDD758 -:1033F00060014100C09163FFED00881565814CDAE2 -:1034000020DB608C14580D66C020C09029A403D125 -:103410000FDA20C0B6580DF463FFDE008A162B21A8 -:1034200004580C8CC0A02A24668B6863FF3A000005 -:10343000002B9CF965B0C5DA20580C9163FD910012 -:103440002B200C0CBA11A5AA2FA286C1C27FC302E1 -:103450006000FC0DB90A2992A36890078C2009CC62 -:103460000C65C0EB26A2856460E52C20668931B12D -:10347000CC0C0C472C24666FC60270960ADAE02B3F -:103480002104580C74272466893077974B18E55926 -:103490001DE55A8A328B33C0F42C2104099E400664 -:1034A000EE1104CC110ECC029F61C1E00ECC029D46 -:1034B000608F2B9A669B679C64976508FF029F62EA -:1034C0002F200C18E5430CFE11A5EE2DE285A8FF78 -:1034D00027F4CF2DDC202DE6858F1565F091C020D7 -:1034E000D10F00002A2C748B14580643D2A0D10FA0 -:1034F00000DA20DBE0580DBC63FEFE0000DA20DBC2 -:10350000308C148D15580E3ED2A0D10F00008815B6 -:10351000C888DA20DB30580C9C2A210265AEDAC05C -:103520009409A90229250263FECFDA202B200C582A -:103530000DC763FEC4272468DA20DB302C12042D6B -:1035400012052E0A80580CA163FC7C00C020D10F0C -:10355000DA20580DA58A15CDA1DA20033B022C12E2 -:1035600004580D0F27A403C020D10F00C020D10F95 -:103570002A2C748B14580620D2A0D10F6C100C2862 -:103580002102941008084C6583621FE50929F29E08 -:103590006F98026003661DE50529D2266890082A07 -:1035A000220009AA0C65A3542CF29D64C34E2B2063 -:1035B0000C0CB611AF66286286C1EC78E30260039A -:1035C0004619E4FC09B90A2992A36890078A2009E0 -:1035D000AA0C65A33224628564432CC0E12A310918 -:1035E000C07027246689359A11992A8836991298CD -:1035F0002B89379813992C883899140858149815E2 -:10360000982D89392A25042E251D29251C28302886 -:10361000C09228243C2A30290808479816098901B5 -:103620002A243D2A311599170A094109A90C299C18 -:10363000EC29251F7E87192D2A000DA06000083E69 -:10364000010A3EB1AD08DA390EAA110A990C2925F2 -:103650001F2A211F18E5060A8160C1D0941A951B04 -:1036600001083E00053EB184054839843C259CFC98 -:103670000D883629201408AA1C8D3D2726182E26D1 -:10368000132E26142E261527261B2E246B2724677F -:1036900027246808581C0909432924142932112AAF -:1036A000252E28252F27252427252527252C2725A6 -:1036B000232525202425212D2522841A2D211C8512 -:1036C0001B6FD202600209C0A099186D080AB1AA46 -:1036D00000A10400E91A7D9B0263FFEE8918C080F7 -:1036E000C0E1C070C0D29B1D951B961C9C1E16E4A9 -:1036F000D12C203D15E4E00C0B400DCC010BE7383C -:103700001DE4C30A77100CE8380B8810C0C49C4134 -:103710000877029D40B0A80988118B209C499D48DC -:10372000954B9643087702861418E4D115E4B9083E -:10373000770205BB029B4A9B429746881287110875 -:10374000DA149A4E0D88100D77110877021AE4AC3E -:1037500006D8140D6610087702974FC78F984D98BA -:103760004C9845871598440715140D55110A5502B4 -:10377000954715E4C18A262D46102D46182D462062 -:103780002C46112C46192C46212B46122B461A2862 -:1037900046142846152B46228816254624254626FB -:1037A0008B170A0C48090D4885130EDD1105CC1145 -:1037B0000839400BEB390299101EE4B00DCC020D14 -:1037C0005511082D400655022E461316E47B0FDDD9 -:1037D00011254616080840851B0188100DBB02867E -:1037E000671DE4A70988020CBB0219E4771CE4A555 -:1037F0002B46172D461BA7661BE4A4C0702C461C45 -:103800000988028C1E28461E2B4623C0908B1D293A -:10381000461D29461F18E49D29462728462529319B -:10382000162E200629246A243117962D2425238656 -:103830001CCCE1272407C0D7090E4064E0829A29F6 -:1038400009284164809164409B2D2406C098094951 -:1038500036280AA024628501C404A844282104242F -:1038600066850888118E3F8A3E2D32100EA41800FE -:10387000C4040EAE1800EE110ACA530EDD02C0E3F6 -:103880000E880298C11EE48209084E9EC08E2094C4 -:10389000C398C59DC418E44E1DE47F05EE110EAA21 -:1038A000020DAA02A8B82784CF9AC21EE44024F2CF -:1038B0009D27E4A2244C1824F69D655052C020D1C7 -:1038C0000F2D2406C0A0C09809493604A93863FF0B -:1038D0007FC0A063FE070000654F6DC098C0A82A96 -:1038E000240663FF6B2D2406C09063FF63CC57DA78 -:1038F00020DB308C10580C2AC020D10F00DA20C0F9 -:10390000B6580CB963FFE500DA20580CB763FFDC4A -:103910002A2C748B10580538D2A0D10F6C100628B1 -:1039200020068A336F8202600161C05013E42029AF -:10393000210216E41F699204252502D9502C201576 -:103940009A2814E41D8F2627200B0AFE0C04770901 -:103950002B711C64E1398E428D436FBC0260016F94 -:1039600000E104B0C800881A08A80808D8029827FF -:103970002B200668B32ECE972B221E2C221D011160 -:10398000027BC901C0B064B0172CB00728B000DAC0 -:103990002003880A28824CC0D10B8000DBA065AFD1 -:1039A000E7C020D10F2D206464DFCA8B29C0F10B42 -:1039B000AB0C66BFC02B200C0CBC11A6CC28C28659 -:1039C0002E0A0878EB611EE3FB0EBE0A2EE2A36806 -:1039D000E0052822007E894F29C2851EE4076490F5 -:1039E000461FE4159E90C084989128200A95930F55 -:1039F000880298928E200FEE029E942F2007882630 -:103A00002F950A98969A972E200625240768E34357 -:103A10002921022AC2851DE3EE2AAC20ADBD25D4A2 -:103A2000CF2AC68563FF4E002E2065CBEDC08228CD -:103A30002465C9F605E4310002002A62821BE3F71F -:103A40002941020BAA022A668209E4312921026374 -:103A5000FF23000064DFB88F422E201600F1040D12 -:103A6000EE0C00EE1AAEAE9E2963FFA38A202B3225 -:103A700021B1AA9AB0293221283223B499293621BA -:103A80007989A92B32222B362163FFA0C020D10FC8 -:103A90009F27252415ACB828751C2B2006C0C12EE5 -:103AA000BCFE64E0AB68B7772DBCFD65DEC72D209A -:103AB00064C0F064D0868E290EAE0C66E089C0F139 -:103AC00028205A288CFE08CF3865FEE863FF58008E -:103AD00000E0049310C0810AF30C038339C78F08F8 -:103AE000D80308A80108F80C080819A83303C80C63 -:103AF000A8B828751C030B472B24158310CBB700DF -:103B0000E104B0BC00CC1AACAC0CDC029C27659E76 -:103B10005EC0B20B990209094F29250263FE5000CD -:103B20002D206A0D2D4165DF7EDA20C0B0580C755E -:103B300064AF18C0F163FEEF9F2763FFD02E221FF2 -:103B400065EE3263FF79000028221F658E2763FF30 -:103B50006E252406252502C09063FE196C100665AB -:103B600071332B4C18C0C7293C18C0A1C08009A8CC -:103B7000380808426481101CE38A1AE38B2AC67E47 -:103B80002A5CFDD30F6DAA0500B08800908C894097 -:103B9000C0A00988471FE3B4080B47094C50090D22 -:103BA0005304DD10B4CC04CC100D5D029D310CBB70 -:103BB000029B3088438E2098350FEE029E328D2670 -:103BC000D850A6DD9D268E40C0900E5E5064E097D2 -:103BD0001CE39A1EE389038B0BC0F49FB19EB02DAA -:103BE000200A99B30CDD029DB28F200CFF029FB416 -:103BF0008E262D20079EB68C282DB50A9CB7292429 -:103C0000072F20062B206469F339CBB61DE36B2305 -:103C100020168DD20B330C00D10400331AB48DA3BF -:103C2000C3932922200C13E36A1FE3610C2E11AF0A -:103C3000EEA3222924CF2FE285D2A00FDD0B2DE6A3 -:103C400085D10F002E200CB48C0CEB111FE3611DED -:103C5000E358AFEEADBB22B28529E4CF02C20B22FE -:103C6000B685D2A0D10F00002E200C1CE3511FE31B -:103C7000580CEB11AFEEACBB22B28529E4CF028227 -:103C80000B22B685D2A0D10FC0D00BAD387DC802B3 -:103C900063FEEC63FEE08E40272C747BEE12DA703C -:103CA000C0B32C3C18DD50580A7B8940C08063FEAD -:103CB000E3DE60DA20DB30DC40DD505800059A108E -:103CC000DB50077A0258044C881063FEF8000000AD -:103CD0006C100692121EE3428C40AE2D0C8C472EC7 -:103CE0003C1804CA0BD9A07DA30229ADF875C30204 -:103CF000600084C0B0C023C0A09D106D0844B89F70 -:103D00000EB80A8D900EB70BB8770D6D36ADAA9D23 -:103D1000800D660CD8F000808800708C879068B1A8 -:103D200024B22277D3278891C0D0CB879890279C44 -:103D30001000708800F08C9D91CB6FC08108BB0390 -:103D400075CB3663FFB4B1222EEC1863FFD4859295 -:103D50000D770C86939790A6D67D6B01B1559693FF -:103D60009592600016B3CC2D9C188810D9D078D3CA -:103D7000C729DDF863FFC100C0238A421BE3470067 -:103D8000CD322D44029B3092318942854379A10581 -:103D90001EE3430E550187121BE334897095350BE2 -:103DA0009902993288420A880C98428676A6A6968D -:103DB000768F44AFAF9F44D10F0000006C10089382 -:103DC00011D6308830C091086351080847059838EB -:103DD0009812282102293CFD08084C6581656591EF -:103DE000628A630A2B5065B18B0A6F142E0AFF7C1E -:103DF000A60A2C205ACCC42D0A022D245A7FE00298 -:103E0000600215892888261FE32609880C65820F21 -:103E10002E200B0FEE0B2DE0FE2EE0FF08DD110E25 -:103E2000DD021EE320AEDD1EE3201CE3200EDD01DB -:103E30000DCC37C180084837B88DB4889810896098 -:103E40001AE2DE7B96218B622AA0219C147BA317A9 -:103E50009D132A200C8B108C20580B978C148D13DB -:103E6000DBA0CEAC6001C4002E200C1BE2D10CEA1A -:103E7000110BAA082BA2861FE2CF7BDB3B0FEF0AB8 -:103E80002FF2A368F0052822007F892C2BA28564DD -:103E9000B0AA87628826DE700C7936097A0C6FAD7D -:103EA0001C8F279B1508FF0C77F3197E7B729D13DF -:103EB0009C149B15CF56600025C0B063FFD0D790EF -:103EC00063FFDD00009D139C14DA20DB70580B08A3 -:103ED0008B158C148D1365A06A8E6263FFCC00DA9B -:103EE000208B11DC40580AAED6A08B15C051DE7075 -:103EF000DA20DC60DD405BFF768D138C14D9A02EB8 -:103F0000200C1BE2AB1FE2B20CEA11AFEFC0E0AB3A -:103F1000AA2BA2852EF4CF0B990B29A68563FF1D32 -:103F200000DA20DC60DD40DE708912282007DF50D7 -:103F3000A9882824075BFF09D2A0D10F00DBE0DAB3 -:103F400020580B296550EF2A20140A3A4065A0EB4F -:103F5000DB60DC40DD30022A0258099CD6A064A058 -:103F6000D584A183A0040447030547951203635138 -:103F7000C05163FE5C2C2006D30F28CCFD6480A5C5 -:103F800068C704C0932924062C2006C0B18D641F85 -:103F9000E28A9D279D289D298FF29D2600F104002D -:103FA000BB1A00F004B0BE0EDD01C0F0ADBB8D65E4 -:103FB0002F24070D0E5E01EE11AEBB2E0AFEB0BB24 -:103FC0000B0B190EBB36C0E20B0B470EBB372B2475 -:103FD0001618E2820A09450D0B422B240B29240AEC -:103FE000B4BE2E240C7D88572920162FCCFDB09D01 -:103FF0000A5C520DCC362C246465FDEC0C0C476435 -:10400000CDE618E26D8E2888820C9F0C008104009A -:10401000FF1AAFEE9E2963FDCF1CE29C63FE1300E6 -:104020001CE29363FE0C8D6563FFA500DA202B2054 -:104030000C580B06645F0FC020D10F00C020D10FB9 -:10404000C093292416C09363FFA000006C1004C025 -:104050006017E2561DE259C3812931012A3008292F -:10406000240A78A108C3B27BA172D260D10FC0C16B -:104070006550512625022AD0202F200B290AFB2B20 -:1040800020142E201526241509BB010DFF0928F147 -:104090001C2B2414A8EE2EF51C64A0B52B221E2880 -:1040A000221D0111027B8901DB6064B0172CB0076F -:1040B00028B000DA2007880A28824CC0D10B800083 -:1040C000DBA065AFE7DB30DC40DD50DA205800D8FC -:1040D000292102090B4CCAB2D2A0D10F00CC5A2C14 -:1040E00030087BC1372ED02064E02D022A02033B2A -:1040F00002DC40DD505800CED2A0D10F2B2014B0EE -:10410000BB2B24140B0F4164F0827CB7CAC0C10CD6 -:104110009C022C2502D2A0D10FC020D10F2E200648 -:1041200069E2C12F21020F0F4C69F1B8262406263F -:1041300025022B221E28221D2A200B2920150DAA1C -:10414000092CA11C262415AC9929A51C7B814A6049 -:104150000049B0BB2B24140B0D41CBD67CB7022CED -:1041600025022B221E2E221D7BE9022B0A0064B0A1 -:10417000172CB00728B000DA2007880A28824CC024 -:10418000D10B8000DBA065AFE7C020D10F2624064D -:10419000D2A0D10F26240663FFC7DB601DE20764AF -:1041A000BF422CB00728B000DA2007880A28824CCA -:1041B000C0D10B8000DBA065AFE71DE1FF63FF24EA -:1041C0006C1004282006C0646F8564CA5B29201423 -:1041D0007D9726DA20DB30DC40055D025800192986 -:1041E0002102090A4CC8A3C020D10F00C0B10B9B0B -:1041F000022B2502C020D10F0000022A02033B023D -:104200002C0A015800CAC9AADA20DB30DC40580960 -:10421000E429A011D3A07E97082C0AFD0C9C012C48 -:10422000A411C0512D201406DD022D241463FFA219 -:10423000DA20DB30DC40DD50C0E0580964D2A0D188 -:104240000F0000006C100616E1DA1CE1DA65513B44 -:10425000C0E117E1D62821028B2008084C65807B3D -:104260002932000969516993722A629E6EA8482A10 -:10427000722668A0027AB93F2A629DB44FCBA72B61 -:10428000200C0CBD1106DD0828D28678FB150CBF6A -:104290000A2FF2A368F00488207F89072DD285D3E6 -:1042A0000F65D0602A210419E202D30F7A9B1DDA30 -:1042B00020580864600024002C21041BE1FD7CBB15 -:1042C00013DA20C0B658085FC9536000EFDA2058EF -:1042D0000A46600006DA20C0B6580A436550DDDCA5 -:1042E00040DB308D30DA200D6D515808B8D3A06412 -:1042F000A0CA1CE1B0C05184A18EA00404470E0ED8 -:104300004763FF50002B2104C08C8931C070DF70DF -:1043100009F950098F386EB8172C2066AECC0C0CFA -:10432000472C24667CFB099D105808CA8D10272451 -:104330006694D11EE1B6B8DC9ED0655056C0D7B8A1 -:104340003AC0B1C0F00CBF380F0F42CBF119E19465 -:1043500018E19628967EB04BD30F6DBA0500A08861 -:1043600000C08C2C200CC0201DE19A0CCF11A6FFA0 -:104370002EF285ADCC27C4CF0E4E0B2EF685D10F75 -:10438000C0800AB83878D0CD63FFC1008E300E0EE1 -:104390004763FEBD2A2C742B0A01044D025808BD48 -:1043A0002F200C12E18B0CF911A699A2FF27F4CF54 -:1043B000289285D2A008480B289685D10FC020D11D -:1043C0000F0000006C1004C060CB55DB30DC4005F2 -:1043D0005D02022A025BFF9B29210209084CC88268 -:1043E000D2A0D10F2B2014B0BB2B24140B0C41CB2B -:1043F000C57DB7EBC0C10C9C022C2502D2A0D10F09 -:104400000000022A02033B02066C02C0D0C7F72E4E -:10441000201428310126250228240A0FEE012E241B -:104420001458010D63FFA300262406D2A0D10F006B -:104430006C1006282102D62008084C65809D2B2090 -:104440000C12E15B0CB811A2882A8286B5497A93D6 -:104450000260009719E15809B90A2992A3689008E7 -:104460002A620009AA0C65A0822882851CE1636487 -:1044700080799C80B887B14B9B819B10655074C03C -:10448000A7D970280A01C0D0078D380D0D42CBDEA8 -:104490001FE1441EE1452EF67ED830D30F6D4A054C -:1044A00000808800908C2E3008C0A000EE322E7460 -:1044B0000028600C19E1470C8D11A2DDA988C020ED -:1044C0002CD2852284CFD2A00CBC0B2CD685D10F48 -:1044D000C0F0038F387FA0C063FFB400CC582A6CB3 -:1044E00074DB30DC405807F1C020D10FDA60580986 -:1044F000BE63FFE7DD402A6C74C0B0DC705808650D -:104500002E30088B1000EE322E740028600C19E15A -:10451000300C8D11A2DDA988C0202CD2852284CF39 -:10452000D2A00CBC0B2CD685D10F00006C10042936 -:104530002014282006B199292414688124C0AF2CA6 -:104540000A012B21022C24067BA004C0D02D2502B9 -:10455000022A02033B02044C02C0D05800BFD2A082 -:10456000D10FC020D10F00006C1004293101C2B45A -:1045700029240A2A3011C28378A16C7BA169645076 -:10458000472C2006C0686FC562CA572D20147CD7FF -:1045900022DA20DB30DC40DD505BFFA52921020957 -:1045A0000E4CC8E2C020D10FC0F10F9F022F250290 -:1045B000C020D10FDA20DB30C0C05BFFDC28201424 -:1045C00006880228241463FFC72920151BE0FB2A54 -:1045D000200BC0C09C240BAA092BA11C2C2415ABBA -:1045E0009929A51C63FF9900C020D10FDA20DB3088 -:1045F000DC40DD50C0E0580875D2A0D10F000000AB -:104600006C1004CB5513E0F625221F0D46110655FC -:104610000CA32326221E25261F06440B24261E73C8 -:104620004B1DC852D240D10F280A80C04024261FFB -:10463000A82828261E28261DD240D10FC020D10F21 -:10464000244DF824261E63FFD80000006C100428B7 -:104650002006D6206E85026000DE17E0D51DE0DC66 -:1046600019E0D5C0C1C0202A8CFC64A1322B6102A4 -:10467000B44E0B0B4C65B0A82B600C2A62000CB832 -:10468000110788082F828609B90A7FE30260009F1C -:104690002992A368900509AA0C65A09328828564D5 -:1046A000808DB8891BE0DA94819B8065514DC0B73D -:1046B000B838C0A1C0E009AE380E0E4264E0481A16 -:1046C000E0B81FE0B92FA67EB04A6DAA0500808829 -:1046D00000908CC0A02E600C0CE811A7882F82855A -:1046E000ADEE0F4F0B2F86852B600622E4CF68B10D -:1046F0002A296015C0B2C99AD2A02D61022B640686 -:104700000CDD022D6502D10FC0E008AE387EB0B7D7 -:1047100063FFAB00226406D2A0D10F00D2A0D10F5C -:1047200000CC57DA60DB30DC4058089DC020D10F48 -:10473000DA6058092D63FFE80028221E29221D781F -:104740009902280A00C176C1C1C1D21BE0A5C124CB -:10475000AB6B6480437891402A80000CAF0C64F00E -:10476000AE0DAE0C64E0A802AF0C64F0A207AE0C74 -:1047700064E09C2FACE864F0962EACE764E0902FE8 -:10478000ACE664F08A2A800708A80B088A027B83BB -:10479000022A8DF8D8A065AFBBC0906000730000FE -:1047A0002B600C0CB811A7882E82866EE87909BAA6 -:1047B0000A2AA2A368A0048E607AE96B2A82856423 -:1047C000A0651FE08DC0E32E64069EA19FA01FE0A0 -:1047D000B92E600A92A30FEE029EA28E600FEE0227 -:1047E0009EA42F60147AFF4722A417ADBE2F8285A6 -:1047F00022E4CF2FFC182F868563FE702A6C74C0CC -:10480000B1DC90DD405807A31DE072C0C163FEC457 -:10481000D9A0DA60DB30DC40DD50C2F0C1E009FE37 -:10482000395807EAD2A0D10FDA605808EF63FEF0DA -:104830002CA4170DBE0829828522E4CF299C1829B3 -:10484000868564500C2A6C74044B0258016BD2A00C -:10485000D10FC020D10F00006C10062B221E282281 -:104860001D93107B8901C0B0C0C9C03BC1F20406D2 -:10487000401DE05BC0E2C0740747010E4E01AD2D44 -:104880009E11C0402E0A1464B06E6D084428221D8B -:104890007B81652AB0007EA13B7FA1477B51207CB4 -:1048A000A14968A91768AA1473A111C09F79A10C26 -:1048B000C18B78A107C1AE290A1E29B4007CA12BA7 -:1048C0002AB0070BAB0BDAB07DB3022ABDF8DBA030 -:1048D000CAA563FFB428B01089116987BB649FB86B -:1048E00063FFDC00647FB463FFD50000646FD0C059 -:1048F00041C1AE2AB40063FFC62B2102CEBE2A22DC -:104900001D2B221E7AB12A8C107CB1217AB901C0EC -:10491000B0C9B913E026DA2028B0002CB00703880C -:104920000A28824CC0D10B8000DBA065AFE7D240E3 -:10493000D10F8910659FD463FFF300006C1008C08D -:10494000D0C8598C302921020C0C4760000C8E30E5 -:104950000E1E5065E19E292102C0C116E015090B0B -:104960004C65B0908A300A6E5168E3026000852F72 -:10497000629E1BE00E6EF8532BB22668B0052E2205 -:10498000007BE94727629DB748CB7F97102B200C0F -:10499000B04E0CBF11A6FF29F2869E12798B4117EB -:1049A000E00507B70A2772A368700488207789306A -:1049B00029F285DF90D7906590652A210419E03CA3 -:1049C0007A9B22DA2058069F600029002C21041BC4 -:1049D000E0387CBB18DA20C0B658069AC958600186 -:1049E0004CC09063FFCCDA2058087F600006DA20C4 -:1049F000C0B658087D655135DC40DB308D30DA209B -:104A00000D6D515806F2C0D0D3A064A12029210217 -:104A1000C05184A18CA00404470C0C4763FF3E00E6 -:104A2000C09C8831DBD008F850089B3828210498B6 -:104A3000116E8823282066AC8C0C0C472C24667CD5 -:104A4000BB159F139E148A108B115807028E148F6A -:104A500013C0D02D24668A30C092C1C81BDFEC7F02 -:104A6000A6099BF099F12CF40827FC106550A4B816 -:104A70003ADF70C051C08007583808084264806728 -:104A800018DFC819DFC929867E6A420AD30F6DE98B -:104A90000500A08800F08CC0A08930B4E37F962880 -:104AA000C0F207E90B2C94089B909F912F200C12C9 -:104AB000DFC80CF811A688298285A2FF2DF4CFD279 -:104AC000A009330B238685D10F22200C891218DF11 -:104AD000C00C2B11A6BBA8222D24CF2CB285D2A0AE -:104AE0000C990B29B685D10FC087C0900A59387927 -:104AF000809663FF8ADB30DA20C0C1C0D05BFF56EE -:104B0000292102C0D02A9CFE65AE4D2D2502C09001 -:104B100063FE45009E142A2C74C0B1DC70DD405841 -:104B200006DD8E14C0D01BDFB9C1C863FF6AC02088 -:104B3000D10F00006C100628210216DF9D08084CDA -:104B400065821929629E6F980260022019DF9829F8 -:104B500092266890078A2009AA0C65A20F27629DF9 -:104B6000C0CC6472072B21048E31C0A0DDA00EFEE4 -:104B7000500ECD386EB8102C2066B1CC0C0C472CE2 -:104B800024667CDB026001EFC0C12930081BDF8A8C -:104B900064909C2F0AFFC0D3B09E64E10268921318 -:104BA0006450882A2C74044B025800930AA202060F -:104BB000000000002B200C2721040CBC11A6CC29DE -:104BC000C286280A087983026001B919DF7A09B917 -:104BD0000A2992A36890082E220009EE0C65E1A430 -:104BE0002EC28564E19E26200713DF836E7B026060 -:104BF000019A17DF7A1FDF8319DFB0C0D228200A9D -:104C000093E09DE1A9690F880298E22F90802A9491 -:104C100080B1FF07FF029FE32EC2851FDF6D0EDE0E -:104C20000BAFBF2AF4CF2EC685655F76C020D10FAB -:104C30002830102930112E301300993200ED3264E3 -:104C400080EE2A30141FDF9D00AA3278EF050F9EF8 -:104C5000092DE47F1EDF9B66A0050F98092A84803A -:104C6000B4A718DF98C76F009104AE9EDDE000AFD7 -:104C70001A00C31A6EE1052DB2000DED0C1EDF9275 -:104C800008D81C063303AE882A848B2EB02E2784C6 -:104C90008C03EE010FEE022EB42E58018F63FEFF3F -:104CA0002931082925042830142E3109B088648060 -:104CB000A32E240AC0812E30162CB4232E240BB42C -:104CC000EF2F240C8C378B36292504DEB0DFC00C87 -:104CD0008F390B8E390FEE0264EEC4089F1101C4A8 -:104CE000048D380CB81800C4040CBE1800EE110E68 -:104CF000DD02C0E30EFF021EDF669F719E701EDFA5 -:104D0000658F2098739D7405FF110BCD53C180985A -:104D1000750FDD020EDD029D721EDF242A24662F30 -:104D2000629D2AE4A22FFC182F669D63FE7100008D -:104D3000002F30121BDF6600FA3278FF050B980B4C -:104D40002A847F66D0050B9A0B2DA4802A3011008F -:104D5000AA3263FF442F240A9E2B63FF56CC57DAF6 -:104D600020DB30DC4058070EC020D10F00DA20C015 -:104D7000B658079D63FFE500DA70580636C0A02AD2 -:104D8000246663FE02DA2058079863FFCFB16928D2 -:104D9000200A8620090947991129240798107F8144 -:104DA0002693E027E50A9AE388109DE119DF428DFA -:104DB00011096F029FE42DE416098802C0D398E21E -:104DC0002A240763FE5100001DDF0B0868118F11B4 -:104DD000892B93E008FF02C08F9FE50D990299E2AD -:104DE000047F11C0D49DE108FF029FE463FFD0005F -:104DF0006C1004C020D10F006C100485210D3811F7 -:104E000014DEE98622A42408660C962205330B934F -:104E100021743B13C862D230D10FC030BC29992114 -:104E200099209322D230D10F233DF8932163FFE3E1 -:104E30006C100AD620941817DEDED930B8389819CD -:104E40009914655252C0E1D2E02E61021DDEDB0EE4 -:104E50000E4C65E1628F308E190F6F512FFCFD658E -:104E6000F1558EE129D0230E8F5077E66B8F181EF7 -:104E7000DF18B0FF0FF4110F1F146590CE18DF1567 -:104E80008C60A8CCC0B119DEC928600B09CC0B0D11 -:104E9000880929811C28811A2A0A0009880C08BA65 -:104EA000381BDF0B0CA90A2992947B9B0260008CB3 -:104EB0002B600C94160CBD11A7DD29D286B8487959 -:104EC00083026000D219DEBB09B80A2882A39817B2 -:104ED0006880026000A36000A51ADEFF84180AEE55 -:104EE00001CA981BDEB28C192BB0008CC06EB313B4 -:104EF0001DDEAF0C1C520DCC0B2DC295C0A17EDB6C -:104F0000AE6000380C0C5360000900000018DEF1A0 -:104F10008C60A8CCC0B119DEA528600B09CC0B0DA4 -:104F2000880929811C28811A2A0A0009880C08BAD4 -:104F3000380CA90A2992947E930263FF72DA60C04A -:104F4000BA58072964507360026600001ADE988C14 -:104F5000192AA0008CC06EA31A18DE940C1C5208EB -:104F6000CC0B18DEDB2BC295C0A178B30263FF3FE8 -:104F700063FFC9000C0C5363FF09896078991829F5 -:104F8000D285C9922B729E1DDE896EB8232DD22642 -:104F9000991369D00B60000DDA6058071360001791 -:104FA0000088607D890A9A1A29729D9C129915CFF2 -:104FB00095DA60C0B658070C6551F58D148C18DB76 -:104FC000D08DD0066A020D6D51580580D3A09A1479 -:104FD00064A1DD82A085A1B8AF9F19050547020233 -:104FE000479518C05163FE602B6104C08C8931C0A5 -:104FF000A009F950098A386EB81F2C6066A2CC0C43 -:105000000C472C64667CAB119F119E1B8A155805BA -:10501000918E1B8F11C0A02A64669F1164F0E12954 -:1050200012032812096DF9172F810300908DAEFE2F -:105030000080889F9200908C008088B89900908CA6 -:1050400065514E8A10851A8B301FDE6B88122960DD -:105050000708580A2C82942D61040ECC0C2C8694DF -:105060006FDB3C1CDE95AC9C29C0800B5D50A29987 -:1050700009094729C48065D0DA2E600CC0D01FDE34 -:10508000540CE811AFEEA7882282852DE4CF0242AE -:105090000B228685D2A0D10F8E300E0E4763FDA65F -:1050A000A29C0C0C472C64077AB6CD8B602E600A4C -:1050B000280AFF08E80C64810E18DE7E831682132E -:1050C000B33902330B2C34162D350AC02392319F8D -:1050D00030C020923308B20208E80292349832C0FD -:1050E000802864072B600CD2A01CDE390CBE11A7EF -:1050F000EE2DE285ACBB28B4CF0D9D0B2DE685D1FE -:105100000F8B1888138D30B88C0D8F470D4950B414 -:10511000990499100D0D5F04DD1009FF029F800DA9 -:10512000BB029B8165508D851AB83AC0F1C0800CD6 -:10513000F83808084264806B1BDE1A19DE1B29B69A -:105140007E8D18B0DD6DDA0500A08800C08CC0A08F -:1051500063FEF30082138B161DDE2B28600AC0E06D -:105160002EC4800D880202B20B99239F20C0D298D2 -:10517000229D2122600CB2BB0C2D11A7DD28D28507 -:1051800008BB0B18DE132BD685A8222E24CFD2A065 -:10519000D10F9E1B851A2A6C748B185BFF178E1B10 -:1051A00063FEA300C087C0900AF93879809263FF3C -:1051B00086C020D10F9E1B2A6C74C0B18D18580573 -:1051C000358E1B851A63FE7E886B8213891608BE96 -:1051D000110ECE0202920B9E25B4991EDE069F2070 -:1051E0000E88029822C0EF04D8110E88029824C0BD -:1051F000E49E21C080D2A02B600C2864071CDDF443 -:105200000CBE11A7EE2DE285ACBB28B4CF0D9D0BD3 -:105210002DE685D10F0000006C1004C020D10F00D6 -:105220006C10048633C071C030600001B1330031AE -:105230000400741A0462017460F1D10F6C1004024E -:105240002A02033B025BFFF61CDDDC1BDE24C79F4A -:1052500088B009A903098A019AB079801EC0F00FAD -:10526000E4311DDDD30002002BD2821EDE1D2AC1D7 -:10527000020EBB022BD6820AE431D10F28C102C133 -:105280009009880208084F28C50208E431D10F00B0 -:105290006C1004C0C00CE43112DDC81ADDC5000278 -:1052A0000029A28218DE111BDE0F2621020B9901B4 -:1052B00008660129A68226250206E43114DE0C15B3 -:1052C000DE07236A902326128550242611252613F3 -:1052D000222C40D10F0000006C1008D6102B0A645D -:1052E000291AB41ADDB20D23111CDDB30F2511B834 -:1052F0001898130E551118DDFEAC55A838AA332C9A -:1053000080FF2A80FEA933288D0129800108AA1177 -:105310002880000CAA0208881109880208AA1C2803 -:105320008C0828160458084C14DDA40AA70224414E -:10533000162A30802B120407AA28580847B1338B4D -:1053400013B4559A6004AC28B4662C56277B69E0E8 -:1053500016DDDB9412C050C0D017DD979D15D370B9 -:10536000D4102F60802E60829F169E178816728937 -:105370001A8D128C402A607F0DCC282B3A200CAA63 -:1053800028580835C0B10ABE372E35408F1772F93C -:105390001A8D128C402A60810DCC282B3A200CAA41 -:1053A0002858082DC0B10ABE372E3542B233B44456 -:1053B000B1556952B6B466C0508F15B877D370B284 -:1053C000FF9F156EF899D10F6C1004C021D10F000A -:1053D0006C1004270A001CDD761FDD871EDD8A1D88 -:1053E000DD731ADDB51BDDC3C02824B0006D2A753E -:1053F000AA48288080C09164806100410415DD6E58 -:10540000C03125502E00361A0655010595390C5627 -:10541000110C66082962966E974D0D590A2992243F -:1054200068900812DDA702420872993B2362951228 -:10543000DD6BCB349F300282020E4402C092993160 -:1054400094329233AD52246295C090244C1024665D -:105450009524B0002924A0AA42292480B177B14420 -:1054600004044224B400D10FD10FD10F6C10041AE0 -:10547000DD4F2AA00058021C5BFFD5022A02033B25 -:10548000025BFFD11BDD4DC9A12CB102C0D40DCCF4 -:10549000020C0C4F2CB5020CE431D10FC0A00AE471 -:1054A0003118DD430002002F828219DD562EB10231 -:1054B00009FF022F86820EE431D10F006C1004C068 -:1054C0002002E43114DD3D16DD3A00020022628242 -:1054D000234102732F0603E431C020D10F19DD8769 -:1054E0001ADD862841020A2A010988012A668228D3 -:1054F000450208E43115DD7D12DD8225461DD10F00 -:105500006C1004292006289CF96480A02A9CFD6563 -:10551000A0968A288D262F0A087AD9042B221FC824 -:10552000BD2C206464C0812E22090EAE0C66E0788A -:105530002B200C1EDD1F0CBC11AECC28C28619DD41 -:105540001D78F3026000AD09B90A2992A36890089A -:105550002E220009EE0C65E09B29C2851FDD276421 -:1055600090929F90C0E41FDD349E9128200AC0E0F5 -:105570009E930F8802989288200F880298942F207B -:10558000079A979D962F950A2E24072820062920F2 -:105590006468833328C28512DD0E288C20A2B22EC7 -:1055A00024CF28C685C020D10FC020D10F2A206A61 -:1055B0000111020A2A4165AF52DA20C0B05805D164 -:1055C00064AFE5C021D10F00649FC81FDCFB2D2014 -:1055D000168FF209DD0C00F10400DD1AADAD9D2936 -:1055E00012DCFC28C285A2B22E24CF288C2028C62B -:1055F00085C020D10FC021D10F0000006C100426FF -:105600000A001BDD4015DCEC28206517DCE9288C3E -:10561000FE6480940C4D110DBD082CD2F52BD2F4F4 -:105620002ED2F77CB13DB4BB2BD6F47BE9052BD24F -:10563000F62BD6F47CB92C2AD2F62AD6F52AD6F443 -:1056400006E4310002002872822AFAFF0041042990 -:105650000A012F510200991A0A9903098801287634 -:10566000820FE4312624652BD2F48E5A2CD2F5B069 -:10567000EE9E5A7BCB1629D2F62FD2F70CB80C0926 -:10568000FF0C08FF0C0F2F14C8F96000320BCA0C76 -:105690000A2A14CEA92B5102C0C20CBB020B0B4F1D -:1056A0002B55020BE431D10F00DB30DA205BFF9485 -:1056B0001BDD1564AF5D0C4D11ADBD63FFA800008F -:1056C00006E4310002002F728218DCD42E51020849 -:1056D000FF022F76820EE431D10F00006C1004C05F -:1056E0003003E43116DCB315DCB40002002462821E -:1056F00074472118DD05875A084801286682CD7352 -:1057000019DD030C2A11AA9922928329928472919D -:10571000038220CC292B51020BE431C020D10F0091 -:105720001FDCFC2E51020FEE012E55020EE431B0AB -:105730002DB17C9C5A12DCF708DD112D5619D10FC2 -:105740006C10061BDC9A1EDC9C22B0001ADCF36F86 -:1057500023721DDCDAC04818DCF21FDCF0DC10D547 -:10576000C083F000808600508A6D4A4F0F35110DBE -:1057700034092440800B560A296294B1330E55092E -:105780002251400F44110C440A874009A80C02889A -:105790003622514107883608770CA89929669497D4 -:1057A00040296295874109A80C0288360788360887 -:1057B000770CA8992966959741030342B1380808E8 -:1057C0004298F0D10F1CDCD713DCD827B00023326D -:1057D000B5647057C091C0D016DCD615DCD4C0407B -:1057E0002AC00003884328C4006D793C004104B1FD -:1057F0004400971A7780148E502FB2952DB695AF2E -:10580000EE2EED2006EE369E5060001877A009833C -:10581000509D5023B69560000223B295223D20068C -:10582000223622B695B455B8BBD10F000388432861 -:10583000C400D10F6C1004C04004E43115DCBE007C -:105840000200885013DCBDCB815BFFBD1CDCBC0CAF -:105850002D11ADCC2BC2822AC28394507BAB142E67 -:10586000C28429C2850ABD0C0E990C0D990C092918 -:10587000146000050BA90C092914993015DC4F2A76 -:1058800051020AE4312A2CFC58004B2B32000AA2A8 -:10589000022BBCFF9B30CCB6C8A4D2A0D10F000015 -:1058A00004E4311EDC430002002DE2822FBAFF2CFB -:1058B00051020FDD012DE6820CE431D10F00000012 -:1058C0006C1004D10F0000006C1004C020D10F0038 -:1058D0006C100413DC9BC0D103230923318DC0A0BD -:1058E0006F340260008D19DC321BDC3317DC940C42 -:1058F0002811A8772672832572822CFAFF765147E9 -:1059000088502E7285255C0425768275E9052572FE -:10591000842576827659292E72842E76822E76837D -:105920000AE4310002002392820021042FB1020018 -:10593000D61A0C66030633012396820FE4312672D1 -:105940008325728260000200D8A07659220AE431D1 -:1059500000020023928200210400D21A2FB1020C0F -:1059600022030232012296820FE431D280D10F004D -:10597000D280D10FC020D10F6C1004DB30862015EF -:10598000DC0B280A00282502DA2028B0002CB007FA -:1059900005880A28824C2D0A010B8000DBA065AF28 -:1059A000E61ADC040A4A0A29A2A3C7BF769101D1EC -:1059B0000F2BA6A3D10F00006C1004C0D1C7CF1BC2 -:1059C000DBFE19DBFB17DBF90C2811A87786758540 -:1059D00074C0A076516288508E77B455957475E97D -:1059E00003857695747659278F769F759F740AE4A0 -:1059F00031000200239282B42E2FB10200E1040094 -:105A0000D61A0C66030633012396820FE43186759D -:105A100083747639280AE4310002002E9282B4227F -:105A200000210424B10200DF1A0CFF030FEE012E47 -:105A3000968204E431D280D10FD8A07651D6D2809C -:105A4000D10F00006C1004290A801EDC001FDC004E -:105A50001CDBD80C2B11ACBB2C2CFC2DB2850FCC35 -:105A6000029ED19CD0C051C07013DBFC14DBFB182C -:105A7000DBF92AB285A82804240A234691A986B80E -:105A8000AA2AB685A98827849F25649FD10F000084 -:105A90006C100419DC2C0C2A11A9A98990C48479F2 -:105AA0008B761BDC1AABAC2AC2832CC2847AC16809 -:105AB0008AA02BBC30D3A064A05E0B2B0A2CB2A30F -:105AC00019DBE568C0071DDC20D30F7DC94AA92971 -:105AD000299D0129901F68913270A603D3A0CA9E08 -:105AE000689210C7AF2AB6A32A2CFC5BFFB3D23052 -:105AF000D10F000013DBC503A3018C311DDBB60CF5 -:105B00008C140DCC012CB6A363FFDC00C020D10F98 -:105B1000DA205BFFCCC020D10FC020D10F000000E5 -:105B20006C1004DB30C0D019DBA1DA202830002251 -:105B3000300708481209880A28824CDC200B8000B4 -:105B40001BDB9C0C4A11ABAA29A28409290B29A6AC -:105B500084D10F006C1004C04118DB9517DB970C43 -:105B60002611A727277030A866256286007104A336 -:105B70005500441A75414822628415DBB802320B85 -:105B8000C922882117DB940884140744017549054C -:105B9000C834C020D10FD10F0809471DDBEBC0B2BC -:105BA0008E201FDB820E0E43AFEC2BC4A00FEE0A3B -:105BB0002DE6242A6284C0200A990B296684D10F1D -:105BC000C020D10F6C1004DB30C0D018DB78DA2095 -:105BD00025300022300708580A28824CDC200B8030 -:105BE000008931709E121BDB720C4A11ABAA29A2EC -:105BF0008409290B29A684D10F09C95268532600AC -:105C0000910418DB6DC0A12F811200AA1A0AFF02AD -:105C10002F85121EDB670C4D11AEDD2CD2840C2CAF -:105C20000B2CD684D10FC0811FDB64B89A0A0A47B7 -:105C30002EF11200A10400881A08EE022EF5121DA2 -:105C4000DB5C0C4C11ADCC2BC2840B2B0B2BC68414 -:105C5000D10F00006C1004DB30C0D019DB54DA2007 -:105C600028300022300709880A28824CDC200B806B -:105C7000001CDB4F0C4B11ACBB2AB2840A2A0B2A46 -:105C8000B684D10F6C1004C04118DB4916DB4B0CF5 -:105C90002711A626266030A872252286006104A35B -:105CA0005500441A75410822228402320BD10F009C -:105CB000C020D10F6C100415DBA502491429561120 -:105CC0002452120208430F8811C073008104003669 -:105CD0001A008104C78F00771A087703074401066A -:105CE0004402245612D10F006C10066E230260008D -:105CF000AC6420A7C0A0851013DB7E16DB94C040E7 -:105D0000A6AA2BA2AE0B194164906668915D6892B9 -:105D10005268933C2AA2AA283C7F288C7F0A0A4D0D -:105D20002980012880002AACF208881109880275B0 -:105D300089462B3D0129B0002BB0010899110B9920 -:105D4000027A9934B8332A2A00B1447249B160000A -:105D50004A7FBF0715DB7F63FFB90000253AE86380 -:105D6000FFB10000253AE863FFA90000250A64633B -:105D7000FFA1C05A63FF9C0000705F082534FF0537 -:105D80008C142C34FE70AF0B0A8D142E3D012AE4C6 -:105D9000012DE400DA405BFD5063FFA7D10FD10F66 -:105DA0006C10041ADB0519DB021CDB6A1BDB6BC001 -:105DB00080C07160000D00000022A430B1AA299CAF -:105DC000107B915F26928679C2156E6262C0206D4B -:105DD000080AB12200210400741A764BDB63FFEE3F -:105DE0002292850D6311032514645FCFD650032DD5 -:105DF000436DD9039820B4220644146D492298209B -:105E000098219822982398249825982698279828AE -:105E10009829982A982B982C982D982E982F222CD8 -:105E20004063FF971EDAE327E68027E681D10F0063 -:105E3000C02063FF830000006C1004C062C04112E8 -:105E4000DADE1ADADA13DB452AA00023322D19DB59 -:105E50003F2BACFE2992AE6EA30260008E090E406D -:105E60002D1AC2C2CD0EDC392C251664B0895BFF19 -:105E70009E15DB3B1ADAE52B3AE80A3A015805761B -:105E80002B21160ABB28D3A02B560058058D8B500A -:105E90000ABB082A0A0058058C15DB322D21022C7A -:105EA0003AE80C3C2804DD022D25029C505805845C -:105EB0008B50AABBC0A15805841CDB2B2D21020CE2 -:105EC0003C2806DD0213DB292D25029C3058057C79 -:105ED0008B30AABBC0A258057C2A2102C0B40BAAF1 -:105EE000020A0A4F2A2502580590D10F242423C301 -:105EF000CC2C251663FF760018DB211CDB1D19DB7B -:105F00001E1BDB1C17DAF085202E0AFD1FDB1D2D62 -:105F1000202E24F47A24F47E24F4820EDD0124F46D -:105F2000862E0AF707552806DD02C0750EDD01052D -:105F30000506AB5BA959C0E8AC5C24C4AB0EDD021E -:105F400027C4AC2E0ADFA85527B4EC0EDD0124B41B -:105F5000EBC2E027942C0EDD0224942B2E0A800D38 -:105F60000D4627546C24546B0EDD022D242E63FE47 -:105F7000FC0000006C10042A0A302B0A035BFF4D62 -:105F800012DAF3C390292616C3A1C0B3C08A28260B -:105F9000175BFF48C03CC3B12B26161ADA872AA02C -:105FA0002023261764A079C3A2C0B15BFF42C3A21D -:105FB000C0B15BFF40C3C22C2616C2AFC0B12326BE -:105FC000175BFF3CC28F282616C0FE2F2617C2E2A1 -:105FD0002E26162A0AA1C0B1C0D82D26175BFF3580 -:105FE0002A0AA12A2616C3A6C0B3C1922926175B86 -:105FF000FF31C3C62C2616C1B32A0AA22B2617C00E -:10600000B35BFF2C290AA2292616C185282617C2B0 -:10601000FB2F2616C0E72E26171DDADA2D2610D103 -:106020000FC3A2C0B35BFF2363FF82006C10041C8C -:10603000DAA41BDA9118DAD417DAD516DAD515DA1C -:10604000D5C0E0C0D414DAA01FDA5CC0288FF06D90 -:106050002A36DAC0D9C07C5B020FC90C1CDA9A0C54 -:106060009C28A8C3A6C22A36802A2584A4C2A7CC0D -:106070002D248C2B248A2B24872E248BB1BB2E36E7 -:106080009F2C369E2C369DB1AC1CDA7B1BDAC3C02C -:10609000286D2A33DAC0D9C07C5B020FC90C1CDA28 -:1060A000890C9C28A8C3A6C22A36802B2584A4C2AA -:1060B000B1BBA7CC2D248C2E248B2A248A2E369F6C -:1060C0002C369E2C369DB1ACC07919DA791BDAB525 -:1060D00013DAB31ADAB318DAB414DA7A16DAB404C3 -:1060E000F42812DAB304660C040506A252A858AAD2 -:1060F0005AA3539B3029A50027848AC091C0A52AA2 -:10610000848C29848B17DAAC18DAABA75726361D96 -:1061100026361E2E361F16DAA913DAA9A655043321 -:106120000C2826C82E75002D54AC2E54AB2E54AA24 -:106130002326E62326E52E26E7D10F006C10061352 -:10614000DA8717DA8224723D2232937F2F0B6D0893 -:10615000052832937F8F0263FFF3C0C4C0B01ADA00 -:1061600016C051D94004593929A4206E44020BB5F8 -:1061700002C3281EDA11DDB025E422052D392DE4F5 -:1061800021C0501EDA9019DA8018DA8016DA821DE2 -:10619000DA8E94102A724517DA4C6DA94BD450B39D -:1061A000557A5B17DF50756B071FDA038FF00F5FAF -:1061B0000C12DA4402F228AE2222D681D54013DA3C -:1061C00041746B0715D9FD855005450C035328B163 -:1061D00045A73FA832A93322369D22369E24368019 -:1061E0002B369F2BF48B2CF48C14DA5C24424DC09C -:1061F00030041414C84C6D0806B133041414C8429A -:1062000063FFF20015D9EAC4400031041AD9EBC08B -:10621000D193A200DD1AC138B0DD9DA318DA502B4E -:10622000824D29824E29A51C2882537A871E2C5420 -:10623000008E106FE45D12D9E02F211D23211C2F49 -:10624000251B04330C23251C23251AD10FC06218EB -:10625000DA3F88807E87D989102654006F94191BF5 -:10626000D9D62AB11C0A1A1404AA0C2AB51C2AB5BC -:106270001D2AB51A2AB51BD10F1BD9CF2AB11C0A6A -:106280001A1403AA0C2AB51C2AB51D2AB51A2AB558 -:106290001BD10F001CD9C92BC11D2DC11C2BC51B27 -:1062A00003DD0C2DC51C2DC51AD10F006C1006196D -:1062B000D9C214DA2612DA2915DA44C73FC0E02E13 -:1062C00056A82E56A92E56AA2E56AB23262918D9E3 -:1062D000EADB101CDA3EC0D42A42452D16019C1080 -:1062E00000B0890A880C2896005BFF942B22E318E3 -:1062F000D9B20B5B149B842A22E48B84B1AA0A5A7C -:10630000140BAA0C9A852922E509591499862F2283 -:10631000CD0F5F149F875BFF455BFF1623463BC194 -:10632000B01DD9A51CDA032AD1022C463A0BAA02C9 -:106330000A0A4F2AD50258047C5BFEBF5BFE98C058 -:1063400050C0B016D99B14D9A317DA12C0C0C73EEB -:1063500093122C262DC0306000430000007F9F0F59 -:10636000B155091914659FF4C0500AA9027FA7EF1F -:1063700018D98FDA5008580A28822C2B0A000B8073 -:1063800000005104D2A0C091C7AF00991A0A990326 -:106390009912CE33642067D3202B200795138C12DB -:1063A0002A62827CA85F18D98108580A28822CDAD0 -:1063B000500B8000D2A0643FDA8A310A8A1404AA02 -:1063C00001C8298B210B8B1404BB017BA945DDA0DF -:1063D0007A7B081DD9792DD2000DAD0CDB3019D98F -:1063E000731AD9B82812030ADA28088C021DD9F5C5 -:1063F00009880A28823C0DAA080B8000652F97D3D4 -:1064000020C0B063FF97CB53B1550050040A09195F -:1064100063FF4900DAB07B7B071AD9678AA00ABA02 -:106420000C1BD9A88C310BAB280C8A141CD9E6ACF8 -:10643000BB1CD9E504AA012BC68163FF907FA7C7C7 -:1064400063FF62006C100427221EC08008E4311B29 -:10645000D9580002002AB28219D958003104C0610B -:1064600000661A2991020A6A022AB68209E43115E5 -:10647000D9B30C3811A8532832822432842A8CFCD8 -:106480007841102921022A368297A009690229251C -:1064900002D10F002B21022C32850B6B022CCCFC7D -:1064A0002C368297C02B2502D10F00006C1004C03F -:1064B000E71DD93B1CD93D0D4911D7208B228A20DD -:1064C0000B4B0BD2A007A80C9B72288CF4C8346F1E -:1064D0008E026000A21FD933A298AF7B78B334C973 -:1064E0003DC081C0F0028F380F0F42C9FA2CD67E12 -:1064F000D5206D4A0500308800508C8870089808B7 -:1065000078B16CD2A09870D10FC0F0038F387FE0C3 -:10651000DE63FFD8027B0CAFBB0B990C643046D80E -:1065200030C0F1C05002F5380505426450792CD6D0 -:106530007E0B36122F6C100F4F366DFA05008088D7 -:1065400000208C06440CC081250A0003B208237C7D -:106550000C0385380505426450592CD67E6D4A05DA -:1065600000208800308CD2A0A798BC889870D10FEA -:10657000D2A0BC799970D10FD2302BAD08C0F1C038 -:10658000500BF538050542CB552CD67E083F14C17B -:10659000600F660C064636D30F6D6A050020880032 -:1065A000B08C827063FF2D00C05003F53875E08019 -:1065B00063FF7A00C06002863876E0A063FF9A002D -:1065C000C05003F53875E0C363FFBD006C1004D6FE -:1065D0002068520F695324DA20DB30DC405800F089 -:1065E000D2A0D10FDA20DB30DC405800ED9A242411 -:1065F000240EC02122640FC020D10F00B83BB04C44 -:106600002A2C7489242D200E2E200FA4DDB1EE2E0D -:10661000240FB0DD2D240E2890072D9003A488B000 -:1066200088B1DD2D94032894075BFFA069511DC03C -:10663000E082242A600F18D9662A240329600E8F6D -:106640002029240708FF029F209E64D10FC020D17B -:106650000F0000006C1004942319D95EC0B3083AEF -:10666000110BAA02992019D8D29A2116D8D0C0505D -:1066700028929D2564A2288C1828969DD10F000091 -:106680006C1004282066C038232406B788282466A6 -:10669000D10F00006C1006035A0C0D36110D5C1161 -:1066A000D8208B2282210CBB0C06550F9B82023214 -:1066B0000B928113D8BCD920A38F6450531CD8B837 -:1066C000C0D71BD8B9A256C0E1290A0004E938098D -:1066D000094276F34A044302C99E2BC67E6DAA0581 -:1066E00000208800308C8981A95909FA0C64A079AE -:1066F00099818A82C8ADD290D10FC06002E6387607 -:10670000D0DA63FFD4C020BC89998199809282D16C -:106710000F7F2304292DF8998165BFD963FFE50018 -:10672000028F0CA3FF0F3312931003AA0CD340CB9C -:106730009E2BC67E86106D6A0500208800308CBCBA -:1067400082290A0004F308240A010349380909428E -:10675000CA982BC67E6DAA0500208800308C0F5980 -:106760000CA989BC99998163FF87BC89998163FFD2 -:1067700080C06002E63876D0BA63FFB4C0700247CA -:106780003877D0D063FFCA006C100414D895C1527A -:10679000A424CA3028221D73811B292102CD952AE9 -:1067A000300075A912DA20033B022C30072D0A02B3 -:1067B0005801C2653FDDD10F2B300703BB0BDAB0A8 -:1067C00074B3022ABDF8D3A063FFC6006C1004297D -:1067D0002006C0706E9741292102C08F2A2014C064 -:1067E000B62B240606AA022A241479800227250241 -:1067F0002A221E2C221D7AC10EC8ABDA20DB302CD7 -:106800000A00033D025BF8146450752D21020D0D42 -:106810004CC9D3C020D10F00002E9CFB64E0822F16 -:1068200021020F0F4C65F0911AD8621CD86029A282 -:106830009EC08A798B5D2BC22668B0048D207BD9DF -:106840005229A29DC0F364904A97901DD8732E21BF -:10685000049D9608EE110FEE029E979E9118D86F38 -:10686000C0E527C4A22E24062BA29D2F21022BBCFB -:106870003008FF022F25022BA69DC020D10F00005B -:10688000002F300068F938DA20DB30DC4058004453 -:1068900063FF7700022A022B0A065800D3220A005F -:1068A000D10F655010283000688924022A02033B6A -:1068B00002DC4058003BC020D10FD270D10F000045 -:1068C0002A2C74033B02044C025BFEF863FF3B007E -:1068D000DB30DC402A2C745BFEF5C020D10F0000B9 -:1068E0006C1004C83F89268829A399992609880C29 -:1068F000080848282525CC52C020D10FDB402A2C7F -:10690000745BF93DD2A0D10F6C1004D820D730822F -:10691000220D451105220C928264207407420B134C -:10692000D821D420A383732302242DF885807451A9 -:106930004CBC82C0906D081600408800708C77397E -:1069400003D720C0918680743901D420746102631A -:10695000FFE2CA98C097C0411BD8A0C0A00B8B0C07 -:106960000B4A380A0A42C9AA1DD80E1CD80F2CD6C9 -:106970007EC140D30F6D4A0500208800308C97807F -:10698000D270D10FBC8FC0E00F4E387E90E263FF13 -:10699000D6BC8292819280C0209282D10F000000EA -:1069A0006C1006C0D71CD7FE1BD8000D4911D7208C -:1069B0002E221F28221D0E4E0BD280078A0C2E7607 -:1069C0001F2AAC80C8346FAE026000CB2F0A801A39 -:1069D000D804A29EAA7A7EA33FC93FC0E1C050025C -:1069E000E538050542CA552BC67EDB20D30F6D4A1C -:1069F0000500308800B08C2E721DAE9E0EA50C6472 -:106A00005086D2802E761DC091298403D10FC050AC -:106A100003E53875D0D363FFCD15D7F1027E0CA501 -:106A2000EE643051C0A1250A0002A538033A0205E0 -:106A300005426450922BC67E0E35129510255C10CF -:106A4000054536D30F6D5A0500A08800208CC0A1E3 -:106A5000A3E2C05023FA8003730C03A538AF73057B -:106A600005426450722BC67E851005450C6D5A0593 -:106A700000208800308CD280C0A10E9B0CAB7BAF75 -:106A8000BB2B761D2A8403D10FD280C0C1AF7D2DD0 -:106A9000761D2C8403D10F00D2302E8D08C0F1C09A -:106AA000500EF538050542CB592BC67E0A3F14C15E -:106AB000600F660C064636D30F6D6A05002088000D -:106AC000E08C22721D63FF03C061C05003653875FE -:106AD000D80263FF6263FF5CC05002A53875D0879F -:106AE00063FF8100C06003F63876D0BF63FFB90052 -:106AF0006C10042A201529201614D7AF0A990CCB44 -:106B00009D2E200B04ED092BD11C8F2809BC36AC1F -:106B1000AA0CBB0C2BD51C0A0A472A2415CAAF8B1A -:106B2000438942B0A800910400881AA8FF0FBB0255 -:106B30009B278F260FB80C783B1AC020D10F00007E -:106B4000292102C0A20A9902292502C021D10F00E1 -:106B50008B2763FFDC2BD11C0CAA0C0A0A472A24C2 -:106B600015ACBB2BD51CC9AE8B438C288F42B0AD66 -:106B700000F10400DD1AADCC0CBB029B27DA20B774 -:106B8000EB580019C021D10F9F2763FFEF000000D1 -:106B90006C100428203C64304705306000073E013B -:106BA000053EB156076539054928C77FA933030655 -:106BB00041076603B166060641A6337E871E222181 -:106BC00025291AFC732B1502380C09816000063E3A -:106BD00001023EB12406423903220AD10FD230D13C -:106BE0000FC05163FFC000006C100427221EC0803C -:106BF00008E4311DD76F0002002CD2821BD76F0032 -:106C00003104C06100661A2BB1020C6C022CD682D2 -:106C10000BE43119D7F20C3A11AA932832829780EB -:106C2000253282243284B45525368275410A2921C1 -:106C300002096902292502D10F2A21022B32830A77 -:106C40006A022B36822A2502D10F00006C1004192B -:106C5000D76327221EC08009770208E4311DD7546C -:106C60000002002CD2821BD754003104C0610066A0 -:106C70001A2BB1020C6C022CD6820BE43119D7D737 -:106C80000C3A11AA932832829780253282243284CA -:106C9000B45525368275410B2A21020A6A022A253B -:106CA00002D10F002B21022C32830B6B022C368277 -:106CB0002B2502D10F0000006C10041BD73D0C2ABD -:106CC00011ABAA29A286B438798B221BD73A19D7DF -:106CD000610B2B0A2BB2A309290868B00274B90D05 -:106CE000299D0129901F6E920822A285D10FC020F4 -:106CF000D10FC892C020D10FDA205BEF35C020D170 -:106D00000F0000006C100414D72A28429E19D727C0 -:106D10006F88026000BA2992266890078A2009AA23 -:106D20000C65A0AC2A429DC0DC64A0A42B200C19E9 -:106D3000D7210CBC11A4CC2EC28609B90A7ED3027D -:106D400060009A2992A36890078D2009DD0C65D018 -:106D50008C25C2856450862D2104C0306ED80D2C40 -:106D60002066B8CC0C0C472C246665C07B1CD79CD5 -:106D700018D7281AD71E19D72F1DD724C0E49E5123 -:106D80009D508F209357935599539A569A5408FFC4 -:106D9000021AD73A9F5288269F5A9E599D58935E51 -:106DA0009C5D935C9A5B080848058811985FC0D881 -:106DB0001FD7080CB911A499289285AFBF23F4CF2F -:106DC000288C402896858E262D24069E29C020D109 -:106DD0000FCA33DA20C0B65BFF84C72FD10FC93A80 -:106DE000DA205BFF81C72FD10FDBD05BFE1A232493 -:106DF000662B200C63FF7500C72FD10FC72FD10F53 -:106E00006C1004C85B29200668941C689607C02093 -:106E1000D10FC020D10FDA20DB30DC40DD502E0A4C -:106E2000005BFE6AD2A0D10F2E200C18D6E10CEF29 -:106E300011A8FF29F286C088798B751AD6DE0AEA76 -:106E40000A2AA2A368A0048B207AB96423F285647D -:106E5000305E1CD6E82A0A802D2068292067282168 -:106E6000040B991104881109880208DD02C09428D6 -:106E70004A1008DD0218D6E0993198308B2B9A37EA -:106E80009D340CBB029B32C0C09C359C362A2C74AE -:106E9000DB40C0D318D6CF29F285A8EE299C202C40 -:106EA000E4CF29F6852D2406DD405BFDFAD2A0D182 -:106EB0000FDA20DBE05BFF4CC020D10F6C100AD64C -:106EC000302A2006941128ACF86583872B2122C034 -:106ED000F22A21246550082AAC010A0A4F2A2524E7 -:106EE0007ABB0260037F2C21020C0C4C65C3192E67 -:106EF00022158D32C0910EDD0C65D39088381ED6D8 -:106F0000AC64836B8C37C0B8C0960CB9399914B493 -:106F10009A9A120D991199138F6718D6A7C9FB2851 -:106F200080217F83168B142C22002A200C5BFF62A9 -:106F3000D4A064A3A88F6760002800002B200C89D0 -:106F4000120CBA11AEAA2CA2861DD69A7C9B3E0DBD -:106F5000BD0A2DD2A368D00488207D893024A28563 -:106F600064436427212E07F73607F90C6F9D01D77C -:106F7000F0DA20DB70C1C42D211F5BFF0589268854 -:106F800027DDA009880C7A8B179A10600006C04094 -:106F900063FFCC0000DA208B105BFED58D1065A25C -:106FA00067C0E09E488C649C498B658A669B4A9AC0 -:106FB0004B97458F677F7302600120CD529D10DA99 -:106FC00020DB302C12015BFE768D10C051D6A08FD5 -:106FD000A7C0C08A68974D9A4C8869896A984E996B -:106FE0004F8E6A8A69AE7E77EB01B1AA9E6A9A6972 -:106FF0008B60C0A00B8E1477B701C0A1C091C08474 -:1070000093159D179516C0D025203CC03008580117 -:10701000089338C082083310085B010535400B9D8A -:107020003807DD100BAB100E19402A211F079910ED -:1070300003DD020DBB020553100933020A55112965 -:1070400021250A2A140929140499110A99020933DD -:10705000028A2B2921040BAA021BD6E208991109E6 -:1070600055020855020BAA029A40892088140899F3 -:107070001109880219D6631DD6DC09880298418B54 -:107080002A9346954783150DBB0285168D179B44A1 -:107090008A658966AACAA97C77CB01B1AA07FB0CCD -:1070A0009C669A6588268E29AD87972607EE0C0E7A -:1070B0000E482E25259B672B200C87131ED63D0CD2 -:1070C000B911AE99289285A78828968517D641C010 -:1070D00090A7BB29B4CF871863FE3C008C60C0E04A -:1070E000C091C0F0C034C0B82A210428203C08AAAE -:1070F000110B8B01038301039F380B9B39C03208AE -:10710000FF10038801089E380C881407EE100FEE5C -:107110000203880108983905BF1029211F0ABB11F5 -:1071200007881008FF020BAA0218D6350929140394 -:10713000AA022B212583200B2B1404BB1108331129 -:107140000FBB020B99028B148F2A0B3302083302F8 -:107150008B2B6470868868974D984C8769886A93F2 -:10716000419946974E984FC07077C701C0719A47B2 -:1071700018D69E0B7C100CEC0208F802984418D626 -:107180009B0CBC0208CC029C402A200C295CFEC04F -:10719000801FD6071CD60F0CAE112B2124ACAAAF32 -:1071A000EEB0BB8F132CE28528A4CFAFCC2CE685A4 -:1071B0002A22152B2524B1AA2A26156490DBC9D2D0 -:1071C0008F262E22090DFF082F26060FEE0C0E0E1D -:1071D000482E25256550E4C020D10F00C070934192 -:1071E0009F4499469A4777C70A1CD5F32CC022C002 -:1071F000810C87381CD67F0B781008E80208B8028B -:107200000C8802984063FF8000CC57DA20DB608C4A -:10721000115BFDE3292102689806689403C020D120 -:107220000F2B221EC0A029221D2A25027B9901C0F6 -:10723000B064BFE813D5DE2CB00728B000DA200315 -:10724000880A28824CC0D10B8000DBA065AFE763C1 -:10725000FFCA000068A779DA20DB30DC40DD505B34 -:10726000FEE8D2A0D10FC16DC19D29252C6000047C -:1072700029252CD6902624672F2468DA20DB308C31 -:1072800011DD502E0A805BFD51D2A0D10FC168C123 -:10729000A82A252C63FFDD000000C8DF8C268B297F -:1072A000ADCC9C260CBB0C0B0B482B25252A2C7433 -:1072B000DB602C12015BFD94D2A0D10F2A2C748BC1 -:1072C000115BF6CDD2A0D10FDA205BFE4763FF3809 -:1072D00000DA20C0B15BFE8B65AF2D63FBEDDA20D9 -:1072E0002B200C5BFE5A63FF1F00000012D6428267 -:1072F00020028257C82163FFFC12D63E03E8300407 -:10730000EE3005B13093209421952263FFFC0000FC -:1073100010D63A910092019302940311D611821073 -:1073200001EA30A21101F031C04004E4160002006D -:1073300011D6338210234A00032202921011D5FD88 -:10734000C021921004E43184038302820181000091 -:10735000D23001230000000010D62A910092019340 -:1073600002940311D600821001EA30A21101F1311A -:10737000C04004E41600020011D621821013D5A7E4 -:10738000032202921004E43184038302820181000B -:1073900000D330013300000010D61B91008101653D -:1073A000104981026510448103CF1F92019302941A -:1073B0000311D5EE821001EA30A21101F231C04072 -:1073C00004E41600020011D60D821013D58E03229C -:1073D00002921004E431840383028201C0109103FD -:1073E00091029101810000D43001430012D5BDC04B -:1073F0003028374028374428374828374C233D0168 -:107400007233ED03020063FFFC00000010D5FF9112 -:107410000092019302940311D5FD8210921011D5B0 -:10742000AF8310032202921011D5FA12D5C1921027 -:10743000C04004E41600020011D5F1821013D5A853 -:10744000032202921004E43184038302820181004A -:1074500000D53001530000006C10026E322FD62090 -:10746000056F04043F04745B2A05440C00410400CA -:10747000331A220A006D490D73630403660CB122AE -:107480000F2211031314736302222C01D10FC83B86 -:10749000D10F000073630CC021D10F000000000069 -:1074A00044495630C020D10F6C10020040046B4C90 -:1074B00007032318020219D10F020319C020D10FAC -:1074C0006C100202EA30D10F6C1002CC2503F031AF -:1074D00060000F006F220503F1316000056F230586 -:1074E00003F231000200D10F6C1002CC2502F03003 -:1074F000D10F00006F220402F130D10F6F2304027C -:10750000F230D10FC020D10F6C1002220A20230AC2 -:10751000006D280E28374028374428374828374C34 -:10752000233D01030200D10F6C100202E431D10FA0 -:107530000A0000004368656C73696F204657204459 -:10754000454255473D3020284275696C7420576587 -:1075500064204F63742020382031353A35303A3575 -:1075600030205044542032303038206F6E20636C0D -:10757000656F70617472613A2F686F6D652F666513 -:107580006C69782F772F66775F372E30292C20563D -:10759000657273696F6E2054337878203030372EDF -:1075A00030312E3030202D203130303730313030F6 -:0875B000100701006F4EF8BB4B -:00000001FF diff --git a/firmware/cxgb3/t3fw-7.4.0.bin.ihex b/firmware/cxgb3/t3fw-7.4.0.bin.ihex new file mode 100644 index 00000000000..38dda94bfa6 --- /dev/null +++ b/firmware/cxgb3/t3fw-7.4.0.bin.ihex @@ -0,0 +1,1917 @@ +:1000000060007400200380002003700000001000D6 +:1000100000002000E100028400070000E1000288E7 +:1000200000010000E0000000E00000A0010000006E +:1000300044444440E3000183200200002001E0002A +:100040002001FF101FFFD0001FFFC000E300043C91 +:100050000200000020006B741FFFC29020006BBCE8 +:100060001FFFC29420006BFC1FFFC29820006C7021 +:100070001FFFC29C200003C0C00000E43100EA3131 +:1000800000A13100A03103020002ED306E2A05000C +:10009000ED3100020002160012FFDBC03014FFDA5F +:1000A000D30FD30FD30F03431F244C107249F0D347 +:1000B0000FD30FD30F12FFD5230A00240A00D30F4A +:1000C000D30FD30F03431F244C107249F0D30FD327 +:1000D0000FD30F14FFCE03421F14FFCB03421F1296 +:1000E000FFCCC0302D37302D37342D37382D373CED +:1000F000233D017233ED00020012FFC4C0302F37E0 +:10010000002F37102F37202F3730233D017233ED6A +:1001100000020012FFBEC0302737002737102737F4 +:1001200020273730233D017233ED03020012FFB95F +:1001300013FFBA0C0200932012FFB913FFB90C028F +:1001400000932012FFB8C0319320822012FFB71312 +:10015000FFB7932012FFB715FFB316FFB6C030D715 +:100160002005660160001B00000000000000000088 +:10017000043605000200D30FD30F05330C6E3B1479 +:100180000747140704437631E604360505330C6F40 +:100190003BED00020012FFA615FFA3230A00D720A3 +:1001A000070443043E0505330C0747146F3BF00377 +:1001B000020012FFA1C03014FFA1D30FD30FD30F41 +:1001C0009340B4447249F2D30FD30FD30F14FF9B63 +:1001D000834014FF9B834012FF9B230A0014FF9A65 +:1001E000D30FD30FD30F9340B4447249F2D30FD33C +:1001F0000FD30F14FF95834012FF95C92F832084DE +:10020000218522BC22743B0F8650B4559630B433FE +:100210007433F463FFE60000653FE1655FDE12FFC3 +:100220007C230A0028374028374428374828374C91 +:10023000233D017233ED03020000020012FF7AC079 +:1002400032032E0503020012FF7813FF819320C0B2 +:1002500011014931004831010200C00014FF7E0441 +:10026000D23115FF7D945014FF7D04D33115FF7CEE +:10027000945014FF7C04D43115FF7C24560014FFE5 +:100280007B04D53115FF7B24560010FF7A03000054 +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200063FFFC000000000000000000000000006E +:100430000000000000000000000000001FFC0000A1 +:100440001FFC0000E30005C81FFC00001FFC0000AB +:10045000E30005C81FFC00001FFC0000E30005C806 +:100460001FFFC0001FFFC000E30005C81FFFC00042 +:100470001FFFC018E30005C81FFFC0181FFFC018EA +:10048000E30005E01FFFC0181FFFC290E30005E076 +:100490001FFFC2901FFFC290E30008581FFFC290C9 +:1004A0001FFFC58CE3000858200000002000016AEF +:1004B000E3000B542000018020000180E3000CC009 +:1004C0002000020020000203E3000CC02000021CF8 +:1004D00020000220E3000CC420000220200002269D +:1004E000E3000CC82000023C20000240E3000CD0D6 +:1004F0002000024020000249E3000CD42000024CFE +:1005000020000250E3000CE02000025020000259BD +:10051000E3000CE42000025C20000260E3000CF029 +:100520002000026020000269E3000CF42000026C4D +:1005300020000270E3000D0020000270200002790C +:10054000E3000D042000028C2000028CE3000D105B +:100550002000029020000293E3000D10200002AC66 +:10056000200002B0E3000D14200002D0200002F2AF +:10057000E3000D18200003B0200003B0E3000D3CA1 +:10058000200003B0200003B0E3000D3C200003B0C6 +:10059000200003B0E3000D3C200003B0200003B0B6 +:1005A000E3000D3C200003B020006D94E3000D3CFF +:1005B00020006D9420006D94E3007720000000007F +:1005C00000000000000000001FFC00001FFC0000F5 +:1005D0001FFFC5901FFFC67020006D9820006D980A +:1005E000DEFFFE000000080CDEADBEEF1FFFC2A064 +:1005F0001FFCFE001FFFC0941FFFC5C0300000009D +:10060000003FFFFF8040000010000000080FFFFFC8 +:100610001FFFC26D000FFFFF804FFFFF8000000033 +:1006200000000880B000000560500000600000007D +:1006300040000011350000004100000010000001E2 +:100640002000000000001000400000000500000035 +:1006500080000019040000000000080010000005E0 +:10066000806000007000000020000009001FF800FA +:100670008000001EA0000000F800000007FFFFFF40 +:100680000800000018000000010080014200000086 +:100690001FFFC21D1FFFC0DC000100806040000082 +:1006A0001A0000000C0000001000000A00003000DA +:1006B000600008008000001C000100008000001A9B +:1006C00080000018FC0000008000000100004000D5 +:1006D000030000008000040050000003FFFFBFFF84 +:1006E0001FFFC3D400000FFFFFFFF000000016D073 +:1006F0000000FFF7A50000001FFFC4B01FFFC4618A +:100700000001000800000B20202FFF801FFFC455B0 +:1007100000002C00FFFEFFF800FFFFFF1FFFC57861 +:1007200000002000FFFFDFFF0000FFEF01001100CD +:100730001FFFC3D21FFFC590FFFFEFFF0000FFFBAD +:100740001FFFC6301FFFBEA0FFFFF7FF1FFFC064E3 +:100750000000FFFD1FFFC6200001FBD01FFFC5B03A +:100760001FFFC6601FFFC591E0FFFE001FFFC5A071 +:10077000000080001FFFC53C1FFFC5B41FFFC068FD +:100780001FFFC4D01FFCFFD8000100817FFFFFFFC7 +:10079000E1000600000027101FFCFE301FFCFE7069 +:1007A000E10002001FFFC5381FFFC5500003D090B5 +:1007B0001FFFC5642B5063802B5079802B50908095 +:1007C0002B50A6801FFFC4690100110F202FFE00CF +:1007D00020300080202FFF000000FFFF0001FFF805 +:1007E0002B50B2002B50B208000100102B50B180EA +:1007F0002B50B2802B50BA00000100112B50BD28A5 +:100800002B50BC802B50BDA020300000DFFFFE002D +:100810005000000200C0000002000000FFFFF7F4DB +:100820001FFFC06C000FF800044000000010000023 +:100830000C4000001C400000E00000A01FFFC5406D +:100840001FFD00081FFFC5541FFFC5681FFFC57CA3 +:10085000E1000690E10006EC00000000000000004E +:100860000000000000000000010000000000000087 +:100870000000000000000000201000402010004098 +:100880002010004020140080200C0000200C0000EC +:10089000200C000020100040201400802014008054 +:1008A00020140080201800C0201C0100201C010022 +:1008B000201C010020200140201800C0201800C08A +:1008C000201800C0201C0100201800C0201800C003 +:1008D000201800C0201C01002020014020200140E1 +:1008E00020200140202009402020094020200940EC +:1008F0002020094020240980FFFFFFFFFFFFFFFFAA +:10090000FFFFFFFF000000000000000000000000EB +:100910000000000000000000200054902000536000 +:1009200020005490200054902000529C2000529CA3 +:100930002000529C200050DC200050DC200050D4CD +:100940002000504020004EE820004CC820004A9C67 +:100950000000000000000000200054602000532C24 +:10096000200053D0200053D0200051842000518417 +:10097000200051842000518420005184200050CC5C +:100980002000518420004E0820004C7820004A4866 +:10099000000000000000000020000BE820003A30BA +:1009A000200004C02000463C20000BE0200041480D +:1009B000200003F0200045FC20004A2420003E5483 +:1009C00020003D70200039AC2000383C200035ACC0 +:1009D0002000310C20003BCC20002D6C2000280092 +:1009E000200067182000238C2000206C2000201895 +:1009F00020001D04200018182000154820000E2C8F +:100A000020000C2C2000110C200012F82000434084 +:100A100020003E0820000BF0200004C00000000071 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A900000000000000000000000000032640000C0 +:100AA0000000000032640000640064006400640020 +:100AB00064006400640064000000000000000000A6 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000001000000000000000000000000000D5 +:100B100000000000000000000000100000000000C5 +:100B200000000000000000000000000000432380DF +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B500000000000005C94015D94025E94035F94C9 +:100B60000043000000000000000000000000000042 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B900000000000005C90015D90025E90035F9099 +:100BA00000530000000000000000000000000000F2 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD00000000000009C94001D90019D94029E94D2 +:100BE000039F94040894050994060A94070B940043 +:100BF00043000000000000000000000000000000B2 +:100C000000000000000000000000000000000000E4 +:100C100000000000009C90019D90029E90071D9096 +:100C2000039F90047890057990067A90077B900056 +:100C30005300000000000000000000000000000061 +:100C400000000000000000000000000000000000A4 +:100C50000000000000DC94001D9001DD9402DE9491 +:100C600003DF94040494050594060694070794088A +:100C700008940909940A0A940B0B9400430000009D +:100C80000000000000000000000000000000000064 +:100C90000000000000DC9001DD9002DE900B1D9052 +:100CA00003DF9004B49005B59006B69007B790089E +:100CB000B89009B9900ABA900BBB9000530000009D +:100CC00063FFFC0020006B5010FFFF0A00000000D3 +:100CD00020006B7400D23110FFFE0A0000000000FB +:100CE00020006BBC00D33110FFFE0A0000000000A2 +:100CF00020006BFC00D43110FFFE0A000000000051 +:100D000020006C7000D53110FFFE0A0000000000CA +:100D100063FFFC00E00000A012FFF7822002825770 +:100D2000C82163FFFC12FFF303E83004EE3005C076 +:100D30003093209421952263FFFC00001FFFD00018 +:100D4000000400201FFFC5901FFFC670200A00117D +:100D5000FFFB13FFFB03E63101020016FFFA17FF4A +:100D6000FAD30F776B069060B4667763F85415B5C5 +:100D7000541A610F140063FFF90000006C1004C0E6 +:100D800020D10F006C1004C0C71AEF06D830BC2B5E +:100D9000D72085720D4211837105450B9572023380 +:100DA0000C2376017B3B04233D089371A32D12EEA7 +:100DB000FE19EEFEA2767D632C2E0A000882022820 +:100DC0000A01038E380E0E42C8EE29A67E6D4A0532 +:100DD00000208800308C8271D10FC0F0028F387FE4 +:100DE000C0EA63FFE400C0F1C050037E0CA2EE0E27 +:100DF0003D1208820203F538050542CB5729A67E2D +:100E00002FDC100F4F366DFA0500208800308CBCA7 +:100E100075C03008E208280A01058338030342C977 +:100E20003E29A67E0D480CD30F6D8A050020880050 +:100E3000B08C8271D10FC05008F53875C0C163FF06 +:100E4000BBC06002863876C0DA63FFD46C1012161D +:100E5000EED8C1F9C1E8C1C72B221E28221DC0D07F +:100E60007B81312920060BB702299CFA655008289E +:100E70002072288CFF28247264915C2AB0000CA890 +:100E80000C6481670EA90C6492B37FA13769AC2F03 +:100E90006000340000282006D7D0288CFACC572ACE +:100EA00020722AACFF2A24726481352AD0000CA952 +:100EB0000C6491640EAC0C64C31B7FA10768AC0783 +:100EC000C020D10F002D25028A32C0900A6E5065D5 +:100ED000E5B5292467090F4765F5B12C200C1FEEF5 +:100EE000B50CCE11AFEE29E286B4487983026005D5 +:100EF0008219EEB109C90A2992A36890078F2009C7 +:100F0000FF0C65F56E2FE28564F56865559628221D +:100F10001D7B8105D9B060000200C0908B9417EE54 +:100F2000A70B881487740B0B47A87718EEA509BB8D +:100F30001008770297F018EEA317EEA408A8010B8B +:100F400088020747021BEEA097F10B880298F22750 +:100F500090232B902204781006BB1007471208BB81 +:100F6000022890210777100C88100788020B88024E +:100F700017EE988B3307BB0187340B880298F397E1 +:100F80009997F48B9587399BF588968B3898F688D6 +:100F90009797F99BF898F717EE8F28E28507C7080F +:100FA0002D74CF08480B28E68565550F2B221E2887 +:100FB000221D7B89022B0A0064BF042CB00728B0D5 +:100FC00000DA2006880A28824CC0D10B8000DBA002 +:100FD00065AFE763FEE90000292072659E9C60040E +:100FE000E72A207265AEC36004DE00002EB0032C39 +:100FF0002067D4E065C1058A328C330AFF500C4566 +:1010000054BC5564F4EB19EE74882A09A9010988C7 +:101010000C64821FC0926000DD2ED0032A2067D4AA +:10102000E065A0D88A328B330AFC500B4554BC557E +:1010300064C4BE19EE69882A09A9017989D50BEA29 +:101040005064A4E30CEE11C0F02F16132E16168A6E +:10105000E78CE82A16128EE9DFC0AAEA7EAB01B15E +:10106000CF0BA8506583468837DBC0AE89991E78C0 +:101070009B022BCC012B161B29120E2B0A002916C2 +:101080001A7FC3077FC9027EAB01C0B165B49D8BD7 +:10109000352F0A002A0A007AC30564C3CB2F0A0140 +:1010A00065F4892B12162B1619005104C0C100CC0F +:1010B0001A2CCCFF2C16170CFC132C16182B121AFA +:1010C0002A121BDC50581974C0D0C0902E5CF42C2E +:1010D00012172812182F121B2A121A08FF010CAA25 +:1010E000018834074C0AAB8B2812192BC6162F86A1 +:1010F000082A86092E74102924672E70038975B179 +:10110000EA2A7403B09909490C659DB32B20672D19 +:10111000250265B3FA2B221E2C221D7BC901C0B00B +:1011200064BD9C2CB00728B000DA2006880A28820B +:101130004CC0D10B8000DBA065AFE763FD8189BAAD +:10114000B19965909788341CEE2598BA8F331EEEBE +:101150001E0F4F542FB42C8D2A8A320EDD020CAC98 +:10116000017DC9660A49516F92608A3375A65B2C6E +:10117000B0130AED510DCD010D0D410C0C417DC98F +:10118000492EB012B0EE65E3C6C0D08E378CB88A57 +:10119000368FB97CA3077AC9027EFB01C0D1CED9B4 +:1011A00088350AAD020E8E0878EB022DAC0189B7A6 +:1011B000DAC0AF9B79BB01B1CADCB0C0B07DA30778 +:1011C0007AD9027CEB01C0B164B161C09129246776 +:1011D000C020D10F00008ADAB1AA64A0C02C206719 +:1011E0002D250265C3111DEDF88A321EEDFD0DADF2 +:1011F000010EDD0C65D28A0A4E516FE20260028157 +:10120000C090292467090F4765F2F828221D7B89C1 +:10121000022B0A0064BCA82CB00728B000DA200614 +:10122000880A28824CC0D10B8000DBA065AFE76341 +:10123000FC8D00000CE9506492ED0CEF11C0802889 +:101240001611AFBF2F16198EF88BF7DAE08FF92B36 +:101250001610ABFB7FBB01B1EA0CA8506580D688A5 +:1012600037DCE0AF89991C789B022CEC012C161B13 +:1012700029120C2C0A0029161A7AE3077AE9027F50 +:10128000BB01C0C165C2A58B352C0A002A0A007AB1 +:10129000E30564E1CA2C0A0164CE0D60028E883435 +:1012A0001BEDCF98DA8F331EEDC80F4F542FD42C7F +:1012B0008C2A8A320ECC020BAB010CBB0C65BF0A28 +:1012C0000A49516E920263FF018A330AAB5064BE31 +:1012D000F92CD0130AEE510ECE010E0E410C0C412A +:1012E0000ECC0C65CEE42FD012B0FF65F26EC0B00C +:1012F0008E378CD88A362FD2097CA3077AC9027E12 +:10130000FB01C0B165BEC38835DBA0AE8E78EB01B2 +:10131000B1AB89D7DAC0AF9D79DB01B1CAC0C07B60 +:10132000A3077AB9027DEB01C0C165CE9DC09029AB +:101330002467C020D10F88378C3698140CE90C290B +:10134000161408F80C981D78FB07281214B088288A +:101350001614891D9F159B16C0F02B121429161AFE +:101360002B161B8B147AE30B7AE90688158E1678F8 +:10137000EB01C0F165F1BA29121A2F12118A352E2C +:10138000121B9A1AAFEE2F1210C0A0AF9F79FB016B +:10139000B1EE9F11881AC0F098107AE30A7EA90571 +:1013A0002A12017A8B01C0F164F0816001838936D1 +:1013B0008B3799170BE80C981F09C90C291615785B +:1013C000EB07281215B088281615D9C09A199E184F +:1013D0008A1F2E12152A161A2E161BDAC0C0E08C90 +:1013E000177F930B7FA90688188F1978FB01C0E13E +:1013F00065E13E29121A2F12138A352E121B9A1BF1 +:10140000AFEE2F1212C0A0AF9F79FB01B1EE9F1378 +:10141000881BC0F098127AE30A7EA9052A12037A83 +:101420008B01C0F165F10A2E12162E16192A121B15 +:10143000005104C0E100EE1AB0EE2E16170EFF1395 +:101440002F16180FCC01ACAA2F121A0EBC01ACFC3F +:101450007FCB01B1AA2A161B2C161A63FC5E000072 +:101460007FB30263FE3163FE2B7EB30263FC306305 +:10147000FC2A00006450C0DA20DBC0581648C020A7 +:10148000D10FC09163FD7A00C09163FA44DA20DB8A +:1014900070C0D12E0A80C09A2924682C7007581574 +:1014A00038D2A0D10F03470B18ED4FDB70A8287876 +:1014B00073022B7DF8D9B063FA6100002A2C74DB2B +:1014C00040580EB363FAE4000029221D2D25027B4B +:1014D0009901C0B0C9B62CB00728B000DA20068840 +:1014E0000A28824CC0D10B8000DBA065AFE7C0208A +:1014F000D10FC09163FBFF00022A025802440AA2E6 +:1015000002060000022A025802410AA20206000056 +:10151000DB70DA20C0D12E0A80C09E2924682C708E +:1015200007581517C020D10FC09463FBC9C096633C +:10153000FBC4C09663FBBF002A2C74DB30DC405B2D +:10154000FE11DBA0C2A02AB4002C200C63FF2700F0 +:101550008D358CB77DCB0263FDD263FC6D8F358EEC +:10156000D77FEB0263FDC563FC6000006C1004C014 +:1015700020D10F006C1004C020D10F006C10042B80 +:10158000221E28221DC0A0C0942924062A25027BE1 +:101590008901DBA0C9B913ED06DA2028B0002CB010 +:1015A0000703880A28824CC0D10B8000DBA065AFFE +:1015B000E7C020D10F0000006C10042C20062A2167 +:1015C0000268C80528CCF965812E0A094C6591048A +:1015D0008F30C1B80F8F147FB00528212365812774 +:1015E00016ECF529629E6F98026000F819ECF1295B +:1015F00092266890078A2009AA0C65A0E72A629DB6 +:1016000064A0E12B200C0CB911A6992D92866FD9FC +:10161000026000DB1DECE90DBD0A2DD2A368D007E6 +:101620008E200DEE0C65E0C7279285C0E06470BF88 +:101630001DECEE68434E1CECED8A2B0CAA029A704E +:1016400089200899110D99029971882A98748F320E +:101650009F75282104088811987718ECDE0CBF11BB +:10166000A6FF2DF285A8B82E84CF2DDC282DF68577 +:10167000C85A2A2C74DB40580E46D2A0D10FC02085 +:10168000D10F00000029CCF96490B12C206689317B +:10169000B1CC0C0C472C24666EC60260008509F89C +:1016A0005065807F1CECD38A2B0F08400B881008F4 +:1016B000AA020CAA029A7089200899110D99029920 +:1016C00071883398738C329C728A2A9A74893499FF +:1016D0007563FF7D00CC57DA20DB30DC4058151DE8 +:1016E000C020D10F00DA20C0B65815AC63FFE5006A +:1016F000DA205815AA63FFDC00DA20DB30DC40DD9D +:1017000050581638D2A0D10FC858DA20DB30581400 +:101710008A2A210265AFBDC09409A9022925026366 +:10172000FFB200002B21045814351DECAFC0E02E91 +:1017300024668F302B200C0F8F1463FF662921380D +:10174000C08879830263FF5B2C20662B2104B1CC17 +:101750000C0C472C24665814291DECA3C0E02E2441 +:10176000668F302B200C0F8F1463FF376C1004C072 +:10177000B7C0A116ECA015EC92D720D840B822C073 +:10178000400535029671957002A438040442C94B95 +:101790001AEC8519EC8629A67EC140D30F6D4A0547 +:1017A00000808800208C220A88A272D10FC05008C5 +:1017B000A53875B0E363FFD76C1006931394112915 +:1017C0002006655288C0716898052A9CF965A29820 +:1017D00016EC792921028A1309094C6590CD8AA05B +:1017E0000A6A512AACFD65A0C2CC5FDB30DA208CDE +:1017F000115814D8C0519A13C7BF9BA98E132EE25B +:101800000968E0602F629E1DEC6A6FF80260008438 +:101810002DD22668D0052F22007DF9782C629DC735 +:101820009064C0709C108A132B200C2AA0200CBD41 +:1018300011A6DD0A4F14BFA809880129D286AF88F6 +:10184000288C09798B591FEC5C0FBF0A2FF2A36813 +:10185000F0052822007F894729D285D490659075AC +:1018600060004300002B200C1FEC540CBD11A6DDC2 +:1018700029D2860FBF0A6E96102FF2A368F0048853 +:10188000207F890529D285659165DA20581543C9DD +:101890005C6001FF00DA20C0B658154060000C0003 +:1018A000C09063FFB50000DA2058153C6551E48D07 +:1018B000138C11DBD08DD0022A020D6D515813AD5F +:1018C0009A1364A1CEC75F8FA195A9C0510F0F478E +:1018D0009F1163FEFD00C091C0F12820062C2066F8 +:1018E000288CF9A7CC0C0C472C24666FC6098D13E5 +:1018F0008DD170DE02290A00099D02648159C9D385 +:101900008A102B21045813BD8A13C0B02B24662ED5 +:10191000A2092AA0200E28141CEC338D1315EC27E5 +:10192000C1700A773685562DDC28AC2C9C12DED08F +:10193000A8557CD3022EDDF8D3E0DA40055B02DC4B +:10194000305BFF8AD4A028200CB455C0D02B0A8865 +:101950002F0A800C8C11A6CC29C285AF3FAB9929E8 +:10196000C6851CEC1CDEF0AC882D84CF2812022921 +:10197000120378F3022EFDF8289020D3E007880C9C +:10198000C170080847289420087736657FAB891313 +:1019900013EC1A8990C0F47797491BEC18C1CA2838 +:1019A00021048513099E4006EE1187530488118592 +:1019B000520E88020C88029BA09FA18F2B9DA59898 +:1019C000A497A795A603FF029FA22C200C1EEC0152 +:1019D000AECE0CCC1106CC082BC2852DE4CF2BBC8F +:1019E000202BC6852A2C748B11580D69D2A0D10FDB +:1019F00028203DC0E07C877F2E24670E0A4765A023 +:101A00007B1AEBFF88201EEBED8F138EE48FF4081A +:101A100088110A88020F8F14AFEE1FEBFA98910F0E +:101A2000EE029E901EEBF9C0801AEBEA2CD285AA3A +:101A3000BAB8CC28A4CF2CD6852C21022F20720E28 +:101A4000CC02B1FF2F24722C2502C020D10F8713A6 +:101A5000877007074763FD6E282138C099798B028C +:101A600063FE9ADDF063FE9500DA20DB308C11DD39 +:101A70005058155CD2A0D10FC0E163FF7A8B138C54 +:101A800011DD50C0AA2E0A802A2468DA205813BC1F +:101A9000D2A0D10FC020D10F6C1006292102C0D0D6 +:101AA0007597102A32047FA70A8B357FBF052D2535 +:101AB000020DD902090C4C65C18216EBBE1EEBBCAF +:101AC00028629EC0FA78F30260018829E2266890B5 +:101AD000078A2009AA0C65A17A2A629DDFA064A169 +:101AE000772B200C0CBC11A6CC29C286C08C798324 +:101AF0000260015719EBB109B90A2992A36890074E +:101B0000882009880C65814327C2851CEBB364716A +:101B10003A8931098B140CBB016FB11D2C20669FD3 +:101B200010B1CC0C0C472C24666EC6026001400933 +:101B3000FF5065F13A8A102AAC188934C0C47F97E7 +:101B40003C18EBB31BEBB28F359C719B708B209DC7 +:101B50007408BB029B72C08298751BEBAE0F0840E5 +:101B60009B730F881198777FF70B2F2102284A006B +:101B700008FF022F2502C0B4600004000000C0B0BE +:101B80007E97048F362F25227D97048837282521BC +:101B90007C9736C0F1C0900AF9382F3C20090942E1 +:101BA00064908619EB8018EB8128967E00F08800FF +:101BB000A08C00F08800A08C00F08800A08C2A6225 +:101BC0009D2DE4A22AAC182A669D89307797388F1C +:101BD000338A3218EB8A07BE0B2C2104B4BB04CC29 +:101BE0001198E0C08498E1882B9DE59AE69FE71A5A +:101BF000EB82099F4006FF110FCC020A880298E28F +:101C0000C1FC0FCC022CE604C9B82C200C1EEB71D1 +:101C10000CCA11AECC06AA0829A2852DC4CF09B9D9 +:101C20000B29A685CF5CC020D10FC081C0900F8941 +:101C300038C08779880263FF7263FF6600CC57DA89 +:101C400020DB30DC405813C3C020D10FDA205814F9 +:101C50005363FFE8C0A063FE82DA20C0B658144F79 +:101C600063FFD900DB402A2C74580CC9D2A0D10FD5 +:101C70008A102B21045812E11EEB4EC0D02D246691 +:101C800063FEB1006C1006D62019EB491EEB4B2801 +:101C9000610217EB4808084C65805F8A300A6A5178 +:101CA00069A3572B729E6EB83F2A922668A0048CB7 +:101CB000607AC9342A729D2C4CFECAAB2B600CB6DC +:101CC0004F0CBD11A7DD28D2860EBE0A78FB269CDC +:101CD000112EE2A32C160068E0052F62007EF91594 +:101CE00022D285CF2560000D00DA60C0B658142BD3 +:101CF000C85A60010F00DA60581428655106DC40AC +:101D0000DB308D30DA600D6D5158129AD3A064A08B +:101D1000F384A1C05104044763FF6D00C0B02C6080 +:101D2000668931B1CC0C0C472C64666FC602709684 +:101D30000A2B61045812B1C0B02B64666550B42AF6 +:101D40003C10C0E7DC20C0D1C0F002DF380F0F42EA +:101D500064F09019EB1418EB1528967E8D106DDA4F +:101D60000500A08800C08CC0A089301DEB247797A7 +:101D70005388328C108F3302CE0BC02492E1226143 +:101D8000049DE00422118D6B9BE59FE798E61FEB15 +:101D90001A0998400688110822020FDD02C18D9DA4 +:101DA000E208220292E4B4C22E600C1FEB0A0CE897 +:101DB00011A7882C8285AFEE0C220B2BE4CF228654 +:101DC00085D2A0D10F28600CD2A08C1119EB020C87 +:101DD0008D11A988A7DD2ED2852B84CF0ECC0B2C9C +:101DE000D685D10FC0F00ADF387FE80263FF6C634D +:101DF000FF6000002A6C74C0B2DC20DD4058128FF6 +:101E0000C0B063FF63C020D10F0000006C10042C31 +:101E1000221D2A221EC049D320293006243468C03E +:101E2000407AC105DDA060000200C0D06E9738C0C6 +:101E30008F2E0A802B3014C0962934060EBB022E3A +:101E400031022B34147E8004243502DE407AC10E28 +:101E5000C8ABDBD0DA302C0A00580AE52E31020E6E +:101E60000F4CC8FEC020D10F6895F8283102080831 +:101E70004C658FEF1AEAD01CEACE2BA29EC09A7B4B +:101E80009B462BC22668B0048D307BD93B29A29D8E +:101E9000C0E3CB9394901BEAE02D31049B9608DDC0 +:101EA000110EDD029D979D9112EADDC0E524C4A2CA +:101EB0002E34062F310228A29D02FF02288C3028E2 +:101EC000A69D2F3502C020D10FDA30C0B65813B30B +:101ED000C020D10F6C1006292006689805289CF9AF +:101EE00065825D29210209094C659210CD51DB30D4 +:101EF000DA20044C02581317C051D3A0C7AF2A36BA +:101F00000AC0E019EAAD1DEAB31FEAAC8A3A16EA44 +:101F1000A9B1AC64C13528629E6F88026001F129C5 +:101F2000DC332992266890078B2009BB0C65B1E051 +:101F300027629DC08E6471D82B200C0CBC11A6CCDE +:101F400029C2867983026001D219EA9B09B90A295C +:101F500092A3971068900828220009880C6581BB1D +:101F600027C2856471B5292006299CF96491EC2C5F +:101F700020668931B1CC0C0C472C24666EC60260F9 +:101F800001A109F85065819B883689F4088C14AC4E +:101F9000991CEA8B0C99022C2104997019EAA1086A +:101FA00008479971892A09881008990218EA9E0839 +:101FB000990299722830132930120488100699105A +:101FC00008990228302C9A740C881008C8020988D5 +:101FD00002987389379975883898768A39C0819ABA +:101FE000771AEA918935987B99780989140A9902B8 +:101FF000997A8A30893277A73618EA808F33987CAD +:10200000C084987D882B2E76112976122F7613198D +:10201000EA7A0A9F4006FF1104CA110988020FAA32 +:1020200002987EC1F90FAA022A7610C0AA600001A8 +:10203000C0A6ADBF0CBC11A6CC29C2852EF4CF0919 +:10204000A90B29C685655107C020D10F2B200C0C88 +:10205000BC1106CC0828C28609B90A6F8902600142 +:102060002E2992A36890082A220009AA0C65A11FB4 +:102070002AC28564A11928203D08284064808C84E8 +:102080003504841464408485F574537F8436048455 +:1020900014644077745374293013C08C79886CC0F1 +:1020A000902924670908476580ED882089F48435E4 +:1020B0001FEA55048414A4940F440294A014EA5017 +:1020C00008881104880298A1843698A3048414A473 +:1020D000990F990299A219EA4CADB428C2852E44F1 +:1020E000CF288C1028C6852821022F20720988024B +:1020F000B2FF2F2472282502C020D10F00CC57DA5E +:1021000020DB30DC40581293C020D10FC09163FF18 +:102110008FDA20C0B658132163FFE100DA2058138C +:102120001F63FFD88A102B21045811B41DEA2A1FFF +:10213000EA232B200CC0E02E24668A3A63FE480076 +:1021400000DA20DB30DC40DD505813A6D2A0D10FDE +:102150002A2C74DB40580B8ED2A0D10F292138C015 +:102160008879830263FE202A12002C20662B21042A +:102170002CCC010C0C472C24665811A01DEA161F0C +:10218000EA0F2B200CC0E02E24668A3A63FDF8008B +:10219000DA2058130263FF64DA205BFF1CD2A0D15F +:1021A0000F0000006C10089515C061C1B0D9402A1D +:1021B000203DC0400BAA010A64382A2006291606D1 +:1021C00068A8052CACF965C33B1DE9FC6440052FEC +:1021D000120564F29C2621021EE9F806064C65628F +:1021E000E315E9F46440D98A352930039A140A9931 +:1021F0000C6490CC2C200C8B149C110CCC11A5CC15 +:102200009C122CC286B4BB7CB3026002D38F110E29 +:10221000FE0A2EE2A368E0098620D30F0E660C6545 +:1022200062BE88122882856482B6891464905EDA60 +:1022300080D9308C201EE9F21FE9F31DE9E08B14F0 +:102240008DD4D4B07FB718B88A293C10853608C61B +:10225000110E66029681058514A5D50F550295804D +:102260000418146D8927889608CB110888140EBBB2 +:1022700002A8D8299C200F88029BA198A088929B35 +:10228000A3088814A8D80F880298A22AAC1019E9CC +:10229000DEC0C08F141EE9CF86128D11286285AE74 +:1022A000DD08FF0B2CD4CF2821022F66858B352A21 +:1022B0002072098802ABAA2825022A2472C020D1E4 +:1022C0000F29529E18E9BB6F9802600208288226E7 +:1022D00068800829220008990C6591F92A529DC14D +:1022E000CA9A1364A1EF2B200C2620060CB811A566 +:1022F000882D82860EBE0A7DC3026002022EE2A3F2 +:1023000068E0082F22000EFF0C65F1F3288285DEBD +:10231000806481FF9810266CF96461FF2C20668828 +:1023200031B1CC0C0C472C24666EC6026001BC088F +:10233000FD5065D1B617E9BD19E9A21AE9A92C210A +:10234000048B2D2830102F211D0C88100BFB090C3D +:1023500088020A880209BB026441528910C04D9B61 +:1023600090979198928D35D9E064D06CD730DBD0BE +:10237000D8307FD713273C10BCE92632168C39960B +:10238000E69CE78A37B4389AE80B13146430492A7C +:10239000821686799A9696978C778A7D9C982B825E +:1023A000172C7C209A9A2A9C189B99867BB03BB864 +:1023B000896DB9218BC996A52692162AAC18B899B1 +:1023C0009BA196A08BC786CD9BA22B921596A49B12 +:1023D000A386CB2CCC2026A605C0346BD4200D3B85 +:1023E0000C0DD8090E880A7FB705C0909988BC8863 +:1023F000C0900B1A126DAA069988998B288C18C068 +:10240000D01BE98C1CE98B16E981B1FF2A211C2322 +:10241000E6130F0F4F26E6122F251D7FA906C0F0E9 +:10242000C08028251D05F6111AE97A8F202BE615A4 +:102430002CE6162DE61726E6180AFA022AE61429D3 +:102440002006299CF96490FF29200C8D15C0801A64 +:10245000E9610C9C11AA99A5CCDA202BC28528949D +:10246000CF0B4B0B2BC685C0B08C1658118AD2A04F +:10247000D10F8A356FA548D8308BD56DA90C8A86C7 +:102480000A8A14CBA97AB337288C10C08028246715 +:10249000080B4765B112DA20DB302C12065811AD5B +:1024A000D3A0C0C1C0D02DA4039C1563FD268636E1 +:1024B00064610C8910C04D9B909791989263FEA423 +:1024C000C08163FFC78A15CCA7DA20DB308C165891 +:1024D00011A1C020D10FDA20C0B658123063FFE43A +:1024E00000DA208B1158122D63FFD9009E178A1332 +:1024F0002B21045810C28E17C0B02B246663FE3403 +:10250000C08063FE09DA20DB308C16DD505812B52E +:10251000D2A0D10FDA2058122163FFA82D2138C094 +:10252000C87DC30263FE0D8A132B21042C206698FC +:1025300017B1CC0C0C472C24665810B08E17C0D0A5 +:102540002D246663FDEE0000262138B06606064F96 +:10255000262538656EF128206A7F870508294164A1 +:1025600090A5C0D01BE92619E93426200723E61BD5 +:10257000B16609FA022BE61A28200A2DE61D2AE682 +:102580001E09880228E61C882606064728E6202B16 +:10259000220826E53E2BE6212D24072C20062A20A2 +:1025A0006468C347B44463FE9EDB30DA208D15C0F7 +:1025B000CE2E0A802C24688C165810F1D2A0D10F90 +:1025C0008E102A321616E8FD0A2A1486662BE612A9 +:1025D00097E127E61328E614AA6609660296E02E1C +:1025E000EC4869ED50C14663FD7A000064AFB41950 +:1025F000E8F328201689920A880C00910400881AB2 +:10260000A8B8982963FF9C002B21046EB81E2C20CB +:1026100066B8CC0C0C472C2466C9C09E178A135888 +:1026200010778E17C0348F20C0D02D2466C0682646 +:10263000240663FF2C008D35C08064D04AD9E0DCCD +:1026400030DBE0DF301AE8FDB188B4FF17E8FD8623 +:10265000C9249DFF8DC82CCC102D46300767012D55 +:1026600046320A66011DE8F7264631AD6D2D463328 +:1026700026F21597B796B684C3BCBB94B58D3529A1 +:102680009C107D83C22F211DC14663FD4B000000BD +:102690006C1006292006289CF86582BF2921022B90 +:1026A000200C09094C6590E116E8C30CBA11A6AAE2 +:1026B0002DA2862C0A127DC30260028C19E8BF0984 +:1026C000B90A2992A36890078C2009CC0C65C278BE +:1026D00029A2856492722D629E1AE8B56FD80260B5 +:1026E000026E2AA22629160168A0082B22000ABB26 +:1026F0000C65B25C29629DC18C6492542A21200A27 +:10270000806099102C203CC7EF000F3E010B3EB1BA +:10271000BD0FDB390BBB098F260DBD112DDC1C0D48 +:102720000D410EDD038E27B1DD0D0D410FEE0C0DB9 +:10273000BB0B2BBC1C0BB7027EC71C2C21257BCBF3 +:10274000162D1AFC0CBA0C0DA16000093E01073EC3 +:10275000B1780987390B770A77EB0260020A2C21DE +:1027600023282121B1CC0C0C4F2C25237C8B29B0A4 +:10277000CD2D2523C855DA20DB3058106F292102D2 +:10278000CC96C0E80E9E022E2502CC57DA20DB3014 +:10279000DC405810F0C020D10F2C20668931B1CC1C +:1027A0000C0C472C24666EC6026001D309FD5065EF +:1027B000D1CD2F0A012E301129221464E0112822D4 +:1027C0001B090C4400C10400FA1A0A880228261BBF +:1027D0002E3010C0A0C0B0941295131CE878883039 +:1027E0002CC022088D14778704C0F10CFA38C04140 +:1027F000C0F225203CC0840858010F5F010F4B3800 +:1028000005354007BB10C0F0084F3808FF100FBB5C +:102810000228ECFEC0F0084F38842B0BA8100AFFEA +:10282000102A21200F88020B880208440218E8862B +:102830008F110844022821250A2A14082814048824 +:10284000110A88022A210494F08B2004E41008BBAA +:102850001104BB02C04A04BB029BF1842A08AB11DD +:102860000BEB0294F40A54110B44020555100D1B96 +:102870004094F707BB100B5502085502C08195F62E +:102880008433C05094F3B1948B3295F898F99BF24D +:10289000C080C1BC24261499FA9BF598FB85389515 +:1028A000FC843A94FD8B3B9BFE883998FF85352547 +:1028B000F6108436851324F6118B3784122BF6120A +:1028C000C0B064C07E89307797438D3288332E3014 +:1028D000108F111CE84A0999400699112CF614C072 +:1028E000C42CF6158C2B2DF61A28F61B2BF6190482 +:1028F000A81109880208EE0219E840C18008EE021A +:1029000009C90229F6162EF618C09E600001C09A69 +:102910002F200C18E8300CFE11A8FFA6EE2DE28542 +:102920002BF4CF0D9D0B2DE685C87F8A268929A71C +:10293000AA9A260A990C090948292525655050C0EC +:1029400020D10F00C09A63FFC6DA2058111463FE2D +:1029500038DA20C0B658111163FE2E0068973C2B60 +:102960009CFD64BE24C020D10FDA20DB705810CD4E +:10297000C0C0C0D10ADA390ADC3865CDE063FE098F +:102980008A102B2104580F9DC0B02B246663FE21B2 +:10299000DB402A2C7458097ED2A0D10FDA20580FC0 +:1029A000A263FCF76C1004C020D10F006C10042946 +:1029B0000A801EE8261FE8261CE7FF0C2B11ACBB83 +:1029C0002C2CFC2DB2850FCC029ED19CD0C051C0C6 +:1029D0007013E82214E82118E81F2AB285A82804F9 +:1029E000240A234691A986B8AA2AB685A9882784ED +:1029F0009F25649FD10F00006C100AD6302830103C +:102A0000292006288CF964829B68980B2A9CF9651A +:102A1000A1B2022A02580F8489371BE7E8C89164E3 +:102A2000520E2A21020A0C4C65C2588D3019E7E17A +:102A300074D7052E212365E29E2F929E1AE7DD6F43 +:102A4000F8026002532AA22668A0082C22000ACCB1 +:102A50000C65C2442A929D64A23E9A151FE7D78D49 +:102A600067C1E6C8DD2B620618E7D564B00528808B +:102A7000217B8B432B200C18E7CF0CBC11A8CC2951 +:102A8000C28679EB460FBE0A2EE2A368E0052F222C +:102A9000007EF9372CC2859C1864C2332B212F8706 +:102AA000660B7B360B790C6F9D266ED2462C203D33 +:102AB0007BC740CE5560001E2A200CC1B28C205826 +:102AC00010F79A1864A2458D6763FFCFC0C063FFFB +:102AD000C5D7B063FFD300C0E06000022E60030ED4 +:102AE000DB0C6EB20EDC700CEA11AA6A2AAC20581C +:102AF0000199D7A0DA20DB70C1C82D212058109190 +:102B00008C268B279A160CBB0C7AB3348F188963EA +:102B100099F3886298F28E659EF82D60108A189D50 +:102B20001768D729C0D09DA92C22182B22139CAB43 +:102B30009BAA97A58E667E7302600097CF586000AF +:102B40001FDA208B1658105765A13863FFBDC0816E +:102B5000C0908F18C0A29AF999FB98FA97F563FF75 +:102B6000D2DB30DA20DC40580FFBC051D6A0C0C009 +:102B70002BA0102CA4039B172C1208022A02066B10 +:102B800002DF702D60038E179D149E100CDD11C0A6 +:102B9000E0AD6D2DDC205801188C148B16ACAC2CDC +:102BA00064038A268929ABAA0A990C9A26886609A1 +:102BB000094829252507880C98662F2218A7FF2F7A +:102BC000261863FE96DA20DB30DC40DD5058110514 +:102BD000D2A0D10FC0302C20668961B1CC0C0C473B +:102BE0002C24666EC6026000D2C03009FD5065D04C +:102BF000CA8E6764E069647066DB608C18DF70DA27 +:102C0000202D60038E170CDD119E10AD6D2DDC2084 +:102C10001EE78D5800F9232618DA208B16DC402F8A +:102C20002213DD50B1FF2F2613580F9AD2A0D10FD7 +:102C30000028203D084840658DE76F953EDA308DCD +:102C4000B56D990C8CA80C8C14CACF7CD32D2AACF2 +:102C500010C090292467090D4764DDC5600092000B +:102C60002C1208066B022D6C20077F028E17DA20CB +:102C70009E101EE77458007D63FF9A00C09163FFA9 +:102C8000D1000000655081DA20DB60DC40580FB1D4 +:102C9000C020C0F02FA403D10FDA20C0B658103FD7 +:102CA00063FFE000006F950263FD6CDA20DB30DC2F +:102CB00040DD50C4E0580F32D2A0D10F8A152B212D +:102CC00004580ECE232466286010981763FF210055 +:102CD000DA2058103263FFABC858DB30DA20580FC7 +:102CE000162A210265AF9CC09409A9022925026316 +:102CF000FF91DB30DC40DD50C0A32E0A802A24681F +:102D0000DA20580F1FD2A0D10FC020D10FDA202B0C +:102D1000200C58104763FF6B6C1004282006C0621B +:102D2000288CF8658125C050C7DF2B221BC0E12A03 +:102D3000206B29212300A104B099292523B1AA00E1 +:102D4000EC1A0BC4010A0A442A246B04E4390DCCA2 +:102D5000030CBB012B261B64406929200C1BE715C3 +:102D60000C9A110BAA082FA2861BE7136FF90260B9 +:102D700000B60B9B0A2BB2A368B0082C22000BCC28 +:102D80000C65C0A42BA2851DE73664B09B8C2B2458 +:102D900021040DCC029CB08820C0C50888110C8885 +:102DA0000298B1882A08441198B48F3494B79FB51B +:102DB000C0401EE7082DA2850E9E0825E4CF2DDC1D +:102DC000282DA68529210209094C68941A689820A3 +:102DD000C9402A210265A00B2A221E2B221D7AB18E +:102DE0000265A079C020D10F2C212365CFDE6000C1 +:102DF000082E21212D21237EDBD52B221E2F221DE3 +:102E00002525027BF901C0B064BFC413E6E92CB0EC +:102E10000728B000DA2003880A28824CC0D10B8032 +:102E200000DBA065AFE763FFA62A2C74C0B02C0AB4 +:102E300002580E081CE70C9CA08B2008BB1106BB97 +:102E4000029BA1893499A263FF790000262468DAE5 +:102E500020DB30DC40DD50581063D2A0D10FDA20E7 +:102E60002B200C580FCEC020D10F00006C1006078D +:102E70003D14C080DC30DB40DA20C047C02123BCD9 +:102E800030032838080842774001B1DD64815A1EBA +:102E9000E6C519E6C629E67ED30F6DDA050050882F +:102EA00000308CC0E0C02025A03C14E6C4B6D38F0F +:102EB000C0C0D00F87142440220F8940941077F7A8 +:102EC00004C081048238C0F10B2810C044C0220421 +:102ED000540104FD3802520102FE3808DD10821C44 +:102EE00007EE100E6E020EDD02242CFEC0E004FE82 +:102EF000380AEE100E88020D88028DAB1EE6B4086B +:102F0000D8020E880298B0C0E80428100E5E018432 +:102F1000A025A125084411084402052514045511D3 +:102F2000043402C0810E8E3994B18FAA84109FB4EC +:102F300075660C26A11FC0F2062614600009000069 +:102F400026A120C0F20626140565020F7701078727 +:102F50003905E61007781008660206550295B62571 +:102F6000A1040AE61108581108280208660296B75B +:102F7000C060644056649053067E11C0F489C288D4 +:102F8000C30B340B96459847994618E69B9F41041E +:102F900059110E99021FE699020E4708D80298426D +:102FA0000E99029F40C1E00E990299442FA00CB4E3 +:102FB000380CF91114E6881EE67FA4FFAE992E9214 +:102FC0008526F4CF0E880B289685D10F2BA00C1FD9 +:102FD000E6791CE6800CBE11ACBBAFEE2DE2852677 +:102FE000B4CF0D3D0B2DE685D10FC0800528387874 +:102FF000480263FEA263FE966C1006C0C06570F1C5 +:103000008830C030088714778712C0B0C0A619E690 +:103010006B299022C030CC97C031600003C0B0C093 +:10302000A6C0E0C091C0D4C08225203C0B3F1097C1 +:1030300012831CC0700858010D5D01089738C080CC +:103040000B9838077710048810086802087702C0C8 +:10305000800D98382D3CFE0888100D9E388D2B0A67 +:10306000EE1008EE0207EE020CB8100FDD02053B71 +:10307000400EDD029D408920043D100899110D99F4 +:10308000022D210409A90208DD119941872A05B9F9 +:10309000100D3D020ABB110DBB02087702974428B0 +:1030A00021258712082814048811071E4007EE10F6 +:1030B0000E990275660926211F0626146000060077 +:1030C0002621200626140868029B47098802984694 +:1030D00029200CD2C0C0800C9E111BE63E1FE63595 +:1030E000AB99AFEE2DE2852894CF0DAD0B2DE68583 +:1030F000D10FDD40C0A6C0B08E51CAE0B2AAB1BBAC +:103100002DDC108F500E7836981008770C9FD898C9 +:10311000D989538F52991199DB9FDA7E8309B1CCFB +:10312000255C10C97763FFCF88108D1108E70C97D5 +:1031300051AD8DD7F078DB01B1F79D5397528830B0 +:10314000C030088714088840648ED565BEC963FE08 +:10315000BC0000006C1004D720B03A8820C0308238 +:1031600021CAA0742B1E2972046D080FC980C99151 +:103170008575B133A2527A3B0B742B0863FFE900CB +:10318000649FECD10FD240D10F0000006C100AD622 +:10319000302E3027D950DA4015E6092430269A150A +:1031A00029160464E0026493732920062A9CF865BA +:1031B000A3CE2A2102270A040A0B4C65B3978C3050 +:1031C00074C7052D212365D4A0C0A62B0A032C2289 +:1031D00000580F0B64A3B917E5F78E389A1664E30D +:1031E000BA2F6027285021C9F37E8311C2B08C20EA +:1031F0002A200C580F2AD7A0CDA16004A200C2B08B +:103200008C202A200C580EFED7A064A4862F212ED5 +:103210008B680FBF360FB90C6F9D54296027D5B04E +:103220006E920528203D7B8F4CDA20DB50C1C42DE7 +:10323000211F580EC48B269A189A1989272AAC3850 +:103240000B990C7A93538963C08099738F62987835 +:103250009F728E659E798D679D7B8C6695759C7A35 +:103260008E687E53026000B18B1465B050600038E8 +:10327000DBF063FFA5008A14C9A92E60030E9B0C26 +:103280006EB2A5DC500CEA11AA6A2AAC285BFFB129 +:10329000D5A063FF93C0E063FFE2DA208B18580EDD +:1032A0008165A2B163FF9E0000DA20DB308C1558E7 +:1032B0000E29D6A0C0C0C0D12D16042CA403DC70EA +:1032C000DA20DB60DF502D6003C0E09E109D171EEA +:1032D000E5D20CDD110D6D082DDC285BFF478E66F5 +:1032E0008F678817AF5FA8A828640375FB01B1EE4C +:1032F0008A189E669F6789268829AA9909880C9949 +:10330000268E6808084805EE0C28252515E5AC9E94 +:103310006865EECC63FEE6000000C9432F21232B35 +:1033200021212FFC010F0F4F2F25237FBB026003AC +:10333000142C20668961B1CC0C0C472C24666EC617 +:103340000260022809FD5065D22264E1B62E602792 +:1033500064E1B0DC70DF50DA20DB601EE5C32D6075 +:1033600003C08098100CDD11AD6D2DDC285BFF22B1 +:10337000644181C0442B0A008C202A200C580EA0E6 +:103380000AA70265A00FC0B02C22002A200C580EFC +:103390009CD7A064AFEFDA20C1BCC1C82D21208F1B +:1033A000188E268929AFEE9E260E990C0909482908 +:1033B0002525580E64C090C050C0C288609A191E5E +:1033C000E57FC0A12EE022088F14778704C0810E0C +:1033D0008938C0800B93102D203C2921200CDC0162 +:1033E00004DB010929140BA8380CA5380D3D401C3D +:1033F000E5968B2B088810075510085502053302F7 +:103400002821250F154003BB020CBB0207551005F0 +:10341000D3100828140ADD11048811098802053325 +:10342000022921040833029B70C0808A201BE58F8B +:1034300008AA110BAA029A71C0A1852A93769574E5 +:1034400008931103DD020ADD029D778C63C1DC9CC9 +:10345000738B6298789A799B72232214C0C0B1351D +:103460002526149C7B9D75937A2B621A9B7C2A627D +:103470001C9A7D28621D987E25621B957F2362170A +:103480002376102D62182D76112C62192C76126479 +:10349000E0B98E6077E73DC0FE13E5571DE558C1E2 +:1034A000818A628B630495110E9C4006CC110C55E9 +:1034B00002247615085502C0802D76148D2B2B76AC +:1034C0001B2A761A28761925761803DD022D761622 +:1034D0006000030000C0FA2E200C19E53E18E53507 +:1034E000A9E90CEE11A8EEC0802DE2852894CF0D3D +:1034F000FD0B2DE685DA208B198C158D14580D6582 +:10350000D2A0D10FDC70DF50DB602D6C28C0A01E74 +:10351000E5569A10DA205BFE5563FE53002B203DE2 +:103520000B4B4065BC826FE527DA308F556DE90C97 +:103530008EAA0E8E14C9E87EF3162AAC10C090290C +:103540002467090F4764FC6060015F00C0FA63FFF5 +:1035500085C09163FFE88814658168DA20DB608CA0 +:1035600015580D7CC020C09029A403D10F8A162BBA +:103570002104580CA2C0A02A24668E6863FDCA00EC +:10358000002B9CF965B0FDDA20580CA763FC2200E3 +:1035900000DA20C0B6580E0163FFBA002B200C0CD5 +:1035A000BE11A7EE2DE286C1C27DC30260011819CB +:1035B000E50209B90A2992A36890082A220009AAFB +:1035C0000C65A10326E2856460FD2C20668931B17B +:1035D000CC0C0C472C24666FC60270960C8A162BF6 +:1035E0002104580C86C0D02D24668E3077E74D1C00 +:1035F000E5021BE5028F328833C0A42D21040E9909 +:103600004006991104DD1109DD029A61C19009DDBE +:10361000029B60C0908B2B9D649F66986799650C98 +:10362000BB029B6228200C1AE4EBAA8A0C8811A723 +:10363000882F828529A4CF2FFC202F86858A1465A8 +:10364000A0A6C020D10FB0FC8B142C2523C8B70234 +:103650002A02066B02580CB82A210265AEF7C0D8C0 +:103660000DAD022D250263FEEC008E14C8E8DA20B1 +:10367000DB30580CB12A210265AEDA07AF022F25E4 +:103680000263FED100DA20DB308C158D14580E5504 +:10369000D2A0D10FDA202B200C580DC063FEB6004B +:1036A000DA202B200C580DE263FEAADA20DB308CE6 +:1036B000152D12042E0A80280A00282468580CB000 +:1036C00063FAE500C020D10FDA20580DB48914CD7B +:1036D00092DA20DB308C15580D1FDBA0C020C0A073 +:1036E0002AB403D10FC020D10F2A2C748B15580691 +:1036F00028D2A0D10F0000006C100C2821029410D9 +:1037000008084C6583621FE4AB29F29E6F98026043 +:1037100003661DE4A729D2266890082A220009AA78 +:103720000C65A3542CF29D64C34E2B200C0CB611D7 +:10373000AF66286286C1EC78E30260034619E49E16 +:1037400009B90A2992A36890078A2009AA0C65A3DF +:103750003224628564432CC0E12A3109C0702724D9 +:103760006689359A11992A88369912982B89379843 +:1037700013992C883899140858149815982D89395C +:103780002A25042E251D29251C283028C0922824EE +:103790003C2A302908084798160989012A243D2A1D +:1037A000311599170A094109A90C299CEC29251FF3 +:1037B0007E87192D2A000DA06000083E010A3EB147 +:1037C000AD08DA390EAA110A990C29251F2A211FE2 +:1037D00018E4A80A8160C1D0941A951B01083E0024 +:1037E000053EB184054839843C259CFC0D8836296A +:1037F000201408AA1C8D3D2726182E26132E2614C9 +:103800002E261527261B2E246B27246727246808BD +:10381000581C0909432924142932112A252E282548 +:103820002F27252427252527252C27252325252037 +:103830002425212D2522841A2D211C851B6FD202BF +:10384000600209C0A099186D080AB1AA00A104007D +:10385000E91A7D9B0263FFEE8918C080C0E1C07049 +:10386000C0D29B1D951B961C9C1E16E4722C203DFD +:1038700015E4820C0B400DCC010BE7381DE4640A03 +:1038800077100CE8380B8810C0C49C410877029D63 +:1038900040B0A80988118B209C499D48954B9643C0 +:1038A000087702861418E47315E45A08770205BBFA +:1038B000029B4A9B4297468812871108DA149A4E57 +:1038C0000D88100D77110877021AE44E06D8140DF2 +:1038D0006610087702974FC78F984D984C98458788 +:1038E0001598440715140D55110A5502954715E40E +:1038F000638A262D46102D46182D46202C46112C65 +:1039000046192C46212B46122B461A2846142846C7 +:10391000152B462288162546242546268B170A0C89 +:1039200048090D4885130EDD1105CC110839400BEF +:10393000EB390299101EE4520DCC020D5511082DE1 +:10394000400655022E461316E41D0FDD11254616BE +:10395000080840851B0188100DBB0286671DE449DD +:103960000988020CBB0219E4191CE4472B46172DE9 +:10397000461BA7661BE446C0702C461C0988028CB7 +:103980001E28461E2B4623C0908B1D29461D294606 +:103990001F18E43F2946272846252931162E2006E0 +:1039A00029246A243117962D242538861CCCE1273A +:1039B0002407C0D7090E4064E0829A29092841648F +:1039C000809164409B2D2406C098094936280AA09E +:1039D00024628501C404A84428210424668508883B +:1039E000118E3F8A3E2D32100EA41800C4040EAE74 +:1039F0001800EE110ACA530EDD02C0E30E880298C9 +:103A0000C11EE42409084E9EC08E2094C398C59D13 +:103A1000C418E3F01DE42105EE110EAA020DAA025E +:103A2000A8B82784CF9AC21EE3E224F29D27E4A21D +:103A3000244C1824F69D655052C020D10F2D240629 +:103A4000C0A0C09809493604A93863FF7FC0A063AD +:103A5000FE070000654F6DC098C0A82A240663FFCA +:103A60006B2D2406C09063FF63CC57DA20DB308CCB +:103A700010580C38C020D10F00DA20C0B6580CC73F +:103A800063FFE500DA20580CC563FFDC2A2C748B39 +:103A90001058053FD2A0D10F6C10062820068A339B +:103AA0006F8202600161C05013E3C229210216E354 +:103AB000C1699204252502D9502C20159A2814E3B7 +:103AC000BF8F2627200B0AFE0C0477092B711C647C +:103AD000E1398E428D436FBC0260016F00E104B09A +:103AE000C800881A08A80808D80298272B2006685A +:103AF000B32ECE972B221E2C221D0111027BC90151 +:103B0000C0B064B0172CB00728B000DA2003880AD0 +:103B100028824CC0D10B8000DBA065AFE7C020D16C +:103B20000F2D206464DFCA8B29C0F10BAB0C66BF7C +:103B3000C02B200C0CBC11A6CC28C2862E0A0878FB +:103B4000EB611EE39D0EBE0A2EE2A368E00528226B +:103B5000007E894F29C2851EE3A96490461FE3B603 +:103B60009E90C084989128200A95930F880298927D +:103B70008E200FEE029E942F200788262F950A98FC +:103B8000969A972E200625240768E3432921022AC6 +:103B9000C2851DE3902AAC20ADBD25D4CF2AC685B1 +:103BA00063FF4E002E2065CBEDC082282465C9F648 +:103BB00005E4310002002A62821BE3982941020BCE +:103BC000AA022A668209E43129210263FF23000048 +:103BD00064DFB88F422E201600F1040DEE0C00EECB +:103BE0001AAEAE9E2963FFA38A202B3221B1AA9A76 +:103BF000B0293221283223B4992936217989A92B79 +:103C000032222B362163FFA0C020D10F9F2725240D +:103C100015ACB828751C2B2006C0C12EBCFE64E074 +:103C2000AB68B7772DBCFD65DEC72D2064C0F0649E +:103C3000D0868E290EAE0C66E089C0F128205A2865 +:103C40008CFE08CF3865FEE863FF580000E004935F +:103C500010C0810AF30C038339C78F08D80308A862 +:103C60000108F80C080819A83303C80CA8B828756F +:103C70001C030B472B24158310CBB700E104B0BC09 +:103C800000CC1AACAC0CDC029C27659E5EC0B20B6B +:103C9000990209094F29250263FE50002D206A0D63 +:103CA0002D4165DF7EDA20C0B0580C8F64AF18C09C +:103CB000F163FEEF9F2763FFD02E221F65EE326374 +:103CC000FF79000028221F658E2763FF6E252406DA +:103CD00029210263FE1B00006C10066571332B4C1A +:103CE00018C0C7293C18C0A1C08009A838080842DC +:103CF0006481101CE32C1AE32D2AC67E2A5CFDD3B6 +:103D00000F6DAA0500B08800908C8940C0A009887A +:103D1000471FE355080B47094C50090D5304DD10AC +:103D2000B4CC04CC100D5D029D310CBB029B3088DD +:103D3000438E2098350FEE029E328D26D850A6DD98 +:103D40009D268E40C0900E5E5064E0971CE33B1EA3 +:103D5000E32B038B0BC0F49FB19EB02D200A99B3C7 +:103D60000CDD029DB28F200CFF029FB48E262D2009 +:103D7000079EB68C282DB50A9CB72924072F20064C +:103D80002B206469F339CBB61DE30D2320168DD2A9 +:103D90000B330C00D10400331AB48DA3C393292232 +:103DA000200C13E30C1FE3030C2E11AFEEA322290A +:103DB00024CF2FE285D2A00FDD0B2DE685D10F0099 +:103DC0002E200CB48C0CEB111FE3031DE2FAAFEEB6 +:103DD000ADBB22B28529E4CF02C20B22B685D2A0A8 +:103DE000D10F00002E200C1CE2F31FE2FA0CEB11A5 +:103DF000AFEEACBB22B28529E4CF02820B22B6859E +:103E0000D2A0D10FC0D00BAD387DC80263FEEC63E9 +:103E1000FEE08E40272C747BEE12DA70C0B32C3C8F +:103E200018DD50580A868940C08063FEE3066E02A2 +:103E3000022A02DB30DC40DD505800049A10DB50CF +:103E4000DA70580453881063FEF700006C10069275 +:103E5000121EE2E48C40AE2D0C8C472E3C1804CA96 +:103E60000BD9A07DA30229ADF875C302600084C000 +:103E7000B0C023C0A09D106D0844B89F0EB80A8D35 +:103E8000900EB70BB8770D6D36ADAA9D800D660C00 +:103E9000D8F000808800708C879068B124B22277B7 +:103EA000D3278891C0D0CB879890279C100070882A +:103EB00000F08C9D91CB6FC08108BB0375CB36633E +:103EC000FFB4B1222EEC1863FFD485920D770C86D7 +:103ED000939790A6D67D6B01B1559693959260000D +:103EE00016B3CC2D9C188810D9D078D3C729DDF80B +:103EF00063FFC100C0238A421BE2E900CD322D449A +:103F0000029B3092318942854379A1051EE2E50E7C +:103F1000550187121BE2D5897095350B99029932AC +:103F200088420A880C98428676A6A696768F44AF79 +:103F3000AF9F44D10F0000006C10089311D6308859 +:103F400030C0910863510808470598389812282115 +:103F500002293CFD08084C6581656591628A630A07 +:103F60002B5065B18B0A6F142E0AFF7CA60A2C20F9 +:103F70005ACCC42D0A022D245A7FE0026002158912 +:103F80002888261FE2C809880C65820F2E200B0F97 +:103F9000EE0B2DE0FE2EE0FF08DD110EDD021EE22D +:103FA000C2AEDD1EE2C21CE2C20EDD010DCC37C185 +:103FB00080084837B88DB488981089601AE2807BF1 +:103FC00096218B622AA0219C147BA3179D132A2083 +:103FD0000C8B108C20580BB18C148D13DBA0CEAC45 +:103FE0006001C4002E200C1BE2730CEA110BAA081E +:103FF0002BA2861FE2717BDB3B0FEF0A2FF2A36837 +:10400000F0052822007F892C2BA28564B0AA876244 +:104010008826DE700C7936097A0C6FAD1C8F279BD1 +:104020001508FF0C77F3197E7B729D139C149B156A +:10403000CF56600025C0B063FFD0D79063FFDD008E +:10404000009D139C14DA20DB70580B168B158C1412 +:104050008D1365A06A8E6263FFCC00DA208B11DCC1 +:1040600040580ABCD6A08B15C051DE70DA20DC6047 +:10407000DD405BFF768D138C14D9A02E200C1BE243 +:104080004D1FE2540CEA11AFEFC0E0ABAA2BA285A2 +:104090002EF4CF0B990B29A68563FF1D00DA20DCD7 +:1040A00060DD40DE708912282007DF50A9882824AF +:1040B000075BFF09D2A0D10F00DBE0DA20580B37F5 +:1040C0006550EF2A20140A3A4065A0EBDB60DC4023 +:1040D000DD30022A025809A7D6A064A0D584A183A6 +:1040E000A00404470305479512036351C05163FEC2 +:1040F0005C2C2006D30F28CCFD6480A568C704C0C3 +:10410000932924062C2006C0B18D641FE22C9D2724 +:104110009D289D298FF29D2600F10400BB1A00F016 +:1041200004B0BE0EDD01C0F0ADBB8D652F24070DC0 +:104130000E5E01EE11AEBB2E0AFEB0BB0B0B190ECC +:10414000BB36C0E20B0B470EBB372B241618E224FC +:104150000A09450D0B422B240B29240AB4BE2E2438 +:104160000C7D88572920162FCCFDB09D0A5C520D7E +:10417000CC362C246465FDEC0C0C4764CDE618E2CB +:104180000F8E2888820C9F0C00810400FF1AAFEE6E +:104190009E2963FDCF1CE23E63FE13001CE23563E3 +:1041A000FE0C8D6563FFA500DA202B200C580B2038 +:1041B000645F0FC020D10F00C020D10FC09329240D +:1041C00016C09363FFA000006C1004C06017E1F8F4 +:1041D0001DE1FBC3812931012A300829240A78A175 +:1041E00008C3B27BA172D260D10FC0C16550512605 +:1041F00025022AD0202F200B290AFB2B20142E2049 +:104200001526241509BB010DFF0928F11C2B2414C8 +:10421000A8EE2EF51C64A0A92B221E28221D011138 +:10422000027B8901DB6064B0172CB00728B000DA8C +:104230002007880A28824CC0D10B8000DBA065AF24 +:10424000E7DB30DC40DD50DA205800DE29210209AE +:104250000B4CCAB2D2A0D10F00CC5A2C30087BC173 +:10426000372ED02064E02D022A02033B02DC40DD21 +:10427000505800D4D2A0D10F2B2014B0BB2B241443 +:104280000B0F4164F0797CB7CAC0C10C9C022C258D +:1042900002D2A0D10FC020D10F2E200669E2C12684 +:1042A00024062B221E2F221D29200B2820150D99B4 +:1042B000092A911C262415AA8828951C7BF149609F +:1042C0000048B0BB2B24140B0A4164A0627CB702E7 +:1042D0002C25022B221E2C221DD30F7BC901C0B01E +:1042E000C9B62CB00728B000DA2007880A28824C0B +:1042F000C0D10B8000DBA065AFE7C020D10F00006C +:10430000262406D2A0D10F0000DB601DE1AC64BF03 +:104310004F2CB00728B000DA2007880A28824CC04A +:10432000D10B8000DBA065AFE71DE1A463FF310086 +:1043300026240663FF9C00006C1004282006260A31 +:10434000046F856364502A2920147D9724022A0271 +:10435000DB30DC40DD50580019292102090A4CC825 +:10436000A2C020D10FC0B10B9B022B2502C020D1CF +:104370000F00022A02033B022C0A015800D1C9AAED +:10438000DA20DB30DC405809F329A011D3A07E9756 +:10439000082C0AFD0C9C012CA411C0512D201406E0 +:1043A000DD022D241463FFA4DA20DB30DC40DD5075 +:1043B000C0E0580973D2A0D10F0000006C1006169F +:1043C000E17D1CE17D655157C0E117E179282102AB +:1043D0002D220008084C6580932B32000B6951296F +:1043E0009CFD6590872A629E6EA84C2A722668A062 +:1043F000027AD9432A629DCBAD7CBE502B200C0C97 +:10440000BD11A6DD28D2862F4C0478FB160CBF0AFE +:104410002FF2A368F0052822007F89072DD285D3CB +:104420000F65D0742A210419E1A3D30F7A9B2EDAE9 +:104430002058086E600035002D21041BE19E7DBBD5 +:1044400024DA20C0B6580869CA546001030B2B5007 +:104450002B240BB4BB0B0B472B240C63FFA0DA20DF +:10446000580A4E600006DA20C0B6580A4C6550E083 +:10447000DC40DB302D3200022A020D6D515808BDA0 +:104480001CE14ED3A064A0C8C05184A18EA0040436 +:10449000470E0E4763FF3500002B2104C08C893185 +:1044A000C070DF7009F950098F386EB8172C20667C +:1044B000AECC0C0C472C24667CFB099D105808CF11 +:1044C0008D1027246694D11EE151B8DC9ED0655032 +:1044D00056C0D7B83AC0B1C0F00CBF380F0F42CBAE +:1044E000F119E13018E13228967EB04BD30F6DBA46 +:1044F0000500A08800C08C2C200CC0201DE1360CCB +:10450000CF11A6FF2EF285ADCC27C4CF0E4E0B2EB9 +:10451000F685D10FC0800AB83878D0CD63FFC100CE +:104520008E300E0E4763FEA12A2C742B0A01044D17 +:10453000025808C22F200C12E1270CF911A699A2EB +:10454000FF27F4CF289285D2A008480B289685D162 +:104550000FC020D10F0000006C1004C060CB55DBF1 +:1045600030DC40055D02022A025BFF94292102092A +:10457000084CC882D2A0D10F2B2014B0BB2B24141E +:104580000B0C41CBC57DB7EBC0C10C9C022C2502A6 +:10459000D2A0D10F0000022A02033B02066C02C027 +:1045A000D0C7F72E201428310126250228240A0F0F +:1045B000EE012E241458010E63FFA300262406D218 +:1045C000A0D10F006C1006282102D62008084C65E7 +:1045D000809D2B200C12E0F70CB811A2882A82864D +:1045E000B5497A930260009719E0F409B90A299253 +:1045F000A36890082A620009AA0C65A08228828517 +:104600001CE0FF6480799C80B887B14B9B819B1034 +:10461000655074C0A7D970280A01C0D0078D380D25 +:104620000D42CBDE1FE0E01EE0E12EF67ED830D357 +:104630000F6D4A0500808800908C2E3008C0A000C5 +:10464000EE322E740028600C19E0E30C8D11A2DD0F +:10465000A988C0202CD2852284CFD2A00CBC0B2CE0 +:10466000D685D10FC0F0038F387FA0C063FFB400A0 +:10467000CC582A6C74DB30DC405807F6C020D10FD0 +:10468000DA605809C663FFE7DD402A6C74C0B0DC0D +:104690007058086A2E30088B1000EE322E740028F5 +:1046A000600C19E0CC0C8D11A2DDA988C0202CD2A1 +:1046B000852284CFD2A00CBC0B2CD685D10F000054 +:1046C0006C1004292014282006B19929241468812B +:1046D00024C0AF2C0A012B21022C24067BA004C08D +:1046E000D02D2502022A02033B02044C02C0D058FE +:1046F00000C0D2A0D10FC020D10F00006C1004293F +:104700003101C2B429240A2A3011C28378A16C7BFA +:10471000A1696450472C2006C0686FC562CA572D36 +:1047200020147CD722DA20DB30DC40DD505BFFA593 +:10473000292102090E4CC8E2C020D10FC0F10F9F01 +:10474000022F2502C020D10FDA20DB30C0C05BFF72 +:10475000DC28201406880228241463FFC7292015AA +:104760001BE0972A200BC0C09C240BAA092BA11C7C +:104770002C2415AB9929A51C63FF9900C020D10FEB +:10478000DA20DB30DC40DD50C0E058087DD2A0D11B +:104790000F0000006C1004CB5513E09225221F0D72 +:1047A000461106550CA32326221E25261F06440B60 +:1047B00024261E734B1DC852D240D10F280A80C038 +:1047C0004024261FA82828261E28261DD240D10FA7 +:1047D000C020D10F244DF824261E63FFD80000000E +:1047E0006C1004D620282006C0706E85026000D4AC +:1047F0001DE07919E07112E06F2A8CFC64A1302B66 +:104800006102B44C0B0B4C65B0A22B600C8A600C9F +:10481000B8110288082E828609B90A7EC302600098 +:104820009A2992A368900509AA0C65A08E28828512 +:10483000648088B8891BE07594819B80655155C060 +:10484000B7B8382A0A01C0C009AC380C0C4264C0A1 +:10485000421FE0541EE0562EF67EB04AD30F6DAADA +:104860000500808800908CC0A029600C0C9C11A2CF +:10487000CC2BC285AD990B4B0B2BC6852860062728 +:1048800094CF6881222D6015D2A0C9D2C0E22E64D7 +:1048900006D10F00C0F008AF387FB0BD63FFB10094 +:1048A000276406D2A0D10F00D2A0D10F00CC57DAD6 +:1048B00060DB30DC405808A7C020D10FDA6058090F +:1048C0003763FFE80028221E29221DD30F789901A3 +:1048D000C080C1D6C1C11BE043C122AB6B64804222 +:1048E00078913F2A80000CAE0C64E0BB02AF0C64F0 +:1048F000F0B52EACEC64E0AF0DAF0C64F0A92EACBB +:10490000E864E0A32FACE764F09D2EACE664E0978A +:104910002F800708F80BDA807B83022A8DF8D8A055 +:1049200065AFBC28612308D739D97060007B0000CF +:104930002B600C0CB811A2882C82862A0A087CAB4A +:104940007E09BA0A2AA2A368A0052C62007AC96F60 +:104950002A828564A0691FE029276504C0E3C0C4DA +:104960002E64069CA11CE0549FA02E600A97A30C05 +:10497000EE029EA28F600CFF029FA42E60147AEFBD +:104980004627A417ADBC2F828527C4CF2FFC202F2C +:10499000868563FE692A6C74C0B1DC90DD405807DF +:1049A000A71DE00C63FEC100D9A0DA60DB30C2D0E5 +:1049B000C1E0DC4009DE39DD505807F1D2A0D10F4B +:1049C000DA605808F663FEE4290A0129A4170DBF2E +:1049D000082E828527F4CF2EEC202E868564500B7E +:1049E0002A6C74DB4058016AD2A0D10FC020D10FCD +:1049F0006C10062B221E28221D93107B8901C0B04B +:104A0000C0C9C03BC1F20406401DDFF6C0E2C0745D +:104A10000747010E4E01AD2D9E11C0402E0A1464B1 +:104A2000B06E6D084428221D7B81652AB0007EA1EE +:104A30003B7FA1477B51207CA14968A91768AA1434 +:104A400073A111C09F79A10CC18B78A107C1AE29B8 +:104A50000A1E29B4007CA12B2AB0070BAB0BDAB0DD +:104A60007DB3022ABDF8DBA0CAA563FFB428B0104D +:104A700089116987BB649FB863FFDC00647FB463FE +:104A8000FFD50000646FD0C041C1AE2AB40063FFFF +:104A9000C62B2102CEBE2A221D2B221E7AB12A8CC1 +:104AA000107CB1217AB901C0B0C9B913DFC1DA20D5 +:104AB00028B0002CB00703880A28824CC0D10B8094 +:104AC00000DBA065AFE7D240D10F8910659FD463AA +:104AD000FFF300006C1008C0D0C8598C30292102A7 +:104AE0000C0C4760000C8E300E1E5065E19E292193 +:104AF00002C0C116DFB0090B4C65B0908A300A6E57 +:104B00005168E3026000852F629E1BDFA96EF85397 +:104B10002BB22668B0052E22007BE94727629DB79D +:104B200048CB7F97102B200CB04E0CBF11A6FF294D +:104B3000F2869E12798B4117DFA007B70A2772A36E +:104B4000687004882077893029F285DF90D79065D6 +:104B500090652A210419DFD77A9B22DA205806A310 +:104B6000600029002C21041BDFD37CBB18DA20C095 +:104B7000B658069EC95860014CC09063FFCCDA203D +:104B8000580886600006DA20C0B65808846551359A +:104B9000DC40DB308D30DA200D6D515806F6C0D088 +:104BA000D3A064A120292102C05184A18CA00404B7 +:104BB000470C0C4763FF3E00C09C8831DBD008F8EF +:104BC00050089B3828210498116E8823282066AC51 +:104BD0008C0C0C472C24667CBB159F139E148A10EA +:104BE0008B115807068E148F13C0D02D24668A307F +:104BF000C092C1C81BDF867FA6099BF099F12CF4F7 +:104C00000827FC106550A4B83ADF70C051C0800777 +:104C1000583808084264806718DF6319DF64298602 +:104C20007E6A420AD30F6DE90500A08800F08CC0AF +:104C3000A08930B4E37F9628C0F207E90B2C9408D2 +:104C40009B909F912F200C12DF630CF811A68829EE +:104C50008285A2FF2DF4CFD2A009330B238685D104 +:104C60000F22200C891218DF5B0C2B11A6BBA82287 +:104C70002D24CF2CB285D2A00C990B29B685D10F4B +:104C8000C087C0900A593879809663FF8ADB30DA92 +:104C900020C0C1C0D05BFF56292102C0D02A9CFE93 +:104CA00065AE4D2D2502C09063FE45009E142A2C52 +:104CB00074C0B1DC70DD405806E18E14C0D01BDF3B +:104CC00053C1C863FF6AC020D10F00006C100628D2 +:104CD000210216DF3808084C65821929629E6F98F8 +:104CE0000260022019DF332992266890078A200982 +:104CF000AA0C65A20F27629DC0CC6472072B210409 +:104D00008E31C0A0DDA00EFE500ECD386EB8102C36 +:104D10002066B1CC0C0C472C24667CDB026001EFD2 +:104D2000C0C12930081BDF2564909C2F0AFFC0D327 +:104D3000B09E64E1026892136450882A2C74044B7C +:104D4000025800930AA20206000000002B200C2744 +:104D500021040CBC11A6CC29C286280A087983023A +:104D60006001B919DF1509B90A2992A36890082EC4 +:104D7000220009EE0C65E1A42EC28564E19E262086 +:104D80000713DF1E6E7B0260019A17DF151FDF1EFF +:104D900019DF4BC0D228200A93E09DE1A9690F8852 +:104DA0000298E22F90802A9480B1FF07FF029FE3D0 +:104DB0002EC2851FDF080EDE0BAFBF2AF4CF2EC632 +:104DC00085655F76C020D10F2830102930112E3034 +:104DD0001300993200ED326480EE2A30141FDF3860 +:104DE00000AA3278EF050F9E092DE47F1EDF36669C +:104DF000A0050F98092A8480B4A718DF33C76F0075 +:104E00009104AE9EDDE000AF1A00C31A6EE1052DDD +:104E1000B2000DED0C1EDF2D08D81C063303AE8842 +:104E20002A848B2EB02E27848C03EE010FEE022EE7 +:104E3000B42E58018F63FEFF29310829250428303C +:104E4000142E3109B0886480A32E240AC0812E302C +:104E5000162CB4232E240BB4EF2F240C8C378B3656 +:104E6000292504DEB0DFC00C8F390B8E390FEE021E +:104E700064EEC4089F1101C4048D380CB81800C436 +:104E8000040CBE1800EE110EDD02C0E30EFF021E80 +:104E9000DF019F719E701EDF008F2098739D740547 +:104EA000FF110BCD53C18098750FDD020EDD029D01 +:104EB000721EDEBF2A24662F629D2AE4A22FFC18F0 +:104EC0002F669D63FE710000002F30121BDF010072 +:104ED000FA3278FF050B980B2A847F66D0050B9A6F +:104EE0000B2DA4802A301100AA3263FF442F240A1C +:104EF0009E2B63FF56CC57DA20DB30DC4058071579 +:104F0000C020D10F00DA20C0B65807A463FFE50027 +:104F1000DA7058063AC0A02A246663FE02DA2058E6 +:104F2000079F63FFCFB16928200A862009094799A6 +:104F30001129240798107F812693E027E50A9AE338 +:104F400088109DE119DEDD8D11096F029FE42DE4CB +:104F500016098802C0D398E22A240763FE51000094 +:104F60001DDEA60868118F11892B93E008FF02C08F +:104F70008F9FE50D990299E2047F11C0D49DE1084D +:104F8000FF029FE463FFD0006C1004C020D10F002B +:104F90006C100485210D381114DE848622A42408A7 +:104FA000660C962205330B9321743B13C862D230F2 +:104FB000D10FC030BC29992199209322D230D10F32 +:104FC000233DF8932163FFE36C100AD62094181751 +:104FD000DE79D930B83898199914655252C0E1D2A7 +:104FE000E02E61021DDE760E0E4C65E1628F308E82 +:104FF000190F6F512FFCFD65F1558EE129D0230E5D +:105000008F5077E66B8F181EDEB3B0FF0FF4110FD1 +:105010001F146590CE18DEB08C60A8CCC0B119DE2C +:105020006428600B09CC0B0D880929811C28811A82 +:105030002A0A0009880C08BA381BDEA60CA90A291E +:1050400092947B9B0260008C2B600C94160CBD111B +:10505000A7DD29D286B8487983026000D219DE56CE +:1050600009B80A2882A398176880026000A360002C +:10507000A51ADE9A84180AEE01CA981BDE4D8C1917 +:105080002BB0008CC06EB3131DDE4A0C1C520DCC2D +:105090000B2DC295C0A17EDBAE6000380C0C5360B6 +:1050A000000900000018DE8C8C60A8CCC0B119DEAD +:1050B0004028600B09CC0B0D880929811C28811A16 +:1050C0002A0A0009880C08BA380CA90A2992947E89 +:1050D000930263FF72DA60C0BA580730645073609D +:1050E000026600001ADE338C192AA0008CC06EA361 +:1050F0001A18DE2F0C1C5208CC0B18DE762BC2952A +:10510000C0A178B30263FF3F63FFC9000C0C536377 +:10511000FF09896078991829D285C9922B729E1D42 +:10512000DE246EB8232DD226991369D00B60000DB2 +:10513000DA6058071A6000170088607D890A9A1A99 +:1051400029729D9C129915CF95DA60C0B658071345 +:105150006551F58D148C18DBD08DD0066A020D6D6B +:1051600051580584D3A09A1464A1DD82A085A1B80A +:10517000AF9F190505470202479518C05163FE60AD +:105180002B6104C08C8931C0A009F950098A386E9E +:10519000B81F2C6066A2CC0C0C472C64667CAB114B +:1051A0009F119E1B8A155805958E1B8F11C0A02A32 +:1051B00064669F1164F0E12912032812096DF91742 +:1051C0002F810300908DAEFE0080889F9200908C0E +:1051D000008088B89900908C65514E8A10851A8B92 +:1051E000301FDE06881229600708580A2C82942D89 +:1051F00061040ECC0C2C86946FDB3C1CDE30AC9C26 +:1052000029C0800B5D50A29909094729C48065D047 +:10521000DA2E600CC0D01FDDEF0CE811AFEEA788CE +:105220002282852DE4CF02420B228685D2A0D10FA7 +:105230008E300E0E4763FDA6A29C0C0C472C640713 +:105240007AB6CD8B602E600A280AFF08E80C6481CC +:105250000E18DE1983168213B33902330B2C341661 +:105260002D350AC02392319F30C020923308B202FC +:1052700008E80292349832C0802864072B600CD270 +:10528000A01CDDD40CBE11A7EE2DE285ACBB28B46A +:10529000CF0D9D0B2DE685D10F8B1888138D30B85F +:1052A0008C0D8F470D4950B4990499100D0D5F0472 +:1052B000DD1009FF029F800DBB029B8165508D852B +:1052C0001AB83AC0F1C0800CF83808084264806B04 +:1052D0001BDDB519DDB629B67E8D18B0DD6DDA059A +:1052E00000A08800C08CC0A063FEF30082138B1660 +:1052F0001DDDC628600AC0E02EC4800D880202B2FF +:105300000B99239F20C0D298229D2122600CB2BB12 +:105310000C2D11A7DD28D28508BB0B18DDAE2BD6CE +:1053200085A8222E24CFD2A0D10F9E1B851A2A6CCD +:10533000748B185BFF178E1B63FEA300C087C090A1 +:105340000AF93879809263FF86C020D10F9E1B2A0C +:105350006C74C0B18D185805398E1B851A63FE7E9A +:10536000886B8213891608BE110ECE0202920B9E24 +:1053700025B4991EDDA19F200E88029822C0EF045B +:10538000D8110E88029824C0E49E21C080D2A02BA0 +:10539000600C2864071CDD8F0CBE11A7EE2DE28582 +:1053A000ACBB28B4CF0D9D0B2DE685D10F000000BE +:1053B0006C1004C020D10F006C10048633C071C083 +:1053C00030600001B13300310400741A04620174CA +:1053D00060F1D10F6C1004022A02033B025BFFF65E +:1053E0001CDD771BDDBFC79F88B009A903098A01AF +:1053F0009AB079801EC0F00FE4311DDD6E0002000E +:105400002BD2821EDDB82AC1020EBB022BD6820A25 +:10541000E431D10F28C102C19009880208084F2841 +:10542000C50208E431D10F006C1004C0C00CE43197 +:1054300012DD631ADD6000020029A28218DDAC1BB8 +:10544000DDAA2621020B990108660129A6822625DC +:105450000206E43114DDA715DDA2236A902326128B +:105460008550242611252613222C40D10F00000040 +:105470006C1008D6102B0A64291AB41ADD4D0D23BE +:10548000111CDD4E0F2511B81898130E551118DD9B +:1054900099AC55A838AA332C80FF2A80FEA933285E +:1054A0008D0129800108AA112880000CAA02088811 +:1054B0001109880208AA1C288C08281604580862BA +:1054C00014DD3F0AA7022441162A30802B1204075C +:1054D000AA2858085DB1338B13B4559A6004AC28E0 +:1054E000B4662C56277B69E016DD769412C050C056 +:1054F000D017DD329D15D370D4102F60802E6082BE +:105500009F169E17881672891A8D128C402A607F0A +:105510000DCC282B3A200CAA2858084BC0B10ABE43 +:10552000372E35408F1772F91A8D128C402A608100 +:105530000DCC282B3A200CAA28580843C0B10ABE2B +:10554000372E3542B233B444B1556952B6B466C051 +:10555000508F15B877D370B2FF9F156EF899D10FA1 +:105560006C1004C021D10F006C1004270A001CDD50 +:10557000111FDD221EDD251DDD0E1ADD501BDD5E37 +:10558000C02824B0006D2A75AA48288080C0916484 +:10559000806100410415DD09C03125502E00361A06 +:1055A0000655010595390C56110C66082962966E50 +:1055B000974D0D590A29922468900812DD42024243 +:1055C0000872993B23629512DD06CB349F3002822C +:1055D000020E4402C092993194329233AD52246249 +:1055E00095C090244C1024669524B0002924A0AACC +:1055F00042292480B177B14404044224B400D10F7D +:10560000D10FD10F6C10041ADCEA2AA00058021C3A +:105610005BFFD5022A02033B025BFFD11BDCE8C91A +:10562000A12CB102C0D40DCC020C0C4F2CB5020C35 +:10563000E431D10FC0A00AE43118DCDE0002002FF3 +:10564000828219DCF12EB10209FF022F86820EE45C +:1056500031D10F006C1004C02002E43114DCD816E4 +:10566000DCD5000200226282234102732F0603E48C +:1056700031C020D10F19DD221ADD212841020A2A6A +:10568000010988012A668228450208E43115DD18DF +:1056900012DD1D25461DD10F6C1004292006289C03 +:1056A000F96480A02A9CFD65A0968A288D262F0A81 +:1056B000087AD9042B221FC8BD2C206464C0812E17 +:1056C00022090EAE0C66E0782B200C1EDCBA0CBC56 +:1056D00011AECC28C28619DCB878F3026000AD099F +:1056E000B90A2992A36890082E220009EE0C65E001 +:1056F0009B29C2851FDCC26490929F90C0E41FDC8E +:10570000CE9E9128200AC0E09E930F88029892882E +:10571000200F880298942F20079A979D962F950A1C +:105720002E240728200629206468833328C2851286 +:10573000DCA9288C20A2B22E24CF28C685C020D177 +:105740000FC020D10F2A206A0111020A2A4165AF39 +:1057500052DA20C0B05805E464AFE5C021D10F0093 +:10576000649FC81FDC962D20168FF209DD0C00F116 +:105770000400DD1AADAD9D2912DC9728C285A2B2C6 +:105780002E24CF288C2028C685C020D10FC021D13F +:105790000F0000006C1004260A001BDCDB15DC8700 +:1057A00028206517DC84288CFE6480940C4D110D34 +:1057B000BD082CD2F52BD2F42ED2F77CB13DB4BB70 +:1057C0002BD6F47BE9052BD2F62BD6F47CB92C2A08 +:1057D000D2F62AD6F52AD6F406E431000200287261 +:1057E000822AFAFF004104290A012F510200991A66 +:1057F0000A99030988012876820FE4312624652B53 +:10580000D2F48E5A2CD2F5B0EE9E5A7BCB1629D20A +:10581000F62FD2F70CB80C09FF0C08FF0C0F2F1451 +:10582000C8F96000320BCA0C0A2A14CEA92B510207 +:10583000C0C20CBB020B0B4F2B55020BE431D10F36 +:1058400000DB30DA205BFF941BDCB064AF5D0C4DF5 +:1058500011ADBD63FFA8000006E4310002002F7205 +:105860008218DC6E2E510208FF022F76820EE43180 +:10587000D10F00006C1004C03003E43116DC4E156B +:10588000DC4F00020024628274472118DCA0875A92 +:10589000084801286682CD7319DC9E0C2A11AA994A +:1058A0002292832992847291038220CC292B510267 +:1058B0000BE431C020D10F001FDC972E51020FEEF8 +:1058C000012E55020EE431B02DB17C9C5A12DC92AF +:1058D00008DD112D5619D10F6C10061BDC351EDCAE +:1058E0003722B0001ADC8E6F23721DDC75C0481899 +:1058F000DC8D1FDC8BDC10D5C083F000808600506F +:105900008A6D4A4F0F35110D34092440800B560A19 +:10591000296294B1330E55092251400F44110C44B1 +:105920000A874009A80C02883622514107883608A8 +:10593000770CA8992966949740296295874109A810 +:105940000C02883607883608770CA899296695973F +:1059500041030342B13808084298F0D10F1CDC72B1 +:1059600013DC7327B0002332B5647057C091C0D0E8 +:1059700016DC7115DC6FC0402AC00003884328C4C0 +:10598000006D793C004104B14400971A7780148E71 +:10599000502FB2952DB695AFEE2EED2006EE369E29 +:1059A0005060001877A00983509D5023B695600081 +:1059B0000223B295223D2006223622B695B455B870 +:1059C000BBD10F0003884328C400D10F6C1004C062 +:1059D0004004E43115DC59000200885013DC58CB38 +:1059E000815BFFBD1CDC570C2D11ADCC2BC2822A74 +:1059F000C28394507BAB142EC28429C2850ABD0C8D +:105A00000E990C0D990C0929146000050BA90C09BD +:105A10002914993015DBEA2A51020AE4312A2CFCB8 +:105A200058004B2B32000AA2022BBCFF9B30CCB695 +:105A3000C8A4D2A0D10F000004E4311EDBDE0002B6 +:105A4000002DE2822FBAFF2C51020FDD012DE682DC +:105A50000CE431D10F0000006C1004D10F000000E5 +:105A60006C1004C020D10F006C100413DC36C0D1C0 +:105A700003230923318DC0A06F340260008D19DB30 +:105A8000CD1BDBCE17DC2F0C2811A87726728325BF +:105A900072822CFAFF76514788502E7285255C045D +:105AA00025768275E9052572842576827659292E18 +:105AB00072842E76822E76830AE4310002002392CD +:105AC000820021042FB10200D61A0C6603063301AE +:105AD0002396820FE43126728325728260000200D1 +:105AE000D8A07659220AE4310002002392820021D4 +:105AF0000400D21A2FB1020C220302320122968234 +:105B00000FE431D280D10F00D280D10FC020D10F4D +:105B10006C1004DB30862015DBA6280A002825023D +:105B2000DA2028B0002CB00705880A28824C2D0AFC +:105B3000010B8000DBA065AFE61ADB9F0A4A0A2949 +:105B4000A2A3C7BF769101D10F2BA6A3D10F00004E +:105B50006C1004C0D1C7CF1BDB9919DB9617DB94FF +:105B60000C2811A87786758574C0A076516288507C +:105B70008E77B455957475E90385769574765927B3 +:105B80008F769F759F740AE431000200239282B4DD +:105B90002E2FB10200E10400D61A0C660306330171 +:105BA0002396820FE431867583747639280AE431AE +:105BB0000002002E9282B42200210424B10200DFF0 +:105BC0001A0CFF030FEE012E968204E431D280D12D +:105BD0000FD8A07651D6D280D10F00006C100429C6 +:105BE0000A801EDB9A1FDB9A1CDB730C2B11ACBBEB +:105BF0002C2CFC2DB2850FCC029ED19CD0C051C064 +:105C00007013DB9614DB9518DB932AB285A8280461 +:105C1000240A234691A986B8AA2AB685A98827848A +:105C20009F25649FD10F00006C100419DBC70C2A5C +:105C300011A9A98990C484798B761BDBB5ABAC2AFA +:105C4000C2832CC2847AC1688AA02BBC30D3A064E2 +:105C5000A05E0B2B0A2CB2A319DB7F68C0071DDBEB +:105C6000BBD30F7DC94AA929299D0129901F68919D +:105C70003270A603D3A0CA9E689210C7AF2AB6A3FB +:105C80002A2CFC5BFFB3D230D10F000013DBB10331 +:105C9000A3018C311DDB510C8C140DCC012CB6A34F +:105CA00063FFDC00C020D10FDA205BFFCCC020D125 +:105CB0000FC020D10F0000006C1004DB30C0D019E1 +:105CC000DB3CDA2028300022300708481209880A15 +:105CD00028824CDC200B80001BDB370C4A11ABAA5E +:105CE00029A28409290B29A684D10F006C1004C0B5 +:105CF0004118DB3017DB320C2611A727277030A89C +:105D000066256286007104A35500441A7541482235 +:105D1000628415DB5202320BC922882117DB2F085F +:105D20008414074401754905C834C020D10FD10F30 +:105D30000809471DDB86C0B28E201FDB1D0E0E43F7 +:105D4000AFEC2BC4A00FEE0A2DE6242A6284C020FB +:105D50000A990B296684D10FC020D10F6C1004DB87 +:105D600030C0D018DB13DA20253000223007085865 +:105D70000A28824CDC200B80008931709E121BDBCC +:105D80000D0C4A11ABAA29A28409290B29A684D19A +:105D90000F09C95268532600910418DB08C0A12FCF +:105DA000811200AA1A0AFF022F85121EDB020C4D77 +:105DB00011AEDD2CD2840C2C0B2CD684D10FC081DB +:105DC0001FDAFFB89A0A0A472EF11200A1040088D0 +:105DD0001A08EE022EF5121DDAF70C4C11ADCC2B81 +:105DE000C2840B2B0B2BC684D10F00006C1004DB7C +:105DF00030C0D019DAEFDA202830002230070988C5 +:105E00000A28824CDC200B80001CDAEA0C4B11AC17 +:105E1000BB2AB2840A2A0B2AB684D10F6C1004C0A4 +:105E20004118DAE416DAE60C2711A626266030A817 +:105E300072252286006104A35500441A7541082288 +:105E4000228402320BD10F00C020D10F6C10041538 +:105E5000DB410249142956112452120208430F88CB +:105E600011C07300810400361A008104C78F0077C7 +:105E70001A087703074401064402245612D10F0082 +:105E80006C10066E23026000AC6420A7C0A08510D1 +:105E900013DB1916DB30C040A6AA2BA2AE0B1941AA +:105EA00064906668915D68925268933C2AA2AA2821 +:105EB0003C7F288C7F0A0A4D2980012880002AAC6B +:105EC000F20888110988027589462B3D0129B00026 +:105ED0002BB0010899110B99027A9934B8332A2A08 +:105EE00000B1447249B160004A7FBF0715DB1B63F4 +:105EF000FFB90000253AE863FFB10000253AE863E6 +:105F0000FFA90000250A6463FFA1C05A63FF9C003B +:105F100000705F082534FF058C142C34FE70AF0B25 +:105F20000A8D142E3D012AE4012DE400DA405BFDC8 +:105F30005063FFA7D10FD10F6C10041ADAA019DA41 +:105F40009D1CDB061BDB07C080C07160000D0000DC +:105F50000022A430B1AA299C107B915F26928679F9 +:105F6000C2156E6262C0206D080AB12200210400D1 +:105F7000741A764BDB63FFEE2292850D63110325C5 +:105F800014645FCFD650032D436DD9039820B422FB +:105F90000644146D49229820982198229823982429 +:105FA00098259826982798289829982A982B982CED +:105FB000982D982E982F222C4063FF971EDA7E276B +:105FC000E68027E681D10F00C02063FF8300000038 +:105FD0006C1004C062C04112DA791ADA7513DAE182 +:105FE0002AA00023322D19DADB2BACFE2992AE6EEB +:105FF000A30260008E090E402D1AC2C2CD0EDC39FC +:106000002C251664B0895BFF9E15DAD71ADAD12BDE +:106010003AE80A3A0158058C2B21160ABB28D3A06E +:106020009B505805A32B52000ABB082A0A005805AA +:10603000A215DACE2D21022C3AE80C3C2804DD0210 +:106040002D25029C5058059A8B50AABBC0A158051B +:106050009A1CDAC72D21020C3C2806DD0213DAC592 +:106060002D25029C305805928B30AABBC0A2580542 +:10607000922A2102C0B40BAA020A0A4F2A2502580A +:1060800005A6D10F242423C3CC2C251663FF76004C +:1060900018DABD1CDAB919DABA1BDAB817DA8B8547 +:1060A000202E0AFD1FDAB92D202E24F47A24F47E46 +:1060B00024F4820EDD0124F4862E0AF70755280603 +:1060C000DD02C0750EDD01050506AB5BA959C0E810 +:1060D000AC5C24C4AB0EDD0227C4AC2E0ADFA8558D +:1060E00027B4EC0EDD0124B4EBC2E027942C0EDDC6 +:1060F0000224942B2E0A800D0D4627546C24546BD9 +:106100000EDD022D242E63FEFC0000006C10042A1C +:106110000A302B0A035BFF4D12DA8FC39029261633 +:10612000C3A1C0B3C08A2826175BFF48C03CC3B1D7 +:106130002B26161ADA222AA02023261764A079C358 +:10614000A2C0B15BFF42C3A2C0B15BFF40C3C22C7F +:106150002616C2AFC0B12326175BFF3CC28F28268C +:1061600016C0FE2F2617C2E22E26162A0AA1C0B19B +:10617000C0D82D26175BFF352A0AA12A2616C3A6EA +:10618000C0B3C1922926175BFF31C3C62C2616C1A6 +:10619000B32A0AA22B2617C0B35BFF2C290AA22917 +:1061A0002616C185282617C2FB2F2616C0E72E26E5 +:1061B000171DDA762D2610D10FC3A2C0B35BFF23C3 +:1061C00063FF82006C10041CDA3F1BDA2C18DA70B3 +:1061D00017DA7116DA7115DA71C0E0C0D414DA3B3F +:1061E0001FD9F7C0288FF06D2A36DAC0D9C07C5B82 +:1061F000020FC90C1CDA350C9C28A8C3A6C22A368B +:10620000802A2584A4C2A7CC2D248C2B248A2B245D +:10621000872E248BB1BB2E369F2C369E2C369DB1FB +:10622000AC1CDA161BDA5FC0286D2A33DAC0D9C07D +:106230007C5B020FC90C1CDA240C9C28A8C3A6C2E4 +:106240002A36802B2584A4C2B1BBA7CC2D248C2E4A +:10625000248B2A248A2E369F2C369E2C369DB1AC58 +:10626000C07919DA141BDA5113DA4F1ADA4F18DA37 +:106270005014DA1516DA5004F42812DA4F04660CBA +:10628000040506A252A858AA5AA3539B3029A50078 +:1062900027848AC091C0A52A848C29848B17DA4868 +:1062A00018DA47A75726361D26361E2E361F16DA51 +:1062B0004513DA45A65504330C2826C82E75002D43 +:1062C00054AC2E54AB2E54AA2326E62326E52E26C4 +:1062D000E7D10F006C100613DA2317DA1E24723D83 +:1062E0002232937F2F0B6D08052832937F8F026334 +:1062F000FFF3C0C4C0B01AD9B1C051D94004593954 +:1063000029A4206E44020BB502C3281ED9ACDDB00F +:1063100025E422052D392DE421C0501EDA2C19DA8E +:106320001C18DA1C16DA1E1DDA2A94102A72451778 +:10633000D9E76DA94BD450B3557A5B17DF50756B15 +:10634000071FD99E8FF00F5F0C12D9DF02F228AE23 +:106350002222D681D54013D9DC746B0715D99885D4 +:106360005005450C035328B145A73FA832A9332255 +:10637000369D22369E2436802B369F2BF48B2CF4B0 +:106380008C14D9F824424DC030041414C84C6D0844 +:1063900006B133041414C84263FFF20015D985C452 +:1063A000400031041AD986C0D193A200DD1AC13849 +:1063B000B0DD9DA318D9EC2B824D29824E29A51C56 +:1063C0002882537A871E2C54008E106FE45D12D9F8 +:1063D0007B2F211D23211C2F251B04330C23251C5F +:1063E00023251AD10FC06218D9DB88807E87D9890E +:1063F000102654006F94191BD9712AB11C0A1A1463 +:1064000004AA0C2AB51C2AB51D2AB51A2AB51BD117 +:106410000F1BD96A2AB11C0A1A1403AA0C2AB51C2C +:106420002AB51D2AB51A2AB51BD10F001CD9642B19 +:10643000C11D2DC11C2BC51B03DD0C2DC51C2DC57D +:106440001AD10F006C100619D95D14D9C212D9C522 +:1064500015D9E0C73FC0E02E56A82E56A92E56AA41 +:106460002E56AB23262918D985DB101CD9DAC0D4C7 +:106470002A42452D16019C1000B0890A880C2896E6 +:10648000005BFF942B22E318D94D0B5B149B842AED +:1064900022E48B84B1AA0A5A140BAA0C9A852922E9 +:1064A000E509591499862F22CD0F5F149F875BFF52 +:1064B000455BFF1623463BC1B01DD9401CD99E2A1F +:1064C000D1022C463A0BAA020A0A4F2AD5025804D6 +:1064D000925BFEBF5BFE98C050C0B016D93614D98F +:1064E0003E17D9AEC0C0C73E93122C262DC03060D7 +:1064F00000440000007F9F0FB155091914659FF4F7 +:10650000C0500AA9027FA7EF18D92ADA5008580A02 +:1065100028822C2B0A000B8000005104D2A0C091CD +:10652000C7AF00991A0A99039912CE3864206BD329 +:10653000202B20072516032C12022A62827CA863D6 +:1065400018D91C01110208580A28822CDA500B8035 +:1065500000D2A0643FD58A310A8A1404AA01C82A4D +:106560002B22010B8B1404BB017BA945DDA07A7B98 +:10657000081DD9122DD2000DAD0CDB3019D90D1A22 +:10658000D95288130ADA28DC801DD99009880A2894 +:10659000823C0DAA080B8000652F93D320C0B06306 +:1065A000FF9400007FAF34B1550050040A0919630D +:1065B000FF42DAB07B7B081AD9012AA2000ABA0C82 +:1065C0001BD9428C310BAB280C8A141CD980ACBB74 +:1065D0001CD98004AA012BC68163FF8F645F60C051 +:1065E00050C0B0C7CE9C1263FF5500006C1004274A +:1065F000221EC08008E4311BD8EF0002002AB282BC +:1066000019D8EF003104C06100661A2991020A6AA4 +:10661000022AB68209E43115D94A0C3811A8532848 +:1066200032822432842A8CFC7841102921022A36B5 +:106630008297A0096902292502D10F002B21022C83 +:1066400032850B6B022CCCFC2C368297C02B25029A +:10665000D10F00006C1004C0E71DD8D21CD8D40D97 +:106660004911D7208B228A200B4B0BD2A007A80CF4 +:106670009B72288CF4C8346F8E026000A31FD8CAA6 +:10668000A298AF7B78B334C93DC081C0F0028F3887 +:106690000F0F42C9FA2CD67ED5206D4A05003088EE +:1066A00000508C887008980878B16DD2A09870D18D +:1066B0000FC0F0038F387FE0DE63FFD8027B0CAFA2 +:1066C000BB0B990C643047D830C0F1C05002F5388C +:1066D0000505426450792CD67E0B36122F6C100FB4 +:1066E0004F366DFA0500808800208C06440CC0816E +:1066F000C05003B208237C0C038538050542645062 +:106700005A2CD67ED30F6D4A0500208800308CD2DB +:10671000A0A798BC889870D10FD2A0BC799970D1ED +:106720000FD2302BAD08C0F1C0500BF53805054233 +:10673000CB542CD67E083F14260A100F660C064652 +:10674000366D6A0500208800B08C827063FF2D00D2 +:10675000C05003F53875E08063FF7A00C0600286A0 +:106760003876E09F63FF9900C05003F53875E0C4A8 +:1067700063FFBE006C1004D62068520F695324DA00 +:1067800020DB30DC405800F3D2A0D10FDA20DB3020 +:10679000DC405800F09A2424240EC02122640FC04B +:1067A00020D10F00B83BB04C2A2C7489242D200E28 +:1067B0002E200FA4DDB1EE2E240FB0DD2D240E28E7 +:1067C00090072D9003A488B088B1DD2D9403289400 +:1067D000075BFFA069511DC0E082242A600F18D812 +:1067E000FE2A240329600E8F2029240708FF029F18 +:1067F000209E64D10FC020D10F0000006C100494C3 +:106800002319D8F6C0B3083A110BAA02992019D857 +:10681000699A2116D867C05028929D2564A2288CB9 +:106820001828969DD10F00006C1004282066C038EF +:10683000232406B788282466D10F00006C100603B5 +:106840005A0C0D36110D5C11D8208B2282210CBB05 +:106850000C06550F9B8202320B928113D853D9201C +:10686000A38F6450561CD84FC0D71BD850A256C017 +:10687000E1C09004E93809094276F34F044302CAA3 +:10688000912BC67ED30F6DAA0500208800308C891D +:1068900081A95909FA0C64A07D99818A8264A00FAC +:1068A000D290D10FC06002E63876D0D763FFD10016 +:1068B000C020BC89998199809282D10F7F230429BD +:1068C0002DF8998165BFD863FFE50000028F0CA306 +:1068D000FF0F3312931003AA0CD3406490402BC6D1 +:1068E0007E8610D30F6D6A0500208800308CBC8234 +:1068F000C090A4F3C041034938090942CA9B2BC682 +:106900007E6DAA0500208800308C0F590CA989BC27 +:1069100099998163FF8400BC89998163FF7C00C0E1 +:106920006002E63876D0B963FFB300C07002473822 +:1069300077D0CD63FFC700006C100414D82AC15271 +:10694000A424CA3128221D73811C292102659016B6 +:106950002A300075A912022A02033B022C3007C01C +:10696000D25801D0653FDCD10F2B300703BB0B0B96 +:10697000BA0274B3022ABDF8D3A063FFC4000000BA +:106980006C1004292006C0706E9741292102C08F27 +:106990002A2014C0B62B240606AA022A24147980C1 +:1069A000022725022A221E2C221D7AC10EC8ABDA2C +:1069B00020DB302C0A00033D025BF80D6450742D7F +:1069C00021020D0D4CC9D3C020D10F00002E9CFB1D +:1069D00064E0822F21020F0F4C65F0911AD7F61C4C +:1069E000D7F429A29EC08A798B5D2BC22668B00499 +:1069F0008D207BD95229A29DC0F364904A97901DA7 +:106A0000D8062E21049D9608EE110FEE029E979E49 +:106A10009118D802C0E527C4A22E24062BA29D2FD0 +:106A200021022BBC3008FF022F25022BA69DC0207F +:106A3000D10F00002F300068F939DA20DB30044C28 +:106A40000258004463FF7700022A022B0A0658000E +:106A5000D3220A00D10F6550102830006889240223 +:106A60002A02033B02DC4058003BC020D10FD27009 +:106A7000D10F00002A2C74033B02044C025BFEF58C +:106A800063FF3B00DB30DC402A2C745BFEF2C0204D +:106A9000D10F00006C1004C83F89268829A399995A +:106AA0002609880C080848282525CC52C020D10F7B +:106AB000DB402A2C745BF936D2A0D10F6C1004D8BD +:106AC00020D73082220D451105220C928264207459 +:106AD00007420B13D7B5D420A383732302242DF8C8 +:106AE000858074514CBC82C0906D081600408800AF +:106AF000708C773903D720C0918680743901D420F7 +:106B000074610263FFE2CA98C097C0411BD835C0C8 +:106B1000A00B8B0C0B4A380A0A42C9AA1DD7A21C2B +:106B2000D7A32CD67EC140D30F6D4A050020880024 +:106B3000308C9780D270D10FBC8FC0E00F4E387E62 +:106B400090E263FFD6BC8292819280C0209282D173 +:106B50000F0000006C1006C0D71CD7921BD7940DF5 +:106B60004911D7202E221F28221D0E4E0BD280073E +:106B70008A0C2E761F2AAC80C8346FAE026000CB20 +:106B80002F0A801AD798A29EAA7A7EA33FC93FC037 +:106B9000E1C05002E538050542CA552BC67EDB2010 +:106BA000D30F6D4A0500308800B08C2E721DAE9E4A +:106BB0000EA50C645086D2802E761DC091298403C8 +:106BC000D10FC05003E53875D0D363FFCD15D785FD +:106BD000027E0CA5EE643051C0A1250A0002A53842 +:106BE000033A020505426450922BC67E0E3512957B +:106BF00010255C10054536D30F6D5A0500A088009E +:106C0000208CC0A1A3E2C05023FA8003730C03A51B +:106C100038AF730505426450722BC67E851005455A +:106C20000C6D5A0500208800308CD280C0A10E9BCC +:106C30000CAB7BAFBB2B761D2A8403D10FD280C057 +:106C4000C1AF7D2D761D2C8403D10F00D2302E8D47 +:106C500008C0F1C0500EF538050542CB592BC67E51 +:106C60000A3F14C1600F660C064636D30F6D6A05E5 +:106C700000208800E08C22721D63FF03C061C050B9 +:106C800003653875D80263FF6263FF5CC05002A5DC +:106C90003875D08763FF8100C06003F63876D0BFB7 +:106CA00063FFB9006C10042A201529201614D7435D +:106CB0000A990CCB9D2E200B04ED092BD11C8F289B +:106CC00009BC36ACAA0CBB0C2BD51C0A0A472A24DB +:106CD00015CAAF8B438942B0A800910400881AA856 +:106CE000FF0FBB029B278F260FB80C783B1AC020E2 +:106CF000D10F0000292102C0A20A9902292502C051 +:106D000021D10F008B2763FFDC2BD11C0CAA0C0AAE +:106D10000A472A2415ACBB2BD51CC9AE8B438C2843 +:106D20008F42B0AD00F10400DD1AADCC0CBB029B6C +:106D300027DA20B7EB580019C021D10F9F2763FF36 +:106D4000EF0000006C100428203C643047053060E0 +:106D500000073E01053EB156076539054928C77F42 +:106D6000A933030641076603B166060641A6337ED2 +:106D7000871E222125291AFC732B1502380C098144 +:106D80006000063E01023EB12406423903220AD1C8 +:106D90000FD230D10FC05163FFC000006C10042728 +:106DA000221EC08008E4311DD7030002002CD282CD +:106DB0001BD703003104C06100661A2BB1020C6CB2 +:106DC000022CD6820BE43119D7870C3A11AA9328EA +:106DD00032829780253282243284B45525368275DA +:106DE000410A292102096902292502D10F2A21021B +:106DF0002B32830A6A022B36822A2502D10F000029 +:106E00006C100418D6EC0C2711087708267286251A +:106E10003C04765B1315D6E805220A2222A36820DB +:106E200002742904227285D10FC020D10F00000006 +:106E30006C100419D6EB27221EC08009770208E4E3 +:106E4000311DD6DC0002002CD2821BD6DC003104BE +:106E5000C06100661A2BB1020C6C022CD6820BE4C6 +:106E60003119D7600C3A11AA9328328297802532C3 +:106E700082243284B45525368275410B2A21020AB8 +:106E80006A022A2502D10F002B21022C32830B6BC0 +:106E9000022C36822B2502D10F0000006C10041B3F +:106EA000D6C50C2A11ABAA29A286B438798B221B2D +:106EB000D6C219D6E80B2B0A2BB2A309290868B051 +:106EC0000274B90D299D0129901F6E920822A28596 +:106ED000D10FC020D10FC892C020D10FDA205BEEB5 +:106EE000B3C020D10F0000006C100414D6B22842A9 +:106EF0009E19D6AF6F88026000BA29922668900763 +:106F00008A2009AA0C65A0AC2A429DC0DC64A0A41A +:106F10002B200C19D6A90CBC11A4CC2EC28609B901 +:106F20000A7ED30260009A2992A36890078D2009F7 +:106F3000DD0C65D08C25C2856450862D2104C030BF +:106F40006ED80D2C2066B8CC0C0C472C246665C07E +:106F50007B1CD72518D6AF1AD6A619D6B61DD6AB28 +:106F6000C0E49E519D508F209357935599539A5644 +:106F70009A5408FF021AD6C29F5288269F5A9E59D9 +:106F80009D58935E9C5D935C9A5B08084805881148 +:106F9000985FC0D81FD6900CB911A499289285AFDC +:106FA000BF23F4CF288C402896858E262D24069E5C +:106FB00029C020D10FCA33DA20C0B65BFF78C72FB3 +:106FC000D10FC93ADA205BFF75C72FD10FDBD05B39 +:106FD000FE0B2324662B200C63FF7500C72FD10FF7 +:106FE000C72FD10F6C1004C85B29200668941C6859 +:106FF0009607C020D10FC020D10FDA20DB30DC4053 +:10700000DD502E0A005BFE5ED2A0D10F2E200C18A0 +:10701000D6690CEF11A8FF29F286C088798B791AFE +:10702000D6660AEA0A2AA2A368A0048B207AB96865 +:1070300023F2856430621BD670290A802C206828D0 +:1070400020672D21040B881104DD1108DD020DCC11 +:1070500002C0842D4A100DCC021DD66898319D3097 +:107060008A2B99379C340BAA02C0C09C359C369A57 +:10707000322A2C74DB4028F285C0D3288C2028F6D5 +:10708000852C25042D24061FD653DD40AFEE2CE4BD +:10709000CF5BFDEAD2A0D10F00DA20DBE05BFF3F3F +:1070A000C020D10F6C100AD6302A200624160128E1 +:1070B000ACF86583862B2122C0F22A2124CC572AE2 +:1070C000AC010A0A4F2A25247ABB0260037F2C21D7 +:1070D000020C0C4C65C3192E22158D32C0910EDDA9 +:1070E0000C65D39088381ED63364836B8C37C0B858 +:1070F000C0960CB9399914B49A9A120D9911991332 +:107100008F6718D62EC9FB2880217F83168B142CFD +:1071100022002A200C5BFF61D4A064A3B38F6760B8 +:10712000002800002B200C89120CBA11AEAA2CA248 +:10713000861DD6217C9B3E0DBD0A2DD2A368D004AE +:1071400088207D893024A28564436427212E07F797 +:107150003607F90C6F9D01D7F0DA20DB70C1C42D22 +:10716000211F5BFEF889268827DDA009880C7A8B11 +:10717000179A10600006C04063FFCC0000DA208B35 +:10718000105BFEC88D1065A267C0E09E488C649CB1 +:10719000498B658A669B4A9A4B97458F677F730236 +:1071A000600120CD529D10DA20DB302C12015BFEF5 +:1071B000698D10C051D6A08FA7C0C08A68974D9A1C +:1071C0004C8869896A984E994F8E6A8A69AE7E7733 +:1071D000EB01B1AA9E6A9A698B60C0A00B8E1477EE +:1071E000B701C0A1C091C08493159D179516C0D05A +:1071F00025203CC030085801089338C0820833105D +:10720000085B010535400B9D3807DD100BAB100EF8 +:1072100019402A211F07991003DD020DBB020553F7 +:10722000100933020A55112921250A2A14092914A3 +:107230000499110A99020933028A2B2921040BAA05 +:10724000021BD66A0899110955020855020BAA02B9 +:107250009A408920881408991109880219D5EA1DD5 +:10726000D66409880298418B2A9346954783150D69 +:10727000BB0285168D179B448A658966AACAA97CBC +:1072800077CB01B1AA07FB0C9C669A6588268E29EC +:10729000AD87972607EE0C0E0E482E25259B672BF3 +:1072A000200C87131ED5C40CB911AE99289285A75E +:1072B0008828968517D5C8C090A7BB29B4CF871852 +:1072C00063FE3C008C60C0E0C091C0F0C034C0B828 +:1072D0002A210428203C08AA110B8B0103830103F7 +:1072E0009F380B9B39C03208FF10038801089E3875 +:1072F0000C881407EE100FEE020388010898390578 +:10730000BF1029211F0ABB1107881008FF020BAA12 +:107310000218D5BC09291403AA022B212583200BAE +:107320002B1404BB110833110FBB020B99028B14F1 +:107330008F2A0B33020833028B2B64708688689780 +:107340004D984C8769886A93419946974E984FC0EB +:107350007077C701C0719A4718D6260B7C100CECC9 +:107360000208F802984418D6230CBC0208CC029CF0 +:10737000402A200C295CFEC0801FD58E1CD5960C9F +:10738000AE112B2124ACAAAFEEB0BB8F132CE2853B +:1073900028A4CFAFCC2CE6852A22152B2524B1AA10 +:1073A0002A26156490DBC9D28F262E22090DFF08EC +:1073B0002F26060FEE0C0E0E482E25256550E4C034 +:1073C00020D10F00C07093419F4499469A4777C7D8 +:1073D0000A1CD57A2CC022C0810C87381CD6070B1A +:1073E000781008E80208B8020C8802984063FF8011 +:1073F00000CC57DA20DB608C115BFDD629210268B6 +:107400009806689403C020D10F2B221EC0A0292209 +:107410001D2A25027B9901C0B064BFE813D5652CF5 +:10742000B00728B000DA2003880A28824CC0D10BAC +:107430008000DBA065AFE763FFCA000068A779DAC8 +:1074400020DB30DC40DD505BFEE7D2A0D10FC16D08 +:10745000C19D29252C60000429252CD6902624675F +:107460002F2468DA20DB308C11DD502E0A805BFD82 +:1074700044D2A0D10FC168C1A82A252C63FFDD002A +:107480000000C8DF8C268B29ADCC9C260CBB0C0BD6 +:107490000B482B25252A2C74DB602C12015BFD8701 +:1074A000D2A0D10F2A2C748B115BF6B9D2A0D10FC8 +:1074B000DA205BFE3A63FF3800DA20C0B15BFE8A57 +:1074C00064ABF1655F352D2124B1DD2D252463FFEB +:1074D0001FDA202B200C5BFE5663FF1412D5C882E6 +:1074E00020028257C82163FFFC12D5C403E8300490 +:1074F000EE3005B13093209421952263FFFC00000B +:1075000010D5C0910092019302940311D597821077 +:1075100001EA30A21101F031C04004E4160002007B +:1075200011D5B98210234A00032202921011D5828C +:10753000C021921004E4318403830282018100009F +:10754000D23001230000000010D5B09100920193C9 +:1075500002940311D586821001EA30A21101F131A3 +:10756000C04004E41600020011D5A7821013D52BE9 +:10757000032202921004E431840383028201810019 +:1075800000D330013300000010D5A19100810165C6 +:10759000104981026510448103CF1F920193029428 +:1075A0000311D574821001EA30A21101F231C040FA +:1075B00004E41600020011D593821013D5130322A0 +:1075C00002921004E431840383028201C01091030B +:1075D00091029101810000D43001430012D542C0D4 +:1075E0003028374028374428374828374C233D0176 +:1075F0007233ED03020063FFFC00000010D585919B +:107600000092019302940311D5838210921011D538 +:10761000348310032202921011D58012D5469210A5 +:10762000C04004E41600020011D577821013D52D56 +:10763000032202921004E431840383028201810058 +:1076400000D53001530000006C10026E322FD6209E +:10765000056F04043F04745B2A05440C00410400D8 +:10766000331A220A006D490D73630403660CB122BC +:107670000F2211031314736302222C01D10FC83B94 +:10768000D10F000073630CC021D10F000000000077 +:1076900044495630C020D10F6C10020040046B4C9E +:1076A00007032318020219D10F020319C020D10FBA +:1076B0006C100202EA30D10F6C1002CC2503F031BD +:1076C00060000F006F220503F1316000056F230594 +:1076D00003F231000200D10F6C1002CC2502F03011 +:1076E000D10F00006F220402F130D10F6F2304028A +:1076F000F230D10FC020D10F6C1002220A20230AD1 +:10770000006D280E28374028374428374828374C42 +:10771000233D01030200D10F6C100202E431D10FAE +:107720000A004368656C73696F20465720444542E0 +:1077300055473D3020284275696C74204672692097 +:107740004D61792020382031363A30373A333620AF +:107750005044542032303039206F6E20636C656F96 +:1077600070617472612E6173696364657369676EB9 +:107770006572732E636F6D3A2F686F6D652F666546 +:107780006C69782F772F66775F372E31292C20563A +:10779000657273696F6E2054337878203030372EDD +:1077A00030342E3030202D203130303730343030EE +:0877B000100704000071489469 +:00000001FF -- cgit v1.2.3-70-g09d2 From 56c8f140719e6f62836fb645d3fd96c6289907fb Mon Sep 17 00:00:00 2001 From: Divy Le Ray Date: Wed, 3 Jun 2009 06:19:15 +0000 Subject: cxgb3: minor aq100x phy fixes Use generic MDIO generic values. Based on Ben Hutchings'review comments. Signed-off-by: Divy Le Ray Signed-off-by: David S. Miller --- drivers/net/cxgb3/aq100x.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/cxgb3/aq100x.c b/drivers/net/cxgb3/aq100x.c index c51e50d925d..b1fd5bf836e 100644 --- a/drivers/net/cxgb3/aq100x.c +++ b/drivers/net/cxgb3/aq100x.c @@ -43,8 +43,6 @@ enum { AQ_XAUI_TX_CFG = 0xe400, /* MDIO_DEV_ANEG registers */ - AQ_100M_CTRL = 0x0010, - AQ_10G_CTRL = 0x0020, AQ_1G_CTRL = 0xc400, AQ_ANEG_STAT = 0xc800, @@ -54,14 +52,15 @@ enum { AQ_IMASK_GLOBAL = 0xff00, }; -#define AQBIT(x) (1 << (x)) -#define IMASK_PMA AQBIT(0x2) -#define IMASK_GLOBAL AQBIT(0xf) -#define ADV_1G_FULL AQBIT(0xf) -#define ADV_1G_HALF AQBIT(0xe) -#define ADV_10G_FULL AQBIT(0xc) -#define AQ_RESET (AQBIT(0xe) | AQBIT(0xf)) -#define AQ_LOWPOWER AQBIT(0xb) +enum { + IMASK_PMA = 1 << 2, + IMASK_GLOBAL = 1 << 15, + ADV_1G_FULL = 1 << 15, + ADV_1G_HALF = 1 << 14, + ADV_10G_FULL = 1 << 12, + AQ_RESET = (1 << 14) | (1 << 15), + AQ_LOWPOWER = 1 << 12, +}; static int aq100x_reset(struct cphy *phy, int wait) { @@ -160,7 +159,7 @@ static int aq100x_advertise(struct cphy *phy, unsigned int advertise_map) adv = 0; if (advertise_map & ADVERTISED_10000baseT_Full) adv |= ADV_10G_FULL; - err = t3_mdio_change_bits(phy, MDIO_MMD_AN, AQ_10G_CTRL, + err = t3_mdio_change_bits(phy, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL, ADV_10G_FULL, adv); if (err) return err; @@ -186,7 +185,8 @@ static int aq100x_advertise(struct cphy *phy, unsigned int advertise_map) adv |= ADVERTISE_PAUSE_CAP; if (advertise_map & ADVERTISED_Asym_Pause) adv |= ADVERTISE_PAUSE_ASYM; - err = t3_mdio_change_bits(phy, MDIO_MMD_AN, AQ_100M_CTRL, 0xfe0, adv); + err = t3_mdio_change_bits(phy, MDIO_MMD_AN, MDIO_AN_ADVERTISE, + 0xfe0, adv); return err; } -- cgit v1.2.3-70-g09d2 From 74b793e1ef79edc49bc031a88d62f1e93fc6b30f Mon Sep 17 00:00:00 2001 From: Divy Le Ray Date: Tue, 9 Jun 2009 23:25:21 +0000 Subject: cxgb3: remove __GFP_NOFAIL usage Pre-allocate a skb at init time to be used for control messages to the HW if skb allocation fails. Tolerate failures to send messages initializing some memories at the cost of parity error detection for these memories. Retry sending connection id release messages if both alloc_skb(GFP_ATOMIC) and alloc_skb(GFP_KERNEL) fail. Do not bring the interface up if messages binding queue set to port fail to be sent. Signed-off-by: Divy Le Ray Signed-off-by: David S. Miller --- drivers/net/cxgb3/adapter.h | 2 + drivers/net/cxgb3/cxgb3_main.c | 78 ++++++++++++++++++++++++++++++++++++--- drivers/net/cxgb3/cxgb3_offload.c | 27 +++++++++++++- drivers/net/cxgb3/cxgb3_offload.h | 3 ++ 4 files changed, 103 insertions(+), 7 deletions(-) (limited to 'drivers/net/cxgb3') diff --git a/drivers/net/cxgb3/adapter.h b/drivers/net/cxgb3/adapter.h index e48e508b963..1694fad3872 100644 --- a/drivers/net/cxgb3/adapter.h +++ b/drivers/net/cxgb3/adapter.h @@ -253,6 +253,8 @@ struct adapter { struct mutex mdio_lock; spinlock_t stats_lock; spinlock_t work_lock; + + struct sk_buff *nofail_skb; }; static inline u32 t3_read_reg(struct adapter *adapter, u32 reg_addr) diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c index aef3ab21f5f..538dda4422d 100644 --- a/drivers/net/cxgb3/cxgb3_main.c +++ b/drivers/net/cxgb3/cxgb3_main.c @@ -433,40 +433,78 @@ static int init_tp_parity(struct adapter *adap) for (i = 0; i < 16; i++) { struct cpl_smt_write_req *req; - skb = alloc_skb(sizeof(*req), GFP_KERNEL | __GFP_NOFAIL); + skb = alloc_skb(sizeof(*req), GFP_KERNEL); + if (!skb) + skb = adap->nofail_skb; + if (!skb) + goto alloc_skb_fail; + req = (struct cpl_smt_write_req *)__skb_put(skb, sizeof(*req)); memset(req, 0, sizeof(*req)); req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, i)); req->iff = i; t3_mgmt_tx(adap, skb); + if (skb == adap->nofail_skb) { + await_mgmt_replies(adap, cnt, i + 1); + adap->nofail_skb = alloc_skb(sizeof(*greq), GFP_KERNEL); + if (!adap->nofail_skb) + goto alloc_skb_fail; + } } for (i = 0; i < 2048; i++) { struct cpl_l2t_write_req *req; - skb = alloc_skb(sizeof(*req), GFP_KERNEL | __GFP_NOFAIL); + skb = alloc_skb(sizeof(*req), GFP_KERNEL); + if (!skb) + skb = adap->nofail_skb; + if (!skb) + goto alloc_skb_fail; + req = (struct cpl_l2t_write_req *)__skb_put(skb, sizeof(*req)); memset(req, 0, sizeof(*req)); req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_L2T_WRITE_REQ, i)); req->params = htonl(V_L2T_W_IDX(i)); t3_mgmt_tx(adap, skb); + if (skb == adap->nofail_skb) { + await_mgmt_replies(adap, cnt, 16 + i + 1); + adap->nofail_skb = alloc_skb(sizeof(*greq), GFP_KERNEL); + if (!adap->nofail_skb) + goto alloc_skb_fail; + } } for (i = 0; i < 2048; i++) { struct cpl_rte_write_req *req; - skb = alloc_skb(sizeof(*req), GFP_KERNEL | __GFP_NOFAIL); + skb = alloc_skb(sizeof(*req), GFP_KERNEL); + if (!skb) + skb = adap->nofail_skb; + if (!skb) + goto alloc_skb_fail; + req = (struct cpl_rte_write_req *)__skb_put(skb, sizeof(*req)); memset(req, 0, sizeof(*req)); req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_RTE_WRITE_REQ, i)); req->l2t_idx = htonl(V_L2T_W_IDX(i)); t3_mgmt_tx(adap, skb); + if (skb == adap->nofail_skb) { + await_mgmt_replies(adap, cnt, 16 + 2048 + i + 1); + adap->nofail_skb = alloc_skb(sizeof(*greq), GFP_KERNEL); + if (!adap->nofail_skb) + goto alloc_skb_fail; + } } - skb = alloc_skb(sizeof(*greq), GFP_KERNEL | __GFP_NOFAIL); + skb = alloc_skb(sizeof(*greq), GFP_KERNEL); + if (!skb) + skb = adap->nofail_skb; + if (!skb) + goto alloc_skb_fail; + greq = (struct cpl_set_tcb_field *)__skb_put(skb, sizeof(*greq)); memset(greq, 0, sizeof(*greq)); greq->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); @@ -475,8 +513,17 @@ static int init_tp_parity(struct adapter *adap) t3_mgmt_tx(adap, skb); i = await_mgmt_replies(adap, cnt, 16 + 2048 + 2048 + 1); + if (skb == adap->nofail_skb) { + i = await_mgmt_replies(adap, cnt, 16 + 2048 + 2048 + 1); + adap->nofail_skb = alloc_skb(sizeof(*greq), GFP_KERNEL); + } + t3_tp_set_offload_mode(adap, 0); return i; + +alloc_skb_fail: + t3_tp_set_offload_mode(adap, 0); + return -ENOMEM; } /** @@ -871,7 +918,12 @@ static int send_pktsched_cmd(struct adapter *adap, int sched, int qidx, int lo, struct mngt_pktsched_wr *req; int ret; - skb = alloc_skb(sizeof(*req), GFP_KERNEL | __GFP_NOFAIL); + skb = alloc_skb(sizeof(*req), GFP_KERNEL); + if (!skb) + skb = adap->nofail_skb; + if (!skb) + return -ENOMEM; + req = (struct mngt_pktsched_wr *)skb_put(skb, sizeof(*req)); req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_MNGT)); req->mngt_opcode = FW_MNGTOPCODE_PKTSCHED_SET; @@ -881,6 +933,12 @@ static int send_pktsched_cmd(struct adapter *adap, int sched, int qidx, int lo, req->max = hi; req->binding = port; ret = t3_mgmt_tx(adap, skb); + if (skb == adap->nofail_skb) { + adap->nofail_skb = alloc_skb(sizeof(struct cpl_set_tcb_field), + GFP_KERNEL); + if (!adap->nofail_skb) + ret = -ENOMEM; + } return ret; } @@ -3020,6 +3078,14 @@ static int __devinit init_one(struct pci_dev *pdev, goto out_disable_device; } + adapter->nofail_skb = + alloc_skb(sizeof(struct cpl_set_tcb_field), GFP_KERNEL); + if (!adapter->nofail_skb) { + dev_err(&pdev->dev, "cannot allocate nofail buffer\n"); + err = -ENOMEM; + goto out_free_adapter; + } + adapter->regs = ioremap_nocache(mmio_start, mmio_len); if (!adapter->regs) { dev_err(&pdev->dev, "cannot map device registers\n"); @@ -3176,6 +3242,8 @@ static void __devexit remove_one(struct pci_dev *pdev) free_netdev(adapter->port[i]); iounmap(adapter->regs); + if (adapter->nofail_skb) + kfree_skb(adapter->nofail_skb); kfree(adapter); pci_release_regions(pdev); pci_disable_device(pdev); diff --git a/drivers/net/cxgb3/cxgb3_offload.c b/drivers/net/cxgb3/cxgb3_offload.c index 620d80be6aa..f9f54b57b28 100644 --- a/drivers/net/cxgb3/cxgb3_offload.c +++ b/drivers/net/cxgb3/cxgb3_offload.c @@ -566,13 +566,31 @@ static void t3_process_tid_release_list(struct work_struct *work) spin_unlock_bh(&td->tid_release_lock); skb = alloc_skb(sizeof(struct cpl_tid_release), - GFP_KERNEL | __GFP_NOFAIL); + GFP_KERNEL); + if (!skb) + skb = td->nofail_skb; + if (!skb) { + spin_lock_bh(&td->tid_release_lock); + p->ctx = (void *)td->tid_release_list; + td->tid_release_list = (struct t3c_tid_entry *)p; + break; + } mk_tid_release(skb, p - td->tid_maps.tid_tab); cxgb3_ofld_send(tdev, skb); p->ctx = NULL; + if (skb == td->nofail_skb) + td->nofail_skb = + alloc_skb(sizeof(struct cpl_tid_release), + GFP_KERNEL); spin_lock_bh(&td->tid_release_lock); } + td->release_list_incomplete = (td->tid_release_list == NULL) ? 0 : 1; spin_unlock_bh(&td->tid_release_lock); + + if (!td->nofail_skb) + td->nofail_skb = + alloc_skb(sizeof(struct cpl_tid_release), + GFP_KERNEL); } /* use ctx as a next pointer in the tid release list */ @@ -585,7 +603,7 @@ void cxgb3_queue_tid_release(struct t3cdev *tdev, unsigned int tid) p->ctx = (void *)td->tid_release_list; p->client = NULL; td->tid_release_list = p; - if (!p->ctx) + if (!p->ctx || td->release_list_incomplete) schedule_work(&td->tid_release_task); spin_unlock_bh(&td->tid_release_lock); } @@ -1274,6 +1292,9 @@ int cxgb3_offload_activate(struct adapter *adapter) if (list_empty(&adapter_list)) register_netevent_notifier(&nb); + t->nofail_skb = alloc_skb(sizeof(struct cpl_tid_release), GFP_KERNEL); + t->release_list_incomplete = 0; + add_adapter(adapter); return 0; @@ -1298,6 +1319,8 @@ void cxgb3_offload_deactivate(struct adapter *adapter) T3C_DATA(tdev) = NULL; t3_free_l2t(L2DATA(tdev)); L2DATA(tdev) = NULL; + if (t->nofail_skb) + kfree_skb(t->nofail_skb); kfree(t); } diff --git a/drivers/net/cxgb3/cxgb3_offload.h b/drivers/net/cxgb3/cxgb3_offload.h index a8e8e5fcdf8..55945f422ae 100644 --- a/drivers/net/cxgb3/cxgb3_offload.h +++ b/drivers/net/cxgb3/cxgb3_offload.h @@ -191,6 +191,9 @@ struct t3c_data { struct t3c_tid_entry *tid_release_list; spinlock_t tid_release_lock; struct work_struct tid_release_task; + + struct sk_buff *nofail_skb; + unsigned int release_list_incomplete; }; /* -- cgit v1.2.3-70-g09d2