@habibov77/cordova-plugin-mcc-mlkit-barcode-scanner-fixed 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +166 -0
- package/package.json +47 -0
- package/plugin.xml +130 -0
- package/src/android/build-extras.gradle +14 -0
- package/src/android/res/assets/beep.ogg +0 -0
- package/src/android/res/drawable/flashlight.png +0 -0
- package/src/android/res/drawable/torch_active.xml +12 -0
- package/src/android/res/drawable/torch_inactive.xml +12 -0
- package/src/android/res/layout/capture_activity.xml +51 -0
- package/src/android/res/values/strings-de.xml +14 -0
- package/src/android/res/values/strings-en.xml +14 -0
- package/src/android/src/CaptureActivity.java +496 -0
- package/src/android/src/MLKitBarcodeScanner.java +183 -0
- package/src/android/src/utils/BitmapUtils.java +286 -0
- package/src/android/src/utils/FrameMetadata.java +69 -0
- package/src/ios/CDViOSScanner.h +21 -0
- package/src/ios/CDViOSScanner.m +197 -0
- package/src/ios/CameraViewController.h +38 -0
- package/src/ios/CameraViewController.m +554 -0
- package/src/ios/Sounds/beep.caf +0 -0
- package/src/ios/de.lproj/Localizable.strings +8 -0
- package/src/ios/en.lproj/Localizable.strings +8 -0
- package/www/BarcodeScanner.contract.js +10 -0
- package/www/BarcodeScanner.plugin.js +133 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const barcodeFormat = Object.freeze({
|
|
6
|
+
Code128: 1,
|
|
7
|
+
Code39: 2,
|
|
8
|
+
Code93: 4,
|
|
9
|
+
CodaBar: 8,
|
|
10
|
+
DataMatrix: 16,
|
|
11
|
+
EAN13: 32,
|
|
12
|
+
EAN8: 64,
|
|
13
|
+
ITF: 128,
|
|
14
|
+
QRCode: 256,
|
|
15
|
+
UPCA: 512,
|
|
16
|
+
UPCE: 1024,
|
|
17
|
+
PDF417: 2048,
|
|
18
|
+
Aztec: 4096,
|
|
19
|
+
});
|
|
20
|
+
const barcodeType = Object.freeze({
|
|
21
|
+
CONTACT_INFO: 1,
|
|
22
|
+
EMAIL: 2,
|
|
23
|
+
ISBN: 3,
|
|
24
|
+
PHONE: 4,
|
|
25
|
+
PRODUCT: 5,
|
|
26
|
+
SMS: 6,
|
|
27
|
+
TEXT: 7,
|
|
28
|
+
URL: 8,
|
|
29
|
+
WIFI: 9,
|
|
30
|
+
GEO: 10,
|
|
31
|
+
CALENDAR_EVENT: 11,
|
|
32
|
+
DRIVER_LICENSE: 12,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const defaultOptions = Object.freeze({
|
|
36
|
+
barcodeFormats: {
|
|
37
|
+
Code128: true,
|
|
38
|
+
Code39: true,
|
|
39
|
+
Code93: true,
|
|
40
|
+
CodaBar: true,
|
|
41
|
+
DataMatrix: true,
|
|
42
|
+
EAN13: true,
|
|
43
|
+
EAN8: true,
|
|
44
|
+
ITF: true,
|
|
45
|
+
QRCode: true,
|
|
46
|
+
UPCA: true,
|
|
47
|
+
UPCE: true,
|
|
48
|
+
PDF417: true,
|
|
49
|
+
Aztec: true,
|
|
50
|
+
},
|
|
51
|
+
beepOnSuccess: false,
|
|
52
|
+
vibrateOnSuccess: false,
|
|
53
|
+
detectorSize: 0.6,
|
|
54
|
+
rotateCamera: false,
|
|
55
|
+
timeoutMs: 0,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
function keyByValue(obj, value) {
|
|
59
|
+
const keys = Object.keys(obj);
|
|
60
|
+
const index = keys.map((key) => obj[key]).indexOf(value);
|
|
61
|
+
return keys[index] || String(value);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
class MLKitBarcodeScanner {
|
|
65
|
+
getBarcodeFormat(format) {
|
|
66
|
+
return keyByValue(barcodeFormat, format);
|
|
67
|
+
}
|
|
68
|
+
getBarcodeType(type) {
|
|
69
|
+
return keyByValue(barcodeType, type);
|
|
70
|
+
}
|
|
71
|
+
getBarcodeFormatFlags(barcodeFormats) {
|
|
72
|
+
let barcodeFormatFlag = 0;
|
|
73
|
+
let key;
|
|
74
|
+
const formats = barcodeFormats || defaultOptions.barcodeFormats;
|
|
75
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
76
|
+
for (key in formats) {
|
|
77
|
+
if (barcodeFormat.hasOwnProperty(key) &&
|
|
78
|
+
formats.hasOwnProperty(key) &&
|
|
79
|
+
formats[key]) {
|
|
80
|
+
barcodeFormatFlag += barcodeFormat[key];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return barcodeFormatFlag;
|
|
84
|
+
}
|
|
85
|
+
scan(userOptions, success, failure) {
|
|
86
|
+
const barcodeFormats = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.barcodeFormats) || defaultOptions.barcodeFormats;
|
|
87
|
+
const config = Object.assign(Object.assign(Object.assign({}, defaultOptions), userOptions), { barcodeFormats: this.getBarcodeFormatFlags(barcodeFormats) });
|
|
88
|
+
this.sendScanRequest(config, success, failure);
|
|
89
|
+
}
|
|
90
|
+
sendScanRequest(config, successCallback, failureCallback) {
|
|
91
|
+
cordova.exec((data) => {
|
|
92
|
+
const [text, format, type] = data;
|
|
93
|
+
successCallback({
|
|
94
|
+
text,
|
|
95
|
+
format: this.getBarcodeFormat(format),
|
|
96
|
+
type: this.getBarcodeType(type),
|
|
97
|
+
});
|
|
98
|
+
}, (err) => {
|
|
99
|
+
switch (err[0]) {
|
|
100
|
+
case null:
|
|
101
|
+
case 'USER_CANCELLED':
|
|
102
|
+
failureCallback({
|
|
103
|
+
cancelled: true,
|
|
104
|
+
message: 'The scan was cancelled.',
|
|
105
|
+
});
|
|
106
|
+
break;
|
|
107
|
+
case 'SCANNER_OPEN':
|
|
108
|
+
failureCallback({
|
|
109
|
+
cancelled: false,
|
|
110
|
+
message: 'Scanner already open.',
|
|
111
|
+
});
|
|
112
|
+
break;
|
|
113
|
+
case 'SCAN_TIMEOUT':
|
|
114
|
+
failureCallback({
|
|
115
|
+
cancelled: false,
|
|
116
|
+
message: 'Scan timed out.',
|
|
117
|
+
});
|
|
118
|
+
break;
|
|
119
|
+
default:
|
|
120
|
+
failureCallback({
|
|
121
|
+
cancelled: false,
|
|
122
|
+
message: err[0] || 'Unknown Error',
|
|
123
|
+
});
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}, 'cordova-plugin-mcc-mlkit-barcode-scanner', 'startScan', [config]);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const barcodeScanner = new MLKitBarcodeScanner();
|
|
130
|
+
module.exports = barcodeScanner;
|
|
131
|
+
|
|
132
|
+
exports.MLKitBarcodeScanner = MLKitBarcodeScanner;
|
|
133
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFyY29kZVNjYW5uZXIucGx1Z2luLmpzIiwic291cmNlcyI6WyIuLi9zcmMtdHlwZXNjcmlwdC9EZXRlY3Rvci50cyIsIi4uL3NyYy10eXBlc2NyaXB0L09wdGlvbnMudHMiLCIuLi9zcmMtdHlwZXNjcmlwdC91dGlsL09iamVjdC50cyIsIi4uL3NyYy10eXBlc2NyaXB0L0JhcmNvZGVTY2FubmVyLnBsdWdpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgYmFyY29kZUZvcm1hdCA9IE9iamVjdC5mcmVlemUoe1xyXG4gIENvZGUxMjg6IDEsXHJcbiAgQ29kZTM5OiAyLFxyXG4gIENvZGU5MzogNCxcclxuICBDb2RhQmFyOiA4LFxyXG4gIERhdGFNYXRyaXg6IDE2LFxyXG4gIEVBTjEzOiAzMixcclxuICBFQU44OiA2NCxcclxuICBJVEY6IDEyOCxcclxuICBRUkNvZGU6IDI1NixcclxuICBVUENBOiA1MTIsXHJcbiAgVVBDRTogMTAyNCxcclxuICBQREY0MTc6IDIwNDgsXHJcbiAgQXp0ZWM6IDQwOTYsXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJhcmNvZGVUeXBlID0gT2JqZWN0LmZyZWV6ZSh7XHJcbiAgQ09OVEFDVF9JTkZPOiAxLFxyXG4gIEVNQUlMOiAyLFxyXG4gIElTQk46IDMsXHJcbiAgUEhPTkU6IDQsXHJcbiAgUFJPRFVDVDogNSxcclxuICBTTVM6IDYsXHJcbiAgVEVYVDogNyxcclxuICBVUkw6IDgsXHJcbiAgV0lGSTogOSxcclxuICBHRU86IDEwLFxyXG4gIENBTEVOREFSX0VWRU5UOiAxMSxcclxuICBEUklWRVJfTElDRU5TRTogMTIsXHJcbn0pO1xyXG4iLCJpbXBvcnQgeyBJT3B0aW9ucyB9IGZyb20gJy4vSW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0T3B0aW9uczogUmVxdWlyZWQ8SU9wdGlvbnM+ID0gT2JqZWN0LmZyZWV6ZSh7XHJcbiAgYmFyY29kZUZvcm1hdHM6IHtcclxuICAgIENvZGUxMjg6IHRydWUsXHJcbiAgICBDb2RlMzk6IHRydWUsXHJcbiAgICBDb2RlOTM6IHRydWUsXHJcbiAgICBDb2RhQmFyOiB0cnVlLFxyXG4gICAgRGF0YU1hdHJpeDogdHJ1ZSxcclxuICAgIEVBTjEzOiB0cnVlLFxyXG4gICAgRUFOODogdHJ1ZSxcclxuICAgIElURjogdHJ1ZSxcclxuICAgIFFSQ29kZTogdHJ1ZSxcclxuICAgIFVQQ0E6IHRydWUsXHJcbiAgICBVUENFOiB0cnVlLFxyXG4gICAgUERGNDE3OiB0cnVlLFxyXG4gICAgQXp0ZWM6IHRydWUsXHJcbiAgfSxcclxuICBiZWVwT25TdWNjZXNzOiBmYWxzZSxcclxuICB2aWJyYXRlT25TdWNjZXNzOiBmYWxzZSxcclxuICBkZXRlY3RvclNpemU6IDAuNixcclxuICByb3RhdGVDYW1lcmE6IGZhbHNlLFxyXG4gIHRpbWVvdXRNczogMCxcclxufSk7XHJcbiIsImV4cG9ydCBmdW5jdGlvbiBrZXlCeVZhbHVlPFRPYmplY3Q+KFxyXG4gIG9iajogeyBbczogc3RyaW5nXTogVE9iamVjdCB9LFxyXG4gIHZhbHVlOiBUT2JqZWN0LFxyXG4pOiBzdHJpbmcge1xyXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG4gIGNvbnN0IGluZGV4ID0ga2V5cy5tYXAoKGtleSkgPT4gb2JqW2tleV0pLmluZGV4T2YodmFsdWUpO1xyXG4gIHJldHVybiBrZXlzW2luZGV4XSB8fCBTdHJpbmcodmFsdWUpO1xyXG59XHJcbiIsImltcG9ydCB7IGJhcmNvZGVGb3JtYXQsIGJhcmNvZGVUeXBlIH0gZnJvbSAnLi9EZXRlY3Rvcic7XHJcbmltcG9ydCB7XHJcbiAgSUJhcmNvZGVGb3JtYXRzLFxyXG4gIElDb25maWcsXHJcbiAgSUVycm9yLFxyXG4gIElPcHRpb25zLFxyXG4gIElSZXN1bHQsXHJcbn0gZnJvbSAnLi9JbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBkZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vT3B0aW9ucyc7XHJcbmltcG9ydCB7IGtleUJ5VmFsdWUgfSBmcm9tICcuL3V0aWwvT2JqZWN0JztcclxuXHJcbmV4cG9ydCBjbGFzcyBNTEtpdEJhcmNvZGVTY2FubmVyIHtcclxuICBwcml2YXRlIGdldEJhcmNvZGVGb3JtYXQoZm9ybWF0OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGtleUJ5VmFsdWUoYmFyY29kZUZvcm1hdCwgZm9ybWF0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyY29kZVR5cGUodHlwZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBrZXlCeVZhbHVlKGJhcmNvZGVUeXBlLCB0eXBlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyY29kZUZvcm1hdEZsYWdzKGJhcmNvZGVGb3JtYXRzPzogSUJhcmNvZGVGb3JtYXRzKTogbnVtYmVyIHtcclxuICAgIGxldCBiYXJjb2RlRm9ybWF0RmxhZyA9IDA7XHJcbiAgICBsZXQga2V5OiBrZXlvZiB0eXBlb2YgYmFyY29kZUZvcm1hdDtcclxuICAgIGNvbnN0IGZvcm1hdHMgPSBiYXJjb2RlRm9ybWF0cyB8fCBkZWZhdWx0T3B0aW9ucy5iYXJjb2RlRm9ybWF0cztcclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcclxuICAgIGZvciAoa2V5IGluIGZvcm1hdHMpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGJhcmNvZGVGb3JtYXQuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxyXG4gICAgICAgIGZvcm1hdHMuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxyXG4gICAgICAgIGZvcm1hdHNba2V5XVxyXG4gICAgICApIHtcclxuICAgICAgICBiYXJjb2RlRm9ybWF0RmxhZyArPSBiYXJjb2RlRm9ybWF0W2tleV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYXJjb2RlRm9ybWF0RmxhZztcclxuICB9XHJcblxyXG4gIHNjYW4oXHJcbiAgICB1c2VyT3B0aW9uczogSU9wdGlvbnMsXHJcbiAgICBzdWNjZXNzOiAocmVzdWx0OiBJUmVzdWx0KSA9PiB1bmtub3duLFxyXG4gICAgZmFpbHVyZTogKGVycm9yOiBJRXJyb3IpID0+IHVua25vd24sXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBiYXJjb2RlRm9ybWF0cyA9XHJcbiAgICAgIHVzZXJPcHRpb25zPy5iYXJjb2RlRm9ybWF0cyB8fCBkZWZhdWx0T3B0aW9ucy5iYXJjb2RlRm9ybWF0cztcclxuICAgIGNvbnN0IGNvbmZpZzogSUNvbmZpZyA9IHtcclxuICAgICAgLi4uZGVmYXVsdE9wdGlvbnMsXHJcbiAgICAgIC4uLnVzZXJPcHRpb25zLFxyXG4gICAgICBiYXJjb2RlRm9ybWF0czogdGhpcy5nZXRCYXJjb2RlRm9ybWF0RmxhZ3MoYmFyY29kZUZvcm1hdHMpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlbmRTY2FuUmVxdWVzdChjb25maWcsIHN1Y2Nlc3MsIGZhaWx1cmUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZW5kU2NhblJlcXVlc3QoXHJcbiAgICBjb25maWc6IElDb25maWcsXHJcbiAgICBzdWNjZXNzQ2FsbGJhY2s6IChyZXN1bHQ6IElSZXN1bHQpID0+IHVua25vd24sXHJcbiAgICBmYWlsdXJlQ2FsbGJhY2s6IChlcnJvcjogSUVycm9yKSA9PiB1bmtub3duLFxyXG4gICk6IHZvaWQge1xyXG4gICAgY29yZG92YS5leGVjKFxyXG4gICAgICAoZGF0YTogW3N0cmluZywgbnVtYmVyLCBudW1iZXJdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgW3RleHQsIGZvcm1hdCwgdHlwZV0gPSBkYXRhO1xyXG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayh7XHJcbiAgICAgICAgICB0ZXh0LFxyXG4gICAgICAgICAgZm9ybWF0OiB0aGlzLmdldEJhcmNvZGVGb3JtYXQoZm9ybWF0KSxcclxuICAgICAgICAgIHR5cGU6IHRoaXMuZ2V0QmFyY29kZVR5cGUodHlwZSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnI6IChzdHJpbmcgfCBudWxsKVtdKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChlcnJbMF0pIHtcclxuICAgICAgICAgIGNhc2UgbnVsbDpcclxuICAgICAgICAgIGNhc2UgJ1VTRVJfQ0FOQ0VMTEVEJzpcclxuICAgICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKHtcclxuICAgICAgICAgICAgICBjYW5jZWxsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1RoZSBzY2FuIHdhcyBjYW5jZWxsZWQuJyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnU0NBTk5FUl9PUEVOJzpcclxuICAgICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKHtcclxuICAgICAgICAgICAgICBjYW5jZWxsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdTY2FubmVyIGFscmVhZHkgb3Blbi4nLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdTQ0FOX1RJTUVPVVQnOlxyXG4gICAgICAgICAgICBmYWlsdXJlQ2FsbGJhY2soe1xyXG4gICAgICAgICAgICAgIGNhbmNlbGxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1NjYW4gdGltZWQgb3V0LicsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjayh7XHJcbiAgICAgICAgICAgICAgY2FuY2VsbGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJbMF0gfHwgJ1Vua25vd24gRXJyb3InLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAnY29yZG92YS1wbHVnaW4tbWNjLW1sa2l0LWJhcmNvZGUtc2Nhbm5lcicsXHJcbiAgICAgICdzdGFydFNjYW4nLFxyXG4gICAgICBbY29uZmlnXSxcclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBiYXJjb2RlU2Nhbm5lciA9IG5ldyBNTEtpdEJhcmNvZGVTY2FubmVyKCk7XHJcbm1vZHVsZS5leHBvcnRzID0gYmFyY29kZVNjYW5uZXI7XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQU8sTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN6QyxPQUFPLEVBQUUsQ0FBQztJQUNWLE1BQU0sRUFBRSxDQUFDO0lBQ1QsTUFBTSxFQUFFLENBQUM7SUFDVCxPQUFPLEVBQUUsQ0FBQztJQUNWLFVBQVUsRUFBRSxFQUFFO0lBQ2QsS0FBSyxFQUFFLEVBQUU7SUFDVCxJQUFJLEVBQUUsRUFBRTtJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsTUFBTSxFQUFFLEdBQUc7SUFDWCxJQUFJLEVBQUUsR0FBRztJQUNULElBQUksRUFBRSxJQUFJO0lBQ1YsTUFBTSxFQUFFLElBQUk7SUFDWixLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUMsQ0FBQztBQUVJLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDdkMsWUFBWSxFQUFFLENBQUM7SUFDZixLQUFLLEVBQUUsQ0FBQztJQUNSLElBQUksRUFBRSxDQUFDO0lBQ1AsS0FBSyxFQUFFLENBQUM7SUFDUixPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxDQUFDO0lBQ04sSUFBSSxFQUFFLENBQUM7SUFDUCxHQUFHLEVBQUUsQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDO0lBQ1AsR0FBRyxFQUFFLEVBQUU7SUFDUCxjQUFjLEVBQUUsRUFBRTtJQUNsQixjQUFjLEVBQUUsRUFBRTtDQUNuQixDQUFDOztBQzNCSyxNQUFNLGNBQWMsR0FBdUIsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5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
|