CVE-2023-3975 (published 2023-07-27T15:15Z)

OS Command Injection in GitHub repository jgraph/drawio prior to 21.5.0.

CVSS v3 base score: 9.8, CRITICAL (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)

Weakness information:
cwe_id: CWE-78
cwe_name: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
description: The product constructs all or part of an OS command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended OS command when it is sent to a downstream component.
extended_description: 
		   This weakness can lead to a vulnerability in environments in which the attacker does not have direct access to the operating system, such as in web applications. Alternately, if the weakness occurs in a privileged program, it could allow the attacker to specify commands that normally would not be accessible, or to call alternate commands with privileges that the attacker does not have. The problem is exacerbated if the compromised process does not follow the principle of least privilege, because the attacker-controlled commands may run with special system privileges that increases the amount of damage.
            There are at least two subtypes of OS command injection:
               
				 The application intends to execute a single, fixed program that is under its own control. It intends to use externally-supplied inputs as arguments to that program. For example, the program might use system("nslookup [HOSTNAME]") to run nslookup and allow the user to supply a HOSTNAME, which is used as an argument. Attackers cannot prevent nslookup from executing. However, if the program does not remove command separators from the HOSTNAME argument, attackers could place the separators into the arguments, which allows them to execute their own program after nslookup has finished executing.
				 The application accepts an input that it uses to fully select which program to run, as well as which commands to use. The application simply redirects this entire command to the operating system. For example, the program might use "exec([COMMAND])" to execute the [COMMAND] that was supplied by the user. If the COMMAND is under attacker control, then the attacker can execute arbitrary commands or programs. If the command is being executed using functions like exec() and CreateProcess(), the attacker might not be able to combine multiple commands together in the same line.
               
            From a weakness standpoint, these variants represent distinct programmer errors. In the first variant, the programmer clearly intends that input from untrusted parties will be part of the arguments in the command to be executed. In the second variant, the programmer does not intend for the command to be accessible to any untrusted party, but the programmer probably has not accounted for alternate ways in which malicious attackers can provide input.
         
         

Fix information:
repo_url: https://github.com/jgraph/drawio
commit_details: repo_url: https://github.com/jgraph/drawio
author: David Benson
author_date: 2023-06-18 15:05:59+01:00
msg: 21.5.0 release
repository: repo_url: https://github.com/jgraph/drawio
repo_name: jgraph/drawio
description: draw.io is a JavaScript, client-side editor for general diagramming.
repo_language: JavaScript
owner: jgraph
file_changes: filename: ChangeLog
change_type: ModificationType.MODIFY
diff: @@ -1,3 +1,7 @@
+17-JUN-2023: 21.5.0
+
+- Moves electron.js out of drawio project into desktop
+
 16-JUN-2023: 21.4.1
 
 - Fixes misalignment of arrow labels [drawio-3668]

programming_language: Markdown
filename: VERSION
change_type: ModificationType.MODIFY
diff: @@ -1 +1 @@
-21.4.1
\ No newline at end of file
+21.5.0
\ No newline at end of file

programming_language: SQL
filename: disableUpdate.js
change_type: ModificationType.DELETE
diff: @@ -1,6 +0,0 @@
-module.exports = {
-	disableUpdate: function() 
-	{
-		return false;
-	}
-}
\ No newline at end of file

programming_language: unknown
filename: electron-preload.js
change_type: ModificationType.DELETE
diff: @@ -1,79 +0,0 @@
-const {
-    contextBridge,
-    ipcRenderer
-} = require("electron");
-
-let reqId = 1;
-let reqInfo = {};
-let fileChangedListeners = {};
-
-ipcRenderer.on('mainResp', (event, resp) => 
-{
-	var callbacks = reqInfo[resp.reqId];
-	
-	if (resp.error)
-	{
-		callbacks.error(resp.msg, resp.e);
-	}
-	else
-	{
-		callbacks.callback(resp.data);
-	}
-	
-	delete reqInfo[resp.reqId];
-});
-
-ipcRenderer.on('fileChanged', (event, resp) => 
-{
-	var listener = fileChangedListeners[resp.path];
-	
-	if (listener)
-	{
-		listener(resp.curr, resp.prev);
-	}
-});
-
-contextBridge.exposeInMainWorld(
-    'electron', {
-        request: (msg, callback, error) => 
-		{
-			msg.reqId = reqId++;
-			reqInfo[msg.reqId] = {callback: callback, error: error};
-
-			//TODO Maybe a special function for this better than this hack?
-			//File watch special case where the callback is called multiple times
-			if (msg.action == 'watchFile')
-			{
-				fileChangedListeners[msg.path] = msg.listener;
-				delete msg.listener;
-			}
-
-			ipcRenderer.send('rendererReq', msg);
-        },
-		registerMsgListener: function(action, callback)
-		{
-			ipcRenderer.on(action, function(event, args)
-			{
-				callback(args);
-			});
-		},
-		sendMessage: function(action, args)
-		{
-			ipcRenderer.send(action, args);
-		},
-		listenOnce: function(action, callback)
-		{
-			ipcRenderer.once(action, function(event, args)
-			{
-				callback(args);
-			});
-		}
-    }
-);
-
-contextBridge.exposeInMainWorld(
-    'process', {
-		type: process.type,
-		versions: process.versions
-	}
-);

programming_language: unknown
filename: electron.js
change_type: ModificationType.DELETE
diff: @@ -1,2454 +0,0 @@
-const fs = require('fs')
-const fsProm = require('fs/promises');
-const os = require('os');
-const path = require('path')
-const url = require('url')
-const {Menu: menu, shell, dialog, session,
-		clipboard, nativeImage, ipcMain, app, BrowserWindow} = require('electron')
-const crc = require('crc');
-const zlib = require('zlib');
-const log = require('electron-log')
-const program = require('commander')
-const {autoUpdater} = require("electron-updater")
-const PDFDocument = require('pdf-lib').PDFDocument;
-const Store = require('electron-store');
-const store = new Store();
-const ProgressBar = require('electron-progressbar');
-const spawn = require('child_process').spawn;
-const disableUpdate = require('./disableUpdate').disableUpdate() || 
-						process.env.DRAWIO_DISABLE_UPDATE === 'true' || 
-						fs.existsSync('/.flatpak-info'); //This file indicates running in flatpak sandbox
-autoUpdater.logger = log
-autoUpdater.logger.transports.file.level = 'info'
-autoUpdater.autoDownload = false
-
-//Command option to disable hardware acceleration
-if (process.argv.indexOf('--disable-acceleration') !== -1)
-{
-	app.disableHardwareAcceleration();
-}
-
-const __DEV__ = process.env.DRAWIO_ENV === 'dev'
-		
-let windowsRegistry = []
-let cmdQPressed = false
-let firstWinLoaded = false
-let firstWinFilePath = null
-const isMac = process.platform === 'darwin'
-const isWin = process.platform === 'win32'
-let enableSpellCheck = store.get('enableSpellCheck');
-enableSpellCheck = enableSpellCheck != null? enableSpellCheck : isMac;
-let enableStoreBkp = store.get('enableStoreBkp') != null? store.get('enableStoreBkp') : true;
-let dialogOpen = false;
-let enablePlugins = false;
-
-//Read config file
-var queryObj = {
-	'dev': __DEV__ ? 1 : 0,
-	'test': __DEV__ ? 1 : 0,
-	'gapi': 0,
-	'db': 0,
-	'od': 0,
-	'gh': 0,
-	'gl': 0,
-	'tr': 0,
-	'browser': 0,
-	'picker': 0,
-	'mode': 'device',
-	'export': 'https://convert.diagrams.net/node/export',
-	'disableUpdate': disableUpdate? 1 : 0,
-	'enableSpellCheck': enableSpellCheck? 1 : 0,
-	'enableStoreBkp': enableStoreBkp? 1 : 0
-};
-
-try
-{
-	if (fs.existsSync(process.cwd() + '/urlParams.json'))
-	{
-		let urlParams = JSON.parse(fs.readFileSync(process.cwd() + '/urlParams.json'));
-		
-		for (var param in urlParams)
-		{
-			queryObj[param] = urlParams[param];
-		}
-	}
-}
-catch(e)
-{
-	console.log('Error in urlParams.json file: ' + e.message);
-}
-
-// Trying sandboxing the renderer for more protection
-//app.enableSandbox(); // This maybe the reason snap stopped working
-
-// Only allow request from the app code itself
-function validateSender (frame) 
-{
-	return frame.url.startsWith(url.pathToFileURL(__dirname).href);
-}
-
-function createWindow (opt = {})
-{
-	let lastWinSizeStr = store.get('lastWinSize');
-	let lastWinSize = lastWinSizeStr ? lastWinSizeStr.split(',') : [1600, 1200];
-
-	// TODO On some Mac OS, double click the titlebar set incorrect window size
-	if (lastWinSize[0] < 500)
-	{
-		lastWinSize[0] = 500;
-	}
-
-	if (lastWinSize[1] < 500)
-	{
-		lastWinSize[1] = 500;
-	}
-
-	let options = Object.assign(
-	{
-		backgroundColor: '#FFF',
-		width: parseInt(lastWinSize[0]),
-		height: parseInt(lastWinSize[1]),
-		icon: `${__dirname}/images/drawlogo256.png`,
-		webviewTag: false,
-		webSecurity: true,
-		webPreferences: {
-			preload: `${__dirname}/electron-preload.js`,
-			spellcheck: enableSpellCheck,
-			contextIsolation: true,
-			disableBlinkFeatures: 'Auxclick' // Is this needed?
-		}
-	}, opt)
-
-	let mainWindow = new BrowserWindow(options)
-	windowsRegistry.push(mainWindow)
-
-	if (__DEV__) 
-	{
-		console.log('createWindow', opt)
-	}
-
-	//Cannot be read before app is ready
-	queryObj['appLang'] = app.getLocale();
-
-	let ourl = url.format(
-	{
-		pathname: `${__dirname}/index.html`,
-		protocol: 'file:',
-		query: queryObj,
-		slashes: true
-	})
-	
-	mainWindow.loadURL(ourl)
-
-	// Open the DevTools.
-	if (__DEV__)
-	{
-		mainWindow.webContents.openDevTools()
-	}
-
-	ipcMain.on('openDevTools', function(e)
-	{
-		if (!validateSender(e.senderFrame)) return null;
-
-		mainWindow.webContents.openDevTools();
-	});
-
-	mainWindow.on('maximize', function()
-	{
-		mainWindow.webContents.send('maximize')
-	});
-
-	mainWindow.on('unmaximize', function()
-	{
-		mainWindow.webContents.send('unmaximize')
-	});
-
-	mainWindow.on('resize', function()
-	{
-		const size = mainWindow.getSize();
-		store.set('lastWinSize', size[0] + ',' + size[1]);
-
-		mainWindow.webContents.send('resize')
-	});
-
-	mainWindow.on('close', (event) =>
-	{
-		const win = event.sender
-		const index = windowsRegistry.indexOf(win)
-		
-		if (__DEV__) 
-		{
-			console.log('Window on close', index)
-		}
-		
-		const contents = win.webContents
-
-		if (contents != null)
-		{
-	        ipcMain.once('isModified-result', async (e, data) =>
-			{
-				if (!validateSender(e.senderFrame)) return null;
-
-				if (data.isModified)
-				{
-					// Can't use async function here because it crashes on Linux when win.destroy is called
-					let response = dialog.showMessageBoxSync(
-						win,
-						{
-							type: 'question',
-							buttons: ['Cancel', 'Discard Changes'],
-							title: 'Confirm',
-							message: 'The document has unsaved changes. Do you really want to quit without saving?' //mxResources.get('allChangesLost')
-						});
-
-					if (response === 1)
-					{
-						//If user chose not to save, remove the draft
-						if (data.draftPath != null)
-						{
-							await deleteFile(data.draftPath);
-							win.destroy();
-						}
-						else
-						{
-							contents.send('removeDraft');
-
-							ipcMain.once('draftRemoved', (e) =>
-							{
-								if (!validateSender(e.senderFrame)) return null;
-
-								win.destroy();
-							});
-						}
-					}
-					else
-					{
-						cmdQPressed = false;
-					}
-				}
-				else
-				{
-					win.destroy();
-				}
-			});
-
-			contents.send('isModified');
-			event.preventDefault();
-		}
-	})
-
-	// Emitted when the window is closed.
-	mainWindow.on('closed', (event/*:WindowEvent*/) =>
-	{
-		const index = windowsRegistry.indexOf(event.sender)
-		
-		if (__DEV__) 
-		{
-			console.log('Window closed idx:%d', index)
-		}
-		
-		windowsRegistry.splice(index, 1)
-	})
-	
-	return mainWindow
-}
-
-// This method will be called when Electron has finished
-// initialization and is ready to create browser windows.
-// Some APIs can only be used after this event occurs.
-app.on('ready', e =>
-{
-	// Enforce our CSP on all contents
-	session.defaultSession.webRequest.onHeadersReceived((details, callback) => 
-	{
-		callback({
-			responseHeaders: {
-				...details.responseHeaders,
-				'Content-Security-Policy': ['default-src \'self\'; script-src \'self\' \'sha256-6g514VrT/cZFZltSaKxIVNFF46+MFaTSDTPB8WfYK+c=\' \'sha256-3SkDBaLE+ouvAOfTmG2TGwmQ2EE9AT0F2YcHvZmEMeo=\'; connect-src \'self\' https://*.draw.io https://*.diagrams.net https://fonts.googleapis.com https://fonts.gstatic.com; img-src * data:; media-src *; font-src *; frame-src \'none\'; style-src \'self\' \'unsafe-inline\' https://fonts.googleapis.com; base-uri \'none\';child-src \'self\';object-src \'none\';']
-			}
-		})
-	});
-
-	// Enforce loading file only from our app directory
-	session.defaultSession.webRequest.onBeforeRequest({urls: ['file://*']}, (details, callback) =>
-	{
-		if (!details.url.startsWith(url.pathToFileURL(__dirname).href))
-		{
-			callback({cancel: true});
-		}
-		else
-		{
-			callback({});
-		}
-	});
-
-	ipcMain.on('newfile', (e, arg) =>
-	{
-		if (!validateSender(e.senderFrame)) return null;
-
-		let opts = {};
-
-		if (arg)
-		{
-			if (arg.width)
-			{
-				opts.width = arg.width;
-			}
-
-			if (arg.height)
-			{
-				opts.height = arg.height;
-			}
-		}
-
-		createWindow(opts);
-	})
-	
-    let argv = process.argv
-    
-    // https://github.com/electron/electron/issues/4690#issuecomment-217435222
-    if (process.defaultApp != true)
-    {
-        argv.unshift(null)
-    }
-
-	var validFormatRegExp = /^(pdf|svg|png|jpeg|jpg|vsdx|xml)$/;
-	
-	function argsRange(val) 
-	{
-	  return val.split('..').map(Number);
-	}
-	
-	try
-	{
-		program
-	        .version(app.getVersion())
-	        .usage('[options] [input file/folder]')
-	        .allowUnknownOption() //-h and --help are considered unknown!!
-	        .option('-c, --create', 'creates a new empty file if no file is passed')
-	        .option('-k, --check', 'does not overwrite existing files')
-	        .option('-x, --export', 'export the input file/folder based on the given options')
-	        .option('-r, --recursive', 'for a folder input, recursively convert all files in sub-folders also')
-	        .option('-o, --output <output file/folder>', 'specify the output file/folder. If omitted, the input file name is used for output with the specified format as extension')
-	        .option('-f, --format <format>',
-			    'if output file name extension is specified, this option is ignored (file type is determined from output extension, possible export formats are pdf, png, jpg, svg, vsdx, and xml)',
-			    validFormatRegExp, 'pdf')
-			.option('-q, --quality <quality>',
-				'output image quality for JPEG (default: 90)', parseInt)
-			.option('-t, --transparent',
-				'set transparent background for PNG')
-			.option('-e, --embed-diagram',
-				'includes a copy of the diagram (for PNG, SVG and PDF formats only)')
-			.option('--embed-svg-images',
-				'Embed Images in SVG file (for SVG format only)')
-			.option('-b, --border <border>',
-				'sets the border width around the diagram (default: 0)', parseInt)
-			.option('-s, --scale <scale>',
-				'scales the diagram size', parseFloat)
-			.option('--width <width>',
-				'fits the generated image/pdf into the specified width, preserves aspect ratio.', parseInt)
-			.option('--height <height>',
-				'fits the generated image/pdf into the specified height, preserves aspect ratio.', parseInt)
-			.option('--crop',
-				'crops PDF to diagram size')
-			.option('-a, --all-pages',
-				'export all pages (for PDF format only)')
-			.option('-p, --page-index <pageIndex>',
-				'selects a specific page, if not specified and the format is an image, the first page is selected', parseInt)
-			.option('-l, --layers <comma separated layer indexes>',
-				'selects which layers to export (applies to all pages), if not specified, all layers are selected')
-			.option('-g, --page-range <from>..<to>',
-				'selects a page range (for PDF format only)', argsRange)
-			.option('-u, --uncompressed',
-				'Uncompressed XML output (for XML format only)')
-			.option('--enable-plugins',
-				'Enable Plugins')
-	        .parse(argv)
-	}
-	catch(e)
-	{
-		//On parse error, return [exit and commander will show the error message]
-		return;
-	}
-	
-	var options = program.opts();
-	enablePlugins = options.enablePlugins;
-
-    //Start export mode?
-    if (options.export)
-	{
-    	var dummyWin = new BrowserWindow({
-			show : false,
-			webPreferences: {
-				preload: `${__dirname}/electron-preload.js`,
-				contextIsolation: true,
-				disableBlinkFeatures: 'Auxclick' // Is this needed?
-			}
-		});
-    	
-    	windowsRegistry.push(dummyWin);
-    	
-		/*ipcMain.on('log', function(event, msg)
-		{
-			console.log(msg);
-		});*/
-	
-    	try
-    	{
-	    	//Prepare arguments and confirm it's valid
-	    	var format = null;
-	    	var outType = null;
-	    	
-	    	//Format & Output
-	    	if (options.output)
-			{
-	    		try
-	    		{
-	    			var outStat = fs.statSync(options.output);
-	    			
-	    			if (outStat.isDirectory())
-					{
-	    				outType = {isDir: true};
-					}
-	    			else //If we can get file stat, then it exists
-					{
-	    				throw 'Error: Output file already exists';
-					}
-	    		}
-	    		catch(e) //on error, file doesn't exist and it is not a dir
-	    		{
-	    			outType = {isFile: true};
-	    			
-	    			format = path.extname(options.output).substr(1);
-					
-					if (!validFormatRegExp.test(format))
-					{
-						format = null;
-					}
-	    		}
-			}
-	    	
-	    	if (format == null)
-			{
-	    		format = options.format;
-			}
-	    	
-	    	var from = null, to = null;
-	    	
-	    	if (options.pageIndex != null && options.pageIndex >= 0)
-			{
-	    		from = options.pageIndex;
-				to = options.pageIndex;
-				options.allPages = false;
-			}
-	    	else if (options.pageRange && options.pageRange.length == 2)
-			{
-	    		from = options.pageRange[0] >= 0 ? options.pageRange[0] : null;
-	    		to = options.pageRange[1] >= 0 ? options.pageRange[1] : null;
-				options.allPages = false;
-			}
-
-			var expArgs = {
-				format: format,
-				w: options.width > 0 ? options.width : null,
-				h: options.height > 0 ? options.height : null,
-				border: options.border > 0 ? options.border : 0,
-				bg: options.transparent ? 'none' : '#ffffff',
-				from: from,
-				to: to,
-				allPages: format == 'pdf' && options.allPages,
-				scale: (options.crop && (options.scale == null || options.scale == 1)) ? 1.00001: (options.scale || 1), //any value other than 1 crops the pdf
-				embedXml: options.embedDiagram? '1' : '0',
-				embedImages: options.embedSvgImages? '1' : '0',
-				jpegQuality: options.quality,
-				uncompressed: options.uncompressed
-			};
-
-			if (options.layers)
-			{
-				expArgs.extras = JSON.stringify({layers: options.layers.split(',')});
-			}
-
-			var paths = program.args;
-			
-			// If a file is passed 
-			if (paths !== undefined && paths[0] != null)
-			{
-				var inStat = null;
-				
-				try
-				{
-					inStat = fs.statSync(paths[0]);
-				}
-				catch(e)
-				{
-					throw 'Error: input file/directory not found';	
-				}
-				
-				var files = [];
-				
-				function addDirectoryFiles(dir, isRecursive)
-				{
-					fs.readdirSync(dir).forEach(function(file) 
-					{
-						var filePath = path.join(dir, file);
-						stat = fs.statSync(filePath);
-						
-						if (stat.isFile() && path.basename(filePath).charAt(0) != '.')
-						{
-							files.push(filePath);
-						}
-						if (stat.isDirectory() && isRecursive)
-					    {
-							addDirectoryFiles(filePath, isRecursive)
-					    }
-					});
-				}
-				
-				if (inStat.isFile())
-				{
-					files.push(paths[0]);
-				}
-				else if (inStat.isDirectory())
-				{
-					addDirectoryFiles(paths[0], options.recursive);
-				}
-
-				if (files.length > 0)
-				{
-					var fileIndex = 0;
-					
-					function processOneFile()
-					{
-						var curFile = files[fileIndex];
-						
-						try
-						{
-							var ext = path.extname(curFile);
-							
-							let fileContent = fs.readFileSync(curFile, ext === '.png' || ext === '.vsdx' ? null : 'utf-8');
-							
-							if (ext === '.vsdx')
-							{
-								dummyWin.loadURL(`file://${__dirname}/vsdxImporter.html`);
-								
-								const contents = dummyWin.webContents;
-
-								contents.on('did-finish-load', function()
-							    {
-									contents.send('import', fileContent);
-
-									ipcMain.once('import-success', function(e, xml)
-						    	    {
-										if (!validateSender(e.senderFrame)) return null;
-
-										expArgs.xml = xml;
-										startExport();
-						    	    });
-						    	    
-						    	    ipcMain.once('import-error', function(e)
-						    	    {
-										if (!validateSender(e.senderFrame)) return null;
-
-						    	    	console.error('Error: cannot import VSDX file: ' + curFile);
-						    	    	next();
-						    	    });
-							    });
-							}
-							else
-							{
-								if (ext === '.csv')
-								{
-									expArgs.csv = fileContent;
-								}
-								else if (ext === '.png')
-								{
-									expArgs.xml = Buffer.from(fileContent).toString('base64');
-								}
-								else
-								{
-									expArgs.xml = fileContent;
-								}
-
-								startExport();
-							}
-							
-							function next()
-							{
-								fileIndex++;
-								
-								if (fileIndex < files.length)
-								{
-									processOneFile();
-								}
-								else
-								{
-									cmdQPressed = true;
-									dummyWin.destroy();
-								}
-							};
-							
-							function startExport()
-							{
-								var mockEvent = {
-									reply: function(msg, data)
-									{
-										try
-										{
-											if (data == null || data.length == 0)
-											{
-												console.error('Error: Export failed: ' + curFile);
-											}
-											else if (msg == 'export-success')
-											{
-												var outFileName = null;
-												
-												if (outType != null)
-												{
-													if (outType.isDir)
-													{
-														outFileName = path.join(options.output, path.basename(curFile,
-															path.extname(curFile))) + '.' + format;
-													}
-													else
-													{
-														outFileName = options.output;
-													}
-												}
-												else if (inStat.isFile())
-												{
-													outFileName = path.join(path.dirname(paths[0]), path.basename(paths[0],
-														path.extname(paths[0]))) + '.' + format;
-													
-												}
-												else //dir
-												{
-													outFileName = path.join(path.dirname(curFile), path.basename(curFile,
-														path.extname(curFile))) + '.' + format;
-												}
-												
-												try
-												{
-													var counter = 0;
-													var realFileName = outFileName;
-													
-													if (program.rawArgs.indexOf('-k') > -1 || program.rawArgs.indexOf('--check') > -1)
-													{
-														while (fs.existsSync(realFileName))
-														{
-															counter++;
-															realFileName = path.join(path.dirname(outFileName), path.basename(outFileName,
-																path.extname(outFileName))) + '-' + counter + path.extname(outFileName);
-														}
-													}
-													
-													fs.writeFileSync(realFileName, data, format == 'vsdx'? 'base64' : null, { flag: 'wx' });
-													console.log(curFile + ' -> ' + realFileName);
-												}
-												catch(e)
-												{
-													console.error('Error writing to file: ' + outFileName);
-												}
-											}
-											else
-											{
-												console.error('Error: ' + data + ': ' + curFile);
-											}
-											
-											next();
-										}
-										finally
-										{
-											mockEvent.finalize();
-										}
-							    	}
-								};
-
-								exportDiagram(mockEvent, expArgs, true);
-							};
-						}
-						catch(e)
-						{
-							console.error('Error reading file: ' + curFile);
-							next();
-						}
-					}
-					
-					processOneFile();
-				}
-				else
-				{
-					throw 'Error: input file/directory not found or directory is empty';
-				}
-			}
-			else
-			{
-				throw 'Error: An input file must be specified';
-			}
-    	}
-    	catch(e)
-    	{
-    		console.error(e);
-    		
-    		cmdQPressed = true;
-			dummyWin.destroy();
-    	}
-    	
-    	return;
-	}
-    else if (program.rawArgs.indexOf('-h') > -1 || program.rawArgs.indexOf('--help') > -1 || program.rawArgs.indexOf('-V') > -1 || program.rawArgs.indexOf('--version') > -1) //To prevent execution when help/version arg is used
-	{
-		app.quit();
-    	return;
-	}
-    
-    //Prevent multiple instances of the application (casuses issues with configuration)
-    const gotTheLock = app.requestSingleInstanceLock()
-
-    if (!gotTheLock) 
-    {
-    	app.quit()
-    } 
-    else 
-    {
-    	app.on('second-instance', (event, commandLine, workingDirectory) => {
-			// Creating a new window while a save/open dialog is open crashes the app
-			if (dialogOpen) return;
-
-    		//Create another window
-    		let win = createWindow()
-
-			let loadEvtCount = 0;
-			
-			function loadFinished(e)
-			{
-				if (e != null && !validateSender(e.senderFrame)) return null;
-
-				loadEvtCount++;
-				
-				if (loadEvtCount == 2)
-				{
-	    	    	//Open the file if new app request is from opening a file
-	    	    	var potFile = commandLine.pop();
-	    	    	
-	    	    	if (fs.existsSync(potFile))
-	    	    	{
-	    	    		win.webContents.send('args-obj', {args: [potFile]});
-	    	    	}
-				}
-			}
-			
-			//Order of these two events is not guaranteed, so wait for them async.
-			//TOOD There is still a chance we catch another window 'app-load-finished' if user created multiple windows quickly 
-	    	ipcMain.once('app-load-finished', loadFinished);
-    	    
-    	    win.webContents.on('did-finish-load', function()
-    	    {    			
-    	        win.webContents.zoomFactor = 1;
-    	        win.webContents.setVisualZoomLevelLimits(1, 1);
-				loadFinished();
-    	    });
-    	})
-    }
-
-    let win = createWindow()
-    
-	let loadEvtCount = 0;
-			
-	function loadFinished(e)
-	{
-		if (e != null && !validateSender(e.senderFrame)) return null;
-
-		loadEvtCount++;
-		
-		if (loadEvtCount == 2)
-		{
-			//Sending entire program is not allowed in Electron 9 as it is not native JS object
-			win.webContents.send('args-obj', {args: program.args, create: options.create});
-		}
-	}
-	
-	//Order of these two events is not guaranteed, so wait for them async.
-	//TOOD There is still a chance we catch another window 'app-load-finished' if user created multiple windows quickly 
-	ipcMain.once('app-load-finished', loadFinished);
-
-    win.webContents.on('did-finish-load', function()
-    {
-    	if (firstWinFilePath != null)
-		{
-    		if (program.args != null)
-    		{
-    			program.args.push(firstWinFilePath);
-    		}
-    		else
-			{
-    			program.args = [firstWinFilePath];
-			}
-		}
-    	
-    	firstWinLoaded = true;
-    	
-        win.webContents.zoomFactor = 1;
-        win.webContents.setVisualZoomLevelLimits(1, 1);
-		loadFinished();
-    });
-	
-	function toggleSpellCheck(e)
-	{
-		if (e != null && !validateSender(e.senderFrame)) return null;
-
-		enableSpellCheck = !enableSpellCheck;
-		store.set('enableSpellCheck', enableSpellCheck);
-	};
-
-	ipcMain.on('toggleSpellCheck', toggleSpellCheck);
-
-	function toggleStoreBkp(e)
-	{
-		if (e != null && !validateSender(e.senderFrame)) return null;
-
-		enableStoreBkp = !enableStoreBkp;
-		store.set('enableStoreBkp', enableStoreBkp);
-	};
-
-	ipcMain.on('toggleStoreBkp', toggleStoreBkp);
-
-    let updateNoAvailAdded = false;
-    
-	function checkForUpdatesFn(e) 
-	{ 
-		if (e != null && e.senderFrame != null && 
-			!validateSender(e.senderFrame)) return null;
-
-		autoUpdater.checkForUpdates();
-		store.set('dontCheckUpdates', false);
-		
-		if (!updateNoAvailAdded) 
-		{
-			updateNoAvailAdded = true;
-			autoUpdater.on('update-not-available', (info) => {
-				dialog.showMessageBox(
-					{
-						type: 'info',
-						title: 'No updates found',
-						message: 'Your application is up-to-date',
-					})
-			})
-		}
-	};
-	
-	let checkForUpdates = {
-		label: 'Check for updates',
-		click: checkForUpdatesFn
-	}
-
-	ipcMain.on('checkForUpdates', checkForUpdatesFn);
-
-	if (isMac)
-	{
-	    let template = [{
-	      label: app.name,
-	      submenu: [
-	        {
-	          label: 'About ' + app.name,
-	          click() { shell.openExternal('https://www.drawio.com'); }
-	        },
-	        {
-	          label: 'Support',
-	          click() { shell.openExternal('https://github.com/jgraph/drawio-desktop/issues'); }
-			},
-			checkForUpdates,
-			{ type: 'separator' },
-	        { role: 'hide' },
-	        { role: 'hideothers' },
-	        { role: 'unhide' },
-	        { type: 'separator' },
-	        { role: 'quit' }
-	      ]
-	    }, {
-	      label: 'Edit',
-	      submenu: [
-			{ role: 'undo' },
-			{ role: 'redo' },
-			{ type: 'separator' },
-			{ role: 'cut' },
-			{ role: 'copy' },
-			{ role: 'paste' },
-			{ role: 'pasteAndMatchStyle' },
-			{ role: 'selectAll' }
-	      ]
-	    }]
-	    
-	    if (disableUpdate)
-		{
-			template[0].submenu.splice(2, 1);
-		}
-		
-		const menuBar = menu.buildFromTemplate(template)
-		menu.setApplicationMenu(menuBar)
-	}
-	else //hide  menubar in win/linux
-	{
-		menu.setApplicationMenu(null)
-	}
-	
-	autoUpdater.setFeedURL({
-		provider: 'github',
-		repo: 'drawio-desktop',
-		owner: 'jgraph'
-	})
-	
-	if (!disableUpdate && !store.get('dontCheckUpdates'))
-	{
-		autoUpdater.checkForUpdates()
-	}
-})
-
-//Quit from the dock context menu should quit the application directly
-if (isMac) 
-{
-	app.on('before-quit', function() {
-		cmdQPressed = true;
-	});	
-}
-
-// Quit when all windows are closed.
-app.on('window-all-closed', function ()
-{
-	if (__DEV__) 
-	{
-		console.log('window-all-closed', windowsRegistry.length)
-	}
-	
-	// On OS X it is common for applications and their menu bar
-	// to stay active until the user quits explicitly with Cmd + Q
-	if (cmdQPressed || !isMac)
-	{
-		app.quit()
-	}
-})
-
-app.on('activate', function ()
-{
-	if (__DEV__) 
-	{
-		console.log('app on activate', windowsRegistry.length)
-	}
-	
-	// On OS X it's common to re-create a window in the app when the
-	// dock icon is clicked and there are no other windows open.
-	if (windowsRegistry.length === 0)
-	{
-		createWindow()
-	}
-})
-
-app.on('will-finish-launching', function()
-{
-	app.on("open-file", function(event, filePath) 
-	{
-	    event.preventDefault();
-		// Creating a new window while a save/open dialog is open crashes the app
-		if (dialogOpen) return;
-
-	    if (firstWinLoaded)
-	    {
-		    let win = createWindow();
-		    
-			let loadEvtCount = 0;
-			
-			function loadFinished(e)
-			{
-				if (e != null && !validateSender(e.senderFrame)) return null;
-
-				loadEvtCount++;
-				
-				if (loadEvtCount == 2)
-				{
-	    	    	win.webContents.send('args-obj', {args: [filePath]});
-				}
-			}
-			
-			//Order of these two events is not guaranteed, so wait for them async.
-			//TOOD There is still a chance we catch another window 'app-load-finished' if user created multiple windows quickly 
-	    	ipcMain.once('app-load-finished', loadFinished);
-    	    
-		    win.webContents.on('did-finish-load', function()
-		    {
-		        win.webContents.zoomFactor = 1;
-		        win.webContents.setVisualZoomLevelLimits(1, 1);
-				loadFinished();
-		    });
-	    }
-	    else
-		{
-	    	firstWinFilePath = filePath
-		}
-	});
-});
- 
-app.on('web-contents-created', (event, contents) => {
-	// Disable navigation
-	contents.on('will-navigate', (event, navigationUrl) => {
-		event.preventDefault()
-	})
-
-	// Limit creation of new windows (we also override window.open)
-	contents.setWindowOpenHandler(({ url }) => {
-		// We allow external absolute URLs to be open externally (check openExternal for details) and also empty windows (url -> about:blank)
-		if (url.startsWith('about:blank'))
-		{
-			return {
-				action: 'allow',
-				overrideBrowserWindowOptions: {
-					fullscreenable: false,
-					webPreferences: {
-						contextIsolation: true
-					}
-				}
-			}
-		} 
-		else if (!openExternal(url))
-		{
-			return {action: 'deny'}
-		}
-	})
-
-	// Disable all webviews
-	contents.on('will-attach-webview', (event, webPreferences, params) => {
-		event.preventDefault()
-	})
-})
-
-autoUpdater.on('error', e => log.error('@error@\n', e))
-
-autoUpdater.on('update-available', (a, b) =>
-{
-	log.info('@update-available@\n', a, b)
-	
-	dialog.showMessageBox(
-	{
-		type: 'question',
-		buttons: ['Ok', 'Cancel', 'Don\'t Ask Again'],
-		title: 'Confirm Update',
-		message: 'Update available.\n\nWould you like to download and install new version?',
-		detail: 'Application will automatically restart to apply update after download',
-	}).then( result =>
-	{
-		if (result.response === 0)
-		{
-			autoUpdater.downloadUpdate()
-			
-			var progressBar = new ProgressBar({
-				title: 'draw.io Update',
-			    text: 'Downloading draw.io update...'
-			});
-			
-			function reportUpdateError(e)
-			{
-				progressBar.detail = 'Error occurred while fetching updates. ' + (e && e.message? e.message : e)
-				progressBar._window.setClosable(true);
-			}
-
-			autoUpdater.on('error', e => {
-				if (progressBar._window != null)
-				{
-					reportUpdateError(e);
-				}
-				else
-				{
-					progressBar.on('ready', function() {
-						reportUpdateError(e);
-					});
-				}
-			})
-
-			var firstTimeProg = true;
-			
-			autoUpdater.on('download-progress', (d) => {
-				//On mac, download-progress event is not called, so the indeterminate progress will continue until download is finished
-				log.info('@update-progress@\n', d);
-				
-				var percent = d.percent;
-				
-				if (percent)
-				{
-					percent = Math.round(percent * 100)/100;
-				}
-				
-				if (firstTimeProg)
-				{
-					firstTimeProg = false;
-					progressBar.close();
-
-					progressBar = new ProgressBar({
-						indeterminate: false,
-						title: 'draw.io Update',
-						text: 'Downloading draw.io update...',
-						detail: `${percent}% ...`,
-						initialValue: percent
-					});
-				
-					progressBar
-							.on('completed', function() {
-								progressBar.detail = 'Download completed.';
-							})
-							.on('aborted', function(value) {
-								log.info(`progress aborted... ${value}`);
-							})
-							.on('progress', function(value) {
-								progressBar.detail = `${value}% ...`;
-							})
-							.on('ready', function() {
-								//InitialValue doesn't set the UI! so this is needed to render it correctly
-								progressBar.value = percent;
-							});
-				}
-				else 
-				{
-					progressBar.value = percent;
-				}
-			});
-
-		    autoUpdater.on('update-downloaded', (info) => {
-				if (!progressBar.isCompleted())
-				{
-					progressBar.close()
-				}
-		
-				log.info('@update-downloaded@\n', info)
-				// Ask user to update the app
-				dialog.showMessageBox(
-				{
-					type: 'question',
-					buttons: ['Install', 'Later'],
-					defaultId: 0,
-					message: 'A new version of ' + app.name + ' has been downloaded',
-					detail: 'It will be installed the next time you restart the application',
-				}).then(result =>
-				{
-					if (result.response === 0)
-					{
-						setTimeout(() => autoUpdater.quitAndInstall(), 1)
-					}
-				})
-		    });
-		}
-		else if (result.response === 2)
-		{
-			//save in settings don't check for updates
-			log.info('@dont check for updates!@')
-			store.set('dontCheckUpdates', true)
-		}
-	})
-})
-
-//Pdf export
-const MICRON_TO_PIXEL = 264.58 		//264.58 micron = 1 pixel
-const PIXELS_PER_INCH = 100.117		// Usually it is 100 pixels per inch but this give better results
-const PNG_CHUNK_IDAT = 1229209940;
-const LARGE_IMAGE_AREA = 30000000;
-
-//NOTE: Key length must not be longer than 79 bytes (not checked)
-function writePngWithText(origBuff, key, text, compressed, base64encoded)
-{
-	var isDpi = key == 'dpi';
-	var inOffset = 0;
-	var outOffset = 0;
-	var data = text;
-	var dataLen = isDpi? 9 : key.length + data.length + 1; //we add 1 zeros with non-compressed data, for pHYs it's 2 of 4-byte-int + 1 byte
-	
-	//prepare compressed data to get its size
-	if (compressed)
-	{
-		data = zlib.deflateRawSync(encodeURIComponent(text));
-		dataLen = key.length + data.length + 2; //we add 2 zeros with compressed data
-	}
-	
-	var outBuff = Buffer.allocUnsafe(origBuff.length + dataLen + 4); //4 is the header size "zTXt", "tEXt" or "pHYs"
-	
-	try
-	{
-		var magic1 = origBuff.readUInt32BE(inOffset);
-		inOffset += 4;
-		var magic2 = origBuff.readUInt32BE(inOffset);
-		inOffset += 4;
-		
-		if (magic1 != 0x89504e47 && magic2 != 0x0d0a1a0a)
-		{
-			throw new Error("PNGImageDecoder0");
-		}
-		
-		outBuff.writeUInt32BE(magic1, outOffset);
-		outOffset += 4;
-		outBuff.writeUInt32BE(magic2, outOffset);
-		outOffset += 4;
-	}
-	catch (e)
-	{
-		log.error(e.message, {stack: e.stack});
-		throw new Error("PNGImageDecoder1");
-	}
-
-	try
-	{
-		while (inOffset < origBuff.length)
-		{
-			var length = origBuff.readInt32BE(inOffset);
-			inOffset += 4;
-			var type = origBuff.readInt32BE(inOffset)
-			inOffset += 4;
-
-			if (type == PNG_CHUNK_IDAT)
-			{
-				// Insert zTXt chunk before IDAT chunk
-				outBuff.writeInt32BE(dataLen, outOffset);
-				outOffset += 4;
-				
-				var typeSignature = isDpi? 'pHYs' : (compressed ? "zTXt" : "tEXt");
-				outBuff.write(typeSignature, outOffset);
-				
-				outOffset += 4;
-
-				if (isDpi)
-				{
-					var dpm = Math.round(parseInt(text) / 0.0254) || 3937; //One inch is equal to exactly 0.0254 meters. 3937 is 100dpi
-
-					outBuff.writeInt32BE(dpm, outOffset);
-					outBuff.writeInt32BE(dpm, outOffset + 4);
-					outBuff.writeInt8(1, outOffset + 8);
-					outOffset += 9;
-
-					data = Buffer.allocUnsafe(9);
-					data.writeInt32BE(dpm, 0);
-					data.writeInt32BE(dpm, 4);
-					data.writeInt8(1, 8);
-				}
-				else
-				{
-					outBuff.write(key, outOffset);
-					outOffset += key.length;
-					outBuff.writeInt8(0, outOffset);
-					outOffset ++;
-
-					if (compressed)
-					{
-						outBuff.writeInt8(0, outOffset);
-						outOffset ++;
-						data.copy(outBuff, outOffset);
-					}
-					else
-					{
-						outBuff.write(data, outOffset);	
-					}
-
-					outOffset += data.length;				
-				}
-
-				var crcVal = 0xffffffff;
-				crcVal = crc.crcjam(typeSignature, crcVal);
-				crcVal = crc.crcjam(data, crcVal);
-
-				// CRC
-				outBuff.writeInt32BE(crcVal ^ 0xffffffff, outOffset);
-				outOffset += 4;
-
-				// Writes the IDAT chunk after the zTXt
-				outBuff.writeInt32BE(length, outOffset);
-				outOffset += 4;
-				outBuff.writeInt32BE(type, outOffset);
-				outOffset += 4;
-
-				origBuff.copy(outBuff, outOffset, inOffset);
-
-				// Encodes the buffer using base64 if requested
-				return base64encoded? outBuff.toString('base64') : outBuff;
-			}
-
-			outBuff.writeInt32BE(length, outOffset);
-			outOffset += 4;
-			outBuff.writeInt32BE(type, outOffset);
-			outOffset += 4;
-
-			origBuff.copy(outBuff, outOffset, inOffset, inOffset + length + 4);// +4 to move past the crc
-			
-			inOffset += length + 4;
-			outOffset += length + 4;
-		}
-	}
-	catch (e)
-	{
-		log.error(e.message, {stack: e.stack});
-		throw e;
-	}
-}
-
-//TODO Create a lightweight html file similar to export3.html for exporting to vsdx
-function exportVsdx(event, args, directFinalize)
-{
-	let win = createWindow({
-		show : false
-	});
-
-	let loadEvtCount = 0;
-			
-	function loadFinished(e)
-	{
-		if (e != null && e.senderFrame != null &&
-			!validateSender(e.senderFrame)) return null;
-
-		loadEvtCount++;
-		
-		if (loadEvtCount == 2)
-		{
-	    	win.webContents.send('export-vsdx', args);
-	    	
-	        ipcMain.once('export-vsdx-finished', (e, data) =>
-			{
-				if (!validateSender(e.senderFrame)) return null;
-
-				var hasError = false;
-				
-				if (data == null)
-				{
-					hasError = true;
-				}
-				
-				//Set finalize here since it is call in the reply below
-				function finalize()
-				{
-					win.destroy();
-				};
-				
-				if (directFinalize === true)
-				{
-					event.finalize = finalize;
-				}
-				else
-				{
-					//Destroy the window after response being received by caller
-					ipcMain.once('export-finalize', finalize);
-				}
-				
-				if (hasError)
-				{
-					event.reply('export-error');
-				}
-				else
-				{
-					event.reply('export-success', data);
-				}
-			});
-		}
-	}
-	
-	//Order of these two events is not guaranteed, so wait for them async.
-	//TOOD There is still a chance we catch another window 'app-load-finished' if user created multiple windows quickly 
-	ipcMain.once('app-load-finished', loadFinished);
-    win.webContents.on('did-finish-load', loadFinished);
-};
-
-async function mergePdfs(pdfFiles, xml)
-{
-	//Pass throgh single files
-	if (pdfFiles.length == 1 && xml == null)
-	{
-		return pdfFiles[0];
-	}
-
-	try 
-	{
-		const pdfDoc = await PDFDocument.create();
-		pdfDoc.setCreator('diagrams.net');
-
-		if (xml != null)
-		{	
-			//Embed diagram XML as file attachment
-			await pdfDoc.attach(Buffer.from(xml).toString('base64'), 'diagram.xml', {
-				mimeType: 'application/vnd.jgraph.mxfile',
-				description: 'Diagram Content'
-			  });
-		}
-
-		for (var i = 0; i < pdfFiles.length; i++)
-		{
-			const pdfFile = await PDFDocument.load(pdfFiles[i].buffer);
-			const pages = await pdfDoc.copyPages(pdfFile, pdfFile.getPageIndices());
-			pages.forEach(p => pdfDoc.addPage(p));
-		}
-
-		const pdfBytes = await pdfDoc.save();
-        return Buffer.from(pdfBytes);
-    }
-	catch(e)
-	{
-        throw new Error('Error during PDF combination: ' + e.message);
-    }
-}
-
-//TODO Use canvas to export images if math is not used to speedup export (no capturePage). Requires change to export3.html also
-function exportDiagram(event, args, directFinalize)
-{
-	if (event != null && event.senderFrame != null &&
-		!validateSender(event.senderFrame)) return null;
-
-	if (args.format == 'vsdx')
-	{
-		exportVsdx(event, args, directFinalize);
-		return;
-	}
-	
-	var browser = null;
-	
-	try
-	{
-		browser = new BrowserWindow({
-			webPreferences: {
-				preload: `${__dirname}/electron-preload.js`,
-				backgroundThrottling: false,
-				contextIsolation: true,
-				disableBlinkFeatures: 'Auxclick' // Is this needed?
-			},
-			show : false,
-			frame: false,
-			enableLargerThanScreen: true,
-			transparent: args.format == 'png' && (args.bg == null || args.bg == 'none'),
-			parent: windowsRegistry[0] //set parent to first opened window. Not very accurate, but useful when all visible windows are closed
-		});
-
-		browser.loadURL(`file://${__dirname}/export3.html`);
-
-		const contents = browser.webContents;
-		var pageByPage = (args.format == 'pdf' && !args.print), from, pdfs;
-
-		if (pageByPage)
-		{
-			from = args.allPages? 0 : parseInt(args.from || 0);
-			to = args.allPages? 1000 : parseInt(args.to || 1000) + 1; //The 'to' will be corrected later
-			pdfs = [];
-
-			args.from = from;
-			args.to = from;
-			args.allPages = false;
-		}
-			
-		contents.on('did-finish-load', function()
-	    {
-			//Set finalize here since it is call in the reply below
-			function finalize()
-			{
-				browser.destroy();
-			};
-			
-			if (directFinalize === true)
-			{
-				event.finalize = finalize;
-			}
-			else
-			{
-				//Destroy the window after response being received by caller
-				ipcMain.once('export-finalize', finalize);
-			}
-
-			function renderingFinishHandler(e, renderInfo)
-			{
-				if (!validateSender(e.senderFrame)) return null;
-
-				if (renderInfo == null)
-				{
-					event.reply('export-error');
-					return;
-				}
-
-				var pageCount = renderInfo.pageCount, bounds = null;
-				//For some reason, Electron 9 doesn't send this object as is without stringifying. Usually when variable is external to function own scope
-				try
-				{
-					bounds = JSON.parse(renderInfo.bounds);
-				}
-				catch(e)
-				{
-					bounds = null;
-				}
-				
-				var pdfOptions = {pageSize: 'A4'};
-				var hasError = false;
-				
-				if (bounds == null || bounds.width < 5 || bounds.height < 5) //very small page size never return from printToPDF
-				{
-					//A workaround to detect errors in the input file or being empty file
-					hasError = true;
-				}
-				else
-				{
-					pdfOptions = {
-						printBackground: true,
-						pageSize : {
-							width: bounds.width / PIXELS_PER_INCH,
-							height: (bounds.height + 2) / PIXELS_PER_INCH //the extra 2 pixels to prevent adding an extra empty page						
-						},
-						margins: {
-							top: 0,
-							bottom: 0,
-							left: 0,
-							right: 0
-						} // no margin
-					}
-				}
-				
-				var base64encoded = args.base64 == '1';
-				
-				if (hasError)
-				{
-					event.reply('export-error');
-				}
-				else if (args.format == 'png' || args.format == 'jpg' || args.format == 'jpeg')
-				{
-					//Adds an extra pixel to prevent scrollbars from showing
-					var newBounds = {width: Math.ceil(bounds.width + bounds.x) + 1, height: Math.ceil(bounds.height + bounds.y) + 1};
-					browser.setBounds(newBounds);
-					
-					//TODO The browser takes sometime to show the graph (also after resize it takes some time to render)
-					//	 	1 sec is most probably enough (for small images, 5 for large ones) BUT not a stable solution
-					setTimeout(function()
-					{
-						browser.capturePage().then(function(img)
-						{
-							//Image is double the given bounds, so resize is needed!
-							var tScale = 1;
-
-							//If user defined width and/or height, enforce it precisely here. Height override width
-							if (args.h)
-							{
-								tScale = args.h / newBounds.height;
-							}
-							else if (args.w)
-							{
-								tScale = args.w / newBounds.width;
-							}
-							
-							newBounds.width *= tScale;
-							newBounds.height *= tScale;
-							img = img.resize(newBounds);
-
-							var data = args.format == 'png'? img.toPNG() : img.toJPEG(args.jpegQuality || 90);
-							
-							if (args.dpi != null && args.format == 'png')
-							{
-								data = writePngWithText(data, 'dpi', args.dpi);
-							}
-							
-							if (args.embedXml == "1" && args.format == 'png')
-							{
-								data = writePngWithText(data, "mxGraphModel", args.xml, true,
-										base64encoded);
-							}
-							else
-							{
-								if (base64encoded)
-								{
-									data = data.toString('base64');
-								}
-							}
-							
-							event.reply('export-success', data);
-						});
-					}, bounds.width * bounds.height < LARGE_IMAGE_AREA? 1000 : 5000);
-				}
-				else if (args.format == 'pdf')
-				{
-					if (args.print)
-					{
-						pdfOptions = {
-							scaleFactor: args.pageScale,
-							printBackground: true,
-							pageSize : {
-								width: args.pageWidth * MICRON_TO_PIXEL,
-								//This height adjustment fixes the output. TODO Test more cases
-								height: (args.pageHeight * 1.025) * MICRON_TO_PIXEL
-							},
-							marginsType: 1 // no margin
-						};
-						 
-						contents.print(pdfOptions, (success, errorType) => 
-						{
-							//Consider all as success
-							event.reply('export-success', {});
-						});
-					}
-					else
-					{
-						contents.printToPDF(pdfOptions).then(async (data) => 
-						{
-							pdfs.push(data);
-							to = to > pageCount? pageCount : to;
-							from++;
-							
-							if (from < to)
-							{
-								args.from = from;
-								args.to = from;
-								ipcMain.once('render-finished', renderingFinishHandler);
-								contents.send('render', args);
-							}
-							else
-							{
-								data = await mergePdfs(pdfs, args.embedXml == '1' ? args.xml : null);
-								event.reply('export-success', data);
-							}
-						})
-						.catch((error) => 
-						{
-							event.reply('export-error', error);
-						});
-					}
-				}
-				else if (args.format == 'svg')
-				{
-					contents.send('get-svg-data');
-					
-					ipcMain.once('svg-data', (e, data) =>
-					{
-						if (!validateSender(e.senderFrame)) return null;
-
-						event.reply('export-success', data);
-					});
-				}
-				else
-				{
-					event.reply('export-error', 'Error: Unsupported format');
-				}
-			};
-			
-			ipcMain.once('render-finished', renderingFinishHandler);
-
-			if (args.format == 'xml')
-			{
-				ipcMain.once('xml-data', (e, data) =>
-				{
-					if (!validateSender(e.senderFrame)) return null;
-
-					event.reply('export-success', data);
-				});
-				
-				ipcMain.once('xml-data-error', (e) =>
-				{
-					if (!validateSender(e.senderFrame)) return null;
-
-					event.reply('export-error');
-				});
-			}
-			
-			args.border = args.border || 0;
-			args.scale = args.scale || 1;
-			
-			contents.send('render', args);
-	    });
-	}
-	catch (e)
-	{
-		if (browser != null)
-		{
-			browser.destroy();
-		}
-
-		event.reply('export-error', e);
-		console.log('export-error', e);
-	}
-};
-
-ipcMain.on('export', exportDiagram);
-
-//================================================================
-// Renderer Helper functions
-//================================================================
-
-const { O_SYNC, O_CREAT, O_WRONLY, O_TRUNC, O_RDONLY } = fs.constants;
-const DRAFT_PREFEX = '.$';
-const OLD_DRAFT_PREFEX = '~$';
-const DRAFT_EXT = '.dtmp';
-const BKP_PREFEX = '.$';
-const OLD_BKP_PREFEX = '~$';
-const BKP_EXT = '.bkp';
-
-/**
- * Checks the file content type
- * Confirm content is xml, pdf, png, jpg, svg, vsdx ...
- */
-function checkFileContent(body, enc)
-{
-	if (body != null)
-	{
-		let head, headBinay;
-		
-		if (typeof body === 'string')
-		{
-			if (enc === 'base64')
-			{
-				headBinay = Buffer.from(body.substring(0, 22), 'base64');
-				head = headBinay.toString();
-			}
-			else
-			{
-				head = body.substring(0, 16);
-				headBinay = Buffer.from(head);
-			}
-		}
-		else
-		{
-			head = new TextDecoder("utf-8").decode(body.subarray(0, 16));
-			headBinay = body;
-		}
-		
-		let c1 = head[0],
-		c2 = head[1],
-		c3 = head[2],
-		c4 = head[3],
-		c5 = head[4],
-		c6 = head[5],
-		c7 = head[6],
-		c8 = head[7],
-		c9 = head[8],
-		c10 = head[9],
-		c11 = head[10],
-		c12 = head[11],
-		c13 = head[12],
-		c14 = head[13],
-		c15 = head[14],
-		c16 = head[15];
-
-		let cc1 = headBinay[0],
-		cc2 = headBinay[1],
-		cc3 = headBinay[2],
-		cc4 = headBinay[3],
-		cc5 = headBinay[4],
-		cc6 = headBinay[5],
-		cc7 = headBinay[6],
-		cc8 = headBinay[7],
-		cc9 = headBinay[8],
-		cc10 = headBinay[9],
-		cc11 = headBinay[10],
-		cc12 = headBinay[11],
-		cc13 = headBinay[12],
-		cc14 = headBinay[13],
-		cc15 = headBinay[14],
-		cc16 = headBinay[15];
-
-		if (c1 == '<')
-		{
-			// text/html
-			if (c2 == '!'
-					|| ((c2 == 'h'
-							&& (c3 == 't' && c4 == 'm' && c5 == 'l'
-									|| c3 == 'e' && c4 == 'a' && c5 == 'd')
-							|| (c2 == 'b' && c3 == 'o' && c4 == 'd'
-									&& c5 == 'y')))
-					|| ((c2 == 'H'
-							&& (c3 == 'T' && c4 == 'M' && c5 == 'L'
-									|| c3 == 'E' && c4 == 'A' && c5 == 'D')
-							|| (c2 == 'B' && c3 == 'O' && c4 == 'D'
-									&& c5 == 'Y'))))
-			{
-				return true;
-			}
-
-			// application/xml
-			if (c2 == '?' && c3 == 'x' && c4 == 'm' && c5 == 'l'
-					&& c6 == ' ')
-			{
-				return true;
-			}
-			
-			// application/svg+xml
-			if (c2 == 's' && c3 == 'v' && c4 == 'g' && c5 == ' ')
-			{
-				return true;
-			}
-		}
-
-		// big and little (identical) endian UTF-8 encodings, with BOM
-		// application/xml
-		if (cc1 == 0xef && cc2 == 0xbb && cc3 == 0xbf)
-		{
-			if (c4 == '<' && c5 == '?' && c6 == 'x')
-			{
-				return true;
-			}
-		}
-
-		// big and little endian UTF-16 encodings, with byte order mark
-		// application/xml
-		if (cc1 == 0xfe && cc2 == 0xff)
-		{
-			if (cc3 == 0 && c4 == '<' && cc5 == 0 && c6 == '?' && cc7 == 0
-					&& c8 == 'x')
-			{
-				return true;
-			}
-		}
-
-		// application/xml
-		if (cc1 == 0xff && cc2 == 0xfe)
-		{
-			if (c3 == '<' && cc4 == 0 && c5 == '?' && cc6 == 0 && c7 == 'x'
-					&& cc8 == 0)
-			{
-				return true;
-			}
-		}
-
-		// big and little endian UTF-32 encodings, with BOM
-		// application/xml
-		if (cc1 == 0x00 && cc2 == 0x00 && cc3 == 0xfe && cc4 == 0xff)
-		{
-			if (cc5 == 0 && cc6 == 0 && cc7 == 0 && c8 == '<' && cc9 == 0
-					&& cc10 == 0 && cc11 == 0 && c12 == '?' && cc13 == 0
-					&& cc14 == 0 && cc15 == 0 && c16 == 'x')
-			{
-				return true;
-			}
-		}
-
-		// application/xml
-		if (cc1 == 0xff && cc2 == 0xfe && cc3 == 0x00 && cc4 == 0x00)
-		{
-			if (c5 == '<' && cc6 == 0 && cc7 == 0 && cc8 == 0 && c9 == '?'
-					&& cc10 == 0 && cc11 == 0 && cc12 == 0 && c13 == 'x'
-					&& cc14 == 0 && cc15 == 0 && cc16 == 0)
-			{
-				return true;
-			}
-		}
-
-		// application/pdf (%PDF-)
-		if (cc1 == 37 && cc2 == 80 && cc3 == 68 && cc4 == 70 && cc5 == 45)
-		{
-			return true;
-		}
-
-		// image/png
-		if ((cc1 == 137 && cc2 == 80 && cc3 == 78 && cc4 == 71 && cc5 == 13
-				&& cc6 == 10 && cc7 == 26 && cc8 == 10) ||
-			(cc1 == 194 && cc2 == 137 && cc3 == 80 && cc4 == 78 && cc5 == 71 && cc6 == 13 //Our embedded PNG+XML
-				&& cc7 == 10 && cc8 == 26 && cc9 == 10))
-		{
-			return true;
-		}
-
-		// image/jpeg
-		if (cc1 == 0xFF && cc2 == 0xD8 && cc3 == 0xFF)
-		{
-			if (cc4 == 0xE0 || cc4 == 0xEE)
-			{
-				return true;
-			}
-
-			/**
-			 * File format used by digital cameras to store images.
-			 * Exif Format can be read by any application supporting
-			 * JPEG. Exif Spec can be found at:
-			 * http://www.pima.net/standards/it10/PIMA15740/Exif_2-1.PDF
-			 */
-			if ((cc4 == 0xE1) && (c7 == 'E' && c8 == 'x' && c9 == 'i'
-					&& c10 == 'f' && cc11 == 0))
-			{
-				return true;
-			}
-		}
-
-		// vsdx, vssx (also zip, jar, odt, ods, odp, docx, xlsx, pptx, apk, aar)
-		if (cc1 == 0x50 && cc2 == 0x4B && cc3 == 0x03 && cc4 == 0x04)
-		{
-			return true;
-		}
-		else if (cc1 == 0x50 && cc2 == 0x4B && cc3 == 0x03 && cc4 == 0x06)
-		{
-			return true;
-		}
-
-		// mxfile, mxlibrary, mxGraphModel
-		if (c1 == '<' && c2 == 'm' && c3 == 'x')
-		{
-			return true;
-		}
-	}
-
-	return false;
-};
-
-function isConflict(origStat, stat)
-{
-	return stat != null && origStat != null && stat.mtimeMs != origStat.mtimeMs;
-};
-
-function getDraftFileName(fileObject)
-{
-	let filePath = fileObject.path;
-	let draftFileName = '', counter = 1, uniquePart = '';
-
-	do
-	{
-		draftFileName = path.join(path.dirname(filePath), DRAFT_PREFEX + path.basename(filePath) + uniquePart + DRAFT_EXT);
-		uniquePart = '_' + counter++;
-	} while (fs.existsSync(draftFileName));
-
-	return draftFileName;
-};
-
-async function getFileDrafts(fileObject)
-{
-	let filePath = fileObject.path;
-	let draftsPaths = [], drafts = [], draftFileName, counter = 1, uniquePart = '';
-
-	do
-	{
-		draftsPaths.push(draftFileName);
-		draftFileName = path.join(path.dirname(filePath), DRAFT_PREFEX + path.basename(filePath) + uniquePart + DRAFT_EXT);
-		uniquePart = '_' + counter++;
-	} while (fs.existsSync(draftFileName)); //TODO this assume continuous drafts names
-
-	//Port old draft files to new prefex
-	counter = 1;
-	uniquePart = '';
-	let draftExists = false;
-
-	do
-	{
-		draftFileName = path.join(path.dirname(filePath), OLD_DRAFT_PREFEX + path.basename(filePath) + uniquePart + DRAFT_EXT);
-		draftExists = fs.existsSync(draftFileName);
-		
-		if (draftExists)
-		{
-			const newDraftFileName = path.join(path.dirname(filePath), DRAFT_PREFEX + path.basename(filePath) + uniquePart + DRAFT_EXT);
-			await fsProm.rename(draftFileName, newDraftFileName);
-			draftsPaths.push(newDraftFileName);
-		}
-
-		uniquePart = '_' + counter++;
-	} while (draftExists); //TODO this assume continuous drafts names
-
-	//Skip the first null element
-	for (let i = 1; i < draftsPaths.length; i++)
-	{
-		try
-		{
-			let stat = await fsProm.lstat(draftsPaths[i]);
-			drafts.push({data: await fsProm.readFile(draftsPaths[i], 'utf8'), 
-						created: stat.ctimeMs,
-						modified: stat.mtimeMs,
-						path: draftsPaths[i]});
-		}
-		catch (e){} // Ignore
-	}
-
-	return drafts;
-};
-
-async function saveDraft(fileObject, data)
-{
-	var draftFileName = fileObject.draftFileName || getDraftFileName(fileObject);
-
-	if (!checkFileContent(data) || path.resolve(draftFileName).startsWith(__dirname))
-	{
-		throw new Error('Invalid file data');
-	}
-	else
-	{
-		await fsProm.writeFile(draftFileName, data, 'utf8');
-		
-		if (isWin)
-		{
-			try
-			{
-				// Add Hidden attribute:
-				var child = spawn('attrib', ['+h', draftFileName]);
-    			child.on('error', function(err) 
-				{
-					console.log('hiding draft file error: ' + err);
-    			});
-			} catch(e) {}
-		}
-
-		return draftFileName;
-	}
-}
-
-async function saveFile(fileObject, data, origStat, overwrite, defEnc)
-{
-	if (!checkFileContent(data) || path.resolve(fileObject.path).startsWith(__dirname))
-	{
-		throw new Error('Invalid file data');
-	}
-
-	var retryCount = 0;
-	var backupCreated = false;
-	var bkpPath = path.join(path.dirname(fileObject.path), BKP_PREFEX + path.basename(fileObject.path) + BKP_EXT);
-	const oldBkpPath = path.join(path.dirname(fileObject.path), OLD_BKP_PREFEX + path.basename(fileObject.path) + BKP_EXT);
-	var writeEnc = defEnc || fileObject.encoding;
-
-	var writeFile = async function()
-	{
-		let fh;
-
-		try
-		{
-			// O_SYNC is for sync I/O and reduce risk of file corruption
-			fh = await fsProm.open(fileObject.path, O_SYNC | O_CREAT | O_WRONLY | O_TRUNC);
-			await fsProm.writeFile(fh, data, writeEnc);
-		}
-		finally
-		{
-			await fh?.close();
-		}
-
-		let stat2 = await fsProm.stat(fileObject.path);
-		// Workaround for possible writing errors is to check the written
-		// contents of the file and retry 3 times before showing an error
-		let writtenData = await fsProm.readFile(fileObject.path, writeEnc);
-		
-		if (data != writtenData)
-		{
-			retryCount++;
-			
-			if (retryCount < 3)
-			{
-				return await writeFile();
-			}
-			else
-			{
-				throw new Error('all saving trials failed');
-			}
-		}
-		else
-		{
-			//We'll keep the backup file in case the original file is corrupted. TODO When should we delete the backup file?
-			if (backupCreated)
-			{
-				//fs.unlink(bkpPath, (err) => {}); //Ignore errors!
-
-				//Delete old backup file with old prefix
-				if (fs.existsSync(oldBkpPath))
-				{
-					fs.unlink(oldBkpPath, (err) => {}); //Ignore errors
-				}
-			}
-
-			return stat2;
-		}
-	};
-	
-	async function doSaveFile(isNew)
-	{
-		if (enableStoreBkp && !isNew)
-		{
-			//Copy file to backup file (after conflict and stat is checked)
-			let bkpFh;
-
-			try
-			{
-				//Use file read then write to open the backup file direct sync write to reduce the chance of file corruption
-				let fileContent = await fsProm.readFile(fileObject.path, writeEnc);
-				bkpFh = await fsProm.open(bkpPath, O_SYNC | O_CREAT | O_WRONLY | O_TRUNC);
-				await fsProm.writeFile(bkpFh, fileContent, writeEnc);
-				backupCreated = true;
-			}
-			catch (e) 
-			{
-				if (__DEV__)
-				{
-					console.log('Backup file writing failed', e); //Ignore
-				}
-			}
-			finally 
-			{
-				await bkpFh?.close();
-
-				if (isWin)
-				{
-					try
-					{
-						// Add Hidden attribute:
-						var child = spawn('attrib', ['+h', bkpPath]);
-						child.on('error', function(err) 
-						{
-							console.log('hiding backup file error: ' + err);
-						});
-					} catch(e) {}
-				}
-			}
-		}
-
-		return await writeFile();
-	};
-	
-	if (overwrite)
-	{
-		return await doSaveFile(true);
-	}
-	else
-	{
-		let stat = fs.existsSync(fileObject.path)?
-					await fsProm.stat(fileObject.path) : null;
-
-		if (stat && isConflict(origStat, stat))
-		{
-			throw new Error('conflict');
-		}
-		else
-		{
-			return await doSaveFile(stat == null);
-		}
-	}
-};
-
-async function writeFile(filePath, data, enc)
-{
-	if (!checkFileContent(data, enc) || path.resolve(filePath).startsWith(__dirname))
-	{
-		throw new Error('Invalid file data');
-	}
-	else
-	{
-		return await fsProm.writeFile(filePath, data, enc);
-	}
-};
-
-function getAppDataFolder()
-{
-	try
-	{
-		var appDataDir = app.getPath('appData');
-		var drawioDir = appDataDir + '/draw.io';
-		
-		if (!fs.existsSync(drawioDir)) //Usually this dir already exists
-		{
-			fs.mkdirSync(drawioDir);
-		}
-		
-		return drawioDir;
-	}
-	catch(e) {}
-	
-	return '.';
-};
-
-function getDocumentsFolder()
-{
-	//On windows, misconfigured Documents folder cause an exception
-	try
-	{
-		return app.getPath('documents');
-	}
-	catch(e) {}
-	
-	return '.';
-};
-
-function checkFileExists(pathParts)
-{
-	let filePath = path.join(...pathParts);
-	return {exists: fs.existsSync(filePath), path: filePath};
-};
-
-async function showOpenDialog(defaultPath, filters, properties)
-{
-	let win = BrowserWindow.getFocusedWindow();
-
-	return dialog.showOpenDialog(win, {
-		defaultPath: defaultPath,
-		filters: filters,
-		properties: properties
-	});
-};
-
-async function showSaveDialog(defaultPath, filters)
-{
-	let win = BrowserWindow.getFocusedWindow();
-
-	return dialog.showSaveDialog(win, {
-		defaultPath: defaultPath,
-		filters: filters
-	});
-};
-
-async function installPlugin(filePath)
-{
-	if (!enablePlugins) return {};
-
-	var pluginsDir = path.join(getAppDataFolder(), '/plugins');
-	
-	if (!fs.existsSync(pluginsDir))
-	{
-		fs.mkdirSync(pluginsDir);
-	}
-	
-	var pluginName = path.basename(filePath);
-	var dstFile = path.join(pluginsDir, pluginName);
-	
-	if (fs.existsSync(dstFile))
-	{
-		throw new Error('fileExists');
-	}
-	else
-	{
-		await fsProm.copyFile(filePath, dstFile);
-	}
-
-	return {pluginName: pluginName, selDir: path.dirname(filePath)};
-}
-
-function getPluginFile(plugin)
-{
-	if (!enablePlugins) return null;
-	
-	const prefix = path.join(getAppDataFolder(), '/plugins/');
-	const pluginFile = path.join(prefix, plugin);
-	        	
-	if (pluginFile.startsWith(prefix) && fs.existsSync(pluginFile))
-	{
-		return pluginFile;
-	}
-
-	return null;
-}
-
-function uninstallPlugin(plugin)
-{
-	const pluginFile = getPluginFile(plugin);
-	        	
-	if (pluginFile != null)
-	{
-		fs.unlinkSync(pluginFile);
-	}
-}
-
-function dirname(path_p)
-{
-	return path.dirname(path_p);
-}
-
-async function readFile(filename, encoding)
-{
-	let data = await fsProm.readFile(filename, encoding);
-
-	if (checkFileContent(data, encoding) && !path.resolve(filename).startsWith(__dirname))
-	{
-		return data;
-	}
-
-	throw new Error('Invalid file data');
-}
-
-async function fileStat(file)
-{
-	return await fsProm.stat(file);
-}
-
-async function isFileWritable(file)
-{
-	try 
-	{
-		await fsProm.access(file, fs.constants.W_OK);
-		return true;
-	}
-	catch (e)
-	{
-		return false;
-	}
-}
-
-function clipboardAction(method, data)
-{
-	if (method == 'writeText')
-	{
-		clipboard.writeText(data);
-	}
-	else if (method == 'readText')
-	{
-		return clipboard.readText();
-	}
-	else if (method == 'writeImage')
-	{
-		clipboard.write({image: 
-			nativeImage.createFromDataURL(data.dataUrl), html: '<img src="' +
-			data.dataUrl + '" width="' + data.w + '" height="' + data.h + '">'});
-	}
-}
-
-async function deleteFile(file) 
-{
-	// Reading the header of the file to confirm it is a file we can delete
-	let fh = await fsProm.open(file, O_RDONLY);
-	let buffer = Buffer.allocUnsafe(16);
-	await fh.read(buffer, 0, 16);
-	await fh.close();
-
-	if (checkFileContent(buffer) && !path.resolve(file).startsWith(__dirname))
-	{
-		await fsProm.unlink(file);
-	}
-}
-
-function windowAction(method)
-{
-	let win = BrowserWindow.getFocusedWindow();
-
-	if (win)
-	{
-		if (method == 'minimize')
-		{
-			win.minimize();
-		}
-		else if (method == 'maximize')
-		{
-			win.maximize();
-		}
-		else if (method == 'unmaximize')
-		{
-			win.unmaximize();
-		}
-		else if (method == 'close')
-		{
-			win.close();
-		}
-		else if (method == 'isMaximized')
-		{
-			return win.isMaximized();
-		}
-		else if (method == 'removeAllListeners')
-		{
-			win.removeAllListeners();
-		}
-	}
-}
-
-const allowedUrls = /^(?:https?|mailto|tel|callto):/i;
-
-function openExternal(url)
-{
-	//Only open http(s), mailto, tel, and callto links
-	if (allowedUrls.test(url))
-	{
-		shell.openExternal(url);
-		return true;
-	}
-
-	return false;
-}
-
-function watchFile(filePath)
-{
-	let win = BrowserWindow.getFocusedWindow();
-
-	if (win)
-	{
-		fs.watchFile(filePath, (curr, prev) => {
-			try
-			{
-				win.webContents.send('fileChanged', {
-					path: filePath,
-					curr: curr,
-					prev: prev
-				});
-			}
-			catch (e) {} // Ignore
-		});
-	}
-}
-
-function unwatchFile(filePath)
-{
-	fs.unwatchFile(filePath);
-}
-
-ipcMain.on("rendererReq", async (event, args) => 
-{
-	if (!validateSender(event.senderFrame)) return null;
-
-	try
-	{
-		let ret = null;
-
-		switch(args.action)
-		{
-		case 'saveFile':
-			ret = await saveFile(args.fileObject, args.data, args.origStat, args.overwrite, args.defEnc);
-			break;
-		case 'writeFile':
-			ret = await writeFile(args.path, args.data, args.enc);
-			break;
-		case 'saveDraft':
-			ret = await saveDraft(args.fileObject, args.data);
-			break;
-		case 'getFileDrafts':
-			ret = await getFileDrafts(args.fileObject);
-			break;
-		case 'getDocumentsFolder':
-			ret = await getDocumentsFolder();
-			break;
-		case 'checkFileExists':
-			ret = await checkFileExists(args.pathParts);
-			break;
-		case 'showOpenDialog':
-			dialogOpen = true;
-			ret = await showOpenDialog(args.defaultPath, args.filters, args.properties);
-			ret = ret.filePaths;
-			dialogOpen = false;
-			break;
-		case 'showSaveDialog':
-			dialogOpen = true;
-			ret = await showSaveDialog(args.defaultPath, args.filters);
-			ret = ret.canceled? null : ret.filePath;
-			dialogOpen = false;
-			break;
-		case 'installPlugin':
-			ret = await installPlugin(args.filePath);
-			break;
-		case 'uninstallPlugin':
-			ret = await uninstallPlugin(args.plugin);
-			break;
-		case 'getPluginFile':
-			ret = await getPluginFile(args.plugin);
-			break;
-		case 'isPluginsEnabled':
-			ret = enablePlugins;
-			break;
-		case 'dirname':
-			ret = await dirname(args.path);
-			break;
-		case 'readFile':
-			ret = await readFile(args.filename, args.encoding);
-			break;
-		case 'clipboardAction':
-			ret = await clipboardAction(args.method, args.data);
-			break;
-		case 'deleteFile':
-			ret = await deleteFile(args.file);
-			break;
-		case 'fileStat':
-			ret = await fileStat(args.file);
-			break;
-		case 'isFileWritable':
-			ret = await isFileWritable(args.file);
-			break;
-		case 'windowAction':
-			ret = await windowAction(args.method);
-			break;
-		case 'openExternal':
-			ret = await openExternal(args.url);
-			break;
-		case 'watchFile':
-			ret = await watchFile(args.path);
-			break;
-		case 'unwatchFile':	
-			ret = await unwatchFile(args.path);
-			break;
-		};
-
-		event.reply('mainResp', {success: true, data: ret, reqId: args.reqId});
-	}
-	catch (e)
-	{
-		event.reply('mainResp', {error: true, msg: e.message, e: e, reqId: args.reqId});
-	}
-});
\ No newline at end of file

programming_language: unknown
filename: index.html
change_type: ModificationType.MODIFY
diff: @@ -73,7 +73,8 @@
 		}
 		
 		// Global variable for desktop
-		var mxIsElectron = navigator.userAgent != null && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1;
+		var mxIsElectron = navigator.userAgent != null && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1 && 
+							navigator.userAgent.indexOf(' draw.io/') > -1;
 
 		// Redirects page if required
 		if (urlParams['dev'] != '1')

programming_language: JavaScript
filename: app.min.js
change_type: ModificationType.MODIFY
diff: @@ -146,7 +146,7 @@ if("1"==urlParams.offline||"1"==urlParams.demo||"1"==urlParams.stealth||"1"==url
 "se.diagrams.net"==window.location.hostname&&(urlParams.db="0",urlParams.od="0",urlParams.gh="0",urlParams.gl="0",urlParams.tr="0",urlParams.plugins="0",urlParams.mode="google",urlParams.lockdown="1",window.DRAWIO_GOOGLE_APP_ID=window.DRAWIO_GOOGLE_APP_ID||"184079235871",window.DRAWIO_GOOGLE_CLIENT_ID=window.DRAWIO_GOOGLE_CLIENT_ID||"184079235871-pjf5nn0lff27lk8qf0770gmffiv9gt61.apps.googleusercontent.com");"trello"==urlParams.mode&&(urlParams.tr="1");
 "embed.diagrams.net"==window.location.hostname&&(urlParams.embed="1");(null==window.location.hash||1>=window.location.hash.length)&&null!=urlParams.open&&(window.location.hash=urlParams.open);window.urlParams=window.urlParams||{};window.DOM_PURIFY_CONFIG=window.DOM_PURIFY_CONFIG||{ADD_TAGS:["use"],FORBID_TAGS:["form"],ALLOWED_URI_REGEXP:/^((?!javascript:).)*$/i,ADD_ATTR:["target","content"]};window.MAX_REQUEST_SIZE=window.MAX_REQUEST_SIZE||10485760;window.MAX_AREA=window.MAX_AREA||225E6;window.EXPORT_URL=window.EXPORT_URL||"/export";window.SAVE_URL=window.SAVE_URL||"/save";window.OPEN_URL=window.OPEN_URL||"/open";window.RESOURCES_PATH=window.RESOURCES_PATH||"resources";
 window.RESOURCE_BASE=window.RESOURCE_BASE||window.RESOURCES_PATH+"/grapheditor";window.STENCIL_PATH=window.STENCIL_PATH||"stencils";window.IMAGE_PATH=window.IMAGE_PATH||"images";window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"mxgraph";window.mxImageBasePath=window.mxImageBasePath||"mxgraph/images";window.mxLanguage=window.mxLanguage||urlParams.lang;
-window.mxLanguages=window.mxLanguages||["de","se"];var mxClient={VERSION:"21.4.1",IS_IE:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("MSIE"),IS_IE11:null!=navigator.userAgent&&!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:null!=navigator.userAgent&&!!navigator.userAgent.match(/Edge\//),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&0>navigator.userAgent.indexOf("Edge/"),
+window.mxLanguages=window.mxLanguages||["de","se"];var mxClient={VERSION:"21.5.0",IS_IE:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("MSIE"),IS_IE11:null!=navigator.userAgent&&!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:null!=navigator.userAgent&&!!navigator.userAgent.match(/Edge\//),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&0>navigator.userAgent.indexOf("Edge/"),
 IS_OP:null!=navigator.userAgent&&(0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/")),IS_OT:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:/Apple Computer, Inc/.test(navigator.vendor),
 IS_ANDROID:0<=navigator.appVersion.indexOf("Android"),IS_IOS:/iP(hone|od|ad)/.test(navigator.platform)||navigator.userAgent.match(/Mac/)&&navigator.maxTouchPoints&&2<navigator.maxTouchPoints,IS_WEBVIEW:/((iPhone|iPod|iPad).*AppleWebKit(?!.*Version)|; wv)/i.test(navigator.userAgent),IS_GC:/Google Inc/.test(navigator.vendor),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:-1<navigator.userAgent.toLowerCase().indexOf("firefox"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&
 0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:"MICROSOFT INTERNET EXPLORER"!=navigator.appName.toUpperCase(),NO_FO:!document.createElementNS||
@@ -11736,7 +11736,7 @@ if(this.page!=this.ui.currentPage){if(null!=this.page.viewState){this.ignoreColo
 arguments),null!=this.mathEnabled&&this.mathEnabled!=this.ui.isMathEnabled()&&(this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible)};Editor.prototype.useCanvasForExport=!1;try{var D=document.createElement("canvas"),M=new Image;M.onload=function(){try{D.getContext("2d").drawImage(M,0,0);var m=D.toDataURL("image/png");
 Editor.prototype.useCanvasForExport=null!=m&&6<m.length}catch(y){}};M.src="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1px" height="1px" version="1.1"><foreignObject pointer-events="all" width="1" height="1"><div xmlns="http://www.w3.org/1999/xhtml"></div></foreignObject></svg>')))}catch(m){}Editor.prototype.useCanvasForExport=!1})();
 (function(){var b=new mxObjectCodec(new ChangePageSetup,["ui","previousColor","previousImage","previousFormat"]);b.beforeDecode=function(e,f,c){c.ui=e.ui;return f};b.afterDecode=function(e,f,c){c.previousColor=c.color;c.previousImage=c.image;c.previousFormat=c.format;null!=c.foldingEnabled&&(c.foldingEnabled=!c.foldingEnabled);null!=c.mathEnabled&&(c.mathEnabled=!c.mathEnabled);null!=c.shadowVisible&&(c.shadowVisible=!c.shadowVisible);return c};mxCodecRegistry.register(b)})();
-(function(){var b=new mxObjectCodec(new ChangeGridColor,["ui"]);b.beforeDecode=function(e,f,c){c.ui=e.ui;return f};mxCodecRegistry.register(b)})();(function(){EditorUi.VERSION="21.4.1";EditorUi.compactUi="atlas"!=Editor.currentTheme;Editor.isDarkMode()&&(mxGraphView.prototype.gridColor=mxGraphView.prototype.defaultDarkGridColor);EditorUi.enableLogging="1"!=urlParams.stealth&&"1"!=urlParams.lockdown&&(/.*\.draw\.io$/.test(window.location.hostname)||/.*\.diagrams\.net$/.test(window.location.hostname))&&"support.draw.io"!=window.location.hostname;EditorUi.drawHost=window.DRAWIO_BASE_URL;EditorUi.lightboxHost=window.DRAWIO_LIGHTBOX_URL;
+(function(){var b=new mxObjectCodec(new ChangeGridColor,["ui"]);b.beforeDecode=function(e,f,c){c.ui=e.ui;return f};mxCodecRegistry.register(b)})();(function(){EditorUi.VERSION="21.5.0";EditorUi.compactUi="atlas"!=Editor.currentTheme;Editor.isDarkMode()&&(mxGraphView.prototype.gridColor=mxGraphView.prototype.defaultDarkGridColor);EditorUi.enableLogging="1"!=urlParams.stealth&&"1"!=urlParams.lockdown&&(/.*\.draw\.io$/.test(window.location.hostname)||/.*\.diagrams\.net$/.test(window.location.hostname))&&"support.draw.io"!=window.location.hostname;EditorUi.drawHost=window.DRAWIO_BASE_URL;EditorUi.lightboxHost=window.DRAWIO_LIGHTBOX_URL;
 EditorUi.lastErrorMessage=null;EditorUi.ignoredAnonymizedChars="\n\t`~!@#$%^&*()_+{}|:\"<>?-=[];'./,\n\t";EditorUi.templateFile=TEMPLATE_PATH+"/index.xml";EditorUi.cacheUrl=window.REALTIME_URL;null==EditorUi.cacheUrl&&"undefined"!==typeof DrawioFile&&(DrawioFile.SYNC="none");Editor.cacheTimeout=1E4;EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.nativeFileSupport=
 !mxClient.IS_OP&&!EditorUi.isElectronApp&&"1"!=urlParams.extAuth&&"showSaveFilePicker"in window&&"showOpenFilePicker"in window;EditorUi.enableDrafts=!mxClient.IS_CHROMEAPP&&isLocalStorage&&"0"!=urlParams.drafts;EditorUi.scratchpadHelpLink="https://www.drawio.com/doc/faq/scratchpad";EditorUi.enableHtmlEditOption=!0;EditorUi.mermaidDiagramTypes="flowchart classDiagram sequenceDiagram stateDiagram mindmap graph erDiagram requirementDiagram journey gantt pie gitGraph".split(" ");EditorUi.defaultMermaidConfig=
 {theme:"neutral",arrowMarkerAbsolute:!1,flowchart:{htmlLabels:!1},sequence:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:4,axisFormat:"%Y-%m-%d"}};EditorUi.logError=
@@ -12763,8 +12763,8 @@ c.constructor==DriveFile&&null!=c.desc&&null!=this.drive&&(k.label+=(null!=this.
 0,this.initializeEmbedMode())}),5E3)}this.load()};App.ERROR_TIMEOUT="timeout";App.ERROR_BUSY="busy";App.ERROR_UNKNOWN="unknown";App.MODE_GOOGLE="google";App.MODE_DROPBOX="dropbox";App.MODE_ONEDRIVE="onedrive";App.MODE_GITHUB="github";App.MODE_GITLAB="gitlab";App.MODE_DEVICE="device";App.MODE_BROWSER="browser";App.MODE_TRELLO="trello";App.MODE_EMBED="embed";App.MODE_ATLAS="atlas";App.DROPBOX_APPKEY=window.DRAWIO_DROPBOX_ID;App.DROPBOX_URL=window.DRAWIO_BASE_URL+"/js/dropbox/Dropbox-sdk.min.js";
 App.DROPINS_URL="https://www.dropbox.com/static/api/2/dropins.js";App.ONEDRIVE_URL=mxClient.IS_IE11?"https://js.live.net/v7.2/OneDrive.js":window.DRAWIO_BASE_URL+"/js/onedrive/OneDrive.js";App.TRELLO_URL="https://api.trello.com/1/client.js";App.TRELLO_JQUERY_URL=window.DRAWIO_BASE_URL+"/js/jquery/jquery-3.6.0.min.js";App.PUSHER_KEY="1e756b07a690c5bdb054";App.PUSHER_CLUSTER="eu";App.PUSHER_URL="https://js.pusher.com/7.0.3/pusher.min.js";App.SIMPLE_PEER_URL=window.DRAWIO_BASE_URL+"/js/simplepeer/simplepeer9.10.0.min.js";
 App.GOOGLE_APIS="drive-share";App.startTime=new Date;
-App.pluginRegistry={"4xAKTrabTpTzahoLthkwPNUn":"plugins/explore.js",ex:"plugins/explore.js",ac:"plugins/connect.js",acj:"plugins/connectJira.js",ac148:"plugins/cConf-1-4-8.js",ac148cmnt:"plugins/cConf-comments.js",nxtcld:"plugins/nextcloud.js",monday:"plugins/monday.js",voice:"plugins/voice.js",tips:"plugins/tooltips.js",svgdata:"plugins/svgdata.js",electron:"plugins/electron.js",number:"plugins/number.js",sql:"plugins/sql.js",props:"plugins/props.js",text:"plugins/text.js",anim:"plugins/animation.js",
-update:"plugins/update.js",trees:"plugins/trees/trees.js","import":"plugins/import.js",replay:"plugins/replay.js",anon:"plugins/anonymize.js",tr:"plugins/trello.js",f5:"plugins/rackF5.js",tickets:"plugins/tickets.js",flow:"plugins/flow.js",webcola:"plugins/webcola/webcola.js",rnd:"plugins/random.js",page:"plugins/page.js",gd:"plugins/googledrive.js",tags:"plugins/tags.js"};App.publicPlugin="ex voice tips svgdata number sql props text anim update trees replay anon tickets flow webcola tags".split(" ");
+App.pluginRegistry={"4xAKTrabTpTzahoLthkwPNUn":"plugins/explore.js",ex:"plugins/explore.js",ac:"plugins/connect.js",acj:"plugins/connectJira.js",ac148:"plugins/cConf-1-4-8.js",ac148cmnt:"plugins/cConf-comments.js",nxtcld:"plugins/nextcloud.js",monday:"plugins/monday.js",voice:"plugins/voice.js",tips:"plugins/tooltips.js",svgdata:"plugins/svgdata.js",number:"plugins/number.js",sql:"plugins/sql.js",props:"plugins/props.js",text:"plugins/text.js",anim:"plugins/animation.js",update:"plugins/update.js",
+trees:"plugins/trees/trees.js","import":"plugins/import.js",replay:"plugins/replay.js",anon:"plugins/anonymize.js",tr:"plugins/trello.js",f5:"plugins/rackF5.js",tickets:"plugins/tickets.js",flow:"plugins/flow.js",webcola:"plugins/webcola/webcola.js",rnd:"plugins/random.js",page:"plugins/page.js",gd:"plugins/googledrive.js",tags:"plugins/tags.js"};App.publicPlugin="ex voice tips svgdata number sql props text anim update trees replay anon tickets flow webcola tags".split(" ");
 App.loadScripts=function(b,e,f){for(var c=b.length,k=!1,l=0;l<b.length;l++)mxscript(b[l],function(){0!=--c||k||null==e||e()},null,null,null,function(v){k=!0;null!=f&&f(Error(v))})};
 App.getStoredMode=function(){var b=null;null==b&&isLocalStorage&&(b=localStorage.getItem(".mode"));if(null==b&&"undefined"!=typeof Storage){for(var e=document.cookie.split(";"),f=0;f<e.length;f++){var c=mxUtils.trim(e[f]);if("MODE="==c.substring(0,5)){b=c.substring(5);break}}null!=b&&isLocalStorage&&(e=new Date,e.setYear(e.getFullYear()-1),document.cookie="MODE=; expires="+e.toUTCString(),localStorage.setItem(".mode",b))}return b};
 (function(){mxClient.IS_CHROMEAPP||("1"!=urlParams.offline&&("db.draw.io"==window.location.hostname&&null==urlParams.mode&&(urlParams.mode="dropbox"),App.mode=urlParams.mode),null==App.mode&&(App.mode=App.getStoredMode()),null!=window.mxscript&&"1"!=urlParams.embed&&("function"===typeof window.DriveClient&&("0"!=urlParams.gapi&&isSvgBrowser&&(null==document.documentMode||10<=document.documentMode)?App.mode==App.MODE_GOOGLE||null!=urlParams.state&&""==window.location.hash||null!=window.location.hash&&

programming_language: JavaScript
filename: App.js
change_type: ModificationType.MODIFY
diff: @@ -325,7 +325,6 @@ App.pluginRegistry = {'4xAKTrabTpTzahoLthkwPNUn': 'plugins/explore.js',
 	'monday': 'plugins/monday.js',
 	'voice': 'plugins/voice.js',
 	'tips': 'plugins/tooltips.js', 'svgdata': 'plugins/svgdata.js',
-	'electron': 'plugins/electron.js',
 	'number': 'plugins/number.js', 'sql': 'plugins/sql.js',
 	'props': 'plugins/props.js', 'text': 'plugins/text.js',
 	'anim': 'plugins/animation.js', 'update': 'plugins/update.js',
@@ -715,7 +714,7 @@ App.main = function(callback, createUi)
 				{
 					var content = mxUtils.getTextContent(scripts[0]);
 					
-					if (CryptoJS.MD5(content).toString() != '54e964166a638e485d475fdae66aa95d')
+					if (CryptoJS.MD5(content).toString() != '3428184eed5811f9c1458f703cb2806b')
 					{
 						console.log('Change bootstrap script MD5 in the previous line:', CryptoJS.MD5(content).toString());
 						alert('[Dev] Bootstrap script change requires update of CSP');

programming_language: JavaScript
filename: Devel.js
change_type: ModificationType.MODIFY
diff: @@ -17,8 +17,10 @@ if (!mxIsElectron && location.protocol !== 'http:')
 			//----------------------------------------------------------//
 			//------------- Bootstrap script in index.html -------------//
 			//----------------------------------------------------------//
+			// Version 21.5.0
+			'\'sha256-6zAB96lsBZREqf0sT44BhH1T69sm7HrN34rpMOcWbNo=\' ' +
 			// Version 21.4.1
-			'\'sha256-6g514VrT/cZFZltSaKxIVNFF46+MFaTSDTPB8WfYK+c=\' ' +
+			'\'sha256-3SkDBaLE+ouvAOfTmG2TGwmQ2EE9AT0F2YcHvZmEMeo=\' ' +
 			// Version 20.8.14
 			'\'sha256-vrEVJkYyBW9H4tt1lYZtK5fDowIeRwUgYZfFTT36YpE=\' ' +
 			// Version 20.8.12
@@ -82,7 +84,7 @@ if (!mxIsElectron && location.protocol !== 'http:')
 		if (urlParams['print-csp'] == '1')
 		{
 			console.log('Content-Security-Policy');
-			var app_diagrams_net = csp.replace(/%script-src%/g, 'https://www.dropbox.com https://api.trello.com https://cdn.jsdelivr.net/npm/monday-sdk-js/dist/main.js').
+			var app_diagrams_net = csp.replace(/%script-src%/g, 'https://www.dropbox.com https://api.trello.com').
 				replace(/%connect-src%/g, 'https://*.dropboxapi.com https://api.trello.com').
 				replace(/%frame-src%/g, '').
 					replace(/%style-src%/g, '').
@@ -100,6 +102,9 @@ if (!mxIsElectron && location.protocol !== 'http:')
 				'worker-src https://viewer.diagrams.net/service-worker.js;'
 			console.log('viewer.diagrams.net:', viewer_diagrams_net);
 
+			var teams_diagrams_net = app_diagrams_net.replace(/ 'sha256-[^']+'/g, '') + 'worker-src https://app.diagrams.net/service-worker.js;';
+			console.log('teams.diagrams.net:', teams_diagrams_net);
+
 			var ac_draw_io = csp.replace(/%script-src%/g, 'https://aui-cdn.atlassian.com https://connect-cdn.atl-paas.net').
 					replace(/%frame-src%/g, 'https://www.lucidchart.com https://app.lucidchart.com https://lucid.app blob:').
 					replace(/%style-src%/g, 'https://aui-cdn.atlassian.com https://*.atlassian.net').
@@ -119,29 +124,6 @@ if (!mxIsElectron && location.protocol !== 'http:')
 			console.log('import.diagrams.net:', 'default-src \'self\'; worker-src blob:; img-src \'self\' blob: data: https://www.lucidchart.com ' +
 					'https://app.lucidchart.com https://lucid.app; style-src \'self\' \'unsafe-inline\'; frame-src https://www.lucidchart.com https://app.lucidchart.com https://lucid.app;');
 			console.log('Development:', devCsp);
-			
-			console.log('Header Worker:', 'let securityHeaders =', JSON.stringify({
-				online: {
-					"Content-Security-Policy" : app_diagrams_net,
-					"Permissions-Policy" : "microphone=()"
-				},
-				viewer: {
-					"Content-Security-Policy" : viewer_diagrams_net,
-					"Permissions-Policy" : "microphone=()",
-				},
-				teams: {
-					"Content-Security-Policy" : app_diagrams_net.replace(/ 'sha256-[^']+'/g, '') + 'worker-src https://app.diagrams.net/service-worker.js;',
-					"Permissions-Policy" : "microphone=()"
-				},
-				jira: {
-					"Content-Security-Policy" : aj_draw_io,
-					"Permissions-Policy" : "microphone=()"
-				},
-				conf: {
-					"Content-Security-Policy" : ac_draw_io,
-					"Permissions-Policy" : "microphone=()"
-				}
-			}, null, 4));
 
 			console.log('Remember to add index.html new hashes to Desktop app (electron.js). In desktop, only newest hashes are needed.');
 		}

programming_language: JavaScript
filename: export.js
change_type: ModificationType.MODIFY
diff: @@ -1,8 +1,34 @@
 var mxIsElectron = navigator.userAgent != null &&
-	navigator.userAgent.toLowerCase().indexOf(' electron/') > -1;
+	navigator.userAgent.toLowerCase().indexOf(' electron/') > -1 && 
+	navigator.userAgent.indexOf(' draw.io/') > -1;
 var GOOGLE_APPS_MAX_AREA = 25000000;
 var GOOGLE_SHEET_MAX_AREA = 1048576; //1024x1024
 
+/**
+ * Adds meta tag to the page.
+ */
+function mxmeta(content, httpEquiv)
+{
+	try
+	{
+		var s = document.createElement('meta');
+		
+		s.setAttribute('content', content);
+		s.setAttribute('http-equiv', httpEquiv);
+
+		var t = document.getElementsByTagName('meta')[0];
+		t.parentNode.insertBefore(s, t);
+	}
+	catch (e)
+	{
+		// ignore
+	}
+};
+
+if (mxIsElectron)
+{
+	mxmeta('default-src \'self\'; script-src \'self\'; connect-src \'self\' https://*.draw.io https://*.diagrams.net https://fonts.googleapis.com https://fonts.gstatic.com; img-src * data:; media-src *; font-src *; frame-src \'none\'; style-src \'self\' \'unsafe-inline\' https://fonts.googleapis.com; base-uri \'none\';child-src \'self\';object-src \'none\';', 'Content-Security-Policy');
+}
 //TODO Add support for loading math from a local folder
 Editor.initMath((remoteMath? 'https://app.diagrams.net/' : '') + 'math/es5/startup.js');
 

programming_language: JavaScript
filename: integrate.min.js
change_type: ModificationType.MODIFY
diff: @@ -146,7 +146,7 @@ if("1"==urlParams.offline||"1"==urlParams.demo||"1"==urlParams.stealth||"1"==url
 "se.diagrams.net"==window.location.hostname&&(urlParams.db="0",urlParams.od="0",urlParams.gh="0",urlParams.gl="0",urlParams.tr="0",urlParams.plugins="0",urlParams.mode="google",urlParams.lockdown="1",window.DRAWIO_GOOGLE_APP_ID=window.DRAWIO_GOOGLE_APP_ID||"184079235871",window.DRAWIO_GOOGLE_CLIENT_ID=window.DRAWIO_GOOGLE_CLIENT_ID||"184079235871-pjf5nn0lff27lk8qf0770gmffiv9gt61.apps.googleusercontent.com");"trello"==urlParams.mode&&(urlParams.tr="1");
 "embed.diagrams.net"==window.location.hostname&&(urlParams.embed="1");(null==window.location.hash||1>=window.location.hash.length)&&null!=urlParams.open&&(window.location.hash=urlParams.open);window.urlParams=window.urlParams||{};window.DOM_PURIFY_CONFIG=window.DOM_PURIFY_CONFIG||{ADD_TAGS:["use"],FORBID_TAGS:["form"],ALLOWED_URI_REGEXP:/^((?!javascript:).)*$/i,ADD_ATTR:["target","content"]};window.MAX_REQUEST_SIZE=window.MAX_REQUEST_SIZE||10485760;window.MAX_AREA=window.MAX_AREA||225E6;window.EXPORT_URL=window.EXPORT_URL||"/export";window.SAVE_URL=window.SAVE_URL||"/save";window.OPEN_URL=window.OPEN_URL||"/open";window.RESOURCES_PATH=window.RESOURCES_PATH||"resources";
 window.RESOURCE_BASE=window.RESOURCE_BASE||window.RESOURCES_PATH+"/grapheditor";window.STENCIL_PATH=window.STENCIL_PATH||"stencils";window.IMAGE_PATH=window.IMAGE_PATH||"images";window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"mxgraph";window.mxImageBasePath=window.mxImageBasePath||"mxgraph/images";window.mxLanguage=window.mxLanguage||urlParams.lang;
-window.mxLanguages=window.mxLanguages||["de","se"];var mxClient={VERSION:"21.4.1",IS_IE:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("MSIE"),IS_IE11:null!=navigator.userAgent&&!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:null!=navigator.userAgent&&!!navigator.userAgent.match(/Edge\//),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&0>navigator.userAgent.indexOf("Edge/"),
+window.mxLanguages=window.mxLanguages||["de","se"];var mxClient={VERSION:"21.5.0",IS_IE:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("MSIE"),IS_IE11:null!=navigator.userAgent&&!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:null!=navigator.userAgent&&!!navigator.userAgent.match(/Edge\//),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&0>navigator.userAgent.indexOf("Edge/"),
 IS_OP:null!=navigator.userAgent&&(0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/")),IS_OT:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:/Apple Computer, Inc/.test(navigator.vendor),
 IS_ANDROID:0<=navigator.appVersion.indexOf("Android"),IS_IOS:/iP(hone|od|ad)/.test(navigator.platform)||navigator.userAgent.match(/Mac/)&&navigator.maxTouchPoints&&2<navigator.maxTouchPoints,IS_WEBVIEW:/((iPhone|iPod|iPad).*AppleWebKit(?!.*Version)|; wv)/i.test(navigator.userAgent),IS_GC:/Google Inc/.test(navigator.vendor),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:-1<navigator.userAgent.toLowerCase().indexOf("firefox"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&
 0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:"MICROSOFT INTERNET EXPLORER"!=navigator.appName.toUpperCase(),NO_FO:!document.createElementNS||
@@ -11736,7 +11736,7 @@ if(this.page!=this.ui.currentPage){if(null!=this.page.viewState){this.ignoreColo
 arguments),null!=this.mathEnabled&&this.mathEnabled!=this.ui.isMathEnabled()&&(this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible)};Editor.prototype.useCanvasForExport=!1;try{var z=document.createElement("canvas"),I=new Image;I.onload=function(){try{z.getContext("2d").drawImage(I,0,0);var g=z.toDataURL("image/png");
 Editor.prototype.useCanvasForExport=null!=g&&6<g.length}catch(x){}};I.src="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1px" height="1px" version="1.1"><foreignObject pointer-events="all" width="1" height="1"><div xmlns="http://www.w3.org/1999/xhtml"></div></foreignObject></svg>')))}catch(g){}Editor.prototype.useCanvasForExport=!1})();
 (function(){var b=new mxObjectCodec(new ChangePageSetup,["ui","previousColor","previousImage","previousFormat"]);b.beforeDecode=function(f,l,d){d.ui=f.ui;return l};b.afterDecode=function(f,l,d){d.previousColor=d.color;d.previousImage=d.image;d.previousFormat=d.format;null!=d.foldingEnabled&&(d.foldingEnabled=!d.foldingEnabled);null!=d.mathEnabled&&(d.mathEnabled=!d.mathEnabled);null!=d.shadowVisible&&(d.shadowVisible=!d.shadowVisible);return d};mxCodecRegistry.register(b)})();
-(function(){var b=new mxObjectCodec(new ChangeGridColor,["ui"]);b.beforeDecode=function(f,l,d){d.ui=f.ui;return l};mxCodecRegistry.register(b)})();(function(){EditorUi.VERSION="21.4.1";EditorUi.compactUi="atlas"!=Editor.currentTheme;Editor.isDarkMode()&&(mxGraphView.prototype.gridColor=mxGraphView.prototype.defaultDarkGridColor);EditorUi.enableLogging="1"!=urlParams.stealth&&"1"!=urlParams.lockdown&&(/.*\.draw\.io$/.test(window.location.hostname)||/.*\.diagrams\.net$/.test(window.location.hostname))&&"support.draw.io"!=window.location.hostname;EditorUi.drawHost=window.DRAWIO_BASE_URL;EditorUi.lightboxHost=window.DRAWIO_LIGHTBOX_URL;
+(function(){var b=new mxObjectCodec(new ChangeGridColor,["ui"]);b.beforeDecode=function(f,l,d){d.ui=f.ui;return l};mxCodecRegistry.register(b)})();(function(){EditorUi.VERSION="21.5.0";EditorUi.compactUi="atlas"!=Editor.currentTheme;Editor.isDarkMode()&&(mxGraphView.prototype.gridColor=mxGraphView.prototype.defaultDarkGridColor);EditorUi.enableLogging="1"!=urlParams.stealth&&"1"!=urlParams.lockdown&&(/.*\.draw\.io$/.test(window.location.hostname)||/.*\.diagrams\.net$/.test(window.location.hostname))&&"support.draw.io"!=window.location.hostname;EditorUi.drawHost=window.DRAWIO_BASE_URL;EditorUi.lightboxHost=window.DRAWIO_LIGHTBOX_URL;
 EditorUi.lastErrorMessage=null;EditorUi.ignoredAnonymizedChars="\n\t`~!@#$%^&*()_+{}|:\"<>?-=[];'./,\n\t";EditorUi.templateFile=TEMPLATE_PATH+"/index.xml";EditorUi.cacheUrl=window.REALTIME_URL;null==EditorUi.cacheUrl&&"undefined"!==typeof DrawioFile&&(DrawioFile.SYNC="none");Editor.cacheTimeout=1E4;EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.nativeFileSupport=
 !mxClient.IS_OP&&!EditorUi.isElectronApp&&"1"!=urlParams.extAuth&&"showSaveFilePicker"in window&&"showOpenFilePicker"in window;EditorUi.enableDrafts=!mxClient.IS_CHROMEAPP&&isLocalStorage&&"0"!=urlParams.drafts;EditorUi.scratchpadHelpLink="https://www.drawio.com/doc/faq/scratchpad";EditorUi.enableHtmlEditOption=!0;EditorUi.mermaidDiagramTypes="flowchart classDiagram sequenceDiagram stateDiagram mindmap graph erDiagram requirementDiagram journey gantt pie gitGraph".split(" ");EditorUi.defaultMermaidConfig=
 {theme:"neutral",arrowMarkerAbsolute:!1,flowchart:{htmlLabels:!1},sequence:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:4,axisFormat:"%Y-%m-%d"}};EditorUi.logError=
@@ -12445,8 +12445,8 @@ d.constructor==DriveFile&&null!=d.desc&&null!=this.drive&&(t.label+=(null!=this.
 0,this.initializeEmbedMode())}),5E3)}this.load()};App.ERROR_TIMEOUT="timeout";App.ERROR_BUSY="busy";App.ERROR_UNKNOWN="unknown";App.MODE_GOOGLE="google";App.MODE_DROPBOX="dropbox";App.MODE_ONEDRIVE="onedrive";App.MODE_GITHUB="github";App.MODE_GITLAB="gitlab";App.MODE_DEVICE="device";App.MODE_BROWSER="browser";App.MODE_TRELLO="trello";App.MODE_EMBED="embed";App.MODE_ATLAS="atlas";App.DROPBOX_APPKEY=window.DRAWIO_DROPBOX_ID;App.DROPBOX_URL=window.DRAWIO_BASE_URL+"/js/dropbox/Dropbox-sdk.min.js";
 App.DROPINS_URL="https://www.dropbox.com/static/api/2/dropins.js";App.ONEDRIVE_URL=mxClient.IS_IE11?"https://js.live.net/v7.2/OneDrive.js":window.DRAWIO_BASE_URL+"/js/onedrive/OneDrive.js";App.TRELLO_URL="https://api.trello.com/1/client.js";App.TRELLO_JQUERY_URL=window.DRAWIO_BASE_URL+"/js/jquery/jquery-3.6.0.min.js";App.PUSHER_KEY="1e756b07a690c5bdb054";App.PUSHER_CLUSTER="eu";App.PUSHER_URL="https://js.pusher.com/7.0.3/pusher.min.js";App.SIMPLE_PEER_URL=window.DRAWIO_BASE_URL+"/js/simplepeer/simplepeer9.10.0.min.js";
 App.GOOGLE_APIS="drive-share";App.startTime=new Date;
-App.pluginRegistry={"4xAKTrabTpTzahoLthkwPNUn":"plugins/explore.js",ex:"plugins/explore.js",ac:"plugins/connect.js",acj:"plugins/connectJira.js",ac148:"plugins/cConf-1-4-8.js",ac148cmnt:"plugins/cConf-comments.js",nxtcld:"plugins/nextcloud.js",monday:"plugins/monday.js",voice:"plugins/voice.js",tips:"plugins/tooltips.js",svgdata:"plugins/svgdata.js",electron:"plugins/electron.js",number:"plugins/number.js",sql:"plugins/sql.js",props:"plugins/props.js",text:"plugins/text.js",anim:"plugins/animation.js",
-update:"plugins/update.js",trees:"plugins/trees/trees.js","import":"plugins/import.js",replay:"plugins/replay.js",anon:"plugins/anonymize.js",tr:"plugins/trello.js",f5:"plugins/rackF5.js",tickets:"plugins/tickets.js",flow:"plugins/flow.js",webcola:"plugins/webcola/webcola.js",rnd:"plugins/random.js",page:"plugins/page.js",gd:"plugins/googledrive.js",tags:"plugins/tags.js"};App.publicPlugin="ex voice tips svgdata number sql props text anim update trees replay anon tickets flow webcola tags".split(" ");
+App.pluginRegistry={"4xAKTrabTpTzahoLthkwPNUn":"plugins/explore.js",ex:"plugins/explore.js",ac:"plugins/connect.js",acj:"plugins/connectJira.js",ac148:"plugins/cConf-1-4-8.js",ac148cmnt:"plugins/cConf-comments.js",nxtcld:"plugins/nextcloud.js",monday:"plugins/monday.js",voice:"plugins/voice.js",tips:"plugins/tooltips.js",svgdata:"plugins/svgdata.js",number:"plugins/number.js",sql:"plugins/sql.js",props:"plugins/props.js",text:"plugins/text.js",anim:"plugins/animation.js",update:"plugins/update.js",
+trees:"plugins/trees/trees.js","import":"plugins/import.js",replay:"plugins/replay.js",anon:"plugins/anonymize.js",tr:"plugins/trello.js",f5:"plugins/rackF5.js",tickets:"plugins/tickets.js",flow:"plugins/flow.js",webcola:"plugins/webcola/webcola.js",rnd:"plugins/random.js",page:"plugins/page.js",gd:"plugins/googledrive.js",tags:"plugins/tags.js"};App.publicPlugin="ex voice tips svgdata number sql props text anim update trees replay anon tickets flow webcola tags".split(" ");
 App.loadScripts=function(b,f,l){for(var d=b.length,t=!1,u=0;u<b.length;u++)mxscript(b[u],function(){0!=--d||t||null==f||f()},null,null,null,function(A){t=!0;null!=l&&l(Error(A))})};
 App.getStoredMode=function(){var b=null;null==b&&isLocalStorage&&(b=localStorage.getItem(".mode"));if(null==b&&"undefined"!=typeof Storage){for(var f=document.cookie.split(";"),l=0;l<f.length;l++){var d=mxUtils.trim(f[l]);if("MODE="==d.substring(0,5)){b=d.substring(5);break}}null!=b&&isLocalStorage&&(f=new Date,f.setYear(f.getFullYear()-1),document.cookie="MODE=; expires="+f.toUTCString(),localStorage.setItem(".mode",b))}return b};
 (function(){mxClient.IS_CHROMEAPP||("1"!=urlParams.offline&&("db.draw.io"==window.location.hostname&&null==urlParams.mode&&(urlParams.mode="dropbox"),App.mode=urlParams.mode),null==App.mode&&(App.mode=App.getStoredMode()),null!=window.mxscript&&"1"!=urlParams.embed&&("function"===typeof window.DriveClient&&("0"!=urlParams.gapi&&isSvgBrowser&&(null==document.documentMode||10<=document.documentMode)?App.mode==App.MODE_GOOGLE||null!=urlParams.state&&""==window.location.hash||null!=window.location.hash&&

programming_language: JavaScript
filename: viewer-static.min.js
change_type: ModificationType.MODIFY
diff: @@ -112,7 +112,7 @@ if("1"==urlParams.offline||"1"==urlParams.demo||"1"==urlParams.stealth||"1"==url
 "se.diagrams.net"==window.location.hostname&&(urlParams.db="0",urlParams.od="0",urlParams.gh="0",urlParams.gl="0",urlParams.tr="0",urlParams.plugins="0",urlParams.mode="google",urlParams.lockdown="1",window.DRAWIO_GOOGLE_APP_ID=window.DRAWIO_GOOGLE_APP_ID||"184079235871",window.DRAWIO_GOOGLE_CLIENT_ID=window.DRAWIO_GOOGLE_CLIENT_ID||"184079235871-pjf5nn0lff27lk8qf0770gmffiv9gt61.apps.googleusercontent.com");"trello"==urlParams.mode&&(urlParams.tr="1");
 "embed.diagrams.net"==window.location.hostname&&(urlParams.embed="1");(null==window.location.hash||1>=window.location.hash.length)&&null!=urlParams.open&&(window.location.hash=urlParams.open);window.urlParams=window.urlParams||{};window.DOM_PURIFY_CONFIG=window.DOM_PURIFY_CONFIG||{ADD_TAGS:["use"],FORBID_TAGS:["form"],ALLOWED_URI_REGEXP:/^((?!javascript:).)*$/i,ADD_ATTR:["target","content"]};window.MAX_REQUEST_SIZE=window.MAX_REQUEST_SIZE||10485760;window.MAX_AREA=window.MAX_AREA||225E6;window.EXPORT_URL=window.EXPORT_URL||"/export";window.SAVE_URL=window.SAVE_URL||"/save";window.OPEN_URL=window.OPEN_URL||"/open";window.RESOURCES_PATH=window.RESOURCES_PATH||"resources";
 window.RESOURCE_BASE=window.RESOURCE_BASE||window.RESOURCES_PATH+"/grapheditor";window.STENCIL_PATH=window.STENCIL_PATH||"stencils";window.IMAGE_PATH=window.IMAGE_PATH||"images";window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"mxgraph";window.mxImageBasePath=window.mxImageBasePath||"mxgraph/images";window.mxLanguage=window.mxLanguage||urlParams.lang;
-window.mxLanguages=window.mxLanguages||["de","se"];var mxClient={VERSION:"21.4.1",IS_IE:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("MSIE"),IS_IE11:null!=navigator.userAgent&&!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:null!=navigator.userAgent&&!!navigator.userAgent.match(/Edge\//),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&0>navigator.userAgent.indexOf("Edge/"),
+window.mxLanguages=window.mxLanguages||["de","se"];var mxClient={VERSION:"21.5.0",IS_IE:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("MSIE"),IS_IE11:null!=navigator.userAgent&&!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:null!=navigator.userAgent&&!!navigator.userAgent.match(/Edge\//),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&0>navigator.userAgent.indexOf("Edge/"),
 IS_OP:null!=navigator.userAgent&&(0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/")),IS_OT:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:/Apple Computer, Inc/.test(navigator.vendor),
 IS_ANDROID:0<=navigator.appVersion.indexOf("Android"),IS_IOS:/iP(hone|od|ad)/.test(navigator.platform)||navigator.userAgent.match(/Mac/)&&navigator.maxTouchPoints&&2<navigator.maxTouchPoints,IS_WEBVIEW:/((iPhone|iPod|iPad).*AppleWebKit(?!.*Version)|; wv)/i.test(navigator.userAgent),IS_GC:/Google Inc/.test(navigator.vendor),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:-1<navigator.userAgent.toLowerCase().indexOf("firefox"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&
 0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:"MICROSOFT INTERNET EXPLORER"!=navigator.appName.toUpperCase(),NO_FO:!document.createElementNS||
@@ -3471,7 +3471,7 @@ X(!1)}),za.className="geBtn",z.appendChild(za));za=mxUtils.button(mxResources.ge
 (this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible)};Editor.prototype.useCanvasForExport=!1;try{var P=document.createElement("canvas"),U=new Image;U.onload=function(){try{P.getContext("2d").drawImage(U,0,0);var k=P.toDataURL("image/png");Editor.prototype.useCanvasForExport=null!=k&&6<k.length}catch(z){}};
 U.src="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1px" height="1px" version="1.1"><foreignObject pointer-events="all" width="1" height="1"><div xmlns="http://www.w3.org/1999/xhtml"></div></foreignObject></svg>')))}catch(k){}Editor.prototype.useCanvasForExport=!1})();
 (function(){var b=new mxObjectCodec(new ChangePageSetup,["ui","previousColor","previousImage","previousFormat"]);b.beforeDecode=function(e,g,p){p.ui=e.ui;return g};b.afterDecode=function(e,g,p){p.previousColor=p.color;p.previousImage=p.image;p.previousFormat=p.format;null!=p.foldingEnabled&&(p.foldingEnabled=!p.foldingEnabled);null!=p.mathEnabled&&(p.mathEnabled=!p.mathEnabled);null!=p.shadowVisible&&(p.shadowVisible=!p.shadowVisible);return p};mxCodecRegistry.register(b)})();
-(function(){var b=new mxObjectCodec(new ChangeGridColor,["ui"]);b.beforeDecode=function(e,g,p){p.ui=e.ui;return g};mxCodecRegistry.register(b)})();(function(){EditorUi.VERSION="21.4.1";EditorUi.compactUi="atlas"!=Editor.currentTheme;Editor.isDarkMode()&&(mxGraphView.prototype.gridColor=mxGraphView.prototype.defaultDarkGridColor);EditorUi.enableLogging="1"!=urlParams.stealth&&"1"!=urlParams.lockdown&&(/.*\.draw\.io$/.test(window.location.hostname)||/.*\.diagrams\.net$/.test(window.location.hostname))&&"support.draw.io"!=window.location.hostname;EditorUi.drawHost=window.DRAWIO_BASE_URL;EditorUi.lightboxHost=window.DRAWIO_LIGHTBOX_URL;
+(function(){var b=new mxObjectCodec(new ChangeGridColor,["ui"]);b.beforeDecode=function(e,g,p){p.ui=e.ui;return g};mxCodecRegistry.register(b)})();(function(){EditorUi.VERSION="21.5.0";EditorUi.compactUi="atlas"!=Editor.currentTheme;Editor.isDarkMode()&&(mxGraphView.prototype.gridColor=mxGraphView.prototype.defaultDarkGridColor);EditorUi.enableLogging="1"!=urlParams.stealth&&"1"!=urlParams.lockdown&&(/.*\.draw\.io$/.test(window.location.hostname)||/.*\.diagrams\.net$/.test(window.location.hostname))&&"support.draw.io"!=window.location.hostname;EditorUi.drawHost=window.DRAWIO_BASE_URL;EditorUi.lightboxHost=window.DRAWIO_LIGHTBOX_URL;
 EditorUi.lastErrorMessage=null;EditorUi.ignoredAnonymizedChars="\n\t`~!@#$%^&*()_+{}|:\"<>?-=[];'./,\n\t";EditorUi.templateFile=TEMPLATE_PATH+"/index.xml";EditorUi.cacheUrl=window.REALTIME_URL;null==EditorUi.cacheUrl&&"undefined"!==typeof DrawioFile&&(DrawioFile.SYNC="none");Editor.cacheTimeout=1E4;EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.nativeFileSupport=
 !mxClient.IS_OP&&!EditorUi.isElectronApp&&"1"!=urlParams.extAuth&&"showSaveFilePicker"in window&&"showOpenFilePicker"in window;EditorUi.enableDrafts=!mxClient.IS_CHROMEAPP&&isLocalStorage&&"0"!=urlParams.drafts;EditorUi.scratchpadHelpLink="https://www.drawio.com/doc/faq/scratchpad";EditorUi.enableHtmlEditOption=!0;EditorUi.mermaidDiagramTypes="flowchart classDiagram sequenceDiagram stateDiagram mindmap graph erDiagram requirementDiagram journey gantt pie gitGraph".split(" ");EditorUi.defaultMermaidConfig=
 {theme:"neutral",arrowMarkerAbsolute:!1,flowchart:{htmlLabels:!1},sequence:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:4,axisFormat:"%Y-%m-%d"}};EditorUi.logError=

programming_language: JavaScript
filename: viewer.min.js
change_type: ModificationType.MODIFY
diff: @@ -112,7 +112,7 @@ if("1"==urlParams.offline||"1"==urlParams.demo||"1"==urlParams.stealth||"1"==url
 "se.diagrams.net"==window.location.hostname&&(urlParams.db="0",urlParams.od="0",urlParams.gh="0",urlParams.gl="0",urlParams.tr="0",urlParams.plugins="0",urlParams.mode="google",urlParams.lockdown="1",window.DRAWIO_GOOGLE_APP_ID=window.DRAWIO_GOOGLE_APP_ID||"184079235871",window.DRAWIO_GOOGLE_CLIENT_ID=window.DRAWIO_GOOGLE_CLIENT_ID||"184079235871-pjf5nn0lff27lk8qf0770gmffiv9gt61.apps.googleusercontent.com");"trello"==urlParams.mode&&(urlParams.tr="1");
 "embed.diagrams.net"==window.location.hostname&&(urlParams.embed="1");(null==window.location.hash||1>=window.location.hash.length)&&null!=urlParams.open&&(window.location.hash=urlParams.open);window.urlParams=window.urlParams||{};window.DOM_PURIFY_CONFIG=window.DOM_PURIFY_CONFIG||{ADD_TAGS:["use"],FORBID_TAGS:["form"],ALLOWED_URI_REGEXP:/^((?!javascript:).)*$/i,ADD_ATTR:["target","content"]};window.MAX_REQUEST_SIZE=window.MAX_REQUEST_SIZE||10485760;window.MAX_AREA=window.MAX_AREA||225E6;window.EXPORT_URL=window.EXPORT_URL||"/export";window.SAVE_URL=window.SAVE_URL||"/save";window.OPEN_URL=window.OPEN_URL||"/open";window.RESOURCES_PATH=window.RESOURCES_PATH||"resources";
 window.RESOURCE_BASE=window.RESOURCE_BASE||window.RESOURCES_PATH+"/grapheditor";window.STENCIL_PATH=window.STENCIL_PATH||"stencils";window.IMAGE_PATH=window.IMAGE_PATH||"images";window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"mxgraph";window.mxImageBasePath=window.mxImageBasePath||"mxgraph/images";window.mxLanguage=window.mxLanguage||urlParams.lang;
-window.mxLanguages=window.mxLanguages||["de","se"];var mxClient={VERSION:"21.4.1",IS_IE:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("MSIE"),IS_IE11:null!=navigator.userAgent&&!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:null!=navigator.userAgent&&!!navigator.userAgent.match(/Edge\//),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&0>navigator.userAgent.indexOf("Edge/"),
+window.mxLanguages=window.mxLanguages||["de","se"];var mxClient={VERSION:"21.5.0",IS_IE:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("MSIE"),IS_IE11:null!=navigator.userAgent&&!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:null!=navigator.userAgent&&!!navigator.userAgent.match(/Edge\//),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&0>navigator.userAgent.indexOf("Edge/"),
 IS_OP:null!=navigator.userAgent&&(0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/")),IS_OT:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:/Apple Computer, Inc/.test(navigator.vendor),
 IS_ANDROID:0<=navigator.appVersion.indexOf("Android"),IS_IOS:/iP(hone|od|ad)/.test(navigator.platform)||navigator.userAgent.match(/Mac/)&&navigator.maxTouchPoints&&2<navigator.maxTouchPoints,IS_WEBVIEW:/((iPhone|iPod|iPad).*AppleWebKit(?!.*Version)|; wv)/i.test(navigator.userAgent),IS_GC:/Google Inc/.test(navigator.vendor),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:-1<navigator.userAgent.toLowerCase().indexOf("firefox"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&
 0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:"MICROSOFT INTERNET EXPLORER"!=navigator.appName.toUpperCase(),NO_FO:!document.createElementNS||
@@ -3471,7 +3471,7 @@ X(!1)}),za.className="geBtn",z.appendChild(za));za=mxUtils.button(mxResources.ge
 (this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible)};Editor.prototype.useCanvasForExport=!1;try{var P=document.createElement("canvas"),U=new Image;U.onload=function(){try{P.getContext("2d").drawImage(U,0,0);var k=P.toDataURL("image/png");Editor.prototype.useCanvasForExport=null!=k&&6<k.length}catch(z){}};
 U.src="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1px" height="1px" version="1.1"><foreignObject pointer-events="all" width="1" height="1"><div xmlns="http://www.w3.org/1999/xhtml"></div></foreignObject></svg>')))}catch(k){}Editor.prototype.useCanvasForExport=!1})();
 (function(){var b=new mxObjectCodec(new ChangePageSetup,["ui","previousColor","previousImage","previousFormat"]);b.beforeDecode=function(e,g,p){p.ui=e.ui;return g};b.afterDecode=function(e,g,p){p.previousColor=p.color;p.previousImage=p.image;p.previousFormat=p.format;null!=p.foldingEnabled&&(p.foldingEnabled=!p.foldingEnabled);null!=p.mathEnabled&&(p.mathEnabled=!p.mathEnabled);null!=p.shadowVisible&&(p.shadowVisible=!p.shadowVisible);return p};mxCodecRegistry.register(b)})();
-(function(){var b=new mxObjectCodec(new ChangeGridColor,["ui"]);b.beforeDecode=function(e,g,p){p.ui=e.ui;return g};mxCodecRegistry.register(b)})();(function(){EditorUi.VERSION="21.4.1";EditorUi.compactUi="atlas"!=Editor.currentTheme;Editor.isDarkMode()&&(mxGraphView.prototype.gridColor=mxGraphView.prototype.defaultDarkGridColor);EditorUi.enableLogging="1"!=urlParams.stealth&&"1"!=urlParams.lockdown&&(/.*\.draw\.io$/.test(window.location.hostname)||/.*\.diagrams\.net$/.test(window.location.hostname))&&"support.draw.io"!=window.location.hostname;EditorUi.drawHost=window.DRAWIO_BASE_URL;EditorUi.lightboxHost=window.DRAWIO_LIGHTBOX_URL;
+(function(){var b=new mxObjectCodec(new ChangeGridColor,["ui"]);b.beforeDecode=function(e,g,p){p.ui=e.ui;return g};mxCodecRegistry.register(b)})();(function(){EditorUi.VERSION="21.5.0";EditorUi.compactUi="atlas"!=Editor.currentTheme;Editor.isDarkMode()&&(mxGraphView.prototype.gridColor=mxGraphView.prototype.defaultDarkGridColor);EditorUi.enableLogging="1"!=urlParams.stealth&&"1"!=urlParams.lockdown&&(/.*\.draw\.io$/.test(window.location.hostname)||/.*\.diagrams\.net$/.test(window.location.hostname))&&"support.draw.io"!=window.location.hostname;EditorUi.drawHost=window.DRAWIO_BASE_URL;EditorUi.lightboxHost=window.DRAWIO_LIGHTBOX_URL;
 EditorUi.lastErrorMessage=null;EditorUi.ignoredAnonymizedChars="\n\t`~!@#$%^&*()_+{}|:\"<>?-=[];'./,\n\t";EditorUi.templateFile=TEMPLATE_PATH+"/index.xml";EditorUi.cacheUrl=window.REALTIME_URL;null==EditorUi.cacheUrl&&"undefined"!==typeof DrawioFile&&(DrawioFile.SYNC="none");Editor.cacheTimeout=1E4;EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.nativeFileSupport=
 !mxClient.IS_OP&&!EditorUi.isElectronApp&&"1"!=urlParams.extAuth&&"showSaveFilePicker"in window&&"showOpenFilePicker"in window;EditorUi.enableDrafts=!mxClient.IS_CHROMEAPP&&isLocalStorage&&"0"!=urlParams.drafts;EditorUi.scratchpadHelpLink="https://www.drawio.com/doc/faq/scratchpad";EditorUi.enableHtmlEditOption=!0;EditorUi.mermaidDiagramTypes="flowchart classDiagram sequenceDiagram stateDiagram mindmap graph erDiagram requirementDiagram journey gantt pie gitGraph".split(" ");EditorUi.defaultMermaidConfig=
 {theme:"neutral",arrowMarkerAbsolute:!1,flowchart:{htmlLabels:!1},sequence:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:4,axisFormat:"%Y-%m-%d"}};EditorUi.logError=

programming_language: JavaScript
filename: vsdxImporter.js
change_type: ModificationType.ADD
diff: @@ -0,0 +1,81 @@
+var mxIsElectron = navigator.userAgent != null &&
+	navigator.userAgent.toLowerCase().indexOf(' electron/') > -1 && 
+	navigator.userAgent.indexOf(' draw.io/') > -1;
+/**
+ * Adds meta tag to the page.
+ */
+function mxmeta(content, httpEquiv)
+{
+	try
+	{
+		var s = document.createElement('meta');
+		
+		s.setAttribute('content', content);
+		s.setAttribute('http-equiv', httpEquiv);
+
+		var t = document.getElementsByTagName('meta')[0];
+		t.parentNode.insertBefore(s, t);
+	}
+	catch (e)
+	{
+		// ignore
+	}
+};
+
+function doImport(vsdxBuff, callback, error, file, customParam)
+{
+	EditorUi.prototype.createUi = function(){};
+	EditorUi.prototype.addTrees = function(){};
+	EditorUi.prototype.updateActionStates = function(){};
+	var editorUi = new EditorUi();
+	var blob = file? file : new Blob([vsdxBuff], {type: 'application/octet-stream'});
+
+	editorUi.importVisio(blob, callback, error, file? file.name : null, customParam);		
+};
+
+
+if (mxIsElectron)
+{
+	mxmeta('default-src \'self\'; script-src \'self\'; connect-src \'self\' https://*.draw.io https://*.diagrams.net https://fonts.googleapis.com https://fonts.gstatic.com; img-src * data:; media-src *; font-src *; frame-src \'none\'; style-src \'self\' \'unsafe-inline\' https://fonts.googleapis.com; base-uri \'none\';child-src \'self\';object-src \'none\';', 'Content-Security-Policy');
+
+	electron.registerMsgListener('import', (vsdxBuff) => 
+	{
+		doImport(vsdxBuff, function(xml)
+		{
+			electron.sendMessage('import-success', xml);
+		},
+		function()
+		{
+			electron.sendMessage('import-error');
+		});
+	});
+}
+
+window.addEventListener('load', function()
+{
+	document.getElementById('fileUpload').addEventListener('change', function()
+	{
+		const curFiles = this.files;
+
+		if(curFiles.length > 0) 
+		{
+			function createDoneDiv(msg)
+			{
+				var doneDiv = document.createElement('div');
+				doneDiv.id = 'doneDiv';
+				doneDiv.innerHTML = msg;
+				document.body.appendChild(doneDiv);
+			};
+			
+			doImport(null, function(xml)
+			{
+				window.importResXML = xml;
+				createDoneDiv('success');
+			}, function(err)
+			{
+				console.log(err)
+				createDoneDiv('error');
+			}, curFiles[0], window.customParam);
+		}
+	});
+});
\ No newline at end of file

programming_language: JavaScript
filename: mxClient.js
change_type: ModificationType.MODIFY
diff: @@ -1,4 +1,4 @@
-var mxClient={VERSION:"21.4.1",IS_IE:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("MSIE"),IS_IE11:null!=navigator.userAgent&&!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:null!=navigator.userAgent&&!!navigator.userAgent.match(/Edge\//),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&0>navigator.userAgent.indexOf("Edge/"),
+var mxClient={VERSION:"21.5.0",IS_IE:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("MSIE"),IS_IE11:null!=navigator.userAgent&&!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:null!=navigator.userAgent&&!!navigator.userAgent.match(/Edge\//),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&0>navigator.userAgent.indexOf("Edge/"),
 IS_OP:null!=navigator.userAgent&&(0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/")),IS_OT:null!=navigator.userAgent&&0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:/Apple Computer, Inc/.test(navigator.vendor),
 IS_ANDROID:0<=navigator.appVersion.indexOf("Android"),IS_IOS:/iP(hone|od|ad)/.test(navigator.platform)||navigator.userAgent.match(/Mac/)&&navigator.maxTouchPoints&&2<navigator.maxTouchPoints,IS_WEBVIEW:/((iPhone|iPod|iPad).*AppleWebKit(?!.*Version)|; wv)/i.test(navigator.userAgent),IS_GC:/Google Inc/.test(navigator.vendor),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:-1<navigator.userAgent.toLowerCase().indexOf("firefox"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&
 0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:"MICROSOFT INTERNET EXPLORER"!=navigator.appName.toUpperCase(),NO_FO:!document.createElementNS||

programming_language: JavaScript
filename: dia_ca.txt
change_type: ModificationType.MODIFY
diff: @@ -609,7 +609,7 @@ posterPrint=Imprimeix cartell
 preferences=Preferències
 preview=Vista prèvia
 previousPage=Pàgina anterior
-presentationMode=Presentation Mode
+presentationMode=Mode de presentació
 print=Imprimeix
 printAllPages=Imprimeix totes les pàgines
 procEng=Enginyeria de processos
@@ -781,7 +781,7 @@ turn=Gira 90°
 type=Escriu
 twitter=Twitter
 uml=UML
-unassigned=Unassigned
+unassigned=No assignat
 underline=Subratlla
 undo=Desfés
 ungroup=Desagrupa
@@ -1257,9 +1257,9 @@ errSetPageRestr=S'ha produït un error en establir les restriccions de la pàgin
 notAdmin4Team=No ets administrador d'aquest equip
 configUpdated=Configuració actualitzada, reinicieu l'editor si voleu treballar amb la darrera configuració.
 outOfDateRevisionAlert=Esteu editant una revisió històrica del diagrama, comproveu la revisió i obriu-la per substituir la darrera versió. O tanca i sobreescriu/fusiona més tard.
-confAErrFaqs=There are {1} error(s), the following instructions may help fixing most of the cases. (Please download the log for future references)
-confA403ErrFaq=There are ({1}) 403 error(s). The current users must have add (write) permissions on all pages and attachments. Even admins sometimes are not allowed to write to some pages via page restrictions
-confA404ErrFaq=There are ({1}) 404 error(s). The attachment/page is not found. This is due to improper migration or the diagram file (an attachment of the page) is deleted.
-confA500ErrFaq=There are ({1}) 500 error(s). An internal server error in Confluence Cloud. Such errors are due to overloading the server and usually fixed by retrying the process.
-confAOtherErrFaq=There are ({1}) other error(s). Please check the error description. If the description is not clear, please contact our support.
-confAReplaceBaseUrl=Replace Base URL in diagram links when no page ID mapping is found
+confAErrFaqs=Hi ha {1} error(s), les instruccions següents poden ajudar a solucionar la majoria dels casos. (Descarregueu el registre per a futures referències)
+confA403ErrFaq=Hi ha ({1}) error(s) 403. Els usuaris actuals han de tenir permisos per afegir (escriptura) a totes les pàgines i fitxers adjunts. Fins i tot els administradors de vegades no poden escriure en algunes pàgines mitjançant restriccions de pàgina
+confA404ErrFaq=Hi ha ({1}) error(s) 404. No s'ha trobat l'adjunt/pàgina. Això es deu a una migració incorrecta o s'ha suprimit el fitxer del diagrama (un fitxer adjunt de la pàgina).
+confA500ErrFaq=Hi ha ({1}) error(s) 500. Un error intern del servidor a Confluence Cloud. Aquests errors es deuen a la sobrecàrrega del servidor i normalment es solucionen tornant a intentar el procés.
+confAOtherErrFaq=Hi ha ({1}) altre(s) error(s). Comproveu la descripció de l'error. Si la descripció no és clara, poseu-vos en contacte amb el nostre servei d'assistència.
+confAReplaceBaseUrl=Substituïu l'URL base als enllaços del diagrama quan no es trobi cap assignació d'ID de pàgina

programming_language: Python
filename: dia_id.txt
change_type: ModificationType.MODIFY
diff: @@ -327,9 +327,9 @@ fitToBy=dan
 fitToSheetsDown=lembar menurun
 fitTwoPages=Dua Halaman
 fitWindow=Paskan Jendela
-flip=Putar
-flipH=Putar Horizontal
-flipV=Putar Vertikal
+flip=Jungkirkan
+flipH=Jungkir Horizontal
+flipV=Jungkir Vertikal
 flowchart=Diagram Alir
 folder=Folder
 font=Fonta
@@ -504,9 +504,9 @@ modifiedBy=Diubah oleh
 more=Lainnya
 moreResults=Hasil Lainnya
 moreShapes=Bentuk Lainnya
-move=Pindahkan
+move=Pindah
 moveToFolder=Pindahkan ke Folder
-moving=Pemindahan
+moving=Memindah
 moveSelectionTo=Pindahkan pilihan ke {1}
 myDrive=Drive-ku
 myFiles=Berkasku
@@ -529,7 +529,7 @@ none=Tidak ada
 noOtherViewers=Tidak ada pengunjung lain
 noPlugins=Tidak ada plugin
 noPreview=Tidak ada pratinjau
-noResponse=TIdak ada respons dari server
+noResponse=TIdak ada respon dari server
 noResultsFor=Tidak ada hasil untuk '{1}'
 noRevisions=Tidak ada revisi
 noSearchResults=Tidak ada hasil pencarian yang ditemukan
@@ -579,7 +579,7 @@ pageWithNumber=Halaman-{1}
 pages=Halaman
 pageTabs=Tab Halaman
 pageView=Tampilan Halaman
-pageSetup=Pengaturan Halaman
+pageSetup=Penyiapan Halaman
 pageScale=Skala Halaman
 pan=Pan
 panTooltip=Spasi+Seret untuk memperlebar
@@ -640,10 +640,10 @@ removeFormat=Hapus Format
 removeFromGroup=Hapus dari Grup
 removeIt=Hapus {1}
 removeWaypoint=Hapus Waypoint
-rename=Namai Ulang
-renamed=Dinamai Ulang
-renameIt=Namai Ulang {1}
-renaming=Menamai ulang
+rename=Ubah Nama
+renamed=Diubah Nama
+renameIt=Ubah Nama {1}
+renaming=Mengubah Nama
 replace=Mengganti
 replaceIt={1} telah ada. Anda ingin menggantinya?
 replaceExistingDrawing=Ganti gambar yang ada
@@ -731,7 +731,7 @@ solid=Padat
 sourceSpacing=Spasi Sumber
 south=Selatan
 software=Perangkat Lunak
-space=Spasi
+space=Ruang
 spacing=Jarak Spasi
 specialLink=Tautan Khusus
 stateDiagram=Diagram Keadaan
@@ -1040,150 +1040,150 @@ confAUpdateDgrmCCFailed=Memutakhirkan tautan ke diagram "{1}" gagal.
 confImpDiagramSuccess=Memutakhirkan diagram "{1}" sukses dilakukan.
 confANoLnksInDrgm=Tidak ada tautan untuk diperbarui di: {1}
 confAUpdateLnkToPg=Memperbarui tautan ke halaman: "{1}" dalam diagram: "{2}"
-confAUpdateLBLnkToPg=Updated lightbox link to page: "{1}" in diagram: "{2}"
-confAUpdateLnkBase=Updated base URL from: "{1}" to: "{2}" in diagram: "{3}"
+confAUpdateLBLnkToPg=Memperbarui tautan lightbox ke halaman: "{1}" dalam diagram: "{2}"
+confAUpdateLnkBase=Memperbarui URL dasar dari: "{1}" menjadi: "{2}" dalam diagram: "{3}"
 confAPageIdsImpDone=Impor ID Halaman selesai
 confAPrcsMacrosInPage=Memroses makro draw.io dalam halaman "{1}"
 confAErrFetchPage=Galat saat mengambil halaman "{1}"
-confAFixingMacro=Fixing macro of diagram "{1}"
-confAErrReadingExpFile=Error reading export file
-confAPrcsDiagInPageDone=Processing draw.io diagrams in page "{1}" finished
-confAFixingMacroSkipped=Fixing macro of diagram "{1}" failed. Cannot find its new page ID. Maybe it points to a page that is not imported.
-pageIdsExpTrg=Export target
-confALucidDiagImgImported={2} diagram "{1}" image extracted successfully
-confASavingLucidDiagImgFailed=Extracting {2} diagram "{1}" image failed
-confGetInfoFailed=Fetching file info from {1} failed.
-confCheckCacheFailed=Cannot get cached file info.
-confReadFileErr=Cannot read "{1}" file from {2}.
-confSaveCacheFailed=Unexpected error. Cannot save cached file
-orgChartType=Org Chart Type
-linear=Linear
-hanger2=Hanger 2
-hanger4=Hanger 4
-fishbone1=Fishbone 1
-fishbone2=Fishbone 2
-1ColumnLeft=Single Column Left
-1ColumnRight=Single Column Right
-smart=Smart
-parentChildSpacing=Parent Child Spacing
-siblingSpacing=Sibling Spacing
-confNoPermErr=Sorry, you don't have enough permissions to view this embedded diagram from page {1}
-copyAsImage=Copy as Image
-lucidImport=Lucidchart Import
-lucidImportInst1=Click the "Start Import" button to import all Lucidchart diagrams.
-installFirst=Please install {1} first
-drawioChromeExt=draw.io Chrome Extension
-loginFirstThen=Please login to {1} first, then {2}
-errFetchDocList=Error: Couldn't fetch documents list
-builtinPlugins=Built-in Plugins
-extPlugins=External Plugins
-backupFound=Backup file found
-chromeOnly=This feature only works in Google Chrome
-msgDeleted=This message has been deleted
-confAErrFetchDrawList=Error fetching diagrams list. Some diagrams are skipped.
-confAErrCheckDrawDiag=Cannot check diagram {1}
-confAErrFetchPageList=Error fetching pages list
-confADiagImportIncom={1} diagram "{2}" is imported partially and may have missing shapes
-invalidSel=Invalid selection
-diagNameEmptyErr=Diagram name cannot be empty
-openDiagram=Open Diagram
-newDiagram=New diagram
-editable=Editable
-confAReimportStarted=Re-import {1} diagrams started...
-spaceFilter=Filter by spaces
-curViewState=Current Viewer State
-pageLayers=Page and Layers
-customize=Customize
-firstPage=First Page (All Layers)
-curEditorState=Current Editor State
-noAnchorsFound=No anchors found
-attachment=Attachment
-curDiagram=Current Diagram
-recentDiags=Recent Diagrams
-csvImport=CSV Import
-chooseFile=Choose a file...
-choose=Choose
-gdriveFname=Google Drive filename
-widthOfViewer=Width of the viewer (px)
-heightOfViewer=Height of the viewer (px)
-autoSetViewerSize=Automatically set the size of the viewer
-thumbnail=Thumbnail
-prevInDraw=Preview in draw.io
-onedriveFname=OneDrive filename
-diagFname=Diagram filename
-diagUrl=Diagram URL
-showDiag=Show Diagram
-diagPreview=Diagram Preview
-csvFileUrl=CSV File URL
-generate=Generate
-selectDiag2Insert=Please select a diagram to insert it.
-errShowingDiag=Unexpected error. Cannot show diagram
-noRecentDiags=No recent diagrams found
-fetchingRecentFailed=Failed to fetch recent diagrams
-useSrch2FindDiags=Use the search box to find draw.io diagrams
-cantReadChckPerms=Cannot read the specified diagram. Please check you have read permission on that file.
-cantFetchChckPerms=Cannot fetch diagram info. Please check you have read permission on that file.
-searchFailed=Searching failed. Please try again later.
-plsTypeStr=Please type a search string.
-unsupportedFileChckUrl=Unsupported file. Please check the specified URL
-diagNotFoundChckUrl=Diagram not found or cannot be accessed. Please check the specified URL
-csvNotFoundChckUrl=CSV file not found or cannot be accessed. Please check the specified URL
-cantReadUpload=Cannot read the uploaded diagram
-select=Select
-errCantGetIdType=Unexpected Error: Cannot get content id or type.
-errGAuthWinBlocked=Error: Google Authentication window blocked
-authDrawAccess=Authorize draw.io to access {1}
-connTimeout=The connection has timed out
-errAuthSrvc=Error authenticating to {1}
-plsSelectFile=Please select a file
-mustBgtZ={1} must be greater than zero
-cantLoadPrev=Cannot load file preview.
-errAccessFile=Error: Access Denied. You do not have permission to access "{1}".
-noPrevAvail=No preview is available.
-personalAccNotSup=Personal accounts are not supported.
-errSavingTryLater=Error occurred during saving, please try again later.
-plsEnterFld=Please enter {1}
-invalidDiagUrl=Invalid Diagram URL
-unsupportedVsdx=Unsupported vsdx file
-unsupportedImg=Unsupported image file
-unsupportedFormat=Unsupported file format
-plsSelectSingleFile=Please select a single file only
-attCorrupt=Attachment file "{1}" is corrupted
-loadAttFailed=Failed to load attachment "{1}"
-embedDrawDiag=Embed draw.io Diagram
-addDiagram=Add Diagram
-embedDiagram=Embed Diagram
-editOwningPg=Edit owning page
-deepIndexing=Deep Indexing (Index diagrams that aren't used in any page also)
-confADeepIndexStarted=Deep Indexing Started
-confADeepIndexDone=Deep Indexing Done
-officeNoDiagramsSelected=No diagrams found in the selection
-officeNoDiagramsInDoc=No diagrams found in the document
-officeNotSupported=This feature is not supported in this host application
-someImagesFailed={1} out of {2} failed due to the following errors
-importingNoUsedDiagrams=Importing {1} Diagrams not used in pages
-importingDrafts=Importing {1} Diagrams in drafts
-processingDrafts=Processing drafts
-updatingDrafts=Updating drafts
-updateDrafts=Update drafts
-notifications=Notifications
-drawioImp=draw.io Import
-confALibsImp=Importing draw.io Libraries
-confALibsImpFailed=Importing {1} library failed
+confAFixingMacro=Memperbaiki makro dari diagram "{1}"
+confAErrReadingExpFile=Galat saat membaca berkas ekspor
+confAPrcsDiagInPageDone=Pemrosesan diagram draw.io dalam halaman "{1}" selesai
+confAFixingMacroSkipped=Memperbaiki makro dari diagram "{1}" gagal. Tidak bisa menemukan ID halaman barunya. Mungkin itu menunjuk ke suatu halaman yang tidak diimpor.
+pageIdsExpTrg=Target ekspor
+confALucidDiagImgImported=Gambar "{1}" diagram {2} sukses diekstrak
+confASavingLucidDiagImgFailed=Ekstraksi gambar "{1}" diagram {2} gagal
+confGetInfoFailed=Mengambil info berkas dari {1} gagal.
+confCheckCacheFailed=Tidak bisa mendapat info berkas tersinggah.
+confReadFileErr=Tidak bisa membaca berkas "{1}" dari {2}.
+confSaveCacheFailed=Galat yang tidak diharapkan. Tidak bisa menyimpan berkas yang tersinggah
+orgChartType=Tipe Bagan Organisasi
+linear=Linier
+hanger2=Gantungan baju 2
+hanger4=Gantungan baju 4
+fishbone1=Tulang ikan 1
+fishbone2=Tulang Ikan 2
+1ColumnLeft=Kolom Tunggal Kiri
+1ColumnRight=Kolom Tunggal Kanan
+smart=Cerdas
+parentChildSpacing=Jarak Antara Induk Anak
+siblingSpacing=Jarak Antara Sejajar
+confNoPermErr=Maaf, Anda tidak punya cukup izin untuk melihat diagram tertanam dari halaman {1} ini
+copyAsImage=Salin sebagai gambar
+lucidImport=Impor Lucidchart
+lucidImportInst1=Klik tombol "Mulai Impor" untuk mengimpor semua diagram Lucidchart.
+installFirst=Harap pasang {1} terlebih dahulu
+drawioChromeExt=Ekstensi Chrome draw.io
+loginFirstThen=Harap log masuk ke {1} terlebih dahulu, lalu {2}
+errFetchDocList=Galat: Tak bisa mengambil daftar dokumen
+builtinPlugins=Pengaya Bawaan
+extPlugins=Pengaya Eksternal
+backupFound=Berkas backup ditemukan
+chromeOnly=Fitur ini hanya bekerja di Google Chrome
+msgDeleted=Pesan ini telah dihapus
+confAErrFetchDrawList=Galat saat mengambil daftar diagram. Beberapa diagram dilewati.
+confAErrCheckDrawDiag=Tidak bisa memeriksa diagram {1}
+confAErrFetchPageList=Galat saat mengambil daftar halaman
+confADiagImportIncom={1} diagram "{2}" diimpor sebagian dan mungkin kehilangan beberapa bentuk
+invalidSel=Pilihan yang tidak valid
+diagNameEmptyErr=Nama diagram tidak boleh kosong
+openDiagram=Buka Diagram
+newDiagram=Diagram Baru
+editable=Dapat Disunting
+confAReimportStarted=Impor ulang {1} diagram dimulai...
+spaceFilter=Saring menurut spasi
+curViewState=Keadaan Penampil Sekarang
+pageLayers=Halaman dan Lapisan
+customize=Sesuaikan
+firstPage=Halaman Pertama (Semua Lapisan)
+curEditorState=Keadaan Penyunting Saat Ini
+noAnchorsFound=Tidak ditemukan jangkar
+attachment=Lampiran
+curDiagram=Diagram Saat ini
+recentDiags=Diagram Baru-baru Ini
+csvImport=Impor CSV
+chooseFile=Pilih sebuah berkas...
+choose=Pilih
+gdriveFname=Nama berkas Google Drive
+widthOfViewer=Lebar penampil (px)
+heightOfViewer=Tinggi penampil (px)
+autoSetViewerSize=Secara otomatis atur ukuran penampil
+thumbnail=Gambar mini
+prevInDraw=Pratinjau dalam draw.io
+onedriveFname=Nama berkas OneDrive
+diagFname=Nama berkas diagram
+diagUrl=URL diagram
+showDiag=Tampilkan Diagram
+diagPreview=Pratinjau Diagram
+csvFileUrl=URL Berkas CSV
+generate=Bangkitkan
+selectDiag2Insert=Harap pilih suatu diagram untuk disisipi.
+errShowingDiag=Galat tak diharapkan. Tidak bisa menunjukkan diagram
+noRecentDiags=Tidak ditemukan diagram baru-baru ini
+fetchingRecentFailed=Gagal mengambil diagram baru-baru ini
+useSrch2FindDiags=Gunakan kotak pencarian untuk menemukan diagram-diagram draw.io
+cantReadChckPerms=Tidak bisa membaca diagram yang dinyatakan. Harap periksa apakah Anda punya hak baca pada berkas itu.
+cantFetchChckPerms=Tidak bisa mengambil info diagram. Harap periksa apakah Anda punya hak baca pada berkas itu.
+searchFailed=Pencarian gagal. Harap coba lagi nanti.
+plsTypeStr=Harap ketikkan suatu string pencarian.
+unsupportedFileChckUrl=Berkas yang tidak didukung. Harap periksa URL yang dinyatakan
+diagNotFoundChckUrl=Diagram tidak ditemukan atau tidak bisa diakses. Harap periksa URL yang dinyatakan
+csvNotFoundChckUrl=Berkas CVS tidak ditemukan atau tidak bisa diakses. Harap periksa URL yang dinyatakan
+cantReadUpload=Tidak bisa membaca diagram yang diunggah
+select=Pilih
+errCantGetIdType=Galat Tak Diharapkan: Tidak bisa mendapatkan id atau tipe konten.
+errGAuthWinBlocked=Galat: Jendela Otentikasi Google terblokir
+authDrawAccess=Otorisasikan draw.io untuk mengakses {1}
+connTimeout=Koneksi kehabisan waktu
+errAuthSrvc=Galat mengotentikasi ke {1}
+plsSelectFile=Harap pilih sebuah berkas
+mustBgtZ={1} harus lebih dari nol
+cantLoadPrev=Tidak bisa memuat pratinjau berkas.
+errAccessFile=Galat: Akses Ditolak. Anda tidak punya izin untuk mengakses "{1}".
+noPrevAvail=Tidak ada pratinjau yang tersedia.
+personalAccNotSup=Akun pribadi tidak didukung.
+errSavingTryLater=Terjadi galat saat menyimpan, harap coba lagi nanti.
+plsEnterFld=Harap masukkan {1}
+invalidDiagUrl=URL Diagram Tidak Valid
+unsupportedVsdx=Berkas vsdx yang tidak didukung
+unsupportedImg=Berkas gambar yang tidak didukung
+unsupportedFormat=Format berkas yang tidak didukung
+plsSelectSingleFile=Harap pilih satu berkas saja
+attCorrupt=Berkas lampiran "{1}" terkorupsi
+loadAttFailed=Gagal memuat lampiran "{1}"
+embedDrawDiag=Tanamkan Diagram draw.io
+addDiagram=Tambah Diagram
+embedDiagram=Tanam Diagram
+editOwningPg=Sunting halaman yang memuat
+deepIndexing=Pengindeksan Dalam (Juga mengindeks diagram yang tidak dipakai di halaman mana pun)
+confADeepIndexStarted=Pengindeksan Dalam Dimulai
+confADeepIndexDone=Pengindeksan Dalam Selesai
+officeNoDiagramsSelected=Tidak ditemukan diagram dalam pilihan
+officeNoDiagramsInDoc=Tidak ditemukan diagram dalam dokumen
+officeNotSupported=Fitur ini tidak didukung dalam aplikasi host ini
+someImagesFailed={1} dari {2} gagal karena galat berikut
+importingNoUsedDiagrams=Mengimpor {1} Diagram yang tidak dipakai di halaman
+importingDrafts=Mengimpor {1} Diagram dalam draf
+processingDrafts=Memroses draf
+updatingDrafts=Memutakhirkan draf
+updateDrafts=Mutakhirkan draf
+notifications=Pemberitahuan
+drawioImp=Impor draw.io
+confALibsImp=Mengimpor Pustaka draw.io
+confALibsImpFailed=Mengimpor {1} pustaka gagal
 contributors=Kontributor
-drawDiagrams=draw.io Diagrams
-errFileNotFoundOrNoPer=Error: Access Denied. File not found or you do not have permission to access "{1}" on {2}.
-confACheckPagesWEmbed=Checking pages having embedded draw.io diagrams.
+drawDiagrams=Diagram draw.io
+errFileNotFoundOrNoPer=Galat: Akses Ditolak. Berkas tidak ditemukan atau Anda tidak punya hak untuk mengakses "{1}" pada {2}.
+confACheckPagesWEmbed=Memeriksa halaman yang memiliki diagram draw.io yang tertanam.
 confADelBrokenEmbedDiagLnk=Removing broken embedded diagram links
-replaceWith=Replace with
-replaceAll=Replace All
+replaceWith=Gantikan dengan
+replaceAll=Ganti Semua
 confASkipDiagModified=Skipped "{1}" as it was modified after initial import
-replFind=Replace/Find
-matchesRepl={1} matches replaced
+replFind=Ganti/Cari
+matchesRepl={1} kecocokan diganti
 draftErrDataLoss=An error occurred while reading the draft file. The diagram cannot be edited now to prevent any possible data loss. Please try again later or contact support.
 ibm=IBM
 linkToDiagramHint=Add a link to this diagram. The diagram can only be edited from the page that owns it.
-linkToDiagram=Link to Diagram
+linkToDiagram=Tautan ke Diagram
 changedBy=Diubah Oleh
 lastModifiedOn=Terakhir diubah pada
 searchResults=Hasil Pencarian
@@ -1241,14 +1241,14 @@ xyzTeam=Tim {1}
 addTeamTitle=Adding a new draw.io Team
 addTeamInst1=To create a new draw.io Team, you need to create a new Atlassian group with "drawio-" postfix (e.g, a group named "drawio-marketing").
 addTeamInst2=Then, configure which team member can edit/add configuration, templates, and libraries from this page.
-drawioTeams=draw.io Teams
-members=Members
-adminEditors=Admins/Editors
-allowAll=Allow all
-noTeams=No teams found
-errorLoadingTeams=Error Loading Teams
-noTeamMembers=No team members found
-errLoadTMembers=Error loading team members
+drawioTeams=Tim draw.io
+members=Anggota
+adminEditors=Admin/Editor
+allowAll=Izinkan semua
+noTeams=Tidak ditemukan tim
+errorLoadingTeams=Galat Saat Memuat Tim
+noTeamMembers=Tidak ditemukan anggota tim
+errLoadTMembers=Galat saat memuat anggota tim
 errCreateTeamPage=Error creating team "{1}" page in "draw.io Configuration" space, please check you have the required permissions.
 gotoConfigPage=Please create the space from draw.io "Configuration" page.
 noAdminsSelected=No admins/editors selected
@@ -1257,9 +1257,9 @@ errSetPageRestr=Error setting page restrictions
 notAdmin4Team=You are not an admin for this team
 configUpdated=Configuration updated, restart the editor if you want to work with last configuration.
 outOfDateRevisionAlert=You are editing a historical revision of the diagram, please review the revision and open it to replace the latest version. Or close and overwrite/merge later.
-confAErrFaqs=There are {1} error(s), the following instructions may help fixing most of the cases. (Please download the log for future references)
-confA403ErrFaq=There are ({1}) 403 error(s). The current users must have add (write) permissions on all pages and attachments. Even admins sometimes are not allowed to write to some pages via page restrictions
-confA404ErrFaq=There are ({1}) 404 error(s). The attachment/page is not found. This is due to improper migration or the diagram file (an attachment of the page) is deleted.
-confA500ErrFaq=There are ({1}) 500 error(s). An internal server error in Confluence Cloud. Such errors are due to overloading the server and usually fixed by retrying the process.
-confAOtherErrFaq=There are ({1}) other error(s). Please check the error description. If the description is not clear, please contact our support.
-confAReplaceBaseUrl=Replace Base URL in diagram links when no page ID mapping is found
+confAErrFaqs=Ada {1} galat, instruksi berikut mungkin bisa membantu memperbaiki kebanyakan kasus. (Harap unduh log untuk acuan mendatang)
+confA403ErrFaq=Ada ({1}) galat 403. Pengguna saat ini mesti punya hak tambah (tulis) pada semua halaman dan lampiran. Bahkan admin kadang tidak diizinkan menulis ke beberapa halaman melalui pembatasan halaman
+confA404ErrFaq=Ada ({1}) galat 404. Lampiran/halaman tidak ditemukan. Ini karena migrasi yang tidak sesuai atau berkas diagram (suatu lampiran dari halaman) dihapus.
+confA500ErrFaq=Ada ({1}) galat 500. Sebuah galat server internal dalam Cloud Confluence. Galat seperti itu karena pembebanan lebih server dan biasanya diperbaiki dengan mencoba ulang proses.
+confAOtherErrFaq=Ada ({1}) galat lain. Harap periksa deskripsi galat. Bila deskripsi tidak jelas, harap hubungi dukungan kami.
+confAReplaceBaseUrl=Menggantikan URL Dasar dalam tautan diagram ketika pemetaan ID halaman tidak ditemukan

programming_language: TeX
filename: service-worker.js
change_type: ModificationType.MODIFY
diff: @@ -1,2 +1,2 @@
-if(!self.define){const e=e=>{"require"!==e&&(e+=".js");let r=Promise.resolve();return i[e]||(r=new Promise((async r=>{if("document"in self){const i=document.createElement("script");i.src=e,document.head.appendChild(i),i.onload=r}else importScripts(e),r()}))),r.then((()=>{if(!i[e])throw new Error(`Module ${e} didn’t register its module`);return i[e]}))},r=(r,i)=>{Promise.all(r.map(e)).then((e=>i(1===e.length?e[0]:e)))},i={require:Promise.resolve(r)};self.define=(r,a,c)=>{i[r]||(i[r]=Promise.resolve().then((()=>{let i={};const s={uri:location.origin+r.slice(1)};return Promise.all(a.map((r=>{switch(r){case"exports":return i;case"module":return s;default:return e(r)}}))).then((e=>{const r=c(...e);return i.default||(i.default=r),i}))})))}}define("./service-worker.js",["./workbox-99ba3a23"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"js/app.min.js",revision:"24ace1901711d6cab23a4ef379de9120"},{url:"js/extensions.min.js",revision:"3834501a2250d98fc7207a6ae6298f14"},{url:"js/orgchart.min.js",revision:"619d8c4dab47b81868916df31f55478b"},{url:"js/stencils.min.js",revision:"698f1f70f64466ff6ae9280cd91cd23f"},{url:"js/shapes-14-6-5.min.js",revision:"95f54e7999c9fba2a1d65b4fe4f634f3"},{url:"js/math-print.js",revision:"cf64f6a493a8cb5079f2b70813e478d7"},{url:"index.html",revision:"8279349dc2b6543249d7e51c2d1cf92e"},{url:"open.html",revision:"d71816b3b00e769fc6019fcdd6921662"},{url:"styles/fonts/ArchitectsDaughter-Regular.ttf",revision:"31c2153c0530e32553b31a49b3d70736"},{url:"styles/grapheditor.css",revision:"c80c6d3bdaa85e0fbc9d9b174ef763f4"},{url:"styles/atlas.css",revision:"d627cfef208f13a9cff1670f143c6348"},{url:"styles/dark.css",revision:"436ac9aaaa67eb15e64c368cc05ba5a7"},{url:"js/dropbox/Dropbox-sdk.min.js",revision:"4b9842892aa37b156db0a8364b7a83b0"},{url:"js/onedrive/OneDrive.js",revision:"505e8280346666f7ee801bc59521fa67"},{url:"js/viewer-static.min.js",revision:"c7148759e7b2120d703b4cbf3dfda60f"},{url:"connect/jira/editor-1-3-3.html",revision:"6ec59ca5f689067e52cdda13f22ed89f"},{url:"connect/jira/viewerPanel-1-3-12.html",revision:"9adfcef71f6a8c68c20c2d2fba35fe19"},{url:"connect/jira/fullScreenViewer-1-3-3.html",revision:"29c803d9aa4dc0718540c916a0a4e62c"},{url:"connect/jira/viewerPanel.js",revision:"8d298de3aeaa32cad74b5d4b53ed3d4f"},{url:"connect/jira/spinner.gif",revision:"7d857ab9d86123e93d74d48e958fe743"},{url:"connect/jira/editor.js",revision:"d1c80a7301cd26c6dc31b1fdce9e37e5"},{url:"connect/jira/fullscreen-viewer-init.js",revision:"e00ad51fc16b87c362d6eaf930ab1fa5"},{url:"connect/jira/fullscreen-viewer.js",revision:"d5748a4fe01b7e747914ebd3e37c9de2"},{url:"plugins/connectJira.js",revision:"4cefa13414e0d406550f3c073923080c"},{url:"plugins/cConf-comments.js",revision:"ee6764429bf47a8545aa1cedacee718e"},{url:"plugins/cConf-1-4-8.js",revision:"91c04e236ba9dbdb26d8565b3354e00a"},{url:"connect/confluence/connectUtils-1-4-8.js",revision:"9b93b748a41a6f9444ff92810b7908b8"},{url:"connect/new_common/cac.js",revision:"6d666b6789b51dabc5a1af53a9db5d3d"},{url:"connect/gdrive_common/gac.js",revision:"78f85e79f15f56b8b8d83c90f4a15679"},{url:"connect/onedrive_common/ac.js",revision:"d10d4603e86da7c9af277dac832e8e06"},{url:"connect/confluence/viewer-init.js",revision:"8aa8d02147def4535563bc65632a3e6d"},{url:"connect/confluence/viewer.js",revision:"e865c0c1820464235ca8f0b9dc6eb71e"},{url:"connect/confluence/viewer-1-4-42.html",revision:"083a8751312bdb6485f2a4ced206e086"},{url:"connect/confluence/macroEditor-1-4-8.html",revision:"b2908e71f755a069fe6487e1e705736c"},{url:"connect/confluence/includeDiagram-1-4-8.js",revision:"2947a24a48572562d9fcb55b20d22fca"},{url:"connect/confluence/includeDiagram.html",revision:"bbc4156ca3902347d3c8121dd08a89d7"},{url:"connect/confluence/macro-editor.js",revision:"0bd745f0c23bba15ad1ff8e7b8e14987"},{url:"math/es5/startup.js",revision:"dc7130cdc866593293dbb5dde11ceb40"},{url:"math/es5/core.js",revision:"f71bc0bfb7d2ac8261747f97a5d47dd4"},{url:"math/es5/ui/safe.js",revision:"8c1fcfee7c879588ad409edcdd9cce53"},{url:"math/es5/output/svg.js",revision:"4f55967d16197ebb01b86356d8ab179a"},{url:"math/es5/input/tex.js",revision:"5c4f470da2ccb1acf85041fcecd6fff6"},{url:"math/es5/input/asciimath.js",revision:"c2d4076dd8e26d509bfe3a378e71cfa7"},{url:"math/es5/output/svg/fonts/tex.js",revision:"6eab785a3788ea805bd2b552d1f0aab8"},{url:"resources/dia.txt",revision:"f2bb9f811ec054499a5eca5add259a96"},{url:"resources/dia_am.txt",revision:"757af1ba9c187b2db9865965be4584d4"},{url:"resources/dia_ar.txt",revision:"f139fee88b934da5fc0e51c800449d2e"},{url:"resources/dia_bg.txt",revision:"b59ea02be4c9c5b60791327a42503115"},{url:"resources/dia_bn.txt",revision:"c7bb29b3be89b945859a9dbc996e3977"},{url:"resources/dia_bs.txt",revision:"c8faa32407ce808dd181f1708300dc65"},{url:"resources/dia_ca.txt",revision:"b2a3ab72212774891c4698f3aa67764b"},{url:"resources/dia_cs.txt",revision:"621536d118c10c11e0455bdc21d90495"},{url:"resources/dia_da.txt",revision:"2c9232e5e9cef27da9172a187a933115"},{url:"resources/dia_de.txt",revision:"112d8443021165e8c7d9994f97ddaf48"},{url:"resources/dia_el.txt",revision:"cbeb9bcc4a8a37ab0cce55d996c3b627"},{url:"resources/dia_eo.txt",revision:"c4d5feab9f7ce5d22f8487f4fc2bc585"},{url:"resources/dia_es.txt",revision:"d0d9810976aeb9b9fef0118aca1c3815"},{url:"resources/dia_et.txt",revision:"5303fb8a71bf11794f3cbe9324fd3d2d"},{url:"resources/dia_eu.txt",revision:"552e57dff8a9233098009af48380f066"},{url:"resources/dia_fa.txt",revision:"a2bd813de7a95f881a1ac941fab6ea29"},{url:"resources/dia_fi.txt",revision:"dbbd5d0126ad8f43fe18735f4f65b604"},{url:"resources/dia_fil.txt",revision:"0efbb4b0779c2314496e2209272f1729"},{url:"resources/dia_fr.txt",revision:"60a1a016d2ba9f171848b48a3b4baadd"},{url:"resources/dia_gl.txt",revision:"089dd7084f23978ef1696e674bcc4cab"},{url:"resources/dia_gu.txt",revision:"e00b05d0b7fe33e23a8c589c8226d2a7"},{url:"resources/dia_he.txt",revision:"bba5f189a07b266f40dfed938b0068c6"},{url:"resources/dia_hi.txt",revision:"d580a9d0f5545626c9cc37daafc51a3c"},{url:"resources/dia_hr.txt",revision:"97deaf0afd81d692f005dc02f329ac88"},{url:"resources/dia_hu.txt",revision:"465d05499416a9adeb023313a8160424"},{url:"resources/dia_id.txt",revision:"3e5ab9a1098930d4dd84278169f49b86"},{url:"resources/dia_it.txt",revision:"da633c90cadf73d0df46991b5586df54"},{url:"resources/dia_ja.txt",revision:"95dcedfc13dd97fb2ae63184d3ae14fc"},{url:"resources/dia_kn.txt",revision:"965dc84ec662842d0c313674632a5544"},{url:"resources/dia_ko.txt",revision:"e49ee6d9c9bbc77276cb85c97069b919"},{url:"resources/dia_lt.txt",revision:"51465381c456510952d6269952dced5e"},{url:"resources/dia_lv.txt",revision:"3ac8dd9a8bb6e7ec1143ab46cd70b96a"},{url:"resources/dia_ml.txt",revision:"11910b85c2616d84d97651e97cf11d7a"},{url:"resources/dia_mr.txt",revision:"8497141bca86742111017248e26a07ea"},{url:"resources/dia_ms.txt",revision:"ee74d690582d04322dba57dbc7224c99"},{url:"resources/dia_my.txt",revision:"f2bb9f811ec054499a5eca5add259a96"},{url:"resources/dia_nl.txt",revision:"35a2a6ece18b1c59893925d547425261"},{url:"resources/dia_no.txt",revision:"b0b4fe8a1c31db304d431935cdab14b8"},{url:"resources/dia_pl.txt",revision:"c86f5e75805a2903734a1c9a7a81d63b"},{url:"resources/dia_pt-br.txt",revision:"2eee01639ff6775e24220fbfa3c9c788"},{url:"resources/dia_pt.txt",revision:"63407d1bd46853ff9e3ed3b9ace9602f"},{url:"resources/dia_ro.txt",revision:"e2e5f6a838ae71143e6c50b290af7bb1"},{url:"resources/dia_ru.txt",revision:"38de6a4f45437cdd66dc3decc48c8841"},{url:"resources/dia_si.txt",revision:"f2bb9f811ec054499a5eca5add259a96"},{url:"resources/dia_sk.txt",revision:"58fffaadfebfec4deafcfc5c20178b57"},{url:"resources/dia_sl.txt",revision:"a66ac8feda2a580540b7b840603c1e23"},{url:"resources/dia_sr.txt",revision:"9cb339e7ca6db727cbcec145b01a7bdb"},{url:"resources/dia_sv.txt",revision:"84338c7bffb013c00b71ee6868a55b9f"},{url:"resources/dia_sw.txt",revision:"476b03b2ee388853d15f8f7924a10e40"},{url:"resources/dia_ta.txt",revision:"ef879e2a9c097abe6b578a22df399257"},{url:"resources/dia_te.txt",revision:"efd7ac431c2163371f13f1e0cdb05aaa"},{url:"resources/dia_th.txt",revision:"1ab6b69b33a88ed897c96a885165a566"},{url:"resources/dia_tr.txt",revision:"4c1bae6ee6079bf94c4e7e86a49b2684"},{url:"resources/dia_uk.txt",revision:"612e5ccdf38b00749ff4926cd1ea2b3f"},{url:"resources/dia_vi.txt",revision:"757058bddd335a0c0bc37829a2b2ff2a"},{url:"resources/dia_zh-tw.txt",revision:"838b0f7bd695a5a2a0c5ebbd83d33296"},{url:"resources/dia_zh.txt",revision:"7736de1c10669ab8f284558fb5dc434c"},{url:"favicon.ico",revision:"fab2d88b37c72d83607527573de45281"},{url:"images/manifest.json",revision:"389fa448cb99794bece27ffcb216abee"},{url:"images/logo.png",revision:"89630b64b911ebe0daa3dfe442087cfa"},{url:"images/drawlogo.svg",revision:"4bf4d14ebcf072d8bd4c5a1c89e88fc6"},{url:"images/drawlogo48.png",revision:"8b13428373aca67b895364d025f42417"},{url:"images/drawlogo-gray.svg",revision:"0aabacbc0873816e1e09e4736ae44c7d"},{url:"images/drawlogo-text-bottom.svg",revision:"f6c438823ab31f290940bd4feb8dd9c2"},{url:"images/default-user.jpg",revision:"2c399696a87c8921f12d2f9e1990cc6e"},{url:"images/logo-flat-small.png",revision:"4b178e59ff499d6dd1894fc498b59877"},{url:"images/apple-touch-icon.png",revision:"73da7989a23ce9a4be565ec65658a239"},{url:"images/favicon-16x16.png",revision:"1a79d5461a5d2bf21f6652e0ac20d6e5"},{url:"images/favicon-32x32.png",revision:"e3b92da2febe70bad5372f6f3474b034"},{url:"images/android-chrome-196x196.png",revision:"f8c045b2d7b1c719fda64edab04c415c"},{url:"images/android-chrome-512x512.png",revision:"959b5fac2453963ff6d60fb85e4b73fd"},{url:"images/delete.png",revision:"5f2350f2fd20f1a229637aed32ed8f29"},{url:"images/droptarget.png",revision:"bbf7f563fb6784de1ce96f329519b043"},{url:"images/help.png",revision:"9266c6c3915bd33c243d80037d37bf61"},{url:"images/download.png",revision:"35418dd7bd48d87502c71b578cc6c37f"},{url:"images/logo-flat.png",revision:"038070ab43aee6e54a791211859fc67b"},{url:"images/google-drive-logo.svg",revision:"5d9f2f5bbc7dcc252730a0072bb23059"},{url:"images/onedrive-logo.svg",revision:"3645b344ec0634c1290dd58d7dc87b97"},{url:"images/dropbox-logo.svg",revision:"e6be408c77cf9c82d41ac64fa854280a"},{url:"images/github-logo.svg",revision:"a1a999b69a275eac0cb918360ac05ae1"},{url:"images/gitlab-logo.svg",revision:"0faea8c818899e58533e153c44b10517"},{url:"images/trello-logo.svg",revision:"006fd0d7d70d7e95dc691674cb12e044"},{url:"images/osa_drive-harddisk.png",revision:"b954e1ae772087c5b4c6ae797e1f9649"},{url:"images/osa_database.png",revision:"c350d9d9b95f37b6cfe798b40ede5fb0"},{url:"images/google-drive-logo-white.svg",revision:"f329d8b1be7778515a85b93fc35d9f26"},{url:"images/dropbox-logo-white.svg",revision:"4ea8299ac3bc31a16f199ee3aec223bf"},{url:"images/onedrive-logo-white.svg",revision:"b3602fa0fc947009cff3f33a581cff4d"},{url:"images/github-logo-white.svg",revision:"537b1127b3ca0f95b45782d1304fb77a"},{url:"images/gitlab-logo-white.svg",revision:"5fede9ac2f394c716b8c23e3fddc3910"},{url:"images/trello-logo-white-orange.svg",revision:"e2a0a52ba3766682f138138d10a75eb5"},{url:"images/logo-confluence.png",revision:"ed1e55d44ae5eba8f999aba2c93e8331"},{url:"images/logo-jira.png",revision:"f8d460555a0d1f87cfd901e940666629"},{url:"images/clear.gif",revision:"db13c778e4382e0b55258d0f811d5d70"},{url:"images/spin.gif",revision:"487cbb40b9ced439aa1ad914e816d773"},{url:"images/checkmark.gif",revision:"ba764ce62f2bf952df5bbc2bb4d381c5"},{url:"images/hs.png",revision:"fefa1a03d92ebad25c88dca94a0b63db"},{url:"images/aui-wait.gif",revision:"5a474bcbd8d2f2826f03d10ea44bf60e"},{url:"mxgraph/css/common.css",revision:"618b42f0bde0c7685e04811c25dc2b3e"},{url:"mxgraph/images/expanded.gif",revision:"2b67c2c035af1e9a5cc814f0d22074cf"},{url:"mxgraph/images/collapsed.gif",revision:"73cc826da002a3d740ca4ce6ec5c1f4a"},{url:"mxgraph/images/maximize.gif",revision:"5cd13d6925493ab51e876694cc1c2ec2"},{url:"mxgraph/images/minimize.gif",revision:"8957741b9b0f86af9438775f2aadbb54"},{url:"mxgraph/images/close.gif",revision:"8b84669812ac7382984fca35de8da48b"},{url:"mxgraph/images/resize.gif",revision:"a6477612b3567a34033f9cac6184eed3"},{url:"mxgraph/images/separator.gif",revision:"7819742ff106c97da7a801c2372bbbe5"},{url:"mxgraph/images/window.gif",revision:"fd9a21dd4181f98052a202a0a01f18ab"},{url:"mxgraph/images/window-title.gif",revision:"3fb1d6c43246cdf991a11dfe826dfe99"},{url:"mxgraph/images/button.gif",revision:"00759bdc3ad218fa739f584369541809"},{url:"mxgraph/images/point.gif",revision:"83a43717b284902442620f61bc4e9fa6"}],{ignoreURLParametersMatching:[/.*/]})}));
+if(!self.define){const e=e=>{"require"!==e&&(e+=".js");let r=Promise.resolve();return i[e]||(r=new Promise((async r=>{if("document"in self){const i=document.createElement("script");i.src=e,document.head.appendChild(i),i.onload=r}else importScripts(e),r()}))),r.then((()=>{if(!i[e])throw new Error(`Module ${e} didn’t register its module`);return i[e]}))},r=(r,i)=>{Promise.all(r.map(e)).then((e=>i(1===e.length?e[0]:e)))},i={require:Promise.resolve(r)};self.define=(r,a,c)=>{i[r]||(i[r]=Promise.resolve().then((()=>{let i={};const s={uri:location.origin+r.slice(1)};return Promise.all(a.map((r=>{switch(r){case"exports":return i;case"module":return s;default:return e(r)}}))).then((e=>{const r=c(...e);return i.default||(i.default=r),i}))})))}}define("./service-worker.js",["./workbox-99ba3a23"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"js/app.min.js",revision:"94d4887ca9c27d6b300b5dbc85e155ab"},{url:"js/extensions.min.js",revision:"3834501a2250d98fc7207a6ae6298f14"},{url:"js/orgchart.min.js",revision:"619d8c4dab47b81868916df31f55478b"},{url:"js/stencils.min.js",revision:"698f1f70f64466ff6ae9280cd91cd23f"},{url:"js/shapes-14-6-5.min.js",revision:"95f54e7999c9fba2a1d65b4fe4f634f3"},{url:"js/math-print.js",revision:"cf64f6a493a8cb5079f2b70813e478d7"},{url:"index.html",revision:"d29a8e0ad73c5cfd3dc1e35361bf558b"},{url:"open.html",revision:"d71816b3b00e769fc6019fcdd6921662"},{url:"styles/fonts/ArchitectsDaughter-Regular.ttf",revision:"31c2153c0530e32553b31a49b3d70736"},{url:"styles/grapheditor.css",revision:"c80c6d3bdaa85e0fbc9d9b174ef763f4"},{url:"styles/atlas.css",revision:"d627cfef208f13a9cff1670f143c6348"},{url:"styles/dark.css",revision:"436ac9aaaa67eb15e64c368cc05ba5a7"},{url:"js/dropbox/Dropbox-sdk.min.js",revision:"4b9842892aa37b156db0a8364b7a83b0"},{url:"js/onedrive/OneDrive.js",revision:"505e8280346666f7ee801bc59521fa67"},{url:"js/viewer-static.min.js",revision:"93a4740f593c525cf58cf653d05e8373"},{url:"connect/jira/editor-1-3-3.html",revision:"6ec59ca5f689067e52cdda13f22ed89f"},{url:"connect/jira/viewerPanel-1-3-12.html",revision:"9adfcef71f6a8c68c20c2d2fba35fe19"},{url:"connect/jira/fullScreenViewer-1-3-3.html",revision:"29c803d9aa4dc0718540c916a0a4e62c"},{url:"connect/jira/viewerPanel.js",revision:"8d298de3aeaa32cad74b5d4b53ed3d4f"},{url:"connect/jira/spinner.gif",revision:"7d857ab9d86123e93d74d48e958fe743"},{url:"connect/jira/editor.js",revision:"d1c80a7301cd26c6dc31b1fdce9e37e5"},{url:"connect/jira/fullscreen-viewer-init.js",revision:"e00ad51fc16b87c362d6eaf930ab1fa5"},{url:"connect/jira/fullscreen-viewer.js",revision:"d5748a4fe01b7e747914ebd3e37c9de2"},{url:"plugins/connectJira.js",revision:"4cefa13414e0d406550f3c073923080c"},{url:"plugins/cConf-comments.js",revision:"ee6764429bf47a8545aa1cedacee718e"},{url:"plugins/cConf-1-4-8.js",revision:"91c04e236ba9dbdb26d8565b3354e00a"},{url:"connect/confluence/connectUtils-1-4-8.js",revision:"9b93b748a41a6f9444ff92810b7908b8"},{url:"connect/new_common/cac.js",revision:"6d666b6789b51dabc5a1af53a9db5d3d"},{url:"connect/gdrive_common/gac.js",revision:"78f85e79f15f56b8b8d83c90f4a15679"},{url:"connect/onedrive_common/ac.js",revision:"d10d4603e86da7c9af277dac832e8e06"},{url:"connect/confluence/viewer-init.js",revision:"8aa8d02147def4535563bc65632a3e6d"},{url:"connect/confluence/viewer.js",revision:"e865c0c1820464235ca8f0b9dc6eb71e"},{url:"connect/confluence/viewer-1-4-42.html",revision:"083a8751312bdb6485f2a4ced206e086"},{url:"connect/confluence/macroEditor-1-4-8.html",revision:"b2908e71f755a069fe6487e1e705736c"},{url:"connect/confluence/includeDiagram-1-4-8.js",revision:"2947a24a48572562d9fcb55b20d22fca"},{url:"connect/confluence/includeDiagram.html",revision:"bbc4156ca3902347d3c8121dd08a89d7"},{url:"connect/confluence/macro-editor.js",revision:"0bd745f0c23bba15ad1ff8e7b8e14987"},{url:"math/es5/startup.js",revision:"dc7130cdc866593293dbb5dde11ceb40"},{url:"math/es5/core.js",revision:"f71bc0bfb7d2ac8261747f97a5d47dd4"},{url:"math/es5/ui/safe.js",revision:"8c1fcfee7c879588ad409edcdd9cce53"},{url:"math/es5/output/svg.js",revision:"4f55967d16197ebb01b86356d8ab179a"},{url:"math/es5/input/tex.js",revision:"5c4f470da2ccb1acf85041fcecd6fff6"},{url:"math/es5/input/asciimath.js",revision:"c2d4076dd8e26d509bfe3a378e71cfa7"},{url:"math/es5/output/svg/fonts/tex.js",revision:"6eab785a3788ea805bd2b552d1f0aab8"},{url:"resources/dia.txt",revision:"f2bb9f811ec054499a5eca5add259a96"},{url:"resources/dia_am.txt",revision:"757af1ba9c187b2db9865965be4584d4"},{url:"resources/dia_ar.txt",revision:"f139fee88b934da5fc0e51c800449d2e"},{url:"resources/dia_bg.txt",revision:"b59ea02be4c9c5b60791327a42503115"},{url:"resources/dia_bn.txt",revision:"c7bb29b3be89b945859a9dbc996e3977"},{url:"resources/dia_bs.txt",revision:"c8faa32407ce808dd181f1708300dc65"},{url:"resources/dia_ca.txt",revision:"8dc84ddf5fc455eee7390adb7bb8fb42"},{url:"resources/dia_cs.txt",revision:"621536d118c10c11e0455bdc21d90495"},{url:"resources/dia_da.txt",revision:"2c9232e5e9cef27da9172a187a933115"},{url:"resources/dia_de.txt",revision:"112d8443021165e8c7d9994f97ddaf48"},{url:"resources/dia_el.txt",revision:"cbeb9bcc4a8a37ab0cce55d996c3b627"},{url:"resources/dia_eo.txt",revision:"c4d5feab9f7ce5d22f8487f4fc2bc585"},{url:"resources/dia_es.txt",revision:"d0d9810976aeb9b9fef0118aca1c3815"},{url:"resources/dia_et.txt",revision:"5303fb8a71bf11794f3cbe9324fd3d2d"},{url:"resources/dia_eu.txt",revision:"552e57dff8a9233098009af48380f066"},{url:"resources/dia_fa.txt",revision:"a2bd813de7a95f881a1ac941fab6ea29"},{url:"resources/dia_fi.txt",revision:"dbbd5d0126ad8f43fe18735f4f65b604"},{url:"resources/dia_fil.txt",revision:"0efbb4b0779c2314496e2209272f1729"},{url:"resources/dia_fr.txt",revision:"60a1a016d2ba9f171848b48a3b4baadd"},{url:"resources/dia_gl.txt",revision:"089dd7084f23978ef1696e674bcc4cab"},{url:"resources/dia_gu.txt",revision:"e00b05d0b7fe33e23a8c589c8226d2a7"},{url:"resources/dia_he.txt",revision:"bba5f189a07b266f40dfed938b0068c6"},{url:"resources/dia_hi.txt",revision:"d580a9d0f5545626c9cc37daafc51a3c"},{url:"resources/dia_hr.txt",revision:"97deaf0afd81d692f005dc02f329ac88"},{url:"resources/dia_hu.txt",revision:"465d05499416a9adeb023313a8160424"},{url:"resources/dia_id.txt",revision:"228d2a20f4627360cfb07e25aea78104"},{url:"resources/dia_it.txt",revision:"da633c90cadf73d0df46991b5586df54"},{url:"resources/dia_ja.txt",revision:"95dcedfc13dd97fb2ae63184d3ae14fc"},{url:"resources/dia_kn.txt",revision:"965dc84ec662842d0c313674632a5544"},{url:"resources/dia_ko.txt",revision:"e49ee6d9c9bbc77276cb85c97069b919"},{url:"resources/dia_lt.txt",revision:"51465381c456510952d6269952dced5e"},{url:"resources/dia_lv.txt",revision:"3ac8dd9a8bb6e7ec1143ab46cd70b96a"},{url:"resources/dia_ml.txt",revision:"11910b85c2616d84d97651e97cf11d7a"},{url:"resources/dia_mr.txt",revision:"8497141bca86742111017248e26a07ea"},{url:"resources/dia_ms.txt",revision:"ee74d690582d04322dba57dbc7224c99"},{url:"resources/dia_my.txt",revision:"f2bb9f811ec054499a5eca5add259a96"},{url:"resources/dia_nl.txt",revision:"35a2a6ece18b1c59893925d547425261"},{url:"resources/dia_no.txt",revision:"b0b4fe8a1c31db304d431935cdab14b8"},{url:"resources/dia_pl.txt",revision:"c86f5e75805a2903734a1c9a7a81d63b"},{url:"resources/dia_pt-br.txt",revision:"2eee01639ff6775e24220fbfa3c9c788"},{url:"resources/dia_pt.txt",revision:"63407d1bd46853ff9e3ed3b9ace9602f"},{url:"resources/dia_ro.txt",revision:"e2e5f6a838ae71143e6c50b290af7bb1"},{url:"resources/dia_ru.txt",revision:"38de6a4f45437cdd66dc3decc48c8841"},{url:"resources/dia_si.txt",revision:"f2bb9f811ec054499a5eca5add259a96"},{url:"resources/dia_sk.txt",revision:"58fffaadfebfec4deafcfc5c20178b57"},{url:"resources/dia_sl.txt",revision:"a66ac8feda2a580540b7b840603c1e23"},{url:"resources/dia_sr.txt",revision:"9cb339e7ca6db727cbcec145b01a7bdb"},{url:"resources/dia_sv.txt",revision:"84338c7bffb013c00b71ee6868a55b9f"},{url:"resources/dia_sw.txt",revision:"476b03b2ee388853d15f8f7924a10e40"},{url:"resources/dia_ta.txt",revision:"ef879e2a9c097abe6b578a22df399257"},{url:"resources/dia_te.txt",revision:"efd7ac431c2163371f13f1e0cdb05aaa"},{url:"resources/dia_th.txt",revision:"1ab6b69b33a88ed897c96a885165a566"},{url:"resources/dia_tr.txt",revision:"4c1bae6ee6079bf94c4e7e86a49b2684"},{url:"resources/dia_uk.txt",revision:"612e5ccdf38b00749ff4926cd1ea2b3f"},{url:"resources/dia_vi.txt",revision:"757058bddd335a0c0bc37829a2b2ff2a"},{url:"resources/dia_zh-tw.txt",revision:"838b0f7bd695a5a2a0c5ebbd83d33296"},{url:"resources/dia_zh.txt",revision:"7736de1c10669ab8f284558fb5dc434c"},{url:"favicon.ico",revision:"fab2d88b37c72d83607527573de45281"},{url:"images/manifest.json",revision:"389fa448cb99794bece27ffcb216abee"},{url:"images/logo.png",revision:"89630b64b911ebe0daa3dfe442087cfa"},{url:"images/drawlogo.svg",revision:"4bf4d14ebcf072d8bd4c5a1c89e88fc6"},{url:"images/drawlogo48.png",revision:"8b13428373aca67b895364d025f42417"},{url:"images/drawlogo-gray.svg",revision:"0aabacbc0873816e1e09e4736ae44c7d"},{url:"images/drawlogo-text-bottom.svg",revision:"f6c438823ab31f290940bd4feb8dd9c2"},{url:"images/default-user.jpg",revision:"2c399696a87c8921f12d2f9e1990cc6e"},{url:"images/logo-flat-small.png",revision:"4b178e59ff499d6dd1894fc498b59877"},{url:"images/apple-touch-icon.png",revision:"73da7989a23ce9a4be565ec65658a239"},{url:"images/favicon-16x16.png",revision:"1a79d5461a5d2bf21f6652e0ac20d6e5"},{url:"images/favicon-32x32.png",revision:"e3b92da2febe70bad5372f6f3474b034"},{url:"images/android-chrome-196x196.png",revision:"f8c045b2d7b1c719fda64edab04c415c"},{url:"images/android-chrome-512x512.png",revision:"959b5fac2453963ff6d60fb85e4b73fd"},{url:"images/delete.png",revision:"5f2350f2fd20f1a229637aed32ed8f29"},{url:"images/droptarget.png",revision:"bbf7f563fb6784de1ce96f329519b043"},{url:"images/help.png",revision:"9266c6c3915bd33c243d80037d37bf61"},{url:"images/download.png",revision:"35418dd7bd48d87502c71b578cc6c37f"},{url:"images/logo-flat.png",revision:"038070ab43aee6e54a791211859fc67b"},{url:"images/google-drive-logo.svg",revision:"5d9f2f5bbc7dcc252730a0072bb23059"},{url:"images/onedrive-logo.svg",revision:"3645b344ec0634c1290dd58d7dc87b97"},{url:"images/dropbox-logo.svg",revision:"e6be408c77cf9c82d41ac64fa854280a"},{url:"images/github-logo.svg",revision:"a1a999b69a275eac0cb918360ac05ae1"},{url:"images/gitlab-logo.svg",revision:"0faea8c818899e58533e153c44b10517"},{url:"images/trello-logo.svg",revision:"006fd0d7d70d7e95dc691674cb12e044"},{url:"images/osa_drive-harddisk.png",revision:"b954e1ae772087c5b4c6ae797e1f9649"},{url:"images/osa_database.png",revision:"c350d9d9b95f37b6cfe798b40ede5fb0"},{url:"images/google-drive-logo-white.svg",revision:"f329d8b1be7778515a85b93fc35d9f26"},{url:"images/dropbox-logo-white.svg",revision:"4ea8299ac3bc31a16f199ee3aec223bf"},{url:"images/onedrive-logo-white.svg",revision:"b3602fa0fc947009cff3f33a581cff4d"},{url:"images/github-logo-white.svg",revision:"537b1127b3ca0f95b45782d1304fb77a"},{url:"images/gitlab-logo-white.svg",revision:"5fede9ac2f394c716b8c23e3fddc3910"},{url:"images/trello-logo-white-orange.svg",revision:"e2a0a52ba3766682f138138d10a75eb5"},{url:"images/logo-confluence.png",revision:"ed1e55d44ae5eba8f999aba2c93e8331"},{url:"images/logo-jira.png",revision:"f8d460555a0d1f87cfd901e940666629"},{url:"images/clear.gif",revision:"db13c778e4382e0b55258d0f811d5d70"},{url:"images/spin.gif",revision:"487cbb40b9ced439aa1ad914e816d773"},{url:"images/checkmark.gif",revision:"ba764ce62f2bf952df5bbc2bb4d381c5"},{url:"images/hs.png",revision:"fefa1a03d92ebad25c88dca94a0b63db"},{url:"images/aui-wait.gif",revision:"5a474bcbd8d2f2826f03d10ea44bf60e"},{url:"mxgraph/css/common.css",revision:"618b42f0bde0c7685e04811c25dc2b3e"},{url:"mxgraph/images/expanded.gif",revision:"2b67c2c035af1e9a5cc814f0d22074cf"},{url:"mxgraph/images/collapsed.gif",revision:"73cc826da002a3d740ca4ce6ec5c1f4a"},{url:"mxgraph/images/maximize.gif",revision:"5cd13d6925493ab51e876694cc1c2ec2"},{url:"mxgraph/images/minimize.gif",revision:"8957741b9b0f86af9438775f2aadbb54"},{url:"mxgraph/images/close.gif",revision:"8b84669812ac7382984fca35de8da48b"},{url:"mxgraph/images/resize.gif",revision:"a6477612b3567a34033f9cac6184eed3"},{url:"mxgraph/images/separator.gif",revision:"7819742ff106c97da7a801c2372bbbe5"},{url:"mxgraph/images/window.gif",revision:"fd9a21dd4181f98052a202a0a01f18ab"},{url:"mxgraph/images/window-title.gif",revision:"3fb1d6c43246cdf991a11dfe826dfe99"},{url:"mxgraph/images/button.gif",revision:"00759bdc3ad218fa739f584369541809"},{url:"mxgraph/images/point.gif",revision:"83a43717b284902442620f61bc4e9fa6"}],{ignoreURLParametersMatching:[/.*/]})}));
 //# sourceMappingURL=service-worker.js.map

programming_language: JavaScript
filename: service-worker.js.map
change_type: ModificationType.MODIFY
diff: @@ -1 +1 @@
-{"version":3,"file":"service-worker.js","sources":["../../../../../tmp/47be77072c8f5a091f9e8b37e334731c/service-worker.js"],"sourcesContent":["import {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/usr/lib/node_modules/workbox-cli/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.addEventListener('message', (event) => {\n  if (event.data && event.data.type === 'SKIP_WAITING') {\n    self.skipWaiting();\n  }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n  {\n    \"url\": \"js/app.min.js\",\n    \"revision\": \"24ace1901711d6cab23a4ef379de9120\"\n  },\n  {\n    \"url\": \"js/extensions.min.js\",\n    \"revision\": \"3834501a2250d98fc7207a6ae6298f14\"\n  },\n  {\n    \"url\": \"js/orgchart.min.js\",\n    \"revision\": \"619d8c4dab47b81868916df31f55478b\"\n  },\n  {\n    \"url\": \"js/stencils.min.js\",\n    \"revision\": \"698f1f70f64466ff6ae9280cd91cd23f\"\n  },\n  {\n    \"url\": \"js/shapes-14-6-5.min.js\",\n    \"revision\": \"95f54e7999c9fba2a1d65b4fe4f634f3\"\n  },\n  {\n    \"url\": \"js/math-print.js\",\n    \"revision\": \"cf64f6a493a8cb5079f2b70813e478d7\"\n  },\n  {\n    \"url\": \"index.html\",\n    \"revision\": \"8279349dc2b6543249d7e51c2d1cf92e\"\n  },\n  {\n    \"url\": \"open.html\",\n    \"revision\": \"d71816b3b00e769fc6019fcdd6921662\"\n  },\n  {\n    \"url\": \"styles/fonts/ArchitectsDaughter-Regular.ttf\",\n    \"revision\": \"31c2153c0530e32553b31a49b3d70736\"\n  },\n  {\n    \"url\": \"styles/grapheditor.css\",\n    \"revision\": \"c80c6d3bdaa85e0fbc9d9b174ef763f4\"\n  },\n  {\n    \"url\": \"styles/atlas.css\",\n    \"revision\": \"d627cfef208f13a9cff1670f143c6348\"\n  },\n  {\n    \"url\": \"styles/dark.css\",\n    \"revision\": \"436ac9aaaa67eb15e64c368cc05ba5a7\"\n  },\n  {\n    \"url\": \"js/dropbox/Dropbox-sdk.min.js\",\n    \"revision\": \"4b9842892aa37b156db0a8364b7a83b0\"\n  },\n  {\n    \"url\": \"js/onedrive/OneDrive.js\",\n    \"revision\": \"505e8280346666f7ee801bc59521fa67\"\n  },\n  {\n    \"url\": \"js/viewer-static.min.js\",\n    \"revision\": \"c7148759e7b2120d703b4cbf3dfda60f\"\n  },\n  {\n    \"url\": \"connect/jira/editor-1-3-3.html\",\n    \"revision\": \"6ec59ca5f689067e52cdda13f22ed89f\"\n  },\n  {\n    \"url\": \"connect/jira/viewerPanel-1-3-12.html\",\n    \"revision\": \"9adfcef71f6a8c68c20c2d2fba35fe19\"\n  },\n  {\n    \"url\": \"connect/jira/fullScreenViewer-1-3-3.html\",\n    \"revision\": \"29c803d9aa4dc0718540c916a0a4e62c\"\n  },\n  {\n    \"url\": \"connect/jira/viewerPanel.js\",\n    \"revision\": \"8d298de3aeaa32cad74b5d4b53ed3d4f\"\n  },\n  {\n    \"url\": \"connect/jira/spinner.gif\",\n    \"revision\": \"7d857ab9d86123e93d74d48e958fe743\"\n  },\n  {\n    \"url\": \"connect/jira/editor.js\",\n    \"revision\": \"d1c80a7301cd26c6dc31b1fdce9e37e5\"\n  },\n  {\n    \"url\": \"connect/jira/fullscreen-viewer-init.js\",\n    \"revision\": \"e00ad51fc16b87c362d6eaf930ab1fa5\"\n  },\n  {\n    \"url\": \"connect/jira/fullscreen-viewer.js\",\n    \"revision\": \"d5748a4fe01b7e747914ebd3e37c9de2\"\n  },\n  {\n    \"url\": \"plugins/connectJira.js\",\n    \"revision\": \"4cefa13414e0d406550f3c073923080c\"\n  },\n  {\n    \"url\": \"plugins/cConf-comments.js\",\n    \"revision\": \"ee6764429bf47a8545aa1cedacee718e\"\n  },\n  {\n    \"url\": \"plugins/cConf-1-4-8.js\",\n    \"revision\": \"91c04e236ba9dbdb26d8565b3354e00a\"\n  },\n  {\n    \"url\": \"connect/confluence/connectUtils-1-4-8.js\",\n    \"revision\": \"9b93b748a41a6f9444ff92810b7908b8\"\n  },\n  {\n    \"url\": \"connect/new_common/cac.js\",\n    \"revision\": \"6d666b6789b51dabc5a1af53a9db5d3d\"\n  },\n  {\n    \"url\": \"connect/gdrive_common/gac.js\",\n    \"revision\": \"78f85e79f15f56b8b8d83c90f4a15679\"\n  },\n  {\n    \"url\": \"connect/onedrive_common/ac.js\",\n    \"revision\": \"d10d4603e86da7c9af277dac832e8e06\"\n  },\n  {\n    \"url\": \"connect/confluence/viewer-init.js\",\n    \"revision\": \"8aa8d02147def4535563bc65632a3e6d\"\n  },\n  {\n    \"url\": \"connect/confluence/viewer.js\",\n    \"revision\": \"e865c0c1820464235ca8f0b9dc6eb71e\"\n  },\n  {\n    \"url\": \"connect/confluence/viewer-1-4-42.html\",\n    \"revision\": \"083a8751312bdb6485f2a4ced206e086\"\n  },\n  {\n    \"url\": \"connect/confluence/macroEditor-1-4-8.html\",\n    \"revision\": \"b2908e71f755a069fe6487e1e705736c\"\n  },\n  {\n    \"url\": \"connect/confluence/includeDiagram-1-4-8.js\",\n    \"revision\": \"2947a24a48572562d9fcb55b20d22fca\"\n  },\n  {\n    \"url\": \"connect/confluence/includeDiagram.html\",\n    \"revision\": \"bbc4156ca3902347d3c8121dd08a89d7\"\n  },\n  {\n    \"url\": \"connect/confluence/macro-editor.js\",\n    \"revision\": \"0bd745f0c23bba15ad1ff8e7b8e14987\"\n  },\n  {\n    \"url\": \"math/es5/startup.js\",\n    \"revision\": \"dc7130cdc866593293dbb5dde11ceb40\"\n  },\n  {\n    \"url\": \"math/es5/core.js\",\n    \"revision\": \"f71bc0bfb7d2ac8261747f97a5d47dd4\"\n  },\n  {\n    \"url\": \"math/es5/ui/safe.js\",\n    \"revision\": \"8c1fcfee7c879588ad409edcdd9cce53\"\n  },\n  {\n    \"url\": \"math/es5/output/svg.js\",\n    \"revision\": \"4f55967d16197ebb01b86356d8ab179a\"\n  },\n  {\n    \"url\": \"math/es5/input/tex.js\",\n    \"revision\": \"5c4f470da2ccb1acf85041fcecd6fff6\"\n  },\n  {\n    \"url\": \"math/es5/input/asciimath.js\",\n    \"revision\": \"c2d4076dd8e26d509bfe3a378e71cfa7\"\n  },\n  {\n    \"url\": \"math/es5/output/svg/fonts/tex.js\",\n    \"revision\": \"6eab785a3788ea805bd2b552d1f0aab8\"\n  },\n  {\n    \"url\": \"resources/dia.txt\",\n    \"revision\": \"f2bb9f811ec054499a5eca5add259a96\"\n  },\n  {\n    \"url\": \"resources/dia_am.txt\",\n    \"revision\": \"757af1ba9c187b2db9865965be4584d4\"\n  },\n  {\n    \"url\": \"resources/dia_ar.txt\",\n    \"revision\": \"f139fee88b934da5fc0e51c800449d2e\"\n  },\n  {\n    \"url\": \"resources/dia_bg.txt\",\n    \"revision\": \"b59ea02be4c9c5b60791327a42503115\"\n  },\n  {\n    \"url\": \"resources/dia_bn.txt\",\n    \"revision\": \"c7bb29b3be89b945859a9dbc996e3977\"\n  },\n  {\n    \"url\": \"resources/dia_bs.txt\",\n    \"revision\": \"c8faa32407ce808dd181f1708300dc65\"\n  },\n  {\n    \"url\": \"resources/dia_ca.txt\",\n    \"revision\": \"b2a3ab72212774891c4698f3aa67764b\"\n  },\n  {\n    \"url\": \"resources/dia_cs.txt\",\n    \"revision\": \"621536d118c10c11e0455bdc21d90495\"\n  },\n  {\n    \"url\": \"resources/dia_da.txt\",\n    \"revision\": \"2c9232e5e9cef27da9172a187a933115\"\n  },\n  {\n    \"url\": \"resources/dia_de.txt\",\n    \"revision\": \"112d8443021165e8c7d9994f97ddaf48\"\n  },\n  {\n    \"url\": \"resources/dia_el.txt\",\n    \"revision\": \"cbeb9bcc4a8a37ab0cce55d996c3b627\"\n  },\n  {\n    \"url\": \"resources/dia_eo.txt\",\n    \"revision\": \"c4d5feab9f7ce5d22f8487f4fc2bc585\"\n  },\n  {\n    \"url\": \"resources/dia_es.txt\",\n    \"revision\": \"d0d9810976aeb9b9fef0118aca1c3815\"\n  },\n  {\n    \"url\": \"resources/dia_et.txt\",\n    \"revision\": \"5303fb8a71bf11794f3cbe9324fd3d2d\"\n  },\n  {\n    \"url\": \"resources/dia_eu.txt\",\n    \"revision\": \"552e57dff8a9233098009af48380f066\"\n  },\n  {\n    \"url\": \"resources/dia_fa.txt\",\n    \"revision\": \"a2bd813de7a95f881a1ac941fab6ea29\"\n  },\n  {\n    \"url\": \"resources/dia_fi.txt\",\n    \"revision\": \"dbbd5d0126ad8f43fe18735f4f65b604\"\n  },\n  {\n    \"url\": \"resources/dia_fil.txt\",\n    \"revision\": \"0efbb4b0779c2314496e2209272f1729\"\n  },\n  {\n    \"url\": \"resources/dia_fr.txt\",\n    \"revision\": \"60a1a016d2ba9f171848b48a3b4baadd\"\n  },\n  {\n    \"url\": \"resources/dia_gl.txt\",\n    \"revision\": \"089dd7084f23978ef1696e674bcc4cab\"\n  },\n  {\n    \"url\": \"resources/dia_gu.txt\",\n    \"revision\": \"e00b05d0b7fe33e23a8c589c8226d2a7\"\n  },\n  {\n    \"url\": \"resources/dia_he.txt\",\n    \"revision\": \"bba5f189a07b266f40dfed938b0068c6\"\n  },\n  {\n    \"url\": \"resources/dia_hi.txt\",\n    \"revision\": \"d580a9d0f5545626c9cc37daafc51a3c\"\n  },\n  {\n    \"url\": \"resources/dia_hr.txt\",\n    \"revision\": \"97deaf0afd81d692f005dc02f329ac88\"\n  },\n  {\n    \"url\": \"resources/dia_hu.txt\",\n    \"revision\": \"465d05499416a9adeb023313a8160424\"\n  },\n  {\n    \"url\": \"resources/dia_id.txt\",\n    \"revision\": \"3e5ab9a1098930d4dd84278169f49b86\"\n  },\n  {\n    \"url\": \"resources/dia_it.txt\",\n    \"revision\": \"da633c90cadf73d0df46991b5586df54\"\n  },\n  {\n    \"url\": \"resources/dia_ja.txt\",\n    \"revision\": \"95dcedfc13dd97fb2ae63184d3ae14fc\"\n  },\n  {\n    \"url\": \"resources/dia_kn.txt\",\n    \"revision\": \"965dc84ec662842d0c313674632a5544\"\n  },\n  {\n    \"url\": \"resources/dia_ko.txt\",\n    \"revision\": \"e49ee6d9c9bbc77276cb85c97069b919\"\n  },\n  {\n    \"url\": \"resources/dia_lt.txt\",\n    \"revision\": \"51465381c456510952d6269952dced5e\"\n  },\n  {\n    \"url\": \"resources/dia_lv.txt\",\n    \"revision\": \"3ac8dd9a8bb6e7ec1143ab46cd70b96a\"\n  },\n  {\n    \"url\": \"resources/dia_ml.txt\",\n    \"revision\": \"11910b85c2616d84d97651e97cf11d7a\"\n  },\n  {\n    \"url\": \"resources/dia_mr.txt\",\n    \"revision\": \"8497141bca86742111017248e26a07ea\"\n  },\n  {\n    \"url\": \"resources/dia_ms.txt\",\n    \"revision\": \"ee74d690582d04322dba57dbc7224c99\"\n  },\n  {\n    \"url\": \"resources/dia_my.txt\",\n    \"revision\": \"f2bb9f811ec054499a5eca5add259a96\"\n  },\n  {\n    \"url\": \"resources/dia_nl.txt\",\n    \"revision\": \"35a2a6ece18b1c59893925d547425261\"\n  },\n  {\n    \"url\": \"resources/dia_no.txt\",\n    \"revision\": \"b0b4fe8a1c31db304d431935cdab14b8\"\n  },\n  {\n    \"url\": \"resources/dia_pl.txt\",\n    \"revision\": \"c86f5e75805a2903734a1c9a7a81d63b\"\n  },\n  {\n    \"url\": \"resources/dia_pt-br.txt\",\n    \"revision\": \"2eee01639ff6775e24220fbfa3c9c788\"\n  },\n  {\n    \"url\": \"resources/dia_pt.txt\",\n    \"revision\": \"63407d1bd46853ff9e3ed3b9ace9602f\"\n  },\n  {\n    \"url\": \"resources/dia_ro.txt\",\n    \"revision\": \"e2e5f6a838ae71143e6c50b290af7bb1\"\n  },\n  {\n    \"url\": \"resources/dia_ru.txt\",\n    \"revision\": \"38de6a4f45437cdd66dc3decc48c8841\"\n  },\n  {\n    \"url\": \"resources/dia_si.txt\",\n    \"revision\": \"f2bb9f811ec054499a5eca5add259a96\"\n  },\n  {\n    \"url\": \"resources/dia_sk.txt\",\n    \"revision\": \"58fffaadfebfec4deafcfc5c20178b57\"\n  },\n  {\n    \"url\": \"resources/dia_sl.txt\",\n    \"revision\": \"a66ac8feda2a580540b7b840603c1e23\"\n  },\n  {\n    \"url\": \"resources/dia_sr.txt\",\n    \"revision\": \"9cb339e7ca6db727cbcec145b01a7bdb\"\n  },\n  {\n    \"url\": \"resources/dia_sv.txt\",\n    \"revision\": \"84338c7bffb013c00b71ee6868a55b9f\"\n  },\n  {\n    \"url\": \"resources/dia_sw.txt\",\n    \"revision\": \"476b03b2ee388853d15f8f7924a10e40\"\n  },\n  {\n    \"url\": \"resources/dia_ta.txt\",\n    \"revision\": \"ef879e2a9c097abe6b578a22df399257\"\n  },\n  {\n    \"url\": \"resources/dia_te.txt\",\n    \"revision\": \"efd7ac431c2163371f13f1e0cdb05aaa\"\n  },\n  {\n    \"url\": \"resources/dia_th.txt\",\n    \"revision\": \"1ab6b69b33a88ed897c96a885165a566\"\n  },\n  {\n    \"url\": \"resources/dia_tr.txt\",\n    \"revision\": \"4c1bae6ee6079bf94c4e7e86a49b2684\"\n  },\n  {\n    \"url\": \"resources/dia_uk.txt\",\n    \"revision\": \"612e5ccdf38b00749ff4926cd1ea2b3f\"\n  },\n  {\n    \"url\": \"resources/dia_vi.txt\",\n    \"revision\": \"757058bddd335a0c0bc37829a2b2ff2a\"\n  },\n  {\n    \"url\": \"resources/dia_zh-tw.txt\",\n    \"revision\": \"838b0f7bd695a5a2a0c5ebbd83d33296\"\n  },\n  {\n    \"url\": \"resources/dia_zh.txt\",\n    \"revision\": \"7736de1c10669ab8f284558fb5dc434c\"\n  },\n  {\n    \"url\": \"favicon.ico\",\n    \"revision\": \"fab2d88b37c72d83607527573de45281\"\n  },\n  {\n    \"url\": \"images/manifest.json\",\n    \"revision\": \"389fa448cb99794bece27ffcb216abee\"\n  },\n  {\n    \"url\": \"images/logo.png\",\n    \"revision\": \"89630b64b911ebe0daa3dfe442087cfa\"\n  },\n  {\n    \"url\": \"images/drawlogo.svg\",\n    \"revision\": \"4bf4d14ebcf072d8bd4c5a1c89e88fc6\"\n  },\n  {\n    \"url\": \"images/drawlogo48.png\",\n    \"revision\": \"8b13428373aca67b895364d025f42417\"\n  },\n  {\n    \"url\": \"images/drawlogo-gray.svg\",\n    \"revision\": \"0aabacbc0873816e1e09e4736ae44c7d\"\n  },\n  {\n    \"url\": \"images/drawlogo-text-bottom.svg\",\n    \"revision\": \"f6c438823ab31f290940bd4feb8dd9c2\"\n  },\n  {\n    \"url\": \"images/default-user.jpg\",\n    \"revision\": \"2c399696a87c8921f12d2f9e1990cc6e\"\n  },\n  {\n    \"url\": \"images/logo-flat-small.png\",\n    \"revision\": \"4b178e59ff499d6dd1894fc498b59877\"\n  },\n  {\n    \"url\": \"images/apple-touch-icon.png\",\n    \"revision\": \"73da7989a23ce9a4be565ec65658a239\"\n  },\n  {\n    \"url\": \"images/favicon-16x16.png\",\n    \"revision\": \"1a79d5461a5d2bf21f6652e0ac20d6e5\"\n  },\n  {\n    \"url\": \"images/favicon-32x32.png\",\n    \"revision\": \"e3b92da2febe70bad5372f6f3474b034\"\n  },\n  {\n    \"url\": \"images/android-chrome-196x196.png\",\n    \"revision\": \"f8c045b2d7b1c719fda64edab04c415c\"\n  },\n  {\n    \"url\": \"images/android-chrome-512x512.png\",\n    \"revision\": \"959b5fac2453963ff6d60fb85e4b73fd\"\n  },\n  {\n    \"url\": \"images/delete.png\",\n    \"revision\": \"5f2350f2fd20f1a229637aed32ed8f29\"\n  },\n  {\n    \"url\": \"images/droptarget.png\",\n    \"revision\": \"bbf7f563fb6784de1ce96f329519b043\"\n  },\n  {\n    \"url\": \"images/help.png\",\n    \"revision\": \"9266c6c3915bd33c243d80037d37bf61\"\n  },\n  {\n    \"url\": \"images/download.png\",\n    \"revision\": \"35418dd7bd48d87502c71b578cc6c37f\"\n  },\n  {\n    \"url\": \"images/logo-flat.png\",\n    \"revision\": \"038070ab43aee6e54a791211859fc67b\"\n  },\n  {\n    \"url\": \"images/google-drive-logo.svg\",\n    \"revision\": \"5d9f2f5bbc7dcc252730a0072bb23059\"\n  },\n  {\n    \"url\": \"images/onedrive-logo.svg\",\n    \"revision\": \"3645b344ec0634c1290dd58d7dc87b97\"\n  },\n  {\n    \"url\": \"images/dropbox-logo.svg\",\n    \"revision\": \"e6be408c77cf9c82d41ac64fa854280a\"\n  },\n  {\n    \"url\": \"images/github-logo.svg\",\n    \"revision\": \"a1a999b69a275eac0cb918360ac05ae1\"\n  },\n  {\n    \"url\": \"images/gitlab-logo.svg\",\n    \"revision\": \"0faea8c818899e58533e153c44b10517\"\n  },\n  {\n    \"url\": \"images/trello-logo.svg\",\n    \"revision\": \"006fd0d7d70d7e95dc691674cb12e044\"\n  },\n  {\n    \"url\": \"images/osa_drive-harddisk.png\",\n    \"revision\": \"b954e1ae772087c5b4c6ae797e1f9649\"\n  },\n  {\n    \"url\": \"images/osa_database.png\",\n    \"revision\": \"c350d9d9b95f37b6cfe798b40ede5fb0\"\n  },\n  {\n    \"url\": \"images/google-drive-logo-white.svg\",\n    \"revision\": \"f329d8b1be7778515a85b93fc35d9f26\"\n  },\n  {\n    \"url\": \"images/dropbox-logo-white.svg\",\n    \"revision\": \"4ea8299ac3bc31a16f199ee3aec223bf\"\n  },\n  {\n    \"url\": \"images/onedrive-logo-white.svg\",\n    \"revision\": \"b3602fa0fc947009cff3f33a581cff4d\"\n  },\n  {\n    \"url\": \"images/github-logo-white.svg\",\n    \"revision\": \"537b1127b3ca0f95b45782d1304fb77a\"\n  },\n  {\n    \"url\": \"images/gitlab-logo-white.svg\",\n    \"revision\": \"5fede9ac2f394c716b8c23e3fddc3910\"\n  },\n  {\n    \"url\": \"images/trello-logo-white-orange.svg\",\n    \"revision\": \"e2a0a52ba3766682f138138d10a75eb5\"\n  },\n  {\n    \"url\": \"images/logo-confluence.png\",\n    \"revision\": \"ed1e55d44ae5eba8f999aba2c93e8331\"\n  },\n  {\n    \"url\": \"images/logo-jira.png\",\n    \"revision\": \"f8d460555a0d1f87cfd901e940666629\"\n  },\n  {\n    \"url\": \"images/clear.gif\",\n    \"revision\": \"db13c778e4382e0b55258d0f811d5d70\"\n  },\n  {\n    \"url\": \"images/spin.gif\",\n    \"revision\": \"487cbb40b9ced439aa1ad914e816d773\"\n  },\n  {\n    \"url\": \"images/checkmark.gif\",\n    \"revision\": \"ba764ce62f2bf952df5bbc2bb4d381c5\"\n  },\n  {\n    \"url\": \"images/hs.png\",\n    \"revision\": \"fefa1a03d92ebad25c88dca94a0b63db\"\n  },\n  {\n    \"url\": \"images/aui-wait.gif\",\n    \"revision\": \"5a474bcbd8d2f2826f03d10ea44bf60e\"\n  },\n  {\n    \"url\": \"mxgraph/css/common.css\",\n    \"revision\": \"618b42f0bde0c7685e04811c25dc2b3e\"\n  },\n  {\n    \"url\": \"mxgraph/images/expanded.gif\",\n    \"revision\": \"2b67c2c035af1e9a5cc814f0d22074cf\"\n  },\n  {\n    \"url\": \"mxgraph/images/collapsed.gif\",\n    \"revision\": \"73cc826da002a3d740ca4ce6ec5c1f4a\"\n  },\n  {\n    \"url\": \"mxgraph/images/maximize.gif\",\n    \"revision\": \"5cd13d6925493ab51e876694cc1c2ec2\"\n  },\n  {\n    \"url\": \"mxgraph/images/minimize.gif\",\n    \"revision\": \"8957741b9b0f86af9438775f2aadbb54\"\n  },\n  {\n    \"url\": \"mxgraph/images/close.gif\",\n    \"revision\": \"8b84669812ac7382984fca35de8da48b\"\n  },\n  {\n    \"url\": \"mxgraph/images/resize.gif\",\n    \"revision\": \"a6477612b3567a34033f9cac6184eed3\"\n  },\n  {\n    \"url\": \"mxgraph/images/separator.gif\",\n    \"revision\": \"7819742ff106c97da7a801c2372bbbe5\"\n  },\n  {\n    \"url\": \"mxgraph/images/window.gif\",\n    \"revision\": \"fd9a21dd4181f98052a202a0a01f18ab\"\n  },\n  {\n    \"url\": \"mxgraph/images/window-title.gif\",\n    \"revision\": \"3fb1d6c43246cdf991a11dfe826dfe99\"\n  },\n  {\n    \"url\": \"mxgraph/images/button.gif\",\n    \"revision\": \"00759bdc3ad218fa739f584369541809\"\n  },\n  {\n    \"url\": \"mxgraph/images/point.gif\",\n    \"revision\": \"83a43717b284902442620f61bc4e9fa6\"\n  }\n], {\n  \"ignoreURLParametersMatching\": [/.*/]\n});\n\n\n\n\n\n\n\n\n"],"names":["self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision","ignoreURLParametersMatching"],"mappings":"szBAmBAA,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACN,IAWHC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,qCAEb,CACDC,4BAA+B,CAAC"}
\ No newline at end of file
+{"version":3,"file":"service-worker.js","sources":["../../../../../tmp/5bb4de72dde9a7cf368cbbc2ddd18031/service-worker.js"],"sourcesContent":["import {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/usr/lib/node_modules/workbox-cli/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.addEventListener('message', (event) => {\n  if (event.data && event.data.type === 'SKIP_WAITING') {\n    self.skipWaiting();\n  }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n  {\n    \"url\": \"js/app.min.js\",\n    \"revision\": \"94d4887ca9c27d6b300b5dbc85e155ab\"\n  },\n  {\n    \"url\": \"js/extensions.min.js\",\n    \"revision\": \"3834501a2250d98fc7207a6ae6298f14\"\n  },\n  {\n    \"url\": \"js/orgchart.min.js\",\n    \"revision\": \"619d8c4dab47b81868916df31f55478b\"\n  },\n  {\n    \"url\": \"js/stencils.min.js\",\n    \"revision\": \"698f1f70f64466ff6ae9280cd91cd23f\"\n  },\n  {\n    \"url\": \"js/shapes-14-6-5.min.js\",\n    \"revision\": \"95f54e7999c9fba2a1d65b4fe4f634f3\"\n  },\n  {\n    \"url\": \"js/math-print.js\",\n    \"revision\": \"cf64f6a493a8cb5079f2b70813e478d7\"\n  },\n  {\n    \"url\": \"index.html\",\n    \"revision\": \"d29a8e0ad73c5cfd3dc1e35361bf558b\"\n  },\n  {\n    \"url\": \"open.html\",\n    \"revision\": \"d71816b3b00e769fc6019fcdd6921662\"\n  },\n  {\n    \"url\": \"styles/fonts/ArchitectsDaughter-Regular.ttf\",\n    \"revision\": \"31c2153c0530e32553b31a49b3d70736\"\n  },\n  {\n    \"url\": \"styles/grapheditor.css\",\n    \"revision\": \"c80c6d3bdaa85e0fbc9d9b174ef763f4\"\n  },\n  {\n    \"url\": \"styles/atlas.css\",\n    \"revision\": \"d627cfef208f13a9cff1670f143c6348\"\n  },\n  {\n    \"url\": \"styles/dark.css\",\n    \"revision\": \"436ac9aaaa67eb15e64c368cc05ba5a7\"\n  },\n  {\n    \"url\": \"js/dropbox/Dropbox-sdk.min.js\",\n    \"revision\": \"4b9842892aa37b156db0a8364b7a83b0\"\n  },\n  {\n    \"url\": \"js/onedrive/OneDrive.js\",\n    \"revision\": \"505e8280346666f7ee801bc59521fa67\"\n  },\n  {\n    \"url\": \"js/viewer-static.min.js\",\n    \"revision\": \"93a4740f593c525cf58cf653d05e8373\"\n  },\n  {\n    \"url\": \"connect/jira/editor-1-3-3.html\",\n    \"revision\": \"6ec59ca5f689067e52cdda13f22ed89f\"\n  },\n  {\n    \"url\": \"connect/jira/viewerPanel-1-3-12.html\",\n    \"revision\": \"9adfcef71f6a8c68c20c2d2fba35fe19\"\n  },\n  {\n    \"url\": \"connect/jira/fullScreenViewer-1-3-3.html\",\n    \"revision\": \"29c803d9aa4dc0718540c916a0a4e62c\"\n  },\n  {\n    \"url\": \"connect/jira/viewerPanel.js\",\n    \"revision\": \"8d298de3aeaa32cad74b5d4b53ed3d4f\"\n  },\n  {\n    \"url\": \"connect/jira/spinner.gif\",\n    \"revision\": \"7d857ab9d86123e93d74d48e958fe743\"\n  },\n  {\n    \"url\": \"connect/jira/editor.js\",\n    \"revision\": \"d1c80a7301cd26c6dc31b1fdce9e37e5\"\n  },\n  {\n    \"url\": \"connect/jira/fullscreen-viewer-init.js\",\n    \"revision\": \"e00ad51fc16b87c362d6eaf930ab1fa5\"\n  },\n  {\n    \"url\": \"connect/jira/fullscreen-viewer.js\",\n    \"revision\": \"d5748a4fe01b7e747914ebd3e37c9de2\"\n  },\n  {\n    \"url\": \"plugins/connectJira.js\",\n    \"revision\": \"4cefa13414e0d406550f3c073923080c\"\n  },\n  {\n    \"url\": \"plugins/cConf-comments.js\",\n    \"revision\": \"ee6764429bf47a8545aa1cedacee718e\"\n  },\n  {\n    \"url\": \"plugins/cConf-1-4-8.js\",\n    \"revision\": \"91c04e236ba9dbdb26d8565b3354e00a\"\n  },\n  {\n    \"url\": \"connect/confluence/connectUtils-1-4-8.js\",\n    \"revision\": \"9b93b748a41a6f9444ff92810b7908b8\"\n  },\n  {\n    \"url\": \"connect/new_common/cac.js\",\n    \"revision\": \"6d666b6789b51dabc5a1af53a9db5d3d\"\n  },\n  {\n    \"url\": \"connect/gdrive_common/gac.js\",\n    \"revision\": \"78f85e79f15f56b8b8d83c90f4a15679\"\n  },\n  {\n    \"url\": \"connect/onedrive_common/ac.js\",\n    \"revision\": \"d10d4603e86da7c9af277dac832e8e06\"\n  },\n  {\n    \"url\": \"connect/confluence/viewer-init.js\",\n    \"revision\": \"8aa8d02147def4535563bc65632a3e6d\"\n  },\n  {\n    \"url\": \"connect/confluence/viewer.js\",\n    \"revision\": \"e865c0c1820464235ca8f0b9dc6eb71e\"\n  },\n  {\n    \"url\": \"connect/confluence/viewer-1-4-42.html\",\n    \"revision\": \"083a8751312bdb6485f2a4ced206e086\"\n  },\n  {\n    \"url\": \"connect/confluence/macroEditor-1-4-8.html\",\n    \"revision\": \"b2908e71f755a069fe6487e1e705736c\"\n  },\n  {\n    \"url\": \"connect/confluence/includeDiagram-1-4-8.js\",\n    \"revision\": \"2947a24a48572562d9fcb55b20d22fca\"\n  },\n  {\n    \"url\": \"connect/confluence/includeDiagram.html\",\n    \"revision\": \"bbc4156ca3902347d3c8121dd08a89d7\"\n  },\n  {\n    \"url\": \"connect/confluence/macro-editor.js\",\n    \"revision\": \"0bd745f0c23bba15ad1ff8e7b8e14987\"\n  },\n  {\n    \"url\": \"math/es5/startup.js\",\n    \"revision\": \"dc7130cdc866593293dbb5dde11ceb40\"\n  },\n  {\n    \"url\": \"math/es5/core.js\",\n    \"revision\": \"f71bc0bfb7d2ac8261747f97a5d47dd4\"\n  },\n  {\n    \"url\": \"math/es5/ui/safe.js\",\n    \"revision\": \"8c1fcfee7c879588ad409edcdd9cce53\"\n  },\n  {\n    \"url\": \"math/es5/output/svg.js\",\n    \"revision\": \"4f55967d16197ebb01b86356d8ab179a\"\n  },\n  {\n    \"url\": \"math/es5/input/tex.js\",\n    \"revision\": \"5c4f470da2ccb1acf85041fcecd6fff6\"\n  },\n  {\n    \"url\": \"math/es5/input/asciimath.js\",\n    \"revision\": \"c2d4076dd8e26d509bfe3a378e71cfa7\"\n  },\n  {\n    \"url\": \"math/es5/output/svg/fonts/tex.js\",\n    \"revision\": \"6eab785a3788ea805bd2b552d1f0aab8\"\n  },\n  {\n    \"url\": \"resources/dia.txt\",\n    \"revision\": \"f2bb9f811ec054499a5eca5add259a96\"\n  },\n  {\n    \"url\": \"resources/dia_am.txt\",\n    \"revision\": \"757af1ba9c187b2db9865965be4584d4\"\n  },\n  {\n    \"url\": \"resources/dia_ar.txt\",\n    \"revision\": \"f139fee88b934da5fc0e51c800449d2e\"\n  },\n  {\n    \"url\": \"resources/dia_bg.txt\",\n    \"revision\": \"b59ea02be4c9c5b60791327a42503115\"\n  },\n  {\n    \"url\": \"resources/dia_bn.txt\",\n    \"revision\": \"c7bb29b3be89b945859a9dbc996e3977\"\n  },\n  {\n    \"url\": \"resources/dia_bs.txt\",\n    \"revision\": \"c8faa32407ce808dd181f1708300dc65\"\n  },\n  {\n    \"url\": \"resources/dia_ca.txt\",\n    \"revision\": \"8dc84ddf5fc455eee7390adb7bb8fb42\"\n  },\n  {\n    \"url\": \"resources/dia_cs.txt\",\n    \"revision\": \"621536d118c10c11e0455bdc21d90495\"\n  },\n  {\n    \"url\": \"resources/dia_da.txt\",\n    \"revision\": \"2c9232e5e9cef27da9172a187a933115\"\n  },\n  {\n    \"url\": \"resources/dia_de.txt\",\n    \"revision\": \"112d8443021165e8c7d9994f97ddaf48\"\n  },\n  {\n    \"url\": \"resources/dia_el.txt\",\n    \"revision\": \"cbeb9bcc4a8a37ab0cce55d996c3b627\"\n  },\n  {\n    \"url\": \"resources/dia_eo.txt\",\n    \"revision\": \"c4d5feab9f7ce5d22f8487f4fc2bc585\"\n  },\n  {\n    \"url\": \"resources/dia_es.txt\",\n    \"revision\": \"d0d9810976aeb9b9fef0118aca1c3815\"\n  },\n  {\n    \"url\": \"resources/dia_et.txt\",\n    \"revision\": \"5303fb8a71bf11794f3cbe9324fd3d2d\"\n  },\n  {\n    \"url\": \"resources/dia_eu.txt\",\n    \"revision\": \"552e57dff8a9233098009af48380f066\"\n  },\n  {\n    \"url\": \"resources/dia_fa.txt\",\n    \"revision\": \"a2bd813de7a95f881a1ac941fab6ea29\"\n  },\n  {\n    \"url\": \"resources/dia_fi.txt\",\n    \"revision\": \"dbbd5d0126ad8f43fe18735f4f65b604\"\n  },\n  {\n    \"url\": \"resources/dia_fil.txt\",\n    \"revision\": \"0efbb4b0779c2314496e2209272f1729\"\n  },\n  {\n    \"url\": \"resources/dia_fr.txt\",\n    \"revision\": \"60a1a016d2ba9f171848b48a3b4baadd\"\n  },\n  {\n    \"url\": \"resources/dia_gl.txt\",\n    \"revision\": \"089dd7084f23978ef1696e674bcc4cab\"\n  },\n  {\n    \"url\": \"resources/dia_gu.txt\",\n    \"revision\": \"e00b05d0b7fe33e23a8c589c8226d2a7\"\n  },\n  {\n    \"url\": \"resources/dia_he.txt\",\n    \"revision\": \"bba5f189a07b266f40dfed938b0068c6\"\n  },\n  {\n    \"url\": \"resources/dia_hi.txt\",\n    \"revision\": \"d580a9d0f5545626c9cc37daafc51a3c\"\n  },\n  {\n    \"url\": \"resources/dia_hr.txt\",\n    \"revision\": \"97deaf0afd81d692f005dc02f329ac88\"\n  },\n  {\n    \"url\": \"resources/dia_hu.txt\",\n    \"revision\": \"465d05499416a9adeb023313a8160424\"\n  },\n  {\n    \"url\": \"resources/dia_id.txt\",\n    \"revision\": \"228d2a20f4627360cfb07e25aea78104\"\n  },\n  {\n    \"url\": \"resources/dia_it.txt\",\n    \"revision\": \"da633c90cadf73d0df46991b5586df54\"\n  },\n  {\n    \"url\": \"resources/dia_ja.txt\",\n    \"revision\": \"95dcedfc13dd97fb2ae63184d3ae14fc\"\n  },\n  {\n    \"url\": \"resources/dia_kn.txt\",\n    \"revision\": \"965dc84ec662842d0c313674632a5544\"\n  },\n  {\n    \"url\": \"resources/dia_ko.txt\",\n    \"revision\": \"e49ee6d9c9bbc77276cb85c97069b919\"\n  },\n  {\n    \"url\": \"resources/dia_lt.txt\",\n    \"revision\": \"51465381c456510952d6269952dced5e\"\n  },\n  {\n    \"url\": \"resources/dia_lv.txt\",\n    \"revision\": \"3ac8dd9a8bb6e7ec1143ab46cd70b96a\"\n  },\n  {\n    \"url\": \"resources/dia_ml.txt\",\n    \"revision\": \"11910b85c2616d84d97651e97cf11d7a\"\n  },\n  {\n    \"url\": \"resources/dia_mr.txt\",\n    \"revision\": \"8497141bca86742111017248e26a07ea\"\n  },\n  {\n    \"url\": \"resources/dia_ms.txt\",\n    \"revision\": \"ee74d690582d04322dba57dbc7224c99\"\n  },\n  {\n    \"url\": \"resources/dia_my.txt\",\n    \"revision\": \"f2bb9f811ec054499a5eca5add259a96\"\n  },\n  {\n    \"url\": \"resources/dia_nl.txt\",\n    \"revision\": \"35a2a6ece18b1c59893925d547425261\"\n  },\n  {\n    \"url\": \"resources/dia_no.txt\",\n    \"revision\": \"b0b4fe8a1c31db304d431935cdab14b8\"\n  },\n  {\n    \"url\": \"resources/dia_pl.txt\",\n    \"revision\": \"c86f5e75805a2903734a1c9a7a81d63b\"\n  },\n  {\n    \"url\": \"resources/dia_pt-br.txt\",\n    \"revision\": \"2eee01639ff6775e24220fbfa3c9c788\"\n  },\n  {\n    \"url\": \"resources/dia_pt.txt\",\n    \"revision\": \"63407d1bd46853ff9e3ed3b9ace9602f\"\n  },\n  {\n    \"url\": \"resources/dia_ro.txt\",\n    \"revision\": \"e2e5f6a838ae71143e6c50b290af7bb1\"\n  },\n  {\n    \"url\": \"resources/dia_ru.txt\",\n    \"revision\": \"38de6a4f45437cdd66dc3decc48c8841\"\n  },\n  {\n    \"url\": \"resources/dia_si.txt\",\n    \"revision\": \"f2bb9f811ec054499a5eca5add259a96\"\n  },\n  {\n    \"url\": \"resources/dia_sk.txt\",\n    \"revision\": \"58fffaadfebfec4deafcfc5c20178b57\"\n  },\n  {\n    \"url\": \"resources/dia_sl.txt\",\n    \"revision\": \"a66ac8feda2a580540b7b840603c1e23\"\n  },\n  {\n    \"url\": \"resources/dia_sr.txt\",\n    \"revision\": \"9cb339e7ca6db727cbcec145b01a7bdb\"\n  },\n  {\n    \"url\": \"resources/dia_sv.txt\",\n    \"revision\": \"84338c7bffb013c00b71ee6868a55b9f\"\n  },\n  {\n    \"url\": \"resources/dia_sw.txt\",\n    \"revision\": \"476b03b2ee388853d15f8f7924a10e40\"\n  },\n  {\n    \"url\": \"resources/dia_ta.txt\",\n    \"revision\": \"ef879e2a9c097abe6b578a22df399257\"\n  },\n  {\n    \"url\": \"resources/dia_te.txt\",\n    \"revision\": \"efd7ac431c2163371f13f1e0cdb05aaa\"\n  },\n  {\n    \"url\": \"resources/dia_th.txt\",\n    \"revision\": \"1ab6b69b33a88ed897c96a885165a566\"\n  },\n  {\n    \"url\": \"resources/dia_tr.txt\",\n    \"revision\": \"4c1bae6ee6079bf94c4e7e86a49b2684\"\n  },\n  {\n    \"url\": \"resources/dia_uk.txt\",\n    \"revision\": \"612e5ccdf38b00749ff4926cd1ea2b3f\"\n  },\n  {\n    \"url\": \"resources/dia_vi.txt\",\n    \"revision\": \"757058bddd335a0c0bc37829a2b2ff2a\"\n  },\n  {\n    \"url\": \"resources/dia_zh-tw.txt\",\n    \"revision\": \"838b0f7bd695a5a2a0c5ebbd83d33296\"\n  },\n  {\n    \"url\": \"resources/dia_zh.txt\",\n    \"revision\": \"7736de1c10669ab8f284558fb5dc434c\"\n  },\n  {\n    \"url\": \"favicon.ico\",\n    \"revision\": \"fab2d88b37c72d83607527573de45281\"\n  },\n  {\n    \"url\": \"images/manifest.json\",\n    \"revision\": \"389fa448cb99794bece27ffcb216abee\"\n  },\n  {\n    \"url\": \"images/logo.png\",\n    \"revision\": \"89630b64b911ebe0daa3dfe442087cfa\"\n  },\n  {\n    \"url\": \"images/drawlogo.svg\",\n    \"revision\": \"4bf4d14ebcf072d8bd4c5a1c89e88fc6\"\n  },\n  {\n    \"url\": \"images/drawlogo48.png\",\n    \"revision\": \"8b13428373aca67b895364d025f42417\"\n  },\n  {\n    \"url\": \"images/drawlogo-gray.svg\",\n    \"revision\": \"0aabacbc0873816e1e09e4736ae44c7d\"\n  },\n  {\n    \"url\": \"images/drawlogo-text-bottom.svg\",\n    \"revision\": \"f6c438823ab31f290940bd4feb8dd9c2\"\n  },\n  {\n    \"url\": \"images/default-user.jpg\",\n    \"revision\": \"2c399696a87c8921f12d2f9e1990cc6e\"\n  },\n  {\n    \"url\": \"images/logo-flat-small.png\",\n    \"revision\": \"4b178e59ff499d6dd1894fc498b59877\"\n  },\n  {\n    \"url\": \"images/apple-touch-icon.png\",\n    \"revision\": \"73da7989a23ce9a4be565ec65658a239\"\n  },\n  {\n    \"url\": \"images/favicon-16x16.png\",\n    \"revision\": \"1a79d5461a5d2bf21f6652e0ac20d6e5\"\n  },\n  {\n    \"url\": \"images/favicon-32x32.png\",\n    \"revision\": \"e3b92da2febe70bad5372f6f3474b034\"\n  },\n  {\n    \"url\": \"images/android-chrome-196x196.png\",\n    \"revision\": \"f8c045b2d7b1c719fda64edab04c415c\"\n  },\n  {\n    \"url\": \"images/android-chrome-512x512.png\",\n    \"revision\": \"959b5fac2453963ff6d60fb85e4b73fd\"\n  },\n  {\n    \"url\": \"images/delete.png\",\n    \"revision\": \"5f2350f2fd20f1a229637aed32ed8f29\"\n  },\n  {\n    \"url\": \"images/droptarget.png\",\n    \"revision\": \"bbf7f563fb6784de1ce96f329519b043\"\n  },\n  {\n    \"url\": \"images/help.png\",\n    \"revision\": \"9266c6c3915bd33c243d80037d37bf61\"\n  },\n  {\n    \"url\": \"images/download.png\",\n    \"revision\": \"35418dd7bd48d87502c71b578cc6c37f\"\n  },\n  {\n    \"url\": \"images/logo-flat.png\",\n    \"revision\": \"038070ab43aee6e54a791211859fc67b\"\n  },\n  {\n    \"url\": \"images/google-drive-logo.svg\",\n    \"revision\": \"5d9f2f5bbc7dcc252730a0072bb23059\"\n  },\n  {\n    \"url\": \"images/onedrive-logo.svg\",\n    \"revision\": \"3645b344ec0634c1290dd58d7dc87b97\"\n  },\n  {\n    \"url\": \"images/dropbox-logo.svg\",\n    \"revision\": \"e6be408c77cf9c82d41ac64fa854280a\"\n  },\n  {\n    \"url\": \"images/github-logo.svg\",\n    \"revision\": \"a1a999b69a275eac0cb918360ac05ae1\"\n  },\n  {\n    \"url\": \"images/gitlab-logo.svg\",\n    \"revision\": \"0faea8c818899e58533e153c44b10517\"\n  },\n  {\n    \"url\": \"images/trello-logo.svg\",\n    \"revision\": \"006fd0d7d70d7e95dc691674cb12e044\"\n  },\n  {\n    \"url\": \"images/osa_drive-harddisk.png\",\n    \"revision\": \"b954e1ae772087c5b4c6ae797e1f9649\"\n  },\n  {\n    \"url\": \"images/osa_database.png\",\n    \"revision\": \"c350d9d9b95f37b6cfe798b40ede5fb0\"\n  },\n  {\n    \"url\": \"images/google-drive-logo-white.svg\",\n    \"revision\": \"f329d8b1be7778515a85b93fc35d9f26\"\n  },\n  {\n    \"url\": \"images/dropbox-logo-white.svg\",\n    \"revision\": \"4ea8299ac3bc31a16f199ee3aec223bf\"\n  },\n  {\n    \"url\": \"images/onedrive-logo-white.svg\",\n    \"revision\": \"b3602fa0fc947009cff3f33a581cff4d\"\n  },\n  {\n    \"url\": \"images/github-logo-white.svg\",\n    \"revision\": \"537b1127b3ca0f95b45782d1304fb77a\"\n  },\n  {\n    \"url\": \"images/gitlab-logo-white.svg\",\n    \"revision\": \"5fede9ac2f394c716b8c23e3fddc3910\"\n  },\n  {\n    \"url\": \"images/trello-logo-white-orange.svg\",\n    \"revision\": \"e2a0a52ba3766682f138138d10a75eb5\"\n  },\n  {\n    \"url\": \"images/logo-confluence.png\",\n    \"revision\": \"ed1e55d44ae5eba8f999aba2c93e8331\"\n  },\n  {\n    \"url\": \"images/logo-jira.png\",\n    \"revision\": \"f8d460555a0d1f87cfd901e940666629\"\n  },\n  {\n    \"url\": \"images/clear.gif\",\n    \"revision\": \"db13c778e4382e0b55258d0f811d5d70\"\n  },\n  {\n    \"url\": \"images/spin.gif\",\n    \"revision\": \"487cbb40b9ced439aa1ad914e816d773\"\n  },\n  {\n    \"url\": \"images/checkmark.gif\",\n    \"revision\": \"ba764ce62f2bf952df5bbc2bb4d381c5\"\n  },\n  {\n    \"url\": \"images/hs.png\",\n    \"revision\": \"fefa1a03d92ebad25c88dca94a0b63db\"\n  },\n  {\n    \"url\": \"images/aui-wait.gif\",\n    \"revision\": \"5a474bcbd8d2f2826f03d10ea44bf60e\"\n  },\n  {\n    \"url\": \"mxgraph/css/common.css\",\n    \"revision\": \"618b42f0bde0c7685e04811c25dc2b3e\"\n  },\n  {\n    \"url\": \"mxgraph/images/expanded.gif\",\n    \"revision\": \"2b67c2c035af1e9a5cc814f0d22074cf\"\n  },\n  {\n    \"url\": \"mxgraph/images/collapsed.gif\",\n    \"revision\": \"73cc826da002a3d740ca4ce6ec5c1f4a\"\n  },\n  {\n    \"url\": \"mxgraph/images/maximize.gif\",\n    \"revision\": \"5cd13d6925493ab51e876694cc1c2ec2\"\n  },\n  {\n    \"url\": \"mxgraph/images/minimize.gif\",\n    \"revision\": \"8957741b9b0f86af9438775f2aadbb54\"\n  },\n  {\n    \"url\": \"mxgraph/images/close.gif\",\n    \"revision\": \"8b84669812ac7382984fca35de8da48b\"\n  },\n  {\n    \"url\": \"mxgraph/images/resize.gif\",\n    \"revision\": \"a6477612b3567a34033f9cac6184eed3\"\n  },\n  {\n    \"url\": \"mxgraph/images/separator.gif\",\n    \"revision\": \"7819742ff106c97da7a801c2372bbbe5\"\n  },\n  {\n    \"url\": \"mxgraph/images/window.gif\",\n    \"revision\": \"fd9a21dd4181f98052a202a0a01f18ab\"\n  },\n  {\n    \"url\": \"mxgraph/images/window-title.gif\",\n    \"revision\": \"3fb1d6c43246cdf991a11dfe826dfe99\"\n  },\n  {\n    \"url\": \"mxgraph/images/button.gif\",\n    \"revision\": \"00759bdc3ad218fa739f584369541809\"\n  },\n  {\n    \"url\": \"mxgraph/images/point.gif\",\n    \"revision\": \"83a43717b284902442620f61bc4e9fa6\"\n  }\n], {\n  \"ignoreURLParametersMatching\": [/.*/]\n});\n\n\n\n\n\n\n\n\n"],"names":["self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision","ignoreURLParametersMatching"],"mappings":"szBAmBAA,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACN,IAWHC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,qCAEb,CACDC,4BAA+B,CAAC"}
\ No newline at end of file

programming_language: Jupyter Notebook
filename: teams.html
change_type: ModificationType.MODIFY
diff: @@ -73,7 +73,8 @@
 		}
 		
 		// Global variable for desktop
-		var mxIsElectron = navigator.userAgent != null && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1;
+		var mxIsElectron = navigator.userAgent != null && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1 && 
+							navigator.userAgent.indexOf(' draw.io/') > -1;
 
 		// Redirects page if required
 		if (urlParams['dev'] != '1')

programming_language: JavaScript
filename: vsdxImporter.html
change_type: ModificationType.MODIFY
diff: @@ -3,65 +3,11 @@
 <head>
 <meta charset="UTF-8">
 <title>VSDX Importer</title>
+<script type="text/javascript" src="js/vsdxImporter.js"></script>
 <script type="text/javascript" src="js/app.min.js"></script>
 <script type="text/javascript" src="js/extensions.min.js"></script>
-<script type="text/javascript">
-  function doImport(vsdxBuff, callback, error, file, customParam)
-  {
-	EditorUi.prototype.createUi = function(){};
-	EditorUi.prototype.addTrees = function(){};
-	EditorUi.prototype.updateActionStates = function(){};
- 	var editorUi = new EditorUi();
- 	var blob = file? file : new Blob([vsdxBuff], {type: 'application/octet-stream'});
-
- 	editorUi.importVisio(blob, callback, error, file? file.name : null, customParam);		
-  };
-
-  try
-  {
-	electron.registerMsgListener('import', (vsdxBuff) => 
-	{
-	 	doImport(vsdxBuff, function(xml)
-		{
-			electron.sendMessage('import-success', xml);
-		},
-		function()
-		{
-			electron.sendMessage('import-error');
-		});
-	});
-  }
-  catch(e) {} //Ignore
-</script>
 </head>
 <body>
 	<input type="file" id="fileUpload">
-	<script type="text/javascript">
-		document.getElementById('fileUpload').addEventListener('change', function()
-		{
-			const curFiles = this.files;
-
-			if(curFiles.length > 0) 
-			{
-				function createDoneDiv(msg)
-				{
-					var doneDiv = document.createElement('div');
-					doneDiv.id = 'doneDiv';
-					doneDiv.innerHTML = msg;
-					document.body.appendChild(doneDiv);
-				};
-				
-				doImport(null, function(xml)
-				{
-					window.importResXML = xml;
-					createDoneDiv('success');
-				}, function(err)
-				{
-					console.log(err)
-					createDoneDiv('error');
-				}, curFiles[0], window.customParam);
-			}
-		});
-	</script>
 </body>
 </html>
\ No newline at end of file

programming_language: HTML