kasten-js 0.3.0 → 0.4.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 +2 -1
- package/dist/index.cjs +64 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +64 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -50,9 +50,10 @@ All codecs available in Kasten are below.
|
|
|
50
50
|
|Base 32|RFC4648|`base32`|`rfc4648`|The latest Base 32 specification.|
|
|
51
51
|
|Base 32|RFC4648 (HEX)|`base32`|`rfc4648-hex`|The latest Base 32 specification for hexadecimal encoding.|
|
|
52
52
|
|Base 16|RFC4648|`base16`|`rfc4648`|The latest Base 16 specification.|
|
|
53
|
+
|Base 16|AsciiHexDecode (PDF1.7)|`base16`|`ascii`|The Base 16 specification of PDF1.7.|
|
|
53
54
|
|Run-Length|Basic|`runLength`|`basic`|The basic and old Run-Length encoding.|
|
|
54
55
|
|Run-Length|PackBits|`runLength`|`pack-bits`|The old Run-Length encoding accepted by [MacPrint of Apple](https://web.archive.org/web/20080705155158/http://developer.apple.com/technotes/tn/tn1023.html).|
|
|
55
|
-
|Run-Length|RunLengthDecode (PDF1.7)|`runLength`|`pdf`|The Run-Length specofication of
|
|
56
|
+
|Run-Length|RunLengthDecode (PDF1.7)|`runLength`|`pdf`|The Run-Length specofication of PDF1.7.|
|
|
56
57
|
|
|
57
58
|
## License
|
|
58
59
|
|
package/dist/index.cjs
CHANGED
|
@@ -5,13 +5,22 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
5
5
|
*/
|
|
6
6
|
var Base16 = class {};
|
|
7
7
|
//#endregion
|
|
8
|
-
//#region src/char-codes.ts
|
|
8
|
+
//#region src/utils/char-codes.ts
|
|
9
9
|
var CharCodes = class {
|
|
10
|
-
static
|
|
10
|
+
static HT = 9;
|
|
11
11
|
static LF = 10;
|
|
12
|
+
static VT = 11;
|
|
13
|
+
static FF = 12;
|
|
14
|
+
static CR = 13;
|
|
12
15
|
static SP = 32;
|
|
13
|
-
static HT = 9;
|
|
14
16
|
constructor() {}
|
|
17
|
+
static isWhitespace = (c) => {
|
|
18
|
+
const type = typeof c;
|
|
19
|
+
if (type !== "string" && type !== "number") throw new Error("invalid argument type.");
|
|
20
|
+
if (type === "string" && c.length !== 1) throw new Error("inalid argument: not a character");
|
|
21
|
+
const code = typeof c === "string" ? c.charCodeAt(0) : c;
|
|
22
|
+
return this.HT <= code && code <= this.CR || code === this.SP;
|
|
23
|
+
};
|
|
15
24
|
};
|
|
16
25
|
//#endregion
|
|
17
26
|
//#region src/errors.ts
|
|
@@ -51,13 +60,12 @@ var RFC4648Base16 = class RFC4648Base16 extends Base16 {
|
|
|
51
60
|
}
|
|
52
61
|
decode(base16) {
|
|
53
62
|
const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;
|
|
54
|
-
const { CR, LF, SP, HT } = CharCodes;
|
|
55
63
|
const upper = base16.toUpperCase();
|
|
56
64
|
const chars = new Uint8Array(base16.length);
|
|
57
65
|
let charCount = 0;
|
|
58
66
|
for (let i = 0; i < base16.length; i++) {
|
|
59
67
|
const c = upper.charCodeAt(i);
|
|
60
|
-
if (c
|
|
68
|
+
if (CharCodes.isWhitespace(c)) continue;
|
|
61
69
|
if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255) throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);
|
|
62
70
|
chars[charCount++] = c;
|
|
63
71
|
}
|
|
@@ -76,6 +84,43 @@ var RFC4648Base16 = class RFC4648Base16 extends Base16 {
|
|
|
76
84
|
}
|
|
77
85
|
};
|
|
78
86
|
//#endregion
|
|
87
|
+
//#region src/base16/ascii/ascii.ts
|
|
88
|
+
/**
|
|
89
|
+
* AsciiHexDecode codec of PDF1.7
|
|
90
|
+
*/
|
|
91
|
+
var AsciiHexDecode = class extends Base16 {
|
|
92
|
+
encode(bytes) {
|
|
93
|
+
if (bytes.length === 0) return ">";
|
|
94
|
+
const chars = [];
|
|
95
|
+
for (const byte of bytes) {
|
|
96
|
+
const char = byte.toString(16).padStart(2, "0");
|
|
97
|
+
chars.push(char);
|
|
98
|
+
}
|
|
99
|
+
chars.push(">");
|
|
100
|
+
return chars.join("");
|
|
101
|
+
}
|
|
102
|
+
decode(base16) {
|
|
103
|
+
const chars = [];
|
|
104
|
+
for (const c of base16) {
|
|
105
|
+
if (c === ">") break;
|
|
106
|
+
if (CharCodes.isWhitespace(c)) continue;
|
|
107
|
+
const code = c.charCodeAt(0);
|
|
108
|
+
if (!(48 <= code && code <= 57) && !(65 <= code && code <= 70) && !(97 <= code && code <= 102)) throw new KastenBase16DecodeError(`invalid char: ${c}`);
|
|
109
|
+
chars.push(c);
|
|
110
|
+
}
|
|
111
|
+
if (chars.length % 2 !== 0) chars.push("0");
|
|
112
|
+
const strLength = chars.length;
|
|
113
|
+
const bytes = new Uint8Array(Math.ceil(strLength / 2));
|
|
114
|
+
let byteCount = 0;
|
|
115
|
+
for (let i = 0, j = 0; i < strLength; i += 2, j++) {
|
|
116
|
+
const hex = chars[i] + chars[i + 1];
|
|
117
|
+
const byte = Number.parseInt(hex, 16);
|
|
118
|
+
bytes[byteCount++] = byte;
|
|
119
|
+
}
|
|
120
|
+
return bytes.subarray(0, byteCount);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
//#endregion
|
|
79
124
|
//#region src/base32/index.ts
|
|
80
125
|
/**
|
|
81
126
|
* Base32 codec.
|
|
@@ -143,12 +188,11 @@ var RFC4648Base32 = class RFC4648Base32 extends Base32 {
|
|
|
143
188
|
const upper = base32.toUpperCase();
|
|
144
189
|
const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;
|
|
145
190
|
const PADDING = RFC4648Base32.PADDING_CHAR_CODE;
|
|
146
|
-
const { CR, LF, SP, HT } = CharCodes;
|
|
147
191
|
const chars = new Uint8Array(base32.length);
|
|
148
192
|
let charCount = 0;
|
|
149
193
|
for (let i = 0; i < base32.length; i++) {
|
|
150
194
|
const c = upper.charCodeAt(i);
|
|
151
|
-
if (c
|
|
195
|
+
if (!CharCodes.isWhitespace(c)) chars[charCount++] = c;
|
|
152
196
|
}
|
|
153
197
|
if (charCount % 8 !== 0) throw new KastenBase32DecodeError("Invalid length string.");
|
|
154
198
|
let firstPad = -1;
|
|
@@ -252,12 +296,11 @@ var RFC4648Base32Hex = class RFC4648Base32Hex extends Base32 {
|
|
|
252
296
|
const upper = base32.toUpperCase();
|
|
253
297
|
const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;
|
|
254
298
|
const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;
|
|
255
|
-
const { CR, LF, SP, HT } = CharCodes;
|
|
256
299
|
const chars = new Uint8Array(base32.length);
|
|
257
300
|
let charCount = 0;
|
|
258
301
|
for (let i = 0; i < base32.length; i++) {
|
|
259
302
|
const c = upper.charCodeAt(i);
|
|
260
|
-
if (c
|
|
303
|
+
if (!CharCodes.isWhitespace(c)) chars[charCount++] = c;
|
|
261
304
|
}
|
|
262
305
|
if (charCount % 8 !== 0) throw new KastenBase32DecodeError("Invalid length string.");
|
|
263
306
|
let firstPad = -1;
|
|
@@ -341,6 +384,7 @@ var RFC2045Base64 = class RFC2045Base64 extends Base64 {
|
|
|
341
384
|
encode = (bytes) => {
|
|
342
385
|
if (bytes.length === 0) return "";
|
|
343
386
|
const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;
|
|
387
|
+
const { CR, LF } = CharCodes;
|
|
344
388
|
const baseSize = Math.ceil(bytes.length / 3) * 4;
|
|
345
389
|
const linebreaks = Math.floor((baseSize - 1) / 76);
|
|
346
390
|
const chars = new Uint8Array(baseSize + linebreaks * 2);
|
|
@@ -361,8 +405,8 @@ var RFC2045Base64 = class RFC2045Base64 extends Base64 {
|
|
|
361
405
|
charCout += 4;
|
|
362
406
|
if (charCout === 76 && ci < chars.length) {
|
|
363
407
|
charCout = 0;
|
|
364
|
-
chars[ci++] =
|
|
365
|
-
chars[ci++] =
|
|
408
|
+
chars[ci++] = CR;
|
|
409
|
+
chars[ci++] = LF;
|
|
366
410
|
}
|
|
367
411
|
}
|
|
368
412
|
const remain = bytes.length % 3;
|
|
@@ -461,7 +505,7 @@ var RFC4648Base64 = class RFC4648Base64 extends Base64 {
|
|
|
461
505
|
let lineCharCount = 0;
|
|
462
506
|
for (let i = 0; i < base64.length; i++) {
|
|
463
507
|
const c = base64.charCodeAt(i);
|
|
464
|
-
if (
|
|
508
|
+
if (!CharCodes.isWhitespace(c)) line[lineCharCount++] = c;
|
|
465
509
|
}
|
|
466
510
|
if (lineCharCount % 4 !== 0) throw new KastenBase64DecodeError("Invalid length string");
|
|
467
511
|
let firstPad = -1;
|
|
@@ -544,7 +588,7 @@ var RFC4648Base64URL = class RFC4648Base64URL extends Base64 {
|
|
|
544
588
|
let lineCharCount = 0;
|
|
545
589
|
for (let i = 0; i < base64.length; i++) {
|
|
546
590
|
const c = base64.charCodeAt(i);
|
|
547
|
-
if (
|
|
591
|
+
if (!CharCodes.isWhitespace(c)) line[lineCharCount++] = c;
|
|
548
592
|
}
|
|
549
593
|
if (lineCharCount % 4 !== 0) throw new KastenBase64DecodeError("Invalid length string");
|
|
550
594
|
let firstPad = -1;
|
|
@@ -590,6 +634,9 @@ var RFC4648Base64URL = class RFC4648Base64URL extends Base64 {
|
|
|
590
634
|
var RunLength = class {};
|
|
591
635
|
//#endregion
|
|
592
636
|
//#region src/run-length/basic/basic-run-length.ts
|
|
637
|
+
/**
|
|
638
|
+
* Basic Run-Length codec.
|
|
639
|
+
*/
|
|
593
640
|
var BasicRunLength = class extends RunLength {
|
|
594
641
|
encode(bytes) {
|
|
595
642
|
const encoded = new Uint8Array(bytes.length * 2);
|
|
@@ -637,6 +684,9 @@ var KastenRunLengthEncodeError = class extends KastenRunLengthError {};
|
|
|
637
684
|
var KastenRunLengthDecodeError = class extends KastenRunLengthError {};
|
|
638
685
|
//#endregion
|
|
639
686
|
//#region src/run-length/pack-bits/pack-bits.ts
|
|
687
|
+
/**
|
|
688
|
+
* PackBits codec.
|
|
689
|
+
*/
|
|
640
690
|
var PackBits = class extends RunLength {
|
|
641
691
|
encode(bytes) {
|
|
642
692
|
if (bytes.length === 0) return new Uint8Array([]);
|
|
@@ -807,6 +857,7 @@ var Kasten = class {
|
|
|
807
857
|
*/
|
|
808
858
|
static base16 = (category) => {
|
|
809
859
|
switch (category) {
|
|
860
|
+
case "ascii": return new AsciiHexDecode();
|
|
810
861
|
default: return new RFC4648Base16();
|
|
811
862
|
}
|
|
812
863
|
};
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../src/base16/index.ts","../src/char-codes.ts","../src/errors.ts","../src/base16/errors.ts","../src/base16/rfc4648/rfc4648.ts","../src/base32/index.ts","../src/base32/errors.ts","../src/base32/rfc4648/rfc4648.ts","../src/base32/rfc4648/rfc4648hex.ts","../src/base64/index.ts","../src/base64/errors.ts","../src/base64/rfc2045/rfc2045.ts","../src/base64/rfc4648/rfc4648.ts","../src/base64/rfc4648/rfc4648url.ts","../src/run-length/index.ts","../src/run-length/basic/basic-run-length.ts","../src/run-length/errors.ts","../src/run-length/pack-bits/pack-bits.ts","../src/run-length/pdf/pdf.ts","../src/kasten.ts"],"sourcesContent":["export const Base16Categories = ['rfc4648'] as const;\n\nexport type Base16Category = typeof Base16Categories[number];\n\n/**\n * Base16 codec.\n */\nexport abstract class Base16 {\n\n /**\n * Encodes bytes to Base16 string.\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base16 string to bytes.\n * @param base16 Base16 string to be decoded.\n */\n public abstract decode(base16: string): Uint8Array;\n}","export class CharCodes {\n\n public static CR = 13;\n\n public static LF = 10;\n\n public static SP = 32;\n\n public static HT = 9;\n\n private constructor() {}\n}","export class KastenError extends Error {}","import { KastenError } from '@/errors';\n\nexport class KastenBase16Error extends KastenError {}\n\nexport class KastenBase16EncodeError extends KastenBase16Error {}\n\nexport class KastenBase16DecodeError extends KastenBase16Error {}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase16DecodeError } from '../errors';\n\n/**\n * RFC 4648 Base 16 encoding.\n */\nexport class RFC4648Base16 extends Base16 {\n\n private static readonly textDecoder = new TextDecoder();\n\n private static readonly TABLE = '0123456789ABCDEF';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base16.ENCODED_TABLE;\n\n const chars = new Uint8Array(bytes.length * 2);\n\n let charCount = 0;\n\n for (const byte of bytes) {\n \n const ci1 = (byte & 0xF0) >> 4;\n const ci2 = byte & 0x0F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n\n chars[charCount++] = c1;\n chars[charCount++] = c2;\n }\n\n return RFC4648Base16.textDecoder.decode(chars);\n }\n \n public override decode(base16: string): Uint8Array {\n\n const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;\n const { CR, LF, SP, HT, } = CharCodes;\n\n const upper = base16.toUpperCase();\n const chars = new Uint8Array(base16.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base16.length; i++) {\n const c = upper.charCodeAt(i);\n\n if (c === CR || c === LF || c === SP || c === HT)\n continue;\n\n if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255)\n throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);\n\n chars[charCount++] = c;\n }\n\n if (charCount % 2 !== 0)\n throw new KastenBase16DecodeError('Invalid Base16');\n\n const bytes = new Uint8Array(Math.ceil(base16.length / 2));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 2) {\n \n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n\n const byte = ((ci1 & 0x0F) << 4) | (ci2 & 0x0F);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base32Category = typeof Base32Categories[number];\n\nexport const Base32Categories = ['rfc4648', 'rfc468-hex'] as const;\n\n/**\n * Base32 codec.\n */\nexport abstract class Base32 {\n\n protected static readonly textDecoder = new TextDecoder();\n\n /**\n * Encodes bytes to Base32 string\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base32 string to bytes.\n * @param base32 Base32 string to be decoded.\n */\n public abstract decode(base32: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\nexport class KastenBase32Error extends KastenError {}\n\nexport class KastenBase32EncodeError extends KastenBase32Error {}\n\nexport class KastenBase32DecodeError extends KastenBase32Error {}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32 extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;\n const PADDING = RFC4648Base32.PADDING_CHAR_CODE;\n const { CR, LF, SP, HT } = CharCodes;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (c !== CR &&\n c !== LF &&\n c !== SP &&\n c !== HT) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32Hex extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = '0123456789ABCDEFGHIJKLMNOPQRSTUV';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32Hex.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32Hex.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;\n const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;\n const { CR, LF, SP, HT } = CharCodes;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (c !== CR &&\n c !== LF &&\n c !== SP &&\n c !== HT) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base64Category = typeof Base64Categories[number];\n\nexport const Base64Categories = ['rfc4648', 'rfc4648-url', 'rfc2025'] as const;\n\n/**\n * Base64 codec.\n */\nexport abstract class Base64 {\n\n /**\n * Encodes byte array to string.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes string to byte array.\n * @param base64 Base64 string\n */\n public abstract decode(base64: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\n/**\n * Base error type of Base64.\n */\nexport class KastenBase64Error extends KastenError {}\n\n/**\n * Thrown when error occurs on Base64 encoding.\n */\nexport class KastenBase64EncodeError extends KastenBase64Error {};\n\n/**\n * Thrown when error occurs on Base64 decoding.\n */\nexport class KastenBase64DecodeError extends KastenBase64Error {};","import { Base64 } from '@/base64';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\n\nexport class RFC2045Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n let charCout = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n\n charCout += 4;\n\n if (charCout === 76 && ci < chars.length) {\n charCout = 0;\n chars[ci++] = CharCodes.CR;\n chars[ci++] = CharCodes.LF;\n }\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC2045Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n }\n\n return RFC2045Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC2045Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC2045Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC2045Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC2045Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC2045Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC2045Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC2045Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { Base64 } from '@/base64';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { CharCodes } from '@/char-codes';\n\nexport class RFC4648Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { CharCodes } from '@/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { Base64 } from '@/base64';\n\nexport class RFC4648Base64URL extends Base64 {\n \n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n \n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64URL.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64URL.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64URL.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64URL.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64URL.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64URL.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64URL.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","export const RunLengthCatgories = ['basic', 'pack-bits', 'pdf'] as const;\n\nexport type RunLengthCatgory = typeof RunLengthCatgories[number];\n\n/**\n * Run-Length encoding and decoding.\n */\nexport abstract class RunLength {\n\n /**\n * Encodes bytes to Run-Length encoded bytes.\n * @param bytes \n */\n public abstract encode(bytes: Uint8Array): Uint8Array;\n\n /**\n * Decodes Run-Length encoded bytes to original bytes.\n * @param runLength \n */\n public abstract decode(runLength: Uint8Array): Uint8Array;\n}","import { RunLength } from '@/run-length';\n\nexport class BasicRunLength extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n const encoded = new Uint8Array(bytes.length * 2);\n\n let byteCount = 0;\n\n let prev: number | null = null;\n\n let count = 0;\n\n for(let i = 0; i < bytes.length; i++) {\n\n const byte = bytes[i]!;\n\n if (prev === null) {\n prev = byte;\n count = 1;\n continue;\n }\n\n if (prev === byte) {\n\n if (count < 255) {\n count++;\n continue;\n }\n }\n\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n\n prev = byte;\n count = 1;\n }\n\n if (prev !== null) {\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n }\n\n return encoded.subarray(0, byteCount);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n for (let i = 0; i < runLength.length; i += 2) {\n\n const count = runLength[i]!;\n\n const byte = runLength[i + 1]!;\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte);\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { KastenError } from '@/errors';\n\nexport class KastenRunLengthError extends KastenError {}\n\nexport class KastenRunLengthEncodeError extends KastenRunLengthError {}\n\nexport class KastenRunLengthDecodeError extends KastenRunLengthError {}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '../errors';\n\nexport class PackBits extends RunLength {\n\n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 3) {\n encoded.push(256 - (j - 1));\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '@/run-length/errors';\n\nexport class Pdf extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 2) {\n encoded.push(257 - j);\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n\n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n \n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import type { Base16, Base16Category } from '@/base16';\nimport type { Base32, Base32Category } from '@/base32';\nimport type { Base64, Base64Category } from '@/base64';\nimport type { RunLength, RunLengthCatgory } from '@/run-length';\nimport { RFC4648Base16 } from '@/base16/rfc4648/rfc4648';\nimport { RFC4648Base32 } from '@/base32/rfc4648/rfc4648';\nimport { RFC4648Base32Hex } from '@/base32/rfc4648/rfc4648hex';\nimport { RFC2045Base64 } from '@/base64/rfc2045/rfc2045';\nimport { RFC4648Base64 } from '@/base64/rfc4648/rfc4648';\nimport { RFC4648Base64URL } from '@/base64/rfc4648/rfc4648url';\nimport { BasicRunLength } from '@/run-length/basic/basic-run-length';\nimport { PackBits } from '@/run-length/pack-bits/pack-bits';\nimport { Pdf } from '@/run-length/pdf/pdf';\n\n/**\n * Entry point of the Kasten library.\n * All encoding/decoding feature implementations are created through this class.\n *\n * @example\n * const base64 = Kasten.base64('rfc4648');\n * const encoded = base64.encode(data);\n *\n * @example\n * const base32 = Kasten.base32('rfc464hex');\n * const decoded = base32.decode(text);\n *\n * @example\n * const base16 = Kasten.base16();\n *\n * @example\n * const runLength = Kasten.runLength('pack-bits');\n */\nclass Kasten {\n\n private constructor() {}\n\n /**\n * Creates Base 64 codec instance.\n * @param category Base 64 category.\n */\n public static base64 = (category?: Base64Category): Base64 => {\n\n switch(category) {\n case 'rfc4648-url':\n return new RFC4648Base64URL();\n case 'rfc2025':\n return new RFC2045Base64();\n case 'rfc4648':\n default:\n return new RFC4648Base64();\n }\n }\n\n /**\n * Creates Base 32 codec instance.\n * @param category Base 32 category.\n */\n public static base32 = (category?: Base32Category): Base32 => {\n\n switch(category) {\n case 'rfc468-hex':\n return new RFC4648Base32Hex();\n case 'rfc4648':\n default:\n return new RFC4648Base32();\n }\n }\n\n /**\n * Create Base 16 codec instance.\n */\n public static base16 = (category?: Base16Category): Base16 => {\n\n switch(category) {\n case 'rfc4648':\n default:\n return new RFC4648Base16();\n }\n }\n\n /**\n * Creates Run-Length codec instance.\n */\n public static runLength = (category?: RunLengthCatgory): RunLength => {\n\n switch(category) {\n case 'pack-bits':\n return new PackBits();\n case 'pdf':\n return new Pdf();\n case 'basic':\n default:\n return new BasicRunLength();\n }\n }\n}\n\nexport {\n Kasten,\n type Base64,\n type Base64Category as Base64Catgory,\n type Base32,\n type Base32Category,\n type Base16,\n type Base16Category,\n type RunLength,\n type RunLengthCatgory\n}"],"mappings":";;;;;AAOA,IAAsB,SAAtB,MAA6B;;;ACP7B,IAAa,YAAb,MAAuB;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,cAAsB;;;;ACV1B,IAAa,cAAb,cAAiC,MAAM;;;ACEvC,IAAa,oBAAb,cAAuC,YAAY;AAEnD,IAAa,0BAAb,cAA6C,kBAAkB;AAE/D,IAAa,0BAAb,cAA6C,kBAAkB;;;;;;ACC/D,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,cAAc,IAAI,aAAa;CAEvD,OAAwB,QAAQ;CAEhC,OAAwB,gBAAgB,IAAI,WACxC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,gBAAgB,IAAI,WAAW,IAAI;CAE3D;AACI,OAAK,cAAc,KAAK,IAAI;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,cAAc,KAAK,MAAM,WAAW,EAAE,IAAI;;CAIvD,OAAuB,OAA2B;EAE9C,MAAM,gBAAgB,cAAc;EAEpC,MAAM,QAAQ,IAAI,WAAW,MAAM,SAAS,EAAE;EAE9C,IAAI,YAAY;AAEhB,OAAK,MAAM,QAAQ,OAAO;GAEtB,MAAM,OAAO,OAAO,QAAS;GAC7B,MAAM,MAAM,OAAO;GAEnB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;AAEzB,SAAM,eAAe;AACrB,SAAM,eAAe;;AAGzB,SAAO,cAAc,YAAY,OAAO,MAAM;;CAGlD,OAAuB,QAA4B;EAE/C,MAAM,gBAAgB,cAAc;EACpC,MAAM,EAAE,IAAI,IAAI,IAAI,OAAQ;EAE5B,MAAM,QAAQ,OAAO,aAAa;EAClC,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;EAE3C,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,MAAM,WAAW,EAAE;AAE7B,OAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,GAC1C;AAEJ,OAAI,CAAC,cAAc,MAAM,cAAc,MAAM,IACzC,OAAM,IAAI,wBAAwB,6BAA6B,OAAO,OAAO,EAAE,GAAG;AAEtF,SAAM,eAAe;;AAGzB,MAAI,YAAY,MAAM,EAClB,OAAM,IAAI,wBAAwB,iBAAiB;EAEvD,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,OAAO,SAAS,EAAE,CAAC;EAE1D,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GAEnC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI;GAErB,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,cAAc;GAE1B,MAAM,QAAS,MAAM,OAAS,IAAM,MAAM;AAE1C,SAAM,eAAe;;AAGzB,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;;;;ACrF3C,IAAsB,SAAtB,MAA6B;CAEzB,OAA0B,cAAc,IAAI,aAAa;;;;ACP7D,IAAa,oBAAb,cAAuC,YAAY;AAEnD,IAAa,0BAAb,cAA6C,kBAAkB;AAE/D,IAAa,0BAAb,cAA6C,kBAAkB;;;ACF/D,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,oBAA4B,IAAI,WAAW,EAAE;CAErE,OAAwB,QAClB;CAEN,OAAwB,gBAAgB,IAAI,WACxC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,gBAAgB,IAAI,WAAW,IAAI;CAE3D;AACI,OAAK,cAAc,KAAK,IAAI;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,cAAc,KAAK,MAAM,WAAW,EAAE,IAAI;;CAIvD,OAAuB,OAA2B;EAE9C,MAAM,gBAAgB,cAAc;EAEpC,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG,EAAE;EAE7D,IAAI,QAAQ;AAEZ,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,OAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAQ,KAAK,OAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,MAAM,KAAK;GAEjB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;AAEzB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;;EAGrB,MAAM,SAAS,MAAM,SAAS;EAE9B,MAAM,UACF,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IAAI;AAEvB,OAAK,IAAI,IAAI,SAAS,IAAI,GAAG,IACzB,OAAM,QAAQ,KAAK,cAAc;AAGrC,SAAO,OAAO,YAAY,OAAO,MAAM,SAAS,GAAG,MAAM,CAAC;;CAG9D,OAAuB,QAA4B;EAE/C,MAAM,QAAQ,OAAO,aAAa;EAElC,MAAM,gBAAgB,cAAc;EACpC,MAAM,UAAU,cAAc;EAC9B,MAAM,EAAE,IAAI,IAAI,IAAI,OAAO;EAE3B,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;EAE3C,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GAEpC,MAAM,IAAI,MAAM,WAAW,EAAE;AAE7B,OAAI,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GAEN,OAAM,eAAe;;AAI7B,MAAI,YAAY,MAAM,EAClB,OAAM,IAAI,wBAAwB,yBAAyB;EAE/D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,IAC3B,KAAI,MAAM,OAAO,SAAS;AACtB,cAAW;AACX;;EAIR,IAAI,WAAW;AAEf,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,YAAY,EACvB,OAAM,IAAI,wBAAwB,4BAA4B;AAElE,QAAK,IAAI,IAAI,UAAU,IAAI,WAAW,IAClC,KAAI,MAAM,OAAO,QACb,OAAM,IAAI,wBAAwB,kBAAkB;AAI5D,cAAW,YAAY;AAEvB,OAAI,aAAa,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa,EACnE,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,QAAQ,IAAI,WAAW,KAAK,OAAQ,YAAY,YAAY,IAAK,EAAE,CAAC;EAE1E,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GAEnC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GAErB,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;AAElD,OAAI,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,IAER,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,MAAS,IAAM,MAAM;AAExC,SAAM,eAAe;AAErB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,OAAO,QACnC,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,MAAM,QAClC,OAAM,eAAe;;AAG7B,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;AClM3C,IAAa,mBAAb,MAAa,yBAAyB,OAAO;CAEzC,OAAwB,oBAA4B,IAAI,WAAW,EAAE;CAErE,OAAwB,QAClB;CAEN,OAAwB,gBAAgB,IAAI,WACxC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,gBAAgB,IAAI,WAAW,IAAI;CAE3D;AACI,OAAK,cAAc,KAAK,IAAI;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,cAAc,KAAK,MAAM,WAAW,EAAE,IAAI;;CAIvD,OAAuB,OAA2B;EAE9C,MAAM,gBAAgB,iBAAiB;EAEvC,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG,EAAE;EAE7D,IAAI,QAAQ;AAEZ,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,OAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAQ,KAAK,OAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,MAAM,KAAK;GAEjB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;AAEzB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;;EAGrB,MAAM,SAAS,MAAM,SAAS;EAE9B,MAAM,UACF,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IAAI;AAEvB,OAAK,IAAI,IAAI,SAAS,IAAI,GAAG,IACzB,OAAM,QAAQ,KAAK,iBAAiB;AAGxC,SAAO,OAAO,YAAY,OAAO,MAAM,SAAS,GAAG,MAAM,CAAC;;CAG9D,OAAuB,QAA4B;EAE/C,MAAM,QAAQ,OAAO,aAAa;EAElC,MAAM,gBAAgB,iBAAiB;EACvC,MAAM,UAAU,iBAAiB;EACjC,MAAM,EAAE,IAAI,IAAI,IAAI,OAAO;EAE3B,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;EAE3C,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GAEpC,MAAM,IAAI,MAAM,WAAW,EAAE;AAE7B,OAAI,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GAEN,OAAM,eAAe;;AAI7B,MAAI,YAAY,MAAM,EAClB,OAAM,IAAI,wBAAwB,yBAAyB;EAE/D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,IAC3B,KAAI,MAAM,OAAO,SAAS;AACtB,cAAW;AACX;;EAIR,IAAI,WAAW;AAEf,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,YAAY,EACvB,OAAM,IAAI,wBAAwB,4BAA4B;AAElE,QAAK,IAAI,IAAI,UAAU,IAAI,WAAW,IAClC,KAAI,MAAM,OAAO,QACb,OAAM,IAAI,wBAAwB,kBAAkB;AAI5D,cAAW,YAAY;AAEvB,OAAI,aAAa,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa,EACnE,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,QAAQ,IAAI,WAAW,KAAK,OAAQ,YAAY,YAAY,IAAK,EAAE,CAAC;EAE1E,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GAEnC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GAErB,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;AAElD,OAAI,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,IAER,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,MAAS,IAAM,MAAM;AAExC,SAAM,eAAe;AAErB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,OAAO,QACnC,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,MAAM,QAClC,OAAM,eAAe;;AAG7B,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;;;;AC/L3C,IAAsB,SAAtB,MAA6B;;;;;;ACF7B,IAAa,oBAAb,cAAuC,YAAY;;;;AAKnD,IAAa,0BAAb,cAA6C,kBAAkB;;;;AAK/D,IAAa,0BAAb,cAA6C,kBAAkB;;;ACX/D,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,oBAAoB,IAAI,WAAW,EAAE;CAE7D,OAAwB,QAClB;CAEN,OAAwB,eAAe,IAAI,WAAW,IAAI;CAE1D,OAAwB,eAAe,IAAI,WACvC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,UAAU,IAAI,aAAa;CAEnD;AAEI,OAAK,aAAa,KAAK,IAAI;AAE3B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,aAAa,KAAK,MAAM,WAAW,EAAE,IAAI;;CAItD,UAA0B,UAA8B;AAEpD,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,eAAe,cAAc;EAEnC,MAAM,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG;EAC/C,MAAM,aAAa,KAAK,OAAO,WAAW,KAAK,GAAG;EAElD,MAAM,QAAQ,IAAI,WAAW,WAAW,aAAa,EAAE;EAEvD,IAAI,KAAK;EAET,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,KAAK,MAAM;GACjB,MAAM,MAAO,KAAK,MAAe,IAAK,MAAM;GAC5C,MAAM,MAAO,KAAK,OAAe,IAAK,MAAM;GAC5C,MAAM,KAAK,KAAK;AAEhB,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAE3B,eAAY;AAEZ,OAAI,aAAa,MAAM,KAAK,MAAM,QAAQ;AACtC,eAAW;AACX,UAAM,QAAQ,UAAU;AACxB,UAAM,QAAQ,UAAU;;;EAIhC,MAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,WAAW,GAAG;AACd,SAAM,KAAK,KAAK,cAAc;AAC9B,SAAM,KAAK,KAAK,cAAc;aACvB,WAAW,EAClB,OAAM,KAAK,KAAK,cAAc;AAGlC,SAAO,cAAc,QAAQ,OAAO,MAAM,SAAS,GAAG,GAAG,CAAC;;CAG9D,UAA0B,WAA+B;EAErD,MAAM,eAAe,cAAc;EAEnC,MAAM,OAAO,IAAI,WAAW,OAAO,OAAO;EAC1C,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,OAAO,WAAW,EAAE;AAC9B,OAAI,MAAM,UAAU,MACb,MAAM,UAAU,MAChB,MAAM,UAAU,MAChB,MAAM,UAAU,GAEnB,MAAK,mBAAmB;;AAIhC,MAAI,gBAAgB,MAAM,EACtB,OAAM,IAAI,wBAAwB,wBAAwB;EAE9D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,IAC/B,KAAI,KAAK,OAAO,cAAc,mBAAmB;AAC7C,cAAW;AACX;;AAIR,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,gBAAgB,EAC3B,OAAM,IAAI,wBAAwB,2BAA2B;AAGjE,QAAK,IAAI,IAAI,UAAU,IAAI,eAAe,IACtC,KAAI,KAAK,OAAO,cAAc,kBAC1B,OAAM,IAAI,wBAAwB,kBAAkB;GAI5D,MAAM,WAAW,gBAAgB;AAEjC,OAAI,aAAa,KAAK,aAAa,EAC/B,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,aAAa;EAEnB,MAAM,UACF,KAAK,aAAa,OAAO,cAAc,oBACpC,KAAK,aAAa,OAAO,cAAc,oBAAoB,IAAI,IAChE;EAEN,MAAM,QAAQ,IAAI,WAAY,gBAAgB,IAAK,IAAI,QAAQ;EAE/D,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK,GAAG;GAEvC,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GAEvB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;GAC/E,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;AAE/E,OAAI,QAAQ,OACR,QAAQ,OACP,UAAU,cAAc,qBAAqB,QAAQ,OACrD,UAAU,cAAc,qBAAqB,QAAQ,IAEtD,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,KAAM,OAAO,IAAM,OAAO;GAChC,MAAM,MAAO,MAAM,OAAO,IAAM,OAAO;GACvC,MAAM,MAAO,MAAM,MAAM,IAAK;AAE9B,SAAM,mBAAmB;AAEzB,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;AAG7B,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;;AAIjC,SAAO;;;;;AC3Kf,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,oBAAoB,IAAI,WAAW,EAAE;CAE7D,OAAwB,QAClB;CAEN,OAAwB,eAAe,IAAI,WAAW,IAAI;CAE1D,OAAwB,eAAe,IAAI,WACvC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,UAAU,IAAI,aAAa;CAEnD;AAEI,OAAK,aAAa,KAAK,IAAI;AAE3B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,aAAa,KAAK,MAAM,WAAW,EAAE,IAAI;;CAItD,UAA0B,UAA8B;AAEpD,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,eAAe,cAAc;EAEnC,MAAM,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG;EAC/C,MAAM,aAAa,KAAK,OAAO,WAAW,KAAK,GAAG;EAElD,MAAM,QAAQ,IAAI,WAAW,WAAW,aAAa,EAAE;EAEvD,IAAI,KAAK;AAET,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,KAAK,MAAM;GACjB,MAAM,MAAO,KAAK,MAAe,IAAK,MAAM;GAC5C,MAAM,MAAO,KAAK,OAAe,IAAK,MAAM;GAC5C,MAAM,KAAK,KAAK;AAEhB,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;;EAG/B,MAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,WAAW,GAAG;AACd,SAAM,KAAK,KAAK,cAAc;AAC9B,SAAM,KAAK,KAAK,cAAc;aACvB,WAAW,EAClB,OAAM,KAAK,KAAK,cAAc;AAGlC,SAAO,cAAc,QAAQ,OAAO,MAAM,SAAS,GAAG,GAAG,CAAC;;CAG9D,UAA0B,WAA+B;EAErD,MAAM,eAAe,cAAc;EAEnC,MAAM,OAAO,IAAI,WAAW,OAAO,OAAO;EAC1C,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,OAAO,WAAW,EAAE;AAC9B,OAAI,MAAM,UAAU,MACb,MAAM,UAAU,MAChB,MAAM,UAAU,MAChB,MAAM,UAAU,GAEnB,MAAK,mBAAmB;;AAIhC,MAAI,gBAAgB,MAAM,EACtB,OAAM,IAAI,wBAAwB,wBAAwB;EAE9D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,IAC/B,KAAI,KAAK,OAAO,cAAc,mBAAmB;AAC7C,cAAW;AACX;;AAIR,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,gBAAgB,EAC3B,OAAM,IAAI,wBAAwB,2BAA2B;AAGjE,QAAK,IAAI,IAAI,UAAU,IAAI,eAAe,IACtC,KAAI,KAAK,OAAO,cAAc,kBAC1B,OAAM,IAAI,wBAAwB,kBAAkB;GAI5D,MAAM,WAAW,gBAAgB;AAEjC,OAAI,aAAa,KAAK,aAAa,EAC/B,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,aAAa;EAEnB,MAAM,UACF,KAAK,aAAa,OAAO,cAAc,oBACpC,KAAK,aAAa,OAAO,cAAc,oBAAoB,IAAI,IAChE;EAEN,MAAM,QAAQ,IAAI,WAAY,gBAAgB,IAAK,IAAI,QAAQ;EAE/D,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK,GAAG;GAEvC,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GAEvB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;GAC/E,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;AAE/E,OAAI,QAAQ,OACR,QAAQ,OACP,UAAU,cAAc,qBAAqB,QAAQ,OACrD,UAAU,cAAc,qBAAqB,QAAQ,IAEtD,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,KAAM,OAAO,IAAM,OAAO;GAChC,MAAM,MAAO,MAAM,OAAO,IAAM,OAAO;GACvC,MAAM,MAAO,MAAM,MAAM,IAAK;AAE9B,SAAM,mBAAmB;AAEzB,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;AAG7B,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;;AAIjC,SAAO;;;;;ACjKf,IAAa,mBAAb,MAAa,yBAAyB,OAAO;CAEzC,OAAwB,oBAAoB,IAAI,WAAW,EAAE;CAE7D,OAAwB,QAClB;CAEN,OAAwB,eAAe,IAAI,WAAW,IAAI;CAE1D,OAAwB,eAAe,IAAI,WACvC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,UAAU,IAAI,aAAa;CAEnD;AAEI,OAAK,aAAa,KAAK,IAAI;AAE3B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,aAAa,KAAK,MAAM,WAAW,EAAE,IAAI;;CAItD,UAA0B,UAA8B;AAEpD,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,eAAe,iBAAiB;EAEtC,MAAM,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG;EAC/C,MAAM,aAAa,KAAK,OAAO,WAAW,KAAK,GAAG;EAElD,MAAM,QAAQ,IAAI,WAAW,WAAW,aAAa,EAAE;EAEvD,IAAI,KAAK;AAET,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,KAAK,MAAM;GACjB,MAAM,MAAO,KAAK,MAAe,IAAK,MAAM;GAC5C,MAAM,MAAO,KAAK,OAAe,IAAK,MAAM;GAC5C,MAAM,KAAK,KAAK;AAEhB,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;;EAG/B,MAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,WAAW,GAAG;AACd,SAAM,KAAK,KAAK,iBAAiB;AACjC,SAAM,KAAK,KAAK,iBAAiB;aAC1B,WAAW,EAClB,OAAM,KAAK,KAAK,iBAAiB;AAGrC,SAAO,iBAAiB,QAAQ,OAAO,MAAM,SAAS,GAAG,GAAG,CAAC;;CAGjE,UAA0B,WAA+B;EAErD,MAAM,eAAe,iBAAiB;EAEtC,MAAM,OAAO,IAAI,WAAW,OAAO,OAAO;EAC1C,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,OAAO,WAAW,EAAE;AAC9B,OAAI,MAAM,UAAU,MACb,MAAM,UAAU,MAChB,MAAM,UAAU,MAChB,MAAM,UAAU,GAEnB,MAAK,mBAAmB;;AAIhC,MAAI,gBAAgB,MAAM,EACtB,OAAM,IAAI,wBAAwB,wBAAwB;EAE9D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,IAC/B,KAAI,KAAK,OAAO,iBAAiB,mBAAmB;AAChD,cAAW;AACX;;AAIR,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,gBAAgB,EAC3B,OAAM,IAAI,wBAAwB,2BAA2B;AAGjE,QAAK,IAAI,IAAI,UAAU,IAAI,eAAe,IACtC,KAAI,KAAK,OAAO,iBAAiB,kBAC7B,OAAM,IAAI,wBAAwB,kBAAkB;GAI5D,MAAM,WAAW,gBAAgB;AAEjC,OAAI,aAAa,KAAK,aAAa,EAC/B,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,aAAa;EAEnB,MAAM,UACF,KAAK,aAAa,OAAO,iBAAiB,oBACvC,KAAK,aAAa,OAAO,iBAAiB,oBAAoB,IAAI,IACnE;EAEN,MAAM,QAAQ,IAAI,WAAY,gBAAgB,IAAK,IAAI,QAAQ;EAE/D,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK,GAAG;GAEvC,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GAEvB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,UAAU,iBAAiB,oBAAoB,aAAa,SAAU;GAClF,MAAM,MAAM,UAAU,iBAAiB,oBAAoB,aAAa,SAAU;AAElF,OAAI,QAAQ,OACR,QAAQ,OACP,UAAU,iBAAiB,qBAAqB,QAAQ,OACxD,UAAU,iBAAiB,qBAAqB,QAAQ,IAEzD,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,KAAM,OAAO,IAAM,OAAO;GAChC,MAAM,MAAO,MAAM,OAAO,IAAM,OAAO;GACvC,MAAM,MAAO,MAAM,MAAM,IAAK;AAE9B,SAAM,mBAAmB;AAEzB,OAAI,UAAU,iBAAiB,kBAC3B,OAAM,mBAAmB;AAG7B,OAAI,UAAU,iBAAiB,kBAC3B,OAAM,mBAAmB;;AAIjC,SAAO;;;;;;;;AC9Jf,IAAsB,YAAtB,MAAgC;;;ACLhC,IAAa,iBAAb,cAAoC,UAAU;CAE1C,OAAuB,OAA+B;EAElD,MAAM,UAAU,IAAI,WAAW,MAAM,SAAS,EAAE;EAEhD,IAAI,YAAY;EAEhB,IAAI,OAAsB;EAE1B,IAAI,QAAQ;AAEZ,OAAI,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GAElC,MAAM,OAAO,MAAM;AAEnB,OAAI,SAAS,MAAM;AACf,WAAO;AACP,YAAQ;AACR;;AAGJ,OAAI,SAAS;QAEL,QAAQ,KAAK;AACb;AACA;;;AAIR,WAAQ,eAAe;AACvB,WAAQ,eAAe;AAEvB,UAAO;AACP,WAAQ;;AAGZ,MAAI,SAAS,MAAM;AACf,WAAQ,eAAe;AACvB,WAAQ,eAAe;;AAG3B,SAAO,QAAQ,SAAS,GAAG,UAAU;;CAGzC,OAAuB,WAAmC;EAEtD,MAAM,UAAoB,EAAE;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;GAE1C,MAAM,QAAQ,UAAU;GAExB,MAAM,OAAO,UAAU,IAAI;AAE3B,QAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACvB,SAAQ,KAAK,KAAK;;AAI1B,SAAO,IAAI,WAAW,QAAQ;;;;;AC5DtC,IAAa,uBAAb,cAA0C,YAAY;AAEtD,IAAa,6BAAb,cAAgD,qBAAqB;AAErE,IAAa,6BAAb,cAAgD,qBAAqB;;;ACHrE,IAAa,WAAb,cAA8B,UAAU;CAEpC,OAAuB,OAA+B;AAElD,MAAI,MAAM,WAAW,EAAG,QAAO,IAAI,WAAW,EAAE,CAAC;EAEjD,MAAM,aAAa,MAAM;EAEzB,MAAM,UAAoB,EAAE;EAE5B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,OAAO,MAAM;GAEnB,IAAI,IAAI;AAER,UAAO,IAAI,IAAI,cAAc,SAAS,MAAM,IAAI,MAAM,IAAI,IACtD;AAGJ,OAAI,KAAK,GAAG;AACR,YAAQ,KAAK,OAAO,IAAI,GAAG;AAC3B,YAAQ,KAAK,KAAK;AAClB,SAAK;AACL;;AAGJ,UAAO,IAAI,IAAI,cAAc,IAAI,KAAK;IAElC,MAAM,MAAM,IAAI;IAEhB,MAAM,QAAQ,MAAM;AAEpB,QAAI,MAAM,MAAM,OAAO,SAAS,UAAU,MAAM,MAAM,IAAI;AACtD;AACA;;AAGJ;;AAGJ,WAAQ,KAAK,IAAI,EAAE;AAEnB,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IACvB,SAAQ,KAAK,MAAM,GAAI;AAG3B,QAAK;;AAGT,SAAO,IAAI,WAAW,QAAQ;;CAGlC,OAAuB,WAAmC;EAEtD,MAAM,UAAoB,EAAE;EAE5B,MAAM,aAAa,UAAU;EAE7B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,SAAS,UAAU;AAEzB,OAAI,WAAW,IAAM;AAErB,OAAI,KAAK,UAAU,UAAU,KAAM;IAE/B,MAAM,MAAM,IAAI,SAAS;AAEzB,SAAK,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;KAE9B,MAAM,OAAO,UAAU;AAEvB,SAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,aAAQ,KAAK,KAAK;;AAGtB,QAAI;AACJ;;AAGJ,OAAI,OAAQ,UAAU,UAAU,KAAM;IAElC,MAAM,QAAQ,MAAQ;IAEtB,MAAM,OAAO,UAAU,IAAI;AAE3B,QAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACvB,SAAQ,KAAK,KAAK;AAGtB,SAAK;AACL;;;AAIR,SAAO,IAAI,WAAW,QAAQ;;;;;ACzGtC,IAAa,MAAb,cAAyB,UAAU;CAE/B,OAAuB,OAA+B;AAElD,MAAI,MAAM,WAAW,EAAG,QAAO,IAAI,WAAW,EAAE,CAAC;EAEjD,MAAM,aAAa,MAAM;EAEzB,MAAM,UAAoB,EAAE;EAE5B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,OAAO,MAAM;GAEnB,IAAI,IAAI;AAER,UAAO,IAAI,IAAI,cAAc,SAAS,MAAM,IAAI,MAAM,IAAI,IACtD;AAGJ,OAAI,KAAK,GAAG;AACR,YAAQ,KAAK,MAAM,EAAE;AACrB,YAAQ,KAAK,KAAK;AAClB,SAAK;AACL;;AAGJ,UAAO,IAAI,IAAI,cAAc,IAAI,KAAK;IAElC,MAAM,MAAM,IAAI;IAEhB,MAAM,QAAQ,MAAM;AAEpB,QAAI,MAAM,MAAM,OAAO,SAAS,UAAU,MAAM,MAAM,IAAI;AACtD;AACA;;AAGJ;;AAGJ,WAAQ,KAAK,IAAI,EAAE;AAEnB,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IACvB,SAAQ,KAAK,MAAM,GAAI;AAG3B,QAAK;;AAGT,SAAO,IAAI,WAAW,QAAQ;;CAGlC,OAAuB,WAAmC;EAEtD,MAAM,UAAoB,EAAE;EAE5B,MAAM,aAAa,UAAU;EAE7B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,SAAS,UAAU;AAEzB,OAAI,WAAW,IAAM;AAErB,OAAI,KAAK,UAAU,UAAU,KAAM;IAE/B,MAAM,MAAM,IAAI,SAAS;AAEzB,SAAK,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;KAE9B,MAAM,OAAO,UAAU;AAEvB,SAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,aAAQ,KAAK,KAAK;;AAGtB,QAAI;AACJ;;AAGJ,OAAI,OAAQ,UAAU,UAAU,KAAM;IAElC,MAAM,QAAQ,MAAQ;IAEtB,MAAM,OAAO,UAAU,IAAI;AAE3B,QAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACvB,SAAQ,KAAK,KAAK;AAGtB,SAAK;AACL;;;AAIR,SAAO,IAAI,WAAW,QAAQ;;;;;;;;;;;;;;;;;;;;;;;AC5EtC,IAAM,SAAN,MAAa;CAET,cAAsB;;;;;CAMtB,OAAc,UAAU,aAAsC;AAE1D,UAAO,UAAP;GACI,KAAK,cACD,QAAO,IAAI,kBAAkB;GACjC,KAAK,UACD,QAAO,IAAI,eAAe;GAE9B,QACI,QAAO,IAAI,eAAe;;;;;;;CAQtC,OAAc,UAAU,aAAsC;AAE1D,UAAO,UAAP;GACI,KAAK,aACD,QAAO,IAAI,kBAAkB;GAEjC,QACI,QAAO,IAAI,eAAe;;;;;;CAOtC,OAAc,UAAU,aAAsC;AAE1D,UAAO,UAAP;GAEI,QACI,QAAO,IAAI,eAAe;;;;;;CAOtC,OAAc,aAAa,aAA2C;AAElE,UAAO,UAAP;GACI,KAAK,YACD,QAAO,IAAI,UAAU;GACzB,KAAK,MACD,QAAO,IAAI,KAAK;GAEpB,QACI,QAAO,IAAI,gBAAgB"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../src/base16/index.ts","../src/utils/char-codes.ts","../src/errors.ts","../src/base16/errors.ts","../src/base16/rfc4648/rfc4648.ts","../src/base16/ascii/ascii.ts","../src/base32/index.ts","../src/base32/errors.ts","../src/base32/rfc4648/rfc4648.ts","../src/base32/rfc4648/rfc4648hex.ts","../src/base64/index.ts","../src/base64/errors.ts","../src/base64/rfc2045/rfc2045.ts","../src/base64/rfc4648/rfc4648.ts","../src/base64/rfc4648/rfc4648url.ts","../src/run-length/index.ts","../src/run-length/basic/basic-run-length.ts","../src/run-length/errors.ts","../src/run-length/pack-bits/pack-bits.ts","../src/run-length/pdf/pdf.ts","../src/kasten.ts"],"sourcesContent":["export const Base16Categories = ['rfc4648', 'ascii'] as const;\n\nexport type Base16Category = typeof Base16Categories[number];\n\n/**\n * Base16 codec.\n */\nexport abstract class Base16 {\n\n /**\n * Encodes bytes to Base16 string.\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base16 string to bytes.\n * @param base16 Base16 string to be decoded.\n */\n public abstract decode(base16: string): Uint8Array;\n}","export class CharCodes {\n\n public static HT = 9;\n \n public static LF = 10;\n \n public static VT = 11;\n \n public static FF = 12;\n \n public static CR = 13;\n \n public static SP = 32;\n\n private constructor() {}\n\n public static isWhitespace = (c: string | number) => {\n\n const type = typeof c;\n\n if (type !== 'string' && type !== 'number')\n throw new Error('invalid argument type.');\n\n if (type === 'string' && (c as string).length !== 1)\n throw new Error('inalid argument: not a character');\n\n const code = typeof c === 'string'\n ? c.charCodeAt(0)\n : c as number;\n\n return (this.HT <= code && code <= this.CR) || code === this.SP;\n }\n}","export class KastenError extends Error {}","import { KastenError } from '@/errors';\n\nexport class KastenBase16Error extends KastenError {}\n\nexport class KastenBase16EncodeError extends KastenBase16Error {}\n\nexport class KastenBase16DecodeError extends KastenBase16Error {}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase16DecodeError } from '../errors';\n\n/**\n * RFC 4648 Base 16 encoding.\n */\nexport class RFC4648Base16 extends Base16 {\n\n private static readonly textDecoder = new TextDecoder();\n\n private static readonly TABLE = '0123456789ABCDEF';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base16.ENCODED_TABLE;\n\n const chars = new Uint8Array(bytes.length * 2);\n\n let charCount = 0;\n\n for (const byte of bytes) {\n \n const ci1 = (byte & 0xF0) >> 4;\n const ci2 = byte & 0x0F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n\n chars[charCount++] = c1;\n chars[charCount++] = c2;\n }\n\n return RFC4648Base16.textDecoder.decode(chars);\n }\n \n public override decode(base16: string): Uint8Array {\n\n const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;\n\n const upper = base16.toUpperCase();\n const chars = new Uint8Array(base16.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base16.length; i++) {\n const c = upper.charCodeAt(i);\n\n if (CharCodes.isWhitespace(c))\n continue;\n\n if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255)\n throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);\n\n chars[charCount++] = c;\n }\n\n if (charCount % 2 !== 0)\n throw new KastenBase16DecodeError('Invalid Base16');\n\n const bytes = new Uint8Array(Math.ceil(base16.length / 2));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 2) {\n \n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n\n const byte = ((ci1 & 0x0F) << 4) | (ci2 & 0x0F);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase16DecodeError } from '@/base16/errors';\n\n/**\n * AsciiHexDecode codec of PDF1.7\n */\nexport class AsciiHexDecode extends Base16 {\n \n public override encode(bytes: Uint8Array): string {\n\n if (bytes.length === 0) return '>';\n\n const chars: string[] = [];\n\n for (const byte of bytes) {\n const char = byte.toString(16).padStart(2, '0');\n chars.push(char);\n }\n\n chars.push('>');\n\n return chars.join('');\n }\n\n public override decode(base16: string): Uint8Array {\n\n const chars: string[] = [];\n\n for (const c of base16) {\n\n if (c === '>') break;\n \n if (CharCodes.isWhitespace(c)) continue;\n \n const code = c.charCodeAt(0);\n \n if (!(48 <= code && code <= 57) && !(65 <= code && code <= 70) && !(97<= code && code <= 102))\n throw new KastenBase16DecodeError(`invalid char: ${c}`);\n\n chars.push(c);\n }\n\n if (chars.length % 2 !== 0) chars.push('0');\n\n const strLength = chars.length;\n\n const bytes = new Uint8Array(Math.ceil(strLength / 2));\n\n let byteCount = 0;\n\n for (let i = 0, j = 0; i < strLength; i += 2, j++) {\n \n const hex = chars[i]! + chars[i + 1]!;\n\n const byte = Number.parseInt(hex, 16);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base32Category = typeof Base32Categories[number];\n\nexport const Base32Categories = ['rfc4648', 'rfc468-hex'] as const;\n\n/**\n * Base32 codec.\n */\nexport abstract class Base32 {\n\n protected static readonly textDecoder = new TextDecoder();\n\n /**\n * Encodes bytes to Base32 string\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base32 string to bytes.\n * @param base32 Base32 string to be decoded.\n */\n public abstract decode(base32: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\nexport class KastenBase32Error extends KastenError {}\n\nexport class KastenBase32EncodeError extends KastenBase32Error {}\n\nexport class KastenBase32DecodeError extends KastenBase32Error {}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32 extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;\n const PADDING = RFC4648Base32.PADDING_CHAR_CODE;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (!CharCodes.isWhitespace(c)) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32Hex extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = '0123456789ABCDEFGHIJKLMNOPQRSTUV';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32Hex.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32Hex.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;\n const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (!CharCodes.isWhitespace(c)) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base64Category = typeof Base64Categories[number];\n\nexport const Base64Categories = ['rfc4648', 'rfc4648-url', 'rfc2025'] as const;\n\n/**\n * Base64 codec.\n */\nexport abstract class Base64 {\n\n /**\n * Encodes byte array to string.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes string to byte array.\n * @param base64 Base64 string\n */\n public abstract decode(base64: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\n/**\n * Base error type of Base64.\n */\nexport class KastenBase64Error extends KastenError {}\n\n/**\n * Thrown when error occurs on Base64 encoding.\n */\nexport class KastenBase64EncodeError extends KastenBase64Error {};\n\n/**\n * Thrown when error occurs on Base64 decoding.\n */\nexport class KastenBase64DecodeError extends KastenBase64Error {};","import { Base64 } from '@/base64';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\n\nexport class RFC2045Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;\n const { CR, LF } = CharCodes;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n let charCout = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n\n charCout += 4;\n\n if (charCout === 76 && ci < chars.length) {\n charCout = 0;\n chars[ci++] = CR;\n chars[ci++] = LF;\n }\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC2045Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n }\n\n return RFC2045Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC2045Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC2045Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC2045Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC2045Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC2045Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC2045Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC2045Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { Base64 } from '@/base64';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { CharCodes } from '@/utils/char-codes';\n\nexport class RFC4648Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (!CharCodes.isWhitespace(c)) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { CharCodes } from '@/utils/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { Base64 } from '@/base64';\n\nexport class RFC4648Base64URL extends Base64 {\n \n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n \n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64URL.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64URL.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64URL.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64URL.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (!CharCodes.isWhitespace(c)) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64URL.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64URL.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64URL.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","export const RunLengthCatgories = ['basic', 'pack-bits', 'pdf'] as const;\n\nexport type RunLengthCatgory = typeof RunLengthCatgories[number];\n\n/**\n * Run-Length encoding and decoding.\n */\nexport abstract class RunLength {\n\n /**\n * Encodes bytes to Run-Length encoded bytes.\n * @param bytes \n */\n public abstract encode(bytes: Uint8Array): Uint8Array;\n\n /**\n * Decodes Run-Length encoded bytes to original bytes.\n * @param runLength \n */\n public abstract decode(runLength: Uint8Array): Uint8Array;\n}","import { RunLength } from '@/run-length';\n\n/**\n * Basic Run-Length codec.\n */\nexport class BasicRunLength extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n const encoded = new Uint8Array(bytes.length * 2);\n\n let byteCount = 0;\n\n let prev: number | null = null;\n\n let count = 0;\n\n for(let i = 0; i < bytes.length; i++) {\n\n const byte = bytes[i]!;\n\n if (prev === null) {\n prev = byte;\n count = 1;\n continue;\n }\n\n if (prev === byte) {\n\n if (count < 255) {\n count++;\n continue;\n }\n }\n\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n\n prev = byte;\n count = 1;\n }\n\n if (prev !== null) {\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n }\n\n return encoded.subarray(0, byteCount);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n for (let i = 0; i < runLength.length; i += 2) {\n\n const count = runLength[i]!;\n\n const byte = runLength[i + 1]!;\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte);\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { KastenError } from '@/errors';\n\nexport class KastenRunLengthError extends KastenError {}\n\nexport class KastenRunLengthEncodeError extends KastenRunLengthError {}\n\nexport class KastenRunLengthDecodeError extends KastenRunLengthError {}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '../errors';\n\n/**\n * PackBits codec.\n */\nexport class PackBits extends RunLength {\n\n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 3) {\n encoded.push(256 - (j - 1));\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '@/run-length/errors';\n\nexport class Pdf extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 2) {\n encoded.push(257 - j);\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n\n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n \n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import type { Base16, Base16Category } from '@/base16';\nimport type { Base32, Base32Category } from '@/base32';\nimport type { Base64, Base64Category } from '@/base64';\nimport type { RunLength, RunLengthCatgory } from '@/run-length';\nimport { RFC4648Base16 } from '@/base16/rfc4648/rfc4648';\nimport { AsciiHexDecode } from '@/base16/ascii/ascii';\nimport { RFC4648Base32 } from '@/base32/rfc4648/rfc4648';\nimport { RFC4648Base32Hex } from '@/base32/rfc4648/rfc4648hex';\nimport { RFC2045Base64 } from '@/base64/rfc2045/rfc2045';\nimport { RFC4648Base64 } from '@/base64/rfc4648/rfc4648';\nimport { RFC4648Base64URL } from '@/base64/rfc4648/rfc4648url';\nimport { BasicRunLength } from '@/run-length/basic/basic-run-length';\nimport { PackBits } from '@/run-length/pack-bits/pack-bits';\nimport { Pdf } from '@/run-length/pdf/pdf';\n\n/**\n * Entry point of the Kasten library.\n * All encoding/decoding feature implementations are created through this class.\n *\n * @example\n * const base64 = Kasten.base64('rfc4648');\n * const encoded = base64.encode(data);\n *\n * @example\n * const base32 = Kasten.base32('rfc464hex');\n * const decoded = base32.decode(text);\n *\n * @example\n * const base16 = Kasten.base16();\n *\n * @example\n * const runLength = Kasten.runLength('pack-bits');\n */\nclass Kasten {\n\n private constructor() {}\n\n /**\n * Creates Base 64 codec instance.\n * @param category Base 64 category.\n */\n public static base64 = (category?: Base64Category): Base64 => {\n\n switch(category) {\n case 'rfc4648-url':\n return new RFC4648Base64URL();\n case 'rfc2025':\n return new RFC2045Base64();\n case 'rfc4648':\n default:\n return new RFC4648Base64();\n }\n }\n\n /**\n * Creates Base 32 codec instance.\n * @param category Base 32 category.\n */\n public static base32 = (category?: Base32Category): Base32 => {\n\n switch(category) {\n case 'rfc468-hex':\n return new RFC4648Base32Hex();\n case 'rfc4648':\n default:\n return new RFC4648Base32();\n }\n }\n\n /**\n * Create Base 16 codec instance.\n */\n public static base16 = (category?: Base16Category): Base16 => {\n\n switch(category) {\n case 'ascii':\n return new AsciiHexDecode();\n case 'rfc4648':\n default:\n return new RFC4648Base16();\n }\n }\n\n /**\n * Creates Run-Length codec instance.\n */\n public static runLength = (category?: RunLengthCatgory): RunLength => {\n\n switch(category) {\n case 'pack-bits':\n return new PackBits();\n case 'pdf':\n return new Pdf();\n case 'basic':\n default:\n return new BasicRunLength();\n }\n }\n}\n\nexport {\n Kasten,\n type Base64,\n type Base64Category as Base64Catgory,\n type Base32,\n type Base32Category,\n type Base16,\n type Base16Category,\n type RunLength,\n type RunLengthCatgory\n}"],"mappings":";;;;;AAOA,IAAsB,SAAtB,MAA6B;;;ACP7B,IAAa,YAAb,MAAuB;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,cAAsB;CAEtB,OAAc,gBAAgB,MAAuB;EAEjD,MAAM,OAAO,OAAO;AAEpB,MAAI,SAAS,YAAY,SAAS,SAC9B,OAAM,IAAI,MAAM,yBAAyB;AAE7C,MAAI,SAAS,YAAa,EAAa,WAAW,EAC9C,OAAM,IAAI,MAAM,mCAAmC;EAEvD,MAAM,OAAO,OAAO,MAAM,WACpB,EAAE,WAAW,EAAE,GACf;AAEN,SAAQ,KAAK,MAAM,QAAQ,QAAQ,KAAK,MAAO,SAAS,KAAK;;;;;AC9BrE,IAAa,cAAb,cAAiC,MAAM;;;ACEvC,IAAa,oBAAb,cAAuC,YAAY;AAEnD,IAAa,0BAAb,cAA6C,kBAAkB;AAE/D,IAAa,0BAAb,cAA6C,kBAAkB;;;;;;ACC/D,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,cAAc,IAAI,aAAa;CAEvD,OAAwB,QAAQ;CAEhC,OAAwB,gBAAgB,IAAI,WACxC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,gBAAgB,IAAI,WAAW,IAAI;CAE3D;AACI,OAAK,cAAc,KAAK,IAAI;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,cAAc,KAAK,MAAM,WAAW,EAAE,IAAI;;CAIvD,OAAuB,OAA2B;EAE9C,MAAM,gBAAgB,cAAc;EAEpC,MAAM,QAAQ,IAAI,WAAW,MAAM,SAAS,EAAE;EAE9C,IAAI,YAAY;AAEhB,OAAK,MAAM,QAAQ,OAAO;GAEtB,MAAM,OAAO,OAAO,QAAS;GAC7B,MAAM,MAAM,OAAO;GAEnB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;AAEzB,SAAM,eAAe;AACrB,SAAM,eAAe;;AAGzB,SAAO,cAAc,YAAY,OAAO,MAAM;;CAGlD,OAAuB,QAA4B;EAE/C,MAAM,gBAAgB,cAAc;EAEpC,MAAM,QAAQ,OAAO,aAAa;EAClC,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;EAE3C,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,MAAM,WAAW,EAAE;AAE7B,OAAI,UAAU,aAAa,EAAE,CACzB;AAEJ,OAAI,CAAC,cAAc,MAAM,cAAc,MAAM,IACzC,OAAM,IAAI,wBAAwB,6BAA6B,OAAO,OAAO,EAAE,GAAG;AAEtF,SAAM,eAAe;;AAGzB,MAAI,YAAY,MAAM,EAClB,OAAM,IAAI,wBAAwB,iBAAiB;EAEvD,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,OAAO,SAAS,EAAE,CAAC;EAE1D,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GAEnC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI;GAErB,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,cAAc;GAE1B,MAAM,QAAS,MAAM,OAAS,IAAM,MAAM;AAE1C,SAAM,eAAe;;AAGzB,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;;;;ACpF3C,IAAa,iBAAb,cAAoC,OAAO;CAEvC,OAAuB,OAA2B;AAE9C,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,QAAkB,EAAE;AAE1B,OAAK,MAAM,QAAQ,OAAO;GACtB,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI;AAC/C,SAAM,KAAK,KAAK;;AAGpB,QAAM,KAAK,IAAI;AAEf,SAAO,MAAM,KAAK,GAAG;;CAGzB,OAAuB,QAA4B;EAE/C,MAAM,QAAkB,EAAE;AAE1B,OAAK,MAAM,KAAK,QAAQ;AAEpB,OAAI,MAAM,IAAK;AAEf,OAAI,UAAU,aAAa,EAAE,CAAE;GAE/B,MAAM,OAAO,EAAE,WAAW,EAAE;AAE5B,OAAI,EAAE,MAAM,QAAQ,QAAQ,OAAO,EAAE,MAAM,QAAQ,QAAQ,OAAO,EAAE,MAAK,QAAQ,QAAQ,KACrF,OAAM,IAAI,wBAAwB,iBAAiB,IAAI;AAE3D,SAAM,KAAK,EAAE;;AAGjB,MAAI,MAAM,SAAS,MAAM,EAAG,OAAM,KAAK,IAAI;EAE3C,MAAM,YAAY,MAAM;EAExB,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,YAAY,EAAE,CAAC;EAEtD,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG,KAAK;GAE/C,MAAM,MAAM,MAAM,KAAM,MAAM,IAAI;GAElC,MAAM,OAAO,OAAO,SAAS,KAAK,GAAG;AAErC,SAAM,eAAe;;AAGzB,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;;;;ACrD3C,IAAsB,SAAtB,MAA6B;CAEzB,OAA0B,cAAc,IAAI,aAAa;;;;ACP7D,IAAa,oBAAb,cAAuC,YAAY;AAEnD,IAAa,0BAAb,cAA6C,kBAAkB;AAE/D,IAAa,0BAAb,cAA6C,kBAAkB;;;ACF/D,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,oBAA4B,IAAI,WAAW,EAAE;CAErE,OAAwB,QAClB;CAEN,OAAwB,gBAAgB,IAAI,WACxC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,gBAAgB,IAAI,WAAW,IAAI;CAE3D;AACI,OAAK,cAAc,KAAK,IAAI;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,cAAc,KAAK,MAAM,WAAW,EAAE,IAAI;;CAIvD,OAAuB,OAA2B;EAE9C,MAAM,gBAAgB,cAAc;EAEpC,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG,EAAE;EAE7D,IAAI,QAAQ;AAEZ,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,OAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAQ,KAAK,OAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,MAAM,KAAK;GAEjB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;AAEzB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;;EAGrB,MAAM,SAAS,MAAM,SAAS;EAE9B,MAAM,UACF,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IAAI;AAEvB,OAAK,IAAI,IAAI,SAAS,IAAI,GAAG,IACzB,OAAM,QAAQ,KAAK,cAAc;AAGrC,SAAO,OAAO,YAAY,OAAO,MAAM,SAAS,GAAG,MAAM,CAAC;;CAG9D,OAAuB,QAA4B;EAE/C,MAAM,QAAQ,OAAO,aAAa;EAElC,MAAM,gBAAgB,cAAc;EACpC,MAAM,UAAU,cAAc;EAE9B,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;EAE3C,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GAEpC,MAAM,IAAI,MAAM,WAAW,EAAE;AAE7B,OAAI,CAAC,UAAU,aAAa,EAAE,CAE1B,OAAM,eAAe;;AAI7B,MAAI,YAAY,MAAM,EAClB,OAAM,IAAI,wBAAwB,yBAAyB;EAE/D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,IAC3B,KAAI,MAAM,OAAO,SAAS;AACtB,cAAW;AACX;;EAIR,IAAI,WAAW;AAEf,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,YAAY,EACvB,OAAM,IAAI,wBAAwB,4BAA4B;AAElE,QAAK,IAAI,IAAI,UAAU,IAAI,WAAW,IAClC,KAAI,MAAM,OAAO,QACb,OAAM,IAAI,wBAAwB,kBAAkB;AAI5D,cAAW,YAAY;AAEvB,OAAI,aAAa,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa,EACnE,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,QAAQ,IAAI,WAAW,KAAK,OAAQ,YAAY,YAAY,IAAK,EAAE,CAAC;EAE1E,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GAEnC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GAErB,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;AAElD,OAAI,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,IAER,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,MAAS,IAAM,MAAM;AAExC,SAAM,eAAe;AAErB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,OAAO,QACnC,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,MAAM,QAClC,OAAM,eAAe;;AAG7B,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;AC9L3C,IAAa,mBAAb,MAAa,yBAAyB,OAAO;CAEzC,OAAwB,oBAA4B,IAAI,WAAW,EAAE;CAErE,OAAwB,QAClB;CAEN,OAAwB,gBAAgB,IAAI,WACxC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,gBAAgB,IAAI,WAAW,IAAI;CAE3D;AACI,OAAK,cAAc,KAAK,IAAI;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,cAAc,KAAK,MAAM,WAAW,EAAE,IAAI;;CAIvD,OAAuB,OAA2B;EAE9C,MAAM,gBAAgB,iBAAiB;EAEvC,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG,EAAE;EAE7D,IAAI,QAAQ;AAEZ,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,OAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAQ,KAAK,OAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,MAAM,KAAK;GAEjB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;AAEzB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;;EAGrB,MAAM,SAAS,MAAM,SAAS;EAE9B,MAAM,UACF,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IAAI;AAEvB,OAAK,IAAI,IAAI,SAAS,IAAI,GAAG,IACzB,OAAM,QAAQ,KAAK,iBAAiB;AAGxC,SAAO,OAAO,YAAY,OAAO,MAAM,SAAS,GAAG,MAAM,CAAC;;CAG9D,OAAuB,QAA4B;EAE/C,MAAM,QAAQ,OAAO,aAAa;EAElC,MAAM,gBAAgB,iBAAiB;EACvC,MAAM,UAAU,iBAAiB;EAEjC,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;EAE3C,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GAEpC,MAAM,IAAI,MAAM,WAAW,EAAE;AAE7B,OAAI,CAAC,UAAU,aAAa,EAAE,CAE1B,OAAM,eAAe;;AAI7B,MAAI,YAAY,MAAM,EAClB,OAAM,IAAI,wBAAwB,yBAAyB;EAE/D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,IAC3B,KAAI,MAAM,OAAO,SAAS;AACtB,cAAW;AACX;;EAIR,IAAI,WAAW;AAEf,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,YAAY,EACvB,OAAM,IAAI,wBAAwB,4BAA4B;AAElE,QAAK,IAAI,IAAI,UAAU,IAAI,WAAW,IAClC,KAAI,MAAM,OAAO,QACb,OAAM,IAAI,wBAAwB,kBAAkB;AAI5D,cAAW,YAAY;AAEvB,OAAI,aAAa,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa,EACnE,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,QAAQ,IAAI,WAAW,KAAK,OAAQ,YAAY,YAAY,IAAK,EAAE,CAAC;EAE1E,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GAEnC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GAErB,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;AAElD,OAAI,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,IAER,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,MAAS,IAAM,MAAM;AAExC,SAAM,eAAe;AAErB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,OAAO,QACnC,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,MAAM,QAClC,OAAM,eAAe;;AAG7B,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;;;;AC3L3C,IAAsB,SAAtB,MAA6B;;;;;;ACF7B,IAAa,oBAAb,cAAuC,YAAY;;;;AAKnD,IAAa,0BAAb,cAA6C,kBAAkB;;;;AAK/D,IAAa,0BAAb,cAA6C,kBAAkB;;;ACX/D,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,oBAAoB,IAAI,WAAW,EAAE;CAE7D,OAAwB,QAClB;CAEN,OAAwB,eAAe,IAAI,WAAW,IAAI;CAE1D,OAAwB,eAAe,IAAI,WACvC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,UAAU,IAAI,aAAa;CAEnD;AAEI,OAAK,aAAa,KAAK,IAAI;AAE3B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,aAAa,KAAK,MAAM,WAAW,EAAE,IAAI;;CAItD,UAA0B,UAA8B;AAEpD,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,eAAe,cAAc;EACnC,MAAM,EAAE,IAAI,OAAO;EAEnB,MAAM,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG;EAC/C,MAAM,aAAa,KAAK,OAAO,WAAW,KAAK,GAAG;EAElD,MAAM,QAAQ,IAAI,WAAW,WAAW,aAAa,EAAE;EAEvD,IAAI,KAAK;EAET,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,KAAK,MAAM;GACjB,MAAM,MAAO,KAAK,MAAe,IAAK,MAAM;GAC5C,MAAM,MAAO,KAAK,OAAe,IAAK,MAAM;GAC5C,MAAM,KAAK,KAAK;AAEhB,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAE3B,eAAY;AAEZ,OAAI,aAAa,MAAM,KAAK,MAAM,QAAQ;AACtC,eAAW;AACX,UAAM,QAAQ;AACd,UAAM,QAAQ;;;EAItB,MAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,WAAW,GAAG;AACd,SAAM,KAAK,KAAK,cAAc;AAC9B,SAAM,KAAK,KAAK,cAAc;aACvB,WAAW,EAClB,OAAM,KAAK,KAAK,cAAc;AAGlC,SAAO,cAAc,QAAQ,OAAO,MAAM,SAAS,GAAG,GAAG,CAAC;;CAG9D,UAA0B,WAA+B;EAErD,MAAM,eAAe,cAAc;EAEnC,MAAM,OAAO,IAAI,WAAW,OAAO,OAAO;EAC1C,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,OAAO,WAAW,EAAE;AAC9B,OAAI,MAAM,UAAU,MACb,MAAM,UAAU,MAChB,MAAM,UAAU,MAChB,MAAM,UAAU,GAEnB,MAAK,mBAAmB;;AAIhC,MAAI,gBAAgB,MAAM,EACtB,OAAM,IAAI,wBAAwB,wBAAwB;EAE9D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,IAC/B,KAAI,KAAK,OAAO,cAAc,mBAAmB;AAC7C,cAAW;AACX;;AAIR,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,gBAAgB,EAC3B,OAAM,IAAI,wBAAwB,2BAA2B;AAGjE,QAAK,IAAI,IAAI,UAAU,IAAI,eAAe,IACtC,KAAI,KAAK,OAAO,cAAc,kBAC1B,OAAM,IAAI,wBAAwB,kBAAkB;GAI5D,MAAM,WAAW,gBAAgB;AAEjC,OAAI,aAAa,KAAK,aAAa,EAC/B,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,aAAa;EAEnB,MAAM,UACF,KAAK,aAAa,OAAO,cAAc,oBACpC,KAAK,aAAa,OAAO,cAAc,oBAAoB,IAAI,IAChE;EAEN,MAAM,QAAQ,IAAI,WAAY,gBAAgB,IAAK,IAAI,QAAQ;EAE/D,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK,GAAG;GAEvC,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GAEvB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;GAC/E,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;AAE/E,OAAI,QAAQ,OACR,QAAQ,OACP,UAAU,cAAc,qBAAqB,QAAQ,OACrD,UAAU,cAAc,qBAAqB,QAAQ,IAEtD,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,KAAM,OAAO,IAAM,OAAO;GAChC,MAAM,MAAO,MAAM,OAAO,IAAM,OAAO;GACvC,MAAM,MAAO,MAAM,MAAM,IAAK;AAE9B,SAAM,mBAAmB;AAEzB,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;AAG7B,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;;AAIjC,SAAO;;;;;AC5Kf,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,oBAAoB,IAAI,WAAW,EAAE;CAE7D,OAAwB,QAClB;CAEN,OAAwB,eAAe,IAAI,WAAW,IAAI;CAE1D,OAAwB,eAAe,IAAI,WACvC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,UAAU,IAAI,aAAa;CAEnD;AAEI,OAAK,aAAa,KAAK,IAAI;AAE3B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,aAAa,KAAK,MAAM,WAAW,EAAE,IAAI;;CAItD,UAA0B,UAA8B;AAEpD,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,eAAe,cAAc;EAEnC,MAAM,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG;EAC/C,MAAM,aAAa,KAAK,OAAO,WAAW,KAAK,GAAG;EAElD,MAAM,QAAQ,IAAI,WAAW,WAAW,aAAa,EAAE;EAEvD,IAAI,KAAK;AAET,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,KAAK,MAAM;GACjB,MAAM,MAAO,KAAK,MAAe,IAAK,MAAM;GAC5C,MAAM,MAAO,KAAK,OAAe,IAAK,MAAM;GAC5C,MAAM,KAAK,KAAK;AAEhB,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;;EAG/B,MAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,WAAW,GAAG;AACd,SAAM,KAAK,KAAK,cAAc;AAC9B,SAAM,KAAK,KAAK,cAAc;aACvB,WAAW,EAClB,OAAM,KAAK,KAAK,cAAc;AAGlC,SAAO,cAAc,QAAQ,OAAO,MAAM,SAAS,GAAG,GAAG,CAAC;;CAG9D,UAA0B,WAA+B;EAErD,MAAM,eAAe,cAAc;EAEnC,MAAM,OAAO,IAAI,WAAW,OAAO,OAAO;EAC1C,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,OAAO,WAAW,EAAE;AAC9B,OAAI,CAAC,UAAU,aAAa,EAAE,CAE1B,MAAK,mBAAmB;;AAIhC,MAAI,gBAAgB,MAAM,EACtB,OAAM,IAAI,wBAAwB,wBAAwB;EAE9D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,IAC/B,KAAI,KAAK,OAAO,cAAc,mBAAmB;AAC7C,cAAW;AACX;;AAIR,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,gBAAgB,EAC3B,OAAM,IAAI,wBAAwB,2BAA2B;AAGjE,QAAK,IAAI,IAAI,UAAU,IAAI,eAAe,IACtC,KAAI,KAAK,OAAO,cAAc,kBAC1B,OAAM,IAAI,wBAAwB,kBAAkB;GAI5D,MAAM,WAAW,gBAAgB;AAEjC,OAAI,aAAa,KAAK,aAAa,EAC/B,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,aAAa;EAEnB,MAAM,UACF,KAAK,aAAa,OAAO,cAAc,oBACpC,KAAK,aAAa,OAAO,cAAc,oBAAoB,IAAI,IAChE;EAEN,MAAM,QAAQ,IAAI,WAAY,gBAAgB,IAAK,IAAI,QAAQ;EAE/D,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK,GAAG;GAEvC,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GAEvB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;GAC/E,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;AAE/E,OAAI,QAAQ,OACR,QAAQ,OACP,UAAU,cAAc,qBAAqB,QAAQ,OACrD,UAAU,cAAc,qBAAqB,QAAQ,IAEtD,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,KAAM,OAAO,IAAM,OAAO;GAChC,MAAM,MAAO,MAAM,OAAO,IAAM,OAAO;GACvC,MAAM,MAAO,MAAM,MAAM,IAAK;AAE9B,SAAM,mBAAmB;AAEzB,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;AAG7B,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;;AAIjC,SAAO;;;;;AC9Jf,IAAa,mBAAb,MAAa,yBAAyB,OAAO;CAEzC,OAAwB,oBAAoB,IAAI,WAAW,EAAE;CAE7D,OAAwB,QAClB;CAEN,OAAwB,eAAe,IAAI,WAAW,IAAI;CAE1D,OAAwB,eAAe,IAAI,WACvC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,UAAU,IAAI,aAAa;CAEnD;AAEI,OAAK,aAAa,KAAK,IAAI;AAE3B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,aAAa,KAAK,MAAM,WAAW,EAAE,IAAI;;CAItD,UAA0B,UAA8B;AAEpD,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,eAAe,iBAAiB;EAEtC,MAAM,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG;EAC/C,MAAM,aAAa,KAAK,OAAO,WAAW,KAAK,GAAG;EAElD,MAAM,QAAQ,IAAI,WAAW,WAAW,aAAa,EAAE;EAEvD,IAAI,KAAK;AAET,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,KAAK,MAAM;GACjB,MAAM,MAAO,KAAK,MAAe,IAAK,MAAM;GAC5C,MAAM,MAAO,KAAK,OAAe,IAAK,MAAM;GAC5C,MAAM,KAAK,KAAK;AAEhB,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;;EAG/B,MAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,WAAW,GAAG;AACd,SAAM,KAAK,KAAK,iBAAiB;AACjC,SAAM,KAAK,KAAK,iBAAiB;aAC1B,WAAW,EAClB,OAAM,KAAK,KAAK,iBAAiB;AAGrC,SAAO,iBAAiB,QAAQ,OAAO,MAAM,SAAS,GAAG,GAAG,CAAC;;CAGjE,UAA0B,WAA+B;EAErD,MAAM,eAAe,iBAAiB;EAEtC,MAAM,OAAO,IAAI,WAAW,OAAO,OAAO;EAC1C,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,OAAO,WAAW,EAAE;AAC9B,OAAI,CAAC,UAAU,aAAa,EAAE,CAE1B,MAAK,mBAAmB;;AAIhC,MAAI,gBAAgB,MAAM,EACtB,OAAM,IAAI,wBAAwB,wBAAwB;EAE9D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,IAC/B,KAAI,KAAK,OAAO,iBAAiB,mBAAmB;AAChD,cAAW;AACX;;AAIR,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,gBAAgB,EAC3B,OAAM,IAAI,wBAAwB,2BAA2B;AAGjE,QAAK,IAAI,IAAI,UAAU,IAAI,eAAe,IACtC,KAAI,KAAK,OAAO,iBAAiB,kBAC7B,OAAM,IAAI,wBAAwB,kBAAkB;GAI5D,MAAM,WAAW,gBAAgB;AAEjC,OAAI,aAAa,KAAK,aAAa,EAC/B,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,aAAa;EAEnB,MAAM,UACF,KAAK,aAAa,OAAO,iBAAiB,oBACvC,KAAK,aAAa,OAAO,iBAAiB,oBAAoB,IAAI,IACnE;EAEN,MAAM,QAAQ,IAAI,WAAY,gBAAgB,IAAK,IAAI,QAAQ;EAE/D,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK,GAAG;GAEvC,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GAEvB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,UAAU,iBAAiB,oBAAoB,aAAa,SAAU;GAClF,MAAM,MAAM,UAAU,iBAAiB,oBAAoB,aAAa,SAAU;AAElF,OAAI,QAAQ,OACR,QAAQ,OACP,UAAU,iBAAiB,qBAAqB,QAAQ,OACxD,UAAU,iBAAiB,qBAAqB,QAAQ,IAEzD,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,KAAM,OAAO,IAAM,OAAO;GAChC,MAAM,MAAO,MAAM,OAAO,IAAM,OAAO;GACvC,MAAM,MAAO,MAAM,MAAM,IAAK;AAE9B,SAAM,mBAAmB;AAEzB,OAAI,UAAU,iBAAiB,kBAC3B,OAAM,mBAAmB;AAG7B,OAAI,UAAU,iBAAiB,kBAC3B,OAAM,mBAAmB;;AAIjC,SAAO;;;;;;;;AC3Jf,IAAsB,YAAtB,MAAgC;;;;;;ACFhC,IAAa,iBAAb,cAAoC,UAAU;CAE1C,OAAuB,OAA+B;EAElD,MAAM,UAAU,IAAI,WAAW,MAAM,SAAS,EAAE;EAEhD,IAAI,YAAY;EAEhB,IAAI,OAAsB;EAE1B,IAAI,QAAQ;AAEZ,OAAI,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GAElC,MAAM,OAAO,MAAM;AAEnB,OAAI,SAAS,MAAM;AACf,WAAO;AACP,YAAQ;AACR;;AAGJ,OAAI,SAAS;QAEL,QAAQ,KAAK;AACb;AACA;;;AAIR,WAAQ,eAAe;AACvB,WAAQ,eAAe;AAEvB,UAAO;AACP,WAAQ;;AAGZ,MAAI,SAAS,MAAM;AACf,WAAQ,eAAe;AACvB,WAAQ,eAAe;;AAG3B,SAAO,QAAQ,SAAS,GAAG,UAAU;;CAGzC,OAAuB,WAAmC;EAEtD,MAAM,UAAoB,EAAE;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;GAE1C,MAAM,QAAQ,UAAU;GAExB,MAAM,OAAO,UAAU,IAAI;AAE3B,QAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACvB,SAAQ,KAAK,KAAK;;AAI1B,SAAO,IAAI,WAAW,QAAQ;;;;;AC/DtC,IAAa,uBAAb,cAA0C,YAAY;AAEtD,IAAa,6BAAb,cAAgD,qBAAqB;AAErE,IAAa,6BAAb,cAAgD,qBAAqB;;;;;;ACArE,IAAa,WAAb,cAA8B,UAAU;CAEpC,OAAuB,OAA+B;AAElD,MAAI,MAAM,WAAW,EAAG,QAAO,IAAI,WAAW,EAAE,CAAC;EAEjD,MAAM,aAAa,MAAM;EAEzB,MAAM,UAAoB,EAAE;EAE5B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,OAAO,MAAM;GAEnB,IAAI,IAAI;AAER,UAAO,IAAI,IAAI,cAAc,SAAS,MAAM,IAAI,MAAM,IAAI,IACtD;AAGJ,OAAI,KAAK,GAAG;AACR,YAAQ,KAAK,OAAO,IAAI,GAAG;AAC3B,YAAQ,KAAK,KAAK;AAClB,SAAK;AACL;;AAGJ,UAAO,IAAI,IAAI,cAAc,IAAI,KAAK;IAElC,MAAM,MAAM,IAAI;IAEhB,MAAM,QAAQ,MAAM;AAEpB,QAAI,MAAM,MAAM,OAAO,SAAS,UAAU,MAAM,MAAM,IAAI;AACtD;AACA;;AAGJ;;AAGJ,WAAQ,KAAK,IAAI,EAAE;AAEnB,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IACvB,SAAQ,KAAK,MAAM,GAAI;AAG3B,QAAK;;AAGT,SAAO,IAAI,WAAW,QAAQ;;CAGlC,OAAuB,WAAmC;EAEtD,MAAM,UAAoB,EAAE;EAE5B,MAAM,aAAa,UAAU;EAE7B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,SAAS,UAAU;AAEzB,OAAI,WAAW,IAAM;AAErB,OAAI,KAAK,UAAU,UAAU,KAAM;IAE/B,MAAM,MAAM,IAAI,SAAS;AAEzB,SAAK,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;KAE9B,MAAM,OAAO,UAAU;AAEvB,SAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,aAAQ,KAAK,KAAK;;AAGtB,QAAI;AACJ;;AAGJ,OAAI,OAAQ,UAAU,UAAU,KAAM;IAElC,MAAM,QAAQ,MAAQ;IAEtB,MAAM,OAAO,UAAU,IAAI;AAE3B,QAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACvB,SAAQ,KAAK,KAAK;AAGtB,SAAK;AACL;;;AAIR,SAAO,IAAI,WAAW,QAAQ;;;;;AC5GtC,IAAa,MAAb,cAAyB,UAAU;CAE/B,OAAuB,OAA+B;AAElD,MAAI,MAAM,WAAW,EAAG,QAAO,IAAI,WAAW,EAAE,CAAC;EAEjD,MAAM,aAAa,MAAM;EAEzB,MAAM,UAAoB,EAAE;EAE5B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,OAAO,MAAM;GAEnB,IAAI,IAAI;AAER,UAAO,IAAI,IAAI,cAAc,SAAS,MAAM,IAAI,MAAM,IAAI,IACtD;AAGJ,OAAI,KAAK,GAAG;AACR,YAAQ,KAAK,MAAM,EAAE;AACrB,YAAQ,KAAK,KAAK;AAClB,SAAK;AACL;;AAGJ,UAAO,IAAI,IAAI,cAAc,IAAI,KAAK;IAElC,MAAM,MAAM,IAAI;IAEhB,MAAM,QAAQ,MAAM;AAEpB,QAAI,MAAM,MAAM,OAAO,SAAS,UAAU,MAAM,MAAM,IAAI;AACtD;AACA;;AAGJ;;AAGJ,WAAQ,KAAK,IAAI,EAAE;AAEnB,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IACvB,SAAQ,KAAK,MAAM,GAAI;AAG3B,QAAK;;AAGT,SAAO,IAAI,WAAW,QAAQ;;CAGlC,OAAuB,WAAmC;EAEtD,MAAM,UAAoB,EAAE;EAE5B,MAAM,aAAa,UAAU;EAE7B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,SAAS,UAAU;AAEzB,OAAI,WAAW,IAAM;AAErB,OAAI,KAAK,UAAU,UAAU,KAAM;IAE/B,MAAM,MAAM,IAAI,SAAS;AAEzB,SAAK,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;KAE9B,MAAM,OAAO,UAAU;AAEvB,SAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,aAAQ,KAAK,KAAK;;AAGtB,QAAI;AACJ;;AAGJ,OAAI,OAAQ,UAAU,UAAU,KAAM;IAElC,MAAM,QAAQ,MAAQ;IAEtB,MAAM,OAAO,UAAU,IAAI;AAE3B,QAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACvB,SAAQ,KAAK,KAAK;AAGtB,SAAK;AACL;;;AAIR,SAAO,IAAI,WAAW,QAAQ;;;;;;;;;;;;;;;;;;;;;;;AC3EtC,IAAM,SAAN,MAAa;CAET,cAAsB;;;;;CAMtB,OAAc,UAAU,aAAsC;AAE1D,UAAO,UAAP;GACI,KAAK,cACD,QAAO,IAAI,kBAAkB;GACjC,KAAK,UACD,QAAO,IAAI,eAAe;GAE9B,QACI,QAAO,IAAI,eAAe;;;;;;;CAQtC,OAAc,UAAU,aAAsC;AAE1D,UAAO,UAAP;GACI,KAAK,aACD,QAAO,IAAI,kBAAkB;GAEjC,QACI,QAAO,IAAI,eAAe;;;;;;CAOtC,OAAc,UAAU,aAAsC;AAE1D,UAAO,UAAP;GACI,KAAK,QACD,QAAO,IAAI,gBAAgB;GAE/B,QACI,QAAO,IAAI,eAAe;;;;;;CAOtC,OAAc,aAAa,aAA2C;AAElE,UAAO,UAAP;GACI,KAAK,YACD,QAAO,IAAI,UAAU;GACzB,KAAK,MACD,QAAO,IAAI,KAAK;GAEpB,QACI,QAAO,IAAI,gBAAgB"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -4,13 +4,22 @@
|
|
|
4
4
|
*/
|
|
5
5
|
var Base16 = class {};
|
|
6
6
|
//#endregion
|
|
7
|
-
//#region src/char-codes.ts
|
|
7
|
+
//#region src/utils/char-codes.ts
|
|
8
8
|
var CharCodes = class {
|
|
9
|
-
static
|
|
9
|
+
static HT = 9;
|
|
10
10
|
static LF = 10;
|
|
11
|
+
static VT = 11;
|
|
12
|
+
static FF = 12;
|
|
13
|
+
static CR = 13;
|
|
11
14
|
static SP = 32;
|
|
12
|
-
static HT = 9;
|
|
13
15
|
constructor() {}
|
|
16
|
+
static isWhitespace = (c) => {
|
|
17
|
+
const type = typeof c;
|
|
18
|
+
if (type !== "string" && type !== "number") throw new Error("invalid argument type.");
|
|
19
|
+
if (type === "string" && c.length !== 1) throw new Error("inalid argument: not a character");
|
|
20
|
+
const code = typeof c === "string" ? c.charCodeAt(0) : c;
|
|
21
|
+
return this.HT <= code && code <= this.CR || code === this.SP;
|
|
22
|
+
};
|
|
14
23
|
};
|
|
15
24
|
//#endregion
|
|
16
25
|
//#region src/errors.ts
|
|
@@ -50,13 +59,12 @@ var RFC4648Base16 = class RFC4648Base16 extends Base16 {
|
|
|
50
59
|
}
|
|
51
60
|
decode(base16) {
|
|
52
61
|
const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;
|
|
53
|
-
const { CR, LF, SP, HT } = CharCodes;
|
|
54
62
|
const upper = base16.toUpperCase();
|
|
55
63
|
const chars = new Uint8Array(base16.length);
|
|
56
64
|
let charCount = 0;
|
|
57
65
|
for (let i = 0; i < base16.length; i++) {
|
|
58
66
|
const c = upper.charCodeAt(i);
|
|
59
|
-
if (c
|
|
67
|
+
if (CharCodes.isWhitespace(c)) continue;
|
|
60
68
|
if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255) throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);
|
|
61
69
|
chars[charCount++] = c;
|
|
62
70
|
}
|
|
@@ -75,6 +83,43 @@ var RFC4648Base16 = class RFC4648Base16 extends Base16 {
|
|
|
75
83
|
}
|
|
76
84
|
};
|
|
77
85
|
//#endregion
|
|
86
|
+
//#region src/base16/ascii/ascii.ts
|
|
87
|
+
/**
|
|
88
|
+
* AsciiHexDecode codec of PDF1.7
|
|
89
|
+
*/
|
|
90
|
+
var AsciiHexDecode = class extends Base16 {
|
|
91
|
+
encode(bytes) {
|
|
92
|
+
if (bytes.length === 0) return ">";
|
|
93
|
+
const chars = [];
|
|
94
|
+
for (const byte of bytes) {
|
|
95
|
+
const char = byte.toString(16).padStart(2, "0");
|
|
96
|
+
chars.push(char);
|
|
97
|
+
}
|
|
98
|
+
chars.push(">");
|
|
99
|
+
return chars.join("");
|
|
100
|
+
}
|
|
101
|
+
decode(base16) {
|
|
102
|
+
const chars = [];
|
|
103
|
+
for (const c of base16) {
|
|
104
|
+
if (c === ">") break;
|
|
105
|
+
if (CharCodes.isWhitespace(c)) continue;
|
|
106
|
+
const code = c.charCodeAt(0);
|
|
107
|
+
if (!(48 <= code && code <= 57) && !(65 <= code && code <= 70) && !(97 <= code && code <= 102)) throw new KastenBase16DecodeError(`invalid char: ${c}`);
|
|
108
|
+
chars.push(c);
|
|
109
|
+
}
|
|
110
|
+
if (chars.length % 2 !== 0) chars.push("0");
|
|
111
|
+
const strLength = chars.length;
|
|
112
|
+
const bytes = new Uint8Array(Math.ceil(strLength / 2));
|
|
113
|
+
let byteCount = 0;
|
|
114
|
+
for (let i = 0, j = 0; i < strLength; i += 2, j++) {
|
|
115
|
+
const hex = chars[i] + chars[i + 1];
|
|
116
|
+
const byte = Number.parseInt(hex, 16);
|
|
117
|
+
bytes[byteCount++] = byte;
|
|
118
|
+
}
|
|
119
|
+
return bytes.subarray(0, byteCount);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
//#endregion
|
|
78
123
|
//#region src/base32/index.ts
|
|
79
124
|
/**
|
|
80
125
|
* Base32 codec.
|
|
@@ -142,12 +187,11 @@ var RFC4648Base32 = class RFC4648Base32 extends Base32 {
|
|
|
142
187
|
const upper = base32.toUpperCase();
|
|
143
188
|
const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;
|
|
144
189
|
const PADDING = RFC4648Base32.PADDING_CHAR_CODE;
|
|
145
|
-
const { CR, LF, SP, HT } = CharCodes;
|
|
146
190
|
const chars = new Uint8Array(base32.length);
|
|
147
191
|
let charCount = 0;
|
|
148
192
|
for (let i = 0; i < base32.length; i++) {
|
|
149
193
|
const c = upper.charCodeAt(i);
|
|
150
|
-
if (c
|
|
194
|
+
if (!CharCodes.isWhitespace(c)) chars[charCount++] = c;
|
|
151
195
|
}
|
|
152
196
|
if (charCount % 8 !== 0) throw new KastenBase32DecodeError("Invalid length string.");
|
|
153
197
|
let firstPad = -1;
|
|
@@ -251,12 +295,11 @@ var RFC4648Base32Hex = class RFC4648Base32Hex extends Base32 {
|
|
|
251
295
|
const upper = base32.toUpperCase();
|
|
252
296
|
const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;
|
|
253
297
|
const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;
|
|
254
|
-
const { CR, LF, SP, HT } = CharCodes;
|
|
255
298
|
const chars = new Uint8Array(base32.length);
|
|
256
299
|
let charCount = 0;
|
|
257
300
|
for (let i = 0; i < base32.length; i++) {
|
|
258
301
|
const c = upper.charCodeAt(i);
|
|
259
|
-
if (c
|
|
302
|
+
if (!CharCodes.isWhitespace(c)) chars[charCount++] = c;
|
|
260
303
|
}
|
|
261
304
|
if (charCount % 8 !== 0) throw new KastenBase32DecodeError("Invalid length string.");
|
|
262
305
|
let firstPad = -1;
|
|
@@ -340,6 +383,7 @@ var RFC2045Base64 = class RFC2045Base64 extends Base64 {
|
|
|
340
383
|
encode = (bytes) => {
|
|
341
384
|
if (bytes.length === 0) return "";
|
|
342
385
|
const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;
|
|
386
|
+
const { CR, LF } = CharCodes;
|
|
343
387
|
const baseSize = Math.ceil(bytes.length / 3) * 4;
|
|
344
388
|
const linebreaks = Math.floor((baseSize - 1) / 76);
|
|
345
389
|
const chars = new Uint8Array(baseSize + linebreaks * 2);
|
|
@@ -360,8 +404,8 @@ var RFC2045Base64 = class RFC2045Base64 extends Base64 {
|
|
|
360
404
|
charCout += 4;
|
|
361
405
|
if (charCout === 76 && ci < chars.length) {
|
|
362
406
|
charCout = 0;
|
|
363
|
-
chars[ci++] =
|
|
364
|
-
chars[ci++] =
|
|
407
|
+
chars[ci++] = CR;
|
|
408
|
+
chars[ci++] = LF;
|
|
365
409
|
}
|
|
366
410
|
}
|
|
367
411
|
const remain = bytes.length % 3;
|
|
@@ -460,7 +504,7 @@ var RFC4648Base64 = class RFC4648Base64 extends Base64 {
|
|
|
460
504
|
let lineCharCount = 0;
|
|
461
505
|
for (let i = 0; i < base64.length; i++) {
|
|
462
506
|
const c = base64.charCodeAt(i);
|
|
463
|
-
if (
|
|
507
|
+
if (!CharCodes.isWhitespace(c)) line[lineCharCount++] = c;
|
|
464
508
|
}
|
|
465
509
|
if (lineCharCount % 4 !== 0) throw new KastenBase64DecodeError("Invalid length string");
|
|
466
510
|
let firstPad = -1;
|
|
@@ -543,7 +587,7 @@ var RFC4648Base64URL = class RFC4648Base64URL extends Base64 {
|
|
|
543
587
|
let lineCharCount = 0;
|
|
544
588
|
for (let i = 0; i < base64.length; i++) {
|
|
545
589
|
const c = base64.charCodeAt(i);
|
|
546
|
-
if (
|
|
590
|
+
if (!CharCodes.isWhitespace(c)) line[lineCharCount++] = c;
|
|
547
591
|
}
|
|
548
592
|
if (lineCharCount % 4 !== 0) throw new KastenBase64DecodeError("Invalid length string");
|
|
549
593
|
let firstPad = -1;
|
|
@@ -589,6 +633,9 @@ var RFC4648Base64URL = class RFC4648Base64URL extends Base64 {
|
|
|
589
633
|
var RunLength = class {};
|
|
590
634
|
//#endregion
|
|
591
635
|
//#region src/run-length/basic/basic-run-length.ts
|
|
636
|
+
/**
|
|
637
|
+
* Basic Run-Length codec.
|
|
638
|
+
*/
|
|
592
639
|
var BasicRunLength = class extends RunLength {
|
|
593
640
|
encode(bytes) {
|
|
594
641
|
const encoded = new Uint8Array(bytes.length * 2);
|
|
@@ -636,6 +683,9 @@ var KastenRunLengthEncodeError = class extends KastenRunLengthError {};
|
|
|
636
683
|
var KastenRunLengthDecodeError = class extends KastenRunLengthError {};
|
|
637
684
|
//#endregion
|
|
638
685
|
//#region src/run-length/pack-bits/pack-bits.ts
|
|
686
|
+
/**
|
|
687
|
+
* PackBits codec.
|
|
688
|
+
*/
|
|
639
689
|
var PackBits = class extends RunLength {
|
|
640
690
|
encode(bytes) {
|
|
641
691
|
if (bytes.length === 0) return new Uint8Array([]);
|
|
@@ -806,6 +856,7 @@ var Kasten = class {
|
|
|
806
856
|
*/
|
|
807
857
|
static base16 = (category) => {
|
|
808
858
|
switch (category) {
|
|
859
|
+
case "ascii": return new AsciiHexDecode();
|
|
809
860
|
default: return new RFC4648Base16();
|
|
810
861
|
}
|
|
811
862
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/base16/index.ts","../src/char-codes.ts","../src/errors.ts","../src/base16/errors.ts","../src/base16/rfc4648/rfc4648.ts","../src/base32/index.ts","../src/base32/errors.ts","../src/base32/rfc4648/rfc4648.ts","../src/base32/rfc4648/rfc4648hex.ts","../src/base64/index.ts","../src/base64/errors.ts","../src/base64/rfc2045/rfc2045.ts","../src/base64/rfc4648/rfc4648.ts","../src/base64/rfc4648/rfc4648url.ts","../src/run-length/index.ts","../src/run-length/basic/basic-run-length.ts","../src/run-length/errors.ts","../src/run-length/pack-bits/pack-bits.ts","../src/run-length/pdf/pdf.ts","../src/kasten.ts"],"sourcesContent":["export const Base16Categories = ['rfc4648'] as const;\n\nexport type Base16Category = typeof Base16Categories[number];\n\n/**\n * Base16 codec.\n */\nexport abstract class Base16 {\n\n /**\n * Encodes bytes to Base16 string.\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base16 string to bytes.\n * @param base16 Base16 string to be decoded.\n */\n public abstract decode(base16: string): Uint8Array;\n}","export class CharCodes {\n\n public static CR = 13;\n\n public static LF = 10;\n\n public static SP = 32;\n\n public static HT = 9;\n\n private constructor() {}\n}","export class KastenError extends Error {}","import { KastenError } from '@/errors';\n\nexport class KastenBase16Error extends KastenError {}\n\nexport class KastenBase16EncodeError extends KastenBase16Error {}\n\nexport class KastenBase16DecodeError extends KastenBase16Error {}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase16DecodeError } from '../errors';\n\n/**\n * RFC 4648 Base 16 encoding.\n */\nexport class RFC4648Base16 extends Base16 {\n\n private static readonly textDecoder = new TextDecoder();\n\n private static readonly TABLE = '0123456789ABCDEF';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base16.ENCODED_TABLE;\n\n const chars = new Uint8Array(bytes.length * 2);\n\n let charCount = 0;\n\n for (const byte of bytes) {\n \n const ci1 = (byte & 0xF0) >> 4;\n const ci2 = byte & 0x0F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n\n chars[charCount++] = c1;\n chars[charCount++] = c2;\n }\n\n return RFC4648Base16.textDecoder.decode(chars);\n }\n \n public override decode(base16: string): Uint8Array {\n\n const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;\n const { CR, LF, SP, HT, } = CharCodes;\n\n const upper = base16.toUpperCase();\n const chars = new Uint8Array(base16.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base16.length; i++) {\n const c = upper.charCodeAt(i);\n\n if (c === CR || c === LF || c === SP || c === HT)\n continue;\n\n if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255)\n throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);\n\n chars[charCount++] = c;\n }\n\n if (charCount % 2 !== 0)\n throw new KastenBase16DecodeError('Invalid Base16');\n\n const bytes = new Uint8Array(Math.ceil(base16.length / 2));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 2) {\n \n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n\n const byte = ((ci1 & 0x0F) << 4) | (ci2 & 0x0F);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base32Category = typeof Base32Categories[number];\n\nexport const Base32Categories = ['rfc4648', 'rfc468-hex'] as const;\n\n/**\n * Base32 codec.\n */\nexport abstract class Base32 {\n\n protected static readonly textDecoder = new TextDecoder();\n\n /**\n * Encodes bytes to Base32 string\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base32 string to bytes.\n * @param base32 Base32 string to be decoded.\n */\n public abstract decode(base32: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\nexport class KastenBase32Error extends KastenError {}\n\nexport class KastenBase32EncodeError extends KastenBase32Error {}\n\nexport class KastenBase32DecodeError extends KastenBase32Error {}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32 extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;\n const PADDING = RFC4648Base32.PADDING_CHAR_CODE;\n const { CR, LF, SP, HT } = CharCodes;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (c !== CR &&\n c !== LF &&\n c !== SP &&\n c !== HT) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32Hex extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = '0123456789ABCDEFGHIJKLMNOPQRSTUV';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32Hex.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32Hex.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;\n const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;\n const { CR, LF, SP, HT } = CharCodes;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (c !== CR &&\n c !== LF &&\n c !== SP &&\n c !== HT) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base64Category = typeof Base64Categories[number];\n\nexport const Base64Categories = ['rfc4648', 'rfc4648-url', 'rfc2025'] as const;\n\n/**\n * Base64 codec.\n */\nexport abstract class Base64 {\n\n /**\n * Encodes byte array to string.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes string to byte array.\n * @param base64 Base64 string\n */\n public abstract decode(base64: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\n/**\n * Base error type of Base64.\n */\nexport class KastenBase64Error extends KastenError {}\n\n/**\n * Thrown when error occurs on Base64 encoding.\n */\nexport class KastenBase64EncodeError extends KastenBase64Error {};\n\n/**\n * Thrown when error occurs on Base64 decoding.\n */\nexport class KastenBase64DecodeError extends KastenBase64Error {};","import { Base64 } from '@/base64';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\n\nexport class RFC2045Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n let charCout = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n\n charCout += 4;\n\n if (charCout === 76 && ci < chars.length) {\n charCout = 0;\n chars[ci++] = CharCodes.CR;\n chars[ci++] = CharCodes.LF;\n }\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC2045Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n }\n\n return RFC2045Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC2045Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC2045Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC2045Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC2045Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC2045Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC2045Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC2045Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { Base64 } from '@/base64';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { CharCodes } from '@/char-codes';\n\nexport class RFC4648Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { CharCodes } from '@/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { Base64 } from '@/base64';\n\nexport class RFC4648Base64URL extends Base64 {\n \n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n \n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64URL.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64URL.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64URL.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64URL.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64URL.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64URL.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64URL.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","export const RunLengthCatgories = ['basic', 'pack-bits', 'pdf'] as const;\n\nexport type RunLengthCatgory = typeof RunLengthCatgories[number];\n\n/**\n * Run-Length encoding and decoding.\n */\nexport abstract class RunLength {\n\n /**\n * Encodes bytes to Run-Length encoded bytes.\n * @param bytes \n */\n public abstract encode(bytes: Uint8Array): Uint8Array;\n\n /**\n * Decodes Run-Length encoded bytes to original bytes.\n * @param runLength \n */\n public abstract decode(runLength: Uint8Array): Uint8Array;\n}","import { RunLength } from '@/run-length';\n\nexport class BasicRunLength extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n const encoded = new Uint8Array(bytes.length * 2);\n\n let byteCount = 0;\n\n let prev: number | null = null;\n\n let count = 0;\n\n for(let i = 0; i < bytes.length; i++) {\n\n const byte = bytes[i]!;\n\n if (prev === null) {\n prev = byte;\n count = 1;\n continue;\n }\n\n if (prev === byte) {\n\n if (count < 255) {\n count++;\n continue;\n }\n }\n\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n\n prev = byte;\n count = 1;\n }\n\n if (prev !== null) {\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n }\n\n return encoded.subarray(0, byteCount);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n for (let i = 0; i < runLength.length; i += 2) {\n\n const count = runLength[i]!;\n\n const byte = runLength[i + 1]!;\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte);\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { KastenError } from '@/errors';\n\nexport class KastenRunLengthError extends KastenError {}\n\nexport class KastenRunLengthEncodeError extends KastenRunLengthError {}\n\nexport class KastenRunLengthDecodeError extends KastenRunLengthError {}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '../errors';\n\nexport class PackBits extends RunLength {\n\n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 3) {\n encoded.push(256 - (j - 1));\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '@/run-length/errors';\n\nexport class Pdf extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 2) {\n encoded.push(257 - j);\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n\n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n \n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import type { Base16, Base16Category } from '@/base16';\nimport type { Base32, Base32Category } from '@/base32';\nimport type { Base64, Base64Category } from '@/base64';\nimport type { RunLength, RunLengthCatgory } from '@/run-length';\nimport { RFC4648Base16 } from '@/base16/rfc4648/rfc4648';\nimport { RFC4648Base32 } from '@/base32/rfc4648/rfc4648';\nimport { RFC4648Base32Hex } from '@/base32/rfc4648/rfc4648hex';\nimport { RFC2045Base64 } from '@/base64/rfc2045/rfc2045';\nimport { RFC4648Base64 } from '@/base64/rfc4648/rfc4648';\nimport { RFC4648Base64URL } from '@/base64/rfc4648/rfc4648url';\nimport { BasicRunLength } from '@/run-length/basic/basic-run-length';\nimport { PackBits } from '@/run-length/pack-bits/pack-bits';\nimport { Pdf } from '@/run-length/pdf/pdf';\n\n/**\n * Entry point of the Kasten library.\n * All encoding/decoding feature implementations are created through this class.\n *\n * @example\n * const base64 = Kasten.base64('rfc4648');\n * const encoded = base64.encode(data);\n *\n * @example\n * const base32 = Kasten.base32('rfc464hex');\n * const decoded = base32.decode(text);\n *\n * @example\n * const base16 = Kasten.base16();\n *\n * @example\n * const runLength = Kasten.runLength('pack-bits');\n */\nclass Kasten {\n\n private constructor() {}\n\n /**\n * Creates Base 64 codec instance.\n * @param category Base 64 category.\n */\n public static base64 = (category?: Base64Category): Base64 => {\n\n switch(category) {\n case 'rfc4648-url':\n return new RFC4648Base64URL();\n case 'rfc2025':\n return new RFC2045Base64();\n case 'rfc4648':\n default:\n return new RFC4648Base64();\n }\n }\n\n /**\n * Creates Base 32 codec instance.\n * @param category Base 32 category.\n */\n public static base32 = (category?: Base32Category): Base32 => {\n\n switch(category) {\n case 'rfc468-hex':\n return new RFC4648Base32Hex();\n case 'rfc4648':\n default:\n return new RFC4648Base32();\n }\n }\n\n /**\n * Create Base 16 codec instance.\n */\n public static base16 = (category?: Base16Category): Base16 => {\n\n switch(category) {\n case 'rfc4648':\n default:\n return new RFC4648Base16();\n }\n }\n\n /**\n * Creates Run-Length codec instance.\n */\n public static runLength = (category?: RunLengthCatgory): RunLength => {\n\n switch(category) {\n case 'pack-bits':\n return new PackBits();\n case 'pdf':\n return new Pdf();\n case 'basic':\n default:\n return new BasicRunLength();\n }\n }\n}\n\nexport {\n Kasten,\n type Base64,\n type Base64Category as Base64Catgory,\n type Base32,\n type Base32Category,\n type Base16,\n type Base16Category,\n type RunLength,\n type RunLengthCatgory\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/base16/index.ts","../src/utils/char-codes.ts","../src/errors.ts","../src/base16/errors.ts","../src/base16/rfc4648/rfc4648.ts","../src/base16/ascii/ascii.ts","../src/base32/index.ts","../src/base32/errors.ts","../src/base32/rfc4648/rfc4648.ts","../src/base32/rfc4648/rfc4648hex.ts","../src/base64/index.ts","../src/base64/errors.ts","../src/base64/rfc2045/rfc2045.ts","../src/base64/rfc4648/rfc4648.ts","../src/base64/rfc4648/rfc4648url.ts","../src/run-length/index.ts","../src/run-length/basic/basic-run-length.ts","../src/run-length/errors.ts","../src/run-length/pack-bits/pack-bits.ts","../src/run-length/pdf/pdf.ts","../src/kasten.ts"],"sourcesContent":["export const Base16Categories = ['rfc4648', 'ascii'] as const;\n\nexport type Base16Category = typeof Base16Categories[number];\n\n/**\n * Base16 codec.\n */\nexport abstract class Base16 {\n\n /**\n * Encodes bytes to Base16 string.\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base16 string to bytes.\n * @param base16 Base16 string to be decoded.\n */\n public abstract decode(base16: string): Uint8Array;\n}","export class CharCodes {\n\n public static HT = 9;\n \n public static LF = 10;\n \n public static VT = 11;\n \n public static FF = 12;\n \n public static CR = 13;\n \n public static SP = 32;\n\n private constructor() {}\n\n public static isWhitespace = (c: string | number) => {\n\n const type = typeof c;\n\n if (type !== 'string' && type !== 'number')\n throw new Error('invalid argument type.');\n\n if (type === 'string' && (c as string).length !== 1)\n throw new Error('inalid argument: not a character');\n\n const code = typeof c === 'string'\n ? c.charCodeAt(0)\n : c as number;\n\n return (this.HT <= code && code <= this.CR) || code === this.SP;\n }\n}","export class KastenError extends Error {}","import { KastenError } from '@/errors';\n\nexport class KastenBase16Error extends KastenError {}\n\nexport class KastenBase16EncodeError extends KastenBase16Error {}\n\nexport class KastenBase16DecodeError extends KastenBase16Error {}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase16DecodeError } from '../errors';\n\n/**\n * RFC 4648 Base 16 encoding.\n */\nexport class RFC4648Base16 extends Base16 {\n\n private static readonly textDecoder = new TextDecoder();\n\n private static readonly TABLE = '0123456789ABCDEF';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base16.ENCODED_TABLE;\n\n const chars = new Uint8Array(bytes.length * 2);\n\n let charCount = 0;\n\n for (const byte of bytes) {\n \n const ci1 = (byte & 0xF0) >> 4;\n const ci2 = byte & 0x0F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n\n chars[charCount++] = c1;\n chars[charCount++] = c2;\n }\n\n return RFC4648Base16.textDecoder.decode(chars);\n }\n \n public override decode(base16: string): Uint8Array {\n\n const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;\n\n const upper = base16.toUpperCase();\n const chars = new Uint8Array(base16.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base16.length; i++) {\n const c = upper.charCodeAt(i);\n\n if (CharCodes.isWhitespace(c))\n continue;\n\n if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255)\n throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);\n\n chars[charCount++] = c;\n }\n\n if (charCount % 2 !== 0)\n throw new KastenBase16DecodeError('Invalid Base16');\n\n const bytes = new Uint8Array(Math.ceil(base16.length / 2));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 2) {\n \n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n\n const byte = ((ci1 & 0x0F) << 4) | (ci2 & 0x0F);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase16DecodeError } from '@/base16/errors';\n\n/**\n * AsciiHexDecode codec of PDF1.7\n */\nexport class AsciiHexDecode extends Base16 {\n \n public override encode(bytes: Uint8Array): string {\n\n if (bytes.length === 0) return '>';\n\n const chars: string[] = [];\n\n for (const byte of bytes) {\n const char = byte.toString(16).padStart(2, '0');\n chars.push(char);\n }\n\n chars.push('>');\n\n return chars.join('');\n }\n\n public override decode(base16: string): Uint8Array {\n\n const chars: string[] = [];\n\n for (const c of base16) {\n\n if (c === '>') break;\n \n if (CharCodes.isWhitespace(c)) continue;\n \n const code = c.charCodeAt(0);\n \n if (!(48 <= code && code <= 57) && !(65 <= code && code <= 70) && !(97<= code && code <= 102))\n throw new KastenBase16DecodeError(`invalid char: ${c}`);\n\n chars.push(c);\n }\n\n if (chars.length % 2 !== 0) chars.push('0');\n\n const strLength = chars.length;\n\n const bytes = new Uint8Array(Math.ceil(strLength / 2));\n\n let byteCount = 0;\n\n for (let i = 0, j = 0; i < strLength; i += 2, j++) {\n \n const hex = chars[i]! + chars[i + 1]!;\n\n const byte = Number.parseInt(hex, 16);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base32Category = typeof Base32Categories[number];\n\nexport const Base32Categories = ['rfc4648', 'rfc468-hex'] as const;\n\n/**\n * Base32 codec.\n */\nexport abstract class Base32 {\n\n protected static readonly textDecoder = new TextDecoder();\n\n /**\n * Encodes bytes to Base32 string\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base32 string to bytes.\n * @param base32 Base32 string to be decoded.\n */\n public abstract decode(base32: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\nexport class KastenBase32Error extends KastenError {}\n\nexport class KastenBase32EncodeError extends KastenBase32Error {}\n\nexport class KastenBase32DecodeError extends KastenBase32Error {}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32 extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;\n const PADDING = RFC4648Base32.PADDING_CHAR_CODE;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (!CharCodes.isWhitespace(c)) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32Hex extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = '0123456789ABCDEFGHIJKLMNOPQRSTUV';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32Hex.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32Hex.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;\n const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (!CharCodes.isWhitespace(c)) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base64Category = typeof Base64Categories[number];\n\nexport const Base64Categories = ['rfc4648', 'rfc4648-url', 'rfc2025'] as const;\n\n/**\n * Base64 codec.\n */\nexport abstract class Base64 {\n\n /**\n * Encodes byte array to string.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes string to byte array.\n * @param base64 Base64 string\n */\n public abstract decode(base64: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\n/**\n * Base error type of Base64.\n */\nexport class KastenBase64Error extends KastenError {}\n\n/**\n * Thrown when error occurs on Base64 encoding.\n */\nexport class KastenBase64EncodeError extends KastenBase64Error {};\n\n/**\n * Thrown when error occurs on Base64 decoding.\n */\nexport class KastenBase64DecodeError extends KastenBase64Error {};","import { Base64 } from '@/base64';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\n\nexport class RFC2045Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;\n const { CR, LF } = CharCodes;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n let charCout = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n\n charCout += 4;\n\n if (charCout === 76 && ci < chars.length) {\n charCout = 0;\n chars[ci++] = CR;\n chars[ci++] = LF;\n }\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC2045Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n }\n\n return RFC2045Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC2045Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC2045Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC2045Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC2045Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC2045Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC2045Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC2045Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { Base64 } from '@/base64';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { CharCodes } from '@/utils/char-codes';\n\nexport class RFC4648Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (!CharCodes.isWhitespace(c)) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { CharCodes } from '@/utils/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { Base64 } from '@/base64';\n\nexport class RFC4648Base64URL extends Base64 {\n \n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n \n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64URL.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64URL.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64URL.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64URL.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (!CharCodes.isWhitespace(c)) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64URL.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64URL.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64URL.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","export const RunLengthCatgories = ['basic', 'pack-bits', 'pdf'] as const;\n\nexport type RunLengthCatgory = typeof RunLengthCatgories[number];\n\n/**\n * Run-Length encoding and decoding.\n */\nexport abstract class RunLength {\n\n /**\n * Encodes bytes to Run-Length encoded bytes.\n * @param bytes \n */\n public abstract encode(bytes: Uint8Array): Uint8Array;\n\n /**\n * Decodes Run-Length encoded bytes to original bytes.\n * @param runLength \n */\n public abstract decode(runLength: Uint8Array): Uint8Array;\n}","import { RunLength } from '@/run-length';\n\n/**\n * Basic Run-Length codec.\n */\nexport class BasicRunLength extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n const encoded = new Uint8Array(bytes.length * 2);\n\n let byteCount = 0;\n\n let prev: number | null = null;\n\n let count = 0;\n\n for(let i = 0; i < bytes.length; i++) {\n\n const byte = bytes[i]!;\n\n if (prev === null) {\n prev = byte;\n count = 1;\n continue;\n }\n\n if (prev === byte) {\n\n if (count < 255) {\n count++;\n continue;\n }\n }\n\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n\n prev = byte;\n count = 1;\n }\n\n if (prev !== null) {\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n }\n\n return encoded.subarray(0, byteCount);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n for (let i = 0; i < runLength.length; i += 2) {\n\n const count = runLength[i]!;\n\n const byte = runLength[i + 1]!;\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte);\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { KastenError } from '@/errors';\n\nexport class KastenRunLengthError extends KastenError {}\n\nexport class KastenRunLengthEncodeError extends KastenRunLengthError {}\n\nexport class KastenRunLengthDecodeError extends KastenRunLengthError {}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '../errors';\n\n/**\n * PackBits codec.\n */\nexport class PackBits extends RunLength {\n\n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 3) {\n encoded.push(256 - (j - 1));\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '@/run-length/errors';\n\nexport class Pdf extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 2) {\n encoded.push(257 - j);\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n\n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n \n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import type { Base16, Base16Category } from '@/base16';\nimport type { Base32, Base32Category } from '@/base32';\nimport type { Base64, Base64Category } from '@/base64';\nimport type { RunLength, RunLengthCatgory } from '@/run-length';\nimport { RFC4648Base16 } from '@/base16/rfc4648/rfc4648';\nimport { AsciiHexDecode } from '@/base16/ascii/ascii';\nimport { RFC4648Base32 } from '@/base32/rfc4648/rfc4648';\nimport { RFC4648Base32Hex } from '@/base32/rfc4648/rfc4648hex';\nimport { RFC2045Base64 } from '@/base64/rfc2045/rfc2045';\nimport { RFC4648Base64 } from '@/base64/rfc4648/rfc4648';\nimport { RFC4648Base64URL } from '@/base64/rfc4648/rfc4648url';\nimport { BasicRunLength } from '@/run-length/basic/basic-run-length';\nimport { PackBits } from '@/run-length/pack-bits/pack-bits';\nimport { Pdf } from '@/run-length/pdf/pdf';\n\n/**\n * Entry point of the Kasten library.\n * All encoding/decoding feature implementations are created through this class.\n *\n * @example\n * const base64 = Kasten.base64('rfc4648');\n * const encoded = base64.encode(data);\n *\n * @example\n * const base32 = Kasten.base32('rfc464hex');\n * const decoded = base32.decode(text);\n *\n * @example\n * const base16 = Kasten.base16();\n *\n * @example\n * const runLength = Kasten.runLength('pack-bits');\n */\nclass Kasten {\n\n private constructor() {}\n\n /**\n * Creates Base 64 codec instance.\n * @param category Base 64 category.\n */\n public static base64 = (category?: Base64Category): Base64 => {\n\n switch(category) {\n case 'rfc4648-url':\n return new RFC4648Base64URL();\n case 'rfc2025':\n return new RFC2045Base64();\n case 'rfc4648':\n default:\n return new RFC4648Base64();\n }\n }\n\n /**\n * Creates Base 32 codec instance.\n * @param category Base 32 category.\n */\n public static base32 = (category?: Base32Category): Base32 => {\n\n switch(category) {\n case 'rfc468-hex':\n return new RFC4648Base32Hex();\n case 'rfc4648':\n default:\n return new RFC4648Base32();\n }\n }\n\n /**\n * Create Base 16 codec instance.\n */\n public static base16 = (category?: Base16Category): Base16 => {\n\n switch(category) {\n case 'ascii':\n return new AsciiHexDecode();\n case 'rfc4648':\n default:\n return new RFC4648Base16();\n }\n }\n\n /**\n * Creates Run-Length codec instance.\n */\n public static runLength = (category?: RunLengthCatgory): RunLength => {\n\n switch(category) {\n case 'pack-bits':\n return new PackBits();\n case 'pdf':\n return new Pdf();\n case 'basic':\n default:\n return new BasicRunLength();\n }\n }\n}\n\nexport {\n Kasten,\n type Base64,\n type Base64Category as Base64Catgory,\n type Base32,\n type Base32Category,\n type Base16,\n type Base16Category,\n type RunLength,\n type RunLengthCatgory\n}"],"mappings":"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"}
|