From a1cf5944c13639263d8f3590e5a43ce19b040dbd Mon Sep 17 00:00:00 2001 From: wangshiming Date: Mon, 27 Dec 2021 14:08:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=A6=E8=BE=86=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bulk-detail-change.component.html | 3 +- .../bulk-detail/bulk-detail.component.html | 12 +- .../components/bulk/bulk.component.html | 4 +- .../components/bulk/bulk.component.ts | 12 +- .../vehicle-detail-change.component.html | 3 +- .../vehicle-detail.component.html | 30 ++- .../vehicle-detail.component.ts | 6 +- .../components/vehicle/vehicle.component.html | 4 +- .../components/vehicle/vehicle.component.ts | 6 +- .../close-account.component.html | 70 +++++ .../close-account.component.less | 13 + .../close-account/close-account.component.ts | 249 ++++++++++++++++++ .../network-freight.component.html | 57 ++-- .../network-freight.component.ts | 177 ++++++++++--- .../sys-setting/services/system.service.ts | 27 +- .../sys-setting/sys-setting-routing.module.ts | 6 +- .../routes/sys-setting/sys-setting.module.ts | 4 +- .../services/business/shipper-base.service.ts | 6 +- .../images/usercenter/彩色-箭头-向右-1.png | Bin 0 -> 3379 bytes src/assets/mocks/menu-data.json | 4 + 20 files changed, 590 insertions(+), 103 deletions(-) create mode 100644 src/app/routes/sys-setting/components/close-account/close-account.component.html create mode 100644 src/app/routes/sys-setting/components/close-account/close-account.component.less create mode 100644 src/app/routes/sys-setting/components/close-account/close-account.component.ts create mode 100644 src/assets/images/usercenter/彩色-箭头-向右-1.png diff --git a/src/app/routes/order-management/components/bulk-detail-change/bulk-detail-change.component.html b/src/app/routes/order-management/components/bulk-detail-change/bulk-detail-change.component.html index 46b8fcef..43dd586c 100644 --- a/src/app/routes/order-management/components/bulk-detail-change/bulk-detail-change.component.html +++ b/src/app/routes/order-management/components/bulk-detail-change/bulk-detail-change.component.html @@ -1,7 +1,7 @@ + + + + +
+ +
+ +
+ + + +
+ +
+
+ + + + +
+
+
+
+ + + +
+
+ +
+
+ + +
+ 客户 + 供应商 +
+
+
+
+ + + + + + + + + + + diff --git a/src/app/routes/sys-setting/components/close-account/close-account.component.less b/src/app/routes/sys-setting/components/close-account/close-account.component.less new file mode 100644 index 00000000..04fd4ba3 --- /dev/null +++ b/src/app/routes/sys-setting/components/close-account/close-account.component.less @@ -0,0 +1,13 @@ +:host::ng-deep{ + .search-box{ + .ant-card-body{ + padding-bottom: 18px; + } + } + + .content-box{ + .ant-card-body{ + padding-top: 14px; + } + } +} \ No newline at end of file diff --git a/src/app/routes/sys-setting/components/close-account/close-account.component.ts b/src/app/routes/sys-setting/components/close-account/close-account.component.ts new file mode 100644 index 00000000..9bba5e3d --- /dev/null +++ b/src/app/routes/sys-setting/components/close-account/close-account.component.ts @@ -0,0 +1,249 @@ +import { Component, OnInit, ViewChild, Type } from '@angular/core'; +import { STComponent, STColumn, STChange } from '@delon/abc/st'; +import { SFComponent, SFRadioWidgetSchema, SFSchema, SFSchemaEnum, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; +import { ShipperBaseService } from '@shared'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { of } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { SystemService } from '../../services/system.service'; + +@Component({ + selector: 'app-close-account', + templateUrl: './close-account.component.html', + styleUrls: ['./close-account.component.less'] +}) +export class CloseAccountComponent implements OnInit { + @ViewChild('st', { static: true }) + st!: STComponent; + @ViewChild('sf', { static: false }) sf!: SFComponent; + @ViewChild('sfFre', { static: false }) sfFre!: SFComponent; + ui: SFUISchema = {}; + ui2: SFUISchema = {}; + schema: SFSchema = {}; + addSchema: SFSchema = {}; + _$expand = false; + editText = ''; + formData :any; + isVisible = false; + edit = false; + editId = false; + + columns: STColumn[] = [ + { title: '结算客户名称', index: 'customerName' }, + { title: '结算客户编码', index: 'customerCode' }, + { title: '网络货运人', index: 'networkTransporterName' }, + { title: '货主名称', index: 'enterpriseName' }, + { title: '客户编码', index: 'crmCustomerCode' }, + { title: '供应商编码', index: 'crmSupplierCode' }, + { + title: '操作', + buttons: [ + { + text: '编辑', + click: item => this.roleAction(item, 2) + }, + ] + } + ]; + + selectedRows: any[] = []; + + get reqParams (){ + return { + ...this.sf?.value, + }}; + + constructor( + public service: SystemService, + private nzModalService: NzModalService, + public service2: ShipperBaseService, + ) {} + + ngOnInit(): void { + this.initSF() + this.initSFFre() + } + + stChange(e: STChange): void { + switch (e.type) { + case 'checkbox': + this.selectedRows = e.checkbox!; + break; + case 'filter': + this.st.load(); + break; + } + } + /** + * 伸缩查询条件 + */ + expandToggle(): void { + this._$expand = !this._$expand; + this.sf?.setValue('/_$expand', this._$expand); + } + /** + * 查询字段个数 + */ + get queryFieldCount(): number { + return Object.keys(this.schema?.properties || {}).length; + } + initSF(){ + this.schema = { + properties: { + _$expand: { type: 'boolean', ui: { hidden: true } }, + customerName: { + type: 'string', + title: '结算客户名称', + ui: { placeholder: '请输入' } + }, + customerShortName: { + type: 'string', + title: '结算客户编码', + ui: { placeholder: '请输入' } + }, + networkTransporterId: { + title: '网络货运人', + type: 'string', + ui: { + placeholder: '请选择', + widget: 'select', + asyncData: () => this.service2.getNetworkFreightForwarder(), + visibleIf: { + _$expand: (value: boolean) => value, + }, + } + }, + enterpriseName: { + type: 'string', + title: '货主名称', + ui: { placeholder: '请输入', + visibleIf: { + _$expand: (value: boolean) => value + } } + }, + crmSupplierCode: { + type: 'string', + title: '供应商编码', + ui: { placeholder: '请输入', + visibleIf: { + _$expand: (value: boolean) => value + } } + }, + } + + }; + this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } }; + } + initSFFre() { + this.addSchema = { + properties: { + customerName: { + type: 'string', + title: '结算客户名称', + ui: { placeholder: '请输入' } + }, + customerCode: { + type: 'string', + title: '结算客户编码', + ui: { placeholder: '请输入' } + }, + networkTransporterId: { + title: '网络货运人', + type: 'string', + ui: { + placeholder: '请选择', + widget: 'select', + asyncData: () => this.service2.getNetworkFreightForwarder(), + visibleIf: { + _$expand: (value: boolean) => value, + }, + } + }, + enterpriseId: { + title: '货主', + type: 'string', + maxLength: 30, + ui: { + widget: 'select', + serverSearch: true, + searchDebounceTime: 300, + searchLoadingText: '搜索中...', + onSearch: (q: any) => { + console.log(q) + if (!!q) { + return this.service + .request(this.service.$api_enterpriceList, { enterpriseName: q}) + .pipe(map((res: any) => (res as any[]).map((i) => ({ label: i.enterpriseName, value: i.id } as SFSchemaEnum)))) + .toPromise(); + } else { + return of([]); + } + }, + } as SFSelectWidgetSchema, + }, + }, + required: ['customerName', 'customerCode', 'networkTransporterId', 'enterpriseId'] + }; +this.ui2 = { '*': { spanLabelFixed: 120, grid: { span: 24 } } }; +} + roleAction(value: any,item?: any) { + if(item === 1) { + this.edit = false; + this.editText = '新增'; + } else { + this.service.request(this.service.$api_settlementCustomer_get, {id: value.id}).subscribe((res: any) => { + console.log(res) + if(res) { + this.formData = res; + } + }) + this.edit = true; + this.editId = value.id; + this.editText = '编辑'; + } + this.isVisible = true; + } + + deleteAction(item?: any) { + this.nzModalService.error({ + nzTitle: '确认删除?', + nzClosable: false, + nzCancelText: '取消', + nzOnOk: () => {} + }); + } + + /** + * 重置表单 + */ + resetSF() { + this.sf.reset(); + } + handleCancel() { + this.isVisible = false + } + + handleOK() { + console.log(this.sfFre.value) + if(!this.sfFre.valid) { + this.service.msgSrv.warning('请正确填写完整!') + return + } + const params ={ + ...this.sfFre.value + } + if(this.editId) { + params.id = this.editId + } + this.service.request(this.service.$api_settlementCustomer_save, params).subscribe((res:any) => { + if(res) { + this.service.msgSrv.success('保存成功!') + this.isVisible = false + this.st.reload(); + } else { + this.service.msgSrv.warning(res?.msg) + + } + }) + } +} diff --git a/src/app/routes/sys-setting/components/network-freight/network-freight.component.html b/src/app/routes/sys-setting/components/network-freight/network-freight.component.html index f262ec00..ea55c8e2 100644 --- a/src/app/routes/sys-setting/components/network-freight/network-freight.component.html +++ b/src/app/routes/sys-setting/components/network-freight/network-freight.component.html @@ -1,7 +1,7 @@ +
+
-
- + + + +
+ +
+
+ + -
-
+ + + + - -
-
- -
-
- -
\ No newline at end of file + [loading]="service.http.loading" [scroll]="{ y: '370px' }" (change)="stChange($event)"> + + + + + + + + + + + + + diff --git a/src/app/routes/sys-setting/components/network-freight/network-freight.component.ts b/src/app/routes/sys-setting/components/network-freight/network-freight.component.ts index ff673d4e..cc081c8a 100644 --- a/src/app/routes/sys-setting/components/network-freight/network-freight.component.ts +++ b/src/app/routes/sys-setting/components/network-freight/network-freight.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, ViewChild } from '@angular/core'; import { STComponent, STColumn, STChange } from '@delon/abc/st'; -import { SFComponent, SFSchema } from '@delon/form'; +import { SFComponent, SFRadioWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; import { NzModalService } from 'ng-zorro-antd/modal'; import { SystemService } from '../../services/system.service'; @@ -12,52 +12,56 @@ import { SystemService } from '../../services/system.service'; export class NetworkFreightComponent implements OnInit { @ViewChild('st', { static: true }) st!: STComponent; - @ViewChild('sf', { static: false }) - sf!: SFComponent; - - url = `/rule?_allow_anonymous=true`; - - searchSchema: SFSchema = { - properties: { - receiveName: { - type: 'string', - title: '角色名称', - ui: { placeholder: '请输入' } - } - } - }; + @ViewChild('sf', { static: false }) sf!: SFComponent; + @ViewChild('sfFre', { static: false }) sfFre!: SFComponent; + ui: SFUISchema = {}; + ui2: SFUISchema = {}; + schema: SFSchema = {}; + addSchema: SFSchema = {}; + _$expand = false; + formData :any; + isVisible = false; + edit = false; + editId = false; columns: STColumn[] = [ - { title: '角色名称', index: 'no' }, - { title: '角色描述', index: 'description' }, - { title: '创建人手机号', index: 'description' }, - { - title: '创建时间', - index: 'updatedAt', - type: 'date' - }, + { title: '公司名称', index: 'enterpriseName' }, + { title: '纳税人识别号', index: 'taxCode' }, + { title: '发票税率', index: 'invoiceTaxRate' }, + { title: '电子发票账号', index: 'electronicInvoiceAccount' }, + { title: 'ETC账号', index: 'etcAccount' }, + { title: '电子合同账号', index: 'electronicContractAccount' }, + { title: '开户行', index: 'bankName' }, + { title: '虚拟账户', index: 'virtualAccount' }, + { title: '附加费比例', index: 'surchargeRate', format: (item: any) => {return item.surchargeRate + '%'} }, { title: '操作', buttons: [ { - text: '编辑', - click: item => this.roleAction(item) + text: '财务设置', + click: item => this.roleAction(item, 2) }, { - text: '删除', - click: item => this.deleteAction(item) - } + text: '合同设置', + click: item => this.roleAction(item, 2) + }, ] } ]; selectedRows: any[] = []; - reqParams = { pageIndex: 1, pageSize: 10 }; + get reqParams (){ + return { + ...this.sf?.value, + }}; constructor(public service: SystemService, private nzModalService: NzModalService) {} - ngOnInit(): void {} + ngOnInit(): void { + this.initSF() + this.initSFFre() + } stChange(e: STChange): void { switch (e.type) { @@ -69,17 +73,83 @@ export class NetworkFreightComponent implements OnInit { break; } } + /** + * 伸缩查询条件 + */ + expandToggle(): void { + this._$expand = !this._$expand; + this.sf?.setValue('/_$expand', this._$expand); + } + /** + * 查询字段个数 + */ + get queryFieldCount(): number { + return Object.keys(this.schema?.properties || {}).length; + } + initSF(){ + this.schema = { + properties: { + _$expand: { type: 'boolean', ui: { hidden: true } }, + enterpriseName: { + type: 'string', + title: '公司名称', + ui: { placeholder: '请输入' } + }, + taxCode: { + type: 'string', + title: '纳税人识别号', + ui: { placeholder: '请输入' } + }, + } + + }; + this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } }; + } + initSFFre() { + this.addSchema = { + properties: { + enterpriseName: { + type: 'string', + title: '公司名称', + ui: { placeholder: '请输入' } + }, + taxCode: { + type: 'string', + title: '纳税人识别号', + ui: { placeholder: '请输入' } + }, + customerCode: { + type: 'string', + title: '税收分类编码', + ui: { placeholder: '请输入' } + }, + invoiceTaxRate: { + type: 'string', + title: '发票税率', + ui: { placeholder: '请输入' } + }, + surchargeRate: { + type: 'string', + title: '附加费比例', + ui: { placeholder: '请输入' } + }, + + }, + required: ['enterpriseName', 'taxCode', 'customerType', 'invoiceTaxRate', 'surchargeRate'] + }; +this.ui2 = { '*': { spanLabelFixed: 120, grid: { span: 24 } } }; +} + roleAction(value: any,item?: any) { - roleAction(item?: any) { - const modal = this.nzModalService.create({ - // nzContent: SettingRoleEditComponent, - nzWidth: 900, - nzComponentParams: item ? { i: { ...item } } : { i: { id: 0 } }, - nzFooter: null - }); - modal.afterClose.subscribe(res => { - this.st.load(); - }); + this.service.request(this.service.$api_get_crmCustomer, {id: value.id}).subscribe((res: any) => { + console.log(res) + if(res) { + this.formData = res; + } + }) + this.edit = true; + this.editId = value.id; + this.isVisible = true; } deleteAction(item?: any) { @@ -97,4 +167,31 @@ export class NetworkFreightComponent implements OnInit { resetSF() { this.sf.reset(); } + handleCancel() { + this.isVisible = false + } + + handleOK() { + console.log(this.sfFre.value) + if(!this.sfFre.valid) { + this.service.msgSrv.warning('请正确填写完整!') + return + } + const params ={ + ...this.sfFre.value + } + if(this.editId) { + params.id = this.editId + } + this.service.request(this.service.$api_save_crmCustomer, params).subscribe((res:any) => { + if(res) { + this.service.msgSrv.success('保存成功!') + this.isVisible = false + this.st.reload(); + } else { + this.service.msgSrv.warning(res?.msg) + + } + }) + } } diff --git a/src/app/routes/sys-setting/services/system.service.ts b/src/app/routes/sys-setting/services/system.service.ts index a0ee5aa2..bdf7f791 100644 --- a/src/app/routes/sys-setting/services/system.service.ts +++ b/src/app/routes/sys-setting/services/system.service.ts @@ -1,8 +1,8 @@ /* * @Author: your name * @Date: 2021-12-20 17:18:43 - * @LastEditTime: 2021-12-27 09:30:39 - * @LastEditors: your name + * @LastEditTime: 2021-12-27 11:33:56 + * @LastEditors: Please set LastEditors * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @FilePath: \tms-obc-web\src\app\routes\sys-setting\services\system.service.ts */ @@ -45,6 +45,29 @@ export class SystemService extends BaseService { // 删除CRM客户信息表 $api_deletebatch_crmCustomer = '/api/mdc/crmCustomer/deletebatch'; + // 查询网络货运信息表 + $api_networkTransporter_page = '/api/mdc/networkTransporter/list/page'; + // 获取网络货运信息表(id) + $api_get_networkTransporter = '/api/mdc/networkTransporter/get'; + // 批量获取网络货运信息 + $api_findNetworkTransporterByIds = '/api/mdc/networkTransporter/findNetworkTransporterByIds'; + // 查找所有网络货运信息(下拉) + $api_networkTransporter_findAll = '/api/mdc/networkTransporter/findAll'; + // 删除网络货运信息表 + $api_networkTransporter_deletebatch = '/api/mdc/networkTransporter/deletebatch'; + // 保存网络货运信息表 + $api_networkTransporter_save = '/api/mdc/networkTransporter/save'; + + // 查询结算客户表 + $api_settlementCustomer_page = '/api/mdc/settlementCustomer/list/page'; + // 获取结算客户表 + $api_settlementCustomer_get = '/api/mdc/settlementCustomer/get'; + // 保存结算客户表 + $api_settlementCustomer_save = '/api/mdc/settlementCustomer/save'; + // 删除结算客户表 + $api_settlementCustomer_deletebatch = '/api/mdc/settlementCustomer/deletebatch'; + // 获取货主企业列表 + public $api_enterpriceList = '/api/mdc/cuc/enterpriseInfo/operate/enterpriceList'; $api_getAllFunctionInfoByAppId: string = ''; $api_getRoleTemplateInfo: string = ''; diff --git a/src/app/routes/sys-setting/sys-setting-routing.module.ts b/src/app/routes/sys-setting/sys-setting-routing.module.ts index 79edd1a9..6faf0bba 100644 --- a/src/app/routes/sys-setting/sys-setting-routing.module.ts +++ b/src/app/routes/sys-setting/sys-setting-routing.module.ts @@ -1,8 +1,8 @@ /* * @Author: your name * @Date: 2021-12-03 15:23:05 - * @LastEditTime: 2021-12-24 15:57:37 - * @LastEditors: your name + * @LastEditTime: 2021-12-27 11:11:12 + * @LastEditors: Please set LastEditors * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @FilePath: \tms-obc-web\src\app\routes\sys-setting\sys-setting-routing.module.ts */ @@ -13,6 +13,7 @@ import { AuditReasonConfigComponent } from './components/audit-reason-config/aud import { BasicConfigComponent } from './components/basic-config/basic-config.component'; import { BasicSettingComponent } from './components/basic-setting/basic-setting.component'; import { CartConfigComponent } from './components/cart-config/cart-config.component'; +import { CloseAccountComponent } from './components/close-account/close-account.component'; import { CrmManagementComponent } from './components/crm-management/crm-management.component'; import { GoodsNameConfigComponent } from './components/goods-name-config/goods-name-config.component'; import { NetworkFreightComponent } from './components/network-freight/network-freight.component'; @@ -38,6 +39,7 @@ const routes: Routes = [ { path: 'goods-name-config', component: GoodsNameConfigComponent }, { path: 'crm-management', component: CrmManagementComponent }, { path: 'network-freight', component: NetworkFreightComponent }, + { path: 'close-account', component: CloseAccountComponent }, ]; @NgModule({ diff --git a/src/app/routes/sys-setting/sys-setting.module.ts b/src/app/routes/sys-setting/sys-setting.module.ts index df0ce016..281188d1 100644 --- a/src/app/routes/sys-setting/sys-setting.module.ts +++ b/src/app/routes/sys-setting/sys-setting.module.ts @@ -23,6 +23,7 @@ import { SettingMenuComponent } from './components/role-management/menu/menu.com import { GoodsNameConfigComponent } from './components/goods-name-config/goods-name-config.component'; import { CrmManagementComponent } from './components/crm-management/crm-management.component'; import { NetworkFreightComponent } from './components/network-freight/network-freight.component'; +import { CloseAccountComponent } from './components/close-account/close-account.component'; const COMPONENTS = [ StaffManagementComponent, @@ -38,7 +39,8 @@ const COMPONENTS = [ SystemConfigComponent, GoodsNameConfigComponent, CrmManagementComponent, - NetworkFreightComponent + NetworkFreightComponent, + CloseAccountComponent ]; const NOTROUTECOMPONENTS = [ BuyerTranspowerComponent, diff --git a/src/app/shared/services/business/shipper-base.service.ts b/src/app/shared/services/business/shipper-base.service.ts index 4817a318..1084f725 100644 --- a/src/app/shared/services/business/shipper-base.service.ts +++ b/src/app/shared/services/business/shipper-base.service.ts @@ -9,7 +9,7 @@ export class ShipperBaseService extends BaseService { $api_get_carless_carrier = ``; // 获取承运人 $api_get_enterprise_project = `/api/mdc/cuc/enterpriseProject/getEnterpriseProjectList `; // 所属项目列表 $api_get_staff_list = `/api/mdc/cuc/userApp/getStaffList`; //查询企业项目员工列表(录单员) - $api_get_network_freight_forwarder = ``; // 获取网络货运人 + $api_get_network_freight_forwarder = `/api/mdc/networkTransporter/findAll`; // 获取网络货运人 constructor(public injector: Injector) { @@ -92,8 +92,8 @@ export class ShipperBaseService extends BaseService { } const list = res.map(((item: any) => { return { - label: item.name, - value: item.userId + label: item.enterpriseName, + value: item.id } })) const obj = [{ value: '', label: '全部' }]; diff --git a/src/assets/images/usercenter/彩色-箭头-向右-1.png b/src/assets/images/usercenter/彩色-箭头-向右-1.png new file mode 100644 index 0000000000000000000000000000000000000000..885163b110d472718e6423a422e0794ab22b3505 GIT binary patch literal 3379 zcmeH~`8U*k8^;GDgYY#5Wx^MOY%O%>iNtpdW@wRREVr9blCfkfvVU!3#EdOlmS-N7 zeao7ytSy#=vMX5!cPJ6be(=e*zVPmJ+J13n%x9s~lx zMS-4z}Z?+Te8zgCc^ zHrBk=zRQs@cwlmSP+gKtAv1C(;?|y>{tYm~!>bOiE~CR48FI!#=sIsvrR^)lxC;!I z?cB^^uELm#wbhXbr?hYcW_tjda<^#@o z?=AP*KwIo=faSeV1QtMq&2sAi%lv?47y|k1D}oILYa!U3kgF(%PQJ%!Kqz<~*3Wc8 zg4Dz6-41vJe1codEkiIAbQ(Vq%gu&r#W`2q&_}>&o^8r52vEaw-1m~OeK7N|E9=T7l@Oj$KLd;-ERN zSfG8@hsS2j1;&*qZ0j8C=UCC*==;M>7_Q4W|7__EI`7@b!P$D}) z?5JrIG1o6LHjxMfo3GZ{s4_a|@49TW~#OyCdfv#Biiv(%m#Vuoxxkw&(Mz49Mt6G)_ zllnhqk#~pAG9bp;e6@c)G>04vq{Rf}m%1wTxu8n9-Wk6d&h(HA>sJ~^{FIC$0G!e2 z-T0I!kZ`Jq7#9gSDk>!dIHfn;@kxo`$&SM$FISEH<{VBFR3hiKs4n7VM%o-FZRTF@ z)!#OX&{C+jo=m-03cTnRSM34eiRg>!pENR^v;o|OCwJdnv}4Rf<0Q!u5(T|^VMpLRNSI<01v8}AzFK%sL=V&{3c^>^9^pYFC^0AD zsK#6Op)NOd4#-ug;|_ONF((Npr7_CS(ylqohO8h7Q6_MVXs{_fRyQlR<`o$Ow2P36 zABXA$!|kFr1-te|6@B_Rp#6Yeu_rd{EGJ3AAY#kB!D{DQ?ml0L+u@v>m_T&H?RdX7 zJG;$>l;;+O(uY*gIQZ>R8in)rr*lhX4R@laN_=){iMBXtJH3~w!iybK zDJIRBR#RG_Z1QoUAK}GqyPmytYM}JCercSt_f5V2$rHmjpH`hlIT#+B_n!)3wTjyX z`}bJ1Q5s)vluCAF)=O(04iR1Jyw?o0$~*{^TG-39O1K0!PCg``lg(@#w+pvPK|!jM z*v%gfE(>oWHFv4aD}3fpf(PRQ#S*ir%&U$@iP_9=YPI*Zy}Pcv$_CQ-Qpqg*6+IPPY$Bl6r2N}j7*uwC?o3wHb<%_udSDrSYfp{R`Zs%`p71J zsw2C@G3eOioOB~mA+=5q?WJ-kG^l~+jb?$zt()!c?Vb9{J}Y=$#$1#XAa zl5IbAs|1o-P1n4aGmp!C43W3PVYU2&gB+6tmhjK&OoXRnj{8vc}d*x@}14h<1JM1L2tIfwB z7lH(isYFhAm?}Z}0=@V6LrVUldeJM}l%xEO1#@Ko1_1s79ns}Ac%OGyQRuIyRGZBL zc{lx;SH_SLCZB9~wps1z7R@_T9TeUDB~{p-|575yk=wEm(iB9?P zY|?;)?{l5KPF42=}H@e4Kw$GHII)zS7nyaI4v-xG!%!j z;Opj@w{O-&ls`9Rxl9Oe_YuvkGRM^lnS(^H+LmJ->suy7yUVBWYb#0t=y=>_0($y( zot#!2p?nU{&M{u~%s07ig}%gn#x4h2yX(m<a5FL{HL>_g$SO z23*(Ewt4FOeOc7hvj}(FEP>7Ocp6>%wE=y0MNFCVGH&vROX<#PeX4r*Xs5u>dn?}cY}U(_4+*UE zVhd74F|!J%({vC%SB$D(8T`QNsAA|cs-CObsqa3rWSzJ0k<^%Iq>RunJr>*-LP(Hu zbys?qUC+ztdZk9z={u;z)AkRS9&MpiWk~TCxP~?#>+nLAx!tRW6u4FYC-!-Ni+vP` z&*vKJ>HOV_839_oaq>|fgY&7KZ7;SfiUskE;uy6v+2#;NYx2gBT@Qyi@UeE)=oM{Gs*~1oA`1+3mN|2&n3WJz&8OL{Qcjevd^U`&%O*oBgO<`r