n8n-nodes-ca-google-sheets-style 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ export * from './nodes/GoogleSheetsStyle/GoogleSheetsStyle.node';
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./nodes/GoogleSheetsStyle/GoogleSheetsStyle.node"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1GQUFpRSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbm9kZXMvR29vZ2xlU2hlZXRzU3R5bGUvR29vZ2xlU2hlZXRzU3R5bGUubm9kZSc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class GoogleSheetsStyle implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,393 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GoogleSheetsStyle = void 0;
4
+ // Utility functions
5
+ function parseRange(range) {
6
+ const match = range.match(/([A-Z]+)(\d+):([A-Z]+)(\d+)/);
7
+ if (!match) {
8
+ throw new Error(`Invalid range format: ${range}`);
9
+ }
10
+ return {
11
+ startCol: letterToCol(match[1]),
12
+ startRow: parseInt(match[2], 10),
13
+ endCol: letterToCol(match[3]),
14
+ endRow: parseInt(match[4], 10),
15
+ };
16
+ }
17
+ function letterToCol(letter) {
18
+ let col = 0;
19
+ for (let i = 0; i < letter.length; i++) {
20
+ col = col * 26 + (letter.charCodeAt(i) - 64);
21
+ }
22
+ return col;
23
+ }
24
+ function colToLetter(col) {
25
+ let letter = '';
26
+ while (col > 0) {
27
+ const temp = (col - 1) % 26;
28
+ letter = String.fromCharCode(temp + 65) + letter;
29
+ col = Math.floor((col - temp) / 26);
30
+ }
31
+ return letter;
32
+ }
33
+ function hexToRgb(hex) {
34
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
35
+ if (!result) {
36
+ return { red: 1, green: 1, blue: 1 };
37
+ }
38
+ return {
39
+ red: parseInt(result[1], 16) / 255,
40
+ green: parseInt(result[2], 16) / 255,
41
+ blue: parseInt(result[3], 16) / 255,
42
+ };
43
+ }
44
+ function rgbToHex(rgb) {
45
+ const r = Math.round((rgb.red || 0) * 255);
46
+ const g = Math.round((rgb.green || 0) * 255);
47
+ const b = Math.round((rgb.blue || 0) * 255);
48
+ return '#' + [r, g, b].map(x => x.toString(16).padStart(2, '0')).join('');
49
+ }
50
+ function extractFormat(format) {
51
+ const result = {};
52
+ if (format.backgroundColor) {
53
+ result.backgroundColor = rgbToHex(format.backgroundColor);
54
+ }
55
+ if (format.textFormat) {
56
+ result.textFormat = {
57
+ color: format.textFormat.foregroundColor
58
+ ? rgbToHex(format.textFormat.foregroundColor)
59
+ : undefined,
60
+ fontFamily: format.textFormat.fontFamily,
61
+ fontSize: format.textFormat.fontSize,
62
+ bold: format.textFormat.bold,
63
+ italic: format.textFormat.italic,
64
+ strikethrough: format.textFormat.strikethrough,
65
+ underline: format.textFormat.underline,
66
+ };
67
+ }
68
+ if (format.horizontalAlignment) {
69
+ result.horizontalAlignment = format.horizontalAlignment;
70
+ }
71
+ if (format.verticalAlignment) {
72
+ result.verticalAlignment = format.verticalAlignment;
73
+ }
74
+ return result;
75
+ }
76
+ class GoogleSheetsStyle {
77
+ constructor() {
78
+ this.description = {
79
+ displayName: 'Google Sheets Style',
80
+ name: 'googleSheetsStyle',
81
+ icon: 'file:googleSheets.svg',
82
+ group: ['transform'],
83
+ version: 1,
84
+ subtitle: '={{$parameter["operation"]}}',
85
+ description: 'Read and write cell styles in Google Sheets',
86
+ defaults: {
87
+ name: 'Google Sheets Style',
88
+ },
89
+ inputs: ['main'],
90
+ outputs: ['main'],
91
+ credentials: [
92
+ {
93
+ name: 'googleSheetsOAuth2Api',
94
+ required: true,
95
+ },
96
+ ],
97
+ properties: [
98
+ {
99
+ displayName: 'Operation',
100
+ name: 'operation',
101
+ type: 'options',
102
+ noDataExpression: true,
103
+ options: [
104
+ {
105
+ name: 'Get Style',
106
+ value: 'getStyle',
107
+ description: 'Get cell formatting/style from a range',
108
+ action: 'Get cell style',
109
+ },
110
+ {
111
+ name: 'Set Style',
112
+ value: 'setStyle',
113
+ description: 'Set cell formatting/style for a range',
114
+ action: 'Set cell style',
115
+ },
116
+ ],
117
+ default: 'getStyle',
118
+ },
119
+ {
120
+ displayName: 'Spreadsheet ID',
121
+ name: 'spreadsheetId',
122
+ type: 'string',
123
+ required: true,
124
+ default: '',
125
+ description: 'The ID of the spreadsheet (from URL)',
126
+ placeholder: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms',
127
+ },
128
+ {
129
+ displayName: 'Sheet ID',
130
+ name: 'sheetId',
131
+ type: 'number',
132
+ required: true,
133
+ default: 0,
134
+ description: 'The ID of the sheet (gid parameter from URL)',
135
+ },
136
+ {
137
+ displayName: 'Range',
138
+ name: 'range',
139
+ type: 'string',
140
+ required: true,
141
+ default: 'A1:B2',
142
+ description: 'The A1 notation of the range (e.g., A1:B2)',
143
+ placeholder: 'A1:B2',
144
+ },
145
+ // Set Style options
146
+ {
147
+ displayName: 'Background Color',
148
+ name: 'backgroundColor',
149
+ type: 'color',
150
+ default: '#ffffff',
151
+ displayOptions: {
152
+ show: {
153
+ operation: ['setStyle'],
154
+ },
155
+ },
156
+ description: 'Background color of the cells',
157
+ },
158
+ {
159
+ displayName: 'Text Color',
160
+ name: 'textColor',
161
+ type: 'color',
162
+ default: '#000000',
163
+ displayOptions: {
164
+ show: {
165
+ operation: ['setStyle'],
166
+ },
167
+ },
168
+ description: 'Text/foreground color',
169
+ },
170
+ {
171
+ displayName: 'Font Size',
172
+ name: 'fontSize',
173
+ type: 'number',
174
+ default: 10,
175
+ displayOptions: {
176
+ show: {
177
+ operation: ['setStyle'],
178
+ },
179
+ },
180
+ description: 'Font size in points',
181
+ },
182
+ {
183
+ displayName: 'Bold',
184
+ name: 'bold',
185
+ type: 'boolean',
186
+ default: false,
187
+ displayOptions: {
188
+ show: {
189
+ operation: ['setStyle'],
190
+ },
191
+ },
192
+ description: 'Whether to make text bold',
193
+ },
194
+ {
195
+ displayName: 'Italic',
196
+ name: 'italic',
197
+ type: 'boolean',
198
+ default: false,
199
+ displayOptions: {
200
+ show: {
201
+ operation: ['setStyle'],
202
+ },
203
+ },
204
+ description: 'Whether to make text italic',
205
+ },
206
+ {
207
+ displayName: 'Horizontal Alignment',
208
+ name: 'horizontalAlignment',
209
+ type: 'options',
210
+ options: [
211
+ { name: 'Left', value: 'LEFT' },
212
+ { name: 'Center', value: 'CENTER' },
213
+ { name: 'Right', value: 'RIGHT' },
214
+ ],
215
+ default: 'LEFT',
216
+ displayOptions: {
217
+ show: {
218
+ operation: ['setStyle'],
219
+ },
220
+ },
221
+ description: 'Horizontal text alignment',
222
+ },
223
+ {
224
+ displayName: 'Fields to Update',
225
+ name: 'fieldsToUpdate',
226
+ type: 'multiOptions',
227
+ options: [
228
+ { name: 'Background Color', value: 'backgroundColor' },
229
+ { name: 'Text Color', value: 'textColor' },
230
+ { name: 'Font Size', value: 'fontSize' },
231
+ { name: 'Bold', value: 'bold' },
232
+ { name: 'Italic', value: 'italic' },
233
+ { name: 'Horizontal Alignment', value: 'horizontalAlignment' },
234
+ ],
235
+ default: ['backgroundColor'],
236
+ displayOptions: {
237
+ show: {
238
+ operation: ['setStyle'],
239
+ },
240
+ },
241
+ description: 'Which style fields to update',
242
+ },
243
+ ],
244
+ };
245
+ }
246
+ async execute() {
247
+ const items = this.getInputData();
248
+ const returnData = [];
249
+ const operation = this.getNodeParameter('operation', 0);
250
+ for (let i = 0; i < items.length; i++) {
251
+ try {
252
+ const spreadsheetId = this.getNodeParameter('spreadsheetId', i);
253
+ const sheetId = this.getNodeParameter('sheetId', i);
254
+ const range = this.getNodeParameter('range', i);
255
+ if (operation === 'getStyle') {
256
+ const result = await getStyle.call(this, spreadsheetId, sheetId, range);
257
+ returnData.push({ json: result });
258
+ }
259
+ else if (operation === 'setStyle') {
260
+ const result = await setStyle.call(this, spreadsheetId, sheetId, range, i);
261
+ returnData.push({ json: result });
262
+ }
263
+ }
264
+ catch (error) {
265
+ if (this.continueOnFail()) {
266
+ returnData.push({ json: { error: error.message } });
267
+ continue;
268
+ }
269
+ throw error;
270
+ }
271
+ }
272
+ return [returnData];
273
+ }
274
+ }
275
+ exports.GoogleSheetsStyle = GoogleSheetsStyle;
276
+ async function getStyle(spreadsheetId, sheetId, range) {
277
+ const { startRow, endRow, startCol, endCol } = parseRange(range);
278
+ const response = await this.helpers.requestOAuth2.call(this, 'googleSheetsOAuth2Api', {
279
+ method: 'GET',
280
+ uri: `https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}`,
281
+ qs: {
282
+ ranges: range,
283
+ fields: 'sheets.data.rowData.values.effectiveFormat,sheets.properties',
284
+ },
285
+ json: true,
286
+ });
287
+ const sheets = response.sheets;
288
+ if (!sheets || sheets.length === 0) {
289
+ return { error: 'No sheet data found' };
290
+ }
291
+ const sheetData = sheets[0];
292
+ const data = sheetData.data || [];
293
+ if (data.length === 0) {
294
+ return { error: 'No data in range' };
295
+ }
296
+ const rowData = data[0].rowData || [];
297
+ const styles = [];
298
+ rowData.forEach((row, rowIndex) => {
299
+ const values = row.values || [];
300
+ values.forEach((cell, colIndex) => {
301
+ const format = cell.effectiveFormat || {};
302
+ styles.push({
303
+ row: startRow + rowIndex,
304
+ col: startCol + colIndex,
305
+ cell: colToLetter(startCol + colIndex) + (startRow + rowIndex),
306
+ format: extractFormat(format),
307
+ });
308
+ });
309
+ });
310
+ return {
311
+ spreadsheetId,
312
+ sheetId,
313
+ range,
314
+ styles,
315
+ };
316
+ }
317
+ async function setStyle(spreadsheetId, sheetId, range, itemIndex) {
318
+ const { startRow, endRow, startCol, endCol } = parseRange(range);
319
+ const fieldsToUpdate = this.getNodeParameter('fieldsToUpdate', itemIndex);
320
+ const cellFormat = {};
321
+ const fields = [];
322
+ if (fieldsToUpdate.includes('backgroundColor')) {
323
+ const bgColor = this.getNodeParameter('backgroundColor', itemIndex);
324
+ cellFormat.backgroundColor = hexToRgb(bgColor);
325
+ fields.push('userEnteredFormat.backgroundColor');
326
+ }
327
+ if (fieldsToUpdate.includes('textColor')) {
328
+ const textColor = this.getNodeParameter('textColor', itemIndex);
329
+ if (!cellFormat.textFormat)
330
+ cellFormat.textFormat = {};
331
+ cellFormat.textFormat.foregroundColor = hexToRgb(textColor);
332
+ fields.push('userEnteredFormat.textFormat.foregroundColor');
333
+ }
334
+ if (fieldsToUpdate.includes('fontSize')) {
335
+ const fontSize = this.getNodeParameter('fontSize', itemIndex);
336
+ if (!cellFormat.textFormat)
337
+ cellFormat.textFormat = {};
338
+ cellFormat.textFormat.fontSize = fontSize;
339
+ fields.push('userEnteredFormat.textFormat.fontSize');
340
+ }
341
+ if (fieldsToUpdate.includes('bold')) {
342
+ const bold = this.getNodeParameter('bold', itemIndex);
343
+ if (!cellFormat.textFormat)
344
+ cellFormat.textFormat = {};
345
+ cellFormat.textFormat.bold = bold;
346
+ fields.push('userEnteredFormat.textFormat.bold');
347
+ }
348
+ if (fieldsToUpdate.includes('italic')) {
349
+ const italic = this.getNodeParameter('italic', itemIndex);
350
+ if (!cellFormat.textFormat)
351
+ cellFormat.textFormat = {};
352
+ cellFormat.textFormat.italic = italic;
353
+ fields.push('userEnteredFormat.textFormat.italic');
354
+ }
355
+ if (fieldsToUpdate.includes('horizontalAlignment')) {
356
+ const alignment = this.getNodeParameter('horizontalAlignment', itemIndex);
357
+ cellFormat.horizontalAlignment = alignment;
358
+ fields.push('userEnteredFormat.horizontalAlignment');
359
+ }
360
+ const request = {
361
+ requests: [
362
+ {
363
+ repeatCell: {
364
+ range: {
365
+ sheetId,
366
+ startRowIndex: startRow - 1,
367
+ endRowIndex: endRow,
368
+ startColumnIndex: startCol - 1,
369
+ endColumnIndex: endCol,
370
+ },
371
+ cell: {
372
+ userEnteredFormat: cellFormat,
373
+ },
374
+ fields: fields.join(','),
375
+ },
376
+ },
377
+ ],
378
+ };
379
+ await this.helpers.requestOAuth2.call(this, 'googleSheetsOAuth2Api', {
380
+ method: 'POST',
381
+ uri: `https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}:batchUpdate`,
382
+ body: request,
383
+ json: true,
384
+ });
385
+ return {
386
+ success: true,
387
+ spreadsheetId,
388
+ sheetId,
389
+ range,
390
+ appliedFormat: cellFormat,
391
+ };
392
+ }
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR29vZ2xlU2hlZXRzU3R5bGUubm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2Rlcy9Hb29nbGVTaGVldHNTdHlsZS9Hb29nbGVTaGVldHNTdHlsZS5ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW9DQSxvQkFBb0I7QUFDcEIsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUNoQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDekQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsT0FBTztRQUNOLFFBQVEsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7S0FDOUIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUFjO0lBQ2xDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDeEMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNaLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUFXO0lBQy9CLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixPQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqRCxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsR0FBVztJQUM1QixNQUFNLE1BQU0sR0FBRywyQ0FBMkMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2IsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUNELE9BQU87UUFDTixHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHO1FBQ2xDLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUc7UUFDcEMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRztLQUNuQyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLEdBQW9EO0lBQ3JFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLE1BQWtCO0lBQ3hDLE1BQU0sTUFBTSxHQUFnQixFQUFFLENBQUM7SUFFL0IsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsVUFBVSxHQUFHO1lBQ25CLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLGVBQWU7Z0JBQ3ZDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyxTQUFTO1lBQ1osVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVTtZQUN4QyxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRO1lBQ3BDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUk7WUFDNUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUNoQyxhQUFhLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxhQUFhO1lBQzlDLFNBQVMsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVM7U0FDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUM7SUFDekQsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDOUIsTUFBTSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUNyRCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBYSxpQkFBaUI7SUFBOUI7UUFDQyxnQkFBVyxHQUF5QjtZQUNuQyxXQUFXLEVBQUUscUJBQXFCO1lBQ2xDLElBQUksRUFBRSxtQkFBbUI7WUFDekIsSUFBSSxFQUFFLHVCQUF1QjtZQUM3QixLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDcEIsT0FBTyxFQUFFLENBQUM7WUFDVixRQUFRLEVBQUUsOEJBQThCO1lBQ3hDLFdBQVcsRUFBRSw2Q0FBNkM7WUFDMUQsUUFBUSxFQUFFO2dCQUNULElBQUksRUFBRSxxQkFBcUI7YUFDM0I7WUFDRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDaEIsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRTtnQkFDWjtvQkFDQyxJQUFJLEVBQUUsdUJBQXVCO29CQUM3QixRQUFRLEVBQUUsSUFBSTtpQkFDZDthQUNEO1lBQ0QsVUFBVSxFQUFFO2dCQUNYO29CQUNDLFdBQVcsRUFBRSxXQUFXO29CQUN4QixJQUFJLEVBQUUsV0FBVztvQkFDakIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsT0FBTyxFQUFFO3dCQUNSOzRCQUNDLElBQUksRUFBRSxXQUFXOzRCQUNqQixLQUFLLEVBQUUsVUFBVTs0QkFDakIsV0FBVyxFQUFFLHdDQUF3Qzs0QkFDckQsTUFBTSxFQUFFLGdCQUFnQjt5QkFDeEI7d0JBQ0Q7NEJBQ0MsSUFBSSxFQUFFLFdBQVc7NEJBQ2pCLEtBQUssRUFBRSxVQUFVOzRCQUNqQixXQUFXLEVBQUUsdUNBQXVDOzRCQUNwRCxNQUFNLEVBQUUsZ0JBQWdCO3lCQUN4QjtxQkFDRDtvQkFDRCxPQUFPLEVBQUUsVUFBVTtpQkFDbkI7Z0JBQ0Q7b0JBQ0MsV0FBVyxFQUFFLGdCQUFnQjtvQkFDN0IsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLElBQUksRUFBRSxRQUFRO29CQUNkLFFBQVEsRUFBRSxJQUFJO29CQUNkLE9BQU8sRUFBRSxFQUFFO29CQUNYLFdBQVcsRUFBRSxzQ0FBc0M7b0JBQ25ELFdBQVcsRUFBRSw4Q0FBOEM7aUJBQzNEO2dCQUNEO29CQUNDLFdBQVcsRUFBRSxVQUFVO29CQUN2QixJQUFJLEVBQUUsU0FBUztvQkFDZixJQUFJLEVBQUUsUUFBUTtvQkFDZCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxPQUFPLEVBQUUsQ0FBQztvQkFDVixXQUFXLEVBQUUsOENBQThDO2lCQUMzRDtnQkFDRDtvQkFDQyxXQUFXLEVBQUUsT0FBTztvQkFDcEIsSUFBSSxFQUFFLE9BQU87b0JBQ2IsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFLElBQUk7b0JBQ2QsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFdBQVcsRUFBRSw0Q0FBNEM7b0JBQ3pELFdBQVcsRUFBRSxPQUFPO2lCQUNwQjtnQkFDRCxvQkFBb0I7Z0JBQ3BCO29CQUNDLFdBQVcsRUFBRSxrQkFBa0I7b0JBQy9CLElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLElBQUksRUFBRSxPQUFPO29CQUNiLE9BQU8sRUFBRSxTQUFTO29CQUNsQixjQUFjLEVBQUU7d0JBQ2YsSUFBSSxFQUFFOzRCQUNMLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQzt5QkFDdkI7cUJBQ0Q7b0JBQ0QsV0FBVyxFQUFFLCtCQUErQjtpQkFDNUM7Z0JBQ0Q7b0JBQ0MsV0FBVyxFQUFFLFlBQVk7b0JBQ3pCLElBQUksRUFBRSxXQUFXO29CQUNqQixJQUFJLEVBQUUsT0FBTztvQkFDYixPQUFPLEVBQUUsU0FBUztvQkFDbEIsY0FBYyxFQUFFO3dCQUNmLElBQUksRUFBRTs0QkFDTCxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUM7eUJBQ3ZCO3FCQUNEO29CQUNELFdBQVcsRUFBRSx1QkFBdUI7aUJBQ3BDO2dCQUNEO29CQUNDLFdBQVcsRUFBRSxXQUFXO29CQUN4QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsY0FBYyxFQUFFO3dCQUNmLElBQUksRUFBRTs0QkFDTCxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUM7eUJBQ3ZCO3FCQUNEO29CQUNELFdBQVcsRUFBRSxxQkFBcUI7aUJBQ2xDO2dCQUNEO29CQUNDLFdBQVcsRUFBRSxNQUFNO29CQUNuQixJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsU0FBUztvQkFDZixPQUFPLEVBQUUsS0FBSztvQkFDZCxjQUFjLEVBQUU7d0JBQ2YsSUFBSSxFQUFFOzRCQUNMLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQzt5QkFDdkI7cUJBQ0Q7b0JBQ0QsV0FBVyxFQUFFLDJCQUEyQjtpQkFDeEM7Z0JBQ0Q7b0JBQ0MsV0FBVyxFQUFFLFFBQVE7b0JBQ3JCLElBQUksRUFBRSxRQUFRO29CQUNkLElBQUksRUFBRSxTQUFTO29CQUNmLE9BQU8sRUFBRSxLQUFLO29CQUNkLGNBQWMsRUFBRTt3QkFDZixJQUFJLEVBQUU7NEJBQ0wsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDO3lCQUN2QjtxQkFDRDtvQkFDRCxXQUFXLEVBQUUsNkJBQTZCO2lCQUMxQztnQkFDRDtvQkFDQyxXQUFXLEVBQUUsc0JBQXNCO29CQUNuQyxJQUFJLEVBQUUscUJBQXFCO29CQUMzQixJQUFJLEVBQUUsU0FBUztvQkFDZixPQUFPLEVBQUU7d0JBQ1IsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQy9CLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3dCQUNuQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtxQkFDakM7b0JBQ0QsT0FBTyxFQUFFLE1BQU07b0JBQ2YsY0FBYyxFQUFFO3dCQUNmLElBQUksRUFBRTs0QkFDTCxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUM7eUJBQ3ZCO3FCQUNEO29CQUNELFdBQVcsRUFBRSwyQkFBMkI7aUJBQ3hDO2dCQUNEO29CQUNDLFdBQVcsRUFBRSxrQkFBa0I7b0JBQy9CLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLElBQUksRUFBRSxjQUFjO29CQUNwQixPQUFPLEVBQUU7d0JBQ1IsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFO3dCQUN0RCxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTt3QkFDMUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7d0JBQ3hDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO3dCQUMvQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTt3QkFDbkMsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFO3FCQUM5RDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDNUIsY0FBYyxFQUFFO3dCQUNmLElBQUksRUFBRTs0QkFDTCxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUM7eUJBQ3ZCO3FCQUNEO29CQUNELFdBQVcsRUFBRSw4QkFBOEI7aUJBQzNDO2FBQ0Q7U0FDRCxDQUFDO0lBK0JILENBQUM7SUE3QkEsS0FBSyxDQUFDLE9BQU87UUFDWixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQXlCLEVBQUUsQ0FBQztRQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBVyxDQUFDO1FBRWxFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDO2dCQUNKLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFXLENBQUM7Z0JBQzFFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFXLENBQUM7Z0JBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFXLENBQUM7Z0JBRTFELElBQUksU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3hFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztxQkFBTSxJQUFJLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDM0UsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO1lBQ0YsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2hCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7b0JBQzNCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUcsS0FBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDL0QsU0FBUztnQkFDVixDQUFDO2dCQUNELE1BQU0sS0FBSyxDQUFDO1lBQ2IsQ0FBQztRQUNGLENBQUM7UUFFRCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckIsQ0FBQztDQUNEO0FBdE1ELDhDQXNNQztBQUVELEtBQUssVUFBVSxRQUFRLENBRXRCLGFBQXFCLEVBQ3JCLE9BQWUsRUFDZixLQUFhO0lBRWIsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckQsSUFBSSxFQUNKLHVCQUF1QixFQUN2QjtRQUNDLE1BQU0sRUFBRSxLQUFLO1FBQ2IsR0FBRyxFQUFFLGlEQUFpRCxhQUFhLEVBQUU7UUFDckUsRUFBRSxFQUFFO1lBQ0gsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNLEVBQUUsOERBQThEO1NBQ3RFO1FBQ0QsSUFBSSxFQUFFLElBQUk7S0FDVixDQUNELENBQUM7SUFFRixNQUFNLE1BQU0sR0FBSSxRQUF3QixDQUFDLE1BQXVCLENBQUM7SUFDakUsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztJQUMzQyxNQUFNLElBQUksR0FBSSxTQUFTLENBQUMsSUFBc0IsSUFBSSxFQUFFLENBQUM7SUFDckQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUksSUFBSSxDQUFDLENBQUMsQ0FBaUIsQ0FBQyxPQUF3QixJQUFJLEVBQUUsQ0FBQztJQUN4RSxNQUFNLE1BQU0sR0FBa0IsRUFBRSxDQUFDO0lBRWpDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7UUFDakMsTUFBTSxNQUFNLEdBQUksR0FBRyxDQUFDLE1BQXdCLElBQUksRUFBRSxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQTZCLElBQUksRUFBRSxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsR0FBRyxFQUFFLFFBQVEsR0FBRyxRQUFRO2dCQUN4QixHQUFHLEVBQUUsUUFBUSxHQUFHLFFBQVE7Z0JBQ3hCLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDOUQsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUM7YUFDN0IsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTixhQUFhO1FBQ2IsT0FBTztRQUNQLEtBQUs7UUFDTCxNQUFNO0tBQ04sQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsUUFBUSxDQUV0QixhQUFxQixFQUNyQixPQUFlLEVBQ2YsS0FBYSxFQUNiLFNBQWlCO0lBRWpCLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBYSxDQUFDO0lBRXRGLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBVyxDQUFDO1FBQzlFLFVBQVUsQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQVcsQ0FBQztRQUMxRSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVU7WUFBRSxVQUFVLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0RCxVQUFVLENBQUMsVUFBMEIsQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxJQUFJLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQVcsQ0FBQztRQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVU7WUFBRSxVQUFVLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0RCxVQUFVLENBQUMsVUFBMEIsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQVksQ0FBQztRQUNqRSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVU7WUFBRSxVQUFVLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0RCxVQUFVLENBQUMsVUFBMEIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQVksQ0FBQztRQUNyRSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVU7WUFBRSxVQUFVLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0RCxVQUFVLENBQUMsVUFBMEIsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsU0FBUyxDQUFXLENBQUM7UUFDcEYsVUFBVSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHO1FBQ2YsUUFBUSxFQUFFO1lBQ1Q7Z0JBQ0MsVUFBVSxFQUFFO29CQUNYLEtBQUssRUFBRTt3QkFDTixPQUFPO3dCQUNQLGFBQWEsRUFBRSxRQUFRLEdBQUcsQ0FBQzt3QkFDM0IsV0FBVyxFQUFFLE1BQU07d0JBQ25CLGdCQUFnQixFQUFFLFFBQVEsR0FBRyxDQUFDO3dCQUM5QixjQUFjLEVBQUUsTUFBTTtxQkFDdEI7b0JBQ0QsSUFBSSxFQUFFO3dCQUNMLGlCQUFpQixFQUFFLFVBQVU7cUJBQzdCO29CQUNELE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztpQkFDeEI7YUFDRDtTQUNEO0tBQ0QsQ0FBQztJQUVGLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNwQyxJQUFJLEVBQ0osdUJBQXVCLEVBQ3ZCO1FBQ0MsTUFBTSxFQUFFLE1BQU07UUFDZCxHQUFHLEVBQUUsaURBQWlELGFBQWEsY0FBYztRQUNqRixJQUFJLEVBQUUsT0FBTztRQUNiLElBQUksRUFBRSxJQUFJO0tBQ1YsQ0FDRCxDQUFDO0lBRUYsT0FBTztRQUNOLE9BQU8sRUFBRSxJQUFJO1FBQ2IsYUFBYTtRQUNiLE9BQU87UUFDUCxLQUFLO1FBQ0wsYUFBYSxFQUFFLFVBQVU7S0FDekIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRJRXhlY3V0ZUZ1bmN0aW9ucyxcblx0SU5vZGVFeGVjdXRpb25EYXRhLFxuXHRJTm9kZVR5cGUsXG5cdElOb2RlVHlwZURlc2NyaXB0aW9uLFxuXHRJRGF0YU9iamVjdCxcblx0Tm9kZU9wZXJhdGlvbkVycm9yLFxufSBmcm9tICduOG4td29ya2Zsb3cnO1xuXG5pbnRlcmZhY2UgQ2VsbEZvcm1hdCB7XG5cdGJhY2tncm91bmRDb2xvcj86IHsgcmVkPzogbnVtYmVyOyBncmVlbj86IG51bWJlcjsgYmx1ZT86IG51bWJlcjsgYWxwaGE/OiBudW1iZXIgfTtcblx0dGV4dEZvcm1hdD86IHtcblx0XHRmb3JlZ3JvdW5kQ29sb3I/OiB7IHJlZD86IG51bWJlcjsgZ3JlZW4/OiBudW1iZXI7IGJsdWU/OiBudW1iZXI7IGFscGhhPzogbnVtYmVyIH07XG5cdFx0Zm9udEZhbWlseT86IHN0cmluZztcblx0XHRmb250U2l6ZT86IG51bWJlcjtcblx0XHRib2xkPzogYm9vbGVhbjtcblx0XHRpdGFsaWM/OiBib29sZWFuO1xuXHRcdHN0cmlrZXRocm91Z2g/OiBib29sZWFuO1xuXHRcdHVuZGVybGluZT86IGJvb2xlYW47XG5cdH07XG5cdGhvcml6b250YWxBbGlnbm1lbnQ/OiBzdHJpbmc7XG5cdHZlcnRpY2FsQWxpZ25tZW50Pzogc3RyaW5nO1xuXHR3cmFwU3RyYXRlZ3k/OiBzdHJpbmc7XG5cdGJvcmRlcnM/OiB7XG5cdFx0dG9wPzogQm9yZGVyU3R5bGU7XG5cdFx0Ym90dG9tPzogQm9yZGVyU3R5bGU7XG5cdFx0bGVmdD86IEJvcmRlclN0eWxlO1xuXHRcdHJpZ2h0PzogQm9yZGVyU3R5bGU7XG5cdH07XG59XG5cbmludGVyZmFjZSBCb3JkZXJTdHlsZSB7XG5cdHN0eWxlPzogc3RyaW5nO1xuXHRjb2xvcj86IHsgcmVkPzogbnVtYmVyOyBncmVlbj86IG51bWJlcjsgYmx1ZT86IG51bWJlcjsgYWxwaGE/OiBudW1iZXIgfTtcbn1cblxuLy8gVXRpbGl0eSBmdW5jdGlvbnNcbmZ1bmN0aW9uIHBhcnNlUmFuZ2UocmFuZ2U6IHN0cmluZyk6IHsgc3RhcnRSb3c6IG51bWJlcjsgZW5kUm93OiBudW1iZXI7IHN0YXJ0Q29sOiBudW1iZXI7IGVuZENvbDogbnVtYmVyIH0ge1xuXHRjb25zdCBtYXRjaCA9IHJhbmdlLm1hdGNoKC8oW0EtWl0rKShcXGQrKTooW0EtWl0rKShcXGQrKS8pO1xuXHRpZiAoIW1hdGNoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJhbmdlIGZvcm1hdDogJHtyYW5nZX1gKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHN0YXJ0Q29sOiBsZXR0ZXJUb0NvbChtYXRjaFsxXSksXG5cdFx0c3RhcnRSb3c6IHBhcnNlSW50KG1hdGNoWzJdLCAxMCksXG5cdFx0ZW5kQ29sOiBsZXR0ZXJUb0NvbChtYXRjaFszXSksXG5cdFx0ZW5kUm93OiBwYXJzZUludChtYXRjaFs0XSwgMTApLFxuXHR9O1xufVxuXG5mdW5jdGlvbiBsZXR0ZXJUb0NvbChsZXR0ZXI6IHN0cmluZyk6IG51bWJlciB7XG5cdGxldCBjb2wgPSAwO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGxldHRlci5sZW5ndGg7IGkrKykge1xuXHRcdGNvbCA9IGNvbCAqIDI2ICsgKGxldHRlci5jaGFyQ29kZUF0KGkpIC0gNjQpO1xuXHR9XG5cdHJldHVybiBjb2w7XG59XG5cbmZ1bmN0aW9uIGNvbFRvTGV0dGVyKGNvbDogbnVtYmVyKTogc3RyaW5nIHtcblx0bGV0IGxldHRlciA9ICcnO1xuXHR3aGlsZSAoY29sID4gMCkge1xuXHRcdGNvbnN0IHRlbXAgPSAoY29sIC0gMSkgJSAyNjtcblx0XHRsZXR0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRlbXAgKyA2NSkgKyBsZXR0ZXI7XG5cdFx0Y29sID0gTWF0aC5mbG9vcigoY29sIC0gdGVtcCkgLyAyNik7XG5cdH1cblx0cmV0dXJuIGxldHRlcjtcbn1cblxuZnVuY3Rpb24gaGV4VG9SZ2IoaGV4OiBzdHJpbmcpOiB7IHJlZDogbnVtYmVyOyBncmVlbjogbnVtYmVyOyBibHVlOiBudW1iZXIgfSB7XG5cdGNvbnN0IHJlc3VsdCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpO1xuXHRpZiAoIXJlc3VsdCkge1xuXHRcdHJldHVybiB7IHJlZDogMSwgZ3JlZW46IDEsIGJsdWU6IDEgfTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHJlZDogcGFyc2VJbnQocmVzdWx0WzFdLCAxNikgLyAyNTUsXG5cdFx0Z3JlZW46IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpIC8gMjU1LFxuXHRcdGJsdWU6IHBhcnNlSW50KHJlc3VsdFszXSwgMTYpIC8gMjU1LFxuXHR9O1xufVxuXG5mdW5jdGlvbiByZ2JUb0hleChyZ2I6IHsgcmVkPzogbnVtYmVyOyBncmVlbj86IG51bWJlcjsgYmx1ZT86IG51bWJlciB9KTogc3RyaW5nIHtcblx0Y29uc3QgciA9IE1hdGgucm91bmQoKHJnYi5yZWQgfHwgMCkgKiAyNTUpO1xuXHRjb25zdCBnID0gTWF0aC5yb3VuZCgocmdiLmdyZWVuIHx8IDApICogMjU1KTtcblx0Y29uc3QgYiA9IE1hdGgucm91bmQoKHJnYi5ibHVlIHx8IDApICogMjU1KTtcblx0cmV0dXJuICcjJyArIFtyLCBnLCBiXS5tYXAoeCA9PiB4LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEZvcm1hdChmb3JtYXQ6IENlbGxGb3JtYXQpOiBJRGF0YU9iamVjdCB7XG5cdGNvbnN0IHJlc3VsdDogSURhdGFPYmplY3QgPSB7fTtcblxuXHRpZiAoZm9ybWF0LmJhY2tncm91bmRDb2xvcikge1xuXHRcdHJlc3VsdC5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb0hleChmb3JtYXQuYmFja2dyb3VuZENvbG9yKTtcblx0fVxuXG5cdGlmIChmb3JtYXQudGV4dEZvcm1hdCkge1xuXHRcdHJlc3VsdC50ZXh0Rm9ybWF0ID0ge1xuXHRcdFx0Y29sb3I6IGZvcm1hdC50ZXh0Rm9ybWF0LmZvcmVncm91bmRDb2xvclxuXHRcdFx0XHQ/IHJnYlRvSGV4KGZvcm1hdC50ZXh0Rm9ybWF0LmZvcmVncm91bmRDb2xvcilcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRmb250RmFtaWx5OiBmb3JtYXQudGV4dEZvcm1hdC5mb250RmFtaWx5LFxuXHRcdFx0Zm9udFNpemU6IGZvcm1hdC50ZXh0Rm9ybWF0LmZvbnRTaXplLFxuXHRcdFx0Ym9sZDogZm9ybWF0LnRleHRGb3JtYXQuYm9sZCxcblx0XHRcdGl0YWxpYzogZm9ybWF0LnRleHRGb3JtYXQuaXRhbGljLFxuXHRcdFx0c3RyaWtldGhyb3VnaDogZm9ybWF0LnRleHRGb3JtYXQuc3RyaWtldGhyb3VnaCxcblx0XHRcdHVuZGVybGluZTogZm9ybWF0LnRleHRGb3JtYXQudW5kZXJsaW5lLFxuXHRcdH07XG5cdH1cblxuXHRpZiAoZm9ybWF0Lmhvcml6b250YWxBbGlnbm1lbnQpIHtcblx0XHRyZXN1bHQuaG9yaXpvbnRhbEFsaWdubWVudCA9IGZvcm1hdC5ob3Jpem9udGFsQWxpZ25tZW50O1xuXHR9XG5cblx0aWYgKGZvcm1hdC52ZXJ0aWNhbEFsaWdubWVudCkge1xuXHRcdHJlc3VsdC52ZXJ0aWNhbEFsaWdubWVudCA9IGZvcm1hdC52ZXJ0aWNhbEFsaWdubWVudDtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVTaGVldHNTdHlsZSBpbXBsZW1lbnRzIElOb2RlVHlwZSB7XG5cdGRlc2NyaXB0aW9uOiBJTm9kZVR5cGVEZXNjcmlwdGlvbiA9IHtcblx0XHRkaXNwbGF5TmFtZTogJ0dvb2dsZSBTaGVldHMgU3R5bGUnLFxuXHRcdG5hbWU6ICdnb29nbGVTaGVldHNTdHlsZScsXG5cdFx0aWNvbjogJ2ZpbGU6Z29vZ2xlU2hlZXRzLnN2ZycsXG5cdFx0Z3JvdXA6IFsndHJhbnNmb3JtJ10sXG5cdFx0dmVyc2lvbjogMSxcblx0XHRzdWJ0aXRsZTogJz17eyRwYXJhbWV0ZXJbXCJvcGVyYXRpb25cIl19fScsXG5cdFx0ZGVzY3JpcHRpb246ICdSZWFkIGFuZCB3cml0ZSBjZWxsIHN0eWxlcyBpbiBHb29nbGUgU2hlZXRzJyxcblx0XHRkZWZhdWx0czoge1xuXHRcdFx0bmFtZTogJ0dvb2dsZSBTaGVldHMgU3R5bGUnLFxuXHRcdH0sXG5cdFx0aW5wdXRzOiBbJ21haW4nXSxcblx0XHRvdXRwdXRzOiBbJ21haW4nXSxcblx0XHRjcmVkZW50aWFsczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiAnZ29vZ2xlU2hlZXRzT0F1dGgyQXBpJyxcblx0XHRcdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRkaXNwbGF5TmFtZTogJ09wZXJhdGlvbicsXG5cdFx0XHRcdG5hbWU6ICdvcGVyYXRpb24nLFxuXHRcdFx0XHR0eXBlOiAnb3B0aW9ucycsXG5cdFx0XHRcdG5vRGF0YUV4cHJlc3Npb246IHRydWUsXG5cdFx0XHRcdG9wdGlvbnM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiAnR2V0IFN0eWxlJyxcblx0XHRcdFx0XHRcdHZhbHVlOiAnZ2V0U3R5bGUnLFxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246ICdHZXQgY2VsbCBmb3JtYXR0aW5nL3N0eWxlIGZyb20gYSByYW5nZScsXG5cdFx0XHRcdFx0XHRhY3Rpb246ICdHZXQgY2VsbCBzdHlsZScsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiAnU2V0IFN0eWxlJyxcblx0XHRcdFx0XHRcdHZhbHVlOiAnc2V0U3R5bGUnLFxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246ICdTZXQgY2VsbCBmb3JtYXR0aW5nL3N0eWxlIGZvciBhIHJhbmdlJyxcblx0XHRcdFx0XHRcdGFjdGlvbjogJ1NldCBjZWxsIHN0eWxlJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0XHRkZWZhdWx0OiAnZ2V0U3R5bGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGlzcGxheU5hbWU6ICdTcHJlYWRzaGVldCBJRCcsXG5cdFx0XHRcdG5hbWU6ICdzcHJlYWRzaGVldElkJyxcblx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdFx0XHRkZWZhdWx0OiAnJyxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICdUaGUgSUQgb2YgdGhlIHNwcmVhZHNoZWV0IChmcm9tIFVSTCknLFxuXHRcdFx0XHRwbGFjZWhvbGRlcjogJzFCeGlNVnMwWFJBNW5GTWRLdkJkQlpqZ21VVXFwdGxiczc0T2d2RTJ1cG1zJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRpc3BsYXlOYW1lOiAnU2hlZXQgSUQnLFxuXHRcdFx0XHRuYW1lOiAnc2hlZXRJZCcsXG5cdFx0XHRcdHR5cGU6ICdudW1iZXInLFxuXHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0ZGVmYXVsdDogMCxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICdUaGUgSUQgb2YgdGhlIHNoZWV0IChnaWQgcGFyYW1ldGVyIGZyb20gVVJMKScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkaXNwbGF5TmFtZTogJ1JhbmdlJyxcblx0XHRcdFx0bmFtZTogJ3JhbmdlJyxcblx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdFx0XHRkZWZhdWx0OiAnQTE6QjInLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogJ1RoZSBBMSBub3RhdGlvbiBvZiB0aGUgcmFuZ2UgKGUuZy4sIEExOkIyKScsXG5cdFx0XHRcdHBsYWNlaG9sZGVyOiAnQTE6QjInLFxuXHRcdFx0fSxcblx0XHRcdC8vIFNldCBTdHlsZSBvcHRpb25zXG5cdFx0XHR7XG5cdFx0XHRcdGRpc3BsYXlOYW1lOiAnQmFja2dyb3VuZCBDb2xvcicsXG5cdFx0XHRcdG5hbWU6ICdiYWNrZ3JvdW5kQ29sb3InLFxuXHRcdFx0XHR0eXBlOiAnY29sb3InLFxuXHRcdFx0XHRkZWZhdWx0OiAnI2ZmZmZmZicsXG5cdFx0XHRcdGRpc3BsYXlPcHRpb25zOiB7XG5cdFx0XHRcdFx0c2hvdzoge1xuXHRcdFx0XHRcdFx0b3BlcmF0aW9uOiBbJ3NldFN0eWxlJ10sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICdCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjZWxscycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkaXNwbGF5TmFtZTogJ1RleHQgQ29sb3InLFxuXHRcdFx0XHRuYW1lOiAndGV4dENvbG9yJyxcblx0XHRcdFx0dHlwZTogJ2NvbG9yJyxcblx0XHRcdFx0ZGVmYXVsdDogJyMwMDAwMDAnLFxuXHRcdFx0XHRkaXNwbGF5T3B0aW9uczoge1xuXHRcdFx0XHRcdHNob3c6IHtcblx0XHRcdFx0XHRcdG9wZXJhdGlvbjogWydzZXRTdHlsZSddLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAnVGV4dC9mb3JlZ3JvdW5kIGNvbG9yJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRpc3BsYXlOYW1lOiAnRm9udCBTaXplJyxcblx0XHRcdFx0bmFtZTogJ2ZvbnRTaXplJyxcblx0XHRcdFx0dHlwZTogJ251bWJlcicsXG5cdFx0XHRcdGRlZmF1bHQ6IDEwLFxuXHRcdFx0XHRkaXNwbGF5T3B0aW9uczoge1xuXHRcdFx0XHRcdHNob3c6IHtcblx0XHRcdFx0XHRcdG9wZXJhdGlvbjogWydzZXRTdHlsZSddLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAnRm9udCBzaXplIGluIHBvaW50cycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkaXNwbGF5TmFtZTogJ0JvbGQnLFxuXHRcdFx0XHRuYW1lOiAnYm9sZCcsXG5cdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0ZGVmYXVsdDogZmFsc2UsXG5cdFx0XHRcdGRpc3BsYXlPcHRpb25zOiB7XG5cdFx0XHRcdFx0c2hvdzoge1xuXHRcdFx0XHRcdFx0b3BlcmF0aW9uOiBbJ3NldFN0eWxlJ10sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIG1ha2UgdGV4dCBib2xkJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRpc3BsYXlOYW1lOiAnSXRhbGljJyxcblx0XHRcdFx0bmFtZTogJ2l0YWxpYycsXG5cdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0ZGVmYXVsdDogZmFsc2UsXG5cdFx0XHRcdGRpc3BsYXlPcHRpb25zOiB7XG5cdFx0XHRcdFx0c2hvdzoge1xuXHRcdFx0XHRcdFx0b3BlcmF0aW9uOiBbJ3NldFN0eWxlJ10sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIG1ha2UgdGV4dCBpdGFsaWMnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGlzcGxheU5hbWU6ICdIb3Jpem9udGFsIEFsaWdubWVudCcsXG5cdFx0XHRcdG5hbWU6ICdob3Jpem9udGFsQWxpZ25tZW50Jyxcblx0XHRcdFx0dHlwZTogJ29wdGlvbnMnLFxuXHRcdFx0XHRvcHRpb25zOiBbXG5cdFx0XHRcdFx0eyBuYW1lOiAnTGVmdCcsIHZhbHVlOiAnTEVGVCcgfSxcblx0XHRcdFx0XHR7IG5hbWU6ICdDZW50ZXInLCB2YWx1ZTogJ0NFTlRFUicgfSxcblx0XHRcdFx0XHR7IG5hbWU6ICdSaWdodCcsIHZhbHVlOiAnUklHSFQnIH0sXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGRlZmF1bHQ6ICdMRUZUJyxcblx0XHRcdFx0ZGlzcGxheU9wdGlvbnM6IHtcblx0XHRcdFx0XHRzaG93OiB7XG5cdFx0XHRcdFx0XHRvcGVyYXRpb246IFsnc2V0U3R5bGUnXSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogJ0hvcml6b250YWwgdGV4dCBhbGlnbm1lbnQnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGlzcGxheU5hbWU6ICdGaWVsZHMgdG8gVXBkYXRlJyxcblx0XHRcdFx0bmFtZTogJ2ZpZWxkc1RvVXBkYXRlJyxcblx0XHRcdFx0dHlwZTogJ211bHRpT3B0aW9ucycsXG5cdFx0XHRcdG9wdGlvbnM6IFtcblx0XHRcdFx0XHR7IG5hbWU6ICdCYWNrZ3JvdW5kIENvbG9yJywgdmFsdWU6ICdiYWNrZ3JvdW5kQ29sb3InIH0sXG5cdFx0XHRcdFx0eyBuYW1lOiAnVGV4dCBDb2xvcicsIHZhbHVlOiAndGV4dENvbG9yJyB9LFxuXHRcdFx0XHRcdHsgbmFtZTogJ0ZvbnQgU2l6ZScsIHZhbHVlOiAnZm9udFNpemUnIH0sXG5cdFx0XHRcdFx0eyBuYW1lOiAnQm9sZCcsIHZhbHVlOiAnYm9sZCcgfSxcblx0XHRcdFx0XHR7IG5hbWU6ICdJdGFsaWMnLCB2YWx1ZTogJ2l0YWxpYycgfSxcblx0XHRcdFx0XHR7IG5hbWU6ICdIb3Jpem9udGFsIEFsaWdubWVudCcsIHZhbHVlOiAnaG9yaXpvbnRhbEFsaWdubWVudCcgfSxcblx0XHRcdFx0XSxcblx0XHRcdFx0ZGVmYXVsdDogWydiYWNrZ3JvdW5kQ29sb3InXSxcblx0XHRcdFx0ZGlzcGxheU9wdGlvbnM6IHtcblx0XHRcdFx0XHRzaG93OiB7XG5cdFx0XHRcdFx0XHRvcGVyYXRpb246IFsnc2V0U3R5bGUnXSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogJ1doaWNoIHN0eWxlIGZpZWxkcyB0byB1cGRhdGUnLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9O1xuXG5cdGFzeW5jIGV4ZWN1dGUodGhpczogSUV4ZWN1dGVGdW5jdGlvbnMpOiBQcm9taXNlPElOb2RlRXhlY3V0aW9uRGF0YVtdW10+IHtcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SW5wdXREYXRhKCk7XG5cdFx0Y29uc3QgcmV0dXJuRGF0YTogSU5vZGVFeGVjdXRpb25EYXRhW10gPSBbXTtcblx0XHRjb25zdCBvcGVyYXRpb24gPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIDApIGFzIHN0cmluZztcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHNwcmVhZHNoZWV0SWQgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ3NwcmVhZHNoZWV0SWQnLCBpKSBhcyBzdHJpbmc7XG5cdFx0XHRcdGNvbnN0IHNoZWV0SWQgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ3NoZWV0SWQnLCBpKSBhcyBudW1iZXI7XG5cdFx0XHRcdGNvbnN0IHJhbmdlID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdyYW5nZScsIGkpIGFzIHN0cmluZztcblxuXHRcdFx0XHRpZiAob3BlcmF0aW9uID09PSAnZ2V0U3R5bGUnKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U3R5bGUuY2FsbCh0aGlzLCBzcHJlYWRzaGVldElkLCBzaGVldElkLCByYW5nZSk7XG5cdFx0XHRcdFx0cmV0dXJuRGF0YS5wdXNoKHsganNvbjogcmVzdWx0IH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJ3NldFN0eWxlJykge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldFN0eWxlLmNhbGwodGhpcywgc3ByZWFkc2hlZXRJZCwgc2hlZXRJZCwgcmFuZ2UsIGkpO1xuXHRcdFx0XHRcdHJldHVybkRhdGEucHVzaCh7IGpzb246IHJlc3VsdCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0aWYgKHRoaXMuY29udGludWVPbkZhaWwoKSkge1xuXHRcdFx0XHRcdHJldHVybkRhdGEucHVzaCh7IGpzb246IHsgZXJyb3I6IChlcnJvciBhcyBFcnJvcikubWVzc2FnZSB9IH0pO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBbcmV0dXJuRGF0YV07XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U3R5bGUoXG5cdHRoaXM6IElFeGVjdXRlRnVuY3Rpb25zLFxuXHRzcHJlYWRzaGVldElkOiBzdHJpbmcsXG5cdHNoZWV0SWQ6IG51bWJlcixcblx0cmFuZ2U6IHN0cmluZyxcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcblx0Y29uc3QgeyBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sIH0gPSBwYXJzZVJhbmdlKHJhbmdlKTtcblxuXHRjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGVscGVycy5yZXF1ZXN0T0F1dGgyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHQnZ29vZ2xlU2hlZXRzT0F1dGgyQXBpJyxcblx0XHR7XG5cdFx0XHRtZXRob2Q6ICdHRVQnLFxuXHRcdFx0dXJpOiBgaHR0cHM6Ly9zaGVldHMuZ29vZ2xlYXBpcy5jb20vdjQvc3ByZWFkc2hlZXRzLyR7c3ByZWFkc2hlZXRJZH1gLFxuXHRcdFx0cXM6IHtcblx0XHRcdFx0cmFuZ2VzOiByYW5nZSxcblx0XHRcdFx0ZmllbGRzOiAnc2hlZXRzLmRhdGEucm93RGF0YS52YWx1ZXMuZWZmZWN0aXZlRm9ybWF0LHNoZWV0cy5wcm9wZXJ0aWVzJyxcblx0XHRcdH0sXG5cdFx0XHRqc29uOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG5cblx0Y29uc3Qgc2hlZXRzID0gKHJlc3BvbnNlIGFzIElEYXRhT2JqZWN0KS5zaGVldHMgYXMgSURhdGFPYmplY3RbXTtcblx0aWYgKCFzaGVldHMgfHwgc2hlZXRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiB7IGVycm9yOiAnTm8gc2hlZXQgZGF0YSBmb3VuZCcgfTtcblx0fVxuXG5cdGNvbnN0IHNoZWV0RGF0YSA9IHNoZWV0c1swXSBhcyBJRGF0YU9iamVjdDtcblx0Y29uc3QgZGF0YSA9IChzaGVldERhdGEuZGF0YSBhcyBJRGF0YU9iamVjdFtdKSB8fCBbXTtcblx0aWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHsgZXJyb3I6ICdObyBkYXRhIGluIHJhbmdlJyB9O1xuXHR9XG5cblx0Y29uc3Qgcm93RGF0YSA9IChkYXRhWzBdIGFzIElEYXRhT2JqZWN0KS5yb3dEYXRhIGFzIElEYXRhT2JqZWN0W10gfHwgW107XG5cdGNvbnN0IHN0eWxlczogSURhdGFPYmplY3RbXSA9IFtdO1xuXG5cdHJvd0RhdGEuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xuXHRcdGNvbnN0IHZhbHVlcyA9IChyb3cudmFsdWVzIGFzIElEYXRhT2JqZWN0W10pIHx8IFtdO1xuXHRcdHZhbHVlcy5mb3JFYWNoKChjZWxsLCBjb2xJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgZm9ybWF0ID0gY2VsbC5lZmZlY3RpdmVGb3JtYXQgYXMgQ2VsbEZvcm1hdCB8fCB7fTtcblx0XHRcdHN0eWxlcy5wdXNoKHtcblx0XHRcdFx0cm93OiBzdGFydFJvdyArIHJvd0luZGV4LFxuXHRcdFx0XHRjb2w6IHN0YXJ0Q29sICsgY29sSW5kZXgsXG5cdFx0XHRcdGNlbGw6IGNvbFRvTGV0dGVyKHN0YXJ0Q29sICsgY29sSW5kZXgpICsgKHN0YXJ0Um93ICsgcm93SW5kZXgpLFxuXHRcdFx0XHRmb3JtYXQ6IGV4dHJhY3RGb3JtYXQoZm9ybWF0KSxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdHNwcmVhZHNoZWV0SWQsXG5cdFx0c2hlZXRJZCxcblx0XHRyYW5nZSxcblx0XHRzdHlsZXMsXG5cdH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldFN0eWxlKFxuXHR0aGlzOiBJRXhlY3V0ZUZ1bmN0aW9ucyxcblx0c3ByZWFkc2hlZXRJZDogc3RyaW5nLFxuXHRzaGVldElkOiBudW1iZXIsXG5cdHJhbmdlOiBzdHJpbmcsXG5cdGl0ZW1JbmRleDogbnVtYmVyLFxuKTogUHJvbWlzZTxJRGF0YU9iamVjdD4ge1xuXHRjb25zdCB7IHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sLCBlbmRDb2wgfSA9IHBhcnNlUmFuZ2UocmFuZ2UpO1xuXHRjb25zdCBmaWVsZHNUb1VwZGF0ZSA9IHRoaXMuZ2V0Tm9kZVBhcmFtZXRlcignZmllbGRzVG9VcGRhdGUnLCBpdGVtSW5kZXgpIGFzIHN0cmluZ1tdO1xuXG5cdGNvbnN0IGNlbGxGb3JtYXQ6IElEYXRhT2JqZWN0ID0ge307XG5cdGNvbnN0IGZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuXHRpZiAoZmllbGRzVG9VcGRhdGUuaW5jbHVkZXMoJ2JhY2tncm91bmRDb2xvcicpKSB7XG5cdFx0Y29uc3QgYmdDb2xvciA9IHRoaXMuZ2V0Tm9kZVBhcmFtZXRlcignYmFja2dyb3VuZENvbG9yJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG5cdFx0Y2VsbEZvcm1hdC5iYWNrZ3JvdW5kQ29sb3IgPSBoZXhUb1JnYihiZ0NvbG9yKTtcblx0XHRmaWVsZHMucHVzaCgndXNlckVudGVyZWRGb3JtYXQuYmFja2dyb3VuZENvbG9yJyk7XG5cdH1cblxuXHRpZiAoZmllbGRzVG9VcGRhdGUuaW5jbHVkZXMoJ3RleHRDb2xvcicpKSB7XG5cdFx0Y29uc3QgdGV4dENvbG9yID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCd0ZXh0Q29sb3InLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblx0XHRpZiAoIWNlbGxGb3JtYXQudGV4dEZvcm1hdCkgY2VsbEZvcm1hdC50ZXh0Rm9ybWF0ID0ge307XG5cdFx0KGNlbGxGb3JtYXQudGV4dEZvcm1hdCBhcyBJRGF0YU9iamVjdCkuZm9yZWdyb3VuZENvbG9yID0gaGV4VG9SZ2IodGV4dENvbG9yKTtcblx0XHRmaWVsZHMucHVzaCgndXNlckVudGVyZWRGb3JtYXQudGV4dEZvcm1hdC5mb3JlZ3JvdW5kQ29sb3InKTtcblx0fVxuXG5cdGlmIChmaWVsZHNUb1VwZGF0ZS5pbmNsdWRlcygnZm9udFNpemUnKSkge1xuXHRcdGNvbnN0IGZvbnRTaXplID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdmb250U2l6ZScsIGl0ZW1JbmRleCkgYXMgbnVtYmVyO1xuXHRcdGlmICghY2VsbEZvcm1hdC50ZXh0Rm9ybWF0KSBjZWxsRm9ybWF0LnRleHRGb3JtYXQgPSB7fTtcblx0XHQoY2VsbEZvcm1hdC50ZXh0Rm9ybWF0IGFzIElEYXRhT2JqZWN0KS5mb250U2l6ZSA9IGZvbnRTaXplO1xuXHRcdGZpZWxkcy5wdXNoKCd1c2VyRW50ZXJlZEZvcm1hdC50ZXh0Rm9ybWF0LmZvbnRTaXplJyk7XG5cdH1cblxuXHRpZiAoZmllbGRzVG9VcGRhdGUuaW5jbHVkZXMoJ2JvbGQnKSkge1xuXHRcdGNvbnN0IGJvbGQgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ2JvbGQnLCBpdGVtSW5kZXgpIGFzIGJvb2xlYW47XG5cdFx0aWYgKCFjZWxsRm9ybWF0LnRleHRGb3JtYXQpIGNlbGxGb3JtYXQudGV4dEZvcm1hdCA9IHt9O1xuXHRcdChjZWxsRm9ybWF0LnRleHRGb3JtYXQgYXMgSURhdGFPYmplY3QpLmJvbGQgPSBib2xkO1xuXHRcdGZpZWxkcy5wdXNoKCd1c2VyRW50ZXJlZEZvcm1hdC50ZXh0Rm9ybWF0LmJvbGQnKTtcblx0fVxuXG5cdGlmIChmaWVsZHNUb1VwZGF0ZS5pbmNsdWRlcygnaXRhbGljJykpIHtcblx0XHRjb25zdCBpdGFsaWMgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ2l0YWxpYycsIGl0ZW1JbmRleCkgYXMgYm9vbGVhbjtcblx0XHRpZiAoIWNlbGxGb3JtYXQudGV4dEZvcm1hdCkgY2VsbEZvcm1hdC50ZXh0Rm9ybWF0ID0ge307XG5cdFx0KGNlbGxGb3JtYXQudGV4dEZvcm1hdCBhcyBJRGF0YU9iamVjdCkuaXRhbGljID0gaXRhbGljO1xuXHRcdGZpZWxkcy5wdXNoKCd1c2VyRW50ZXJlZEZvcm1hdC50ZXh0Rm9ybWF0Lml0YWxpYycpO1xuXHR9XG5cblx0aWYgKGZpZWxkc1RvVXBkYXRlLmluY2x1ZGVzKCdob3Jpem9udGFsQWxpZ25tZW50JykpIHtcblx0XHRjb25zdCBhbGlnbm1lbnQgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ2hvcml6b250YWxBbGlnbm1lbnQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblx0XHRjZWxsRm9ybWF0Lmhvcml6b250YWxBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7XG5cdFx0ZmllbGRzLnB1c2goJ3VzZXJFbnRlcmVkRm9ybWF0Lmhvcml6b250YWxBbGlnbm1lbnQnKTtcblx0fVxuXG5cdGNvbnN0IHJlcXVlc3QgPSB7XG5cdFx0cmVxdWVzdHM6IFtcblx0XHRcdHtcblx0XHRcdFx0cmVwZWF0Q2VsbDoge1xuXHRcdFx0XHRcdHJhbmdlOiB7XG5cdFx0XHRcdFx0XHRzaGVldElkLFxuXHRcdFx0XHRcdFx0c3RhcnRSb3dJbmRleDogc3RhcnRSb3cgLSAxLFxuXHRcdFx0XHRcdFx0ZW5kUm93SW5kZXg6IGVuZFJvdyxcblx0XHRcdFx0XHRcdHN0YXJ0Q29sdW1uSW5kZXg6IHN0YXJ0Q29sIC0gMSxcblx0XHRcdFx0XHRcdGVuZENvbHVtbkluZGV4OiBlbmRDb2wsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRjZWxsOiB7XG5cdFx0XHRcdFx0XHR1c2VyRW50ZXJlZEZvcm1hdDogY2VsbEZvcm1hdCxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGZpZWxkczogZmllbGRzLmpvaW4oJywnKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XSxcblx0fTtcblxuXHRhd2FpdCB0aGlzLmhlbHBlcnMucmVxdWVzdE9BdXRoMi5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0J2dvb2dsZVNoZWV0c09BdXRoMkFwaScsXG5cdFx0e1xuXHRcdFx0bWV0aG9kOiAnUE9TVCcsXG5cdFx0XHR1cmk6IGBodHRwczovL3NoZWV0cy5nb29nbGVhcGlzLmNvbS92NC9zcHJlYWRzaGVldHMvJHtzcHJlYWRzaGVldElkfTpiYXRjaFVwZGF0ZWAsXG5cdFx0XHRib2R5OiByZXF1ZXN0LFxuXHRcdFx0anNvbjogdHJ1ZSxcblx0XHR9LFxuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0c3VjY2VzczogdHJ1ZSxcblx0XHRzcHJlYWRzaGVldElkLFxuXHRcdHNoZWV0SWQsXG5cdFx0cmFuZ2UsXG5cdFx0YXBwbGllZEZvcm1hdDogY2VsbEZvcm1hdCxcblx0fTtcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="60" height="60"><g fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path fill="#28B446" d="M35.69 1 52 17.225v39.087a3.67 3.67 0 0 1-1.084 2.61A3.7 3.7 0 0 1 48.293 60H12.707a3.7 3.7 0 0 1-2.623-1.078A3.67 3.67 0 0 1 9 56.312V4.688a3.67 3.67 0 0 1 1.084-2.61A3.7 3.7 0 0 1 12.707 1z"/><path fill="#6ACE7C" d="M35.69 1 52 17.225H39.397c-2.054 0-3.707-1.829-3.707-3.872z"/><path fill="#219B38" d="M39.211 17.225 52 22.48v-5.255z"/><path fill="#FFF" d="M20.12 31.975c0-.817.662-1.475 1.483-1.475h17.794c.821 0 1.482.658 1.482 1.475v15.487c0 .818-.661 1.475-1.482 1.475H21.603a1.476 1.476 0 0 1-1.482-1.474V31.974zm2.225 1.475h6.672v2.212h-6.672zm0 5.162h6.672v2.213h-6.672zm0 5.163h6.672v2.212h-6.672zm9.638-10.325h6.672v2.212h-6.672zm0 5.162h6.672v2.213h-6.672zm0 5.163h6.672v2.212h-6.672z"/><path fill="#28B446" d="M34.69 0 51 16.225v39.087a3.67 3.67 0 0 1-1.084 2.61A3.7 3.7 0 0 1 47.293 59H11.707a3.7 3.7 0 0 1-2.623-1.078A3.67 3.67 0 0 1 8 55.312V3.688a3.67 3.67 0 0 1 1.084-2.61A3.7 3.7 0 0 1 11.707 0z"/><path fill="#6ACE7C" d="M34.69 0 51 16.225H38.397c-2.054 0-3.707-1.829-3.707-3.872z"/><path fill="#219B38" d="M38.211 16.225 51 21.48v-5.255z"/><path fill="#FFF" d="M19.12 30.975c0-.817.662-1.475 1.483-1.475h17.794c.821 0 1.482.658 1.482 1.475v15.487c0 .818-.661 1.475-1.482 1.475H20.603a1.476 1.476 0 0 1-1.482-1.474V30.974zm2.225 1.475h6.672v2.212h-6.672zm0 5.162h6.672v2.213h-6.672zm0 5.163h6.672v2.212h-6.672zm9.638-10.325h6.672v2.212h-6.672zm0 5.162h6.672v2.213h-6.672zm0 5.163h6.672v2.212h-6.672z"/></g></svg>
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "n8n-nodes-ca-google-sheets-style",
3
+ "version": "0.1.0",
4
+ "description": "n8n node for Google Sheets cell styling (read/write formatting)",
5
+ "keywords": [
6
+ "n8n-community-node-package",
7
+ "google-sheets",
8
+ "formatting",
9
+ "style"
10
+ ],
11
+ "license": "MIT",
12
+ "author": {
13
+ "name": "junwoobang"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/mineclover/n8n-nodes-custom.git",
18
+ "directory": "packages/google-sheets-style"
19
+ },
20
+ "engines": {
21
+ "node": ">=18.0.0"
22
+ },
23
+ "main": "dist/index.js",
24
+ "scripts": {
25
+ "build": "tsc && cp -r src/nodes/**/*.svg dist/nodes/ 2>/dev/null || true",
26
+ "dev": "tsc --watch",
27
+ "lint": "eslint . --ext .ts",
28
+ "prepublishOnly": "npm run build"
29
+ },
30
+ "files": [
31
+ "dist"
32
+ ],
33
+ "n8n": {
34
+ "n8nNodesApiVersion": 1,
35
+ "credentials": [],
36
+ "nodes": [
37
+ "dist/nodes/GoogleSheetsStyle/GoogleSheetsStyle.node.js"
38
+ ]
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^20.0.0",
42
+ "typescript": "^5.0.0"
43
+ },
44
+ "peerDependencies": {
45
+ "n8n-workflow": "*"
46
+ }
47
+ }