ComicVine Issue ID
diff --git a/src/client/components/RecentlyImported.tsx b/src/client/components/RecentlyImported.tsx
index 8259ef3..d2f81ea 100644
--- a/src/client/components/RecentlyImported.tsx
+++ b/src/client/components/RecentlyImported.tsx
@@ -6,7 +6,8 @@ import {
removeLeadingPeriod,
escapePoundSymbol,
} from "../shared/utils/formatting.utils";
-import { isNil, map } from "lodash";
+import { isEmpty, isNil, map } from "lodash";
+import { detectTradePaperbacks } from "../shared/utils/tradepaperback.utils";
type RecentlyImportedProps = {
comicBookCovers: any;
@@ -51,7 +52,14 @@ export const RecentlyImported = ({
)}
- TPB
+ {!isNil(sourcedMetadata.comicvine) &&
+ !isEmpty(
+ detectTradePaperbacks(
+ sourcedMetadata.comicvine.volumeInformation.description,
+ ),
+ ) ? (
+ TPB
+ ) : null}
);
diff --git a/src/client/shared/utils/tradepaperback.utils.ts b/src/client/shared/utils/tradepaperback.utils.ts
index a3ad7a1..7ac3103 100644
--- a/src/client/shared/utils/tradepaperback.utils.ts
+++ b/src/client/shared/utils/tradepaperback.utils.ts
@@ -1,36 +1,20 @@
-const TrainingSet = require("./trainingData.json");
-const natural = require("natural");
-const BrainJs = require("brain.js");
+import { compact, isNil } from "lodash";
-function buildWordDictionary(trainingData) {
- const tokenisedArray = trainingData.map((item) => {
- const tokens = item.phrase.split(" ");
- return tokens.map((token) => natural.PorterStemmer.stem(token));
- });
-
- const flattenedArray = [].concat.apply([], tokenisedArray);
- return flattenedArray.filter((item, pos, self) => self.indexOf(item) == pos);
-}
-
-const dictionary = buildWordDictionary(TrainingSet);
-
-function encode(phrase) {
- const phraseTokens = phrase.split(" ");
- const encodedPhrase = dictionary.map((word) =>
- phraseTokens.includes(word) ? 1 : 0,
- );
-
- return encodedPhrase;
-}
-
-const encodedTrainingSet = TrainingSet.map((dataSet) => {
- const encodedValue = encode(dataSet.phrase);
- return { input: encodedValue, output: dataSet.result };
-});
-
-const network = new BrainJs.NeuralNetwork();
-network.train(encodedTrainingSet);
-
-const encoded = encode("Im so happy to have cake");
-console.log(network.run(encoded));
-export const detectTradePaperbacks = (deck: string): any => {};
+export const detectTradePaperbacks = (deck): any => {
+ const paperback = [
+ /((trade)?\s?(paperback)|(tpb))/gim, // https://regex101.com/r/FhuowT/1
+ /(hard\s?cover)\s?(collect((ion)|(ed)|(ing)))/gim, //https://regex101.com/r/eFJVRM/1
+ /(collected\s?editions)/gim, // https://regex101.com/r/40pAm5/1
+ ];
+ const matches = paperback
+ .map((regex) => {
+ return deck.match(regex);
+ })
+ .map((item) => {
+ if (item !== undefined) {
+ return item;
+ }
+ });
+ console.log(compact(matches));
+ return compact(matches);
+};
diff --git a/yarn.lock b/yarn.lock
index 8a2aa77..c77d7be 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2262,11 +2262,6 @@ acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1:
resolved "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz"
integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==
-afinn-165@^1.0.2:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/afinn-165/-/afinn-165-1.0.4.tgz#3abf6b8922dd5db84d84e0abd155924381dd73a4"
- integrity sha512-7+Wlx3BImrK0HiG6y3lU4xX7SpBPSSu8T9iguPMlaueRFxjbYwAQrp9lqZUuFikqKbd/en8lVREILvP2J80uJA==
-
agent-base@6, agent-base@^6.0.2:
version "6.0.2"
resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
@@ -2440,13 +2435,6 @@ anymatch@^3.0.3, anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
-apparatus@^0.0.10:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/apparatus/-/apparatus-0.0.10.tgz#81ea756772ada77863db54ceee8202c109bdca3e"
- integrity sha512-KLy/ugo33KZA7nugtQ7O0E1c8kQ52N3IvD/XgIh4w/Nr28ypfkwDfA67F1ev4N1m5D+BOk1+b2dEJDfpj/VvZg==
- dependencies:
- sylvester ">= 0.0.8"
-
aproba@^1.0.3:
version "1.2.0"
resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz"
@@ -3120,11 +3108,6 @@ bindings@^1.5.0:
dependencies:
file-uri-to-path "1.0.0"
-bit-twiddle@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e"
- integrity sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4=
-
bl@^1.0.0:
version "1.2.3"
resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz"
@@ -3252,14 +3235,6 @@ braces@^3.0.1, braces@~3.0.2:
dependencies:
fill-range "^7.0.1"
-brain.js@^2.0.0-beta.2:
- version "2.0.0-beta.2"
- resolved "https://registry.yarnpkg.com/brain.js/-/brain.js-2.0.0-beta.2.tgz#eefe0457b8da0e02e568601df19384487cc1603d"
- integrity sha512-Cg8iUGrEz1kRqWos8mJddabMJxdiAEF24OX6Z0EWX/+9gu7BIjg5GL+IyST/vl4kbfwdvKHqeBr/N9eWEDzGdQ==
- dependencies:
- gpu.js "^2.9.5"
- thaw.js "^2.1.0"
-
browser-process-hrtime@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz"
@@ -6195,24 +6170,6 @@ github-from-package@0.0.0:
resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz"
integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
-gl-wiretap@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/gl-wiretap/-/gl-wiretap-0.6.2.tgz#e4aa19622831088fbaa7e5a18d01768f7a3fb07c"
- integrity sha512-fxy1XGiPkfzK+T3XKDbY7yaqMBmozCGvAFyTwaZA3imeZH83w7Hr3r3bYlMRWIyzMI/lDUvUMM/92LE2OwqFyQ==
-
-gl@^4.5.2:
- version "4.9.2"
- resolved "https://registry.yarnpkg.com/gl/-/gl-4.9.2.tgz#dd31cdaec7d3c4b6761648111e55531f86137821"
- integrity sha512-lLYaicQxsRPxOnKWX9pIGmtKRuw0epvI089yl9uBvemYxR9xE01eRuXJgje1U0/06Df7bdOmmcW87IPOsu52Ow==
- dependencies:
- bindings "^1.5.0"
- bit-twiddle "^1.0.2"
- glsl-tokenizer "^2.0.2"
- nan "^2.15.0"
- node-abi "^2.30.1"
- node-gyp "^7.1.2"
- prebuild-install "^5.3.6"
-
glob-parent@^3.1.0:
version "3.1.0"
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz"
@@ -6323,13 +6280,6 @@ globule@^1.0.0:
lodash "~4.17.10"
minimatch "~3.0.2"
-glsl-tokenizer@^2.0.2:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a"
- integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==
- dependencies:
- through2 "^0.6.3"
-
got@^6.7.1:
version "6.7.1"
resolved "https://registry.npmjs.org/got/-/got-6.7.1.tgz"
@@ -6390,21 +6340,6 @@ got@^8.3.1:
url-parse-lax "^3.0.0"
url-to-options "^1.0.1"
-gpu-mock.js@^1.3.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/gpu-mock.js/-/gpu-mock.js-1.3.1.tgz#f7deaa09da3f672762eda944ecf948fd2c4b1490"
- integrity sha512-+lbp8rQ0p1nTa6Gk6HoLiw4yM6JTpql82U+nCF3sZbX4FJWP9PzzF1018dW8K+pbmqRmhLHbn6Bjc6i6tgUpbA==
-
-gpu.js@^2.9.5:
- version "2.11.4"
- resolved "https://registry.yarnpkg.com/gpu.js/-/gpu.js-2.11.4.tgz#7c9006292c20319bdb249059c67b17a61e07aa65"
- integrity sha512-unsqKVkWy/fBd9WNfH5aWE4hEMrnsttxwGpn0wRWCk0gl2JdI69FolMYLrwg/ixaEAnyb3iYONYLor3BOFweWA==
- dependencies:
- acorn "^7.1.1"
- gl "^4.5.2"
- gl-wiretap "^0.6.2"
- gpu-mock.js "^1.3.0"
-
graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6:
version "4.2.6"
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz"
@@ -6962,7 +6897,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -8093,13 +8028,6 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
-json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
- integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
- dependencies:
- jsonify "~0.0.0"
-
json-stringify-nice@^1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz"
@@ -8138,11 +8066,6 @@ jsonfile@^6.0.1:
optionalDependencies:
graceful-fs "^4.1.6"
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
- integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
-
jsonparse@^1.3.1:
version "1.3.1"
resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz"
@@ -9158,11 +9081,6 @@ nan@^2.12.1, nan@^2.13.2:
resolved "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz"
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
-nan@^2.15.0:
- version "2.15.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
- integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
-
nanoid@^3.1.23:
version "3.1.23"
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz"
@@ -9195,18 +9113,6 @@ natural-compare@^1.4.0:
resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
-natural@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/natural/-/natural-5.1.0.tgz#76d3f59f635c986ed26a83e7bb9de15b3e3bb7aa"
- integrity sha512-bQAWSYKQmdiiRVwh1AlTfVspZOwbLVSbUwVko9MkzeQq4AyhFm8oyRDBrxaSKknHbq2zW+hbLNP8K0xLXeBT8Q==
- dependencies:
- afinn-165 "^1.0.2"
- apparatus "^0.0.10"
- json-stable-stringify "^1.0.1"
- sylvester "^0.0.12"
- underscore "^1.9.1"
- wordnet-db "^3.1.11"
-
ndjson@^1.4.0:
version "1.5.0"
resolved "https://registry.npmjs.org/ndjson/-/ndjson-1.5.0.tgz"
@@ -9252,13 +9158,6 @@ node-abi@^2.21.0:
dependencies:
semver "^5.4.1"
-node-abi@^2.30.1, node-abi@^2.7.0:
- version "2.30.1"
- resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf"
- integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==
- dependencies:
- semver "^5.4.1"
-
node-addon-api@^3.2.0:
version "3.2.1"
resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz"
@@ -9372,11 +9271,6 @@ nodemon@^1.17.3:
undefsafe "^2.0.2"
update-notifier "^2.5.0"
-noop-logger@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
- integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=
-
nopt@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz"
@@ -10423,27 +10317,6 @@ postcss@^8.2.15:
nanoid "^3.1.23"
source-map-js "^0.6.2"
-prebuild-install@^5.3.6:
- version "5.3.6"
- resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291"
- integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==
- dependencies:
- detect-libc "^1.0.3"
- expand-template "^2.0.3"
- github-from-package "0.0.0"
- minimist "^1.2.3"
- mkdirp-classic "^0.5.3"
- napi-build-utils "^1.0.1"
- node-abi "^2.7.0"
- noop-logger "^0.1.1"
- npmlog "^4.0.1"
- pump "^3.0.0"
- rc "^1.2.7"
- simple-get "^3.0.3"
- tar-fs "^2.0.0"
- tunnel-agent "^0.6.0"
- which-pm-runs "^1.0.0"
-
prebuild-install@^6.1.2:
version "6.1.3"
resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.3.tgz"
@@ -11236,16 +11109,6 @@ read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7:
dependencies:
mute-stream "~0.0.4"
-"readable-stream@>=1.0.33-1 <1.1.0-0":
- version "1.0.34"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
- integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6:
version "2.3.7"
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"
@@ -12581,11 +12444,6 @@ string_decoder@^1.1.1, string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
- integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
-
stringify-package@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz"
@@ -12771,16 +12629,6 @@ svgo@^1.3.2:
unquote "~1.1.1"
util.promisify "~1.0.0"
-"sylvester@>= 0.0.8":
- version "0.0.21"
- resolved "https://registry.yarnpkg.com/sylvester/-/sylvester-0.0.21.tgz#2987b1ce2bd2f38b0dce2a34388884bfa4400ea7"
- integrity sha1-KYexzivS84sNzio0OIiEv6RADqc=
-
-sylvester@^0.0.12:
- version "0.0.12"
- resolved "https://registry.yarnpkg.com/sylvester/-/sylvester-0.0.12.tgz#5a884415cd2d002c57e7a3aac99462a75ce9fdb4"
- integrity sha1-WohEFc0tACxX56OqyZRip1zp/bQ=
-
symbol-tree@^3.2.4:
version "3.2.4"
resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz"
@@ -12943,11 +12791,6 @@ text-table@^0.2.0, text-table@~0.2.0:
resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
-thaw.js@^2.1.0:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/thaw.js/-/thaw.js-2.1.4.tgz#d00fbb20b9b6c6bc2aef541199cc0717deedfde9"
- integrity sha512-si9DSzEzOBUpbE41wE4Q6NXzXDYZfrniYocrduNtNDwLWj1Auueq8UzgePMQa5gfcQtVCG2OmlCTaHldtno3Vw==
-
threetwo-ui-typings@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/threetwo-ui-typings/-/threetwo-ui-typings-1.0.3.tgz"
@@ -12960,14 +12803,6 @@ throat@^5.0.0:
resolved "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz"
integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
-through2@^0.6.3:
- version "0.6.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
- integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=
- dependencies:
- readable-stream ">=1.0.33-1 <1.1.0-0"
- xtend ">=4.0.0 <4.1.0-0"
-
through2@^2.0.2, through2@^2.0.3:
version "2.0.5"
resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz"
@@ -13968,11 +13803,6 @@ which-module@^2.0.0:
resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-which-pm-runs@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
- integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
-
which@^1.2.9:
version "1.3.1"
resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz"
@@ -14024,11 +13854,6 @@ word-wrap@^1.2.3, word-wrap@~1.2.3:
resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
-wordnet-db@^3.1.11:
- version "3.1.14"
- resolved "https://registry.yarnpkg.com/wordnet-db/-/wordnet-db-3.1.14.tgz#7ba1ec2cb5730393f0856efcc738a60085426199"
- integrity sha512-zVyFsvE+mq9MCmwXUWHIcpfbrHHClZWZiVOzKSxNJruIcFn2RbY55zkhiAMMxM8zCVSmtNiViq8FsAZSFpMYag==
-
wordwrap@0.0.2:
version "0.0.2"
resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
@@ -14185,7 +14010,7 @@ xregexp@^5.0.2:
dependencies:
"@babel/runtime-corejs3" "^7.12.1"
-"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1:
+xtend@^4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==