Diesmal hängt es bei der 1.8.7
Unbehandelte Ausnahme #7110FFD83C0136E0 vom Typ JTL.Database.SqlUpdater.UpdateException in
JTL.Database.SqlUpdater.UpdateException: 12:07:58 Fehler in der Version 1.8.7.0 beim Befehl:
==============================================INSERT INTO dbo.tOptions (cKey, cValue)
VALUES (N'Amazon.AbgleichBestandHistoryLimit', '30');==============================================
FEHLER:
Verletzung der PRIMARY KEY-Einschränkung "PK_dbo_tOptions". Ein doppelter Schlüssel kann in das dbo.tOptions-Objekt nicht eingefügt werden. Der doppelte Schlüsselwert ist (Amazon.AbgleichBestandHistoryLimit).
Die Anweisung wurde beendet.
2023-11-14T12:07:58 DEBUG - CREATE PROCEDURE [Zahlungsabgleich].[spZahlungErstellen]
@type AS Zahlungsabgleich.TYPE_spZahlungErstellen READONLY
AS
SET NOCOUNT ON;
SET ANSI_NULLS ON;
SET ANSI_NULL_DFLT_ON ON;
SET ANSI_PADDING ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET XACT_ABORT OFF;
DECLARE @OldContextInfo VARBINARY(128);
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
DECLARE @retry INT;
DECLARE @CreatedTransaction INT;
DECLARE @ReturnValue INT;
SET @retry = 5;
WHILE @retry > 0
BEGIN
-- Context Info
IF(CONTEXT_INFO() IS NOT NULL)
BEGIN
SET @OldContextInfo = CONTEXT_INFO();
END
ELSE
BEGIN
SET @OldContextInfo = 0x0;
END
SET CONTEXT_INFO 0x0; -- ContextInfo festlegen
BEGIN TRY
IF (@@TRANCOUNT = 0)
BEGIN
SET @CreatedTransaction = 1;
BEGIN TRANSACTION
END;
ELSE
BEGIN
SET @CreatedTransaction = 0;
SAVE TRANSACTION Savepoint0;
END;
--
-- Start
--
IF(object_id('tempdb..#Zahlungen') IS NOT NULL)
BEGIN
DROP TABLE #Zahlungen;
END
CREATE TABLE #Zahlungen
(
id INT IDENTITY(1,1),
cName NVARCHAR(255) NULL,
dDatum DATETIME NULL,
fBetrag DECIMAL(25,13) NOT NULL,
kBestellung INT NULL,
kBenutzer INT NULL,
nAnzahlung TINYINT NULL,
cHinweis NVARCHAR(255) NULL,
kZahlungsart INT NULL,
nKeinExport TINYINT NULL,
cSKRManuell NVARCHAR(255) NULL,
cExternalTransactionId NVARCHAR(255) NULL,
kZahlungsabgleichUmsatz INT NULL,
nZuweisungstyp TINYINT NULL,
nZahlungstyp TINYINT NULL,
cZuweisungsinfo NVARCHAR(128) NULL,
nZuweisungswertung INT NULL,
fOffenerBetrag DECIMAL(25,13) NULL
);
INSERT INTO #Zahlungen (cName, dDatum, fBetrag, kBestellung, kBenutzer, nAnzahlung, cHinweis, kZahlungsart, nKeinExport,
cSKRManuell, cExternalTransactionId, kZahlungsabgleichUmsatz, nZuweisungstyp, nZahlungstyp, cZuweisungsinfo, nZuweisungswertung,
fOffenerBetrag)
SELECT cName, dDatum, fBetrag, kBestellung, kBenutzer, nAnzahlung, cHinweis, kZahlungsart, nKeinExport,
cSKRManuell, cExternalTransactionId, kZahlungsabgleichUmsatz, nZuweisungstyp, nZahlungstyp, cZuweisungsinfo, nZuweisungswertung,
fOffenerBetrag
FROM @type
IF EXISTS (
SELECT #Zahlungen.kBestellung, #Zahlungen.fOffenerBetrag FROM #Zahlungen
EXCEPT
SELECT vOffenerPosten.kBestellung, vOffenerPosten.fWertOffen FROM Zahlungsabgleich.vOffenerPosten
JOIN #Zahlungen ON #Zahlungen.kBestellung = vOffenerPosten.kBestellung
WHERE #Zahlungen.fOffenerBetrag = vOffenerPosten.fWertOffen
)
BEGIN
RAISERROR ('Data has changed', 16, 1);
END
ELSE
BEGIN
DECLARE @zahlungID INT;
DECLARE @kId INT;
SELECT @kId = tpk.nummer FROM dbo.tpk WHERE tpk.cName = 'tZahlung'
UPDATE dbo.tpk SET tpk.nummer = (SELECT COUNT(*) + @kId FROM #Zahlungen), tpk.dChanged = GETDATE()
WHERE tpk.cName = 'tZahlung'
INSERT INTO dbo.tZahlung (kZahlung, cName, dDatum, fBetrag, kBestellung, kBenutzer, nAnzahlung, cHinweis, kZahlungsart, nKeinExport,
cSKRManuell, cExternalTransactionId, kZahlungsabgleichUmsatz, nZuweisungstyp, nZahlungstyp, cZuweisungsinfo, nZuweisungswertung)
SELECT @kId + ROW_NUMBER() OVER(ORDER BY #Zahlungen.cName) - 1, cName, dDatum, fBetrag, kBestellung, kBenutzer, nAnzahlung, cHinweis, kZahlungsart, nKeinExport,
cSKRManuell, cExternalTransactionId, kZahlungsabgleichUmsatz, nZuweisungstyp, nZahlungstyp, cZuweisungsinfo, nZuweisungswertung
FROM #Zahlungen
END
--
-- Ende
--
SET @ReturnValue = @@ROWCOUNT;
IF(@CreatedTransaction = 1)
BEGIN
COMMIT -- Nur wenn kein Savepoint gesetzt
END
RETURN @ReturnValue;
END TRY
BEGIN CATCH
-- Deadlock catch
IF (ERROR_NUMBER() = 1205)
BEGIN
SET @retry = @retry - 1;
IF (@CreatedTransaction = 1)
BEGIN
ROLLBACK TRANSACTION;
END
ELSE
BEGIN
ROLLBACK TRANSACTION Savepoint0;
END
IF (@retry = 0)
BEGIN
SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE();
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
SET CONTEXT_INFO 0x0;
RETURN 0;
END
EXEC dbo.spWaitRandom;
END
ELSE
BEGIN
SET @retry = -1;
SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE();
IF (@CreatedTransaction = 1)
BEGIN
ROLLBACK TRANSACTION;
END
ELSE
BEGIN
ROLLBACK TRANSACTION Savepoint0;
END
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
SET CONTEXT_INFO @OldContextInfo;
RETURN 0;
END
END CATCH
END
2023-11-14T12:07:58 DEBUG - Dauer: 6ms
2023-11-14T12:07:58 DEBUG - UPDATE [dbo].[tVersion] SET [cVersion] = '1.8.7.0';
2023-11-14T12:07:58 DEBUG - Dauer: 0ms, AffectedRows: 1
2023-11-14T12:07:58 DEBUG - SELECT TOP(1) * FROM [dbo].[tUpdateMigration] WHERE [cSqlId]=@sqlId
@sqlId = ' WAWI-32912_AmazonAbgleichBestandHistoryOptionsEintragAnlegen_001'
2023-11-14T12:07:58 DEBUG - Dauer: 0ms, (bis zum Reader)
2023-11-14T12:07:58 DEBUG - Dauer: 0 ms, 0 Zeilen
2023-11-14T12:07:58 DEBUG - INSERT INTO dbo.tOptions (cKey, cValue)
VALUES (N'Amazon.AbgleichBestandHistoryLimit', '30');
2023-11-14T12:07:58 WARN - Dauer: 4ms, Error: Verletzung der PRIMARY KEY-Einschränkung "PK_dbo_tOptions". Ein doppelter Schlüssel kann in das dbo.tOptions-Objekt nicht eingefügt werden. Der doppelte Schlüsselwert ist (Amazon.AbgleichBestandHistoryLimit).
Die Anweisung wurde beendet.
2023-11-14T12:07:58 DEBUG - DECLARE @Identities TABLE (Id INT NOT NULL);
INSERT INTO [dbo].[tUpdateMigration] ([cVersion], [bHash], [cObjectname], [cError], [cSqlId]) OUTPUT INSERTED.[kUpdateMigration] AS [Id] INTO @Identities VALUES (@cVersion, @bHash, @cObjectname, @cError, @cSqlId);
SELECT [Id] FROM @Identities ORDER BY [Id];
@cVersion = '1.8.7.0'
@bHash = CONVERT(varbinary(max), '35-35-31-41-46-30-37-35-34-33-45-32-31-39-36-36-42-32-42-39-44-44-46-46-32-42-37-39-45-45-39-32', 2)
@cObjectname = 'PlainSql'
@cError = NULL
@cSqlId = 'WAWI-32912_AmazonAbgleichBestandHistoryOptionsEintragAnlegen_001'
2023-11-14T12:07:58 DEBUG - Dauer: 1ms, (bis zum Reader)
2023-11-14T12:07:58 DEBUG - Dauer: 1 ms, 1 Zeilen
2023-11-14T12:07:58 DEBUG - SELECT [recovery_model_desc] FROM [master].[sys].[databases] WHERE [name] = @name
@name = 'eazybusiness'
2023-11-14T12:07:58 DEBUG - Dauer: 22ms, Result: SIMPLE
2023-11-14T12:07:58 DEBUG - SELECT * FROM tUpdateLog WHERE kUpdateLog > @kUpdateLog
kUpdateLog = 0
2023-11-14T12:07:58 DEBUG - Dauer: 0ms, (bis zum Reader)
2023-11-14T12:07:58 DEBUG - Dauer: 2ms, 0 Zeilen
2023-11-14T12:07:58 DEBUG - SELECT (CASE WHEN SERVERPROPERTY('MACHINENAME') = HOST_NAME() THEN 'local' ELSE 'remote' END) AS instance
2023-11-14T12:07:58 DEBUG - Dauer: 0ms, Result: local
2023-11-14T12:08:10 DEBUG -
MERGE INTO
eazybusiness.[dbo].[tOptions] AS myTarget
USING (VALUES (@Key, @Value)) AS mySource(cKey, cValue)
ON mySource.cKey = myTarget.cKey
WHEN NOT MATCHED BY TARGET THEN
INSERT (cKey, cValue) VALUES (mySource.cKey, mySource.cValue);
SELECT
cValue
FROM
eazybusiness.[dbo].[tOptions]
WHERE
cKey = @Key;
@key = 'WawiSeed'
@value = 'C9FCEED7E28126A0'
2023-11-14T12:08:10 DEBUG - Dauer: 8ms, (bis zum Reader)
2023-11-14T12:08:10 DEBUG - Dauer: 10 ms, 1 Zeilen
2023-11-14T12:08:10 DEBUG - SELECT * FROM eazybusiness.dbo.tMandant WHERE cDB = @DBName
@DBName = 'eazybusiness'
2023-11-14T12:08:10 DEBUG - Dauer: 0ms, (bis zum Reader)
2023-11-14T12:08:10 DEBUG - Dauer: 1ms, 1 Zeilen
Zeitstempel: 2023-11-14T12:09:37
Locale: German (Germany)
Locale: German (Germany)
Version: 1.8.8.0
Plattform: Wawi
WawiSeed: 6.4.79556.46701
Prozessname: JTL-Wawi
Physikalischer Speicher: 512749568 / Peak: 773287936
Basispriorität: 8
Prioritätsklasse: Normal
CPU-Zeit (User): 0:00:45,53125
CPU-Zeit (System): 0:00:08,421875
Page-Size (Sytem): 2516152 / Peak: 888365056
Page-Size: 607879168 / Peak: 888365056
Offene Handles: 1810
Database:
Build: 2311091320 e1e47c0e8cc9a68d329d4b1049d514e63c21e2e5
Unbehandelte Ausnahme #7110FFD83C0136E0 vom Typ JTL.Database.SqlUpdater.UpdateException in
JTL.Database.SqlUpdater.UpdateException: 12:07:58 Fehler in der Version 1.8.7.0 beim Befehl:
==============================================INSERT INTO dbo.tOptions (cKey, cValue)
VALUES (N'Amazon.AbgleichBestandHistoryLimit', '30');==============================================
FEHLER:
Verletzung der PRIMARY KEY-Einschränkung "PK_dbo_tOptions". Ein doppelter Schlüssel kann in das dbo.tOptions-Objekt nicht eingefügt werden. Der doppelte Schlüsselwert ist (Amazon.AbgleichBestandHistoryLimit).
Die Anweisung wurde beendet.
2023-11-14T12:07:58 DEBUG - CREATE PROCEDURE [Zahlungsabgleich].[spZahlungErstellen]
@type AS Zahlungsabgleich.TYPE_spZahlungErstellen READONLY
AS
SET NOCOUNT ON;
SET ANSI_NULLS ON;
SET ANSI_NULL_DFLT_ON ON;
SET ANSI_PADDING ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET XACT_ABORT OFF;
DECLARE @OldContextInfo VARBINARY(128);
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
DECLARE @retry INT;
DECLARE @CreatedTransaction INT;
DECLARE @ReturnValue INT;
SET @retry = 5;
WHILE @retry > 0
BEGIN
-- Context Info
IF(CONTEXT_INFO() IS NOT NULL)
BEGIN
SET @OldContextInfo = CONTEXT_INFO();
END
ELSE
BEGIN
SET @OldContextInfo = 0x0;
END
SET CONTEXT_INFO 0x0; -- ContextInfo festlegen
BEGIN TRY
IF (@@TRANCOUNT = 0)
BEGIN
SET @CreatedTransaction = 1;
BEGIN TRANSACTION
END;
ELSE
BEGIN
SET @CreatedTransaction = 0;
SAVE TRANSACTION Savepoint0;
END;
--
-- Start
--
IF(object_id('tempdb..#Zahlungen') IS NOT NULL)
BEGIN
DROP TABLE #Zahlungen;
END
CREATE TABLE #Zahlungen
(
id INT IDENTITY(1,1),
cName NVARCHAR(255) NULL,
dDatum DATETIME NULL,
fBetrag DECIMAL(25,13) NOT NULL,
kBestellung INT NULL,
kBenutzer INT NULL,
nAnzahlung TINYINT NULL,
cHinweis NVARCHAR(255) NULL,
kZahlungsart INT NULL,
nKeinExport TINYINT NULL,
cSKRManuell NVARCHAR(255) NULL,
cExternalTransactionId NVARCHAR(255) NULL,
kZahlungsabgleichUmsatz INT NULL,
nZuweisungstyp TINYINT NULL,
nZahlungstyp TINYINT NULL,
cZuweisungsinfo NVARCHAR(128) NULL,
nZuweisungswertung INT NULL,
fOffenerBetrag DECIMAL(25,13) NULL
);
INSERT INTO #Zahlungen (cName, dDatum, fBetrag, kBestellung, kBenutzer, nAnzahlung, cHinweis, kZahlungsart, nKeinExport,
cSKRManuell, cExternalTransactionId, kZahlungsabgleichUmsatz, nZuweisungstyp, nZahlungstyp, cZuweisungsinfo, nZuweisungswertung,
fOffenerBetrag)
SELECT cName, dDatum, fBetrag, kBestellung, kBenutzer, nAnzahlung, cHinweis, kZahlungsart, nKeinExport,
cSKRManuell, cExternalTransactionId, kZahlungsabgleichUmsatz, nZuweisungstyp, nZahlungstyp, cZuweisungsinfo, nZuweisungswertung,
fOffenerBetrag
FROM @type
IF EXISTS (
SELECT #Zahlungen.kBestellung, #Zahlungen.fOffenerBetrag FROM #Zahlungen
EXCEPT
SELECT vOffenerPosten.kBestellung, vOffenerPosten.fWertOffen FROM Zahlungsabgleich.vOffenerPosten
JOIN #Zahlungen ON #Zahlungen.kBestellung = vOffenerPosten.kBestellung
WHERE #Zahlungen.fOffenerBetrag = vOffenerPosten.fWertOffen
)
BEGIN
RAISERROR ('Data has changed', 16, 1);
END
ELSE
BEGIN
DECLARE @zahlungID INT;
DECLARE @kId INT;
SELECT @kId = tpk.nummer FROM dbo.tpk WHERE tpk.cName = 'tZahlung'
UPDATE dbo.tpk SET tpk.nummer = (SELECT COUNT(*) + @kId FROM #Zahlungen), tpk.dChanged = GETDATE()
WHERE tpk.cName = 'tZahlung'
INSERT INTO dbo.tZahlung (kZahlung, cName, dDatum, fBetrag, kBestellung, kBenutzer, nAnzahlung, cHinweis, kZahlungsart, nKeinExport,
cSKRManuell, cExternalTransactionId, kZahlungsabgleichUmsatz, nZuweisungstyp, nZahlungstyp, cZuweisungsinfo, nZuweisungswertung)
SELECT @kId + ROW_NUMBER() OVER(ORDER BY #Zahlungen.cName) - 1, cName, dDatum, fBetrag, kBestellung, kBenutzer, nAnzahlung, cHinweis, kZahlungsart, nKeinExport,
cSKRManuell, cExternalTransactionId, kZahlungsabgleichUmsatz, nZuweisungstyp, nZahlungstyp, cZuweisungsinfo, nZuweisungswertung
FROM #Zahlungen
END
--
-- Ende
--
SET @ReturnValue = @@ROWCOUNT;
IF(@CreatedTransaction = 1)
BEGIN
COMMIT -- Nur wenn kein Savepoint gesetzt
END
RETURN @ReturnValue;
END TRY
BEGIN CATCH
-- Deadlock catch
IF (ERROR_NUMBER() = 1205)
BEGIN
SET @retry = @retry - 1;
IF (@CreatedTransaction = 1)
BEGIN
ROLLBACK TRANSACTION;
END
ELSE
BEGIN
ROLLBACK TRANSACTION Savepoint0;
END
IF (@retry = 0)
BEGIN
SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE();
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
SET CONTEXT_INFO 0x0;
RETURN 0;
END
EXEC dbo.spWaitRandom;
END
ELSE
BEGIN
SET @retry = -1;
SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE();
IF (@CreatedTransaction = 1)
BEGIN
ROLLBACK TRANSACTION;
END
ELSE
BEGIN
ROLLBACK TRANSACTION Savepoint0;
END
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
SET CONTEXT_INFO @OldContextInfo;
RETURN 0;
END
END CATCH
END
2023-11-14T12:07:58 DEBUG - Dauer: 6ms
2023-11-14T12:07:58 DEBUG - UPDATE [dbo].[tVersion] SET [cVersion] = '1.8.7.0';
2023-11-14T12:07:58 DEBUG - Dauer: 0ms, AffectedRows: 1
2023-11-14T12:07:58 DEBUG - SELECT TOP(1) * FROM [dbo].[tUpdateMigration] WHERE [cSqlId]=@sqlId
@sqlId = ' WAWI-32912_AmazonAbgleichBestandHistoryOptionsEintragAnlegen_001'
2023-11-14T12:07:58 DEBUG - Dauer: 0ms, (bis zum Reader)
2023-11-14T12:07:58 DEBUG - Dauer: 0 ms, 0 Zeilen
2023-11-14T12:07:58 DEBUG - INSERT INTO dbo.tOptions (cKey, cValue)
VALUES (N'Amazon.AbgleichBestandHistoryLimit', '30');
2023-11-14T12:07:58 WARN - Dauer: 4ms, Error: Verletzung der PRIMARY KEY-Einschränkung "PK_dbo_tOptions". Ein doppelter Schlüssel kann in das dbo.tOptions-Objekt nicht eingefügt werden. Der doppelte Schlüsselwert ist (Amazon.AbgleichBestandHistoryLimit).
Die Anweisung wurde beendet.
2023-11-14T12:07:58 DEBUG - DECLARE @Identities TABLE (Id INT NOT NULL);
INSERT INTO [dbo].[tUpdateMigration] ([cVersion], [bHash], [cObjectname], [cError], [cSqlId]) OUTPUT INSERTED.[kUpdateMigration] AS [Id] INTO @Identities VALUES (@cVersion, @bHash, @cObjectname, @cError, @cSqlId);
SELECT [Id] FROM @Identities ORDER BY [Id];
@cVersion = '1.8.7.0'
@bHash = CONVERT(varbinary(max), '35-35-31-41-46-30-37-35-34-33-45-32-31-39-36-36-42-32-42-39-44-44-46-46-32-42-37-39-45-45-39-32', 2)
@cObjectname = 'PlainSql'
@cError = NULL
@cSqlId = 'WAWI-32912_AmazonAbgleichBestandHistoryOptionsEintragAnlegen_001'
2023-11-14T12:07:58 DEBUG - Dauer: 1ms, (bis zum Reader)
2023-11-14T12:07:58 DEBUG - Dauer: 1 ms, 1 Zeilen
2023-11-14T12:07:58 DEBUG - SELECT [recovery_model_desc] FROM [master].[sys].[databases] WHERE [name] = @name
@name = 'eazybusiness'
2023-11-14T12:07:58 DEBUG - Dauer: 22ms, Result: SIMPLE
2023-11-14T12:07:58 DEBUG - SELECT * FROM tUpdateLog WHERE kUpdateLog > @kUpdateLog
kUpdateLog = 0
2023-11-14T12:07:58 DEBUG - Dauer: 0ms, (bis zum Reader)
2023-11-14T12:07:58 DEBUG - Dauer: 2ms, 0 Zeilen
2023-11-14T12:07:58 DEBUG - SELECT (CASE WHEN SERVERPROPERTY('MACHINENAME') = HOST_NAME() THEN 'local' ELSE 'remote' END) AS instance
2023-11-14T12:07:58 DEBUG - Dauer: 0ms, Result: local
2023-11-14T12:08:10 DEBUG -
MERGE INTO
eazybusiness.[dbo].[tOptions] AS myTarget
USING (VALUES (@Key, @Value)) AS mySource(cKey, cValue)
ON mySource.cKey = myTarget.cKey
WHEN NOT MATCHED BY TARGET THEN
INSERT (cKey, cValue) VALUES (mySource.cKey, mySource.cValue);
SELECT
cValue
FROM
eazybusiness.[dbo].[tOptions]
WHERE
cKey = @Key;
@key = 'WawiSeed'
@value = 'C9FCEED7E28126A0'
2023-11-14T12:08:10 DEBUG - Dauer: 8ms, (bis zum Reader)
2023-11-14T12:08:10 DEBUG - Dauer: 10 ms, 1 Zeilen
2023-11-14T12:08:10 DEBUG - SELECT * FROM eazybusiness.dbo.tMandant WHERE cDB = @DBName
@DBName = 'eazybusiness'
2023-11-14T12:08:10 DEBUG - Dauer: 0ms, (bis zum Reader)
2023-11-14T12:08:10 DEBUG - Dauer: 1ms, 1 Zeilen
Zeitstempel: 2023-11-14T12:09:37
Locale: German (Germany)
Locale: German (Germany)
Version: 1.8.8.0
Plattform: Wawi
WawiSeed: 6.4.79556.46701
Prozessname: JTL-Wawi
Physikalischer Speicher: 512749568 / Peak: 773287936
Basispriorität: 8
Prioritätsklasse: Normal
CPU-Zeit (User): 0:00:45,53125
CPU-Zeit (System): 0:00:08,421875
Page-Size (Sytem): 2516152 / Peak: 888365056
Page-Size: 607879168 / Peak: 888365056
Offene Handles: 1810
Database:
Build: 2311091320 e1e47c0e8cc9a68d329d4b1049d514e63c21e2e5