@pictx/gemini-veo-watermark-remover 0.2.2

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.
@@ -0,0 +1,1211 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __esm = (fn, res) => function __init() {
4
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
5
+ };
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+
11
+ // src/core/blendModes.js
12
+ function removeWatermark(imageData, alphaMap, position, options = {}) {
13
+ const { clampOutput = true } = options;
14
+ const { data, width } = imageData;
15
+ const { x: ox, y: oy, width: mw, height: mh } = position;
16
+ for (let my = 0; my < mh; my++) {
17
+ for (let mx = 0; mx < mw; mx++) {
18
+ const alpha = alphaMap[my * mw + mx];
19
+ if (alpha < ALPHA_THRESHOLD) continue;
20
+ const effectiveAlpha = Math.min(alpha, MAX_ALPHA);
21
+ const px = ox + mx;
22
+ const py = oy + my;
23
+ if (px < 0 || px >= width || py < 0 || py >= imageData.height) continue;
24
+ const idx = (py * width + px) * 4;
25
+ for (let c = 0; c < 3; c++) {
26
+ const watermarked = data[idx + c];
27
+ let original = (watermarked - effectiveAlpha * 255) / (1 - effectiveAlpha);
28
+ if (clampOutput) {
29
+ original = Math.max(0, Math.min(255, Math.round(original)));
30
+ }
31
+ data[idx + c] = original;
32
+ }
33
+ }
34
+ }
35
+ return imageData;
36
+ }
37
+ var ALPHA_NOISE_FLOOR, ALPHA_THRESHOLD, MAX_ALPHA;
38
+ var init_blendModes = __esm({
39
+ "src/core/blendModes.js"() {
40
+ ALPHA_NOISE_FLOOR = 3 / 255;
41
+ ALPHA_THRESHOLD = 2e-3;
42
+ MAX_ALPHA = 0.99;
43
+ }
44
+ });
45
+
46
+ // src/core/veoConfig.js
47
+ function normalizeVideoWatermarkProfile(profile) {
48
+ const value = typeof profile === "object" && profile ? profile.videoProfile ?? profile.profile : profile;
49
+ if (!value || value === "diamond" || value === "current" || value === "v2" || value === "gemini") {
50
+ return "diamond";
51
+ }
52
+ if (value === "legacy" || value === "veo" || value === "text" || value === "v1") {
53
+ return "legacy";
54
+ }
55
+ return null;
56
+ }
57
+ function detectVeoWatermarkConfig(width, height, profile = "diamond") {
58
+ const normalizedProfile = normalizeVideoWatermarkProfile(profile);
59
+ if (!normalizedProfile) return null;
60
+ const key = `${width}x${height}`;
61
+ return VIDEO_WATERMARK_PROFILES[normalizedProfile][key] || null;
62
+ }
63
+ function calculateWatermarkPosition(width, height, profile = "diamond") {
64
+ const config = detectVeoWatermarkConfig(width, height, profile);
65
+ if (!config) return null;
66
+ return {
67
+ x: config.position.x,
68
+ y: config.position.y,
69
+ width: config.watermark.width,
70
+ height: config.watermark.height
71
+ };
72
+ }
73
+ function getVeoWatermarkInfo(width, height, profile = "diamond") {
74
+ const normalizedProfile = normalizeVideoWatermarkProfile(profile);
75
+ if (!normalizedProfile) return null;
76
+ const config = detectVeoWatermarkConfig(width, height, normalizedProfile);
77
+ if (!config) return null;
78
+ return {
79
+ profile: normalizedProfile,
80
+ alphaMapKey: config.key,
81
+ position: {
82
+ x: config.position.x,
83
+ y: config.position.y,
84
+ width: config.watermark.width,
85
+ height: config.watermark.height
86
+ }
87
+ };
88
+ }
89
+ var LEGACY_VEO_TEXT_CATALOG, GEMINI_DIAMOND_VIDEO_CATALOG, VIDEO_WATERMARK_PROFILES, VEO_WATERMARK_CATALOG;
90
+ var init_veoConfig = __esm({
91
+ "src/core/veoConfig.js"() {
92
+ LEGACY_VEO_TEXT_CATALOG = {
93
+ "1280x720": {
94
+ key: "720p-landscape",
95
+ profile: "legacy",
96
+ watermark: { width: 80, height: 28 },
97
+ position: { x: 1180, y: 684 }
98
+ },
99
+ "720x1280": {
100
+ key: "720p-portrait",
101
+ profile: "legacy",
102
+ watermark: { width: 80, height: 28 },
103
+ position: { x: 620, y: 1244 }
104
+ },
105
+ "1920x1080": {
106
+ key: "1080p-landscape",
107
+ profile: "legacy",
108
+ watermark: { width: 120, height: 42 },
109
+ position: { x: 1772, y: 1028 }
110
+ },
111
+ "1080x1920": {
112
+ key: "1080p-portrait",
113
+ profile: "legacy",
114
+ watermark: { width: 120, height: 42 },
115
+ position: { x: 932, y: 1868 }
116
+ }
117
+ };
118
+ GEMINI_DIAMOND_VIDEO_CATALOG = {
119
+ "1920x1080": {
120
+ key: "veo-diamond-1080p-landscape",
121
+ profile: "diamond",
122
+ watermark: { width: 96, height: 96 },
123
+ position: { x: 1632, y: 792 }
124
+ },
125
+ "1080x1920": {
126
+ key: "veo-diamond-1080p-portrait",
127
+ profile: "diamond",
128
+ watermark: { width: 96, height: 96 },
129
+ position: { x: 792, y: 1632 }
130
+ }
131
+ };
132
+ VIDEO_WATERMARK_PROFILES = {
133
+ diamond: GEMINI_DIAMOND_VIDEO_CATALOG,
134
+ legacy: LEGACY_VEO_TEXT_CATALOG
135
+ };
136
+ VEO_WATERMARK_CATALOG = LEGACY_VEO_TEXT_CATALOG;
137
+ }
138
+ });
139
+
140
+ // src/core/calibratedAlphaData.js
141
+ function decodeCalibratedAlpha(entry) {
142
+ const binary = typeof atob === "function" ? atob(entry.dataBase64) : Buffer.from(entry.dataBase64, "base64").toString("binary");
143
+ const map = new Float32Array(entry.width * entry.height);
144
+ for (let i = 0; i < map.length; i++) {
145
+ map[i] = binary.charCodeAt(i) / 255;
146
+ }
147
+ return map;
148
+ }
149
+ function loadCalibratedAlphaMap(key) {
150
+ const entry = CALIBRATED_ALPHA_ENTRIES[key];
151
+ if (!entry) return null;
152
+ return {
153
+ data: decodeCalibratedAlpha(entry),
154
+ width: entry.width,
155
+ height: entry.height,
156
+ source: entry.source
157
+ };
158
+ }
159
+ var CALIBRATED_ALPHA_ENTRIES;
160
+ var init_calibratedAlphaData = __esm({
161
+ "src/core/calibratedAlphaData.js"() {
162
+ CALIBRATED_ALPHA_ENTRIES = {
163
+ "gemini-v2-36": { width: 36, height: 36, source: "GeminiWatermarkTool/bg_b_36", dataBase64: "AgICAgICAgICAgICAgICAwI0OAICAwICAgICAgIDAgICAgICAgICAgICAgICAgMCAgIDAAtMTAsBAwIDAgIDAgICAgICAgICAgICAgICAgICAgICAgMDABxSURwAAwICAgICAgICAgICAgECAgICAgICAgICAgICAgICAjVSUjUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMBD0pSUUwWAAICAQECAgICAQECAgECAgICAgICAgMCAgICAgMBLVJPTlM1AgICAgMCAgIBAgICAgIBAgICAgICAwMDAgICAwERS1JOTlFNFgADAgICAgICAgIBAQECAgICAgICAgICAgIDAQI7VE5OTk5TNwECAQICAQICAQEBAgECAgICAgICAgICAgMDACRQUE1OTk1QUCYAAwMCAQICAgICAgEBAgICAgICAgICAgMAGk5QTU5OT09NUU4bAAICAgECAgIDAgICAgICAgICAgMDAwAUR1NPTk5OTk9OTVJHEwACAgICAgECAgICAgICAwMCAwMDABNGU05NTk5OTk5NTk5SRRMAAgIBAgICAgICAgICAgICAwIBG0dTTk5OTk5OTk5OTk5OU0caAQEDAgICAgICAgICAgIDAAIoTlJOTk5OTk5OTk5OTU9OTlJOJAIAAgMCAQICAgMCAgABFjhPUU5NTk5OTk9OTk5NTk9OTk5RUDsRAQECAwQCAgAAARU1TFNPTU5OTk5OTk5OTk5NTk5OTk5NUFRLLQ8CAAACAgscNExTUU5OTk1OTk1OTk1OTk5OTk1NTk5OTU1SUUo0GwoBN0xRUlFOTU5NTk5NTk5NTk5NTU5NTk5NTk5NTk9NTlFRUUwzNExSUlJPTU5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTlBSUUw3AQocNEpSUk5NTk5OTk5OTk5OTk1OTk5OTk5OTU5RUkw0HAoCAgAAAg8tS1RQTU5OTk5NTk5OTk5NTk5OTU5NUFNMNRYCAAACAgMDAgABETtQUU5OTk5OTk5OTk1OTk5OTk1RUDgVAQACAgICAgICAwMDAAMkTVNOTk5OTk1OTk1OTk5OTlFOJwIBAQICAgIBAgICAgIBAwEBG0hTTk1OTk5OTk5NTk5OU0gaAAICAgICAgICAwICAgICAgMDABRHU05OTk5OTk5OTk1TRhMAAgICAgICAgICAgICAgICAgICAgATSFJOTk5OT05OTVJHEwADAgECAwICAgIDAgICAgICAgIBAgMAGk5RTU5NTk5NUE4aAAMCAgIBAgMDAwMDAgICAgICAgICAgMDASdQT05OTk1QUSUAAwMDAgICAgICAgICAgICAgICAQEBAgIDAQI5Uk5OTk1TOwICAgICAgIDAgIDAgIDAgICAgICAgIBAgICAgAVTVJNTlJLEQACAgIBAgICAgICAgMCAgICAgICAgICAgICAgIBNVNOT1EtAQICAgICAgICAgICAgICAgICAgICAgICAgICAgMBFk1RUUoPAAMDAgICAgIDAgIDAgICAgICAgICAgICAgICAgICAjVSUjUCAwMCAgIDAwMDAgICAgIDAgICAgICAgICAgICAgICABxSUhwAAwMCAgMCAgICAgMCAgIDAgIDAgMCAgICAgICAgIDAQtMTAoBAgICAgICAQECAQEDAgICAgICAgICAgICAgICAgICAgI2MwEBAgICAgICAgICAgICAgIB" },
164
+ "gemini-v2-96": { width: 96, height: 96, source: "GeminiWatermarkTool/bg_b_96", dataBase64: "AgMCAgICAgMCAwICAgICAgIDAgICAgICAgMCAgMCAgICAwICAQICAgIEAwIBDis+QjIQAQICAgICAwICAwICAwMDAwICAgICAgQBAgMDAwMDAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgMCAgICAgICAwICAgECAgIDAgICAwICAQMBAgMDAgIEFTFFRzcXBQMEAwMDAgMCAgMCAwICAgMCAwIDAgIBAQIDAgMDAgEBAwQCAgICAgICAwICAgICAgICAwICAgECAgECAgICAgMCAgICAgICAgICAgICAgICAgICAgICAQMJHDlPUDweCQICAgICAwIDAwICAgICAgICAwICAwICAgEBAgICAQICAgIAAgMBAgIDAgICAwICAgICAwICAgICAgMCAgMCAQICAgICAgICAgMCAgICAwIDAgICAgIDAgIPKURZWUYqEAMDAgIDAgICAgMCAwICAgIDAgIBAgICAwEBAwIBAQICAgIBAgMCAQIDAgICAgICAgIDAgICAgICAgQCAwICAgICAwICAgICAwMDAgICAgICAgMCAgICAgIZNE1dXkwzGQMEAQMCAwIDAwMDAgMCAgICAwIDAgIDAgICAgICAgIDAwMCAgICAgICAwICAgICAgIDAgICAwIDAgMCAgIDAgICAwICAgMCAgQDAgIDAwIDAgMCAgICAgUeN01cXE02HgUCAgMCAwIBAQMCAgIDAQECAwIDAwICAgIDAgICAwICAgMCAgIDAgICAwICAgICAgICAgMCAgICAwMDAwMDAgICAQICAgMCAgMCAwICAgIDAgIDAwIBBA8oO0tZWUo8KA4FAQMCAwMDAgMDAgICAgMCAgICAgIBAgICAgICAgECAgMBAQICAQECAgICAgIDAgICAgICAgICAwICAwICAwMCAgICAwMDAgIDAgIDAgIDAgMCAwIBCBg1Q0xWVkxCNhgHAQMCAgIDAgICAwICAgICAwICAgMCAwICAgICAgICAgIBAQICAQECAgICAQICAgMCAwMCAwICAgICAwEDAwIDAgICAgMCAgICAwICAwMCAgICAgICBh49SE1VVU5HPh0HAQIBBAMCAgICAgIDAgICAgICAgMCAwICAgIDAwICAgICAgIEAgMCAgICAgICAgIDAgIDAwICAwMDAgICAwICAgICAgICAgIDAgICAgICAgMCAwICDSlIT09SUk1OSCkPAgIDAgICAgMCAgICAgICAwIDAgICAgIDAgICAgICAgMCAgIBAgICAwIDAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgMCAgIDAgICAgICAgIEGDRRU05QUE5SUTYaBQICAgEDAgICAgICAAECAgICAgICAgMDAgICAgABAgICAgICAAECAwECAQICAgICAgICAgICAwICAgICAgICAgIBAgICAgICAgICAgEDAQMCAgIJJD1VVU9PT05UUz8pEAICAgICAgICAgICAAECAgICAgICAgICAgICAgABAgICAwICAAECAwECAgICAgEEAQICAgECAgMCAgICAgICAwICAgICAgIDAgICAgICAgMCAgMYMEZWVk9OTk9UVUg5IwsDAgIBAgMCAgICAgICAwEBAgICAgEDAgICAgICAgMCAgICAQICAwICAgMCAwIDAgICAwIDAgQCAgIDAgICAwICAgICAgIDAgICAwICAgQCAwkkOEhVVE9OTk9SVEtCLxEDAwECAgMCAgIDAgICAwEBAgMCAgIDAgICAwICAgMCAgIEAgICAwICAgMCAgICAgIDAgICAwICAwIDAgMDAwICAgMCAgMCAgICAgICAwMDBRMyQktTUk5OTk9RUkxJPBgGAgMCAgICAgIDAgIDAwICAwMBAgICAQECAgICAgMBAQICAgICAgEBAgICAgICAgIDAwICAgMCAwMDAgICAwIDAgICAgMCAgIDAgMDAgMCDCREUE1QUE9OTk5PT09TSigQAgIDAgICAgMCAwMCAgICAwICAgICAAECAgIDAwIAAAICAgICAgABAgMCAgICAgMCAwICAgIDAgIEAwMDAwMDAgQCAgIEAgIDAwMCAwICEi9MVlBQUE5PTk9OTk9VTzQbBQIDAgICAgICAgIDAgEBAgMCAgICAgICAwICAgIBAQECAQECAgICAgICAgIDAgICAgICAwMCAgMCAwMCAwMCAgICAgIDAgICAgICAQMLJj5TV1FOT09OTk9OTlBXU0AuFAUCAgMCAgICAgICAwEBAwIDAgIDAgMCAgICAgMBAQEBAgEBAgMBAwICAgIDAgICAgECAgMCAgICAgIDAgICAgICAgICAgIBAwACAQgfOEhVVFBPT05OTk9OTlBUUkc8JAkBAgICAQICAQACAgICAgIAAQMCAgICAgABAgIBAgICAAECAgACAgICAgIDAgICAgEDAgIDAgICAgIDAgICAgIBAgICAgIBAgEBAg8wSExQUU5OTk9OTk5OTk9RUEtGLwwAAgICAQICAAECAgICAgIAAQICAgICAgABAgICAgICAQECAgECAgIDAgIDAgICAwICAgMCAwMCAgIDBAICAgICAgIDAgICAgICCSFFWFNOUE5OT05OTk5PTk5QT1BSQB0IAgMCAgEBAgECAgICAgICAgECAgICAgICAQIBAQICAQECAwIBAgMDAgIDAgMCAwMDAgQCAgIDAgICAwICAgMCAgICAgICAwIDFzFKWVNPTk1OT05PTk9OT05PTlFVSC8ZBAICAgECAgIDAwICAgMCAgECAgICAwICAQIBAQIDAQECAwECAgICAgMCAgIDAgICAgICAgICAgICAgICAgMCAgMCAgICAQUSLz9MVVFPTk5OTk5OTk9NTk5OTlBTTEEyFgYBAgMCAgMDAgICAQECAgICAgICAgECAgICAgICAQECAgEBAwICAgMCAgIDAgICAgIBAgMDAgIDAgIDAwICAgMCAgICBRQsREtOUU9OTk5OTk5OTk9NTU9PTk9RUE1HMBUDAwMDAwICAgICAQECAgICAgICAgICAgIBAgICAQECAgEBAgICAgMCAwICAwICAgMCAgIDAgICAgMCAwMCAwICAgICDSQ5TlFNTlBPTU1OTk5PTk9OT05OTk9PUFJPOyYMAQMDAAECAgECAgMBAQEBAgMCAwIDAgIDAwEDAQECAwICAgICAgIDAgICAgICAgMCAgICAgIBAwICAgIDAgIDAgQLIjhIVlRNTU5OTU1PT05OT05PT05PTk5OT1RVRzkiCwQCAQACAwEBAwIAAQECAgMCAwICAgQDAwIDAQECBAMDAgMCAgICAgICAgICAgICAgICAgICAgIDAgIBAgICAgsdNUdPVlNPTU5OTU5OTk5OT05OT05PTk9NT1JVT0c2HAsCAQICAgACAgIBAQICAgMCAgABAgICAgICAQICAgECAgMCAgICAwICAgICAgICAgICAgIDAwIEAgICAgICBBgtRU9OUVBPT05PTk5OTk5OTk5OT09PTk5OTlBRTk9ELBgEAgICAgIBAgMBAQMCAgIBAQABAgMDAgMCAAECAgABAgMDAgIDAgICAgICAgQDAgICAwMCBAMCAwICAgMJGDFCUlVQT09OTk9OTk5OTk1OTk9OTk5PTU1OTk5OUFZRQDAXBwICAwEAAQECAgIEAQEDAwMCAgMBAQECAQECAwIDAwICAgIEAgICBAMDAgMDAgIDAwMCAgMCAgQCAggZLUJLUlNQTk9OTk9PTk5OT05OTk9OTk5PTU1OT05OUFRRSkItGAcCAwEBAQICAgIDAQECAwMCAgMBAQIDAQECAwECAgICAgIDAgICAgICAgMCAgICAgIDAwMDAwEBAxktQVBPT1BOTk5NTU5OTU1OTk5PTk5OTk5OTU1OT01OTlBOT1BBLBgDAQABAwICAwEBAgACAgEBAgICAgICAAECAgECAgICAgICAgIDAwIDAwICAgMDAgICAgIDAgQLGTBCUVdTTk5OTk5NTU5OTk5OTk1OTk5OTk5NTU5OTk5OTk5OUldQQjAXCwMBAgICAgIBAAEDAgIBAgICAgICAQECAwECAgMCAgICAgMCAwICAgMCAgMEAgECAgICAg0cLUJMUFRRT05OTk5OTk5PTk5OTk5OTk9OTk5OTk5OT05OTk9OUVNQS0IsHgsCAgMCAgIBAgICAwICAgICAgIDAgMDAwICAgICAgIDAgICAgMDAgMCAgICAgMCAwEFDCI2RlFTT1BPTk5OTk9OTk5OTk5OT05OT09OTk5PTk5OTk5OTk5OTk9PUlJENyIMBQECAgIDAgICAQICAgQBAgECAgICAwICAgICAgICAQICAgEBAwICAwICAQIDAQYXJDhGT1VTT05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU1NTU1NTk9NTk5QUlRPRzgkFQUBAQICAgICAgICAgIAAQICAAECAgICAgICAwICAgICAgEBAgIDAwMDAQIBBRYwO0hOTVBQTk5OTk5PTk5PTk5OTk5OT05OTk5OTk5OTU1NTU1NTk5OTk5OUFBOT0g5LRMDAQICAgECAgICAgIAAQICAAECAgICAwICAgIDAgIBAgICAgMCAgICAgIJGjRIUFZUUE5PTk5PTk5OTk9OTk5PTk5OT05OTk5OTk5PTk5OTk5PTk9OTk5OT05RVVRORDAXCQIDAAICAgEBAgQBAQIDAgICAwICAgMCAgIDAgICAwICAgMCAgIFCg4eMUJPUlVSUE5PTk5OT09PTk9PTk5PTk9OT05PTk9OTk5PTk5OT05PTk9OT05PTk9QVFVSTEAxIBAJAAICAwEBAwMCAQMDAgIDBAICAgMCAwICAQECAgECAgIBAQQWJC8/R0pPT09PT05OTU1OTk5OTk5NTU5OTk5PT01OTk5OTk5OTU1OT05PT05NTU5PTk5OT09PT0xLRjIgCwICAgIDAgMBAgMDAgMDAgEBAgICAgICAAECAgICBAMFDhstPEdSVVJPUE9NT05NTU1OTk5OTk5NTU9OTk5PTk1NT05PTk5PTU1OTk9PT09NTU5OT05PTU1OT1RYWEg6JRMLBAQCAwQBAQQCAgMDAwABAgMCAgICAwECAwICCxIYKDRAR0tQUVBPT09OTk5OTk5OT05OTk9PTk5PTk5OT05OTk9OTk5OTU1OTk5OTk5OT05PT05OTk5PT1JTU0xIPS4kFAoDAgIDAwECAgICAgICAwIBAgICAQEBAgYQIy88Sk5RUlBQT05OTk5OTk5OTk5OTk5OTk9OTk5OTk5OT05OTk9OTk5OTU1OTk5OTk9OTk5OTk5OT05OT09NTlBVUkxFMiMYCAUCAQAAAQIDAwICAgMAAQICBAYHDRgoOEFJU1RWU1FPTk5OTk5NTU5OTU5OTk1NTk5OTk5OTU1OTU5OTk5NTU5OTU5OTk1NTU1NTU5OTU1OTk5OTk5NTVFUV1NPQjcwIxcOBwYEAAECAgICAwIAAQIGDhkdKTQ+SEtMT05QT09OTk5OTk5NTU5OTk5OTk1NTk5OTk5OTU1NTU5OTk5NTU5PTk5OTk1NTU1NTU5OTU1OTk5NTk5NTU5PUE5OSkdFPDQpHRgOBAECAgICAgMIDxkfKDU8SFFTVVRST05OT09OT05PTk5OTk5PTk5OTk1NTk9OTk5OTU1OTk5OTk5NTU5PTk5OTk1NTU1NTU1OTk5OT05OTk9NTU9PTk9QUlRVVVJIPDUoHhkQCQMBDxceKjM3O0JHT1JUVVNRT05PTk9PT05OTk9OTk5PTk5OT01NTk9OTk5PTU1OT05OTk9NTU5PTk5OTk1NTU1NTU1OTk9OT05OTk9NTU5PT09QU1JUVVROR0M8NzQqHBMMMDY9RkxMSktNTk5PT1BNTU5PTk5PTk1NTk5OTk5OTU1OT05OTk5NTU5OTU5OTk1NTU1OTk5OTU1OTk5OTk9NTU5PTk9NTk1NTk5OT05PTU1PTk5OT05NTEtMTExEOTApQEdQWV1cWFVVUlBPTk9NTU5OT05OTk1NTk5OTk5OTU1OTk5OTk5NTU5OTk5OTk1NTU1OTk5OTU1OTk5OTk5NTU9PT05NTk1NT05PTk9OTU1OTk1NT1BRU1VYXFxZTkQ9PkZNWV1cWVdUU09PTk9PTk1PTk5OT05OTk9OTk5PTk5OT05OT01OTk5PTk5PTk5OTk9NTU5OTU1OT05OTU5OTk9PTU5OTk9OTk9OTk9PTk5OT01NT1FSVFZZXF1ZUEhAKjE5RE1OS0xNTk5PUFBOT05OTk5OT05OTk5OTk5PTk5OTk5OTk5OTk5NTk5OT05OT05NTU9PTU1OTk5OTU5PTk9OTU5OT05OT09OTk5PTk5PTU5OT09OTUxLTE1FPTYxDBMbKTQ2O0RHTlJUVVNSUU9OTk5OTk5OTk5OTk1OTU9OTk5OT05NTk9OTU5OTk5OTk9NTU5OTk5OTk1NTk5NTk5OTU5OTk5OTk1NTk5OTU1PUVJUVFNOR0I8NTMqHhYPAwQHDxkeKDU8SFBUVlVSUE9OTk5OTk5OTk5OTk5PTk5OTk5OTk9OTk9PTU1OTk5PTk5NTU5OTk5OTk1OTk5OTk5OTU1OT05OTk1NTU9OTk1PUlNVU1FIPjUoHRgQCAQCAgIAAQIGDxgdKTM8RklJT09RUE9OT05OTk5OTk5PTk5OTk5PTk9OT09OTU1OT09OTk1OTk5PTk5OTk9OTk9OTk5OTk5OT05OT05NT09RUE9OTEtIPzYoHBgOBgIBAgMCAgMBAQICBAYHEBciMThCT1RYVVFOT05OTk9OTk5OT05OT05OTk9OTk9PTU1OT05OTU5OTk5PTk5NT05OTk5OTk5PTk5OT05OTk9OT1NVVlZUSkI4KRsNBwcFAgMBAQICAgMCAgIBAAABAgQIGCMyREpUVFBOTk5OTk5OTk5PTk5OTk5PTk5NTU9OTk5OTk9OTk5OTk5OTU1OT05PTk9OTU1NTk5OTk1NTk5OT1BSUE1KOy4jDwgDAQACAQICAwICAgMDAgICAAEDAwICAwsSIi49R0xTU1FPT05OTk5OTk5OTk5OTk5NTU5OTk9OTk5OTk5OTk5OTU1OTk9OTk5NTU1NTk5OTk1OUFFSUUtIPzMoFxELAgMCAgICAQICAgICAwMBAgICAwMCBAECAgMFDBMnOUlYWVVQT09NTk5OTk5OT01NTk5OTk5PTk5OTk5OTk5OTk1NTk5PT01NT05OTk5PTU5OTU5QUFRVU0c8LBkQBgMDAgIBAQIDAQECAgIDAgIDAgIDAgICAgICAgMCAgILIDJGTExOT09QTk5OTk5OTk1NTk9OTk5OTU5OT05OT05OTk1OTk5PTk1PTk9OTk5OTk5OUE9PT0tIQC8kEwMCAgICAgMAAQICAQECAwICAgICAgICAgICAgICAgIDAgEBCA8hMj9LUVRTUU5OTk5OTk5PT05NTk5OTU1OTk1OTk5NTU5OTk5OTk1NTk5NTk5OTU1PUVRSTkEvHg4KBQICAgABAgICAgICAgICAgEBAgIBAgICAQMCAwICAwMCAgMCAgIJGC9DTVVVUU9OT05PT01PT05OTk5OTU1OTk5OTk5NTU5OTk5OTk1NT05OTk9OTU1PU1VPSDMYCAICAgICAgABAgICAgICAgMCAgEBAgICAgIDAgIDAwMCAgMCAgICAwMDBhIsOUdPT1BRTk5OTk5OTk9NTk5OTU1OT05OTk5OTk5PTU1OTk5OTU5OTk5OUFBOUEY7MBYFAQIDAgIBAQICAgMCAgMCAgICAwICAgMCAgICAwICBAIDAgMCAgIDAgICAwUUJDlIUFZVT05PT05OTk9NTU5PTU1OTk5OTk5OT05OTU5OT05OTU5OTk9QU1ZQSDckFQcBAgIDAgIBAgICAgMCAwIDAgICAwICAgICAgICAgECAwICAgIBAQIDAQICAwIFCyM2RlNUT09OTk1NTk5NTU5OTU1OT01NTU5OTk5OTU1OT05OTk5NTU9PUlJGNiELBAECAgICAQECAwIDAgIBAQEDAgICAgICAgICAwMDAAECAgICAgICAAIDAQECAgICAgseLkJLUFRRTk1NTk5NTU5OTU1OTk1NTk5OT05OTU1OTk9OTk5OUVNQS0ItHQkBAQECAgEBAAECAgMDAgIAAgICAgICAgEDAgMDAwICAgICAwIDAgICAgIDAgICAgICAgQLGTFDUldTT05OTk1OTk5PTk5OTk5OTU5OTk9PTk5OT05NTk9OU1dSQjAZCwQCAgMCAgICAgICAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgQCAgMCAgICAwECAgEBAxkuQlJQT1BPT09OTk5PTk5OT05OTU1OTk5PT05PT05NTlBPUFFCLBgEAgEDAgICAgIDAwICAgIDAgMCAgICAgMCAwICAwMCAgIDAgICAgIDAgICAwEDAwMCAgICAgIBAQgYLUNNU1NRT09NTk5OTU1PTk5OT09OTk5PTk5OTk1NUFNTSkMtGAgCAgICAgIAAQICAgICBAIBAwIBAAICAQECAgICAwMCAgICAgICAwICAgICAgIDAgICAgICAQIBAQMIGDFDU1VQTk9OT05OTU1OTk5OT09OTU5OTU5OTk5OUFVUQzEYCAMDAgMCAwIBAQICAwEDAwABAgIBAgMCAAECAwMCAgICAgICAwICAQICAwICAwMCAQICAgABAQECAgICAhgtRk9OUVBOT05OTk5OT05OTk5NTk5OTk9OTlBRT1BELBgCAgICAwMCAwICAgEBAgICAwIDAgICAgICAgMBAwICAgMCAgICAgICAgICAgICAgICAgICAgABAQECAgICAQkdN0dPVVRPTU5OTk1OT05OTk5OTk5OTk5NT1NWT0g1GwsCAgICAgICAgICAgEAAgIDAwICBAMCAgMDAwMDAwMDAgIDAgICAgICAgICAgECAgICAQICAgAAAQIBAQIBAQMLIjdGVVROTU5OTU5OTk1NTk5OTk5OTU1OTlNVSDgiCgQCAgIDAgIBAwMBAgMCAQEBAwIDAwMDAgMDAgMCAwMDAgICAgICAgICAgICAgICAgICAgICAgACAgIBAQICAAACCyM6UFJOTk9OTk5OTk1NTk5OTk5OTU5PT1FOOSQLAgICAgMDAgABAwMCAwICAAABAgIDAwMCAwMDAgIDAwICAgMCAgICAgICAwICAgMCAgIDAgICAgICAgMDAgICAgICBRUwSE9PUU9PTk9OTk5PTk5OTk5PTk9QUExELRUEAgIDAgIDAgMDAgMCAgIDAgIBAwECBAMBAgMDAgEEAwMCAgICAgIDAgICAwICAgMCAgICAgICAwICAgIDAgMEAgICAQYVNENMU1FOTk5OT05OTk5PTk5PT1FVTEAwEwYBAgIDAwIDBAICAgICAgIDAgMCAgEBAwQBAQICAQECAwICAgICAgICAgICAgICAgICAgICAAECAgABAgICAgICAgICAwEEGjFIVlFOTU1PTk5OTk5NTU5OTVNZSzAYBAICAgIDAAECAwICAgMBAQICAgICAwICAwICAgIDAAECAgIBAgICAgICAgICAgICAgICAgECAAECAgEBAgICAgMEAgICAgICCR5BU1BPTk1OT05PTk5NTU5OTlJYRiAIAwICAgICAAEDAwICAgMBAQICAwMDAwEDAgIDAgIDAQEDAgMDAgICAgIDAgICAgICAgICAgICAgICAwICAgEBAQIDAgIBAgICAQ8wR0tQUFBOT05PTk5NTU9RUExJMQ4DAgMCAQICAgECAwICAgIEAwIDAgMDAgICAgMDAgMDAgIDBAMCAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMBAAICAgIBAwIBAgwkO0hTVFBOT05OT09NTVFVVEc5IAgBAwMCAQEDAgICAgEBAwMCAgIDAwICAwICAgMCAwIDAgMDAwMDAgMCAgICAgICAwICAgMCAgICAQICAgEBAgICAgIDAQECAgABAQUTLD9TVlFOTk1NTk5OTlFXUjwlDAIBAgIBAQMDAwICAgEBAgICAwICAgEDAwIDAgIBAQIDAgMDAgMCAgICAgICAgICAwICAwMCAgMCAgICAgABAgICAgICAAECAgIBAQECGTNOVlBOTU1OT05PUE9USy0UBAMCAgIAAQIDAgICAwABAgICAgECAQEDAgMCAgMAAQICBAICAgECAgQCAwMCAwICAwIDAgMDAgIDAgIBAgICAgMCAgIDAgICAwICAgIBEChMU09PT09OTk9PT01QRCMMAwEBAgICAgIDAgICAgMCAgMCAgICAgIDAwEBAgICAgMDAgICAwEBAgICAgMDAwMDAgICAwMCAgICAgMDAwICAgICAgIDAgICAgICAgMCBhg8SUxRUk5OTk9RUkpDMhMFAgEBAQQCAgMCAgIDAwICAgMCAgIEAgIDAgECAgMDAwICAgMDAwEBAgICAgICAQICAgICAwICAgMCAgICAgICAgICAgICAgIDAgIDAgICAxEwQEtTUk5OT05SVUk5IwoDAgICAgMCAgMCAAECAwABAgIBAQMDAgECAwICAgICAgMDAgICAgECAgICAgICAQICAwIDAgICAgICAgICAgICAgICAgICAwICAgIDAgMDBAojOEhWVE9OTlBVVkcwGAMCAgIDAwMDAwICAQECAwECAwICAgMDAgECAgICAgMCAwIBAAEBAgEBAgICAgIDAgICAgICAgMCAwIDAgMCAwICAgICAgIDAgICAgICAgQCAwMPKT9UVU5PTk1VVD0lCAECAgMDAgQCAwICAwICAwIDAwMCAgIDAwMDAQICAgQCAgICAgMDBAICAgMDAgICAgICAwMCAgICAgIDAgICAwICAgMCAgIDAgMCAwMCAgMCAgIGGjVRU05RT05TUTUYAwICAwICAwMCAwIEAgMDAwMDAgQDAwIDAwICAgIDAwMDAgIEAgMDAwMDAgICAgICAgIDAgECAgMDAQICAgICAgICAgMCAwICAwICAwICAgICAgICDipIT01SUk5OSCoOAwMDAgIDAwIDAgICAgIDAwMDAwMCAgIDBAIDBAECAwIBAQICAgICBAICAgICAgICAQMCAgICAgICAgMCAgICAgICAgICAgICAgICAgIDAgICAgIBBx08R0xVVU5HPh4IAQMDAgMCAgMBAwMCAgICAwIDAgIDAwMCAgMCAgECAgIBAQICAgMCAgICAgMCAgICAgICAwICAgICAgMDAgECAgICAgMCAgIDAgICAwICAgICAgICBxg1Q0xWVUxDNRgHAgMDAwMCAwICAwICAgMCAwICAwMDAgMDAwICAwIDAwMDAwEDAQIDAgMDAgICAgMDAgMCAgICAgIDAgMCAgICAwICAgICAgIDAgICAgIDAgICAgIBBA4oPUxZWUw7KQ4EAQICAgIDAgQDAwIDAwIEAgICAwICAwIDAgICAgMCAwQCAgEBAQICAwIDAgMBAgICAgMDAgMDAgICAgICAgICAgICAgIBAgICAQICAgICAgICAgIBAgYeNkxdXU01HgUCAQICAgEDAgICAwIDAQEDAgEBAgIAAQICAgIDAwEBAwMDAwIDAAEDAgICAgIBAQMEAgMCAgIDAgMCAgMCAgMCAgICAgIBAgICAgICAgICAgICAgMCAgMaM0tdXk0zGAICAgICAQABAgMCAwMDAgECAgEBAgIAAQICAgICAgABAgICAwIDAAICAgICAgMCAgMDAwMCAwIDAgMCAwECAgEDBAICAgICAgIDAgICAwICAgMCAgICAwMQK0VZWUQpDwIDAgICAwICAgMCAgMCAgICAgICAgICAgEDAgICAgEBAgMCAgMCAgICAwICAwMCAgIDAgIDAwICAwIDAgMDAgMCBAICAgMCAgIDAgICAwICAgMCAgIDAgMIHzxPTjocCAICAgICAgICAgMCAQMDAgICAgICAgICAgIDAgICAgAAAgICAgIDAgICAwICAQICAgMCAgICAgICAgICAgIDAgICAgMCAgICAgICAgICAgIDAgMCAgIDAgIEFTZHRTETBAECAQECAgICAwICAgICAgICAgEBAgMAAQIDAgICAgICAgIBAQIDAgICAgEBAgICAgICAgMCAgICAgICAgICAQMCAwICAgICAgICAQIDAgICAgICAgICAgMBDzBAPioNAgICAAEDAgICAgMCAgICAgICAgEBAwIBAQIBAgICAgICAgMBAQICAgICAgAB" },
165
+ "gemini-48": { width: 48, height: 48, source: "GeminiWatermarkTool/bg_48", dataBase64: "AgEBAAAAAAEAAAAAAQEAAAEBAQAAAQBxcAEBAQEBAgEBAgEBAgMBAQEBAgEDAgEBAAAAAAAAAQEAAAAAAAEBAQAAAAEAASGAgCAAAgABAQEBAQECAgIBAQEBAQICAwEBAQAAAAAAAAEAAQICAQAAAgEAAAEAAUiAgEgAAQABAQECAgACAwMBAQICAgMBAQEBAQIAAAEAAAEAAQEBAQEBAQECAQEAAXCAgHgAAQEBAgECAwEBAgIBAQICAgEBAQICAAAAAAAAAAEAAAEBAAABAAAAAAEAIICAgIAgAAABAgACAgEBAQADAwICAQEBAQEBAAIAAAEAAQEBAQAAAQAAAAABAAABUICAgIBgAAABAAECAgABAQECAwMDAQEAAAEBAQAAAAEAAwEBAQAAAQEBAgIAAAIRgICAgICAEAABAAAAAQICAQEBAQEBAQEBAQEBAAAAAAIAAQIBAQAAAQMBAQEAAQFQgICAgICAUQECAAEBAQMCAQECAgEBAQEBAQEBAgAAAQIBAgEBAgIBAQECAQICARGAgICBgICAgCACAQIAAQIBAwICAwMDAgIBAQICAQAAAQEBAAIBAAEBAAEAAQABAXCAgICAgICAgGABAQEBAQEBAQEDAwMCAwIBAQICAgEAAAECAAEBAAAAAgEBAgABQICAgICAgICAgIA4AAACAgMBAgIBAgICAQECAgEBAAABAAABAQMAAQIAAgACAQAQgICAgICAgICAgIB4GAECAwICAgIAAQEBAQICAgEBAQABAQAAAAEAAQEBAAMCARBwgICAgICAgICAgICAcAgBAQABAQECAgEBAgICAgECAQABAAABAAEAAQABAQEBAWmAgICAgICAgICAgICAgGACAQEBAQECAgEBAgICAgECAQEBAAABAAAAAAEAAgEBUYCAgICAgICAgICAgICAgIBQAQABAQEDAQEBAQICAgEBAAAAAQEAAAEAAQAAAQFQgICAgICAgICAgICAgICAgICAUAABAQEDAQEBAQECAgEBAAIAAQEAAAEAAAABCGCAgICAgYCAgICAgICAgICAgICAgGgQAgIBAQEBAwQDAgABAQABAQABAQEBAAAYcICAgICAgYCAgICAgICAgICAgICAgIBwEQQCAQEBAgECAgEBAQAAAQEAAAEAADh4gICAgICAgICAgICAgICAgICAgICAgICAgEIBAQIDAgMDAQEAAgEAAQAAAgEgYICAgICAgICAgICAgICAgICAgICAgICAgICAgIBwEAIDAgICAgEBAAEAAAAAEFGAgICAgICAgICAgICAgICAgICAgICAgYCAgICAgICAgFAQAgECAgEBAAEAASFggICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAUCABAgEBACBIeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBwSCAEcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBxcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBwASBIcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIB4SCABAQMAASBQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAYCACAgEBAAEBAAACEFGAgICAgYCAgICAgICAgICAgIGAgICAgICAgICAgICAgFERAQECAgEBAQIBAQAAAQIQcICAgICAgICAgICAgICAgICAgICAgICAgICAgIBgIAEBAQEBAQEBAQEBAQAAAAEAAUCAgICAgICAgICAgICAgICAgICAgICAgICAeTkBAQEBAQEBAQEBAQEAAQABAAAAAgAQcYCAgICAgICBgICAgICAgICAgICAgIBwGAEBAQICAQECAgEBAQEAAQABAAEAAAAAEGiAgICAgICAgICAgICAgICAgICAgGAIAQEBAQICAQECAgEBAQEBAQIBAQEAAAAAAQFQgICAgICAgYCAgICAgIGBgICAUAMDAgECAgEBAwMCAgEAAQEAAQEBAQAAAAABAQIBUICAgYCAgYCAgICAgIGBgIBQAQQEAgICAgEBAwMBAgEBAQECAgECAwMCAgICAQEBAWGAgICAgICAgICAgICAgGgCAgMDAQABAgICAwMBAQMDAQECAgEBBAMCAwIDAQEBAQpxgICAgICAgYCAgICAcBACAwMDAQEBAgICBAMAAQMDAgICAQICAAACAwIDAgIAAQIZeICAgICAgICAgICAEAACAgAAAQECAwIBAAABAQEBAgICAgMCAQECAgICAgIBAQICOICAgICAgICAgIBAAQEDAgEAAQEDAwECAQAAAAEBAgEBAQEBAQEBAQEBAAECAgICAGCAgICAgICAgHABAQECAgACAQECAQEAAQAAAQEBAgIBAQEBAQEBAQEBAQECAgMCASCAgICAgICAgBABAQACAgECAQEBAQECAQEBAQEBAQEBAQEBAQECAgAAAQACAgIBAQBQgICAgICAUAEBAQECAwABAQEBAQEBAgIBAQEBAQEBAQEBAQECAgABAQICAgEBAAEQgICAgICAEAEBAQECAgIBAQEBAQEBAgIBAQEBAgICAgICAQEBAgEBAQICAQEBAQEAYYGBgIBQAQICAgEBAQEBAgIBAQEBAQECAgEBAgICAgICAQEBAQEAAgIBAAEBAgMBIIGAgIAgAQICAAEBAQEBAgIBAQEBAQECAgEBAgICAgEBAgEBAQEBAgICAgAAAgIBAXmAgHABAQIDAQECAgAAAQEBAQEBAQECAgEBAgICAgEAAgIBAQEBAgICAgEBAgIBAUmAgEkBAQICAQEBAgEBAQEBAQEBAQECAgEBAQEBAQICAQECAQIBAAEDAwEAAQECAiCAgCEBAQICAgIAAQABAgIBAQICAQECAgEBAQEBAQICAQEBAAEBAQEBAgEBAQADAgFwcAEBAQICAgIBAAEAAgIBAQICAQECAgEB" },
166
+ "gemini-96": { width: 96, height: 96, source: "GeminiWatermarkTool/bg_96", dataBase64: "BAMEAwMDAwQAAwMEAwIFAgICAAIBAQEBAwIDBAIDAwMDAwMCAwIAAQEBAQECAjl5cTsBAwACAQIEBAIEAwMEAwMDAgQEBAIDAQMCAgECAwMCAwMEAwMEBAMDAwMEBQQEAwQCAwEDAwQCAgMDAQIEAwICAQEAAQAAAgIDAwEDAwIDBQMDAQAAAAEAAAACEICAgYEJAgABAgICAwMCAgIDBAMDAQECAgIBAgACAAEBBAQDAwMDAgMEAwMDBgUEBQQFAQACAQIEAwIAAQEDAQEBAQICAQABAQABAQEAAQICAgMDBAMDAAEAAQAAAQICKYCAgYAxAAABAgEAAAEBAgUEAwQEAgABAgIDBAQCAwUDAgIEBAMDAwQEBAMCBAMEBAMDAAEBAgIFAgMAAQICAAAAAgIBAAEAAQEAAQIBAQABBAMCBAECAAEAAAABAgIDUoCAgYFQAQEBAQEAAAECBAQDAgMEBAICAwIDBAQEBAMEAgMEBQQCAQMDBQQDBAMFBAMDAAABAwUEBAMBAgEBAAADAQMDAAIBAQACAAEAAAACBAMCAgMCAgEEAwABAAEDcoCAgIB5AgMBAgMBAgMDBAQEAwQEAwIBAQMEBQQEBAQEBAMDAwEAAwIDBAMDAgUEBQQDAQADAwMEBAQDAgQEAAEBAQIDAgEAAgIBAQEBAAECBAQEBAEEBQIEAAIEAgIhgYCAgICAIgICAgMDAgECAwQDAwMEAwICAQMDAwQEBAUDAgMEBAIBAwQDAwMDBAQDBAMDAQIBAQQEAwMEAwABAAICAQEDAQECAwMDAwIAAQIDAgICAwIBBAIBAgECAgJSgYCAgIGASQICAgIEAwIBAgIDAwUDBAICAwIDAwMDBAMCAgMDAwIDAgMGBQQEAwMDBAMDAQMCAgMDAgQEAgIBAgMEAQEAAgMDAwECAwACAgICAQEDAQEBAAEBAQECAgFxgYCAgYCAeQICAgIEAwMEAwIDAgMDAQICAgIBAwQDAwQCAQMDAgMEAwQDBQUEBAQDBAMDAwICAgECBAMBAwIDAgIEAQECAwQBAgICAgACAgIDAgMEAwIBAQECAQQDAyqAgYCAgYGAgCEDAgEDAwIDAwMDAwIDAgEBAQEDAwIEAgEAAQEEAwMEAwIEBQQCAgQEBQQEAQMBAQABAwIBAwECAgMCAgECAwQCAwABAAICAgICAgIDAwEBAAEBAQIDA1mBgICAgYGAgGECAAEDBAQDAwMCAgMCAQEAAgIDAgMCBAABAgIDBAQEBAQFBAIEAwMDBgQEAwIEAwEBAQEDAwICAQEBAgMDAgQBAQEBAQMCBAICAQQDAwEBAAEAAQIEEYCAgICAgIGAgIARAQICAgMBAgICAQEBAQMBAQECAgECAgIEBAMDAwMCBAQDAgMDAwQCAwIDAwIDAwEBAQECAwECAgEBAgMDAgIBAwEAAgQDAwICAwMCAwECAQEBAQIDUICAgICBgIGAgIBCAgIBAAIEAwQCAgICAQIBAQMCAgMAAgEEBAQDAwICAwQBAwEDAgMDAwQFAQEBAgABAgICAAABAgMAAgECAQADAwMAAAEDAgMDAwIAAQIBAgAAAgARgYGAgICAgIGAgIB5CAEBAgICAgICAQADAgECAQQDAwIBAgEEAwICAgMDAgQEBAMEBAYDAwMDAQIAAgEAAgMCAQACAwMCAgICAQICAwAAAQIDAgMCAwMCAQEBAAIBAgNBgIGAgICAgYGBgICAQQICAgEEBAQCAQECAwEBAgQDBAMCAQEBAgIDAwMDAgMDAwIEBAUEAwMDAgEBAQMEAQEBAgECAwQCAQICAgEDBAAAAQIDAwMEAwMAAQABAAAEBBJxgYGAgICBgYGCgYGAeQkCBQQEAwIEBAIDAgQBAwQEBAICAgIDAwMEBAMDBAQFBAUGBAIEBAMDAgMCAgMFAwECAQEAAgECAQMDAgIDAgIBAgIDAQIEBAMCAQECAgIDBFKBgYGAgIGBgYKAgYGBgUIDAQMEAgMGAwIBAQIDBAMEBAICAQMDAwQDBAMEBQYDBAIFAwQDBQMDAwMCAwMDBQMCAgABAgEEBAMDAgMBAgEDAwIDAgEDBAUCAwIDAQIDEoGBgYGBgYCAgICAgYGBgHkRAwMCAwMDBAMCAQQCAwMDAgIBAgIDBAIBAwMDAwMDBAMDAwMCAwMBAgMDAwUEAwQCAgEBAgEEBAQEAAIDAwIDAQIBAQIDAQACBAQDAwMCUoGAgYCAgYGAgICBgYCBgIBZBAICAgMDAgICAQMEAQADAQECAwMEBAMCAwIDBAMEBQMDAwIDBAMEAgMEAwICAwMEAgEBAAIDBQQDAQMBAQIDBAIEBAMCBAQDBAUEBAMpgIGAgICAgIOBgICAgYGBgICBIgEBAgQCAQICAAICAgICAwIDAwMDBAMDAwQEAwICAgQDAgMCAwQCAgQEAgQDAgMFBQQCAQADBAQDAQICAQIDAgIBBAICAAIDAwIDAwNxgYCBgICAgIGAgICBgoCBgICBcQkDAwMCAgEBAQIDAwICAwIDAwIDAwMDAwMDBAICAwIDBQMDAwICAwQDAgEDAQICAgMBAgICAwMCAgMAAgMEAwMEAwICAQEBAQEDBEKAgYCAgICAgICAgIGBgYCBgYGBgEkCAwMCBAEBAQEDAwIDAgMCAwMDAQQEBAIEBQQCAwECAgICBQICBAQCAwIDAQIBAgICAgICAgMBAgEBAgMDAgQDAgICAQECAAMEG4GBgYGAgICAgICBgYGBgYGAgICCgYAhAwMEBAIBAwMDBAMEBAMCBAMDAwMFBAMDAwMDAgICAgQEBAQCAwMBAQEBAQECAgEAAAAFBAICAgEDAwMCBAMBAQIDBQMAAQIRcoGAgYGBgICAgICBgYGCgYGAgYGBgYBxCwQFBQMCAAIDAwMDBAQDAwMEAwMDBQIDAgMDBAMDAwQCAwIBAwMAAAABAAAAAQAAAAEDBAIBAgICAwIDBAMDAgIDAgMCAgJRgICAgYGAgIGAgIGBgIGAgIGAgIGBgYGBWQMDBAMDAgIDBAIEAwUEAwQFBQMCBAMDAgMCAgQEAwIBAgMCAwMAAAABAwMBAgEBAAABAgACAwICAQIDAwMBAgICAwEEA0KBgICAgYGBgIGCgYGBgYCBgICBgICBgYGBgDkCAQQEAQMEAgMBBAQEAwMDAwMDAwMFAgMDAgMDAwQCAwIAAgEBAAABAgIDAQAAAQEAAQEAAwMCAgIDBAQBAQEBAQECI4GAgICAgIGBgYKBgYGBgICAgYCAgICAgYKBgIAgAQQEAgIEAQIFAwQEAQQEBAQCBQQDBAUDBAQEAwMBAwECAQIBAQICAgMEAwEAAQECAQIDAQEBAQECAwIDAgEAAwIReYGAgICAgIGBgICBgYGBgIGAgIGBgICBgIGAgIB4EgIEAgICAgECBAQCAgQEAwMDAwMDAgIDAQMDAgQDAwUDAgIAAQICAwMCAgECAgEBAQIDAgIBAgEDAwMAAQEBARBwgICAgICAgICBgICBgYGAgYGAgYGBgICAgYCBgICAcREDAQEEAwICAQMBAgMEBQMDBAIEAwMDBAMCAwMDAwQCAwIBAQIEAgMCBAICAQEBAgQDAwIAAQMBAwEAAQIDEnGAgICAgICAgIGBgYCBgYGBgYCAgIGAgICAgYCBgICAgXEQAQEFAwICAgMCAgMFBAMDAwMEAwICAwQFAwMDAwICAwICAgMFAwMDAwEBAQICAgICAwMAAgICAQIBAgILcYGAgYCAgICAgIGBgYGBgYCCgICBgICBgIGAgYCAgICBgYFpCAMCBAEAAQMCAgIEAwMDAgMDAwICAwQEAwMDAwICAwEBAgMCBAMCAQMAAQICAgMDAwICAQACAQECAhNqgICAgYCAgIGBgYGBgYCAgYGAgYGAgYGBgICBgoCAgICBgoGBcRQEBgICAQIDBAMBBAQCAgIDAwQDBAQFBQMDBAECAwMCAQMDAgEBAwICAgMCAQMDAQMBAwIDAgIBEnKBgYCAgYCAgYCBgYGBgYCBgYCBgIGBgYKCgIGBgYCAgICAgYKAgHERAgAAAwIDAwMDAwMCAgICAwQEBAMEBAQDAwIDBAMAAgMDAQEBAwIBAgQDAgEBAQIDBAICAgIScoGBgoCAgYCBgYGBgYGBgICBgYGBgYGBgYGBgYGAgYCAgICBgYGAgIBxEAEBAQIDBQMDAwUCAgMCAwQCAwQEAwQEBAICBAQBAAMDAQEBBAMCAwMEAwEBAAICBQMBASJ5gIGBgoCAgICAgICAgICAgICAgICBgICAgYGBgIGAgICAgICAgYGBgYCAeCEBAQECAwMDAwMBAgIDBAQCAwMEAwMDAgIDBgUAAgMDAQECAgICAwMDAwEBAQIEAwMBOYGBgICAgICAgICAgICAgICAgICAgICAgYCAgICAgIGBgYCAgIGAgICBgYCAgIBAAgIDAwEEAwICBAQEBAQEBAQEAwMCAwYFBAMAAQQEAgIBBAIBAwMCAwIBAQICAwhYgICAgICAgICBgICAgICAgICAgIGAgICAgICAgIGAgYGCgYCAgIGBgICAgICBgICAURIDAwMDBAQEBAQEBAQDAwQFAwMDBAQFAgMBAQECAgMBAQMCAgMDAwMCAAIDInCAgIGAgICAgICBgYCAgICAgICAgICAgICBgIGAgYGBgIGBgYCAgICAgYCAgIGAgICAgHEaAwEEAgIEAwMDAgIDAwQEAwMDBAICAQIBAQACAwMBAgQFBAMDBAICAghJgICAgICAgICAgICAgYCAgICBgIGBgICAgYGCgICAgYGBgICAgYGBgIGBgICAgICBgYCAgICAQgMCAQIEAwMDAgIEAwQDAwMDAwIBBAUDAQADAgMCAwMEAwQDBAQDInGAgICAgYGAgIGBgIGBgICBgIGBgIGBgICAgIGBgYGAgICAgICAgYGBgYGBgYCAgICBgICAgICAgHIqAgMDAwMDAwMEAwQDAwQCAgICAwQCAgECAQMDAwMFAgIEAxFZgIGBgICAgYGAgYCBgICAgYCBgYGBgYGBgICAgoGCgoGAgICBgICBgYGBgIGAgYGAgICAgYCBgYGAgIGBUhEDAwQDBAQDAwQDAwMCAwIDBgQDBAECAgMCAwMDAwMIQXmBgICAgICAgYGAgYCAgYCBgICBgYGAgICAgICAgYGBgICAgICAgICBgYGAgICAgIGAgICBgYCAgYGBgIKBgYFSEgIFBAMEAwMDAwMDAwQEAwQDBAICBAMCAwICCUJ5gIGAgICAgICAgYGAgIGAgICBgICBgYCAgICAgICBgICBgYCAgICAgICBgYGAgICAgIGBgICAgICAgYGAgIGCgYGBcUITBAUDAwMDBAMDAwQFAwMBAAIDAgIBAhBCeYCAgICAgICAgICAgIGAgIGAgICAgICAgYGAgICAgICAgYCBgYGBgYCAgICAgYGBgICAgICAgICAgICAgIGAgIGBgYGBgYCBURECBAIEAgICAgIDAgIBAwMEAgIhYYCAgIGBgICAgICAgIGBgYGAgICBgICAgICAgYGAgICAgICAgICBgYOAgoGAgYGBgYGAgICAgICAgICAgICAgICBgYCAgYGBgYGBgYFYKQMDAQQCAwMDAgMCAgEgSHmAgICAgYCBgICAgICAgICBgICAgICAgIGAgICAgYGBgYCBgICBgYGBgYGBgYGAgYGBgICAgICAgICBgICAgICBgYGAgYCBgYGAgYGAgICAgnFRJAQEAwMEAwoxUXmAgICAgICAgIGBgIGBgYGAgIKBgYGAgYCAgIGBgYCAgYGBgoKBgICBgoKBgICAgICBgYGBgICAgICAgIGBgICAgICBgYCAgIGBgIGBgYGBgICBgYGCgXJSKxICOoGBgYCBgYGBgYCBgoGBgYCBgYGBgYGCgYGAgICBgYGBgYCAgYCAgYGBgIGAgIGBgICAgICAgIGAgICBgYGAgIGAgICAgICBgYCAgICBgYGBgICAgIGBgYGBgYGAgYA6cYGBgYKBgYGBgYGBgYKBgYCBgoCBgYGBgYGBgYCAgYGCgICAgYGBgIGBgIGBgYGAgICBgICAgIGBgICAgICAgIGBgICAgIGCgYGAgICBgYGBgYGAgYCAgYGAgYGAgIF5eYGBgYGBgICAgYCAgICAgICAgICBgYCAgYCAgICBgYGAgICAgYGAgIGAgICBgYGBgYGAgYGBgICBgYCAgICAgIGAgIGAgYGAgYGBgICAgICBgYGBgYGAgIGBgIGBgYFyOoCAgICAgICAgYCBgIGAgICAgICBgYCAgICAgICBgYCAgICAgoGBgYCAgICAgYCAgYGBgYGAgICAgYGAgICAgICAgICBgoGAgICBgYCAgICBgYGBgYCAgYGAgYGBgYE7AxUoUnGAgICAgIGAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgIGBgICAgICAgYCBgYCAgICAgICBgYGAgIGAgICAgIGBgYGBgYCAgYGBgYGAgICBgYCBgXpRMQkCAwQDAwIhUHGAgICAgICBgICBgICAgICAgICAgICAgICAgIGAgYGAgIGBgICAgICAgIGAgYCAgICAgYGBgYCAgIGAgICBgYGBgYGBgYCAgYGBgIGAgIGBgXlKIgQDAgECAwQCAQIBAgIpWoCAgYCBgICAgICAgYCAgIGBgICAgYCBgIGBgYGBgYCCgICAgYCAgICAgIGAgICAgYGBgYGBgYGBgICAgIGBgYGBgYGBgYGBgYCAgYFhIgQFAwMBAgIBBAQDAwICAgIEAxBRgICAgoKAgIGBgYCBgICBgIGAgIGBgIKBgYGBgoKBgICAgYCAgYCAgIGBgICAgIGBgYGBgYGAgICAgIGBgYGBgIGBgYGAgYB5QhMDAwYGAwMCBAICBAMDAwUEBAMEBAICEkJxgYGBgIGCgYCAgYGBgYGBgYGBgICBgIGBgoGBgYCAgICAgIGBgIGAgICAgYCBgYGBgYGBgICAgYGBgYGAgYGBgYGBeUEJAgICBAQFAwIEAwECBAIDBAUEAgMFBQIDAgQQUYGAgIGCgoGBgYKBgYGBgYGBgICBgICBgYGBgYCAgICAgYGBgYGAgICBgYCBgYGAgYGBgICBgYCBgYGAgYGBgXpCCgQCAgICAgQFBAMEAwICAwMDBAMCBAQDBQQCAgIAAhFTgIGCgYCBgICBgIKBgYGBgYCAgYCAgICAgYGAgICAgYGBgYGBgYGBgICAgICAgICAgIGBgYGBgYGBgYGBWRIEAwMCBAQEAwQEBAMDAgMEAwMCAwICAwQDBAEBAQIAAQMDKHCAgYCAgYCAgIGCgYGCgYCAgYCAgICAgYCAgICAgIGBgYCAgIGBgYCAgIGAgICAgICBgYGBgIGBgXIiBAMDAwQDAwIDAwQEAwMBAgMDAwIDAgMDAwQDBAUEAwIBAgICAAJBgICAgYGAgICAgIGBgYGAgICAgICBgICAgYCAgYGAgIGAgIGCgYCAgICAgYCAgICBgYGBgYGBSgsDAwMDAwMDAwMDAwUDAQMBAgECBAQDBAMEAwMDAwMEAwQAAgACAQEAGHGBgYGAgICAgIGBgYCBgYGAgYCBgICBgYCBgoGAgICAgICBgYCAgICBgYCAgICBgYGBgXEiAwMDAwMDAwMDAwMDBAUEAwMBAQEBAwMEAwMDAwMDBAICAwIAAQMCAAADARFRgYCAgIGBgIGBgYGAgICAgYCBgICAgYCCgYGAgICAgYCBgYCAgICBgYCAgICBgYGBWQoDAwMDAwMDAwMDAwMDAwUEAwMCAwICAwQEBAMDBAMDAwMEAwMBAQEBAgEEAgEEQoGBgYGCgYGBgYGAgICAgYKBgYCAgYGBgYGAgICBgYGAgYGBgIGBgYCAgICBgYE5AwMDAwQDAwMDAwIDAwMDAwQFAwIBAgECAwMDAgMDBQQDBAQDAgMCAgQDAgMBAwECAiJ5gYCBgYKBgICAgICAgYGBgIGAgYCAgIGBgYCBgYGAgICAgYCAgICBgICAeCIDAgMDAwQDBAMDAwIDAwMDAwUEBAMDAwMDAwQCAwMDBAQDBQQEBAQDAwMDAgIBAwIDBAMTcYCBgYCBgIGBgICAgYGBgYCBgYCAgIGBgYCAgYGAgICAgICAgYGBgIBxEQMDAwMDAwMDAwMDBQMEAwMDAwQEBQMDAwQDBAQDAwMDAwMEBAMEAwMDAQMDAwQDAwMDBAQEEnGBgICBgYGBgIGAgYGAgYGAgYGBgYGBgYCBgIGAgIGBgICBgYGBgHESAgIDAgIDAwMEBQMEBQQEBQMDAwQEAwIEAgIBBAQCAwMEAwQFBQMEAwIDAgEEBAQEAwQEAgMDAxJxgYGBgYGBgoCAgIGBgYKBgYKBgoKBgYCBgICAgYGBgICBgYGBaRIDAwMEAwMDAwMEBAMEBAQEBAMDAgQEAgICAgICBAQDAwMEAwQEBQMEAwECAgMEBAMDAwMDBAMEBAIKaYGBgYGBgYGAgICBgYKBgYGBgYGBgICAgICBgYGBgICBgIFxCwQBAwMCAgMAAgQDAwMDAwQEAwIDAwQFAgMCAgICBAQEAwMDAwMDBAMEAgQCAgMDAwMDAwMEAwECAwMDE3KBgYGBgYGAgIGBgYGBgYGBgIGAgICBgIGCgoCAgIGBgHESBAIDBAMEAwMDAwIDBAMCBAQDAwMDBAQEAwIDAgICAwQDAwIDAgMDAwICAgICAQMDAwMCAgMDAwQBAwMDAxJxgoGBgYGAgIGBgYCAgICBgICAgIGAgYGCgYGBgICCcRICAgQDBAMDAwQCAwIFBAMEAwIDAwMDAwQEAwMEAwICAwQEBAMDAwMCBAIBAQECAgIDAgMDAwMDBQQDAwMDBAMReYGBgYGCgYGBgYCAgICBgYCAgICAgYGBgYKBgYF6EgQDAwMCAwIEAwQDBAMEAgMCAwMDBAUFBQMEAwQDAwICAwQDBAIEAwICAgMCAgIBAQIDAwMDBAQFAwMDAwMDAgMBIYGAgICBgYCBgICAgICAgYGAgICBgYGCgYGBgIEjBQUDAwMDAQQCAwUCAwQEAwMDAwMDAwMCAwMDBAMDAwICAwMDAwMDAwICAgMBAgECAgIDAgMDAwQFBQMEBAQCAwICAjmAgICBgICBgYCAgIGAgYGBgYGAgYGBgYGBgUEEBQQDAwMDBAICBAMDAwMEAwMDBAMDAwMCAwMDBAMDBAICAgUEAwMDAwYCAwIDAgICAgMCAwMFBQUEBAIDAwMCAAICAQNZgICAgICAgYGAgYCAgIGBgoGBgYGAgICAUAECAQQDAwMCAQICBAMDAwICBAMDBAMCBAICBAQEAwIDAwEFAwMDAwMEAwMDBAICAgMAAwMCBAQFBQUEAwQEAwMEAgMBAgMIcICAgICBgoGBgYCAgYGBgYGBgICAgIBxEgIBAwMEBQMBAwQDAgQDAwMDAwMDAgMEAwQCAwMEAwEDAgIDAQIBBAMEAgMDAwMBAwMCAwMDBAMEBAIDBAQDAwMCBAQDAwMCIICAgIGBgIGBgYCAgYGAgYGAgYCAgYEaBAQDBAQDAwQDAwMDAgQFBAIDAgMDAwMDAwQCBAMCAgMCAwQCAQECAQIDAwQDAwICAgICAgQDAwMCAgQEAwMDAwMCAwMDAwMDAkmAgIGCgIGBgYCAgYGBgYCAgICAgUICBAQDAgMEAwQEBAQEAgQBBAQDAwMDAwMDAwQEAgIDAwIDAgECAgMBAwIDAwMCAwIEAgMCAgQCAwMEBAMCBQIBAwMDAgMDAwMEAQlxgIKBgYKBgYCBgYGBgYGAgICBcgQDBQQDAwMFBAIDBQMDAwMCAwMDAgQEAwMDAwMCAgIDAwQFAwMEAgQCBQIDAwMCAwMEAwQDAgQDAwMEBAQDBAQCAgIEAwMDAwQDAgIigYGCgYKBgoCBgYGBgYGBgIGBKgICAgIEBAIEAQMCAwICBAIBAgIEAwMDAwMDAgMCAwICAgMEAwQBAwUDAwMDAwMEBAEDAgEDBAUEBAMDBAMDAwIDAwMEAgIDAwACAQIBWYCAgICBgoCBgYGBgYGBgIFSBAMDAwUEBAMDBAMDBAMDAgMDAwMDAwQEBAICAgEDBAMDBAQDAgICAwUDAwICAwQEBAICAQIEAwQFBAIDBAMEAwIDBQQEAgIDAwQDAgICEXiAgICAgYGBgoKBgYGBgYERAwMDAQQCAwMFAwMCBAMFAwIDAwMEAwMEBAQCAQEDAwMDAwMDAwICAgQEBAIDBAQDBQMDBAQDAgMCAgQCAwICAQMDAwIDAwMEAwMEAwMDA0GAgICAgIGCgYGBgYKBgVIEBAQDAwUDAwIDAgMCAwECAgIDAwIDBQMDAwMDAwMDAwMDAwMEAwQEAwMDAwMDBAMEBAIEAwQCBAICAAICAwIEAgIDAwIEAwMDAwUEAwQEBAl5gICCgYCBgoGBgYGBcRMDAwUEBAMDAwIDAwQCAgUDBAUDAwMDAwIDAwMDBAMDAwMDAwMCAwQEAwMDBAIDAwQDAgMDAgMBAgICAAMDAwACAgICAgECAgMDBAQEBAQDAwJBgYGBgYCBgYGAgYGBQQMFBQQDBAMCAgMDAgUDAwMCAwMDBAMDAwMEBAMDBAMDAwQEAwMEAwECAwMDBAMDAwMDBQICAgEBAQMBAQICAwMBAwMEAgECAgMDBAQEBQQDBAIKeYGBgYCBgYGAgIGBEwIEBQQDAwMDAgIDBAQDBQEDBAMEAwMDAwQEBAQDBAIDAwMEAgMDBAICAwMDAgQDAwMEAgIBAgICAgIEAgEBAwMCAgMDBAICAgIDAwQEBAQDAwICQoGAgYCBgYCBgIFSBAQDBAMDBAQEAwIDAgEBAwECBAICBAMEAwQEAwQEAwMDAwMFAwMDAwECBAMDAwIDAwQGAwMDAAIDAAIEAgEDBQQCAwIAAgMCAQIDAwQEBAQDAgICEoGBgYGBgYGBgYESAwQEBAUDAwUDAwMBAQIEAgIBAQQCBAQDAwMEAwQEBAMEAwMEAwMDAwICAwMCAwMCAQMDAwMDAQEDAgICAQIDAwICAwMBAQMCAAICAwMDAwMDAwMDAmGAgIGBgYGAgVkEAwQEBAQEBQUEBAEDAgMCAgEDAgMDAgMDBAQCAwQDAwMDAwMEAwMDAwECAwMEAwMDAwMDAwQEAgICAwECAgMEAwMDAwMCAgECAQIDAgIDAwMDAwQEAiCAgIGBgYKAgSkDAwICBAUBAwMDAwUEAQIAAQIDAgQAAgMEAwMDAgMDAwMDAwMDAwMDAwMDAwMCAgIEBQMCAgMDAgECAwECAgICAgIDAgMCAgICAgIEAwQEBAQDAwIFAwN5gYGBgYKBcQQDAwMDBAMDAwMDAwUEAQECAgECAQIDAwICAwIDBAMDAwICAwICAgEDAgICAwUCBAQFBQQDBAMDAgICAwADAwEBAgQCAwIBAgMBAQEDAwMEBAQDBQMDAwJKgYGBgYGBUgQEAwMFBAQDAwMDAgQEAgICBAIDAgEDBQQEAgIDBAQDBAQCBQIDAwMCAgICBAQDBAMDBAQEBAMDAgMBAgECAgIDAgIEAwIAAgICAgIBAwQEAgIDAgMDAwMigYGBgIGAIgIEAgMEAwQEBAQDAgIDAQEBAgICAgMCAwICAQIFAQEAAQEBAgACAQEDBAICAwMDAwIEBAQEBAMFAwQCAwMCAAEEAwACAwECAgIDAgICAQIEAQMCAwMCAwMCeYCBgYFxAgMDAwMEBAUEBAQBAQMCAgIBAgEAAAMCAgECAgICAwEBAgMAAgEBAgMDAgMCBAQDAwMDAwMCAwMDBAMDAwMCAgUCAwICAgMCAgIBAwQDAgACAgMDAwMEAwMCUoGBgYFQAgMFBAIEBAMEBQICAgMDBQQBBAICAwQFAwIFAgIBAgICAgICAgIDAgMCAgIDAwQCAwIDAgIDAgMEAgQEAwMAAQMCAQACAgICAgEDAwMDAgIBAwMDAgMEAwMDMYGBgYEqAwQEAwIDBAQEAwMEBAICBAMBAwICAwIDAwECAQICAgECAgECAgICAQECAgECAgMDAgIEAwMDAwQDBAMDAwQDAwIDAQIDAgIDAwMDAwMDBAMDAwMEBAMDAwICCYCBgYERBAQEAwQCBAMCAwMDAwICAgIBAgMBAQEAAQICAwICAQIDAwMDAwIBAgQBAgACAwMDAwIDAwQCAwQDAwUCAwIDAAIBAgMCAgICAwIDBAIBAwQEAgMEBAMEAwMCAzlweToDBAQDAgEDAwIEAwIEAwMCAgICAgEDAwECAgECAwQBAQIDAwMDAwEBBAMBAgIC" },
167
+ "720p-landscape": { width: 80, height: 28, source: "VeoWatermarkRemover/720p-text", dataBase64: "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" },
168
+ "720p-portrait": { width: 80, height: 28, source: "VeoWatermarkRemover/720p-text", dataBase64: "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" },
169
+ "1080p-landscape": { width: 120, height: 42, source: "VeoWatermarkRemover/1080p-text", dataBase64: "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" },
170
+ "1080p-portrait": { width: 120, height: 42, source: "VeoWatermarkRemover/1080p-text", dataBase64: "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" },
171
+ "veo-diamond-1080p-landscape": { width: 96, height: 96, source: "GeminiWatermarkTool/bg_b_96", dataBase64: "AgMCAgICAgMCAwICAgICAgIDAgICAgICAgMCAgMCAgICAwICAQICAgIEAwIBDis+QjIQAQICAgICAwICAwICAwMDAwICAgICAgQBAgMDAwMDAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgMCAgICAgICAwICAgECAgIDAgICAwICAQMBAgMDAgIEFTFFRzcXBQMEAwMDAgMCAgMCAwICAgMCAwIDAgIBAQIDAgMDAgEBAwQCAgICAgICAwICAgICAgICAwICAgECAgECAgICAgMCAgICAgICAgICAgICAgICAgICAgICAQMJHDlPUDweCQICAgICAwIDAwICAgICAgICAwICAwICAgEBAgICAQICAgIAAgMBAgIDAgICAwICAgICAwICAgICAgMCAgMCAQICAgICAgICAgMCAgICAwIDAgICAgIDAgIPKURZWUYqEAMDAgIDAgICAgMCAwICAgIDAgIBAgICAwEBAwIBAQICAgIBAgMCAQIDAgICAgICAgIDAgICAgICAgQCAwICAgICAwICAgICAwMDAgICAgICAgMCAgICAgIZNE1dXkwzGQMEAQMCAwIDAwMDAgMCAgICAwIDAgIDAgICAgICAgIDAwMCAgICAgICAwICAgICAgIDAgICAwIDAgMCAgIDAgICAwICAgMCAgQDAgIDAwIDAgMCAgICAgUeN01cXE02HgUCAgMCAwIBAQMCAgIDAQECAwIDAwICAgIDAgICAwICAgMCAgIDAgICAwICAgICAgICAgMCAgICAwMDAwMDAgICAQICAgMCAgMCAwICAgIDAgIDAwIBBA8oO0tZWUo8KA4FAQMCAwMDAgMDAgICAgMCAgICAgIBAgICAgICAgECAgMBAQICAQECAgICAgIDAgICAgICAgICAwICAwICAwMCAgICAwMDAgIDAgIDAgIDAgMCAwIBCBg1Q0xWVkxCNhgHAQMCAgIDAgICAwICAgICAwICAgMCAwICAgICAgICAgIBAQICAQECAgICAQICAgMCAwMCAwICAgICAwEDAwIDAgICAgMCAgICAwICAwMCAgICAgICBh49SE1VVU5HPh0HAQIBBAMCAgICAgIDAgICAgICAgMCAwICAgIDAwICAgICAgIEAgMCAgICAgICAgIDAgIDAwICAwMDAgICAwICAgICAgICAgIDAgICAgICAgMCAwICDSlIT09SUk1OSCkPAgIDAgICAgMCAgICAgICAwIDAgICAgIDAgICAgICAgMCAgIBAgICAwIDAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgMCAgIDAgICAgICAgIEGDRRU05QUE5SUTYaBQICAgEDAgICAgICAAECAgICAgICAgMDAgICAgABAgICAgICAAECAwECAQICAgICAgICAgICAwICAgICAgICAgIBAgICAgICAgICAgEDAQMCAgIJJD1VVU9PT05UUz8pEAICAgICAgICAgICAAECAgICAgICAgICAgICAgABAgICAwICAAECAwECAgICAgEEAQICAgECAgMCAgICAgICAwICAgICAgIDAgICAgICAgMCAgMYMEZWVk9OTk9UVUg5IwsDAgIBAgMCAgICAgICAwEBAgICAgEDAgICAgICAgMCAgICAQICAwICAgMCAwIDAgICAwIDAgQCAgIDAgICAwICAgICAgIDAgICAwICAgQCAwkkOEhVVE9OTk9SVEtCLxEDAwECAgMCAgIDAgICAwEBAgMCAgIDAgICAwICAgMCAgIEAgICAwICAgMCAgICAgIDAgICAwICAwIDAgMDAwICAgMCAgMCAgICAgICAwMDBRMyQktTUk5OTk9RUkxJPBgGAgMCAgICAgIDAgIDAwICAwMBAgICAQECAgICAgMBAQICAgICAgEBAgICAgICAgIDAwICAgMCAwMDAgICAwIDAgICAgMCAgIDAgMDAgMCDCREUE1QUE9OTk5PT09TSigQAgIDAgICAgMCAwMCAgICAwICAgICAAECAgIDAwIAAAICAgICAgABAgMCAgICAgMCAwICAgIDAgIEAwMDAwMDAgQCAgIEAgIDAwMCAwICEi9MVlBQUE5PTk9OTk9VTzQbBQIDAgICAgICAgIDAgEBAgMCAgICAgICAwICAgIBAQECAQECAgICAgICAgIDAgICAgICAwMCAgMCAwMCAwMCAgICAgIDAgICAgICAQMLJj5TV1FOT09OTk9OTlBXU0AuFAUCAgMCAgICAgICAwEBAwIDAgIDAgMCAgICAgMBAQEBAgEBAgMBAwICAgIDAgICAgECAgMCAgICAgIDAgICAgICAgICAgIBAwACAQgfOEhVVFBPT05OTk9OTlBUUkc8JAkBAgICAQICAQACAgICAgIAAQMCAgICAgABAgIBAgICAAECAgACAgICAgIDAgICAgEDAgIDAgICAgIDAgICAgIBAgICAgIBAgEBAg8wSExQUU5OTk9OTk5OTk9RUEtGLwwAAgICAQICAAECAgICAgIAAQICAgICAgABAgICAgICAQECAgECAgIDAgIDAgICAwICAgMCAwMCAgIDBAICAgICAgIDAgICAgICCSFFWFNOUE5OT05OTk5PTk5QT1BSQB0IAgMCAgEBAgECAgICAgICAgECAgICAgICAQIBAQICAQECAwIBAgMDAgIDAgMCAwMDAgQCAgIDAgICAwICAgMCAgICAgICAwIDFzFKWVNPTk1OT05PTk9OT05PTlFVSC8ZBAICAgECAgIDAwICAgMCAgECAgICAwICAQIBAQIDAQECAwECAgICAgMCAgIDAgICAgICAgICAgICAgICAgMCAgMCAgICAQUSLz9MVVFPTk5OTk5OTk9NTk5OTlBTTEEyFgYBAgMCAgMDAgICAQECAgICAgICAgECAgICAgICAQECAgEBAwICAgMCAgIDAgICAgIBAgMDAgIDAgIDAwICAgMCAgICBRQsREtOUU9OTk5OTk5OTk9NTU9PTk9RUE1HMBUDAwMDAwICAgICAQECAgICAgICAgICAgIBAgICAQECAgEBAgICAgMCAwICAwICAgMCAgIDAgICAgMCAwMCAwICAgICDSQ5TlFNTlBPTU1OTk5PTk9OT05OTk9PUFJPOyYMAQMDAAECAgECAgMBAQEBAgMCAwIDAgIDAwEDAQECAwICAgICAgIDAgICAgICAgMCAgICAgIBAwICAgIDAgIDAgQLIjhIVlRNTU5OTU1PT05OT05PT05PTk5OT1RVRzkiCwQCAQACAwEBAwIAAQECAgMCAwICAgQDAwIDAQECBAMDAgMCAgICAgICAgICAgICAgICAgICAgIDAgIBAgICAgsdNUdPVlNPTU5OTU5OTk5OT05OT05PTk9NT1JVT0c2HAsCAQICAgACAgIBAQICAgMCAgABAgICAgICAQICAgECAgMCAgICAwICAgICAgICAgICAgIDAwIEAgICAgICBBgtRU9OUVBPT05PTk5OTk5OTk5OT09PTk5OTlBRTk9ELBgEAgICAgIBAgMBAQMCAgIBAQABAgMDAgMCAAECAgABAgMDAgIDAgICAgICAgQDAgICAwMCBAMCAwICAgMJGDFCUlVQT09OTk9OTk5OTk1OTk9OTk5PTU1OTk5OUFZRQDAXBwICAwEAAQECAgIEAQEDAwMCAgMBAQECAQECAwIDAwICAgIEAgICBAMDAgMDAgIDAwMCAgMCAgQCAggZLUJLUlNQTk9OTk9PTk5OT05OTk9OTk5PTU1OT05OUFRRSkItGAcCAwEBAQICAgIDAQECAwMCAgMBAQIDAQECAwECAgICAgIDAgICAgICAgMCAgICAgIDAwMDAwEBAxktQVBPT1BOTk5NTU5OTU1OTk5PTk5OTk5OTU1OT01OTlBOT1BBLBgDAQABAwICAwEBAgACAgEBAgICAgICAAECAgECAgICAgICAgIDAwIDAwICAgMDAgICAgIDAgQLGTBCUVdTTk5OTk5NTU5OTk5OTk1OTk5OTk5NTU5OTk5OTk5OUldQQjAXCwMBAgICAgIBAAEDAgIBAgICAgICAQECAwECAgMCAgICAgMCAwICAgMCAgMEAgECAgICAg0cLUJMUFRRT05OTk5OTk5PTk5OTk5OTk9OTk5OTk5OT05OTk9OUVNQS0IsHgsCAgMCAgIBAgICAwICAgICAgIDAgMDAwICAgICAgIDAgICAgMDAgMCAgICAgMCAwEFDCI2RlFTT1BPTk5OTk9OTk5OTk5OT05OT09OTk5PTk5OTk5OTk5OTk9PUlJENyIMBQECAgIDAgICAQICAgQBAgECAgICAwICAgICAgICAQICAgEBAwICAwICAQIDAQYXJDhGT1VTT05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU1NTU1NTk9NTk5QUlRPRzgkFQUBAQICAgICAgICAgIAAQICAAECAgICAgICAwICAgICAgEBAgIDAwMDAQIBBRYwO0hOTVBQTk5OTk5PTk5PTk5OTk5OT05OTk5OTk5OTU1NTU1NTk5OTk5OUFBOT0g5LRMDAQICAgECAgICAgIAAQICAAECAgICAwICAgIDAgIBAgICAgMCAgICAgIJGjRIUFZUUE5PTk5PTk5OTk9OTk5PTk5OT05OTk5OTk5PTk5OTk5PTk9OTk5OT05RVVRORDAXCQIDAAICAgEBAgQBAQIDAgICAwICAgMCAgIDAgICAwICAgMCAgIFCg4eMUJPUlVSUE5PTk5OT09PTk9PTk5PTk9OT05PTk9OTk5PTk5OT05PTk9OT05PTk9QVFVSTEAxIBAJAAICAwEBAwMCAQMDAgIDBAICAgMCAwICAQECAgECAgIBAQQWJC8/R0pPT09PT05OTU1OTk5OTk5NTU5OTk5PT01OTk5OTk5OTU1OT05PT05NTU5PTk5OT09PT0xLRjIgCwICAgIDAgMBAgMDAgMDAgEBAgICAgICAAECAgICBAMFDhstPEdSVVJPUE9NT05NTU1OTk5OTk5NTU9OTk5PTk1NT05PTk5PTU1OTk9PT09NTU5OT05PTU1OT1RYWEg6JRMLBAQCAwQBAQQCAgMDAwABAgMCAgICAwECAwICCxIYKDRAR0tQUVBPT09OTk5OTk5OT05OTk9PTk5PTk5OT05OTk9OTk5OTU1OTk5OTk5OT05PT05OTk5PT1JTU0xIPS4kFAoDAgIDAwECAgICAgICAwIBAgICAQEBAgYQIy88Sk5RUlBQT05OTk5OTk5OTk5OTk5OTk9OTk5OTk5OT05OTk9OTk5OTU1OTk5OTk9OTk5OTk5OT05OT09NTlBVUkxFMiMYCAUCAQAAAQIDAwICAgMAAQICBAYHDRgoOEFJU1RWU1FPTk5OTk5NTU5OTU5OTk1NTk5OTk5OTU1OTU5OTk5NTU5OTU5OTk1NTU1NTU5OTU1OTk5OTk5NTVFUV1NPQjcwIxcOBwYEAAECAgICAwIAAQIGDhkdKTQ+SEtMT05QT09OTk5OTk5NTU5OTk5OTk1NTk5OTk5OTU1NTU5OTk5NTU5PTk5OTk1NTU1NTU5OTU1OTk5NTk5NTU5PUE5OSkdFPDQpHRgOBAECAgICAgMIDxkfKDU8SFFTVVRST05OT09OT05PTk5OTk5PTk5OTk1NTk9OTk5OTU1OTk5OTk5NTU5PTk5OTk1NTU1NTU1OTk5OT05OTk9NTU9PTk9QUlRVVVJIPDUoHhkQCQMBDxceKjM3O0JHT1JUVVNRT05PTk9PT05OTk9OTk5PTk5OT01NTk9OTk5PTU1OT05OTk9NTU5PTk5OTk1NTU1NTU1OTk9OT05OTk9NTU5PT09QU1JUVVROR0M8NzQqHBMMMDY9RkxMSktNTk5PT1BNTU5PTk5PTk1NTk5OTk5OTU1OT05OTk5NTU5OTU5OTk1NTU1OTk5OTU1OTk5OTk9NTU5PTk9NTk1NTk5OT05PTU1PTk5OT05NTEtMTExEOTApQEdQWV1cWFVVUlBPTk9NTU5OT05OTk1NTk5OTk5OTU1OTk5OTk5NTU5OTk5OTk1NTU1OTk5OTU1OTk5OTk5NTU9PT05NTk1NT05PTk9OTU1OTk1NT1BRU1VYXFxZTkQ9PkZNWV1cWVdUU09PTk9PTk1PTk5OT05OTk9OTk5PTk5OT05OT01OTk5PTk5PTk5OTk9NTU5OTU1OT05OTU5OTk9PTU5OTk9OTk9OTk9PTk5OT01NT1FSVFZZXF1ZUEhAKjE5RE1OS0xNTk5PUFBOT05OTk5OT05OTk5OTk5PTk5OTk5OTk5OTk5NTk5OT05OT05NTU9PTU1OTk5OTU5PTk9OTU5OT05OT09OTk5PTk5PTU5OT09OTUxLTE1FPTYxDBMbKTQ2O0RHTlJUVVNSUU9OTk5OTk5OTk5OTk1OTU9OTk5OT05NTk9OTU5OTk5OTk9NTU5OTk5OTk1NTk5NTk5OTU5OTk5OTk1NTk5OTU1PUVJUVFNOR0I8NTMqHhYPAwQHDxkeKDU8SFBUVlVSUE9OTk5OTk5OTk5OTk5PTk5OTk5OTk9OTk9PTU1OTk5PTk5NTU5OTk5OTk1OTk5OTk5OTU1OT05OTk1NTU9OTk1PUlNVU1FIPjUoHRgQCAQCAgIAAQIGDxgdKTM8RklJT09RUE9OT05OTk5OTk5PTk5OTk5PTk9OT09OTU1OT09OTk1OTk5PTk5OTk9OTk9OTk5OTk5OT05OT05NT09RUE9OTEtIPzYoHBgOBgIBAgMCAgMBAQICBAYHEBciMThCT1RYVVFOT05OTk9OTk5OT05OT05OTk9OTk9PTU1OT05OTU5OTk5PTk5NT05OTk5OTk5PTk5OT05OTk9OT1NVVlZUSkI4KRsNBwcFAgMBAQICAgMCAgIBAAABAgQIGCMyREpUVFBOTk5OTk5OTk5PTk5OTk5PTk5NTU9OTk5OTk9OTk5OTk5OTU1OT05PTk9OTU1NTk5OTk1NTk5OT1BSUE1KOy4jDwgDAQACAQICAwICAgMDAgICAAEDAwICAwsSIi49R0xTU1FPT05OTk5OTk5OTk5OTk5NTU5OTk9OTk5OTk5OTk5OTU1OTk9OTk5NTU1NTk5OTk1OUFFSUUtIPzMoFxELAgMCAgICAQICAgICAwMBAgICAwMCBAECAgMFDBMnOUlYWVVQT09NTk5OTk5OT01NTk5OTk5PTk5OTk5OTk5OTk1NTk5PT01NT05OTk5PTU5OTU5QUFRVU0c8LBkQBgMDAgIBAQIDAQECAgIDAgIDAgIDAgICAgICAgMCAgILIDJGTExOT09QTk5OTk5OTk1NTk9OTk5OTU5OT05OT05OTk1OTk5PTk1PTk9OTk5OTk5OUE9PT0tIQC8kEwMCAgICAgMAAQICAQECAwICAgICAgICAgICAgICAgIDAgEBCA8hMj9LUVRTUU5OTk5OTk5PT05NTk5OTU1OTk1OTk5NTU5OTk5OTk1NTk5NTk5OTU1PUVRSTkEvHg4KBQICAgABAgICAgICAgICAgEBAgIBAgICAQMCAwICAwMCAgMCAgIJGC9DTVVVUU9OT05PT01PT05OTk5OTU1OTk5OTk5NTU5OTk5OTk1NT05OTk9OTU1PU1VPSDMYCAICAgICAgABAgICAgICAgMCAgEBAgICAgIDAgIDAwMCAgMCAgICAwMDBhIsOUdPT1BRTk5OTk5OTk9NTk5OTU1OT05OTk5OTk5PTU1OTk5OTU5OTk5OUFBOUEY7MBYFAQIDAgIBAQICAgMCAgMCAgICAwICAgMCAgICAwICBAIDAgMCAgIDAgICAwUUJDlIUFZVT05PT05OTk9NTU5PTU1OTk5OTk5OT05OTU5OT05OTU5OTk9QU1ZQSDckFQcBAgIDAgIBAgICAgMCAwIDAgICAwICAgICAgICAgECAwICAgIBAQIDAQICAwIFCyM2RlNUT09OTk1NTk5NTU5OTU1OT01NTU5OTk5OTU1OT05OTk5NTU9PUlJGNiELBAECAgICAQECAwIDAgIBAQEDAgICAgICAgICAwMDAAECAgICAgICAAIDAQECAgICAgseLkJLUFRRTk1NTk5NTU5OTU1OTk1NTk5OT05OTU1OTk9OTk5OUVNQS0ItHQkBAQECAgEBAAECAgMDAgIAAgICAgICAgEDAgMDAwICAgICAwIDAgICAgIDAgICAgICAgQLGTFDUldTT05OTk1OTk5PTk5OTk5OTU5OTk9PTk5OT05NTk9OU1dSQjAZCwQCAgMCAgICAgICAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgQCAgMCAgICAwECAgEBAxkuQlJQT1BPT09OTk5PTk5OT05OTU1OTk5PT05PT05NTlBPUFFCLBgEAgEDAgICAgIDAwICAgIDAgMCAgICAgMCAwICAwMCAgIDAgICAgIDAgICAwEDAwMCAgICAgIBAQgYLUNNU1NRT09NTk5OTU1PTk5OT09OTk5PTk5OTk1NUFNTSkMtGAgCAgICAgIAAQICAgICBAIBAwIBAAICAQECAgICAwMCAgICAgICAwICAgICAgIDAgICAgICAQIBAQMIGDFDU1VQTk9OT05OTU1OTk5OT09OTU5OTU5OTk5OUFVUQzEYCAMDAgMCAwIBAQICAwEDAwABAgIBAgMCAAECAwMCAgICAgICAwICAQICAwICAwMCAQICAgABAQECAgICAhgtRk9OUVBOT05OTk5OT05OTk5NTk5OTk9OTlBRT1BELBgCAgICAwMCAwICAgEBAgICAwIDAgICAgICAgMBAwICAgMCAgICAgICAgICAgICAgICAgICAgABAQECAgICAQkdN0dPVVRPTU5OTk1OT05OTk5OTk5OTk5NT1NWT0g1GwsCAgICAgICAgICAgEAAgIDAwICBAMCAgMDAwMDAwMDAgIDAgICAgICAgICAgECAgICAQICAgAAAQIBAQIBAQMLIjdGVVROTU5OTU5OTk1NTk5OTk5OTU1OTlNVSDgiCgQCAgIDAgIBAwMBAgMCAQEBAwIDAwMDAgMDAgMCAwMDAgICAgICAgICAgICAgICAgICAgICAgACAgIBAQICAAACCyM6UFJOTk9OTk5OTk1NTk5OTk5OTU5PT1FOOSQLAgICAgMDAgABAwMCAwICAAABAgIDAwMCAwMDAgIDAwICAgMCAgICAgICAwICAgMCAgIDAgICAgICAgMDAgICAgICBRUwSE9PUU9PTk9OTk5PTk5OTk5PTk9QUExELRUEAgIDAgIDAgMDAgMCAgIDAgIBAwECBAMBAgMDAgEEAwMCAgICAgIDAgICAwICAgMCAgICAgICAwICAgIDAgMEAgICAQYVNENMU1FOTk5OT05OTk5PTk5PT1FVTEAwEwYBAgIDAwIDBAICAgICAgIDAgMCAgEBAwQBAQICAQECAwICAgICAgICAgICAgICAgICAgICAAECAgABAgICAgICAgICAwEEGjFIVlFOTU1PTk5OTk5NTU5OTVNZSzAYBAICAgIDAAECAwICAgMBAQICAgICAwICAwICAgIDAAECAgIBAgICAgICAgICAgICAgICAgECAAECAgEBAgICAgMEAgICAgICCR5BU1BPTk1OT05PTk5NTU5OTlJYRiAIAwICAgICAAEDAwICAgMBAQICAwMDAwEDAgIDAgIDAQEDAgMDAgICAgIDAgICAgICAgICAgICAgICAwICAgEBAQIDAgIBAgICAQ8wR0tQUFBOT05PTk5NTU9RUExJMQ4DAgMCAQICAgECAwICAgIEAwIDAgMDAgICAgMDAgMDAgIDBAMCAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMBAAICAgIBAwIBAgwkO0hTVFBOT05OT09NTVFVVEc5IAgBAwMCAQEDAgICAgEBAwMCAgIDAwICAwICAgMCAwIDAgMDAwMDAgMCAgICAgICAwICAgMCAgICAQICAgEBAgICAgIDAQECAgABAQUTLD9TVlFOTk1NTk5OTlFXUjwlDAIBAgIBAQMDAwICAgEBAgICAwICAgEDAwIDAgIBAQIDAgMDAgMCAgICAgICAgICAwICAwMCAgMCAgICAgABAgICAgICAAECAgIBAQECGTNOVlBOTU1OT05PUE9USy0UBAMCAgIAAQIDAgICAwABAgICAgECAQEDAgMCAgMAAQICBAICAgECAgQCAwMCAwICAwIDAgMDAgIDAgIBAgICAgMCAgIDAgICAwICAgIBEChMU09PT09OTk9PT01QRCMMAwEBAgICAgIDAgICAgMCAgMCAgICAgIDAwEBAgICAgMDAgICAwEBAgICAgMDAwMDAgICAwMCAgICAgMDAwICAgICAgIDAgICAgICAgMCBhg8SUxRUk5OTk9RUkpDMhMFAgEBAQQCAgMCAgIDAwICAgMCAgIEAgIDAgECAgMDAwICAgMDAwEBAgICAgICAQICAgICAwICAgMCAgICAgICAgICAgICAgIDAgIDAgICAxEwQEtTUk5OT05SVUk5IwoDAgICAgMCAgMCAAECAwABAgIBAQMDAgECAwICAgICAgMDAgICAgECAgICAgICAQICAwIDAgICAgICAgICAgICAgICAgICAwICAgIDAgMDBAojOEhWVE9OTlBVVkcwGAMCAgIDAwMDAwICAQECAwECAwICAgMDAgECAgICAgMCAwIBAAEBAgEBAgICAgIDAgICAgICAgMCAwIDAgMCAwICAgICAgIDAgICAgICAgQCAwMPKT9UVU5PTk1VVD0lCAECAgMDAgQCAwICAwICAwIDAwMCAgIDAwMDAQICAgQCAgICAgMDBAICAgMDAgICAgICAwMCAgICAgIDAgICAwICAgMCAgIDAgMCAwMCAgMCAgIGGjVRU05RT05TUTUYAwICAwICAwMCAwIEAgMDAwMDAgQDAwIDAwICAgIDAwMDAgIEAgMDAwMDAgICAgICAgIDAgECAgMDAQICAgICAgICAgMCAwICAwICAwICAgICAgICDipIT01SUk5OSCoOAwMDAgIDAwIDAgICAgIDAwMDAwMCAgIDBAIDBAECAwIBAQICAgICBAICAgICAgICAQMCAgICAgICAgMCAgICAgICAgICAgICAgICAgIDAgICAgIBBx08R0xVVU5HPh4IAQMDAgMCAgMBAwMCAgICAwIDAgIDAwMCAgMCAgECAgIBAQICAgMCAgICAgMCAgICAgICAwICAgICAgMDAgECAgICAgMCAgIDAgICAwICAgICAgICBxg1Q0xWVUxDNRgHAgMDAwMCAwICAwICAgMCAwICAwMDAgMDAwICAwIDAwMDAwEDAQIDAgMDAgICAgMDAgMCAgICAgIDAgMCAgICAwICAgICAgIDAgICAgIDAgICAgIBBA4oPUxZWUw7KQ4EAQICAgIDAgQDAwIDAwIEAgICAwICAwIDAgICAgMCAwQCAgEBAQICAwIDAgMBAgICAgMDAgMDAgICAgICAgICAgICAgIBAgICAQICAgICAgICAgIBAgYeNkxdXU01HgUCAQICAgEDAgICAwIDAQEDAgEBAgIAAQICAgIDAwEBAwMDAwIDAAEDAgICAgIBAQMEAgMCAgIDAgMCAgMCAgMCAgICAgIBAgICAgICAgICAgICAgMCAgMaM0tdXk0zGAICAgICAQABAgMCAwMDAgECAgEBAgIAAQICAgICAgABAgICAwIDAAICAgICAgMCAgMDAwMCAwIDAgMCAwECAgEDBAICAgICAgIDAgICAwICAgMCAgICAwMQK0VZWUQpDwIDAgICAwICAgMCAgMCAgICAgICAgICAgEDAgICAgEBAgMCAgMCAgICAwICAwMCAgIDAgIDAwICAwIDAgMDAgMCBAICAgMCAgIDAgICAwICAgMCAgIDAgMIHzxPTjocCAICAgICAgICAgMCAQMDAgICAgICAgICAgIDAgICAgAAAgICAgIDAgICAwICAQICAgMCAgICAgICAgICAgIDAgICAgMCAgICAgICAgICAgIDAgMCAgIDAgIEFTZHRTETBAECAQECAgICAwICAgICAgICAgEBAgMAAQIDAgICAgICAgIBAQIDAgICAgEBAgICAgICAgMCAgICAgICAgICAQMCAwICAgICAgICAQIDAgICAgICAgICAgMBDzBAPioNAgICAAEDAgICAgMCAgICAgICAgEBAwIBAQIBAgICAgICAgMBAQICAgICAgAB" },
172
+ "veo-diamond-1080p-portrait": { width: 96, height: 96, source: "GeminiWatermarkTool/bg_b_96", dataBase64: "AgMCAgICAgMCAwICAgICAgIDAgICAgICAgMCAgMCAgICAwICAQICAgIEAwIBDis+QjIQAQICAgICAwICAwICAwMDAwICAgICAgQBAgMDAwMDAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgMCAgICAgICAwICAgECAgIDAgICAwICAQMBAgMDAgIEFTFFRzcXBQMEAwMDAgMCAgMCAwICAgMCAwIDAgIBAQIDAgMDAgEBAwQCAgICAgICAwICAgICAgICAwICAgECAgECAgICAgMCAgICAgICAgICAgICAgICAgICAgICAQMJHDlPUDweCQICAgICAwIDAwICAgICAgICAwICAwICAgEBAgICAQICAgIAAgMBAgIDAgICAwICAgICAwICAgICAgMCAgMCAQICAgICAgICAgMCAgICAwIDAgICAgIDAgIPKURZWUYqEAMDAgIDAgICAgMCAwICAgIDAgIBAgICAwEBAwIBAQICAgIBAgMCAQIDAgICAgICAgIDAgICAgICAgQCAwICAgICAwICAgICAwMDAgICAgICAgMCAgICAgIZNE1dXkwzGQMEAQMCAwIDAwMDAgMCAgICAwIDAgIDAgICAgICAgIDAwMCAgICAgICAwICAgICAgIDAgICAwIDAgMCAgIDAgICAwICAgMCAgQDAgIDAwIDAgMCAgICAgUeN01cXE02HgUCAgMCAwIBAQMCAgIDAQECAwIDAwICAgIDAgICAwICAgMCAgIDAgICAwICAgICAgICAgMCAgICAwMDAwMDAgICAQICAgMCAgMCAwICAgIDAgIDAwIBBA8oO0tZWUo8KA4FAQMCAwMDAgMDAgICAgMCAgICAgIBAgICAgICAgECAgMBAQICAQECAgICAgIDAgICAgICAgICAwICAwICAwMCAgICAwMDAgIDAgIDAgIDAgMCAwIBCBg1Q0xWVkxCNhgHAQMCAgIDAgICAwICAgICAwICAgMCAwICAgICAgICAgIBAQICAQECAgICAQICAgMCAwMCAwICAgICAwEDAwIDAgICAgMCAgICAwICAwMCAgICAgICBh49SE1VVU5HPh0HAQIBBAMCAgICAgIDAgICAgICAgMCAwICAgIDAwICAgICAgIEAgMCAgICAgICAgIDAgIDAwICAwMDAgICAwICAgICAgICAgIDAgICAgICAgMCAwICDSlIT09SUk1OSCkPAgIDAgICAgMCAgICAgICAwIDAgICAgIDAgICAgICAgMCAgIBAgICAwIDAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgMCAgIDAgICAgICAgIEGDRRU05QUE5SUTYaBQICAgEDAgICAgICAAECAgICAgICAgMDAgICAgABAgICAgICAAECAwECAQICAgICAgICAgICAwICAgICAgICAgIBAgICAgICAgICAgEDAQMCAgIJJD1VVU9PT05UUz8pEAICAgICAgICAgICAAECAgICAgICAgICAgICAgABAgICAwICAAECAwECAgICAgEEAQICAgECAgMCAgICAgICAwICAgICAgIDAgICAgICAgMCAgMYMEZWVk9OTk9UVUg5IwsDAgIBAgMCAgICAgICAwEBAgICAgEDAgICAgICAgMCAgICAQICAwICAgMCAwIDAgICAwIDAgQCAgIDAgICAwICAgICAgIDAgICAwICAgQCAwkkOEhVVE9OTk9SVEtCLxEDAwECAgMCAgIDAgICAwEBAgMCAgIDAgICAwICAgMCAgIEAgICAwICAgMCAgICAgIDAgICAwICAwIDAgMDAwICAgMCAgMCAgICAgICAwMDBRMyQktTUk5OTk9RUkxJPBgGAgMCAgICAgIDAgIDAwICAwMBAgICAQECAgICAgMBAQICAgICAgEBAgICAgICAgIDAwICAgMCAwMDAgICAwIDAgICAgMCAgIDAgMDAgMCDCREUE1QUE9OTk5PT09TSigQAgIDAgICAgMCAwMCAgICAwICAgICAAECAgIDAwIAAAICAgICAgABAgMCAgICAgMCAwICAgIDAgIEAwMDAwMDAgQCAgIEAgIDAwMCAwICEi9MVlBQUE5PTk9OTk9VTzQbBQIDAgICAgICAgIDAgEBAgMCAgICAgICAwICAgIBAQECAQECAgICAgICAgIDAgICAgICAwMCAgMCAwMCAwMCAgICAgIDAgICAgICAQMLJj5TV1FOT09OTk9OTlBXU0AuFAUCAgMCAgICAgICAwEBAwIDAgIDAgMCAgICAgMBAQEBAgEBAgMBAwICAgIDAgICAgECAgMCAgICAgIDAgICAgICAgICAgIBAwACAQgfOEhVVFBPT05OTk9OTlBUUkc8JAkBAgICAQICAQACAgICAgIAAQMCAgICAgABAgIBAgICAAECAgACAgICAgIDAgICAgEDAgIDAgICAgIDAgICAgIBAgICAgIBAgEBAg8wSExQUU5OTk9OTk5OTk9RUEtGLwwAAgICAQICAAECAgICAgIAAQICAgICAgABAgICAgICAQECAgECAgIDAgIDAgICAwICAgMCAwMCAgIDBAICAgICAgIDAgICAgICCSFFWFNOUE5OT05OTk5PTk5QT1BSQB0IAgMCAgEBAgECAgICAgICAgECAgICAgICAQIBAQICAQECAwIBAgMDAgIDAgMCAwMDAgQCAgIDAgICAwICAgMCAgICAgICAwIDFzFKWVNPTk1OT05PTk9OT05PTlFVSC8ZBAICAgECAgIDAwICAgMCAgECAgICAwICAQIBAQIDAQECAwECAgICAgMCAgIDAgICAgICAgICAgICAgICAgMCAgMCAgICAQUSLz9MVVFPTk5OTk5OTk9NTk5OTlBTTEEyFgYBAgMCAgMDAgICAQECAgICAgICAgECAgICAgICAQECAgEBAwICAgMCAgIDAgICAgIBAgMDAgIDAgIDAwICAgMCAgICBRQsREtOUU9OTk5OTk5OTk9NTU9PTk9RUE1HMBUDAwMDAwICAgICAQECAgICAgICAgICAgIBAgICAQECAgEBAgICAgMCAwICAwICAgMCAgIDAgICAgMCAwMCAwICAgICDSQ5TlFNTlBPTU1OTk5PTk9OT05OTk9PUFJPOyYMAQMDAAECAgECAgMBAQEBAgMCAwIDAgIDAwEDAQECAwICAgICAgIDAgICAgICAgMCAgICAgIBAwICAgIDAgIDAgQLIjhIVlRNTU5OTU1PT05OT05PT05PTk5OT1RVRzkiCwQCAQACAwEBAwIAAQECAgMCAwICAgQDAwIDAQECBAMDAgMCAgICAgICAgICAgICAgICAgICAgIDAgIBAgICAgsdNUdPVlNPTU5OTU5OTk5OT05OT05PTk9NT1JVT0c2HAsCAQICAgACAgIBAQICAgMCAgABAgICAgICAQICAgECAgMCAgICAwICAgICAgICAgICAgIDAwIEAgICAgICBBgtRU9OUVBPT05PTk5OTk5OTk5OT09PTk5OTlBRTk9ELBgEAgICAgIBAgMBAQMCAgIBAQABAgMDAgMCAAECAgABAgMDAgIDAgICAgICAgQDAgICAwMCBAMCAwICAgMJGDFCUlVQT09OTk9OTk5OTk1OTk9OTk5PTU1OTk5OUFZRQDAXBwICAwEAAQECAgIEAQEDAwMCAgMBAQECAQECAwIDAwICAgIEAgICBAMDAgMDAgIDAwMCAgMCAgQCAggZLUJLUlNQTk9OTk9PTk5OT05OTk9OTk5PTU1OT05OUFRRSkItGAcCAwEBAQICAgIDAQECAwMCAgMBAQIDAQECAwECAgICAgIDAgICAgICAgMCAgICAgIDAwMDAwEBAxktQVBPT1BOTk5NTU5OTU1OTk5PTk5OTk5OTU1OT01OTlBOT1BBLBgDAQABAwICAwEBAgACAgEBAgICAgICAAECAgECAgICAgICAgIDAwIDAwICAgMDAgICAgIDAgQLGTBCUVdTTk5OTk5NTU5OTk5OTk1OTk5OTk5NTU5OTk5OTk5OUldQQjAXCwMBAgICAgIBAAEDAgIBAgICAgICAQECAwECAgMCAgICAgMCAwICAgMCAgMEAgECAgICAg0cLUJMUFRRT05OTk5OTk5PTk5OTk5OTk9OTk5OTk5OT05OTk9OUVNQS0IsHgsCAgMCAgIBAgICAwICAgICAgIDAgMDAwICAgICAgIDAgICAgMDAgMCAgICAgMCAwEFDCI2RlFTT1BPTk5OTk9OTk5OTk5OT05OT09OTk5PTk5OTk5OTk5OTk9PUlJENyIMBQECAgIDAgICAQICAgQBAgECAgICAwICAgICAgICAQICAgEBAwICAwICAQIDAQYXJDhGT1VTT05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU1NTU1NTk9NTk5QUlRPRzgkFQUBAQICAgICAgICAgIAAQICAAECAgICAgICAwICAgICAgEBAgIDAwMDAQIBBRYwO0hOTVBQTk5OTk5PTk5PTk5OTk5OT05OTk5OTk5OTU1NTU1NTk5OTk5OUFBOT0g5LRMDAQICAgECAgICAgIAAQICAAECAgICAwICAgIDAgIBAgICAgMCAgICAgIJGjRIUFZUUE5PTk5PTk5OTk9OTk5PTk5OT05OTk5OTk5PTk5OTk5PTk9OTk5OT05RVVRORDAXCQIDAAICAgEBAgQBAQIDAgICAwICAgMCAgIDAgICAwICAgMCAgIFCg4eMUJPUlVSUE5PTk5OT09PTk9PTk5PTk9OT05PTk9OTk5PTk5OT05PTk9OT05PTk9QVFVSTEAxIBAJAAICAwEBAwMCAQMDAgIDBAICAgMCAwICAQECAgECAgIBAQQWJC8/R0pPT09PT05OTU1OTk5OTk5NTU5OTk5PT01OTk5OTk5OTU1OT05PT05NTU5PTk5OT09PT0xLRjIgCwICAgIDAgMBAgMDAgMDAgEBAgICAgICAAECAgICBAMFDhstPEdSVVJPUE9NT05NTU1OTk5OTk5NTU9OTk5PTk1NT05PTk5PTU1OTk9PT09NTU5OT05PTU1OT1RYWEg6JRMLBAQCAwQBAQQCAgMDAwABAgMCAgICAwECAwICCxIYKDRAR0tQUVBPT09OTk5OTk5OT05OTk9PTk5PTk5OT05OTk9OTk5OTU1OTk5OTk5OT05PT05OTk5PT1JTU0xIPS4kFAoDAgIDAwECAgICAgICAwIBAgICAQEBAgYQIy88Sk5RUlBQT05OTk5OTk5OTk5OTk5OTk9OTk5OTk5OT05OTk9OTk5OTU1OTk5OTk9OTk5OTk5OT05OT09NTlBVUkxFMiMYCAUCAQAAAQIDAwICAgMAAQICBAYHDRgoOEFJU1RWU1FPTk5OTk5NTU5OTU5OTk1NTk5OTk5OTU1OTU5OTk5NTU5OTU5OTk1NTU1NTU5OTU1OTk5OTk5NTVFUV1NPQjcwIxcOBwYEAAECAgICAwIAAQIGDhkdKTQ+SEtMT05QT09OTk5OTk5NTU5OTk5OTk1NTk5OTk5OTU1NTU5OTk5NTU5PTk5OTk1NTU1NTU5OTU1OTk5NTk5NTU5PUE5OSkdFPDQpHRgOBAECAgICAgMIDxkfKDU8SFFTVVRST05OT09OT05PTk5OTk5PTk5OTk1NTk9OTk5OTU1OTk5OTk5NTU5PTk5OTk1NTU1NTU1OTk5OT05OTk9NTU9PTk9QUlRVVVJIPDUoHhkQCQMBDxceKjM3O0JHT1JUVVNRT05PTk9PT05OTk9OTk5PTk5OT01NTk9OTk5PTU1OT05OTk9NTU5PTk5OTk1NTU1NTU1OTk9OT05OTk9NTU5PT09QU1JUVVROR0M8NzQqHBMMMDY9RkxMSktNTk5PT1BNTU5PTk5PTk1NTk5OTk5OTU1OT05OTk5NTU5OTU5OTk1NTU1OTk5OTU1OTk5OTk9NTU5PTk9NTk1NTk5OT05PTU1PTk5OT05NTEtMTExEOTApQEdQWV1cWFVVUlBPTk9NTU5OT05OTk1NTk5OTk5OTU1OTk5OTk5NTU5OTk5OTk1NTU1OTk5OTU1OTk5OTk5NTU9PT05NTk1NT05PTk9OTU1OTk1NT1BRU1VYXFxZTkQ9PkZNWV1cWVdUU09PTk9PTk1PTk5OT05OTk9OTk5PTk5OT05OT01OTk5PTk5PTk5OTk9NTU5OTU1OT05OTU5OTk9PTU5OTk9OTk9OTk9PTk5OT01NT1FSVFZZXF1ZUEhAKjE5RE1OS0xNTk5PUFBOT05OTk5OT05OTk5OTk5PTk5OTk5OTk5OTk5NTk5OT05OT05NTU9PTU1OTk5OTU5PTk9OTU5OT05OT09OTk5PTk5PTU5OT09OTUxLTE1FPTYxDBMbKTQ2O0RHTlJUVVNSUU9OTk5OTk5OTk5OTk1OTU9OTk5OT05NTk9OTU5OTk5OTk9NTU5OTk5OTk1NTk5NTk5OTU5OTk5OTk1NTk5OTU1PUVJUVFNOR0I8NTMqHhYPAwQHDxkeKDU8SFBUVlVSUE9OTk5OTk5OTk5OTk5PTk5OTk5OTk9OTk9PTU1OTk5PTk5NTU5OTk5OTk1OTk5OTk5OTU1OT05OTk1NTU9OTk1PUlNVU1FIPjUoHRgQCAQCAgIAAQIGDxgdKTM8RklJT09RUE9OT05OTk5OTk5PTk5OTk5PTk9OT09OTU1OT09OTk1OTk5PTk5OTk9OTk9OTk5OTk5OT05OT05NT09RUE9OTEtIPzYoHBgOBgIBAgMCAgMBAQICBAYHEBciMThCT1RYVVFOT05OTk9OTk5OT05OT05OTk9OTk9PTU1OT05OTU5OTk5PTk5NT05OTk5OTk5PTk5OT05OTk9OT1NVVlZUSkI4KRsNBwcFAgMBAQICAgMCAgIBAAABAgQIGCMyREpUVFBOTk5OTk5OTk5PTk5OTk5PTk5NTU9OTk5OTk9OTk5OTk5OTU1OT05PTk9OTU1NTk5OTk1NTk5OT1BSUE1KOy4jDwgDAQACAQICAwICAgMDAgICAAEDAwICAwsSIi49R0xTU1FPT05OTk5OTk5OTk5OTk5NTU5OTk9OTk5OTk5OTk5OTU1OTk9OTk5NTU1NTk5OTk1OUFFSUUtIPzMoFxELAgMCAgICAQICAgICAwMBAgICAwMCBAECAgMFDBMnOUlYWVVQT09NTk5OTk5OT01NTk5OTk5PTk5OTk5OTk5OTk1NTk5PT01NT05OTk5PTU5OTU5QUFRVU0c8LBkQBgMDAgIBAQIDAQECAgIDAgIDAgIDAgICAgICAgMCAgILIDJGTExOT09QTk5OTk5OTk1NTk9OTk5OTU5OT05OT05OTk1OTk5PTk1PTk9OTk5OTk5OUE9PT0tIQC8kEwMCAgICAgMAAQICAQECAwICAgICAgICAgICAgICAgIDAgEBCA8hMj9LUVRTUU5OTk5OTk5PT05NTk5OTU1OTk1OTk5NTU5OTk5OTk1NTk5NTk5OTU1PUVRSTkEvHg4KBQICAgABAgICAgICAgICAgEBAgIBAgICAQMCAwICAwMCAgMCAgIJGC9DTVVVUU9OT05PT01PT05OTk5OTU1OTk5OTk5NTU5OTk5OTk1NT05OTk9OTU1PU1VPSDMYCAICAgICAgABAgICAgICAgMCAgEBAgICAgIDAgIDAwMCAgMCAgICAwMDBhIsOUdPT1BRTk5OTk5OTk9NTk5OTU1OT05OTk5OTk5PTU1OTk5OTU5OTk5OUFBOUEY7MBYFAQIDAgIBAQICAgMCAgMCAgICAwICAgMCAgICAwICBAIDAgMCAgIDAgICAwUUJDlIUFZVT05PT05OTk9NTU5PTU1OTk5OTk5OT05OTU5OT05OTU5OTk9QU1ZQSDckFQcBAgIDAgIBAgICAgMCAwIDAgICAwICAgICAgICAgECAwICAgIBAQIDAQICAwIFCyM2RlNUT09OTk1NTk5NTU5OTU1OT01NTU5OTk5OTU1OT05OTk5NTU9PUlJGNiELBAECAgICAQECAwIDAgIBAQEDAgICAgICAgICAwMDAAECAgICAgICAAIDAQECAgICAgseLkJLUFRRTk1NTk5NTU5OTU1OTk1NTk5OT05OTU1OTk9OTk5OUVNQS0ItHQkBAQECAgEBAAECAgMDAgIAAgICAgICAgEDAgMDAwICAgICAwIDAgICAgIDAgICAgICAgQLGTFDUldTT05OTk1OTk5PTk5OTk5OTU5OTk9PTk5OT05NTk9OU1dSQjAZCwQCAgMCAgICAgICAwICAgICAgIDAgICAgICAgIDAgIDAgIDAgICAgQCAgMCAgICAwECAgEBAxkuQlJQT1BPT09OTk5PTk5OT05OTU1OTk5PT05PT05NTlBPUFFCLBgEAgEDAgICAgIDAwICAgIDAgMCAgICAgMCAwICAwMCAgIDAgICAgIDAgICAwEDAwMCAgICAgIBAQgYLUNNU1NRT09NTk5OTU1PTk5OT09OTk5PTk5OTk1NUFNTSkMtGAgCAgICAgIAAQICAgICBAIBAwIBAAICAQECAgICAwMCAgICAgICAwICAgICAgIDAgICAgICAQIBAQMIGDFDU1VQTk9OT05OTU1OTk5OT09OTU5OTU5OTk5OUFVUQzEYCAMDAgMCAwIBAQICAwEDAwABAgIBAgMCAAECAwMCAgICAgICAwICAQICAwICAwMCAQICAgABAQECAgICAhgtRk9OUVBOT05OTk5OT05OTk5NTk5OTk9OTlBRT1BELBgCAgICAwMCAwICAgEBAgICAwIDAgICAgICAgMBAwICAgMCAgICAgICAgICAgICAgICAgICAgABAQECAgICAQkdN0dPVVRPTU5OTk1OT05OTk5OTk5OTk5NT1NWT0g1GwsCAgICAgICAgICAgEAAgIDAwICBAMCAgMDAwMDAwMDAgIDAgICAgICAgICAgECAgICAQICAgAAAQIBAQIBAQMLIjdGVVROTU5OTU5OTk1NTk5OTk5OTU1OTlNVSDgiCgQCAgIDAgIBAwMBAgMCAQEBAwIDAwMDAgMDAgMCAwMDAgICAgICAgICAgICAgICAgICAgICAgACAgIBAQICAAACCyM6UFJOTk9OTk5OTk1NTk5OTk5OTU5PT1FOOSQLAgICAgMDAgABAwMCAwICAAABAgIDAwMCAwMDAgIDAwICAgMCAgICAgICAwICAgMCAgIDAgICAgICAgMDAgICAgICBRUwSE9PUU9PTk9OTk5PTk5OTk5PTk9QUExELRUEAgIDAgIDAgMDAgMCAgIDAgIBAwECBAMBAgMDAgEEAwMCAgICAgIDAgICAwICAgMCAgICAgICAwICAgIDAgMEAgICAQYVNENMU1FOTk5OT05OTk5PTk5PT1FVTEAwEwYBAgIDAwIDBAICAgICAgIDAgMCAgEBAwQBAQICAQECAwICAgICAgICAgICAgICAgICAgICAAECAgABAgICAgICAgICAwEEGjFIVlFOTU1PTk5OTk5NTU5OTVNZSzAYBAICAgIDAAECAwICAgMBAQICAgICAwICAwICAgIDAAECAgIBAgICAgICAgICAgICAgICAgECAAECAgEBAgICAgMEAgICAgICCR5BU1BPTk1OT05PTk5NTU5OTlJYRiAIAwICAgICAAEDAwICAgMBAQICAwMDAwEDAgIDAgIDAQEDAgMDAgICAgIDAgICAgICAgICAgICAgICAwICAgEBAQIDAgIBAgICAQ8wR0tQUFBOT05PTk5NTU9RUExJMQ4DAgMCAQICAgECAwICAgIEAwIDAgMDAgICAgMDAgMDAgIDBAMCAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMBAAICAgIBAwIBAgwkO0hTVFBOT05OT09NTVFVVEc5IAgBAwMCAQEDAgICAgEBAwMCAgIDAwICAwICAgMCAwIDAgMDAwMDAgMCAgICAgICAwICAgMCAgICAQICAgEBAgICAgIDAQECAgABAQUTLD9TVlFOTk1NTk5OTlFXUjwlDAIBAgIBAQMDAwICAgEBAgICAwICAgEDAwIDAgIBAQIDAgMDAgMCAgICAgICAgICAwICAwMCAgMCAgICAgABAgICAgICAAECAgIBAQECGTNOVlBOTU1OT05PUE9USy0UBAMCAgIAAQIDAgICAwABAgICAgECAQEDAgMCAgMAAQICBAICAgECAgQCAwMCAwICAwIDAgMDAgIDAgIBAgICAgMCAgIDAgICAwICAgIBEChMU09PT09OTk9PT01QRCMMAwEBAgICAgIDAgICAgMCAgMCAgICAgIDAwEBAgICAgMDAgICAwEBAgICAgMDAwMDAgICAwMCAgICAgMDAwICAgICAgIDAgICAgICAgMCBhg8SUxRUk5OTk9RUkpDMhMFAgEBAQQCAgMCAgIDAwICAgMCAgIEAgIDAgECAgMDAwICAgMDAwEBAgICAgICAQICAgICAwICAgMCAgICAgICAgICAgICAgIDAgIDAgICAxEwQEtTUk5OT05SVUk5IwoDAgICAgMCAgMCAAECAwABAgIBAQMDAgECAwICAgICAgMDAgICAgECAgICAgICAQICAwIDAgICAgICAgICAgICAgICAgICAwICAgIDAgMDBAojOEhWVE9OTlBVVkcwGAMCAgIDAwMDAwICAQECAwECAwICAgMDAgECAgICAgMCAwIBAAEBAgEBAgICAgIDAgICAgICAgMCAwIDAgMCAwICAgICAgIDAgICAgICAgQCAwMPKT9UVU5PTk1VVD0lCAECAgMDAgQCAwICAwICAwIDAwMCAgIDAwMDAQICAgQCAgICAgMDBAICAgMDAgICAgICAwMCAgICAgIDAgICAwICAgMCAgIDAgMCAwMCAgMCAgIGGjVRU05RT05TUTUYAwICAwICAwMCAwIEAgMDAwMDAgQDAwIDAwICAgIDAwMDAgIEAgMDAwMDAgICAgICAgIDAgECAgMDAQICAgICAgICAgMCAwICAwICAwICAgICAgICDipIT01SUk5OSCoOAwMDAgIDAwIDAgICAgIDAwMDAwMCAgIDBAIDBAECAwIBAQICAgICBAICAgICAgICAQMCAgICAgICAgMCAgICAgICAgICAgICAgICAgIDAgICAgIBBx08R0xVVU5HPh4IAQMDAgMCAgMBAwMCAgICAwIDAgIDAwMCAgMCAgECAgIBAQICAgMCAgICAgMCAgICAgICAwICAgICAgMDAgECAgICAgMCAgIDAgICAwICAgICAgICBxg1Q0xWVUxDNRgHAgMDAwMCAwICAwICAgMCAwICAwMDAgMDAwICAwIDAwMDAwEDAQIDAgMDAgICAgMDAgMCAgICAgIDAgMCAgICAwICAgICAgIDAgICAgIDAgICAgIBBA4oPUxZWUw7KQ4EAQICAgIDAgQDAwIDAwIEAgICAwICAwIDAgICAgMCAwQCAgEBAQICAwIDAgMBAgICAgMDAgMDAgICAgICAgICAgICAgIBAgICAQICAgICAgICAgIBAgYeNkxdXU01HgUCAQICAgEDAgICAwIDAQEDAgEBAgIAAQICAgIDAwEBAwMDAwIDAAEDAgICAgIBAQMEAgMCAgIDAgMCAgMCAgMCAgICAgIBAgICAgICAgICAgICAgMCAgMaM0tdXk0zGAICAgICAQABAgMCAwMDAgECAgEBAgIAAQICAgICAgABAgICAwIDAAICAgICAgMCAgMDAwMCAwIDAgMCAwECAgEDBAICAgICAgIDAgICAwICAgMCAgICAwMQK0VZWUQpDwIDAgICAwICAgMCAgMCAgICAgICAgICAgEDAgICAgEBAgMCAgMCAgICAwICAwMCAgIDAgIDAwICAwIDAgMDAgMCBAICAgMCAgIDAgICAwICAgMCAgIDAgMIHzxPTjocCAICAgICAgICAgMCAQMDAgICAgICAgICAgIDAgICAgAAAgICAgIDAgICAwICAQICAgMCAgICAgICAgICAgIDAgICAgMCAgICAgICAgICAgIDAgMCAgIDAgIEFTZHRTETBAECAQECAgICAwICAgICAgICAgEBAgMAAQIDAgICAgICAgIBAQIDAgICAgEBAgICAgICAgMCAgICAgICAgICAQMCAwICAgICAgICAQIDAgICAgICAgICAgMBDzBAPioNAgICAAEDAgICAgMCAgICAgICAgEBAwIBAQIBAgICAgICAgMBAQICAgICAgAB" }
173
+ };
174
+ }
175
+ });
176
+
177
+ // src/core/embeddedAlphaMaps.js
178
+ function getEmbeddedAlphaMap(key) {
179
+ return alphaMapRegistry.get(key) || loadCalibratedAlphaMap(key);
180
+ }
181
+ function registerAlphaMap(key, data, width, height, source = "custom") {
182
+ alphaMapRegistry.set(key, { data, width, height, source });
183
+ }
184
+ var alphaMapRegistry, VIDEO_ALPHA_KEYS;
185
+ var init_embeddedAlphaMaps = __esm({
186
+ "src/core/embeddedAlphaMaps.js"() {
187
+ init_calibratedAlphaData();
188
+ alphaMapRegistry = /* @__PURE__ */ new Map();
189
+ VIDEO_ALPHA_KEYS = [
190
+ "720p-landscape",
191
+ "720p-portrait",
192
+ "1080p-landscape",
193
+ "1080p-portrait",
194
+ "veo-diamond-1080p-landscape",
195
+ "veo-diamond-1080p-portrait"
196
+ ];
197
+ for (const key of VIDEO_ALPHA_KEYS) {
198
+ const loaded = loadCalibratedAlphaMap(key);
199
+ if (loaded) {
200
+ alphaMapRegistry.set(key, loaded);
201
+ }
202
+ }
203
+ }
204
+ });
205
+
206
+ // src/core/frameProcessor.js
207
+ function processFrame(frameData, options = {}) {
208
+ const width = options.width || frameData.width;
209
+ const height = options.height || frameData.height;
210
+ const profile = normalizeVideoWatermarkProfile(options.videoProfile ?? options.profile);
211
+ if (!profile) {
212
+ return { imageData: frameData, processed: false, reason: "unsupported_profile", profile: null };
213
+ }
214
+ const info = getVeoWatermarkInfo(width, height, profile);
215
+ if (!info) {
216
+ return { imageData: frameData, processed: false, reason: "unsupported_resolution", profile };
217
+ }
218
+ const alphaMap = getEmbeddedAlphaMap(info.alphaMapKey);
219
+ if (!alphaMap) {
220
+ return { imageData: frameData, processed: false, reason: "missing_alpha_map", profile };
221
+ }
222
+ removeWatermark(frameData, alphaMap.data, info.position);
223
+ return { imageData: frameData, processed: true, profile, position: info.position };
224
+ }
225
+ function createFrameProcessor(frameWidth, frameHeight, options = {}) {
226
+ const profile = normalizeVideoWatermarkProfile(options.videoProfile ?? options.profile);
227
+ if (!profile) {
228
+ return {
229
+ profile: null,
230
+ position: null,
231
+ process(frameData) {
232
+ return { imageData: frameData, processed: false, reason: "unsupported_profile", profile: null };
233
+ }
234
+ };
235
+ }
236
+ const info = getVeoWatermarkInfo(frameWidth, frameHeight, profile);
237
+ if (!info) {
238
+ return {
239
+ profile,
240
+ position: null,
241
+ process(frameData) {
242
+ return { imageData: frameData, processed: false, reason: "unsupported_resolution", profile };
243
+ }
244
+ };
245
+ }
246
+ const alphaMap = getEmbeddedAlphaMap(info.alphaMapKey);
247
+ if (!alphaMap) {
248
+ return {
249
+ profile,
250
+ position: info.position,
251
+ process(frameData) {
252
+ return { imageData: frameData, processed: false, reason: "missing_alpha_map", profile };
253
+ }
254
+ };
255
+ }
256
+ const position = info.position;
257
+ const mapData = alphaMap.data;
258
+ return {
259
+ profile,
260
+ position,
261
+ process(frameData) {
262
+ removeWatermark(frameData, mapData, position);
263
+ return { imageData: frameData, processed: true, profile, position };
264
+ }
265
+ };
266
+ }
267
+ var init_frameProcessor = __esm({
268
+ "src/core/frameProcessor.js"() {
269
+ init_blendModes();
270
+ init_veoConfig();
271
+ init_embeddedAlphaMaps();
272
+ }
273
+ });
274
+
275
+ // src/video/videoDecoder.base.js
276
+ var VideoDecoderBase;
277
+ var init_videoDecoder_base = __esm({
278
+ "src/video/videoDecoder.base.js"() {
279
+ VideoDecoderBase = class {
280
+ async open() {
281
+ throw new Error("Not implemented");
282
+ }
283
+ async *decodeFrames() {
284
+ throw new Error("Not implemented");
285
+ }
286
+ async extractAudio() {
287
+ return null;
288
+ }
289
+ async close() {
290
+ }
291
+ };
292
+ }
293
+ });
294
+
295
+ // src/video/videoDecoder.webcodecs.js
296
+ var WebCodecsDecoder;
297
+ var init_videoDecoder_webcodecs = __esm({
298
+ "src/video/videoDecoder.webcodecs.js"() {
299
+ init_videoDecoder_base();
300
+ WebCodecsDecoder = class extends VideoDecoderBase {
301
+ #videoInfo = null;
302
+ #videoMp4 = null;
303
+ #sourceBuffer = null;
304
+ #frameIndex = 0;
305
+ #audioData = null;
306
+ async open(source) {
307
+ if (typeof VideoDecoder === "undefined") {
308
+ throw new Error("WebCodecs API not available. Use Chrome 94+ or a fallback decoder.");
309
+ }
310
+ this.#sourceBuffer = await source.arrayBuffer();
311
+ const { createFile } = await import("mp4box");
312
+ const probeFile = createFile();
313
+ const info = await new Promise((resolve, reject) => {
314
+ probeFile.onReady = resolve;
315
+ probeFile.onError = reject;
316
+ this.#sourceBuffer.fileStart = 0;
317
+ probeFile.appendBuffer(this.#sourceBuffer);
318
+ probeFile.flush();
319
+ });
320
+ const videoTrack = info.videoTracks[0];
321
+ if (!videoTrack) {
322
+ throw new Error("No video track found");
323
+ }
324
+ this.#videoInfo = {
325
+ width: videoTrack.video.width,
326
+ height: videoTrack.video.height,
327
+ frameCount: videoTrack.nb_samples,
328
+ duration: videoTrack.duration / videoTrack.timescale,
329
+ fps: videoTrack.nb_samples / (videoTrack.duration / videoTrack.timescale),
330
+ codec: videoTrack.codec,
331
+ videoTrackId: videoTrack.id
332
+ };
333
+ const audioTrack = info.audioTracks?.[0] ?? null;
334
+ if (audioTrack) {
335
+ this.#audioData = await this.#readTrackSamples(createFile, audioTrack);
336
+ }
337
+ this.#videoMp4 = createFile();
338
+ await new Promise((resolve, reject) => {
339
+ this.#videoMp4.onReady = resolve;
340
+ this.#videoMp4.onError = reject;
341
+ const buffer = this.#sourceBuffer.slice(0);
342
+ buffer.fileStart = 0;
343
+ this.#videoMp4.appendBuffer(buffer);
344
+ this.#videoMp4.flush();
345
+ });
346
+ return this.#videoInfo;
347
+ }
348
+ /**
349
+ * @param {typeof import('mp4box').createFile} createFile
350
+ * @param {object} track
351
+ */
352
+ async #readTrackSamples(createFile, track) {
353
+ const mp4 = createFile();
354
+ const samples = [];
355
+ await new Promise((resolve, reject) => {
356
+ mp4.onReady = () => {
357
+ mp4.onSamples = (_trackId, _user, trackSamples) => {
358
+ for (const sample of trackSamples) {
359
+ samples.push({
360
+ data: sample.data,
361
+ timestamp: Math.round(sample.cts * 1e6 / sample.timescale),
362
+ duration: Math.round(sample.duration * 1e6 / sample.timescale),
363
+ type: sample.is_sync ? "key" : "delta"
364
+ });
365
+ }
366
+ };
367
+ mp4.setExtractionOptions(track.id);
368
+ mp4.start();
369
+ mp4.flush();
370
+ queueMicrotask(resolve);
371
+ };
372
+ mp4.onError = reject;
373
+ const buffer = this.#sourceBuffer.slice(0);
374
+ buffer.fileStart = 0;
375
+ mp4.appendBuffer(buffer);
376
+ mp4.flush();
377
+ });
378
+ return {
379
+ codec: "aac",
380
+ sampleRate: track.audio?.sample_rate ?? 48e3,
381
+ numberOfChannels: track.audio?.channel_count ?? 2,
382
+ samples
383
+ };
384
+ }
385
+ async extractAudio() {
386
+ return this.#audioData;
387
+ }
388
+ async *decodeFrames() {
389
+ if (!this.#videoMp4 || !this.#videoInfo) {
390
+ throw new Error("Call open() first");
391
+ }
392
+ const { width, height, videoTrackId } = this.#videoInfo;
393
+ const pendingFrames = [];
394
+ let resolveNext = null;
395
+ let done = false;
396
+ const decoder = new VideoDecoder({
397
+ output: (frame) => {
398
+ const canvas = new OffscreenCanvas(width, height);
399
+ const ctx = canvas.getContext("2d");
400
+ ctx.drawImage(frame, 0, 0);
401
+ const imageData = ctx.getImageData(0, 0, width, height);
402
+ const decoded = {
403
+ imageData,
404
+ timestamp: frame.timestamp,
405
+ frameIndex: this.#frameIndex++
406
+ };
407
+ frame.close();
408
+ if (resolveNext) {
409
+ const r = resolveNext;
410
+ resolveNext = null;
411
+ r(decoded);
412
+ } else {
413
+ pendingFrames.push(decoded);
414
+ }
415
+ },
416
+ error: (e) => {
417
+ console.error("Decoder error:", e);
418
+ done = true;
419
+ }
420
+ });
421
+ decoder.configure({
422
+ codec: this.#videoInfo.codec,
423
+ codedWidth: width,
424
+ codedHeight: height
425
+ });
426
+ this.#videoMp4.onSamples = (_trackId, _user, trackSamples) => {
427
+ for (const sample of trackSamples) {
428
+ const chunk = new EncodedVideoChunk({
429
+ type: sample.is_sync ? "key" : "delta",
430
+ timestamp: sample.cts * 1e6 / sample.timescale,
431
+ duration: sample.duration * 1e6 / sample.timescale,
432
+ data: sample.data
433
+ });
434
+ decoder.decode(chunk);
435
+ }
436
+ };
437
+ this.#videoMp4.setExtractionOptions(videoTrackId);
438
+ this.#videoMp4.start();
439
+ while (!done) {
440
+ if (pendingFrames.length > 0) {
441
+ yield pendingFrames.shift();
442
+ } else {
443
+ const frame = await new Promise((resolve) => {
444
+ resolveNext = resolve;
445
+ if (decoder.decodeQueueSize === 0) {
446
+ decoder.flush().then(() => {
447
+ done = true;
448
+ resolve(null);
449
+ });
450
+ }
451
+ });
452
+ if (frame) yield frame;
453
+ else break;
454
+ }
455
+ }
456
+ decoder.close();
457
+ }
458
+ async close() {
459
+ this.#videoMp4 = null;
460
+ this.#videoInfo = null;
461
+ this.#audioData = null;
462
+ this.#sourceBuffer = null;
463
+ this.#frameIndex = 0;
464
+ }
465
+ };
466
+ }
467
+ });
468
+
469
+ // src/video/videoEncoder.base.js
470
+ var VideoEncoderBase;
471
+ var init_videoEncoder_base = __esm({
472
+ "src/video/videoEncoder.base.js"() {
473
+ VideoEncoderBase = class {
474
+ async init() {
475
+ throw new Error("Not implemented");
476
+ }
477
+ async encodeFrame() {
478
+ throw new Error("Not implemented");
479
+ }
480
+ async setAudioTrack() {
481
+ throw new Error("Not implemented");
482
+ }
483
+ async finalize() {
484
+ throw new Error("Not implemented");
485
+ }
486
+ };
487
+ }
488
+ });
489
+
490
+ // src/video/videoEncoder.webcodecs.js
491
+ var WebCodecsEncoder;
492
+ var init_videoEncoder_webcodecs = __esm({
493
+ "src/video/videoEncoder.webcodecs.js"() {
494
+ init_videoEncoder_base();
495
+ WebCodecsEncoder = class extends VideoEncoderBase {
496
+ #muxer = null;
497
+ #encoder = null;
498
+ #frameCount = 0;
499
+ #audioSamples = null;
500
+ _target = null;
501
+ async init(config) {
502
+ if (typeof VideoEncoder === "undefined") {
503
+ throw new Error("WebCodecs API not available");
504
+ }
505
+ const { Muxer, ArrayBufferTarget } = await import("mp4-muxer");
506
+ const target = new ArrayBufferTarget();
507
+ const muxerConfig = {
508
+ target,
509
+ video: {
510
+ codec: "avc",
511
+ width: config.width,
512
+ height: config.height
513
+ },
514
+ fastStart: "in-memory"
515
+ };
516
+ if (config.audio) {
517
+ muxerConfig.audio = {
518
+ codec: config.audio.codec || "aac",
519
+ numberOfChannels: config.audio.numberOfChannels || 2,
520
+ sampleRate: config.audio.sampleRate || 48e3
521
+ };
522
+ }
523
+ this.#muxer = new Muxer(muxerConfig);
524
+ this.#encoder = new VideoEncoder({
525
+ output: (chunk, meta) => {
526
+ this.#muxer.addVideoChunk(chunk, meta);
527
+ },
528
+ error: (e) => {
529
+ console.error("Encoder error:", e);
530
+ }
531
+ });
532
+ this.#encoder.configure({
533
+ codec: config.codec || "avc1.42001f",
534
+ width: config.width,
535
+ height: config.height,
536
+ bitrate: config.bitrate || 5e6,
537
+ framerate: config.fps
538
+ });
539
+ this._target = target;
540
+ }
541
+ async encodeFrame(imageData, timestamp) {
542
+ const frame = new VideoFrame(imageData.data.buffer, {
543
+ format: "RGBA",
544
+ codedWidth: imageData.width,
545
+ codedHeight: imageData.height,
546
+ timestamp
547
+ });
548
+ const isKey = this.#frameCount % 30 === 0;
549
+ this.#encoder.encode(frame, { keyFrame: isKey });
550
+ frame.close();
551
+ this.#frameCount++;
552
+ }
553
+ /**
554
+ * Queue encoded audio samples for passthrough muxing after video finalize.
555
+ * @param {{ codec?: string, sampleRate: number, numberOfChannels: number, samples: Array<{ data: Uint8Array, timestamp: number, duration: number, type: 'key'|'delta' }> }} audioData
556
+ */
557
+ async setAudioTrack(audioData) {
558
+ this.#audioSamples = audioData;
559
+ }
560
+ async finalize() {
561
+ await this.#encoder.flush();
562
+ this.#encoder.close();
563
+ if (this.#audioSamples?.samples?.length) {
564
+ for (const sample of this.#audioSamples.samples) {
565
+ this.#muxer.addAudioChunkRaw(
566
+ sample.data,
567
+ sample.type,
568
+ sample.timestamp,
569
+ sample.duration
570
+ );
571
+ }
572
+ }
573
+ this.#muxer.finalize();
574
+ return new Blob([this._target.buffer], { type: "video/mp4" });
575
+ }
576
+ };
577
+ }
578
+ });
579
+
580
+ // src/video/pipeline.browser.js
581
+ var pipeline_browser_exports = {};
582
+ __export(pipeline_browser_exports, {
583
+ processVideo: () => processVideo
584
+ });
585
+ async function processVideo(input, options = {}) {
586
+ const { bitrate, onProgress, videoProfile = "diamond" } = options;
587
+ const decoder = new WebCodecsDecoder();
588
+ const videoInfo = await decoder.open(input);
589
+ const processor = createFrameProcessor(videoInfo.width, videoInfo.height, { videoProfile });
590
+ const audioData = await decoder.extractAudio();
591
+ const encoder = new WebCodecsEncoder();
592
+ await encoder.init({
593
+ width: videoInfo.width,
594
+ height: videoInfo.height,
595
+ fps: videoInfo.fps,
596
+ bitrate: bitrate || 5e6,
597
+ audio: audioData ? {
598
+ codec: audioData.codec,
599
+ sampleRate: audioData.sampleRate,
600
+ numberOfChannels: audioData.numberOfChannels
601
+ } : void 0
602
+ });
603
+ if (audioData) {
604
+ await encoder.setAudioTrack(audioData);
605
+ }
606
+ let frameIndex = 0;
607
+ let processedFrames = 0;
608
+ let skippedFrames = 0;
609
+ let skipReason = null;
610
+ const totalFrames = videoInfo.frameCount || 0;
611
+ for await (const frame of decoder.decodeFrames()) {
612
+ const frameResult = processor.process(frame.imageData);
613
+ if (frameResult.processed) {
614
+ processedFrames++;
615
+ } else {
616
+ skippedFrames++;
617
+ skipReason = skipReason || frameResult.reason || "not_processed";
618
+ }
619
+ await encoder.encodeFrame(frame.imageData, frame.timestamp);
620
+ frameIndex++;
621
+ if (onProgress && totalFrames > 0) {
622
+ onProgress(frameIndex, totalFrames);
623
+ }
624
+ }
625
+ await decoder.close();
626
+ const output = await encoder.finalize();
627
+ output.videoProfile = processor.profile;
628
+ output.processedFrames = processedFrames;
629
+ output.skippedFrames = skippedFrames;
630
+ output.skipped = processedFrames === 0;
631
+ output.reason = processedFrames === 0 ? skipReason : null;
632
+ return output;
633
+ }
634
+ var init_pipeline_browser = __esm({
635
+ "src/video/pipeline.browser.js"() {
636
+ init_videoDecoder_webcodecs();
637
+ init_videoEncoder_webcodecs();
638
+ init_frameProcessor();
639
+ }
640
+ });
641
+
642
+ // src/core/gemini/geminiConfig.js
643
+ function normalizeGeminiProfile(profile) {
644
+ const value = typeof profile === "object" && profile ? profile.profile : profile;
645
+ if (value === "legacy" || value === "v1" || value === "V1") return "legacy";
646
+ return "current";
647
+ }
648
+ function getWatermarkTier(width, height) {
649
+ return width > LARGE_IMAGE_THRESHOLD && height > LARGE_IMAGE_THRESHOLD ? "large" : "small";
650
+ }
651
+ function calculateCurrentSmallMargin(width, height) {
652
+ const longSide = Math.max(width, height);
653
+ const shortSide = Math.min(width, height);
654
+ let sourceLongDim;
655
+ if (shortSide >= 566) {
656
+ sourceLongDim = 2752;
657
+ } else if (shortSide >= 550) {
658
+ sourceLongDim = 2816;
659
+ } else {
660
+ sourceLongDim = 2848;
661
+ }
662
+ return Math.round(192 * (longSide / sourceLongDim));
663
+ }
664
+ function detectGeminiWatermarkConfig(width, height, profile = "current") {
665
+ const normalizedProfile = normalizeGeminiProfile(profile);
666
+ const tier = getWatermarkTier(width, height);
667
+ const config = GEMINI_WATERMARK_PROFILES[normalizedProfile][tier];
668
+ const margin = config.margin ?? calculateCurrentSmallMargin(width, height);
669
+ const minDim = config.size + margin;
670
+ if (width < minDim || height < minDim) return null;
671
+ return { tier, profile: normalizedProfile, ...config, margin };
672
+ }
673
+ function getGeminiWatermarkInfo(width, height, profile = "current") {
674
+ const config = detectGeminiWatermarkConfig(width, height, profile);
675
+ if (!config) return null;
676
+ return {
677
+ profile: config.profile,
678
+ tier: config.tier,
679
+ alphaMapKey: config.alphaMapKey,
680
+ size: config.size,
681
+ margin: config.margin,
682
+ position: {
683
+ x: width - config.margin - config.size,
684
+ y: height - config.margin - config.size,
685
+ width: config.size,
686
+ height: config.size
687
+ }
688
+ };
689
+ }
690
+ var LARGE_IMAGE_THRESHOLD, GEMINI_WATERMARK_PROFILES, GEMINI_WATERMARK_SIZES;
691
+ var init_geminiConfig = __esm({
692
+ "src/core/gemini/geminiConfig.js"() {
693
+ LARGE_IMAGE_THRESHOLD = 1024;
694
+ GEMINI_WATERMARK_PROFILES = {
695
+ current: {
696
+ small: { size: 36, alphaMapKey: "gemini-v2-36" },
697
+ large: { size: 96, margin: 192, alphaMapKey: "gemini-v2-96" }
698
+ },
699
+ legacy: {
700
+ small: { size: 48, margin: 32, alphaMapKey: "gemini-48" },
701
+ large: { size: 96, margin: 64, alphaMapKey: "gemini-96" }
702
+ }
703
+ };
704
+ GEMINI_WATERMARK_SIZES = GEMINI_WATERMARK_PROFILES.legacy;
705
+ }
706
+ });
707
+
708
+ // src/core/gemini/geminiAlphaMaps.js
709
+ function getGeminiAlphaMap(key) {
710
+ return geminiAlphaMapRegistry.get(key) || loadCalibratedAlphaMap(key);
711
+ }
712
+ function registerGeminiAlphaMap(key, data, size, source = "custom") {
713
+ geminiAlphaMapRegistry.set(key, { data, width: size, height: size, source });
714
+ }
715
+ var geminiAlphaMapRegistry, GEMINI_ALPHA_MAP_KEYS;
716
+ var init_geminiAlphaMaps = __esm({
717
+ "src/core/gemini/geminiAlphaMaps.js"() {
718
+ init_calibratedAlphaData();
719
+ geminiAlphaMapRegistry = /* @__PURE__ */ new Map();
720
+ GEMINI_ALPHA_MAP_KEYS = [
721
+ "gemini-v2-36",
722
+ "gemini-v2-96",
723
+ "gemini-48",
724
+ "gemini-96"
725
+ ];
726
+ for (const key of GEMINI_ALPHA_MAP_KEYS) {
727
+ const loaded = loadCalibratedAlphaMap(key);
728
+ if (loaded) {
729
+ geminiAlphaMapRegistry.set(key, loaded);
730
+ }
731
+ }
732
+ }
733
+ });
734
+
735
+ // src/core/gemini/restorationMetrics.js
736
+ function cloneImageData(imageData) {
737
+ return {
738
+ width: imageData.width,
739
+ height: imageData.height,
740
+ data: new Uint8ClampedArray(imageData.data)
741
+ };
742
+ }
743
+ function assessAlphaBandHalo(imageData, position, alphaMap) {
744
+ let bandSum = 0;
745
+ let bandSq = 0;
746
+ let bandCount = 0;
747
+ let outerSum = 0;
748
+ let outerSq = 0;
749
+ let outerCount = 0;
750
+ for (let row = -HALO_OUTER_MARGIN; row < position.height + HALO_OUTER_MARGIN; row++) {
751
+ for (let col = -HALO_OUTER_MARGIN; col < position.width + HALO_OUTER_MARGIN; col++) {
752
+ const pixelX = position.x + col;
753
+ const pixelY = position.y + row;
754
+ if (pixelX < 0 || pixelY < 0 || pixelX >= imageData.width || pixelY >= imageData.height) {
755
+ continue;
756
+ }
757
+ const idx = (pixelY * imageData.width + pixelX) * 4;
758
+ const lum = 0.2126 * imageData.data[idx] + 0.7152 * imageData.data[idx + 1] + 0.0722 * imageData.data[idx + 2];
759
+ const inside = row >= 0 && col >= 0 && row < position.height && col < position.width;
760
+ const alpha = inside ? alphaMap[row * position.width + col] : 0;
761
+ if (inside && alpha >= HALO_MIN_ALPHA && alpha <= HALO_MAX_ALPHA) {
762
+ bandSum += lum;
763
+ bandSq += lum * lum;
764
+ bandCount++;
765
+ continue;
766
+ }
767
+ if (!inside || alpha <= HALO_OUTSIDE_ALPHA_MAX) {
768
+ outerSum += lum;
769
+ outerSq += lum * lum;
770
+ outerCount++;
771
+ }
772
+ }
773
+ }
774
+ const bandMean = bandCount > 0 ? bandSum / bandCount : 0;
775
+ const outerMean = outerCount > 0 ? outerSum / outerCount : 0;
776
+ const outerStd = outerCount > 0 ? Math.sqrt(Math.max(0, outerSq / outerCount - outerMean * outerMean)) : 1;
777
+ const deltaLum = bandMean - outerMean;
778
+ const visibility = deltaLum / Math.max(1, outerStd);
779
+ return { bandCount, outerCount, deltaLum, visibility };
780
+ }
781
+ function calculateNearBlackRatio(imageData, position) {
782
+ let nearBlack = 0;
783
+ let total = 0;
784
+ for (let row = 0; row < position.height; row++) {
785
+ for (let col = 0; col < position.width; col++) {
786
+ const idx = ((position.y + row) * imageData.width + (position.x + col)) * 4;
787
+ const r = imageData.data[idx];
788
+ const g = imageData.data[idx + 1];
789
+ const b = imageData.data[idx + 2];
790
+ if (r <= NEAR_BLACK_THRESHOLD && g <= NEAR_BLACK_THRESHOLD && b <= NEAR_BLACK_THRESHOLD) {
791
+ nearBlack++;
792
+ }
793
+ total++;
794
+ }
795
+ }
796
+ return total > 0 ? nearBlack / total : 0;
797
+ }
798
+ function computeRegionNCC(imgData, imgW, position, alphaMap, step = 2) {
799
+ let sumImg = 0;
800
+ let sumMask = 0;
801
+ let sumImgSq = 0;
802
+ let sumMaskSq = 0;
803
+ let sumProduct = 0;
804
+ let count = 0;
805
+ const { x, y, width: maskW, height: maskH } = position;
806
+ for (let my = 0; my < maskH; my += step) {
807
+ for (let mx = 0; mx < maskW; mx += step) {
808
+ const alpha = alphaMap[my * maskW + mx];
809
+ if (alpha < 0.01) continue;
810
+ const idx = ((y + my) * imgW + (x + mx)) * 4;
811
+ const brightness = (imgData[idx] + imgData[idx + 1] + imgData[idx + 2]) / 3;
812
+ sumImg += brightness;
813
+ sumMask += alpha;
814
+ sumImgSq += brightness * brightness;
815
+ sumMaskSq += alpha * alpha;
816
+ sumProduct += brightness * alpha;
817
+ count++;
818
+ }
819
+ }
820
+ if (count < 10) return 0;
821
+ const meanImg = sumImg / count;
822
+ const meanMask = sumMask / count;
823
+ const numerator = sumProduct / count - meanImg * meanMask;
824
+ const denomImg = Math.sqrt(Math.max(0, sumImgSq / count - meanImg * meanImg));
825
+ const denomMask = Math.sqrt(Math.max(0, sumMaskSq / count - meanMask * meanMask));
826
+ if (denomImg < 1e-6 || denomMask < 1e-6) return 0;
827
+ return Math.max(0, numerator / (denomImg * denomMask));
828
+ }
829
+ function validateRestoration(originalImageData, restoredImageData, position, alphaMap, preRemovalNcc) {
830
+ const halo = assessAlphaBandHalo(originalImageData, position, alphaMap);
831
+ const nearBlackRatio = calculateNearBlackRatio(restoredImageData, position);
832
+ const postNcc = computeRegionNCC(restoredImageData.data, restoredImageData.width, position, alphaMap);
833
+ const residualNccRatio = preRemovalNcc > 0 ? postNcc / preRemovalNcc : postNcc;
834
+ const haloOk = halo.bandCount >= 8 && halo.visibility >= MIN_HALO_VISIBILITY;
835
+ const residualOk = postNcc < 0.35 || residualNccRatio <= MAX_RESIDUAL_NCC_RATIO;
836
+ const noDarkHole = nearBlackRatio < 0.35;
837
+ const valid = haloOk && residualOk && noDarkHole;
838
+ return {
839
+ valid,
840
+ decisionTier: valid ? "validated" : "rejected",
841
+ haloVisibility: halo.visibility,
842
+ residualNccRatio,
843
+ nearBlackRatio
844
+ };
845
+ }
846
+ var HALO_MIN_ALPHA, HALO_MAX_ALPHA, HALO_OUTSIDE_ALPHA_MAX, HALO_OUTER_MARGIN, MIN_HALO_VISIBILITY, MAX_RESIDUAL_NCC_RATIO, NEAR_BLACK_THRESHOLD;
847
+ var init_restorationMetrics = __esm({
848
+ "src/core/gemini/restorationMetrics.js"() {
849
+ HALO_MIN_ALPHA = 0.12;
850
+ HALO_MAX_ALPHA = 0.35;
851
+ HALO_OUTSIDE_ALPHA_MAX = 0.01;
852
+ HALO_OUTER_MARGIN = 3;
853
+ MIN_HALO_VISIBILITY = 0.35;
854
+ MAX_RESIDUAL_NCC_RATIO = 0.55;
855
+ NEAR_BLACK_THRESHOLD = 5;
856
+ }
857
+ });
858
+
859
+ // src/core/gemini/imageProcessor.js
860
+ var imageProcessor_exports = {};
861
+ __export(imageProcessor_exports, {
862
+ computeNCC: () => computeNCC,
863
+ createImageProcessor: () => createImageProcessor,
864
+ findWatermarkPosition: () => findWatermarkPosition,
865
+ processImage: () => processImage
866
+ });
867
+ function computeNCC(imgData, imgW, x, y, maskAlpha, maskW, maskH, step) {
868
+ let sumImg = 0, sumMask = 0;
869
+ let sumImgSq = 0, sumMaskSq = 0;
870
+ let sumProduct = 0;
871
+ let count = 0;
872
+ for (let my = 0; my < maskH; my += step) {
873
+ for (let mx = 0; mx < maskW; mx += step) {
874
+ const alpha = maskAlpha[my * maskW + mx];
875
+ if (alpha < 0.01) continue;
876
+ const px = x + mx;
877
+ const py = y + my;
878
+ const idx = (py * imgW + px) * 4;
879
+ const brightness = (imgData[idx] + imgData[idx + 1] + imgData[idx + 2]) / 3;
880
+ sumImg += brightness;
881
+ sumMask += alpha;
882
+ sumImgSq += brightness * brightness;
883
+ sumMaskSq += alpha * alpha;
884
+ sumProduct += brightness * alpha;
885
+ count++;
886
+ }
887
+ }
888
+ if (count < 10) return 0;
889
+ const meanImg = sumImg / count;
890
+ const meanMask = sumMask / count;
891
+ const numerator = sumProduct / count - meanImg * meanMask;
892
+ const denomImg = Math.sqrt(Math.max(0, sumImgSq / count - meanImg * meanImg));
893
+ const denomMask = Math.sqrt(Math.max(0, sumMaskSq / count - meanMask * meanMask));
894
+ if (denomImg < 1e-6 || denomMask < 1e-6) return 0;
895
+ return Math.max(0, numerator / (denomImg * denomMask));
896
+ }
897
+ function findWatermarkPosition(imageData, mask, expectedPosition) {
898
+ const { width: imgW, height: imgH, data: imgData } = imageData;
899
+ const { width: maskW, height: maskH, alpha: maskAlpha } = mask;
900
+ let bestX = 0, bestY = 0, bestScore = -1;
901
+ const expectedX = expectedPosition?.x ?? imgW - maskW;
902
+ const expectedY = expectedPosition?.y ?? imgH - maskH;
903
+ const searchRadius = Math.max(16, Math.round(maskW * 0.75));
904
+ const searchStartX = Math.max(0, expectedX - searchRadius);
905
+ const searchStartY = Math.max(0, expectedY - searchRadius);
906
+ const searchMaxX = Math.min(imgW - maskW, expectedX + searchRadius);
907
+ const searchMaxY = Math.min(imgH - maskH, expectedY + searchRadius);
908
+ for (let y = searchStartY; y <= searchMaxY; y += 2) {
909
+ for (let x = searchStartX; x <= searchMaxX; x += 2) {
910
+ const score = computeNCC(imgData, imgW, x, y, maskAlpha, maskW, maskH, 2);
911
+ if (score > bestScore) {
912
+ bestScore = score;
913
+ bestX = x;
914
+ bestY = y;
915
+ }
916
+ }
917
+ }
918
+ const fineStartX = Math.max(0, bestX - 2);
919
+ const fineStartY = Math.max(0, bestY - 2);
920
+ const fineEndX = Math.min(searchMaxX, bestX + 2);
921
+ const fineEndY = Math.min(searchMaxY, bestY + 2);
922
+ for (let y = fineStartY; y <= fineEndY; y++) {
923
+ for (let x = fineStartX; x <= fineEndX; x++) {
924
+ const score = computeNCC(imgData, imgW, x, y, maskAlpha, maskW, maskH, 1);
925
+ if (score > bestScore) {
926
+ bestScore = score;
927
+ bestX = x;
928
+ bestY = y;
929
+ }
930
+ }
931
+ }
932
+ return bestScore >= 0.5 ? { x: bestX, y: bestY, confidence: bestScore } : null;
933
+ }
934
+ function getProfilesToTry(profile) {
935
+ if (!profile || profile === "auto") return PROFILE_ORDER;
936
+ return [normalizeGeminiProfile(profile)];
937
+ }
938
+ function emptyResult(imageData, reason, attemptedProfiles, profile = null, meta = {}) {
939
+ return {
940
+ imageData,
941
+ processed: false,
942
+ confidence: 0,
943
+ position: null,
944
+ reason,
945
+ profile,
946
+ attemptedProfiles,
947
+ decisionTier: meta.decisionTier ?? null,
948
+ meta: meta.validation ?? null
949
+ };
950
+ }
951
+ function normalizeAdaptiveMode(adaptiveMode) {
952
+ if (!adaptiveMode || adaptiveMode === "auto") return "auto";
953
+ if (adaptiveMode === "off") return "off";
954
+ return "auto";
955
+ }
956
+ function copyImageData(target, source) {
957
+ target.data.set(source.data);
958
+ }
959
+ function processImageWithProfile(imageData, options, profile) {
960
+ const { width, height } = imageData;
961
+ const {
962
+ skipDetection = false,
963
+ forcePosition,
964
+ adaptiveMode = "auto"
965
+ } = options;
966
+ const useValidation = normalizeAdaptiveMode(adaptiveMode) === "auto" && !skipDetection && !forcePosition;
967
+ const info = getGeminiWatermarkInfo(width, height, profile);
968
+ if (!info) {
969
+ return emptyResult(imageData, "image_too_small", [profile], profile);
970
+ }
971
+ const alphaMapEntry = getGeminiAlphaMap(info.alphaMapKey);
972
+ if (!alphaMapEntry) {
973
+ return emptyResult(imageData, "missing_alpha_map", [profile], profile);
974
+ }
975
+ let position;
976
+ let confidence = 1;
977
+ if (forcePosition) {
978
+ position = {
979
+ x: forcePosition.x,
980
+ y: forcePosition.y,
981
+ width: info.size,
982
+ height: info.size
983
+ };
984
+ } else if (skipDetection) {
985
+ position = info.position;
986
+ } else {
987
+ const mask = {
988
+ width: alphaMapEntry.width,
989
+ height: alphaMapEntry.height,
990
+ alpha: alphaMapEntry.data
991
+ };
992
+ const match = findWatermarkPosition(imageData, mask, info.position);
993
+ if (!match) {
994
+ return emptyResult(imageData, "watermark_not_detected", [profile], profile);
995
+ }
996
+ confidence = match.confidence;
997
+ position = {
998
+ x: match.x,
999
+ y: match.y,
1000
+ width: alphaMapEntry.width,
1001
+ height: alphaMapEntry.height
1002
+ };
1003
+ }
1004
+ const workingCopy = cloneImageData(imageData);
1005
+ removeWatermark(workingCopy, alphaMapEntry.data, position);
1006
+ let decisionTier = skipDetection || forcePosition ? "ncc_only" : "ncc_only";
1007
+ let validationMeta = null;
1008
+ if (useValidation) {
1009
+ const preRemovalNcc = computeNCC(
1010
+ imageData.data,
1011
+ width,
1012
+ position.x,
1013
+ position.y,
1014
+ alphaMapEntry.data,
1015
+ alphaMapEntry.width,
1016
+ alphaMapEntry.height,
1017
+ 2
1018
+ );
1019
+ const validation = validateRestoration(
1020
+ imageData,
1021
+ workingCopy,
1022
+ position,
1023
+ alphaMapEntry.data,
1024
+ preRemovalNcc
1025
+ );
1026
+ validationMeta = validation;
1027
+ if (!validation.valid) {
1028
+ return emptyResult(
1029
+ imageData,
1030
+ "restoration_rejected",
1031
+ [profile],
1032
+ profile,
1033
+ { decisionTier: validation.decisionTier, validation }
1034
+ );
1035
+ }
1036
+ decisionTier = validation.decisionTier;
1037
+ }
1038
+ copyImageData(imageData, workingCopy);
1039
+ return {
1040
+ imageData,
1041
+ processed: true,
1042
+ confidence,
1043
+ position,
1044
+ profile,
1045
+ attemptedProfiles: [profile],
1046
+ decisionTier,
1047
+ meta: validationMeta
1048
+ };
1049
+ }
1050
+ function processImage(imageData, options = {}) {
1051
+ const profile = options.profile ?? "auto";
1052
+ const profilesToTry = getProfilesToTry(profile);
1053
+ const maxPasses = Math.max(1, options.maxPasses ?? DEFAULT_MAX_PASSES);
1054
+ const attemptedProfiles = [];
1055
+ let lastResult = null;
1056
+ let passCount = 0;
1057
+ for (const activeProfile of profilesToTry) {
1058
+ if (passCount >= maxPasses) break;
1059
+ attemptedProfiles.push(activeProfile);
1060
+ passCount++;
1061
+ const result = processImageWithProfile(imageData, options, activeProfile);
1062
+ result.attemptedProfiles = [...attemptedProfiles];
1063
+ if (result.processed) return result;
1064
+ lastResult = result;
1065
+ if (result.reason !== "watermark_not_detected" && result.reason !== "restoration_rejected") break;
1066
+ }
1067
+ return {
1068
+ ...lastResult || emptyResult(imageData, "watermark_not_detected", attemptedProfiles),
1069
+ attemptedProfiles
1070
+ };
1071
+ }
1072
+ function createImageProcessor(targetWidth, targetHeight) {
1073
+ const cachedByProfile = /* @__PURE__ */ new Map();
1074
+ if (targetWidth && targetHeight) {
1075
+ for (const profile of PROFILE_ORDER) {
1076
+ const info = getGeminiWatermarkInfo(targetWidth, targetHeight, profile);
1077
+ if (info) {
1078
+ cachedByProfile.set(profile, {
1079
+ info,
1080
+ alphaMap: getGeminiAlphaMap(info.alphaMapKey)
1081
+ });
1082
+ }
1083
+ }
1084
+ }
1085
+ return {
1086
+ /**
1087
+ * Process an image to remove the Gemini watermark.
1088
+ * @param {ImageData} imageData
1089
+ * @param {{ skipDetection?: boolean, forcePosition?: { x: number, y: number }, profile?: 'auto'|'current'|'legacy'|'v1'|'v2' }} options
1090
+ */
1091
+ process(imageData, options = {}) {
1092
+ if (cachedByProfile.size > 0 && imageData.width === targetWidth && imageData.height === targetHeight) {
1093
+ const profilesToTry = getProfilesToTry(options.profile ?? "auto");
1094
+ const attemptedProfiles = [];
1095
+ let lastResult = null;
1096
+ for (const profile of profilesToTry) {
1097
+ attemptedProfiles.push(profile);
1098
+ const cached = cachedByProfile.get(profile);
1099
+ if (!cached?.info) {
1100
+ lastResult = emptyResult(imageData, "image_too_small", [...attemptedProfiles], profile);
1101
+ break;
1102
+ }
1103
+ if (!cached.alphaMap) {
1104
+ lastResult = emptyResult(imageData, "missing_alpha_map", [...attemptedProfiles], profile);
1105
+ break;
1106
+ }
1107
+ const result = processImageWithProfile(imageData, options, profile);
1108
+ result.attemptedProfiles = [...attemptedProfiles];
1109
+ if (result.processed) return result;
1110
+ lastResult = result;
1111
+ if (result.reason !== "watermark_not_detected" && result.reason !== "restoration_rejected") break;
1112
+ }
1113
+ return {
1114
+ ...lastResult || emptyResult(imageData, "watermark_not_detected", attemptedProfiles),
1115
+ attemptedProfiles
1116
+ };
1117
+ }
1118
+ return processImage(imageData, options);
1119
+ }
1120
+ };
1121
+ }
1122
+ var PROFILE_ORDER, DEFAULT_MAX_PASSES;
1123
+ var init_imageProcessor = __esm({
1124
+ "src/core/gemini/imageProcessor.js"() {
1125
+ init_blendModes();
1126
+ init_geminiConfig();
1127
+ init_geminiAlphaMaps();
1128
+ init_restorationMetrics();
1129
+ PROFILE_ORDER = ["current", "legacy"];
1130
+ DEFAULT_MAX_PASSES = 4;
1131
+ }
1132
+ });
1133
+
1134
+ // src/sdk/browser.js
1135
+ init_blendModes();
1136
+ init_frameProcessor();
1137
+ init_veoConfig();
1138
+ init_embeddedAlphaMaps();
1139
+ init_pipeline_browser();
1140
+ init_imageProcessor();
1141
+ init_geminiConfig();
1142
+ init_geminiAlphaMaps();
1143
+ init_frameProcessor();
1144
+ async function processVideoFile(file, options = {}) {
1145
+ const { processVideo: processVideo2 } = await Promise.resolve().then(() => (init_pipeline_browser(), pipeline_browser_exports));
1146
+ return processVideo2(file, { environment: "browser", ...options });
1147
+ }
1148
+ async function removeGeminiWatermark(file, options = {}) {
1149
+ const { quality = 0.95, format = "image/png", skipDetection = false, profile = "auto", adaptiveMode = "auto", maxPasses = 4 } = options;
1150
+ const bitmap = await createImageBitmap(file);
1151
+ const { width, height } = bitmap;
1152
+ const canvas = new OffscreenCanvas(width, height);
1153
+ const ctx = canvas.getContext("2d");
1154
+ ctx.drawImage(bitmap, 0, 0);
1155
+ bitmap.close();
1156
+ const imageData = ctx.getImageData(0, 0, width, height);
1157
+ const { processImage: processImage2 } = await Promise.resolve().then(() => (init_imageProcessor(), imageProcessor_exports));
1158
+ const result = processImage2(imageData, { skipDetection, profile, adaptiveMode, maxPasses });
1159
+ if (!result.processed) {
1160
+ return {
1161
+ blob: file instanceof Blob ? file : new Blob([file]),
1162
+ width,
1163
+ height,
1164
+ detected: false,
1165
+ confidence: 0,
1166
+ status: result.reason || "not_processed",
1167
+ profile: result.profile,
1168
+ attemptedProfiles: result.attemptedProfiles,
1169
+ decisionTier: result.decisionTier ?? null
1170
+ };
1171
+ }
1172
+ ctx.putImageData(result.imageData, 0, 0);
1173
+ const outputBlob = await canvas.convertToBlob({ type: format, quality });
1174
+ return {
1175
+ blob: outputBlob,
1176
+ width,
1177
+ height,
1178
+ detected: true,
1179
+ confidence: result.confidence,
1180
+ status: "success",
1181
+ profile: result.profile,
1182
+ attemptedProfiles: result.attemptedProfiles,
1183
+ decisionTier: result.decisionTier ?? null
1184
+ };
1185
+ }
1186
+ export {
1187
+ GEMINI_DIAMOND_VIDEO_CATALOG,
1188
+ GEMINI_WATERMARK_PROFILES,
1189
+ LEGACY_VEO_TEXT_CATALOG,
1190
+ VEO_WATERMARK_CATALOG,
1191
+ VIDEO_WATERMARK_PROFILES,
1192
+ calculateWatermarkPosition,
1193
+ createFrameProcessor,
1194
+ createImageProcessor,
1195
+ detectVeoWatermarkConfig,
1196
+ getEmbeddedAlphaMap,
1197
+ getGeminiAlphaMap,
1198
+ getGeminiWatermarkInfo,
1199
+ getVeoWatermarkInfo,
1200
+ normalizeVideoWatermarkProfile,
1201
+ processFrame,
1202
+ processImage,
1203
+ processFrame as processImageFrame,
1204
+ processVideo,
1205
+ processVideoFile,
1206
+ registerAlphaMap,
1207
+ registerGeminiAlphaMap,
1208
+ removeGeminiWatermark,
1209
+ removeWatermark
1210
+ };
1211
+ //# sourceMappingURL=browser.js.map