Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2024-11-13 11:00:07 +01:00
69 changed files with 2551 additions and 1443 deletions

View File

@@ -26,8 +26,6 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@@ -263,34 +261,6 @@ public class EmsEngineController {
return response;
}
@RequestMapping(value = EmsRestConstants.PATH_PROCESS_JASPER, method = RequestMethod.POST)
public @ResponseBody
List<ServiceRestResponse> processJasper(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody(required = true) String b64inputValue) {
List<ServiceRestResponse> response = new ArrayList<ServiceRestResponse>();
try {
String xmlDto = new String(Base64.decodeBase64(b64inputValue));
JasperDTO jasperDTO = reportProcessor.XMLToDTO(xmlDto);
FileItem fi = new FileItem();
byte[] bytes = emsEngineService.processReport(jasperDTO);
if (bytes != null) {
fi.setFileb64Content(new String(Base64.encodeBase64(bytes)));
}
response.add(new ServiceRestResponse(EsitoType.OK, multiDBTransactionManager.getPrimaryDatasource().getProfile(), fi));
} catch (JRException e) {
logger.error(e.toString() + " - Cause: " + e.getCause());
response.add(new ServiceRestResponse(EsitoType.KO, configuration, e));
} catch (Exception e) {
logger.error(request.getRequestURI(), e);
response.add(new ServiceRestResponse(EsitoType.KO, configuration, e));
}
return response;
}
@RequestMapping(value = EmsRestConstants.PATH_RETRIEVE_GRL_ANAG_JREPT_TYPES, method = RequestMethod.GET)
public @ResponseBody
ServiceRestResponse retrieveGrlAnagJreptTypes(HttpServletRequest request) {

View File

@@ -177,10 +177,10 @@ public class ToscaSalesService {
.setRagSoc(ragSoc.length() >= 40 ? ragSoc.substring(0, 39) : ragSoc)
.setNote(ragSoc)
.setDiacod(order.getCounterPNr())
.setOperation(OperationType.INSERT);
.setOperation(OperationType.INSERT_OR_UPDATE);
VtbClie clie = new VtbClie();
clie.setOperation(OperationType.INSERT);
clie.setOperation(OperationType.INSERT_OR_UPDATE);
gtbAnag.setVtbClie(clie);
entityProcessor.processEntity(gtbAnag, true, multiDBTransactionManager);
order.setCodAnag(gtbAnag.getCodAnag());

View File

@@ -10,22 +10,22 @@ import it.integry.ems.production.dto.MRPCreaOrdineLavDTO;
import it.integry.ems.production.service.MrpDailyMaterialReqService;
import it.integry.ems.production.service.MrpService;
import it.integry.ems.production.service.ProductionService;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.rules.businessLogic.dto.LoadColliDTO;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.entity.DtbDoct;
import it.integry.ems_model.entity.DtbOrdt;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityDate;
import it.integry.ems_model.utility.UtilityString;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
@RestController
@Scope(value = "request")
@@ -108,22 +108,55 @@ public class ProductionController {
@RequestMapping(value = "/distribuzioneMateriali", method = RequestMethod.GET)
public @ResponseBody
ServiceRestResponse distribuzioneMateriali(@RequestParam String codAnag,
@RequestParam String codDtip,
@RequestParam Date dataDoc,
@RequestParam String serDoc,
@RequestParam Integer numDoc) throws Exception {
String sql = Query.format(
"SELECT * \n" +
"FROM dtb_doct WHERE dtb_doct.cod_anag = %s\n" +
" AND dtb_doct.cod_dtip = %s\n" +
" AND dtb_doct.data_doc = %s\n" +
" AND dtb_doct.ser_doc = %s\n" +
" AND dtb_doct.num_doc = %s",
codAnag, codDtip, dataDoc, serDoc, numDoc
);
DtbDoct dtbDoct = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbDoct.class);
ServiceRestResponse distribuzioneMateriali() throws Exception {
return ServiceRestResponse.createPositiveResponse(productionService.distribuzioneMateriali(dtbDoct));
return ServiceRestResponse.createPositiveResponse(productionService.distribuzioneMateriali());
}
@RequestMapping(value = "/attribuzioneCostoMaterialiLavorazione", method = RequestMethod.POST)
public @ResponseBody ServiceRestResponse attribuzioneCostoMaterialiLavorazione(
HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String profileDb,
@RequestParam Integer giorni,
@RequestParam(name = "data", required = false) String dataS,
@RequestParam(required = false) String codProd,
@RequestParam(required = false) String codJcom,
@RequestParam(required = false) String partitaMag
) {
try {
Date dataFine = UtilityString.isNullOrEmpty(dataS) ? new Date() : UtilityDate.RecognizeDate(dataS);
Date dataIniz = UtilityDate.dateAdd(dataFine, giorni);
productionService.attribuzioneCostoMaterialiLavorazione(dataIniz, dataFine, codProd, partitaMag, codJcom);
return ServiceRestResponse.createPositiveResponse();
} catch (Exception e) {
try {
multiDBTransactionManager.rollbackAll();
} catch (Exception ex) {
logger.error(request.getRequestURI(), e);
}
logger.error(request.getRequestURI(), e);
return new ServiceRestResponse(EsitoType.KO, profileDb, e);
}
}
@RequestMapping(value = "/getDettaglioCostiLavorazioneProdotto", method = RequestMethod.GET)
public @ResponseBody ServiceRestResponse getDettaglioCostiLavorazioneProdotto(
HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestParam String codProd,
@RequestParam(required = false) String codJcom,
@RequestParam(required = false) String partitaMag
) {
try {
return ServiceRestResponse.createPositiveResponse(productionService.getDettaglioCostiProd(codProd, partitaMag, codJcom));
} catch (Exception e) {
logger.error(request.getRequestURI(), e);
return new ServiceRestResponse(EsitoType.KO, profileDB, e);
}
}
}

View File

@@ -0,0 +1,82 @@
package it.integry.ems.production.dto;
import java.util.Date;
import java.util.Objects;
public class ArticoloPartitaCommessaDTO {
private String codMart;
private String codJcom;
private String partitaMag;
private Date dataOrd;
private Integer numOrd;
public ArticoloPartitaCommessaDTO() {
}
public ArticoloPartitaCommessaDTO(String codMart, String codJcom, String partitaMag, Date dataOrd, Integer numOrd) {
this.codMart = codMart;
this.codJcom = codJcom;
this.partitaMag = partitaMag;
this.dataOrd = dataOrd;
this.numOrd = numOrd;
}
public String getCodMart() {
return codMart;
}
public ArticoloPartitaCommessaDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getCodJcom() {
return codJcom;
}
public ArticoloPartitaCommessaDTO setCodJcom(String codJcom) {
this.codJcom = codJcom;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public ArticoloPartitaCommessaDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public Date getDataOrd() {
return dataOrd;
}
public ArticoloPartitaCommessaDTO setDataOrd(Date dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public Integer getNumOrd() {
return numOrd;
}
public ArticoloPartitaCommessaDTO setNumOrd(Integer numOrd) {
this.numOrd = numOrd;
return this;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ArticoloPartitaCommessaDTO that = (ArticoloPartitaCommessaDTO) o;
return Objects.equals(getCodMart(), that.getCodMart()) && Objects.equals(getCodJcom(), that.getCodJcom()) && Objects.equals(getPartitaMag(), that.getPartitaMag()) && Objects.equals(getDataOrd(), that.getDataOrd()) && Objects.equals(getNumOrd(), that.getNumOrd());
}
@Override
public int hashCode() {
return Objects.hash(getCodMart(), getCodJcom(), getPartitaMag(), getDataOrd(), getNumOrd());
}
}

View File

@@ -0,0 +1,131 @@
package it.integry.ems.production.dto;
import it.integry.ems_model.annotation.SqlField;
import java.math.BigDecimal;
import java.time.LocalDate;
public class DettaglioCostiDTO {
@SqlField("gruppo")
private String gruppo;
@SqlField("cod_jcom")
private String codJcom;
@SqlField("cod_prod")
private String codProd;
@SqlField("partita_mag_prod")
private String partitaMagProd;
@SqlField("qta_prod")
private BigDecimal qtaProd;
@SqlField("cod_mart")
private String codMart;
@SqlField("partita_mag")
private String partitaMag;
@SqlField("qta_doc")
private BigDecimal qtaDoc;
@SqlField("val_doc")
private BigDecimal valDoc;
@SqlField("data_ord")
private LocalDate dataOrd;
@SqlField("num_ord")
private Integer numOrd;
public String getGruppo() {
return gruppo;
}
public DettaglioCostiDTO setGruppo(String gruppo) {
this.gruppo = gruppo;
return this;
}
public String getCodJcom() {
return codJcom;
}
public DettaglioCostiDTO setCodJcom(String codJcom) {
this.codJcom = codJcom;
return this;
}
public String getCodProd() {
return codProd;
}
public DettaglioCostiDTO setCodProd(String codProd) {
this.codProd = codProd;
return this;
}
public String getPartitaMagProd() {
return partitaMagProd;
}
public DettaglioCostiDTO setPartitaMagProd(String partitaMagProd) {
this.partitaMagProd = partitaMagProd;
return this;
}
public BigDecimal getQtaProd() {
return qtaProd;
}
public DettaglioCostiDTO setQtaProd(BigDecimal qtaProd) {
this.qtaProd = qtaProd;
return this;
}
public String getCodMart() {
return codMart;
}
public DettaglioCostiDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public DettaglioCostiDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public BigDecimal getQtaDoc() {
return qtaDoc;
}
public DettaglioCostiDTO setQtaDoc(BigDecimal qtaDoc) {
this.qtaDoc = qtaDoc;
return this;
}
public BigDecimal getValDoc() {
return valDoc;
}
public DettaglioCostiDTO setValDoc(BigDecimal valDoc) {
this.valDoc = valDoc;
return this;
}
public LocalDate getDataOrd() {
return dataOrd;
}
public DettaglioCostiDTO setDataOrd(LocalDate dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public Integer getNumOrd() {
return numOrd;
}
public DettaglioCostiDTO setNumOrd(Integer numOrd) {
this.numOrd = numOrd;
return this;
}
}

View File

@@ -3,6 +3,7 @@ package it.integry.ems.production.service;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import it.integry.common.var.CommonConstants;
import it.integry.ems.Import.dto.AnomalieDTO;
import it.integry.ems.document.dto.ChiusuraLavorazioneDTO;
import it.integry.ems.document.service.DocumentProdService;
import it.integry.ems.exception.MissingDataException;
@@ -11,6 +12,8 @@ import it.integry.ems.production.dto.*;
import it.integry.ems.rules.businessLogic.LoadColliService;
import it.integry.ems.rules.businessLogic.dto.LoadColliDTO;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.service.MailService;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
@@ -27,12 +30,11 @@ import org.springframework.stereotype.Service;
import java.io.IOException;
import java.math.BigDecimal;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import java.math.RoundingMode;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
@@ -53,6 +55,9 @@ public class ProductionService {
@Autowired
private LoadColliService loadColliService;
@Autowired
private MailService mailService;
public void chiudiGiornata(ChiudiGiornataDTO datiChiusura) throws Exception {
Connection conn = multiDBTransactionManager.getPrimaryConnection();
HashMap<String, String> setupCruscotto = setupGest.getSetupSection(conn, "CRUSCOTTO_PRODUZIONE", "SETUP");
@@ -1141,7 +1146,51 @@ public class ProductionService {
return entities;
}
public List<EntityBase> distribuzioneMateriali(DtbDoct dtbDoct) throws Exception {
public List<EntityBase> distribuzioneMateriali() throws Exception {
String sql =
"SELECT dtb_doct.*\n" +
"FROM dtb_doct INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
"WHERE dtb_tipi.gestione = 'L' \n" +
" AND dtb_doct.id_lotto is not null \n" +
" AND (dtb_tipi.segno_qta_car < 0 OR segno_qta_scar > 0 ) \n" +
" AND data_doc BETWEEN DATEADD(MONTH, -1, CAST(GETDATE() AS DATE)) AND CAST(GETDATE() AS DATE)";
List<DtbDoct> dtbDocts = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbDoct.class);
List<EntityBase> entities = new ArrayList<>();
List<AnomalieDTO> anomalieDTOS = new ArrayList<>();
for (DtbDoct dtbDoct : dtbDocts) {
distribuzioneMateriali(dtbDoct);
entities.add(distribuzioneMateriali(dtbDoct));
if (dtbDoct.getException() != null) {
anomalieDTOS.add(
AnomalieDTO.error(
String.format(
"Errore nell'aggiornamento del documento %s del %s n. %s/%s: %s",
dtbDoct.getCodDtip(),
new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dtbDoct.getDataDoc()),
dtbDoct.getSerDoc(),
dtbDoct.getNumDoc(),
dtbDoct.getException().getMessage()
)));
}
}
if (anomalieDTOS.size() > 0) {
String emailForLog = setupGest.getSetup("W_PORDI_RC", "DISTRIBUZIONE_MATERIALI", "EMAL_NOTIFICATION");
if (!UtilityString.isNullOrEmpty(emailForLog))
mailService.sendErrorMail(multiDBTransactionManager, emailForLog, "Errore durante la procedure di distribuzione materiali",
"Errore durante la procedure di distribuzione materiali",
entities.stream().filter(x -> x.getException() != null).collect(Collectors.toList()),
null, anomalieDTOS, null);
}
return entities;
}
public DtbDoct distribuzioneMateriali(DtbDoct dtbDoct) throws Exception {
Connection conn = multiDBTransactionManager.getPrimaryConnection();
String sql = Query.format(
"SELECT * FROM dtb_docr WHERE cod_dtip = %s AND num_doc = %s AND data_doc = %s AND cod_anag = %s AND ser_doc = %s",
@@ -1309,8 +1358,8 @@ public class ProductionService {
}
dtbDoct.setOperation(OperationType.UPDATE);
return entityProcessor.processEntity(dtbDoct, multiDBTransactionManager);
entityProcessor.processEntity(dtbDoct, multiDBTransactionManager);
return dtbDoct;
}
public static BigDecimal sumQtaOrd(List<RigheLottLavDTO> righeLottLavDTOList) {
@@ -1318,4 +1367,213 @@ public class ProductionService {
.map(RigheLottLavDTO::getQta_ord)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
public List<DettaglioCostiDTO> getDettaglioCostiProd(String codProd, String partitaMag, String codJcom) throws Exception {
String sql = "WITH ordini AS (SELECT dtb_ordt.cod_prod,\n" +
" dtb_ordt.partita_mag AS partita_mag_prod,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ord_steps.data_iniz,\n" +
" dtb_ord_steps.data_fine,\n" +
" dtb_ordt.gestione,\n" +
" dtb_ordt.cod_jcom,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord,\n" +
" IIF(dtb_ordt.qta_evasa_prod = 0, dtb_ordt.qta_prod, dtb_ordt.qta_evasa_prod) *\n" +
" dtb_ordt.rap_conv_prod AS qta_prod\n" +
" FROM dtb_ordt\n" +
" INNER JOIN dtb_ord_steps\n" +
" ON dtb_ordt.gestione = dtb_ord_steps.gestione AND\n" +
" dtb_ordt.data_ord = dtb_ord_steps.data_ord AND\n" +
" dtb_ordt.num_ord = dtb_ord_steps.num_ord\n" +
" WHERE dtb_ordt.gestione = 'L'),\n" +
" produzioni_commessa AS (SELECT cod_jfas,\n" +
" cod_jcom,\n" +
" data_lav,\n" +
" SUM(qta_prod) AS qta_prod\n" +
" FROM (SELECT DISTINCT cod_jfas,\n" +
" cod_jcom,\n" +
" CAST(data_iniz AS DATE) AS data_lav,\n" +
" qta_prod\n" +
" FROM ordini) ord\n" +
"\n" +
" GROUP BY cod_jfas, cod_jcom, data_lav)\n" +
" ,\n" +
" rapportini AS (SELECT jtb_rlavr.cod_jfas,\n" +
" jtb_rlavr.cod_jcom,\n" +
" jtb_rlavr.cod_jflav,\n" +
" jtb_rlavr.ore,\n" +
" jvw_timbrature.ingresso,\n" +
" jvw_timbrature.uscita,\n" +
" ordini.cod_prod,\n" +
" ordini.partita_mag_prod,\n" +
" ordini.qta_prod,\n" +
" produzioni_commessa.qta_prod AS prd_comm,\n" +
" ROUND((ordini.qta_prod / produzioni_commessa.qta_prod) *\n" +
" jtb_rlavr.ore,\n" +
" 5) ora_lav_ord,\n" +
" ROUND(ordini.qta_prod / produzioni_commessa.qta_prod *\n" +
" jtb_rlavr.ore, 5) *\n" +
" jtb_flav.costo_ord AS costo_lav,\n" +
" ordini.data_ord,\n" +
" ordini.num_ord\n" +
" FROM jtb_rlavt\n" +
" INNER JOIN jtb_rlavr ON jtb_rlavt.cod_jflav = jtb_rlavr.cod_jflav AND\n" +
" jtb_rlavt.data_lav = jtb_rlavr.data_lav\n" +
" INNER JOIN jtb_flav ON jtb_rlavt.cod_jflav = jtb_flav.cod_jflav\n" +
" LEFT OUTER JOIN jvw_timbrature ON jtb_rlavt.cod_jflav = jvw_timbrature.cod_jflav AND\n" +
" jtb_rlavt.data_lav = jvw_timbrature.data_lav\n" +
" INNER JOIN ordini ON jtb_rlavr.cod_jcom = ordini.cod_jcom AND\n" +
" jtb_rlavr.cod_jfas = ordini.cod_jfas AND\n" +
" ((jtb_rlavt.data_lav BETWEEN CAST(ordini.data_iniz AS DATE) AND CAST(ordini.data_fine AS DATE))\n" +
" OR (jtb_rlavt.data_lav <= CAST(ordini.data_iniz AS DATE) AND\n" +
" ordini.data_fine IS NULL))\n" +
" INNER JOIN produzioni_commessa ON jtb_rlavr.cod_jfas = produzioni_commessa.cod_jfas AND\n" +
" jtb_rlavr.cod_jcom = produzioni_commessa.cod_jcom AND\n" +
" jtb_rlavr.data_lav = produzioni_commessa.data_lav\n" +
" WHERE jtb_rlavr.ore <> 0)" +
" , doc_l AS (SELECT dtb_docr.cod_mart,\n" +
" dtb_docr.partita_mag,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord,\n" +
" SUM(dtb_docr.qta_doc) AS qta_doc,\n" +
" SUM(dtb_docr.qta_doc * IIF(dtb_docr.partita_mag IS NULL,\n" +
" [dbo].[f_GetCostoUltArt_depo](dtb_doct.data_reg, dtb_doct.cod_mdep,\n" +
" dtb_docr.cod_mart),\n" +
" mtb_partita_mag.costo_unt_um_mag)) AS val_doc\n" +
" FROM dtb_doct\n" +
" INNER JOIN dtb_docr ON dtb_doct.cod_anag = dtb_docr.cod_anag AND\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip AND\n" +
" dtb_doct.data_doc = dtb_docr.data_doc AND\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc AND\n" +
" dtb_doct.num_doc = dtb_docr.num_doc\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" LEFT OUTER JOIN mtb_partita_mag ON dtb_docr.cod_mart = mtb_partita_mag.cod_mart AND\n" +
" dtb_docr.partita_mag = mtb_partita_mag.partita_mag\n" +
" WHERE dtb_doct.gestione = 'L'\n" +
" AND (dtb_tipi.segno_qta_car < 0 OR dtb_tipi.segno_qta_scar > 0)\n" +
" GROUP BY dtb_docr.cod_mart,\n" +
" dtb_docr.partita_mag,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord)\n" +
"\n" +
"SELECT 'M' AS gruppo,\n" +
" dtb_ordt.cod_jcom,\n" +
" dtb_ordt.cod_prod,\n" +
" dtb_ordt.partita_mag AS partitaMagProd,\n" +
" IIF(dtb_ordt.qta_evasa_prod = 0, dtb_ordt.qta_prod, dtb_ordt.qta_evasa_prod) * dtb_ordt.rap_conv_prod AS qta_prod,\n" +
" doc_l.cod_mart,\n" +
" doc_l.partita_mag,\n" +
" doc_l.qta_doc,\n" +
" doc_l.val_doc,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord\n" +
"FROM dtb_ordt\n" +
" INNER JOIN doc_l ON dtb_ordt.data_ord = doc_l.data_ord AND dtb_ordt.num_ord = doc_l.num_ord\n" +
"WHERE cod_prod = " + UtilityDB.valueToString(codProd) + "\n" +
" AND cod_jcom = " + UtilityDB.valueToString(codJcom) + "\n" +
" AND (" + UtilityDB.valueToString(partitaMag) + " IS NULL OR dtb_ordt.partita_mag = " + UtilityDB.valueToString(partitaMag) + ")\n" +
" AND dtb_ordt.gestione = 'L'\n" +
"UNION ALL\n" +
"SELECT DISTINCT 'R' AS gruppo,\n" +
" cod_jcom,\n" +
" rapportini.cod_prod,\n" +
" rapportini.partita_mag_prod AS partitaMagProd,\n" +
" rapportini.qta_prod,\n" +
" rapportini.cod_jflav AS cod_mart,\n" +
" rapportini.cod_jfas AS partita_mag,\n" +
" ora_lav_ord,\n" +
" costo_lav,\n" +
" data_ord,\n" +
" num_ord\n" +
"FROM rapportini\n" +
"WHERE cod_prod = " + UtilityDB.valueToString(codProd) + "\n" +
" AND cod_jcom = " + UtilityDB.valueToString(codJcom) + "\n" +
" AND (" + UtilityDB.valueToString(partitaMag) + " IS NULL OR rapportini.partita_mag_prod = " + UtilityDB.valueToString(partitaMag) + ")\n" +
"UNION ALL\n" +
"SELECT 'T' AS gruppo,\n" +
" dtb_ordt.cod_jcom,\n" +
" dtb_ordt.cod_prod,\n" +
" dtb_ordt.partita_mag AS partitaMagProd,\n" +
" IIF(dtb_ordt.qta_evasa_prod = 0, dtb_ordt.qta_prod, dtb_ordt.qta_evasa_prod) AS qta_prod,\n" +
" dtb_ords.cod_spes,\n" +
" NULL,\n" +
" IIF(dtb_ordt.qta_evasa_prod = 0, dtb_ordt.qta_prod, dtb_ordt.qta_evasa_prod) AS qta_doc,\n" +
" IIF(dtb_ordt.qta_evasa_prod = 0, dtb_ordt.qta_prod, dtb_ordt.qta_evasa_prod) * dtb_ords.val_unt AS val_doc,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord\n" +
"FROM dtb_ordt\n" +
" INNER JOIN dtb_ords ON dtb_ordt.data_ord = dtb_ords.data_ord AND dtb_ordt.num_ord = dtb_ords.num_ord AND\n" +
" dtb_ordt.gestione = dtb_ords.gestione\n" +
" INNER JOIN gtb_anag ON dtb_ordt.cod_anag = gtb_anag.cod_anag\n" +
"WHERE cod_prod = " + UtilityDB.valueToString(codProd) + "\n" +
" AND cod_jcom = " + UtilityDB.valueToString(codJcom) + "\n" +
" AND (" + UtilityDB.valueToString(partitaMag) + " IS NULL OR dtb_ordt.partita_mag = " + UtilityDB.valueToString(partitaMag) + ")\n" +
" AND dtb_ordt.gestione = 'L'\n" +
" AND NOT EXISTS(SELECT * FROM azienda WHERE azienda.part_iva = gtb_anag.part_iva)\n" +
"ORDER BY data_ord, num_ord, cod_jcom, cod_prod, 4, gruppo";
return UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DettaglioCostiDTO.class);
}
public void attribuzioneCostoMaterialiLavorazione(Date dataIniz, Date dataFine, String codProd, String partitaMag, String codJcom) throws Exception {
String codDtipLav = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "W_PORDI_RC", "SETUP_DOCUMENTI", "COD_DTIP_CAR");
String codDtipLavTerzi = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "DATI_AZIENDA", "CONTO_LAVORO", "COD_DTIP_CLAV");
//cerco tutti i documenti di lavorazione creati nel periodo selezionato
String sql = "SELECT dtb_docr.*\n" +
"FROM dtb_docr\n" +
" INNER JOIN dtb_doct ON dtb_docr.cod_anag = dtb_doct.cod_anag AND dtb_docr.cod_dtip = dtb_doct.cod_dtip AND\n" +
" dtb_docr.data_doc = dtb_doct.data_doc AND dtb_docr.ser_doc = dtb_doct.ser_doc AND\n" +
" dtb_docr.num_doc = dtb_doct.num_doc AND dtb_docr.cod_mart = dtb_doct.cod_prod\n" +
"WHERE dtb_doct.data_doc BETWEEN " + UtilityDB.valueToString(dataIniz) + " AND " + UtilityDB.valueToString(dataFine) + "\n" +
" AND dtb_doct.cod_dtip in (" + UtilityDB.valueToString(codDtipLav) + " , "+UtilityDB.valueToString(codDtipLavTerzi)+")\n" +
" AND (" + UtilityDB.valueToString(codProd) + " IS NULL OR dtb_doct.cod_prod = " + UtilityDB.valueToString(codProd) + ")\n" +
" AND (" + UtilityDB.valueToString(codJcom) + " IS NULL OR dtb_doct.cod_jcom = " + UtilityDB.valueToString(codJcom) + ")\n" +
" AND (" + UtilityDB.valueToString(partitaMag) + " IS NULL OR dtb_doct.partita_mag = " + UtilityDB.valueToString(partitaMag) + ")";
List<DtbDocr> documentiLav = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbDocr.class);
if (UtilityList.isNullOrEmpty(documentiLav))
return;
// raggruppo per articolo/commessa/partita/ordine
List<ArticoloPartitaCommessaDTO> listToCheck = documentiLav
.stream()
.map(x -> new ArticoloPartitaCommessaDTO(x.getCodMart(), x.getCodJcom(), x.getPartitaMag(), x.getDataOrd(), x.getNumOrd()))
.distinct()
.collect(Collectors.toList());
for (ArticoloPartitaCommessaDTO dataToCheck : listToCheck) {
//prendo dettaglio costi per articolo commessa partita
List<DettaglioCostiDTO> dettaglioCosti = getDettaglioCostiProd(dataToCheck.getCodMart(), dataToCheck.getPartitaMag(), dataToCheck.getCodJcom());
if (UtilityList.isNullOrEmpty(dettaglioCosti))
continue;
//filtro solo i costi dell'ordine richiesto
List<DettaglioCostiDTO> costiOrdine = dettaglioCosti.stream()
.filter(c ->
Objects.equals(UtilityLocalDate.localDateToDate(c.getDataOrd()), dataToCheck.getDataOrd()) &&
Objects.equals(c.getNumOrd(), dataToCheck.getNumOrd())
)
.collect(Collectors.toList());
// il costoUnitario è la somma dei costi divisi per la quantità prodotta nell'ordine
BigDecimal costoProdUnt = costiOrdine.stream()
.map(x -> x.getValDoc().divide(x.getQtaProd(), 5, RoundingMode.HALF_UP))
.reduce(BigDecimal.ZERO, BigDecimal::add);
//aggiorno le righe dei vari documenti (mantenendo lo stesso filtro ovviamente)
List<DtbDocr> righeDaAggiornare = documentiLav.stream()
.filter(x -> new ArticoloPartitaCommessaDTO(x.getCodMart(), x.getCodJcom(), x.getPartitaMag(), x.getDataOrd(), x.getNumOrd()).equals(dataToCheck))
.peek(r -> {
r.setValUnt(costoProdUnt)
.setCostoUnt(costoProdUnt)
.setOperation(OperationType.UPDATE);
}).collect(Collectors.toList());
List<DtbDoct> docDaAggiornare = righeDaAggiornare.stream().map(r -> new DtbDoct(r.getCodAnag(), r.getCodDtip(), r.getDataDoc(), r.getNumDoc(), r.getSerDoc())).distinct().collect(Collectors.toList());
docDaAggiornare = docDaAggiornare.stream().peek(d -> {
d.setDtbDocr(righeDaAggiornare.stream()
.filter(r -> d.equals(new DtbDoct(r.getCodAnag(), r.getCodDtip(), r.getDataDoc(), r.getNumDoc(), r.getSerDoc())))
.collect(Collectors.toList()));
}).collect(Collectors.toList());
entityProcessor.processEntityList(docDaAggiornare, true);
}
}
}

View File

@@ -27,9 +27,11 @@ import it.integry.ems.response.EsitoType;
import it.integry.ems.response.FileItem;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.retail.dto.AnomalieResiDTO;
import it.integry.ems.retail.dto.GiacenzaDTO;
import it.integry.ems.retail.dto.OrdChkConsDTO;
import it.integry.ems.retail.pvmRetail.dto.*;
import it.integry.ems.retail.pvmRetail.dto.save.*;
import it.integry.ems.retail.service.GiacenzaPvHandlerService;
import it.integry.ems.rules.businessLogic.LoadColliService;
import it.integry.ems.rules.businessLogic.dto.LoadColliDTO;
import it.integry.ems.rules.completing.OrderRules;
@@ -136,6 +138,9 @@ public class PvmService {
@Autowired
private UserSession userSession;
@Autowired
private GiacenzaPvHandlerService giacenzaPvHandlerService;
public List<OrdChkConsDTO> chkDisponibilitaCons(Date dataCons, String citta) throws Exception {
String profileDb = null;
HashMap<String, Object> userData = systemService.login(requestDataDTO.getUsername(), requestDataDTO.getPassword(), "", profileDb);
@@ -1553,6 +1558,7 @@ public class PvmService {
private MtbColt saveColli(ColloDTO colloDTO, Date dateCreate, String gestione, String segno, String annotazioni,
String codMdep, String codDtip) throws Exception {
boolean saveGiacenza = false;
DatiFiltroDTO filtroOrdini;
if ("A".equals(gestione)) {
segno = "1";
@@ -1569,29 +1575,28 @@ public class PvmService {
+ " section = 'DOC_INTERNI' and key_section = 'COD_DTIP_'+ case when "
+ UtilityDB.valueToString(annotazioni) + " = 'TRASFERIMENTO' THEN 'TRASF_L' ELSE "
+ UtilityDB.valueToString(annotazioni) + " END ";
PreparedStatement info = multiDBTransactionManager.prepareStatement(sql);
ResultSet res = info.executeQuery();
if (res.next()) {
codDtip = res.getString("value");
}
res.close();
info.close();
codDtip = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
} else if (!UtilityString.isNullOrEmpty(codDtip) &&
setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "DATI_AZIENDA", "GIACENZA_DA_INV", "TIPO_DOC_RETT").equalsIgnoreCase(codDtip)){
saveGiacenza = true;
}
}
MtbColt collo = new MtbColt();
collo.setOperation(OperationType.INSERT);
collo.setGestione(gestione);
collo.setSegno(Integer.parseInt(segno));
collo.setCodMdep(codMdep);
collo.setDataCollo(UtilityLocalDate.getNow());
collo.setAnnotazioni(annotazioni);
collo.setCodDtipProvv(codDtip.toUpperCase());
collo.setOraFinePrep(dateCreate);
collo.setCodAnag(colloDTO.getCodAnag());
collo.setDataDocProvv(colloDTO.getDataDoc());
collo.setNumDocProvv(colloDTO.getNumDoc());
collo.setCodAnag(colloDTO.getCodAnag());
collo.setCodVdes(colloDTO.getCodVdes());
collo.setGestione(gestione)
.setSegno(Integer.parseInt(segno))
.setCodMdep(codMdep)
.setDataCollo(UtilityLocalDate.getNow())
.setAnnotazioni(annotazioni)
.setCodDtipProvv(codDtip.toUpperCase())
.setOraFinePrep(dateCreate)
.setCodAnag(colloDTO.getCodAnag())
.setDataDocProvv(colloDTO.getDataDoc())
.setNumDocProvv(colloDTO.getNumDoc())
.setCodAnag(colloDTO.getCodAnag())
.setCodVdes(colloDTO.getCodVdes());
// VERIFICARE SE NEL COLLO CI SONO I DATI DELL'ORDINE
Boolean existOrd = false;
@@ -1606,15 +1611,15 @@ public class PvmService {
+ UtilityDB.valueToString(gestione) + " and data_ord = "
+ UtilityDB.valueDateToString(dataOrd, DATE_FORMAT_YMD) + " and num_ord = "
+ numOrd;
PreparedStatement info = multiDBTransactionManager.prepareStatement(query);
ResultSet res = info.executeQuery();
if (res.next()) {
collo.setCodAnag(res.getString("cod_anag"));
collo.setCodVdes(res.getString("cod_vdes"));
collo.setCodVlis(res.getString("listino"));
HashMap<String, Object> dati = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), query);
if (UtilityHashMap.isPresent(dati)) {
collo.setCodAnag(UtilityHashMap.getValueIfExists(dati, "cod_anag"));
collo.setCodVdes(UtilityHashMap.getValueIfExists(dati, "cod_vdes"));
collo.setCodVlis(UtilityHashMap.getValueIfExists(dati, "listino"));
}
res.close();
info.close();
collo.setDataOrd(dataOrd);
collo.setNumOrd(numOrd);
} else {
@@ -1654,24 +1659,14 @@ public class PvmService {
if (UtilityString.isNullOrEmpty(codMart) && !UtilityString.isNullOrEmpty(codBarre)) {
String query = "SELECT cod_mart FROM mvw_barcode WHERE REPLICATE('0', 13 - LEN(cod_barre)) + cod_barre = " + UtilityDB.valueToString(codBarre);
PreparedStatement info = multiDBTransactionManager.prepareStatement(query);
ResultSet res = info.executeQuery();
if (res.next()) {
codMart = res.getString("cod_mart");
}
res.close();
info.close();
codMart = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
}
if (!UtilityString.isNullOrEmpty(codMart) && "A".equals(gestione)) {
String query = "SELECT cod_comp FROM mtb_comp WHERE cod_mart = " + UtilityDB.valueToString(codMart);
PreparedStatement info = multiDBTransactionManager.prepareStatement(query);
ResultSet res = info.executeQuery();
if (res.next()) {
codMart = res.getString("cod_comp");
}
res.close();
info.close();
codMart = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
}
BigDecimal qtaCol = artRow.getQta();
@@ -1697,6 +1692,17 @@ public class PvmService {
row.setNumOrd(collo.getNumOrd());
row.setRigaOrd(artRow.getRigaOrd());
}
if (saveGiacenza) {
GiacenzaDTO giacenzaPvArticolo = giacenzaPvHandlerService.getGiacenzaPvArticolo(multiDBTransactionManager.getPrimaryDatasource().getDbName(),
multiDBTransactionManager.getPrimaryConnection(),
codMdep, codMart);
if (giacenzaPvArticolo != null){
ObjectMapper objectMapper = new ObjectMapper();
String jsonParm = objectMapper.writeValueAsString(giacenzaPvArticolo);
row.setSystemNote(jsonParm);
}
}
rowList.add(row);
}
collo.setMtbColr(rowList);

View File

@@ -0,0 +1,350 @@
package it.integry.ems.retail.service;
import it.integry.ems.retail.dto.GiacenzaDTO;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ContextLoader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@Component
public class GiacenzaPvHandlerService {
private final HashMap<String, HashMap<String, List<GiacenzaDTO>>> listGiacenzaPv = new HashMap<>();
public void setGiacenzaPv(String profileDb, String codMdep, List<GiacenzaDTO> giacenzaDTOS) {
if ( !listGiacenzaPv.containsKey(profileDb.toUpperCase()) ) {
listGiacenzaPv.put(profileDb.toUpperCase(), new HashMap<>());
}
HashMap<String, List<GiacenzaDTO>> giacenzeMap = listGiacenzaPv.get(profileDb.toUpperCase());
if (!giacenzeMap.containsKey(codMdep.toUpperCase())) {
giacenzeMap.put(codMdep.toUpperCase(), new ArrayList<>());
}
giacenzeMap.put(codMdep.toUpperCase(), giacenzaDTOS);
listGiacenzaPv.put(profileDb.toUpperCase(), giacenzeMap);
}
public GiacenzaDTO getGiacenzaPvArticolo(String dbName, Connection connection, String codMdep, String codMart) throws Exception {
HashMap<String, HashMap<String, List<GiacenzaDTO>>> inputMap = listGiacenzaPv;
List<GiacenzaDTO> giacenzaPv = getGiacenzaPvDBName(inputMap, dbName).get(codMdep);
if (giacenzaPv == null) {
GiacenzaService giacenzaService = new GiacenzaService();
giacenzaPv = retrieveGiacenza(dbName, connection, codMdep);
setGiacenzaPv(dbName, codMdep, giacenzaPv);
}
if (giacenzaPv != null)
return giacenzaPv.stream()
.filter(x-> x.getCodMart().equalsIgnoreCase(codMart))
.findFirst()
.orElse(null);
return null;
}
public List<GiacenzaDTO> retrieveGiacenza(String dbName, Connection connection, String codMdep) throws Exception {
String sql = Query.format(
"SELECT cod_mdep FROM stb_gest_setup_depo WHERE gest_name = %s AND section = %s AND key_section = %S AND value = %S",
"DATI_AZIENDA", "GIACENZA_DA_INV", "REPLACE_DEPO", codMdep);
String codMdepNew = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql);
String whereCond = UtilityDB.valueToString(codMdep);
if (codMdepNew != null) {
whereCond += ", " + UtilityDB.valueToString(codMdepNew);
}
sql = "WITH art AS (SELECT mtb_aart.cod_mart AS cod_mart,\n" +
" IIF(mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_comp.cod_comp IS NOT NULL, mtb_comp.cod_comp, mtb_aart.cod_mart) AS cod_mart_mov,\n" +
" ISNULL(mtb_comp.qta_std, 1) AS qta_std\n" +
" FROM mtb_aart\n" +
" LEFT OUTER JOIN mtb_comp\n" +
" ON mtb_aart.cod_mart = mtb_comp.cod_mart\n" +
" AND mtb_aart.articolo_composto = 'S'),\n" +
" movimenti AS (SELECT mtb_movi.cod_mart,\n" +
" mtb_movi.data_reg,\n" +
" mtb_movi.qta_car AS qta_car,\n" +
" mtb_movi.qta_scar AS qta_scar,\n" +
" dtb_doct.data_ins,\n" +
" 'D' AS tipo_car\n" +
" FROM mtb_movi\n" +
" INNER JOIN dtb_doct\n" +
" ON dtb_doct.cod_anag = mtb_movi.cod_anag\n" +
" AND dtb_doct.cod_dtip = mtb_movi.cod_dtip\n" +
" AND dtb_doct.data_doc = mtb_movi.data_doc\n" +
" AND dtb_doct.ser_doc = mtb_movi.ser_doc\n" +
" AND dtb_doct.num_doc = mtb_movi.num_doc\n" +
" WHERE mtb_movi.cod_mdep IN (" + whereCond + ") and dtb_doct.data_ins >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" UNION ALL\n" +
" SELECT wdtb_docr.cod_mart,\n" +
" wdtb_doct.data_reg,\n" +
" wdtb_docr.qta_doc * wdtb_docr.rap_conv,\n" +
" 0,\n" +
" wdtb_doct.data_mod,\n" +
" 'W' AS tipo_car\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag\n" +
" AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip\n" +
" AND wdtb_doct.data_doc = wdtb_docr.data_doc\n" +
" AND wdtb_doct.ser_doc = wdtb_docr.ser_doc\n" +
" AND wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.flag_elaborato = 'N'\n" +
" AND wdtb_doct.cod_mdep IN (" + whereCond + ") and wdtb_doct.data_ins >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" UNION ALL\n" +
" SELECT ntb_docr.cod_mart,\n" +
" ntb_doct.date_only_doc AS data_reg,\n" +
" 0,\n" +
" ntb_docr.qta_doc * ntb_docr.qta_cnf,\n" +
" ntb_doct.data_import,\n" +
" NULL AS tipo_car\n" +
" FROM ntb_doct\n" +
" INNER JOIN ntb_docr\n" +
" ON ntb_doct.cod_mdep = ntb_docr.cod_mdep\n" +
" AND ntb_doct.cod_cassa = ntb_docr.cod_cassa\n" +
" AND ntb_doct.data_doc = ntb_docr.data_doc\n" +
" LEFT OUTER JOIN dtb_tipi\n" +
" ON ntb_doct.cod_dtip_val = dtb_tipi.cod_dtip\n" +
" WHERE ntb_doct.cod_mdep IN (" + whereCond + ") and ntb_doct.data_import >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" AND ntb_doct.causale = 'V'\n" +
" AND (\n" +
" ntb_doct.data_doc_val IS NULL\n" +
" OR dtb_tipi.segno_qta_scar = 0\n" +
" )\n" +
" AND NOT EXISTS (SELECT *\n" +
" FROM dtb_doct\n" +
" INNER JOIN mtb_depo ON dtb_doct.cod_mdep = mtb_depo.cod_mdep AND\n" +
" dtb_doct.cod_dtip = mtb_depo.cod_dtip\n" +
" WHERE date_only_doc = dtb_doct.data_doc\n" +
" AND ntb_doct.cod_mdep = dtb_doct.cod_mdep)),\n" +
" inventario_provvisorio AS (SELECT art.cod_mart_mov AS cod_mart,\n" +
" SUM(qta_col * art.qta_std) AS qta_col,\n" +
" data_ins,\n" +
" MAX(data_ins) OVER ( PARTITION BY art.cod_mart_mov) AS max_data_ins\n" +
" FROM mtb_colt\n" +
" INNER JOIN mtb_colr\n" +
" ON mtb_colt.gestione = mtb_colr.gestione\n" +
" AND mtb_colt.data_collo = mtb_colr.data_collo\n" +
" AND mtb_colt.ser_collo = mtb_colr.ser_collo\n" +
" AND mtb_colt.num_collo = mtb_colr.num_collo\n" +
" INNER JOIN (SELECT mtb_aart.cod_mart AS cod_mart,\n" +
" IIF(mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_comp.cod_comp IS NOT NULL,\n" +
" mtb_comp.cod_comp, mtb_aart.cod_mart) AS cod_mart_mov,\n" +
" ISNULL(mtb_comp.qta_std, 1) AS qta_std\n" +
" FROM mtb_aart\n" +
" LEFT OUTER JOIN mtb_comp\n" +
" ON mtb_aart.cod_mart = mtb_comp.cod_mart) art\n" +
" ON mtb_colr.cod_mart = art.cod_mart\n" +
" WHERE mtb_colt.cod_dtip_provv = 'RGIAC'\n" +
" AND mtb_colt.data_distribuzione IS NULL\n" +
" AND mtb_colt.cod_mdep IN (" + whereCond + ")\n" +
" GROUP BY art.cod_mart_mov, mtb_colt.data_collo, data_ins),\n" +
" selezione_giacenza AS (SELECT ISNULL(ip.cod_mart, gp.cod_mart) AS cod_mart,\n" +
" ISNULL(ip.qta_col, gp.qta_car) AS qta_car,\n" +
" ISNULL(IIF(gp.data_ins < ip.data_ins, 0, gp.qta_scar), 0) AS qta_scar,\n" +
" ISNULL(ip.data_ins, gp.data_ins) AS data_ins,\n" +
" ISNULL(ip.data_ins, gp.data_reg) AS data_reg,\n" +
" IIF(ip.data_ins IS NULL, 0, 1) AS is_invent,\n" +
" ip.data_ins AS last_rgiac\n" +
" FROM carelli_giacenza_prog gp\n" +
" LEFT JOIN inventario_provvisorio ip\n" +
" ON ip.cod_mart = gp.cod_mart\n" +
" AND max_data_ins = ip.data_ins\n" +
" AND (gp.data_ins < ip.data_ins)\n" +
" WHERE gp.cod_mdep IN (" + whereCond + ")),\n" +
" mov AS (SELECT art.cod_mart_mov AS cod_mart,\n" +
" SUM(movimenti.qta_car * qta_std) + ISNULL(giac.qta_car, 0) AS qta_car,\n" +
" SUM(movimenti.qta_scar * qta_std) + ISNULL(giac.qta_scar, 0) AS qta_scar,\n" +
" GETDATE() AS data_ins\n" +
"\n" +
" FROM movimenti\n" +
" INNER JOIN art ON movimenti.cod_mart = art.cod_mart\n" +
" LEFT OUTER JOIN selezione_giacenza giac ON giac.cod_mart = art.cod_mart_mov\n" +
" WHERE (\n" +
" (movimenti.data_reg >= CAST(ISNULL(giac.data_reg, GETDATE()) AS DATE) AND\n" +
" (giac.data_ins IS NULL OR (movimenti.data_ins >= giac.data_ins))) OR\n" +
" (\n" +
" (movimenti.tipo_car = 'W') AND (\n" +
" (giac.data_ins IS NULL OR (movimenti.data_ins >= giac.data_ins)) OR\n" +
" (is_invent = 1 AND (movimenti.data_ins >= last_rgiac)) OR\n" +
" (is_invent = 0 AND movimenti.data_ins >= ISNULL(giac.data_reg, CAST(GETDATE() AS DATE)))\n" +
" )\n" +
" )\n" +
" )\n" +
"\n" +
" GROUP BY art.cod_mart_mov, giac.qta_car, giac.qta_scar),\n" +
" inv AS (SELECT ISNULL(r.cod_mart, k.cod_mart) AS cod_mart,\n" +
" ISNULL(r.qta_car, ISNULL(k.qta_car, 0)) - ISNULL(r.qta_scar, ISNULL(k.qta_scar, 0)) AS qta_inv,\n" +
" ISNULL(k.data_ins, CAST(GETDATE() AS DATE)) AS data_inventario\n" +
" FROM mov r\n" +
" FULL OUTER JOIN selezione_giacenza k\n" +
" ON k.cod_mart = r.cod_mart),\n" +
" final AS (SELECT cod_mart, qta_inv, data_inventario\n" +
" FROM inv\n" +
" UNION\n" +
" SELECT mtb_comp.cod_mart,\n" +
" ROUND(SUM(ISNULL(qta_inv, 0)) / SUM(qta_std), 2),\n" +
" MAX(data_inventario)\n" +
" FROM mtb_aart\n" +
" INNER JOIN mtb_comp ON mtb_aart.cod_mart = mtb_comp.cod_mart\n" +
" LEFT OUTER JOIN inv ON mtb_comp.cod_comp = inv.cod_mart\n" +
" WHERE mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_aart.flag_stato = 'A'\n" +
" GROUP BY mtb_comp.cod_mart)\n" +
"SELECT final.cod_mart,\n" +
" descrizione,\n" +
" qta_inv,\n" +
" data_inventario,\n" +
" " + UtilityDB.valueToString(codMdep) + " AS cod_mdep\n" +
"FROM final\n" +
" INNER JOIN mtb_aart ON final.cod_mart = mtb_aart.cod_mart";
List<GiacenzaDTO> listGiacenza = UtilityDB.executeSimpleQueryDTO(connection, sql, GiacenzaDTO.class);
String listiniAcquisto = new SetupGest().getSetup(connection,"DATI_AZIENDA", "GIACENZA_DA_INV", "LISTINI_ACQUISTO");
List<String> listini = Arrays.asList(listiniAcquisto.split("\\|"));
sql = "WITH incoming_stock_documenti AS (\n" +
"/*\n" +
"Estrazione dei documenti (bolle web) di merce consegnata\n" +
"*/\n" +
"\n" +
" SELECT wdtb_doct.cod_mdep,\n" +
" wdtb_docr.cod_mart,\n" +
" wdtb_docr.data_ord,\n" +
" wdtb_docr.num_ord,\n" +
" riga_ord,\n" +
" wdtb_doct.cod_anag,\n" +
" wdtb_docr.qta_doc * wdtb_docr.rap_conv AS qta_doc,\n" +
" wdtb_doct.flag_elaborato\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.data_ins >= dateadd(DAY, - 21, CAST(getdate() AS DATE))\n" +
" AND wdtb_doct.cod_mdep = " + UtilityDB.valueToString(codMdep) + ")\n" +
" , incoming_stock_ordini AS (\n" +
"/*\n" +
"Estrazione degli ordini d'acquisto in consegna\n" +
"*/\n" +
" SELECT r.cod_mdep,\n" +
" r.cod_mart,\n" +
" CASE\n" +
" WHEN r.data_cons = r.data_ord\n" +
" THEN CAST(getdate() AS DATE)\n" +
" ELSE r.data_cons\n" +
" END AS data_cons,\n" +
" r.qta_ord,\n" +
" r.data_ord,\n" +
" r.riga_ord,\n" +
" r.num_ord,\n" +
" cod_anag\n" +
" FROM dtb_ordt t\n" +
" INNER JOIN dtb_ordr r\n" +
" ON t.gestione = r.gestione\n" +
" AND t.data_ord = r.data_ord\n" +
" AND t.num_ord = r.num_ord\n" +
" WHERE\n" +
" -- ordini acquisto\n" +
" t.gestione = 'A'\n" +
" -- ordini non annullati\n" +
" AND t.flag_annulla = 'N'\n" +
" -- ordii non sospesi\n" +
" AND t.flag_sospeso = 'N'\n" +
" AND (\n" +
" -- ordini futuri\n" +
" (r.data_cons >= CAST(getdate() AS DATE))\n" +
" OR\n" +
" -- ordini fuori piano logistico (r.data_cons = r.data_ord), inevasi e fatti negli ultimi 3 giorni\n" +
" (\n" +
" r.data_cons = r.data_ord\n" +
" AND flag_evaso = 'I'\n" +
" AND r.data_ord >= dateadd(DAY, - 3, CAST(getdate() AS DATE))\n" +
" )\n" +
" )\n" +
" -- prendiamo i soli ordini del SECCO, sarà da modificare quando inizieranno ad ordinare anche altri (es. APULD)\n" +
" AND t.listino IN (" + UtilityDB.listValueToString(listini) + ")\n" +
" -- ordine non ancora evaso\n" +
" AND flag_evaso <> 'E'\n" +
" -- filtro solamente un Pdv\n" +
" AND r.cod_mdep = " + UtilityDB.valueToString(codMdep) + ")\n" +
" , incoming_stock_doc_consegnati AS (\n" +
"/*\n" +
"Estrazione dei documenti consegnati\n" +
"*/\n" +
" SELECT DISTINCT wdtb_docr.num_ord, wdtb_docr.data_ord, wdtb_doct.cod_anag\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.data_ins >= dateadd(DAY, - 7, CAST(getdate() AS DATE))\n" +
" AND wdtb_doct.flag_elaborato = 'N')\n" +
"\n" +
"-- Step 4) Unione delle estrazioni precedenti [MySQL]\n" +
"\n" +
"SELECT ISNULL(d.cod_mdep, o.cod_mdep) AS store_code,\n" +
" ISNULL(d.cod_mart, o.cod_mart) AS art_code,\n" +
" data_cons,\n" +
" SUM(ISNULL(qta_doc, qta_ord)) AS incoming_stock\n" +
"FROM incoming_stock_ordini o\n" +
" FULL OUTER JOIN incoming_stock_documenti d\n" +
" ON o.cod_mdep = d.cod_mdep AND o.cod_mart = d.cod_mart AND o.data_ord = d.data_ord AND\n" +
" o.num_ord = d.num_ord AND o.cod_anag = d.cod_anag AND o.riga_ord = d.riga_ord\n" +
" LEFT JOIN incoming_stock_doc_consegnati k\n" +
" ON o.num_ord = k.num_ord AND o.cod_anag = k.cod_anag AND o.data_ord = k.data_ord\n" +
"WHERE (flag_elaborato = 'I' OR flag_elaborato IS NULL)\n" +
" AND ((d.cod_mart IS NOT NULL) OR (d.cod_mart IS NULL AND k.num_ord IS NULL))\n" +
"GROUP BY ISNULL(d.cod_mdep, o.cod_mdep), ISNULL(d.cod_mart, o.cod_mart), data_cons, k.num_ord\n";
List<HashMap<String, Object>> merceInArrivo = UtilityDB.executeSimpleQuery(connection, sql);
if (listGiacenza != null) {
merceInArrivo
.forEach(merce -> {
String storeCode = (String) merce.get("store_code");
String artCode = (String) merce.get("art_code");
BigDecimal incomingStock = (BigDecimal) merce.get("incoming_stock");
listGiacenza.stream()
.filter(x -> x.getCodMart().equals(artCode) && x.getCodMdep().equals(storeCode))
.findFirst()
.ifPresent(x -> {
x.setIncomingStock(incomingStock);
});
});
}
if ( listGiacenza != null && listGiacenza.size() > 0 ){
setGiacenzaPv(dbName,
codMdep,
listGiacenza);
}
return listGiacenza;
}
private HashMap<String, List<GiacenzaDTO>> getGiacenzaPvDBName(HashMap<String, HashMap<String, List<GiacenzaDTO>>> inputData, String profileDb) {
if (!inputData.containsKey(profileDb))
inputData.put(profileDb, new HashMap<>());
return inputData.get(profileDb);
}
}

View File

@@ -4,9 +4,11 @@ import com.annimon.stream.Stream;
import it.integry.ems.exception.PrimaryDatabaseNotPresentException;
import it.integry.ems.expansion.RunnableThrowable;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.production.service.MrpSetupHandlerService;
import it.integry.ems.retail.dto.GiacenzaDTO;
import it.integry.ems.retail.pvmRetail.service.PvmService;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
@@ -40,6 +42,8 @@ public class GiacenzaService {
PvmService pvmService;
@Autowired
EntityProcessor entityProcessor;
@Autowired
private GiacenzaPvHandlerService giacenzaPvHandlerService;
private final Logger logger = LogManager.getLogger();
@@ -508,284 +512,6 @@ public class GiacenzaService {
}
public List<GiacenzaDTO> retrieveGiacenza(String codMdep) throws Exception {
String sql = Query.format(
"SELECT cod_mdep FROM stb_gest_setup_depo WHERE gest_name = %s AND section = %s AND key_section = %S AND value = %S",
"DATI_AZIENDA", "GIACENZA_DA_INV", "REPLACE_DEPO", codMdep);
String codMdepNew = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
String whereCond = UtilityDB.valueToString(codMdep);
if (codMdepNew != null) {
whereCond += ", " + UtilityDB.valueToString(codMdepNew);
}
sql = "WITH art AS (SELECT mtb_aart.cod_mart AS cod_mart,\n" +
" IIF(mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_comp.cod_comp IS NOT NULL, mtb_comp.cod_comp, mtb_aart.cod_mart) AS cod_mart_mov,\n" +
" ISNULL(mtb_comp.qta_std, 1) AS qta_std\n" +
" FROM mtb_aart\n" +
" LEFT OUTER JOIN mtb_comp\n" +
" ON mtb_aart.cod_mart = mtb_comp.cod_mart\n" +
" AND mtb_aart.articolo_composto = 'S'),\n" +
" movimenti AS (SELECT mtb_movi.cod_mart,\n" +
" mtb_movi.data_reg,\n" +
" mtb_movi.qta_car AS qta_car,\n" +
" mtb_movi.qta_scar AS qta_scar,\n" +
" dtb_doct.data_ins,\n" +
" 'D' AS tipo_car\n" +
" FROM mtb_movi\n" +
" INNER JOIN dtb_doct\n" +
" ON dtb_doct.cod_anag = mtb_movi.cod_anag\n" +
" AND dtb_doct.cod_dtip = mtb_movi.cod_dtip\n" +
" AND dtb_doct.data_doc = mtb_movi.data_doc\n" +
" AND dtb_doct.ser_doc = mtb_movi.ser_doc\n" +
" AND dtb_doct.num_doc = mtb_movi.num_doc\n" +
" WHERE mtb_movi.cod_mdep IN (" + whereCond + ") and dtb_doct.data_ins >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" UNION ALL\n" +
" SELECT wdtb_docr.cod_mart,\n" +
" wdtb_doct.data_reg,\n" +
" wdtb_docr.qta_doc * wdtb_docr.rap_conv,\n" +
" 0,\n" +
" wdtb_doct.data_mod,\n" +
" 'W' AS tipo_car\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag\n" +
" AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip\n" +
" AND wdtb_doct.data_doc = wdtb_docr.data_doc\n" +
" AND wdtb_doct.ser_doc = wdtb_docr.ser_doc\n" +
" AND wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.flag_elaborato = 'N'\n" +
" AND wdtb_doct.cod_mdep IN (" + whereCond + ") and wdtb_doct.data_ins >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" UNION ALL\n" +
" SELECT ntb_docr.cod_mart,\n" +
" ntb_doct.date_only_doc AS data_reg,\n" +
" 0,\n" +
" ntb_docr.qta_doc * ntb_docr.qta_cnf,\n" +
" ntb_doct.data_import,\n" +
" NULL AS tipo_car\n" +
" FROM ntb_doct\n" +
" INNER JOIN ntb_docr\n" +
" ON ntb_doct.cod_mdep = ntb_docr.cod_mdep\n" +
" AND ntb_doct.cod_cassa = ntb_docr.cod_cassa\n" +
" AND ntb_doct.data_doc = ntb_docr.data_doc\n" +
" LEFT OUTER JOIN dtb_tipi\n" +
" ON ntb_doct.cod_dtip_val = dtb_tipi.cod_dtip\n" +
" WHERE ntb_doct.cod_mdep IN (" + whereCond + ") and ntb_doct.data_import >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" AND ntb_doct.causale = 'V'\n" +
" AND (\n" +
" ntb_doct.data_doc_val IS NULL\n" +
" OR dtb_tipi.segno_qta_scar = 0\n" +
" )\n" +
" AND NOT EXISTS (SELECT *\n" +
" FROM dtb_doct\n" +
" INNER JOIN mtb_depo ON dtb_doct.cod_mdep = mtb_depo.cod_mdep AND\n" +
" dtb_doct.cod_dtip = mtb_depo.cod_dtip\n" +
" WHERE date_only_doc = dtb_doct.data_doc\n" +
" AND ntb_doct.cod_mdep = dtb_doct.cod_mdep)),\n" +
" inventario_provvisorio AS (SELECT art.cod_mart_mov AS cod_mart,\n" +
" SUM(qta_col * art.qta_std) AS qta_col,\n" +
" data_ins,\n" +
" MAX(data_ins) OVER ( PARTITION BY art.cod_mart_mov) AS max_data_ins\n" +
" FROM mtb_colt\n" +
" INNER JOIN mtb_colr\n" +
" ON mtb_colt.gestione = mtb_colr.gestione\n" +
" AND mtb_colt.data_collo = mtb_colr.data_collo\n" +
" AND mtb_colt.ser_collo = mtb_colr.ser_collo\n" +
" AND mtb_colt.num_collo = mtb_colr.num_collo\n" +
" INNER JOIN (SELECT mtb_aart.cod_mart AS cod_mart,\n" +
" IIF(mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_comp.cod_comp IS NOT NULL,\n" +
" mtb_comp.cod_comp, mtb_aart.cod_mart) AS cod_mart_mov,\n" +
" ISNULL(mtb_comp.qta_std, 1) AS qta_std\n" +
" FROM mtb_aart\n" +
" LEFT OUTER JOIN mtb_comp\n" +
" ON mtb_aart.cod_mart = mtb_comp.cod_mart) art\n" +
" ON mtb_colr.cod_mart = art.cod_mart\n" +
" WHERE mtb_colt.cod_dtip_provv = 'RGIAC'\n" +
" AND mtb_colt.data_distribuzione IS NULL\n" +
" AND mtb_colt.cod_mdep IN (" + whereCond + ")\n" +
" GROUP BY art.cod_mart_mov, mtb_colt.data_collo, data_ins),\n" +
" selezione_giacenza AS (SELECT ISNULL(ip.cod_mart, gp.cod_mart) AS cod_mart,\n" +
" ISNULL(ip.qta_col, gp.qta_car) AS qta_car,\n" +
" ISNULL(IIF(gp.data_ins < ip.data_ins, 0, gp.qta_scar), 0) AS qta_scar,\n" +
" ISNULL(ip.data_ins, gp.data_ins) AS data_ins,\n" +
" ISNULL(ip.data_ins, gp.data_reg) AS data_reg,\n" +
" IIF(ip.data_ins IS NULL, 0, 1) AS is_invent,\n" +
" ip.data_ins AS last_rgiac\n" +
" FROM carelli_giacenza_prog gp\n" +
" LEFT JOIN inventario_provvisorio ip\n" +
" ON ip.cod_mart = gp.cod_mart\n" +
" AND max_data_ins = ip.data_ins\n" +
" AND (gp.data_ins < ip.data_ins)\n" +
" WHERE gp.cod_mdep IN (" + whereCond + ")),\n" +
" mov AS (SELECT art.cod_mart_mov AS cod_mart,\n" +
" SUM(movimenti.qta_car * qta_std) + ISNULL(giac.qta_car, 0) AS qta_car,\n" +
" SUM(movimenti.qta_scar * qta_std) + ISNULL(giac.qta_scar, 0) AS qta_scar,\n" +
" GETDATE() AS data_ins\n" +
"\n" +
" FROM movimenti\n" +
" INNER JOIN art ON movimenti.cod_mart = art.cod_mart\n" +
" LEFT OUTER JOIN selezione_giacenza giac ON giac.cod_mart = art.cod_mart_mov\n" +
" WHERE (\n" +
" (movimenti.data_reg >= CAST(ISNULL(giac.data_reg, GETDATE()) AS DATE) AND\n" +
" (giac.data_ins IS NULL OR (movimenti.data_ins >= giac.data_ins))) OR\n" +
" (\n" +
" (movimenti.tipo_car = 'W') AND (\n" +
" (giac.data_ins IS NULL OR (movimenti.data_ins >= giac.data_ins)) OR\n" +
" (is_invent = 1 AND (movimenti.data_ins >= last_rgiac)) OR\n" +
" (is_invent = 0 AND movimenti.data_ins >= ISNULL(giac.data_reg, CAST(GETDATE() AS DATE)))\n" +
" )\n" +
" )\n" +
" )\n" +
"\n" +
" GROUP BY art.cod_mart_mov, giac.qta_car, giac.qta_scar),\n" +
" inv AS (SELECT ISNULL(r.cod_mart, k.cod_mart) AS cod_mart,\n" +
" ISNULL(r.qta_car, ISNULL(k.qta_car, 0)) - ISNULL(r.qta_scar, ISNULL(k.qta_scar, 0)) AS qta_inv,\n" +
" ISNULL(k.data_ins, CAST(GETDATE() AS DATE)) AS data_inventario\n" +
" FROM mov r\n" +
" FULL OUTER JOIN selezione_giacenza k\n" +
" ON k.cod_mart = r.cod_mart),\n" +
" final AS (SELECT cod_mart, qta_inv, data_inventario\n" +
" FROM inv\n" +
" UNION\n" +
" SELECT mtb_comp.cod_mart,\n" +
" ROUND(SUM(ISNULL(qta_inv, 0)) / SUM(qta_std), 2),\n" +
" MAX(data_inventario)\n" +
" FROM mtb_aart\n" +
" INNER JOIN mtb_comp ON mtb_aart.cod_mart = mtb_comp.cod_mart\n" +
" LEFT OUTER JOIN inv ON mtb_comp.cod_comp = inv.cod_mart\n" +
" WHERE mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_aart.flag_stato = 'A'\n" +
" GROUP BY mtb_comp.cod_mart)\n" +
"SELECT final.cod_mart,\n" +
" descrizione,\n" +
" qta_inv,\n" +
" data_inventario,\n" +
" " + UtilityDB.valueToString(codMdep) + " AS cod_mdep\n" +
"FROM final\n" +
" INNER JOIN mtb_aart ON final.cod_mart = mtb_aart.cod_mart";
List<GiacenzaDTO> listGiacenza = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, GiacenzaDTO.class);
String listiniAcquisto = setupGest.getSetup("DATI_AZIENDA", "GIACENZA_DA_INV", "LISTINI_ACQUISTO");
List<String> listini = Arrays.asList(listiniAcquisto.split("\\|"));
sql = "WITH incoming_stock_documenti AS (\n" +
"/*\n" +
"Estrazione dei documenti (bolle web) di merce consegnata\n" +
"*/\n" +
"\n" +
" SELECT wdtb_doct.cod_mdep,\n" +
" wdtb_docr.cod_mart,\n" +
" wdtb_docr.data_ord,\n" +
" wdtb_docr.num_ord,\n" +
" riga_ord,\n" +
" wdtb_doct.cod_anag,\n" +
" wdtb_docr.qta_doc * wdtb_docr.rap_conv AS qta_doc,\n" +
" wdtb_doct.flag_elaborato\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.data_ins >= dateadd(DAY, - 21, CAST(getdate() AS DATE))\n" +
" AND wdtb_doct.cod_mdep = " + UtilityDB.valueToString(codMdep) + ")\n" +
" , incoming_stock_ordini AS (\n" +
"/*\n" +
"Estrazione degli ordini d'acquisto in consegna\n" +
"*/\n" +
" SELECT r.cod_mdep,\n" +
" r.cod_mart,\n" +
" CASE\n" +
" WHEN r.data_cons = r.data_ord\n" +
" THEN CAST(getdate() AS DATE)\n" +
" ELSE r.data_cons\n" +
" END AS data_cons,\n" +
" r.qta_ord,\n" +
" r.data_ord,\n" +
" r.riga_ord,\n" +
" r.num_ord,\n" +
" cod_anag\n" +
" FROM dtb_ordt t\n" +
" INNER JOIN dtb_ordr r\n" +
" ON t.gestione = r.gestione\n" +
" AND t.data_ord = r.data_ord\n" +
" AND t.num_ord = r.num_ord\n" +
" WHERE\n" +
" -- ordini acquisto\n" +
" t.gestione = 'A'\n" +
" -- ordini non annullati\n" +
" AND t.flag_annulla = 'N'\n" +
" -- ordii non sospesi\n" +
" AND t.flag_sospeso = 'N'\n" +
" AND (\n" +
" -- ordini futuri\n" +
" (r.data_cons >= CAST(getdate() AS DATE))\n" +
" OR\n" +
" -- ordini fuori piano logistico (r.data_cons = r.data_ord), inevasi e fatti negli ultimi 3 giorni\n" +
" (\n" +
" r.data_cons = r.data_ord\n" +
" AND flag_evaso = 'I'\n" +
" AND r.data_ord >= dateadd(DAY, - 3, CAST(getdate() AS DATE))\n" +
" )\n" +
" )\n" +
" -- prendiamo i soli ordini del SECCO, sarà da modificare quando inizieranno ad ordinare anche altri (es. APULD)\n" +
" AND t.listino IN (" + UtilityDB.listValueToString(listini) + ")\n" +
" -- ordine non ancora evaso\n" +
" AND flag_evaso <> 'E'\n" +
" -- filtro solamente un Pdv\n" +
" AND r.cod_mdep = " + UtilityDB.valueToString(codMdep) + ")\n" +
" , incoming_stock_doc_consegnati AS (\n" +
"/*\n" +
"Estrazione dei documenti consegnati\n" +
"*/\n" +
" SELECT DISTINCT wdtb_docr.num_ord, wdtb_docr.data_ord, wdtb_doct.cod_anag\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.data_ins >= dateadd(DAY, - 7, CAST(getdate() AS DATE))\n" +
" AND wdtb_doct.flag_elaborato = 'N')\n" +
"\n" +
"-- Step 4) Unione delle estrazioni precedenti [MySQL]\n" +
"\n" +
"SELECT ISNULL(d.cod_mdep, o.cod_mdep) AS store_code,\n" +
" ISNULL(d.cod_mart, o.cod_mart) AS art_code,\n" +
" data_cons,\n" +
" SUM(ISNULL(qta_doc, qta_ord)) AS incoming_stock\n" +
"FROM incoming_stock_ordini o\n" +
" FULL OUTER JOIN incoming_stock_documenti d\n" +
" ON o.cod_mdep = d.cod_mdep AND o.cod_mart = d.cod_mart AND o.data_ord = d.data_ord AND\n" +
" o.num_ord = d.num_ord AND o.cod_anag = d.cod_anag AND o.riga_ord = d.riga_ord\n" +
" LEFT JOIN incoming_stock_doc_consegnati k\n" +
" ON o.num_ord = k.num_ord AND o.cod_anag = k.cod_anag AND o.data_ord = k.data_ord\n" +
"WHERE (flag_elaborato = 'I' OR flag_elaborato IS NULL)\n" +
" AND ((d.cod_mart IS NOT NULL) OR (d.cod_mart IS NULL AND k.num_ord IS NULL))\n" +
"GROUP BY ISNULL(d.cod_mdep, o.cod_mdep), ISNULL(d.cod_mart, o.cod_mart), data_cons, k.num_ord\n";
List<HashMap<String, Object>> merceInArrivo = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), sql);
if (listGiacenza != null) {
merceInArrivo
.forEach(merce -> {
String storeCode = (String) merce.get("store_code");
String artCode = (String) merce.get("art_code");
BigDecimal incomingStock = (BigDecimal) merce.get("incoming_stock");
listGiacenza.stream()
.filter(x -> x.getCodMart().equals(artCode) && x.getCodMdep().equals(storeCode))
.findFirst()
.ifPresent(x -> {
x.setIncomingStock(incomingStock);
});
});
return listGiacenza;
}
return null;
return giacenzaPvHandlerService.retrieveGiacenza(multiDBTransactionManager.getPrimaryDatasource().getDbName(), multiDBTransactionManager.getPrimaryConnection(), codMdep);
}
}

View File

@@ -101,7 +101,7 @@ public class ListiniAcquistoHandlerService {
" descrizione,\n" +
" cod_mart,\n" +
" cod_art_for,\n" +
" qta_cnf,\n" +
" round(qta_cnf/rap_conv, 5) qta_cnf,\n" +
" unt_mis_acq,\n" +
" qta_min_ord,\n" +
" flag_qta_multipla\n" +

View File

@@ -9,6 +9,8 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.base.Joiner;
import it.integry.common.var.CommonConstants;
import it.integry.ems.dto.ExtendedStbActivity;
import it.integry.ems.dto.Result;
import it.integry.ems.expansion.RunnableArgsThrowable;
import it.integry.ems.file_sharer.IFileSharerAttachment;
import it.integry.ems.file_sharer.sharers.email.EmailFileAttachment;
import it.integry.ems.javabeans.RequestDataDTO;
@@ -17,6 +19,7 @@ import it.integry.ems.license.LicenseStatusDTO;
import it.integry.ems.report.dto.JasperDTO;
import it.integry.ems.report.dto.PairsDTO;
import it.integry.ems.response.*;
import it.integry.ems.retail.ReportVariazioni.dto.VariazioniDettaglioDTO;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.service.MailService;
import it.integry.ems.service.PrinterService;
@@ -35,7 +38,9 @@ import it.integry.ems.system.exception.NotValidLicenseException;
import it.integry.ems.system.request.SystemChangePasswordRequest;
import it.integry.ems.system.request.SystemLoginRequest;
import it.integry.ems.system.service.SystemService;
import it.integry.ems.utility.UtilityDirs;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems.utility.UtilityFile;
import it.integry.ems.utility.UtilityPrinter;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.config.EmsRestConstants;
@@ -48,9 +53,7 @@ import it.integry.ems_model.utility.*;
import it.integry.ems_model.utility.dto.ConvertQueryDTO;
import it.integry.security.cache.SecretKeyCacheComponent;
import it.integry.security.dto.LoginRequestDTO;
import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.sftp.SFTPClient;
import net.schmizz.sshj.transport.verification.PromiscuousVerifier;
import kotlin.Triple;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;
@@ -67,9 +70,13 @@ import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.nio.file.Paths;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
@RestController
@@ -1407,22 +1414,89 @@ public class SystemController {
@RequestMapping(value = EmsRestConstants.PATH_TEST, method = RequestMethod.POST)
public ServiceRestResponse test(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration) {
@RequestParam(CommonConstants.PROFILE_DB) String configuration) throws Exception {
try {
SSHClient client = new SSHClient();
client.addHostKeyVerifier(new PromiscuousVerifier());
client.connect("edis.chep.com");
client.authPassword("C0094362", "C526342");
SFTPClient sftpClient = client.newSFTPClient();
sftpClient.ls("/");
String sql = "SELECT dtb_doct.num_doc,\n" +
" dtb_doct.data_doc,\n" +
" dtb_doct.cod_anag,\n" +
" dtb_doct.cod_dtip,\n" +
" dtb_doct.ser_doc\n" +
"FROM dtb_doct\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
"WHERE dtb_doct.data_doc BETWEEN '2023/01/01' AND '2023-12-31'--BETWEEN '2024/01/01' AND GETDATE()\n" +
" AND dtb_doct.gestione = 'V'\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" AND dtb_tipi.segno_qta_scar <> 0\n" +
"ORDER BY dtb_doct.data_doc, dtb_doct.num_doc";
return ServiceRestResponse.createPositiveResponse();
} catch (Exception ex) {
logger.error(request.getRequestURI(), ex);
return new ServiceRestResponse(EsitoType.KO, configuration, ex);
final List<HashMap<String, Object>> documents = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), sql);
final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH-mm-ss")
.withZone(ZoneId.systemDefault());
String tempDir = Paths.get(UtilityDirs.getTempDirectoryPath(), "vgalimenti-export-" + dateTimeFormatter.format(LocalDateTime.now())).toString();
List<RunnableArgsThrowable<Triple<String, String, List<VariazioniDettaglioDTO>>>> calls = new ArrayList<>();
for (HashMap<String, Object> document : documents) {
String codAnag = UtilityHashMap.getValueIfExists(document, "cod_anag");
String serDoc = UtilityHashMap.getValueIfExists(document, "ser_doc");
Integer numDoc = UtilityHashMap.getValueIfExists(document, "num_doc");
Date dataDoc = UtilityHashMap.getValueIfExists(document, "data_doc");
String codDtip = UtilityHashMap.getValueIfExists(document, "cod_dtip");
calls.add(() -> {
try {
ArrayList<PairsDTO> params = new ArrayList<>();
params.add(new PairsDTO("cod_anag", codAnag));
params.add(new PairsDTO("ser_doc", serDoc));
params.add(new PairsDTO("num_doc", numDoc));
params.add(new PairsDTO("data_doc", dataDoc));
params.add(new PairsDTO("cod_dtip", codDtip));
JasperDTO jasperDTO = new JasperDTO()
.setParams(params)
.setReportId(20L);
final byte[] bytes = reportProcessor.processReport(jasperDTO);
UtilityFile.saveFile(tempDir, String.format("%s_%s_%s_%d_%s.pdf",
UtilityDate.formatDate(dataDoc, "yyyyMMdd"),
codDtip,
serDoc,
numDoc,
codAnag
), bytes);
} catch (Exception ex) {
// throw ex;
// logger.error(request.getRequestURI(), "Errore durante la generazione del pdf per il DDT [" +
// "num_doc: " + numDoc + ", " +
// "data_doc: " + dataDoc + ", " +
// "ser_doc: " + serDoc + ", " +
// "cod_anag: " + codAnag + ", " +
// "cod_dtip: " + codDtip + "] " + ex.getMessage());
throw new RuntimeException(new Exception("Errore durante la generazione del pdf per il DDT [" +
"num_doc: " + numDoc + ", " +
"data_doc: " + dataDoc + ", " +
"ser_doc: " + serDoc + ", " +
"cod_anag: " + codAnag + ", " +
"cod_dtip: " + codDtip + "] " + ex.getMessage()));
}
// break;
return null;
});
}
final ArrayList<Result<Triple<String, String, List<VariazioniDettaglioDTO>>>> results = UtilityThread.executeParallel(calls, 10);
return ServiceRestResponse.createPositiveResponse();
}
@RequestMapping(value = EmsRestConstants.PATH_STB_EMAIL_CONTENT_FATTURE_PASSIVE_DELETER, method = RequestMethod.POST)

View File

@@ -5,21 +5,15 @@ import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.system.exchange.service.ExchangeDocumentImportService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@RestController
@Scope("request")
@RequestMapping("exchange/documenti/")
public class ExchangeDocumentImportController {
private final Logger logger = LogManager.getLogger();
@Autowired
private ExchangeDocumentImportService exchangeDocumentImportService;
@@ -27,12 +21,23 @@ public class ExchangeDocumentImportController {
private RequestDataDTO requestDataDTO;
@RequestMapping(value = "importAcquisto", method = RequestMethod.GET)
public @ResponseBody
ServiceRestResponse importAcquisto(@RequestParam(CommonConstants.PROFILE_DB) String profileDb,
@RequestParam() String profileDbExchange) throws Exception {
try (MultiDBTransactionManager internalDb = new MultiDBTransactionManager(profileDb);
MultiDBTransactionManager exchangeDb = new MultiDBTransactionManager(profileDbExchange)) {
exchangeDocumentImportService.importAcquisto(internalDb, exchangeDb, requestDataDTO);
}
return ServiceRestResponse.createPositiveResponse();
}
@RequestMapping(value = "importLavorazione", method = RequestMethod.GET)
public @ResponseBody
ServiceRestResponse importLavorazione(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String profileDb,
@RequestParam() String profileDbExchange) throws Exception {
ServiceRestResponse importLavorazione(@RequestParam(CommonConstants.PROFILE_DB) String profileDb,
@RequestParam() String profileDbExchange) throws Exception {
try (MultiDBTransactionManager internalDb = new MultiDBTransactionManager(profileDb);
MultiDBTransactionManager exchangeDb = new MultiDBTransactionManager(profileDbExchange)) {
@@ -42,12 +47,10 @@ public class ExchangeDocumentImportController {
}
@RequestMapping(value = "importVendita", method = RequestMethod.GET)
public @ResponseBody
ServiceRestResponse importVendita(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String profileDb,
@RequestParam() String profileDbExchange) throws Exception {
ServiceRestResponse importVendita(@RequestParam(CommonConstants.PROFILE_DB) String profileDb,
@RequestParam() String profileDbExchange) throws Exception {
try (MultiDBTransactionManager internalDb = new MultiDBTransactionManager(profileDb);
MultiDBTransactionManager exchangeDb = new MultiDBTransactionManager(profileDbExchange)) {

View File

@@ -120,10 +120,12 @@ public class ExchangeDestinatariImportService {
private void singleUpdateImported(Connection connection, GtbAnag importedData, boolean useTempTable) throws Exception {
final HashMap<String, Object> importedKey = new HashMap<String, Object>() {{
put("cod_anag", importedData.getCodAnag());
}};
final List<HashMap<String, Object>> importedRowKeys = importedData.getVtbDest().stream()
.map(x -> new HashMap<String, Object>() {{
put("cod_anag", x.getCodAnag());
put("cod_vdes", x.getCodVdes());
}}).collect(Collectors.toList());
exchangeImportDataManagerService.updateImportedStatus(connection, "vtb_dest", importedKey, useTempTable);
exchangeImportDataManagerService.updateImportedStatus(connection, "vtb_dest", importedRowKeys, useTempTable);
}
}

View File

@@ -46,6 +46,10 @@ public class ExchangeDocumentImportService {
private final Logger logger = LogManager.getLogger();
public void importAcquisto(MultiDBTransactionManager internalMultiDb, MultiDBTransactionManager exchangeMultiDb, RequestDataDTO requestDataDTO) throws Exception {
this.internalImport(internalMultiDb, exchangeMultiDb, requestDataDTO, ExchangeImportSchemaManagerService.SchemaType.DocumentiAcquisto);
}
public void importLavorazione(MultiDBTransactionManager internalMultiDb, MultiDBTransactionManager exchangeMultiDb, RequestDataDTO requestDataDTO) throws Exception {
this.internalImport(internalMultiDb, exchangeMultiDb, requestDataDTO, ExchangeImportSchemaManagerService.SchemaType.DocumentiLavorazione);
}
@@ -62,6 +66,9 @@ public class ExchangeDocumentImportService {
String logType = null;
switch (schemaType) {
case DocumentiAcquisto:
logType = "acquisto";
break;
case DocumentiLavorazione:
logType = "lavorazione";
break;
@@ -78,7 +85,11 @@ public class ExchangeDocumentImportService {
String testataTableName;
String righeTableName;
if (schemaType == ExchangeImportSchemaManagerService.SchemaType.DocumentiLavorazione) {
if (schemaType == ExchangeImportSchemaManagerService.SchemaType.DocumentiAcquisto) {
testataTableName = "dtb_doct_acq";
righeTableName = "dtb_docr_acq";
} else if (schemaType == ExchangeImportSchemaManagerService.SchemaType.DocumentiLavorazione) {
testataTableName = "dtb_doct_lav";
righeTableName = "dtb_docr_lav";
@@ -229,7 +240,7 @@ public class ExchangeDocumentImportService {
.forEach(testata -> {
testata.setUserName(EXCHANGE_USER);
testata.setUsername(EXCHANGE_USER);
testata.setUpdProgMaga(false);
//testata.setUpdProgMaga(false);
testata.setDtbDocr(righe.parallelStream()
.filter(riga ->

View File

@@ -127,8 +127,8 @@ public class ExchangeFornitoriImportService {
put("cod_anag", importedData.getCodAnag());
}};
exchangeImportDataManagerService.updateImportedStatus(connection, "gtb_anag_clienti", importedKey, useTempTable);
exchangeImportDataManagerService.updateImportedStatus(connection, "vtb_clie", importedKey, useTempTable);
exchangeImportDataManagerService.updateImportedStatus(connection, "gtb_anag_fornitori", importedKey, useTempTable);
exchangeImportDataManagerService.updateImportedStatus(connection, "atb_forn", importedKey, useTempTable);
}
}

View File

@@ -31,7 +31,8 @@ public class ExchangeImportSchemaManagerService {
Clienti(11),
Fornitori(12),
PDCAnag(13),
Destinatari(14);
Destinatari(14),
DocumentiAcquisto(15);
private final int value;
@@ -81,6 +82,8 @@ public class ExchangeImportSchemaManagerService {
put(SchemaType.Fornitori, Arrays.asList("gtb_anag_fornitori", "atb_forn"));
put(SchemaType.PDCAnag, Collections.singletonList("ctb_anag"));
put(SchemaType.Destinatari, Collections.singletonList("vtb_dest"));
put(SchemaType.DocumentiAcquisto, Arrays.asList("dtb_doct_acq", "dtb_docr_acq"));
}};
public List<String> getTablesBySchemaType(SchemaType schemaType) {

View File

@@ -69,8 +69,8 @@ public class AnagraficaDocFinanceService {
" LEFT OUTER JOIN gtb_banc_azi_intercode ON vtb_clie.cod_banc_azi = gtb_banc_azi_intercode.cod_banc_azi AND\n" +
" gtb_banc_azi_intercode.formato = 'DOCFINANCE'\n" +
(exportAllAnag?"":
"WHERE (data_ins >= CAST(GETDATE() AS DATE)\n" +
" OR data_mod = CAST(GETDATE() AS DATE))\n" )+
"WHERE (CAST(data_ins AS DATE)>= CAST(GETDATE() AS DATE)\n" +
" OR CAST(data_mod AS DATE)= CAST(GETDATE() AS DATE))\n" )+
"UNION ALL\n" +
"SELECT 'ROSSOGARGA' AS azienda,\n" +
" IIF(diacod > 0, diacod, ctb_cont.cod_ccon) AS codice_pdc,\n" +
@@ -100,8 +100,8 @@ public class AnagraficaDocFinanceService {
" NULL AS voce_finanziaria\n" +
"FROM ctb_cont\n" +
(exportAllAnag?"":
"WHERE (data_ins >= CAST(GETDATE() AS DATE)\n" +
" OR data_mod = CAST(GETDATE() AS DATE))");
"WHERE (CAST(data_ins AS DATE)>= CAST(GETDATE() AS DATE)\n" +
" OR CAST(data_mod AS DATE)= CAST(GETDATE() AS DATE))");
List<AnagraficaDocFinanceDTO> anagraficaDocFinance = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, AnagraficaDocFinanceDTO.class);
TxtMapper<AnagraficaDocFinanceDTO> txtMapper = new TxtMapper<AnagraficaDocFinanceDTO>()

View File

@@ -1 +1,41 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250.32 249.54"><g id="Chiuso"><path d="M30.51,205.22A125.6,125.6,0,0,1,67.17,21.3L77.43,40A104.3,104.3,0,0,0,47,192.05Z" transform="translate(-5.19 -4.98)" style="fill:#0097cb"/><path d="M39,215.28l16-13.72a104,104,0,0,0,63.35,31.74l-.12,21.22A125.18,125.18,0,0,1,39,215.28" transform="translate(-5.19 -4.98)" style="fill:#309d48"/><path d="M131.72,254.52A124.77,124.77,0,0,0,255.51,129.75c0-2.19-.06-4-.17-6.18l-20.19.36q.15,2.89.15,5.82A104.57,104.57,0,0,1,131.62,234.32Z" transform="translate(-5.19 -4.98)" style="fill:#ea1d25"/><path d="M90,33.4a104.29,104.29,0,0,1,40.71-8.22c51.31,0,94,37,103.39,86.16l20.14-.72C243.4,51.72,192.17,5,130.74,5A124.37,124.37,0,0,0,80.17,15.65Z" transform="translate(-5.19 -4.98)" style="fill:#f7991c"/></g></svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 28.4.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Livello_2_00000131351338131156323440000007316977087721992075_"
xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 200.21 200.21"
style="enable-background:new 0 0 200.21 200.21;" xml:space="preserve">
<style type="text/css">
.st0{display:none;fill:#5C25E5;}
.st1{fill:#FFFFFF;}
.st2{fill:#F39200;}
.st3{fill:#00A0DE;}
.st4{fill:#269C38;}
.st5{fill:#E62400;}
</style>
<rect x="-4.57" y="-4.57" class="st0" width="209.34" height="209.34"/>
<circle class="st1" cx="100.1" cy="100.1" r="98.01"/>
<g>
<g>
<path class="st2" d="M33.82,123.35c-4.47,0-8.48-3.14-9.41-7.69c-1.04-5.09-1.57-10.33-1.57-15.56c0-25.15,12.3-48.8,32.91-63.27
c4.35-3.05,10.34-2,13.39,2.34c3.05,4.34,2,10.34-2.34,13.39C51.31,63.44,42.07,81.21,42.07,100.1c0,3.94,0.4,7.88,1.18,11.71
c1.06,5.2-2.29,10.28-7.49,11.35C35.1,123.29,34.45,123.35,33.82,123.35z"/>
</g>
<g>
<path class="st3" d="M100.1,177.37c-15.33,0-30.14-4.48-42.85-12.96c-4.42-2.95-5.61-8.92-2.66-13.33
c2.95-4.42,8.92-5.61,13.33-2.66c9.53,6.36,20.66,9.72,32.17,9.72c18.88,0,36.64-9.23,47.51-24.69c3.05-4.34,9.05-5.39,13.39-2.33
c4.34,3.05,5.39,9.05,2.33,13.39C148.87,165.09,125.23,177.37,100.1,177.37z"/>
</g>
<g>
<path class="st4" d="M166.71,121.7c-0.56,0-1.13-0.05-1.7-0.15c-5.23-0.93-8.71-5.93-7.77-11.16c0.6-3.37,0.91-6.83,0.91-10.29
c0-7.24-1.31-14.3-3.91-20.99c-1.92-4.95,0.53-10.52,5.48-12.44s10.52,0.54,12.44,5.48c3.46,8.91,5.21,18.31,5.21,27.94
c0,4.59-0.41,9.19-1.21,13.67C175.33,118.43,171.28,121.7,166.71,121.7z"/>
</g>
<g>
<path class="st5" d="M147.03,60.99c-2.4,0-4.8-0.89-6.67-2.69c-10.87-10.47-25.16-16.23-40.26-16.23c-3.42,0-6.84,0.3-10.17,0.89
c-5.23,0.92-10.22-2.57-11.14-7.8s2.57-10.22,7.8-11.14c4.43-0.78,8.98-1.18,13.52-1.18c20.09,0,39.13,7.67,53.6,21.61
c3.82,3.68,3.94,9.77,0.26,13.59C152.07,60,149.55,60.99,147.03,60.99z"/>
</g>
<g>
<circle cx="64.07" cy="124.52" r="10.9"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 835 B

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,683 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 105" style="enable-background:new 0 0 250 105;" xml:space="preserve">
<!-- Generator: Adobe Illustrator 28.4.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
viewBox="0 0 646.51 154.53" style="enable-background:new 0 0 646.51 154.53;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
.st1{fill:#F7BC60;}
.st2{fill:#FFFFFF;}
.st3{fill:#FFFFFF;stroke:#231F20;stroke-width:0.75;stroke-miterlimit:10;}
.st0{fill:#FFFFFF;}
</style>
<pattern y="105" width="69" height="69" patternUnits="userSpaceOnUse" id="Polka_Dot_Pattern" viewBox="2.1 -70.9 69 69" style="overflow:visible;">
<g id="livello_da_rimuovere">
</g>
<g id="Livello_1">
<rect x="203.9" y="37.12" class="st0" width="14.87" height="66.46"/>
<polygon class="st0" points="279.96,77.4 248.52,37.12 238.07,37.12 238.07,103.58 252.94,103.58 252.94,63.8 283.91,103.58
294.93,103.58 294.93,37.12 279.96,37.12 "/>
<polygon class="st0" points="309.61,50.11 330.41,50.11 330.41,103.58 345.38,103.58 345.38,50.11 366.09,50.11 366.09,37.12
309.61,37.12 "/>
<polygon class="st0" points="395.74,75.9 425.39,75.9 425.39,63.38 395.74,63.38 395.74,49.92 428.22,49.92 428.22,37.12
395.74,37.12 392.26,37.12 380.87,37.12 380.87,103.58 392.26,103.58 395.74,103.58 428.78,103.58 428.78,90.78 395.74,90.78 "/>
<g>
<path class="st0" d="M475.47,78.45l18.95,0.3c-0.36,1.33-0.8,2.6-1.4,3.75c-1.48,2.82-3.58,4.97-6.31,6.45
c-2.73,1.48-6.01,2.21-9.84,2.21c-3.83,0-7.22-0.89-10.17-2.68c-2.95-1.79-5.27-4.25-6.97-7.39c-1.69-3.14-2.54-6.75-2.54-10.83
c0-4.14,0.86-7.77,2.59-10.87c1.73-3.1,4.13-5.52,7.2-7.25c3.07-1.73,6.56-2.59,10.45-2.59c3.58,0,6.83,0.71,9.75,2.12
c2.92,1.41,5.41,3.5,7.48,6.26l10.16-10.17c-3.07-3.64-6.96-6.51-11.67-8.61c-4.71-2.1-9.92-3.15-15.63-3.15
c-4.96,0-9.59,0.88-13.88,2.64c-4.3,1.76-8.08,4.19-11.35,7.3c-3.26,3.1-5.8,6.71-7.63,10.82c-1.82,4.11-2.73,8.61-2.73,13.51
c0,4.83,0.89,9.32,2.68,13.46c1.79,4.14,4.25,7.78,7.39,10.92c3.14,3.14,6.82,5.6,11.06,7.39c4.24,1.79,8.8,2.68,13.7,2.68
c6.59,0,12.41-1.4,17.46-4.19c5.05-2.79,9-6.92,11.86-12.38c2.85-5.46,4.28-12.14,4.28-20.05v-2.16h-34.92V78.45z"/>
<path class="st0" d="M540.71,48.7h10.64c2.89,0,5.13,0.79,6.73,2.35c1.6,1.57,2.4,3.55,2.4,5.93c0,2.51-0.82,4.5-2.45,5.98
c-1.63,1.47-3.89,2.21-6.78,2.21h-10.54V48.7z M564.52,73.83c3.39-1.63,6.02-3.91,7.91-6.83c1.88-2.92,2.83-6.38,2.83-10.4
c0-3.77-0.93-7.12-2.78-10.07c-1.85-2.95-4.44-5.26-7.76-6.92c-3.33-1.66-7.22-2.49-11.67-2.49h-12.33h-3.48h-11.39v66.46h14.87
v-27.3h1.52l19.75,27.3h17.6l-21.19-27.82C560.61,75.35,562.66,74.73,564.52,73.83"/>
</g>
<polygon class="st0" points="629.66,37.12 615.54,61.31 601.42,37.12 584.29,37.12 608.01,75.84 608.01,103.58 622.98,103.58
622.98,75.26 646.51,37.12 "/>
<g>
<path class="st0" d="M10.98,100.52c-4.47,0-8.48-3.14-9.41-7.69C0.53,87.74,0,82.5,0,77.27C0,52.12,12.3,28.47,32.91,14
c4.35-3.05,10.34-2,13.39,2.34c3.05,4.34,2,10.34-2.34,13.39C28.47,40.61,19.23,58.38,19.23,77.27c0,3.94,0.4,7.88,1.18,11.71
c1.06,5.2-2.29,10.28-7.49,11.35C12.26,100.45,11.62,100.52,10.98,100.52z"/>
</g>
<g>
<path class="st0" d="M77.27,154.53c-15.33,0-30.14-4.48-42.85-12.96c-4.42-2.95-5.61-8.92-2.66-13.33
c2.95-4.42,8.92-5.61,13.33-2.66c9.53,6.36,20.66,9.72,32.17,9.72c18.88,0,36.64-9.23,47.51-24.69c3.05-4.34,9.05-5.39,13.39-2.33
c4.34,3.05,5.39,9.05,2.33,13.39C126.03,142.25,102.39,154.53,77.27,154.53z"/>
</g>
<g>
<path class="st0" d="M143.87,98.86c-0.56,0-1.13-0.05-1.7-0.15c-5.23-0.93-8.71-5.93-7.77-11.16c0.6-3.37,0.91-6.83,0.91-10.29
c0-7.24-1.31-14.3-3.91-20.99c-1.92-4.95,0.53-10.52,5.48-12.44c4.95-1.92,10.52,0.54,12.44,5.48c3.46,8.91,5.21,18.31,5.21,27.94
c0,4.59-0.41,9.19-1.21,13.67C152.49,95.6,148.44,98.86,143.87,98.86z"/>
</g>
<g>
<path class="st0" d="M124.19,38.15c-2.4,0-4.8-0.89-6.67-2.69c-10.87-10.47-25.16-16.23-40.26-16.23c-3.42,0-6.84,0.3-10.17,0.89
c-5.23,0.92-10.22-2.57-11.14-7.8s2.57-10.22,7.8-11.14C68.18,0.4,72.73,0,77.27,0c20.09,0,39.13,7.67,53.6,21.61
c3.82,3.68,3.94,9.77,0.26,13.59C129.23,37.16,126.71,38.15,124.19,38.15z"/>
</g>
<g>
<circle class="st0" cx="41.24" cy="101.68" r="10.9"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
<rect x="2.1" y="-70.9" class="st0" width="69" height="69"/>
<rect x="2.1" y="-70.9" class="st1" width="69" height="69"/>
<g>
<path class="st2" d="M61.8-71.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C61.8-71.7,61.8-71.7,61.8-71.7
C61.8-71.6,61.8-71.6,61.8-71.7"/>
<path class="st2" d="M54.1-71.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C54.1-71.7,54.1-71.7,54.1-71.7
C54.1-71.6,54.1-71.6,54.1-71.7"/>
<path class="st2" d="M46.4-71.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C46.4-71.7,46.4-71.7,46.4-71.7
C46.4-71.6,46.4-71.6,46.4-71.7"/>
<path class="st2" d="M38.8-71.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C38.8-71.7,38.8-71.7,38.8-71.7
C38.8-71.6,38.8-71.6,38.8-71.7"/>
<path class="st2" d="M31.1-71.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C31.1-71.7,31.1-71.7,31.1-71.7
C31.1-71.6,31.1-71.6,31.1-71.7"/>
<path class="st2" d="M23.4-71.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C23.4-71.7,23.4-71.7,23.4-71.7
C23.4-71.6,23.4-71.6,23.4-71.7"/>
<path class="st2" d="M15.8-71.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C15.8-71.7,15.8-71.7,15.8-71.7
C15.8-71.6,15.8-71.6,15.8-71.7"/>
<path class="st2" d="M8.1-71.7c0,0.1,0,0.1,0,0.2C8-71.4,8-71.4,7.9-71.3c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C8.1-71.7,8.1-71.7,8.1-71.7
C8.1-71.6,8.1-71.6,8.1-71.7"/>
<path class="st2" d="M0.4-71.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5C0.8-69.4,1-69,1.2-68.9c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C0.4-71.7,0.4-71.7,0.4-71.7
C0.4-71.6,0.4-71.6,0.4-71.7"/>
</g>
<g>
<path class="st2" d="M69.4-71.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C69.4-71.7,69.4-71.7,69.4-71.7
C69.4-71.6,69.4-71.6,69.4-71.7"/>
</g>
<path class="st2" d="M0.5-71.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5C0.9-69.4,1-69,1.3-68.9c0.2,0,0.4-0.1,0.5-0.1c0.2,0,0.4,0,0.6-0.1
c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8c-0.2,0-0.3,0.1-0.4,0.2
c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C0.5-71.7,0.5-71.7,0.5-71.7C0.5-71.6,0.5-71.6,0.5-71.7"/>
<g>
<g>
<path class="st2" d="M69.4-64c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C69.4-64,69.4-64.1,69.4-64C69.4-64,69.4-64,69.4-64"
/>
<path class="st2" d="M61.8-64c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C61.8-64,61.8-64.1,61.8-64C61.8-64,61.8-64,61.8-64"
/>
<path class="st2" d="M54.1-64c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C54.1-64,54.1-64.1,54.1-64C54.1-64,54.1-64,54.1-64"
/>
<path class="st2" d="M46.5-64c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C46.5-64,46.5-64.1,46.5-64C46.5-64,46.5-64,46.5-64"
/>
<path class="st2" d="M38.8-64c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C38.8-64,38.8-64.1,38.8-64C38.8-64,38.8-64,38.8-64"
/>
<path class="st2" d="M31.1-64c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C31.1-64,31.1-64.1,31.1-64C31.1-64,31.1-64,31.1-64"
/>
<path class="st2" d="M23.5-64c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C23.5-64,23.5-64.1,23.5-64C23.5-64,23.5-64,23.5-64"
/>
<path class="st2" d="M15.8-64c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C15.8-64,15.8-64.1,15.8-64C15.8-64,15.8-64,15.8-64"
/>
<path class="st2" d="M8.2-64c0,0.1,0,0.1,0,0.2C8.1-63.7,8-63.7,8-63.7c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C8-62.2,8.2-62,8.3-61.9c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C8.2-64,8.2-64.1,8.2-64C8.1-64,8.1-64,8.2-64"/>
<path class="st2" d="M0.5-64c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5C2.8-62,3-61.9,3.1-62c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C0.5-64,0.5-64.1,0.5-64C0.5-64,0.5-64,0.5-64"/>
</g>
<g>
<path class="st2" d="M69.4-56.3c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C69.4-56.4,69.4-56.4,69.4-56.3
C69.4-56.3,69.4-56.3,69.4-56.3"/>
<path class="st2" d="M61.8-56.3c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C61.8-56.4,61.8-56.4,61.8-56.3
C61.8-56.3,61.8-56.3,61.8-56.3"/>
<path class="st2" d="M54.1-56.3c0,0.1,0,0.1,0,0.2C54-56.1,54-56.1,53.9-56c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C54.1-56.4,54.1-56.4,54.1-56.3
C54.1-56.3,54.1-56.3,54.1-56.3"/>
<path class="st2" d="M46.5-56.3c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C46.5-56.4,46.5-56.4,46.5-56.3
C46.5-56.3,46.5-56.3,46.5-56.3"/>
<path class="st2" d="M38.8-56.3c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C38.8-56.4,38.8-56.4,38.8-56.3
C38.8-56.3,38.8-56.3,38.8-56.3"/>
<path class="st2" d="M31.1-56.3c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C31.1-56.4,31.1-56.4,31.1-56.3
C31.1-56.3,31.1-56.3,31.1-56.3"/>
<path class="st2" d="M23.5-56.3c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C23.5-56.4,23.5-56.4,23.5-56.3
C23.5-56.3,23.5-56.3,23.5-56.3"/>
<path class="st2" d="M15.8-56.3c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C15.8-56.4,15.8-56.4,15.8-56.3
C15.8-56.3,15.8-56.3,15.8-56.3"/>
<path class="st2" d="M8.2-56.3c0,0.1,0,0.1,0,0.2C8.1-56.1,8-56.1,8-56c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C8.2-56.4,8.2-56.4,8.2-56.3
C8.1-56.3,8.1-56.3,8.2-56.3"/>
<path class="st2" d="M0.5-56.3c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C0.5-56.4,0.5-56.4,0.5-56.3
C0.5-56.3,0.5-56.3,0.5-56.3"/>
</g>
<g>
<path class="st2" d="M69.4-48.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C69.4-48.7,69.4-48.8,69.4-48.7
C69.4-48.7,69.4-48.7,69.4-48.7"/>
<path class="st2" d="M61.8-48.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C61.8-48.7,61.8-48.8,61.8-48.7
C61.8-48.7,61.8-48.7,61.8-48.7"/>
<path class="st2" d="M54.1-48.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C54.1-48.7,54.1-48.8,54.1-48.7
C54.1-48.7,54.1-48.7,54.1-48.7"/>
<path class="st2" d="M46.5-48.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C46.5-48.7,46.5-48.8,46.5-48.7
C46.5-48.7,46.5-48.7,46.5-48.7"/>
<path class="st2" d="M38.8-48.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C38.8-48.7,38.8-48.8,38.8-48.7
C38.8-48.7,38.8-48.7,38.8-48.7"/>
<path class="st2" d="M31.1-48.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C31.1-48.7,31.1-48.8,31.1-48.7
C31.1-48.7,31.1-48.7,31.1-48.7"/>
<path class="st2" d="M23.5-48.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C23.5-48.7,23.5-48.8,23.5-48.7
C23.5-48.7,23.5-48.7,23.5-48.7"/>
<path class="st2" d="M15.8-48.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C15.8-48.7,15.8-48.8,15.8-48.7
C15.8-48.7,15.8-48.7,15.8-48.7"/>
<path class="st2" d="M8.2-48.7c0,0.1,0,0.1,0,0.2C8.1-48.4,8-48.4,8-48.4c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5C8.5-46.4,8.7-46,8.9-46c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C8.2-48.7,8.2-48.8,8.2-48.7
C8.1-48.7,8.1-48.7,8.2-48.7"/>
<path class="st2" d="M0.5-48.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5C0.9-46.4,1-46,1.3-46c0.2,0,0.4-0.1,0.5-0.1c0.2,0,0.4,0,0.6-0.1
c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8c-0.2,0-0.3,0.1-0.4,0.2
c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C0.5-48.7,0.5-48.8,0.5-48.7C0.5-48.7,0.5-48.7,0.5-48.7"/>
</g>
<g>
<path class="st2" d="M69.4-41c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C69.4-41.1,69.4-41.1,69.4-41C69.4-41,69.4-41,69.4-41
"/>
<path class="st2" d="M61.8-41c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C61.8-41.1,61.8-41.1,61.8-41C61.8-41,61.8-41,61.8-41
"/>
<path class="st2" d="M54.1-41c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C54.1-41.1,54.1-41.1,54.1-41C54.1-41,54.1-41,54.1-41
"/>
<path class="st2" d="M46.5-41c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C46.5-41.1,46.5-41.1,46.5-41C46.5-41,46.5-41,46.5-41
"/>
<path class="st2" d="M38.8-41c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C38.8-41.1,38.8-41.1,38.8-41C38.8-41,38.8-41,38.8-41
"/>
<path class="st2" d="M31.1-41c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C31.1-41.1,31.1-41.1,31.1-41C31.1-41,31.1-41,31.1-41
"/>
<path class="st2" d="M23.5-41c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C23.5-41.1,23.5-41.1,23.5-41C23.5-41,23.5-41,23.5-41
"/>
<path class="st2" d="M15.8-41c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C15.8-41.1,15.8-41.1,15.8-41C15.8-41,15.8-41,15.8-41
"/>
<path class="st2" d="M8.2-41c0,0.1,0,0.1,0,0.2C8.1-40.8,8-40.8,8-40.7c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C8.2-41.1,8.2-41.1,8.2-41C8.1-41,8.1-41,8.2-41"/>
<path class="st2" d="M0.5-41c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5C2.8-39,3-39,3.1-39c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C0.5-41.1,0.5-41.1,0.5-41C0.5-41,0.5-41,0.5-41"/>
</g>
<g>
<path class="st2" d="M69.4-33.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C69.4-33.4,69.4-33.5,69.4-33.4
C69.4-33.4,69.4-33.4,69.4-33.4"/>
<path class="st2" d="M61.8-33.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C61.8-33.4,61.8-33.5,61.8-33.4
C61.8-33.4,61.8-33.4,61.8-33.4"/>
<path class="st2" d="M54.1-33.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C54.1-33.4,54.1-33.5,54.1-33.4
C54.1-33.4,54.1-33.4,54.1-33.4"/>
<path class="st2" d="M46.5-33.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C46.5-33.4,46.5-33.5,46.5-33.4
C46.5-33.4,46.5-33.4,46.5-33.4"/>
<path class="st2" d="M38.8-33.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C38.8-33.4,38.8-33.5,38.8-33.4
C38.8-33.4,38.8-33.4,38.8-33.4"/>
<path class="st2" d="M31.1-33.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C31.1-33.4,31.1-33.5,31.1-33.4
C31.1-33.4,31.1-33.4,31.1-33.4"/>
<path class="st2" d="M23.5-33.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C23.5-33.4,23.5-33.5,23.5-33.4
C23.5-33.4,23.5-33.4,23.5-33.4"/>
<path class="st2" d="M15.8-33.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C15.8-33.4,15.8-33.5,15.8-33.4
C15.8-33.4,15.8-33.4,15.8-33.4"/>
<path class="st2" d="M8.2-33.4c0,0.1,0,0.1,0,0.2C8.1-33.1,8-33.1,8-33.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C8.2-33.4,8.2-33.5,8.2-33.4
C8.1-33.4,8.1-33.4,8.2-33.4"/>
<path class="st2" d="M0.5-33.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C0.5-33.4,0.5-33.5,0.5-33.4
C0.5-33.4,0.5-33.4,0.5-33.4"/>
</g>
<g>
<path class="st2" d="M69.4-25.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C69.4-25.8,69.4-25.8,69.4-25.7
C69.4-25.7,69.4-25.7,69.4-25.7"/>
<path class="st2" d="M61.8-25.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C61.8-25.8,61.8-25.8,61.8-25.7
C61.8-25.7,61.8-25.7,61.8-25.7"/>
<path class="st2" d="M54.1-25.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C54.1-25.8,54.1-25.8,54.1-25.7
C54.1-25.7,54.1-25.7,54.1-25.7"/>
<path class="st2" d="M46.5-25.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C46.5-25.8,46.5-25.8,46.5-25.7
C46.5-25.7,46.5-25.7,46.5-25.7"/>
<path class="st2" d="M38.8-25.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C38.8-25.8,38.8-25.8,38.8-25.7
C38.8-25.7,38.8-25.7,38.8-25.7"/>
<path class="st2" d="M31.1-25.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C31.1-25.8,31.1-25.8,31.1-25.7
C31.1-25.7,31.1-25.7,31.1-25.7"/>
<path class="st2" d="M23.5-25.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C23.5-25.8,23.5-25.8,23.5-25.7
C23.5-25.7,23.5-25.7,23.5-25.7"/>
<path class="st2" d="M15.8-25.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C15.8-25.8,15.8-25.8,15.8-25.7
C15.8-25.7,15.8-25.7,15.8-25.7"/>
<path class="st2" d="M8.2-25.7c0,0.1,0,0.1,0,0.2C8.1-25.4,8-25.5,8-25.4c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C8-24,8.2-23.8,8.3-23.6c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C8.2-25.8,8.2-25.8,8.2-25.7
C8.1-25.7,8.1-25.7,8.2-25.7"/>
<path class="st2" d="M0.5-25.7c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5C0.9-23.5,1-23.1,1.3-23c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C0.5-25.8,0.5-25.8,0.5-25.7
C0.5-25.7,0.5-25.7,0.5-25.7"/>
</g>
<g>
<path class="st2" d="M69.4-18.1c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C69.4-18.1,69.4-18.2,69.4-18.1
C69.4-18,69.4-18.1,69.4-18.1"/>
<path class="st2" d="M61.8-18.1c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C61.8-18.1,61.8-18.2,61.8-18.1
C61.8-18,61.8-18.1,61.8-18.1"/>
<path class="st2" d="M54.1-18.1c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C54.1-18.1,54.1-18.2,54.1-18.1
C54.1-18,54.1-18.1,54.1-18.1"/>
<path class="st2" d="M46.5-18.1c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C46.5-18.1,46.5-18.2,46.5-18.1
C46.5-18,46.5-18.1,46.5-18.1"/>
<path class="st2" d="M38.8-18.1c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C38.8-18.1,38.8-18.2,38.8-18.1
C38.8-18,38.8-18.1,38.8-18.1"/>
<path class="st2" d="M31.1-18.1c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C31.1-18.1,31.1-18.2,31.1-18.1
C31.1-18,31.1-18.1,31.1-18.1"/>
<path class="st2" d="M23.5-18.1c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C23.5-18.1,23.5-18.2,23.5-18.1
C23.5-18,23.5-18.1,23.5-18.1"/>
<path class="st2" d="M15.8-18.1c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C15.8-18.1,15.8-18.2,15.8-18.1
C15.8-18,15.8-18.1,15.8-18.1"/>
<path class="st2" d="M8.2-18.1c0,0.1,0,0.1,0,0.2C8.1-17.8,8-17.8,8-17.8c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C8-16.3,8.2-16.1,8.3-16c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C8.2-18.1,8.2-18.2,8.2-18.1C8.1-18,8.1-18.1,8.2-18.1
"/>
<path class="st2" d="M0.5-18.1c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5C2.8-16.1,3-16,3.1-16c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C0.5-18.1,0.5-18.2,0.5-18.1C0.5-18,0.5-18.1,0.5-18.1
"/>
</g>
<g>
<path class="st2" d="M69.4-10.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C69.4-10.5,69.4-10.5,69.4-10.4
C69.4-10.4,69.4-10.4,69.4-10.4"/>
<path class="st2" d="M61.8-10.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1C63.9-8,63.8-8.2,64-8.3c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C61.8-10.5,61.8-10.5,61.8-10.4
C61.8-10.4,61.8-10.4,61.8-10.4"/>
<path class="st2" d="M54.1-10.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C54.1-10.5,54.1-10.5,54.1-10.4
C54.1-10.4,54.1-10.4,54.1-10.4"/>
<path class="st2" d="M46.5-10.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C46.5-10.5,46.5-10.5,46.5-10.4
C46.5-10.4,46.5-10.4,46.5-10.4"/>
<path class="st2" d="M38.8-10.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1C40.9-8,40.8-8.2,41-8.3c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C38.8-10.5,38.8-10.5,38.8-10.4
C38.8-10.4,38.8-10.4,38.8-10.4"/>
<path class="st2" d="M31.1-10.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C31.1-10.5,31.1-10.5,31.1-10.4
C31.1-10.4,31.1-10.4,31.1-10.4"/>
<path class="st2" d="M23.5-10.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C23.5-10.5,23.5-10.5,23.5-10.4
C23.5-10.4,23.5-10.4,23.5-10.4"/>
<path class="st2" d="M15.8-10.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1C17.9-8,17.8-8.2,18-8.3c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C15.8-10.5,15.8-10.5,15.8-10.4
C15.8-10.4,15.8-10.4,15.8-10.4"/>
<path class="st2" d="M8.2-10.4c0,0.1,0,0.1,0,0.2C8.1-10.1,8-10.2,8-10.1C7.9-10,7.9-9.8,7.9-9.8c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C8-8.7,8.2-8.5,8.3-8.3c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C8.2-10.5,8.2-10.5,8.2-10.4
C8.1-10.4,8.1-10.4,8.2-10.4"/>
<path class="st2" d="M0.5-10.4c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1C0.3-10,0.2-9.8,0.2-9.8c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5C0.9-8.2,1-7.8,1.3-7.7c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1C2.6-8,2.5-8.2,2.7-8.3c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C0.5-10.5,0.5-10.5,0.5-10.4
C0.5-10.4,0.5-10.4,0.5-10.4"/>
</g>
</g>
<g>
<path class="st2" d="M69.4-2.8c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5C69.8-0.5,70-0.1,70.2,0c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C69.4-2.8,69.4-2.9,69.4-2.8
C69.4-2.7,69.4-2.8,69.4-2.8"/>
<path class="st2" d="M61.8-2.8c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C61.6-1,61.8-0.8,62-0.7c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C61.8-2.8,61.8-2.9,61.8-2.8
C61.8-2.7,61.8-2.8,61.8-2.8"/>
<path class="st2" d="M54.1-2.8c0,0.1,0,0.1,0,0.2C54-2.5,54-2.5,53.9-2.5c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C54-1,54.1-0.8,54.3-0.7c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1C56.9-0.8,57-1,57.1-1.2c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C54.1-2.8,54.1-2.9,54.1-2.8
C54.1-2.7,54.1-2.8,54.1-2.8"/>
<path class="st2" d="M46.5-2.8c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5C46.8-0.5,47-0.1,47.2,0c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C46.5-2.8,46.5-2.9,46.5-2.8
C46.5-2.7,46.5-2.8,46.5-2.8"/>
<path class="st2" d="M38.8-2.8c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C38.6-1,38.8-0.8,39-0.7c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C38.8-2.8,38.8-2.9,38.8-2.8
C38.8-2.7,38.8-2.8,38.8-2.8"/>
<path class="st2" d="M31.1-2.8c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C31-1,31.1-0.8,31.3-0.7c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C31.1-2.8,31.1-2.9,31.1-2.8
C31.1-2.7,31.1-2.8,31.1-2.8"/>
<path class="st2" d="M23.5-2.8c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4c0.1,0.2,0.3,0.4,0.4,0.5C23.8-0.5,24-0.1,24.3,0c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C23.5-2.8,23.5-2.9,23.5-2.8
C23.5-2.7,23.5-2.8,23.5-2.8"/>
<path class="st2" d="M15.8-2.8c0,0.1,0,0.1,0,0.2c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C15.7-1,15.8-0.8,16-0.7c0.2,0.1,0.4,0.6,0.6,0.6c0.2,0,0.4-0.1,0.5-0.1
c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8
c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.1-0.1,0.2-0.3,0.2c-0.1,0-0.2,0.1-0.2,0.2C15.8-2.8,15.8-2.9,15.8-2.8
C15.8-2.7,15.8-2.8,15.8-2.8"/>
<path class="st2" d="M8.2-2.8c0,0.1,0,0.1,0,0.2C8.1-2.5,8-2.5,8-2.5C7.9-2.4,7.9-2.2,7.9-2.1c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C8-1,8.2-0.8,8.3-0.7C8.5-0.5,8.7-0.1,8.9,0c0.2,0,0.4-0.1,0.5-0.1c0.2,0,0.4,0,0.6-0.1
c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.4-0.5c0-0.1,0-0.1,0-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8C9-3.5,8.8-3.4,8.7-3.4
C8.5-3.3,8.6-3.2,8.4-3.1C8.3-3.1,8.2-3,8.2-2.9C8.2-2.8,8.2-2.9,8.2-2.8C8.1-2.7,8.1-2.8,8.2-2.8"/>
<path class="st2" d="M0.5-2.8c0,0.1,0,0.1,0,0.2C0.4-2.5,0.4-2.5,0.3-2.5C0.3-2.4,0.2-2.2,0.2-2.1c-0.2,0.1,0,0.2,0,0.3
c0,0,0,0.1,0,0.2c0,0.1,0,0.3,0.1,0.4C0.3-1,0.5-0.8,0.7-0.7C0.9-0.5,1-0.1,1.3,0c0.2,0,0.4-0.1,0.5-0.1c0.2,0,0.4,0,0.6-0.1
c0.2-0.1,0.1-0.3,0.3-0.5c0.1-0.1,0.3,0,0.4-0.1C3.3-0.8,3.4-1,3.5-1.2c0-0.1,0-0.1,0-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.2,0-0.4-0.1-0.5c-0.4-0.7-1.2-0.9-2-0.8C1.3-3.5,1.2-3.4,1-3.4
C0.9-3.3,0.9-3.2,0.7-3.1C0.6-3.1,0.5-3,0.5-2.9C0.5-2.8,0.5-2.9,0.5-2.8C0.5-2.7,0.5-2.8,0.5-2.8"/>
</g>
</g>
</pattern>
<g>
<rect x="29" y="28.5" class="st0" width="223" height="53.3"/>
<path class="st2" d="M41.8,36.6h-9.1v-8.1h9.1V36.6z M41.8,73h-9.1V40.4h9.1V73z"/>
<path class="st2" d="M49.3,40.4h16.2c4.9,0,8.4,0.9,10.5,2.8c2.1,1.8,3.1,4.9,3.1,9.2V73h-8.6V53.4c0-2.4-0.4-4-1.1-4.8
s-2.3-1.1-4.6-1.1h-6.9V73h-8.6V40.4z"/>
<path class="st2" d="M83.2,40.4h6.1V28.5h8.6v11.8h9.1v6.5h-9.1v13.2c0,2.4,0.4,4.1,1.2,5c0.8,0.9,2.3,1.4,4.3,1.4h3.5V73h-7.9
c-3.2,0-5.6-0.9-7.3-2.6c-1.7-1.8-2.5-4.3-2.5-7.6V46.9h-6.1V40.4z"/>
<path class="st2" d="M126.7,73c-5.4,0-9.5-1.4-12.3-4.1c-2.8-2.8-4.2-6.8-4.2-12.2c0-5.4,1.4-9.4,4.2-12.2
c2.8-2.8,6.9-4.1,12.3-4.1h12.6v6.8h-11.4c-3.1,0-5.2,0.4-6.3,1.3c-1.1,0.9-1.7,2.5-1.7,4.8h19.5v6.8h-19.5
c0.1,2.3,0.6,3.9,1.6,4.8c1,0.9,3.1,1.3,6.4,1.3h11.5V73H126.7z"/>
<path class="st2" d="M175.4,71.9c0,4.5-1,7.8-3,9.9c-2,2.1-5.1,3.1-9.4,3.1h-16.9v-6.6h15.4c1.7,0,2.9-0.4,3.8-1.2
c0.9-0.8,1.3-2,1.3-3.5V73h-7c-3.6,0-6.2-0.3-7.8-0.8c-1.6-0.5-3.1-1.5-4.4-2.8c-1.6-1.5-2.8-3.3-3.6-5.5c-0.8-2.2-1.3-4.6-1.3-7.1
c0-2.5,0.4-4.9,1.3-7.1c0.8-2.2,2-4,3.6-5.5c1.4-1.4,3-2.4,4.9-3c1.9-0.6,4.3-0.9,7.4-0.9h15.7V71.9z M162.3,66.3h4.5V47.4h-4.5
c-2.2,0-3.7,0.1-4.5,0.2c-0.9,0.2-1.6,0.4-2.3,0.8c-1.3,0.8-2.3,1.9-2.9,3.2c-0.6,1.3-0.9,3-0.9,5.2c0,3.5,0.8,5.9,2.3,7.4
C155.5,65.6,158.3,66.3,162.3,66.3z"/>
<path class="st2" d="M182.6,40.4h14.5c3.4,0,5.8,0.6,7.1,1.8c1.4,1.2,2,3.4,2,6.4v5.4h-8.2v-4.2c0-1.3-0.2-2.1-0.7-2.6
c-0.5-0.4-1.5-0.7-3.1-0.7h-3V73h-8.6V40.4z"/>
<path class="st2" d="M225.8,65.8h6.9V40.4h8.6v31.8c0,4.3-1,7.5-3,9.6c-2,2.1-5.1,3.1-9.3,3.1h-16.9v-6.6h15.4
c1.7,0,2.9-0.4,3.8-1.2c0.9-0.8,1.3-2,1.3-3.5V73h-7.6c-4.9,0-8.4-1-10.4-2.9c-2.1-1.9-3.1-5.1-3.1-9.6V40.4h8.5v19.5
c0,2.5,0.4,4.1,1.1,4.8C221.9,65.4,223.4,65.8,225.8,65.8z"/>
</g>
<g>
<path class="st3" d="M35.3,7.8"/>
<path class="st2" d="M84.3,24.8c-7.3-8-17.8-13-29.5-13c-5.5,0-10.7,1.1-15.5,3.1l-3.9-7.2c6-2.7,12.6-4.1,19.5-4.1
c14.3,0,27.1,6.2,35.9,16.1L84.3,24.8z"/>
<path class="st2" d="M93,80.8c-8.7,11.4-22.4,18.7-37.8,18.8l0-8.1c12.8-0.1,24.1-6.3,31.3-15.7L93,80.8z"/>
<path class="st3" d="M19.8,84.4"/>
<path class="st2" d="M16.5,80.5c-6.1-8-9.7-18.1-9.7-28.9c0-17.6,9.5-33.1,23.7-41.4l3.9,7.2c-11.7,6.9-19.5,19.7-19.5,34.3
c0,8.9,2.9,17.2,7.9,23.8L16.5,80.5z"/>
<path class="st3" d="M39.3,15"/>
<path class="st2" d="M19.8,84.4l6.1-5.2c6.3,6.6,14.7,11,24.2,12.1l0,8.1C38.1,98.2,27.5,92.7,19.8,84.4"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB